|
|
源文件中_Interface文件夹下WndField.cpp文件
% o7 z% f. i# F: ~/ M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), d& J0 c" L7 k. x* L
- C* b! P( Y9 a- K
struct sItem" M4 j/ D8 x, ]- m- j
{
. U- B; z, K9 e9 ODWORD dwId;
. d1 D; R7 F9 g V! o. i/ }* w" R9 dDWORD dwKind2;
& U- Z3 }+ g' qDWORD dwItemId;
) |: {2 `" [7 F0 dBYTE nIndex;: R6 u# `6 R6 R8 y7 \7 X- `' O
sItem(){, z9 w6 f3 @7 R% j. m
dwId = dwKind2 = dwItemId = nIndex = 0;
8 G: g+ d1 f8 `4 v7 V2 L+ u' Z} b& q& W9 V3 ]2 P) F
bool operator < (const sItem p2)4 C1 ]2 r4 m0 j# l; M- l
{+ z# }5 g9 m; m4 e; z3 n3 X
if (dwKind2 == p2.dwKind2)
5 \ s N: {% m5 Y& T* B; k {' f4 U" v# M4 i7 m1 ~+ ~
return dwItemId < p2.dwItemId;4 o# Z9 x) N3 k5 E) W |) D+ d
}else{
# @6 \; h; Y( _( z; ?; e2 q return dwKind2 < p2.dwKind2;
8 v9 U1 D* @8 \7 s }7 m$ r( [" o2 F! j) I" F
}
1 G3 h3 |, ^9 Q) I0 w' J! K};
8 X2 A: H; X" R+ e% c8 bclass CInventorySort
B0 |/ K7 o3 p# x9 A0 `, ~6 ^{! U2 L, T% l. X, [' C$ p2 Y: t, Q
public:9 g& P+ o( u7 S- E
CInventorySort(); d- H3 H4 g* p2 c4 P& \7 u; x+ N' ~
{4 G% L2 ^. c) p' X& @" K
m_dwPos = 0;
0 d, L% u* p7 ?3 ] ~1 }6 v}4 e, L9 c: o- h+ \
~CInventorySort(){}; O L. e% ^ d6 ?/ \
private:
, p: P! g& t9 K9 FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 u% P# |$ T0 i0 ~
DWORD m_dwPos;$ S% W0 r/ g3 M7 U; C4 Q% X5 C
public:
% E" ]0 u" A7 ^6 G5 ~9 `( Zvoid Add(BYTE nIndex)/ _8 |2 p! g0 S+ k
{- K0 G. x# O" e$ R% i
if (m_dwPos >= MAX_INVENTORY)4 U4 h; i8 W8 G7 z7 S
{
6 T: W4 }% U+ ? return;
$ d/ D- n; ]9 B7 C: ^ }
2 z4 J- N |% S+ E7 c+ ~ m_Item[m_dwPos].nIndex = nIndex;
* Y) E+ Q7 f9 h m_Item[m_dwPos].dwId = m_dwPos;+ P" \4 p, z+ g) @: w! L" V) M; X" j- {
m_dwPos++;
6 t& \" V2 j; ]; O8 ^3 z8 U}# }) T" h, I- M9 t+ X7 Q* o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% E& b- y) k) M5 v, \{/ O( t- f; t" @/ X' f- H* _9 Q4 @
for (int i=0;i<MAX_INVENTORY;i++)% |7 R7 x. v# w2 v/ z- F/ f
{% K2 F0 G$ p3 h G1 X1 X% k% _6 l
if (m_Item.dwId == dwId)" N& {# T2 f3 G6 n
{, F3 C5 O9 T! u4 O0 E
return m_Item.nIndex;) V s" l& Q* b2 k& ]
}* l# ], V" s B' _. K* i
}$ J5 t- ?) l! U7 m% @
return 255;# ^3 G0 x+ C+ E
}' ]. p- \5 K- |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, s, g( ~' }8 u4 C6 b- B8 ~5 M( G{
0 t, x5 z3 }' g& Z/ t. Q8 r' U$ M# a BYTE nTmp = 0;" R+ U7 \0 n7 U
bool bDest = false,bSrc = false;
7 D) @; m! x6 @' g7 J5 [7 d- B7 W for (int i=0;i<MAX_INVENTORY;i++)
/ v ^' d- M, e" V# T1 {, i. u {
" @4 c6 q) V$ S+ ] if (dwSrcId == m_Item.dwId)
2 F: b3 L$ F. ]4 L) ^$ ~3 v, ] {7 M# d/ h1 i# W; Z6 N
//id相等 则 改变对应的dest和src
1 [; _2 Y. ~7 x5 J nTmp = m_Item.nIndex;
. i' h& j t, F; _- N1 N m_Item.nIndex = dest;8 D1 C" ^2 e( m& ^/ k: ^7 D6 g
}8 w# ?3 `6 P6 `# o* F1 `- ~8 E
}8 l' R# B: t1 D& |1 ~, O! ?0 ^8 k
//临时数据保存完毕,交换开始
8 |( n# o! T7 [0 k4 |4 ^% `1 M: F for (int i=0;i<MAX_INVENTORY;i++)* ]) T4 Z8 U: O. o! J
{) ]" A z0 A6 @9 ]: L
if (dest == m_Item.nIndex)
8 a0 ^1 M# Q9 }0 E# Z {! j4 U* X, Q8 }& H$ o
//id相等 则 改变对应的dest和src
2 c8 o5 V! G: o' y: P m_Item.nIndex = nTmp;2 ?" R4 n+ P4 E+ L) {
}, y% A# y1 V4 H
}& n2 V# ^, K) {2 v2 _
}
/ E& U0 Z" r, f4 X+ b! e% \5 E9 u};3 \7 g' x% N( M1 O) S" X
-------------------------------------------------------------------------
9 m1 V( `3 e! f' U$ c/ L) B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. U7 Z5 M( l V8 T; p7 ?- n4 w7 U& M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 k3 Z/ g3 x( q3 c) |4 R2 S, i8 h
紧靠其上添加:$ R) B3 w n6 A& q
if( pWndBase == &m_wndMenu )
) x: T- |* ]# Y, g0 E{* s2 S* ~, i$ F8 j
switch( nID )
: d: ~8 J) O. ^$ ]& D5 S1 K {
) F/ @$ a$ Y2 S8 |! { case 2:: h0 s% \4 H d( h: o' Y
{
7 M7 `# n, X* g" J8 x* I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, E/ p! r% P. C/ t, p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 b( A, ^. l5 t$ E
{0 a4 E' C6 Q; S9 ^
break;3 K& F3 c( {+ D( m' b
}) z- W7 R e7 D& j2 {9 v, B' A
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) `! j1 t# x J; {2 u/ \ {- o! c; z$ y# P& u9 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: |- E1 o. U# N9 }1 o' ~& g if( !pItemElem )) S& f" D) b/ f" | n9 {
continue;
& H: z0 O2 u1 ~: A, V1 ~6 \1 ] if(pItemElem->GetExtra() > 0)8 _! W* o. j! M4 ~ s4 n% D, A
continue;
1 v$ b: q$ ^% h3 }% C- }/ l" [0 u: _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# g$ n4 W% A+ _6 r5 m continue;
/ d. ^- s1 r& O) E' p3 d( r5 T1 Z if( g_pPlayer->IsUsing( pItemElem ) )* g3 i$ D" t! C' E# v& x
continue;, J- F0 | G. ^8 S4 }2 h+ e
if( pItemElem->IsUndestructable() == TRUE )6 z" U4 n+ d" b8 R
{
2 I6 F D! F. B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 }/ T! S; i) a8 E" ]& _2 a
continue;9 n: t& D5 l* J" ?0 ^
}0 W9 h- p7 b- J: M6 ]8 Z& w3 b
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ a1 ]; a3 [: v; ^ }: A' W0 R7 L- L! d( _, {
break;: I/ s8 w* @* y* E2 m0 F
}. h; E/ F6 `, J5 p, g$ W$ W$ p9 C; R
case 1:. s; t* m @; S6 Z& K2 q( I6 Q1 }
{4 y6 P3 S" F6 G7 s
//整理背包
3 i3 s% S9 b z1 U5 }; N1 F //////////////////////////////////////////////////////////////////////////2 y9 X& u) z. w2 ?6 d0 @( K- J. ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 K: N1 X' [, e* |5 l; ^# H //////////////////////////////////////////////////////////////////////////
! N- X/ T; X: j$ I. ?8 [3 m+ v( Z! T //////////////////////////////////////////////////////////////////////////: p1 _8 s, g; }" h
CInventorySort* pInvSort = new CInventorySort;
/ N! X. E8 C9 t6 W+ }) y3 f' F5 u vector <sItem> vItem;# a+ B( }5 b5 y) {5 u. e
vItem.resize(MAX_INVENTORY);//初始化大小4 E, k$ k. ^9 U/ j
//////////////////////////////////////////////////////////////////////////
! R& C6 ^) d# l$ S' I( O; p //填充数据- p5 ?) N- w5 A- f R0 _3 e$ p
for (int i=0;i<MAX_INVENTORY;i++)1 W; A. e9 H' u! k! B2 S; B# }4 J
{
, J2 Q3 Z0 M1 w7 H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! M$ U" q ]! N! f1 ? if (!pItemElem)7 H, u6 w$ ^6 e. z+ j
{1 U+ E8 ` n: M; O/ O
vItem.dwKind2 = 0xffffffff;) t6 m$ B8 c$ X7 \7 I' _
vItem.dwItemId = 0xffffffff;0 R' J; T* O- V, j4 _9 s
vItem.nIndex = i;$ |; E y$ b' i
}else {7 J$ t: t8 l- d+ r) D
ItemProp* pProp = pItemElem->GetProp();0 J, Z; D5 R4 ^6 J' P: s
vItem.dwKind2 = pProp->dwItemKind2;1 @; u1 @* Z/ H
vItem.dwItemId = pItemElem->m_dwItemId;
) q6 y! ~% y; [% v$ d vItem.nIndex = i;
! w) o/ n3 z3 t }
7 T4 G' X8 Y5 ?+ T9 E7 g$ F2 q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& j3 i" `1 r6 k$ B1 e3 q1 Q
}
8 r& }$ o8 q3 b4 ^ //////////////////////////////////////////////////////////////////////////
# R! M m+ X! j) g. J1 f sort(vItem.begin(),vItem.end());//排序6 K/ f' g3 G7 {* x: u0 O
//////////////////////////////////////////////////////////////////////////
/ G h- U% L* n8 [ //交换
: |% [! a0 t5 _7 u: @6 l4 Y for (size_t i=0;i<vItem.size();i++)2 d$ q, N* `8 c' K7 m1 B1 M5 g
{
@& h- ^5 J, w& s8 Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* s) V) ^8 f2 u. `( I
pInvSort->Add(vItem.nIndex);
6 O9 I. `: g& ~ }0 a: v' i, P7 s& v5 q6 Z
BYTE nDestPos = 0;
$ ^7 J7 u7 r. A for (int i=0;i<MAX_INVENTORY;i++)
3 K% M# B) I% d* P' ~" B" H {! H$ J4 O2 e1 | e) W( ]+ t6 k# e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 K+ Y6 ]0 L/ z
if (pItemElem)
9 E% u: L" v) k7 \ {
, [! v/ I+ G/ h: W9 F0 z if (IsUsingItem(pItemElem))% t7 v% @; w7 |1 t6 L. M) C+ O6 E
{: x" s- {# m& c: t
//这个位置无法放1 G+ P, I4 R& [- j( _; ^7 x& Y
nDestPos++;
. u! N# I7 n* J! Z1 P3 u/ `0 D }
) S- D+ c8 C" w2 X }
9 \, a! J }) p3 _4 Z: M) J BYTE nSrc = pInvSort->GetItemSrc(i);
$ q0 J$ ^& r8 V' O/ y' ^ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" D( S# }( g7 h- V" M if (pItemElem)9 r. S# ?; _* s2 h. l, i5 C* J) [4 m
{. P* n2 D& j; V+ l" O2 t+ p
if (IsUsingItem(pItemElem))
/ y/ i/ @1 h0 i( V9 k# Q {
8 n% J* c, N# Y2 _ //这个道具无法移动,跳过
& g1 S$ j9 j6 p2 K continue;
/ W( @' C: M5 |, J1 E3 p5 \1 g }1 c M! S* w5 C3 |3 j; n; @% F
}else{
6 A$ Z% b) X7 v: G: _ //空位置 不用动
4 z$ A7 u6 g! }- G- \; J continue;1 v. _* X& b5 {
}( J9 `; p8 d% ^6 O; W# L
//////////////////////////////////////////////////////////////////////////
* @- D) q4 }6 p //开始移动
- A' Z; p$ f, L* l* F if (nSrc == nDestPos)" @; G5 N% N, N4 D" ]$ P; V
{' J- H' ]' a% D1 j- H
//原地不动8 w/ ?& \6 l/ x) a% V8 d+ W% U
nDestPos++;% i5 T/ p& A2 N/ N
continue;, `( D: Q! E3 ?' ?/ ], C
} j! Q4 U# W# z! M0 u! O( W0 ^
pInvSort->MoveItem(i,nDestPos);
7 n: F' g5 y9 H& L8 U) x) s, e# h g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 I0 k' u9 X* U
Sleep(5);
) Q" r8 p8 ~% [/ l; U //Error("移动 - %d->%d",nSrc,nDestPos);
$ q6 e- X3 W, W8 K! \/ a8 `6 w nDestPos++;
; b. K1 V% c+ A }1 B7 Z' u) I. ?* M" G, ]
//取第一个元素的信息
2 P" e* Q9 ]2 A3 U/ A* c* P+ y6 N /*
% D- F ?' l! V% X0 W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& T- ^ x6 R, B
{, x# b7 Y. ^1 Q- H& F. F
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 T: o/ m; r0 [5 ?% X+ f+ ]
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. g" o/ N' a3 ?9 N
}" S$ {0 u8 f# r5 d( F
*/
" O, c' Q; B+ q w //////////////////////////////////////////////////////////////////////////
7 [/ I' h) H9 v4 ?- S- } break;
) `# `1 {: }- I# Q }( p7 y/ S1 ]& W; Z% R
} " | |0 J/ t1 D" W$ ?- F
}
* `, Z7 ^" f: _- P3 {7 ym_wndMenu.SetVisible(FALSE);
7 o2 D( K1 d1 `8 X
( E& N4 K2 ~; T. w& @( S4 @6 ^- a--------------------------------------------------------------------------------------------------------% R) i) N2 c8 u' Q8 X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; U* S3 C$ X% R3 `' E5 m+ l2 _: ?{& D" g+ U$ v+ A& Z, H3 S* i
BaseMouseCursor();) _$ w$ y& W8 Z$ n4 U
}
7 m9 I* t/ }0 q6 l" r5 k0 q0 X在其下添加:: N% H# y! M) W9 Y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# ?7 C; Z5 l( T; K+ I* w6 }{. I; A8 N% `2 K( c6 V
m_wndMenu.DeleteAllMenu();
: R/ {+ q7 C2 M$ \- ?6 R: bm_wndMenu.CreateMenu(this);3 U% [2 ~$ ^5 I7 C" j3 N+ P0 C, X: k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 R" l7 T5 g4 U
, ^& n. v2 e( }8 i9 R1 vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 b1 _" c" f) M, s- i J% P
{0 B: Z; [" C3 ?8 G- E
//P以上级别才可以删除所有道具; W: i+ @+ j5 k" G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 O5 J+ m2 s: a1 ?
}" t, C9 a: I4 v# W* g. B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 w( b& a9 s4 v) {6 M& X/ u7 wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 X3 K _3 p- y3 m3 x7 x8 R
m_wndMenu.SetFocus();
4 n" o* E5 s+ y2 k}
" F X5 k9 i$ A------------------------------------------------------------------------------------------------------------) |7 b& v0 n9 G& e& V2 Z4 y
*************************" F: T4 j/ h4 K# n- w! p$ C
WndField.h文件- `, l( E: \7 s9 J8 O
*************************
0 ^. D0 ^8 z, K- p搜索:BOOL m_bReport;
2 g; Q% V! m5 `( W9 c7 c! S# f0 Z3 z% |其后添加:; {& T8 B: J6 ?% H/ e/ t; ^- G/ Y
CWndMenu m_wndMenu;
0 H# a( e, \/ t$ [5 N7 Y5 [搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) Z9 G2 c9 L0 n. k$ ~+ M+ @; P+ V其后添加:
; g. ~" X$ Y3 R& v1 `+ k0 avirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 p3 t" `, a% _5 C# p4 ~; g6 O/ s3 Q
9 W& [9 J3 v; z1 G4 W; \
|
|