|
|
源文件中_Interface文件夹下WndField.cpp文件3 z& @, o+ _" U3 p2 P: Y; R. ]# ?% u' z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ g: S4 h* v0 v7 b2 y1 U$ r
, z& }6 o) J8 d/ y* S3 T& z2 ]struct sItem# E' v( I$ D6 s
{
: }; [0 r; X7 s1 QDWORD dwId;
, S6 s6 P% _0 u! _9 L% EDWORD dwKind2;; m; E0 K3 L2 P( Z) t2 b) ^
DWORD dwItemId;
/ o- [3 d X; B4 ] N1 YBYTE nIndex;
3 y) c) { X; J5 O/ }sItem(){
7 |0 b) \7 G; a* s0 [& X& ^ dwId = dwKind2 = dwItemId = nIndex = 0;
& j" _1 C9 @4 o! W}; L1 q' {) F; }
bool operator < (const sItem p2)
6 h: i7 D3 c \2 J5 g) M{7 h0 B9 S% `/ k* t. z2 c
if (dwKind2 == p2.dwKind2)8 K: h$ B0 r, j0 w3 R
{
$ t* E* P. {) i3 q5 | return dwItemId < p2.dwItemId;
6 f( x; m# b8 F! j. N& \2 Z- g* P }else{
- {6 `! |& x: }& t$ { return dwKind2 < p2.dwKind2;
% q0 d. k" p# r0 T3 j1 z }* @9 Y, s. C) T) K9 H
}9 v2 g# r) C' y, |9 c" K- \
}; Q; V* C1 P' r" t5 h4 b2 z
class CInventorySort q* w* c) p* ?, g9 a" a" n
{8 B3 A8 g6 t/ {
public:$ p7 D7 a0 n! |, |, ~4 j3 H
CInventorySort(). I3 A: l4 L& q
{
9 P4 ^4 _0 ^- b2 c: Q) B m_dwPos = 0;6 t4 |$ I5 _4 c; k& e% [: l) U
}
* w0 p* t! z' U4 j& ?~CInventorySort(){}
* ~* y# ?$ m2 Y. w; l' h# dprivate:$ J, Y$ a! N" z+ T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& `# d. _& q# h) J* A: c5 `
DWORD m_dwPos;0 Y$ T; t* }' s, ~7 L# E
public:
" M+ E$ G' |. l& m& fvoid Add(BYTE nIndex)& L& V; H% X" ^) b6 A+ ~* h$ k
{# G1 r9 ]# v8 a G( n
if (m_dwPos >= MAX_INVENTORY)
, o. {0 J; [" d! d! k8 K3 D {
& k( m) X4 n6 E# W5 u& T- q! ~ return;
! B$ ~, G( o: o0 _. Z }* r( r; u) T: j1 @0 B l D3 J
m_Item[m_dwPos].nIndex = nIndex;
2 v, c# _& {: Q( F1 w F7 e" Q: q m_Item[m_dwPos].dwId = m_dwPos;
/ o+ l5 W$ r4 ]/ d, P m_dwPos++;
; Z) n2 V, p& b. {9 z+ r}
! d' O* C9 \% J" |0 x$ ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( X2 q% n1 f+ V# J{$ e8 Q# d5 N) Y1 ]. X7 g W
for (int i=0;i<MAX_INVENTORY;i++)
3 Y( T3 ~' C8 ^) \/ F- | {5 T1 |7 b1 H. }7 o' O
if (m_Item.dwId == dwId)
3 X. K: I# ^2 L, l k/ G- j% | {
7 @; i0 l' |* ^. X return m_Item.nIndex;
8 U: F9 k3 Z2 P6 h% k1 | }8 C6 r9 [+ ~" f I
}, T3 i8 P+ {* z8 P* @. [5 R, D
return 255;
/ ]8 G' a/ ~3 U9 J1 B}! U6 a$ G+ ` g. Y5 o4 F; |3 M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 i5 ?- _ F& J% y: H7 r
{% ~6 y7 d' [. h/ F8 q$ V
BYTE nTmp = 0;
$ z; e3 Y" Y) n* A bool bDest = false,bSrc = false;+ q3 \4 X6 n7 N' l$ T
for (int i=0;i<MAX_INVENTORY;i++)! c8 u7 K; X6 y5 J. I' s4 a0 H+ x
{; o. N5 n2 i. r- E+ T
if (dwSrcId == m_Item.dwId)% w, a) i9 H) M1 o/ a3 O( d
{
. s$ D1 o* J6 o. T, B //id相等 则 改变对应的dest和src
7 s! x1 k+ K' ]5 M, _; O$ p8 y% v nTmp = m_Item.nIndex;1 I- L3 L$ M% W' L& D; _0 o0 K$ k
m_Item.nIndex = dest;# Z: l# V. X+ j9 v
}
8 v* ]: b3 z/ F }. n: w6 A) ?+ [# I2 r
//临时数据保存完毕,交换开始
, ?5 h7 x" l6 A! p* M# E for (int i=0;i<MAX_INVENTORY;i++)
' Z+ }" A: v9 H1 M# h {' c {( J4 L, t; u C: [ H5 B
if (dest == m_Item.nIndex)
/ |' c$ d d0 H q8 a* h {
* l7 d& y. |( \ m //id相等 则 改变对应的dest和src
- ?, i) v6 w H+ \6 F2 x m_Item.nIndex = nTmp;5 T8 d9 X \( P6 k/ W* J% q
}
4 x( u4 w8 g4 H6 T" l- ]3 G/ d9 i }
$ L ?+ y7 {+ M. s}6 W- r+ Q% ~" {& O R6 b! n
};
6 f& l. ?1 x9 U; n, }) o( @-------------------------------------------------------------------------5 E7 ? f/ H+ {( J1 ]
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 ^" Z/ p8 C0 ^ V( |7 V9 |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. b: W- c4 ~- f* _紧靠其上添加:
9 ]6 g+ A. _# d; Y4 k. ^if( pWndBase == &m_wndMenu )( T2 D* ~- B3 [8 s9 {! \
{
; D3 |5 X/ c5 N8 i% L2 U; z- \ switch( nID )" Q9 {0 e% i" X) o/ |3 i
{
! W* b9 k! w! W* Q6 d case 2:
6 F. X. v2 O6 d, i' f3 p Y {
/ B: Q: D- a, c) @( h5 {( v \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: h: k- `/ d V$ ~" U) X7 E9 H! @) M
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, t3 e1 }, O5 i$ F" D {$ a% [3 e3 v( z! B+ {7 e
break;+ f' T9 G( p4 f3 ~
}# }" T( |% {) U- ^- X6 O
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) c" v, [5 n) u9 T; p# v1 }, L% }
{! M O3 p! v5 `# b n- w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# Z2 @$ W" H/ @4 i if( !pItemElem )! E9 k# ?, L3 F4 L E! i) _5 X) |
continue;
6 j4 L# }4 N+ X) w+ U& U if(pItemElem->GetExtra() > 0)* M( ^, R& L4 T2 D# H
continue;+ t5 T) `. u5 B' T
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * Q M& y& q* X W5 o5 P0 J0 \
continue;
0 |0 h9 u% e% S" @. k0 `6 H% E if( g_pPlayer->IsUsing( pItemElem ) )- K2 _3 M8 E4 ^- v. n& e
continue;2 l- Q* l0 E4 ?0 d# ]; W3 O
if( pItemElem->IsUndestructable() == TRUE )4 G% N4 i' Q, p/ h' g$ R( E
{+ i- p3 |+ F& C: |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 M! f, C3 d, o( P% t& @
continue;' Z& W d2 x/ ]3 h- ~' L
}' U; k1 G, c) n0 k; u o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; Z$ s& p8 U& C+ ~ q) Z Q }8 ]7 J. h) _: }! x
break;4 {4 f/ J( u. Y' K7 L0 r8 U
}
/ F. k9 S1 r1 i case 1:" C7 Q1 C" T9 J/ W
{
: k' r1 K# V* `; z$ c; ~% f+ c //整理背包
9 s* w* l( p/ m* a' C, L g b% E //////////////////////////////////////////////////////////////////////////
w! V+ {1 \: |& C# ~ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 K' V% b* Y! E
//////////////////////////////////////////////////////////////////////////% f j: s$ {8 i% i/ o/ W
//////////////////////////////////////////////////////////////////////////6 s" J, w* M" v- Z! L4 T
CInventorySort* pInvSort = new CInventorySort;
& P2 v, U+ N$ i" _/ ~+ a5 x1 J [" c1 A vector <sItem> vItem;, \9 v# a) J1 \+ ]$ f
vItem.resize(MAX_INVENTORY);//初始化大小
% q& ^. P2 x) D6 O& C7 [5 A //////////////////////////////////////////////////////////////////////////
7 s- K! z" \4 Q6 }4 m //填充数据
& d6 M# O8 H. o- R for (int i=0;i<MAX_INVENTORY;i++)% Y T; E& y- ^3 t
{
; H' P$ A8 u9 n8 `9 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) ?3 [! e5 w3 P& C- R if (!pItemElem)
: ~, B( e, l0 m- X) v {6 |7 w) a4 p) z( O: I2 A8 p
vItem.dwKind2 = 0xffffffff;
+ b* q/ O; I! Y. i( n vItem.dwItemId = 0xffffffff;4 [9 g0 ~" O( R5 H! S7 E* h
vItem.nIndex = i;! A; x6 u6 t! [4 P7 C
}else {2 U. F" J" j; ? J7 n! t5 i) _
ItemProp* pProp = pItemElem->GetProp();
. G1 w1 { p5 V: q1 L9 v# |7 m: A vItem.dwKind2 = pProp->dwItemKind2;3 A( Z% F P" |% P1 Z4 h
vItem.dwItemId = pItemElem->m_dwItemId;6 p9 C* K" Z" m
vItem.nIndex = i;
' E5 X8 K0 a* Z' M$ c6 N& }7 Q }# i) Y& R# K1 w4 P3 b8 W$ d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 U% R" h5 s% d3 I( ^9 k }! P o5 i8 @4 \6 z: c% F
//////////////////////////////////////////////////////////////////////////
) x9 `, j! [0 E4 y: x' V' B+ \0 C sort(vItem.begin(),vItem.end());//排序
2 Q( u# _8 ~$ k, D" G$ t$ @ /////////////////////////////////////////////////////////////////////////// z3 z6 M# v+ @0 x+ b, l
//交换
% m" b! X) I$ j X1 ?* \: C7 r for (size_t i=0;i<vItem.size();i++)
# |2 p0 x M, b% I) Q, F {4 o1 I5 u7 q8 J& B e# `
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! R+ M$ l; Z( H' b o" o- T
pInvSort->Add(vItem.nIndex);+ d% H0 |* ]( x! o3 W. w
}. @' f3 }8 C. }
BYTE nDestPos = 0;
+ Z1 m; U9 U: w for (int i=0;i<MAX_INVENTORY;i++)
) I: U' } r, I, g' y* d: I {1 ~( `" U6 u$ \; j$ s' o! Q% J& j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% ^* n* U. \1 {# d: K
if (pItemElem)
?* q+ @$ D1 q5 ^7 m {2 d/ R2 S' c# C* a
if (IsUsingItem(pItemElem))( g( D% @ g) e+ u4 ]% J6 Y% \. _
{8 F1 @+ O c% i' F) ~% j
//这个位置无法放
% F# R6 u" }) @+ \# S# {- M7 I nDestPos++;6 G* `% V3 Y3 g) i
}2 n& s1 N3 h6 U- |* g0 a
}
* C* E) ]4 _$ S$ [1 F5 L! N BYTE nSrc = pInvSort->GetItemSrc(i);
0 k; J5 ~! S4 {% |$ v; E& I" ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. n' A1 A' q3 I1 d! H
if (pItemElem)
. Z. x# {1 h7 R! f2 a! x1 w {$ W1 P3 m- S+ u) T! J/ t6 @
if (IsUsingItem(pItemElem))
; s/ z8 i$ `6 N {
$ L3 T0 \7 b. V) P+ J A/ R //这个道具无法移动,跳过4 p9 S" V8 [, X3 u6 t
continue;
7 T' s7 V( f5 ^( b, V }
- C1 p1 _* C, o* ?! Y6 C( y) a }else{
, _5 V) \4 m1 z9 p //空位置 不用动# j7 C/ T N+ o( F$ }
continue;
: ]& Q- {" L' M3 ]2 i [5 w }
0 X) q6 P; b% E: ?" T- E //////////////////////////////////////////////////////////////////////////1 ^. T+ N) K- Q e" s: e# |; J* v: i9 m
//开始移动$ I# l6 c5 X4 o$ @
if (nSrc == nDestPos)
6 {: ^/ \6 A9 l z- F! C2 o {
3 j8 R$ s1 O6 N; e2 p //原地不动( a3 `7 }6 D- }. M
nDestPos++;
2 B6 k; E" S$ A, {% K continue;1 p0 Q; G4 J1 \, e" ?& J
}# R# V% P( z% v$ _% m1 V5 W
pInvSort->MoveItem(i,nDestPos);: ~5 I* M% p/ @# s. q3 \" H
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* E9 g# w6 z; j6 f5 C Sleep(5);4 M, N. j$ | n3 m* x: @
//Error("移动 - %d->%d",nSrc,nDestPos);) H( b; z, W1 q7 F3 p% R0 d
nDestPos++;
3 ~5 p) d1 r* { }6 C I* |0 Z4 q. s9 b
//取第一个元素的信息
5 T. o3 @, v$ Y* I! v /*
$ d( A/ Z8 L7 {7 o& m4 e l, ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; Q B5 H. X4 k5 L {
$ y. l* u0 l1 o- b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. F; O8 U% {0 n9 m2 F! `5 R g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 p* I2 u! q8 j" Z5 i; l1 z; s }
6 U2 p! x5 Y4 \( |' G/ E" h1 [ */
' g+ }9 } g& n" {% z //////////////////////////////////////////////////////////////////////////
) H' s) ^. ~5 Q* b2 W3 M break;8 {6 G& j/ h& R& t3 l5 w# e: ]
}7 m( V' v: J) K0 {+ G" F8 y
}
; Y5 Y% z: f( d) r5 m}; n2 K4 V3 m* q6 e+ N
m_wndMenu.SetVisible(FALSE);
& j& t/ ?( p- H# c s4 z9 k H/ E# k% F
--------------------------------------------------------------------------------------------------------
8 w2 H# _" k8 K; Q6 j$ H9 `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 u5 L9 f0 g2 w4 ~{
{/ O/ H, j& P4 wBaseMouseCursor();
, u% Z6 W8 Y- D: y# T5 @+ }0 ^) u}
- _% |! L: E' K+ X& y在其下添加:
/ s1 H, }+ t [6 w: l6 svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). v2 T# V0 z* V) X, @
{
7 S; d2 q& J+ w" {- Tm_wndMenu.DeleteAllMenu();
* G, a* l* b+ d' Gm_wndMenu.CreateMenu(this);
% u4 V w" d% H9 [' V Om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, Q; H, q. Q# |% o% J6 r2 A* W. i
; G" H0 e% @; ~$ _& X9 Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! ]- U5 I: u' q! W x3 n* J$ b; B{/ x, e) Z) X' y3 [4 k# b% @
//P以上级别才可以删除所有道具9 E' W M' `" J3 b' @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 Q% ~) Z3 ~; X2 d/ I6 Y/ J
}
3 V) h) @4 |/ L4 m; @5 a' k" ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) ?: u( S8 {- x9 x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' O' i4 o' A+ `) h, F1 U5 ~& @m_wndMenu.SetFocus();
7 l+ L$ Z% Q: v) r; u}
" |+ c2 H E' w. _# K9 c" h------------------------------------------------------------------------------------------------------------
1 t/ o9 o; z& _; m& {*************************
* X3 r! V1 s& w. H, [# UWndField.h文件
7 x. S) h' m, \ m7 y*************************
# e) {. ]5 a( A4 d, u5 t搜索:BOOL m_bReport;+ \% _+ Q0 o/ P0 Z9 J0 s. g
其后添加:
* N5 G& x+ L3 x, g9 gCWndMenu m_wndMenu;9 m# c. m: q1 R# E1 [3 k6 M2 o
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! [& L/ X* S" j5 y! F其后添加:
7 D' M) ?4 A. ?( `9 E" u" W5 lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
! h6 b- e! | R7 }4 W* s
. r8 K- M# q: m8 \( _: ^
1 m' E9 p) V" r |
|