|
|
源文件中_Interface文件夹下WndField.cpp文件
' T1 Y+ c) L+ V4 W- |搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 g( O) a6 ?3 ^8 ]4 Q* m# @
' {0 o% \- h) z) X6 k& [. {/ n
struct sItem
A* d5 O$ v, s$ d6 E' Z; G* B{0 U% u: V; W6 f5 l
DWORD dwId;
) @+ a8 o! z% ~6 D* {; T9 O0 cDWORD dwKind2;
+ u) q& s/ _0 t; K: yDWORD dwItemId;
# f9 u$ A% c1 l, k( hBYTE nIndex;. a1 T/ S; [+ O" K3 K3 Z
sItem(){3 P6 l0 y* p n X* T' z# c
dwId = dwKind2 = dwItemId = nIndex = 0; ~9 m6 L& W9 }/ [6 G' i
}
& Z0 M9 J( q1 _ |8 v+ }: \bool operator < (const sItem p2)
! L# `/ e+ D3 S H d$ f{
0 M/ i9 C. k* _ if (dwKind2 == p2.dwKind2)
7 B4 ]) t; [ `0 K7 K4 J1 W {% ^8 A# X7 U$ @
return dwItemId < p2.dwItemId;
7 `. ~) ^5 s: D; z0 s }else{
- Z4 A8 J& ?2 r$ ^# V3 c* {# Y/ z o' a return dwKind2 < p2.dwKind2;
2 I) ^8 y4 T( B$ d5 k! @2 R }
1 N6 l5 J: i' M" O) E% Y& v# Z+ U}' \: B4 C& Z1 x8 ?4 V8 T* X" U
};: @' B) c+ I; p8 A( g/ `
class CInventorySort
. G0 ]/ I" [) \ `{$ k# w: v9 F$ O& i
public:# ?' R! q; @8 H( O) J
CInventorySort()
+ m+ z) v E, J{
7 B% ~" _; }3 M$ t7 Y3 ]* |$ @ m_dwPos = 0;
" D8 `1 d2 o! W1 J* E# b}
3 D1 X, c( t* e, m6 ]& O~CInventorySort(){}
( U1 `& X: j ?/ J/ T# N; qprivate:" z& G; s5 Y- D) f B: C
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ ?5 W2 B$ o, \3 v* _
DWORD m_dwPos;
/ I5 e) K) J$ v% f) ~public:) g) M- a& |0 W3 F0 j, `
void Add(BYTE nIndex)
8 I5 {' D. g4 E' r/ J+ p# k i{' v! T, z" G; Y2 i) _
if (m_dwPos >= MAX_INVENTORY)+ ]8 B1 `& c8 i2 i5 @, l
{9 X& F5 O$ U) u3 l; `5 k0 R
return;
, q6 b$ T8 I4 l7 h* }2 e }
6 s) v: J; f1 {+ X/ A m_Item[m_dwPos].nIndex = nIndex;
4 ~3 Z$ \: d1 a3 X3 p2 q9 W) b m_Item[m_dwPos].dwId = m_dwPos;. o1 U" p3 h5 b5 R
m_dwPos++;
1 Y* S+ M$ U, O; L5 [; H/ {}
% s1 F/ r2 z9 s7 q4 CBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% D- R7 n9 e% I1 E{: [# |+ P2 L$ W5 Y1 p
for (int i=0;i<MAX_INVENTORY;i++)' L* R% a+ L: w
{9 r& @5 X+ Q% q; }) c# s
if (m_Item.dwId == dwId)0 }! q, N" Y; E: q' ?& x+ d: t
{9 D5 l+ y5 m0 J5 U
return m_Item.nIndex;; j' u2 R& L+ v8 s- X
}/ e W) @9 L) U' R) z. G* n$ \
}/ ]' e4 K1 h& \: F
return 255;
5 t6 P1 f: [: d6 r$ j+ ^ I}& j" S, W, l' R9 Z. X4 x( }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& O- B8 j; z" w* D3 H( M, ]9 o{
5 v( C. Q2 K4 `# Q0 p BYTE nTmp = 0;* o9 a6 ^9 e; V, g8 X7 N: r
bool bDest = false,bSrc = false;- X/ w7 D8 u2 }0 X! e- P
for (int i=0;i<MAX_INVENTORY;i++)
+ Y# m+ k' r' z' d. g3 T% g {
) v1 Z5 R+ T+ {% T: a+ r5 } if (dwSrcId == m_Item.dwId): d; {( |. @* n+ }/ f0 U
{2 C" i* y% s! I, `
//id相等 则 改变对应的dest和src( |3 J! H! b% f2 x& G( b- V
nTmp = m_Item.nIndex;& \" W7 V" D: h. b7 B
m_Item.nIndex = dest;
" S9 K/ g5 S: n: B# T- i# X }! ]( o' T! L, d) R
}3 x2 i+ c# n' v s
//临时数据保存完毕,交换开始 O7 Y$ S& [ }/ F9 v( Z
for (int i=0;i<MAX_INVENTORY;i++)
+ P' W- N. |6 T) _1 ]! P {
2 M- `: i5 A9 y( T if (dest == m_Item.nIndex), _ G3 u! ?& S" }1 v8 ?
{- q7 B4 i {; T$ |
//id相等 则 改变对应的dest和src
* p# G7 } Y) E8 H5 o/ N/ | m_Item.nIndex = nTmp;! w5 ^; m7 K% E& M+ s2 e- G
}
6 ?: M+ ]4 o, G% W' R }
: H+ [: O5 x4 }7 z7 H4 [}
7 k) X! Z* r! P5 j4 P) S& v6 o};1 P" `$ ~ j; p' o
-------------------------------------------------------------------------$ ?: b& g% ?% T; H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: m3 P( [) O1 O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 H' U7 k% M3 p3 i紧靠其上添加:
- b/ d0 \8 W" g, z3 P# M% Dif( pWndBase == &m_wndMenu )
' A& \0 _1 D3 c' ?{
% I/ U/ x# F( u' p6 R! D' X% V4 c/ c switch( nID )2 q" o P! n0 [" s/ c9 G
{/ \$ e2 Y: i) y# G
case 2:
7 C0 b" d* _. d {
, G E, N. |4 p3 `8 j4 ]" B% e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( h. k6 V4 |% M5 |$ j' D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, Q( d& N x4 x% s% @/ S# B5 Q {
9 x* Q* I( k" f$ g break;
% `# W3 d6 f1 V9 `8 f/ R; Y }
( k' [' D$ z7 s! r9 P% p! _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 A. b+ A/ F( |; g& m% \ {$ q% I: t7 z3 g8 c( A0 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 d+ A q# A L3 D$ Q if( !pItemElem )0 M3 g4 h% V# W) e/ K
continue;3 h1 S5 Z! B) n. R5 B
if(pItemElem->GetExtra() > 0)
% s6 Q7 B/ A3 d' c continue;
; `4 B6 j* a: j, E; @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ w, v8 \6 r9 R7 V" o3 W continue;
/ J" V3 p+ U. k# b2 a8 o1 }' G if( g_pPlayer->IsUsing( pItemElem ) )) r; I( t3 u5 @! }+ q9 B
continue;
9 N, q# ?& h/ a" e8 S2 [0 b if( pItemElem->IsUndestructable() == TRUE ). {: L! S( \- o( D# j+ x
{
5 h# b+ @8 F0 z% R4 k O6 ^: A" u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 G' f! d9 M8 Q4 V# |" l/ J7 Z9 e continue;" E$ W) \5 Y0 }1 B: T0 Y; e
}
2 y8 p* e& j L3 U r g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' R/ x0 F4 Z% M2 K/ [2 L1 M; Y }
+ S" z7 E" I, k6 c- U break;
7 E$ Q) I' n4 f; C. O }3 r7 L. c' g8 P
case 1:
! L4 U K. q4 _7 v3 p {
; L! s6 ?8 k y. | //整理背包
1 y( A R0 Y" N, R9 {6 y3 D" a: J: j //////////////////////////////////////////////////////////////////////////, E+ f9 X3 d/ _; V7 M( D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 ^8 I& P4 m5 [1 j
/////////////////////////////////////////////////////////////////////////// q+ ] |( E- L
//////////////////////////////////////////////////////////////////////////
4 w7 E2 @( m! O CInventorySort* pInvSort = new CInventorySort;
G- m0 v5 f% R" d! Q+ c+ e vector <sItem> vItem;9 d! D" j0 w m4 V
vItem.resize(MAX_INVENTORY);//初始化大小5 Y, t$ {" i- N3 q; e
//////////////////////////////////////////////////////////////////////////8 [& y H7 a! q# ~, L! c/ O r
//填充数据
$ z8 u: R. z3 ?' x, b$ p7 _ T for (int i=0;i<MAX_INVENTORY;i++)
; o- x/ r6 _6 R. }5 b, d# D) L {
L+ s8 E8 M# L! L2 s/ V$ y+ C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: C) ~4 P$ X, k7 @2 i1 k n/ t( P
if (!pItemElem)5 u+ D% ^, p( D. v4 R
{7 D1 w0 V* ]% s7 _- ^
vItem.dwKind2 = 0xffffffff;
* ]+ o, }" r0 a( | vItem.dwItemId = 0xffffffff;0 [" @. M) o# T, o
vItem.nIndex = i;& \- g: |$ l* i
}else {
3 @ Z# E2 n9 b ItemProp* pProp = pItemElem->GetProp();
9 w5 k0 `* W9 b0 K# I vItem.dwKind2 = pProp->dwItemKind2;2 o- J, U! }9 l4 U
vItem.dwItemId = pItemElem->m_dwItemId;
) m5 y" T8 h& C+ v+ k vItem.nIndex = i;% B- Y3 B( F. l0 \
}
; v# W+ }( |& D* X //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' Z+ }; r" F N/ \% W! a
}
. z# `$ a! m$ m8 v" q- z: Z8 M //////////////////////////////////////////////////////////////////////////
) N; J7 V6 O1 B9 X sort(vItem.begin(),vItem.end());//排序
4 Q3 O: F* \ }$ W7 Y' O8 j //////////////////////////////////////////////////////////////////////////
0 R" T( R) z' Y7 W" c! T //交换
: d$ k. l! `+ ^( m0 N for (size_t i=0;i<vItem.size();i++)
7 |; x* O* S3 [7 s8 L {
6 o2 C$ H$ M2 z' n, }/ \8 Z. J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; }8 l+ t7 r' a, B2 I* m$ M( z4 K) O) W4 ` pInvSort->Add(vItem.nIndex);
8 L; o9 [6 v: g }$ I# n1 J+ t* b1 I; z* @. b; l
BYTE nDestPos = 0;
8 v8 }) j0 O0 i3 V) ^3 T$ Y( ~ for (int i=0;i<MAX_INVENTORY;i++)/ e; q4 n) |/ \2 q) X% Z0 I
{- `, S( _ m! _$ U7 {' x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 h S0 S/ \, }& F5 W6 ^ if (pItemElem)5 x8 h: S( `$ v
{
! A2 |/ I% G4 S+ M# J1 q; T if (IsUsingItem(pItemElem))8 A& N' D, i. D8 V: x
{9 Y% f% I; X* T. {) K' n
//这个位置无法放- W1 z/ |& ]- e c7 g
nDestPos++;
$ }: _3 V! K% c& y }
+ z- n% F* \% o9 L }
* Z% p" V9 d1 c8 X BYTE nSrc = pInvSort->GetItemSrc(i);0 A8 E5 B: m. J* W* e# d
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) Q# X! z: ~; f4 w* b' L Z- v
if (pItemElem). [/ N8 p( l" [6 @1 q
{0 E* ~" @& n [, U
if (IsUsingItem(pItemElem))
2 y4 H4 y# U( T {1 p7 ^7 ^$ h7 t; q
//这个道具无法移动,跳过
9 ]; r+ v2 Z6 ~- X4 X6 [# ^3 f continue;
0 s! Y% Q2 J& T2 C) M }
- u9 P! s: f% U$ p, i" f }else{
3 B+ k) a [3 F4 b" Q- v; m //空位置 不用动- R& a ?' H) G0 [8 b. Z
continue;
/ ~7 S2 }- T, A# T- S. q }
) J# I4 F( f: ` ////////////////////////////////////////////////////////////////////////// T6 }( i3 P% J" y1 U
//开始移动5 R; u2 M/ u9 a
if (nSrc == nDestPos) Y# z$ z# P. H2 Y) Z8 w9 X3 E
{
3 B; G- }) n3 f1 ]* M# X! Y //原地不动- _0 d6 R8 @6 X$ @3 M+ g( H
nDestPos++;
& e' M$ P/ F% F W6 E$ H/ u continue;
0 d, v. P2 X/ _& x4 ^ }& A" e( ~$ p! z4 ^4 n7 m
pInvSort->MoveItem(i,nDestPos);5 r' b* R1 R/ }. i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% ]& g4 x' ?- C( [% V4 H6 |' ~+ @% \' t
Sleep(5);8 v! @0 d, S6 ^2 _ |) E- K
//Error("移动 - %d->%d",nSrc,nDestPos);5 q+ Y2 v; z: h
nDestPos++;6 S1 ]' ^ H9 N! k$ l9 U
}' X3 V' c3 M4 }# H6 ?% `) V* _
//取第一个元素的信息6 R- T' x) {( {( ]7 O3 Z
/*- U+ A$ d7 v9 C' ~- C, l* \' J3 i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! |* ?; J9 T8 q
{' a( M9 L2 Q/ [( q5 f+ H4 D) x; V$ \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! e% b! f) g+ ?' ?4 C" k* u
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 t* I/ Z( }0 u$ s: l; A a9 k }
# y B/ ?. X+ `# z) u8 V: j. @- Q */
$ G7 D0 j3 b0 b+ m8 ]$ p //////////////////////////////////////////////////////////////////////////) N' |7 _; u8 T5 o* c
break;
5 H( Y/ w8 j% @" o }: l9 c% G% Y1 }8 k, Q) a# g
}
1 \- c! ]: m+ o9 `3 l2 J& S}2 c$ f% t r* w% g
m_wndMenu.SetVisible(FALSE);; k$ |4 B' r1 A- O, N! P
2 E" A5 X; N+ R- T7 P W--------------------------------------------------------------------------------------------------------
$ T6 _( i. r7 L, M6 {. I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- n2 _) V5 p/ c4 ?6 f
{
+ C# T( v# ^+ `+ |1 o! B9 R+ bBaseMouseCursor();. M/ @4 L/ B0 G h% ^4 j
}
. J/ R/ l* V. \4 N6 \- g在其下添加:
( B9 e/ v2 c0 o% Kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- J) _3 @5 e+ d, v
{
& J9 h! X9 L5 |/ E: p1 _m_wndMenu.DeleteAllMenu(); F8 d* A6 ?, J3 ^! q& J+ l) `
m_wndMenu.CreateMenu(this);
, J( e* c$ j' O& pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 y/ u- }9 p+ h2 }# ~# K2 c
9 m8 ]8 A% u3 J/ Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# `: F% B4 [' F5 n
{4 Q. A# c9 Z6 M: |
//P以上级别才可以删除所有道具
2 _ i+ l! M, S; }( a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& y: B+ p* Z: Q* q7 v. g; ~}, H% D- j7 z- k- a; ]. z; K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 g( e: X/ i0 v3 T* `! m# d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) Z" r: t! o% X
m_wndMenu.SetFocus();" o3 B2 f: P* B, A
}9 k3 w. ]; i i7 j- c/ A! X
------------------------------------------------------------------------------------------------------------5 B$ `5 \2 `" l6 v( Y. H4 Z! e
*************************
: s2 M( P- m0 ]WndField.h文件4 u1 N2 N2 P& Z/ x9 ^! ?! h# `2 s
*************************: n( P( X' F7 F! a8 e% ^' u; o6 Z
搜索:BOOL m_bReport;
0 C0 x! }! h8 b A* x7 g2 I" p- c其后添加:3 p3 Y2 n/ d: x
CWndMenu m_wndMenu;
& L! T; Z: N9 x4 _" R; O5 J1 p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( X U6 R! t" z其后添加:: g( |; T+ o% W+ G2 m% e
virtual void OnRButtonUp(UINT nFlags, CPoint point);
' T) ?; Z2 P* g5 h8 J" Q7 N' w+ ? B5 C8 ?) {7 }; U
4 r: J% a- s; j: H& w6 d' ^) w" q
|
|