|
|
源文件中_Interface文件夹下WndField.cpp文件
. ]) r3 n1 j" c$ b! u- o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 v3 P* D- @( B) D/ e v; }, ]. C" s
4 n' Q* Q7 C5 tstruct sItem
* F/ X, V/ g; j1 j. q{* i; P* m$ `7 w+ l+ G' ~2 w0 e& R
DWORD dwId;
7 |& c8 l! k# f6 y% Z4 k9 WDWORD dwKind2;
9 G! W5 `; G6 m! J' Y9 S0 D$ hDWORD dwItemId;! x$ K6 F* X G
BYTE nIndex;
' i; @3 i3 n9 `' _/ m+ N9 BsItem(){9 h9 k# K$ `* K4 q; m# ^& w
dwId = dwKind2 = dwItemId = nIndex = 0;( q+ l- {0 O6 n: x; F, U& T. [" x$ L
}# `, J2 r w8 Q; g% E% s+ s
bool operator < (const sItem p2)
- ~; ~$ j) G4 M1 W( K8 ^% Q{/ z6 _7 n5 `* v! t
if (dwKind2 == p2.dwKind2)6 a2 ]( s" F+ h. c- m, q
{7 u, l& r: G. _$ _6 S4 ~, I: A
return dwItemId < p2.dwItemId;+ j2 o8 E) u$ X7 X. A1 M; _
}else{
" u$ Y3 J* e8 I& I% V return dwKind2 < p2.dwKind2; v0 t. Z9 T, f7 z5 N$ G2 L2 M
}
b' {* S2 t6 K- S# t8 H2 t4 T}; y1 B( d7 y9 l- R( t. n/ j# L
};5 S* @: e4 i& g# V
class CInventorySort- b# z1 m" p2 M; V# V8 W
{
8 b2 S5 N5 W) n) D% upublic:
) i6 U" K6 {" z/ OCInventorySort()8 i8 q) ]( g1 C" s$ ]
{
# i2 z& C% {( b$ Z: r' [$ l* c m_dwPos = 0;
( P. k0 f( p4 ~ d* q+ `: e; R- J}
5 h. n) N9 X. z~CInventorySort(){}& D9 U# G% [. e; z! c- L3 @
private:
! K2 q0 ~4 w+ q( x0 r- z$ S3 usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 {- \ a5 J$ H1 E: q2 w2 Z1 ^DWORD m_dwPos;
& W$ y" L- _4 r' F. npublic:
" k9 m) J: u; R8 s, l9 y% @void Add(BYTE nIndex)- p: ?) I$ Y7 W5 ]5 u7 E \8 f
{1 ~9 d. h& m. Y% z8 j `
if (m_dwPos >= MAX_INVENTORY)
4 F$ e$ Z6 ^' ^3 `- n E3 e/ G% B {* z0 l, S: a' o( N, l- m
return;
9 j% l0 N* a! D# `* _ h }
) T3 q) g/ ^3 ^. b0 I3 }5 H3 n m_Item[m_dwPos].nIndex = nIndex;! B& t0 J$ q0 I
m_Item[m_dwPos].dwId = m_dwPos;4 {5 H, T( p4 E- y9 D) U, Y* b5 V8 `! l
m_dwPos++;# u9 ?$ K0 u$ u+ n+ X9 P
}
! I3 ]: H! T( s% Y7 \. YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! G7 ]" S* t8 ~9 ?+ T W
{+ s& g' S7 g4 f- U$ b$ N0 e
for (int i=0;i<MAX_INVENTORY;i++)4 ]- @. G3 x3 S2 H
{
; J$ y6 A3 `0 P if (m_Item.dwId == dwId)
! {* B+ X4 v- R$ T' W$ l7 n9 T ~ [ {& Q0 p. ~. @: N) P! T, I6 @, V
return m_Item.nIndex;* ~2 O; g4 ~" _0 @0 n
}) K& q0 n& x/ j; ?) L# g a
}
% F7 X8 X$ C9 O4 \ return 255;5 T! Y7 `$ T, d8 `5 c" T5 E
}
* B2 P5 X$ i8 Avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% S, ]2 L/ y' f5 P% k1 s8 h
{4 q$ ~9 y* s8 d+ S- J
BYTE nTmp = 0;% D8 p; U$ Q+ a1 d9 W& ?
bool bDest = false,bSrc = false;' H. g q& |8 I$ D
for (int i=0;i<MAX_INVENTORY;i++)
+ f( e) e+ {. P( P; t# m: v! M {* [7 O1 n4 W. U l
if (dwSrcId == m_Item.dwId)
/ F8 T. j: Z% U9 ?/ x( D1 L& n {3 _, w+ p! `% s, U
//id相等 则 改变对应的dest和src: P& L( F4 h7 S9 K6 |/ h$ F. t
nTmp = m_Item.nIndex;
9 S4 Q% ]5 x* @: k, p8 @8 I" q6 o f m_Item.nIndex = dest;" u/ g( V8 J- V
}
! f/ J, ]% M8 {& N& E1 P+ H% k }
. \% _" v3 s- z5 [ //临时数据保存完毕,交换开始" o( c$ B v" K! g" W0 r( H. j
for (int i=0;i<MAX_INVENTORY;i++)* v5 r7 \" ?+ } F
{, P. { K9 q$ i/ G
if (dest == m_Item.nIndex)
8 C3 Y \* r: Z6 X+ n! ], | {
3 n+ [8 L1 l$ M5 i, F& x //id相等 则 改变对应的dest和src
1 l* C R* q- ^1 }; i* X! U m_Item.nIndex = nTmp;
6 E; k/ d2 T( M1 ^ }& |# l! S3 J6 N k2 B' u
}
2 u: e9 [+ J% c3 T+ v}
- r! ]+ @7 Q2 a7 w* t5 ?) X};
# L" J$ k" G- U+ m5 y: Q6 |" d-------------------------------------------------------------------------
. }. a) n1 u& Q4 _# A6 A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* k7 _8 `" E2 z/ R$ S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ G+ B1 W) v. B, _紧靠其上添加:
+ c1 Q" h$ D( M5 A" k2 Eif( pWndBase == &m_wndMenu )
' w+ r' {/ I9 y( v6 L{
" r; u$ l+ L: o! u; ] switch( nID )$ y9 |& L( G$ G' Z' `1 U5 m4 @
{, A* b/ h! E- i/ o! H6 k8 h+ l' x
case 2:
1 y! I- ]- q- K3 j! S2 O {
% Z+ T7 W8 `; e7 w& m2 g( [ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' G6 x& N' p s" d( x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) t+ o( i) K& Q/ x
{! b: j8 ?: g6 \- H3 x
break;
$ I2 x' k5 z0 c$ f! a: z( s }' y# W y e4 ~7 i& n( l w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) }3 G! y( C% U" F
{
# w( E3 n- P1 ^* `6 |2 ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: h! {9 \" s, q8 ?0 W7 E) u0 i
if( !pItemElem )5 g! K) B- s/ a, c L# r# j
continue;
2 z6 Y0 W; X {+ R# X: d7 v5 ^ if(pItemElem->GetExtra() > 0)$ L, V5 H q& @$ |, K3 f4 ]
continue;
" q' Y' U- P; v0 P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 j- G8 t# n9 c continue;& c& f }! d4 n7 {( q0 \
if( g_pPlayer->IsUsing( pItemElem ) )4 v0 f; N4 P1 h. I
continue;
! K3 s1 e6 ]3 t9 n9 x5 [ if( pItemElem->IsUndestructable() == TRUE )
7 N m7 [% L; L9 Q6 h0 I; [1 b% Z {
" S) A: R" o9 W0 n2 g \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' e, ~4 @* f1 A. {6 X continue;
! Z' ]! Z5 f7 Q( L }3 R; y) P2 P X9 o% U+ ^* f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, a, T$ O. c/ S% @5 ]" n2 m }7 r2 Z6 W" |* y2 P6 F- U
break;
8 \- _* w1 C) u7 B$ [ t5 J' G }
$ K! V- y6 p$ @! H8 M! } E case 1:
4 Y9 j# ]' ]7 P- _8 F {
/ v8 j2 ~' j* v5 {& X& V //整理背包
' z% @& J* T: V P" s9 V# r //////////////////////////////////////////////////////////////////////////" O' x5 |; t B
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); W8 ], W. W, L/ i% `3 _2 Y
//////////////////////////////////////////////////////////////////////////1 }: D% f) c2 j, ^ _
//////////////////////////////////////////////////////////////////////////! h+ ~8 X$ j) r5 A/ l$ i
CInventorySort* pInvSort = new CInventorySort;
% G7 D- Y {$ l; u6 p vector <sItem> vItem;! D4 R/ ?+ m' I2 W0 Q
vItem.resize(MAX_INVENTORY);//初始化大小9 G: u4 Z2 G/ G
//////////////////////////////////////////////////////////////////////////% Y& K V& Z- b
//填充数据
- L" F! v3 {! ?, ^' E3 I for (int i=0;i<MAX_INVENTORY;i++)3 D' j l; j/ F; @+ P8 \
{& X. r4 o: Z& @6 D" I ~* I0 ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* J' R5 E3 B2 z4 d0 l if (!pItemElem)
8 z( i% D& w7 @3 v0 ]- ]! S% T {
/ ]% i6 K' ^( O i vItem.dwKind2 = 0xffffffff;" O7 d6 d' B+ l/ S7 M- c3 j% r
vItem.dwItemId = 0xffffffff;
0 A x7 G: j6 A8 a8 B; s vItem.nIndex = i;
$ ?' ~8 y* `$ l }else {
' A1 l- d. h) @! s! Y% p2 {! } ItemProp* pProp = pItemElem->GetProp();
$ Q' J' R- j9 {+ _. A' o vItem.dwKind2 = pProp->dwItemKind2;
' C: U+ U* _% o9 n+ a( |* f H vItem.dwItemId = pItemElem->m_dwItemId;
' @4 I2 ]/ g( M8 s4 B+ P/ S vItem.nIndex = i;6 b0 ~2 v6 b/ L; ]) y n
}
* \- @8 d/ j+ G; t: c# J //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" k; E. }6 I% v1 G3 Q$ Y7 M
}5 v: D' B3 u* M, B" p! m. F4 ]- s) Y
//////////////////////////////////////////////////////////////////////////+ |; ^. q" Y; C- D
sort(vItem.begin(),vItem.end());//排序- a9 D' _; e2 m4 m4 w9 p s
//////////////////////////////////////////////////////////////////////////
, g: u& x% e1 B3 @/ N9 [+ n //交换
3 F P5 O! H& x1 T- }3 O for (size_t i=0;i<vItem.size();i++)
2 n+ @" o( ]* l3 i {# A! C [! V3 `: w
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" R7 e2 q9 q+ E, }
pInvSort->Add(vItem.nIndex);! J7 X( M1 Z' D+ `, Z, p& E
}
6 ]7 e6 n" _- H0 m1 i7 |9 k4 q9 Z* a BYTE nDestPos = 0;
7 R% p# M. S9 ? for (int i=0;i<MAX_INVENTORY;i++)- h' v4 e5 U2 D; a T
{, y7 S: H7 W* ] H& G) A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- J& |# i- h# W
if (pItemElem)
7 c1 z; c' C) T/ J* H4 D% p {
9 J# ~0 N) e* o. V if (IsUsingItem(pItemElem))
5 v6 v- o9 M; f m$ c8 ]! c {
$ E/ D1 q1 h" b7 u' }% \6 l% T //这个位置无法放0 q" B4 U- ]# q+ G& z) ]
nDestPos++;
9 |2 O& z% @( C+ b& ^- J7 N' g" R7 W }
4 Y7 Y' V5 @/ M }3 L2 ~5 I7 x$ r: O( a i) g
BYTE nSrc = pInvSort->GetItemSrc(i);/ u, J1 C% C7 L# \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, F: g7 J9 M0 @# f0 _* s' `) |4 C
if (pItemElem)8 ~ N. n% f: s: C2 O) S. ?
{
" p# o: I! ~( Y1 f# N, H if (IsUsingItem(pItemElem)): ]+ A. _: J& w3 |
{1 c( ? m T8 `5 J" k: `) H
//这个道具无法移动,跳过$ U9 E6 L; K! c9 e: W ~( K
continue;
3 D0 Y8 C% e* q8 ]# G/ A }
, S+ M1 {* l$ o }else{9 n# T3 U$ ?9 b
//空位置 不用动) L1 t( y+ i8 N
continue;
+ Y- B0 ?- g" p5 Z0 I }* f) L3 t. B' j9 h2 {9 I
//////////////////////////////////////////////////////////////////////////: i; @% }% Z5 q3 ], z _. C: _0 h
//开始移动+ V+ Y: E* C/ G% ^$ Q' |# N! v6 \
if (nSrc == nDestPos)
; H; T6 M3 N+ v2 Y {
7 z. _2 M. p. C0 W' F/ s$ ] //原地不动
6 w* G; v! a& q6 [* F# C9 W nDestPos++;0 t* [' g- B x
continue;
: ^, }7 M! E& x6 c9 Q% D i }
; l3 `1 p" f8 F. \+ B pInvSort->MoveItem(i,nDestPos);5 c; H5 L5 N/ a. i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# Q* {- W* L+ t+ x3 n
Sleep(5);
/ X( [$ J# a3 p$ E3 x2 ?3 B% b; [ //Error("移动 - %d->%d",nSrc,nDestPos);
) ]+ c9 B* a2 Q8 [- z nDestPos++;' E; I1 m0 w, V7 s7 P+ h
} y+ k& q; q8 ~9 [4 _+ q
//取第一个元素的信息1 E6 Y* g4 a* M0 H0 u+ M
/*% n9 j2 G7 m1 y1 X* v1 Z0 H0 O6 z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ N2 j0 N1 Z2 J8 J3 H- P {# e9 U$ u- G# a- D! w, _$ W1 n* ?# _
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- t7 Y. Z, E( i( {! D1 q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ ^3 I( U: \& ?0 T" g% `
}
3 c+ M* C) z! B2 k. ~ */
/ A% e" a% m/ x //////////////////////////////////////////////////////////////////////////
{# L- u& m4 k. S. [ break;" U7 D$ G. N9 ~/ p+ h; h
}) f& u' M- |! C' A
}
6 M& U' w- q% H' g}& E+ g! v8 _# S: o% @1 a x# u
m_wndMenu.SetVisible(FALSE);- t# } B. o0 A: K. }* G$ s0 h
. P! C& Y2 k) V, c0 r% ]
--------------------------------------------------------------------------------------------------------
8 I9 F# s& y8 o8 d搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 _. m; b1 A& o' O1 y{
) m0 P: c8 N1 P# h3 n! nBaseMouseCursor();
9 V% f/ y; d- d" @# T3 i& c/ g}8 ^0 N( A6 b( y
在其下添加:, D0 v5 F. j6 z) T/ i6 a: `1 X
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 ~1 Z ^0 g# ^) b; O
{/ z. M8 \( K, ^4 }$ |2 D$ X
m_wndMenu.DeleteAllMenu();9 U" v k8 i+ }( r, z
m_wndMenu.CreateMenu(this);
2 g) ^, t$ [ b3 ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; i' G% C7 e1 Z& k
8 ?5 [. Y. W/ o" [) j1 Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" ^8 ^% i2 }: |5 j& A- l, X
{
4 M9 U9 _0 \- O6 J1 ]. G8 _ //P以上级别才可以删除所有道具+ }, V9 ~( s; Z& v6 C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ p0 n j+ T2 y}
' e& m! D) v5 E p- Nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# G) s' Q: X- m$ i0 `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' L g7 O! ^" ?) c U+ ]m_wndMenu.SetFocus();
7 E. i+ h& i/ T) E. B* x& h8 D) i}; F/ a1 r% u( O l+ O( H/ v# }( b
------------------------------------------------------------------------------------------------------------
2 f% G5 {, U6 a*************************2 w% {/ n$ m* a; |' Y7 }8 q
WndField.h文件! C2 ?: `: O# m
*************************
% Y$ ^0 ?% l9 r7 k搜索:BOOL m_bReport;
1 P9 i* q5 O2 q Z6 O其后添加:; I5 E: |" |" i
CWndMenu m_wndMenu;
% R1 `) a4 E r5 q* S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* C0 i+ F! C0 ~0 G
其后添加:7 `5 q) P0 Z8 A
virtual void OnRButtonUp(UINT nFlags, CPoint point);' i& r6 B' h: ~: Q4 l% o- y
& n- q6 q0 G% H' j5 D5 M3 d7 \1 ^
5 q; F3 V' Y! e |
|