|
|
源文件中_Interface文件夹下WndField.cpp文件5 [7 z0 T! }7 ^: s9 B
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% m- V! F! s6 h. o
3 {0 J! o1 S) i9 R5 k8 e
struct sItem/ m/ C) V$ V3 q) f4 W' c
{' S8 @9 c2 T/ O8 p7 J
DWORD dwId;* e+ m7 \4 k( k' t
DWORD dwKind2;
+ ~% ]& l5 S$ K/ dDWORD dwItemId;
& A5 k) T, W: M/ p( e- F q0 kBYTE nIndex;
1 z/ ?5 L% S, F1 n- H' A* O5 k" \sItem(){
( R$ r9 |; |7 q) o2 g; [" a: p dwId = dwKind2 = dwItemId = nIndex = 0;
" j* d/ y' Z8 T}
2 O! P, r% V0 N: r2 { |' ^bool operator < (const sItem p2)
, L2 z6 P+ ?& E{+ J; P8 C1 G9 q& n$ b" w2 T% K
if (dwKind2 == p2.dwKind2)
' ?6 k" Y- t% ?, B1 s$ h {
0 `* _' W) C7 q& U7 o1 w5 A return dwItemId < p2.dwItemId;7 ?8 A8 C6 ?6 C$ y* v" `
}else{/ B$ y8 P: S+ E
return dwKind2 < p2.dwKind2;
# \* W, X- U; Z9 |( Q% ` }
# U/ T* K7 y, q% Z}
! d8 P8 D) y9 p Y7 h. m};
% A, g3 }! @7 oclass CInventorySort
3 G3 Q% i% d) d{- u) M) y6 J: {
public:8 j1 f* ~( h2 h' G5 k
CInventorySort()
/ }1 Y# E. i9 ~& A# V' p{* U: x5 m6 A; z. w2 } `
m_dwPos = 0;$ z0 q. H7 f7 k/ U
}
* e2 |7 u; }( ]$ H0 R" {~CInventorySort(){}" v# P/ m/ _3 a
private:
: y) E! F( u! K: g" X0 F' DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* ]: U! d* T4 r2 L2 M+ @
DWORD m_dwPos;7 b4 h( J+ P' w: ?% r& }
public:
* a. Y3 F. @2 d; n- D7 Mvoid Add(BYTE nIndex)
- ?4 H' g" x1 p{
4 P0 _( R. [4 K5 G+ \" P4 n( v$ A3 { if (m_dwPos >= MAX_INVENTORY)0 ?+ r8 v5 p$ }+ t6 O" m! L: h- ~% I
{6 m" k4 X3 {, w7 q& H% D
return;
; z( j: C/ I8 f9 Y& W5 J; B }
% I# s% @( K7 f1 ?- E. K# k- U m_Item[m_dwPos].nIndex = nIndex;+ v1 P! T9 u( _ q0 H) s q/ l
m_Item[m_dwPos].dwId = m_dwPos;5 m7 H, B6 y; L% n) W4 E
m_dwPos++;
- `3 M3 H3 ^" h% O4 q}
1 P) O- D( K/ h: z, M; |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 g1 { c9 b) F9 y: \- |
{% C- d0 E+ _8 J" P+ I* ~6 }0 R) ~
for (int i=0;i<MAX_INVENTORY;i++)1 r. g. W+ E2 p; y3 ]! c
{
% l# H, Y" E* M; `/ z( v) p if (m_Item.dwId == dwId): Z z5 j' E% A0 ]$ M* t
{
1 m; y! Y& n* F$ S/ r return m_Item.nIndex;
8 T, `! w' V: m% f: L& ]( ^" k }) P8 }' [" [/ Q' K
}
9 Y% \: l% ~- v& Q& G& U2 O return 255;
9 \0 y; h$ Z& L6 |' I}' c3 {2 p0 g$ @
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% ^3 `, O: b( k2 Z{
, g. f; O0 {# I# P4 { BYTE nTmp = 0;
R6 | g# R+ Y* \ bool bDest = false,bSrc = false;
' e$ ^0 v; `3 q3 I# R for (int i=0;i<MAX_INVENTORY;i++)
% O! \; b7 @; g8 R7 C6 _: } f+ B4 ^ {5 s- A a/ m. C
if (dwSrcId == m_Item.dwId)% ^4 j/ D, W% f( Q/ G- k" n% a
{7 b5 ?, u* A8 e7 M K" l) y- K' V4 Y8 i
//id相等 则 改变对应的dest和src! a" n$ y. ^' S" t; Y4 o4 e
nTmp = m_Item.nIndex;
- F& i& m" {; B! f; Y m_Item.nIndex = dest;- Q% Z- ]9 S6 Q U9 r/ \
}; [; I2 s& I7 ]! `
}' }# k- R2 g/ k; G
//临时数据保存完毕,交换开始
3 { K* P/ H1 t0 C& l6 d for (int i=0;i<MAX_INVENTORY;i++)
/ ]& a+ ], c! |9 C& l { X1 Y' P- Q5 a, t2 z% Q
if (dest == m_Item.nIndex)
$ c4 j- q( P) n/ p {* y2 A8 H2 ?8 r ]
//id相等 则 改变对应的dest和src
# \% q# y) J$ a6 s( L' H m_Item.nIndex = nTmp;3 H: C( Q3 D6 v( E9 I
}. F. D0 S- O2 V, O( z {4 Q+ F
}
3 ?0 {' e& k9 g4 u" a% m/ E}
5 A/ m' g2 B. w. S) w. b& J4 z" e( L};; ^/ C# U) ^% r) ]2 K
-------------------------------------------------------------------------
: b ]; H7 ~+ q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ I; [4 q! {! M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 P6 a1 o2 q$ s4 v' ^5 r: x1 @; J
紧靠其上添加:# G% C/ J' b* i* T
if( pWndBase == &m_wndMenu )1 P. x0 f# n$ p; O
{
/ J3 N8 l" p# C9 D switch( nID )
6 Z' {# p% j9 G7 H$ l8 U" k {
& R* H& X1 k! ~/ R4 D$ X# n# Q case 2:9 U; x7 `6 j% J2 L9 ~, C) n. R1 E
{
) N2 x0 `, K4 b7 H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 G" a s+ S, R- }
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# d& l# }. ?. b( X) u; c {: S' h" e8 Y% y" m' d1 C
break;' W) u4 E0 ~' D# Z. `4 w! L+ b
}" A, `) d; E/ ~& |- O3 h a" u* E+ f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' e, s( A$ J" c+ P- T
{/ m) m9 X! f* _2 E: C s+ j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' r5 U7 a6 a' g( X
if( !pItemElem )
" Z; O+ i* t- L: {& G) g" {; e continue;' u; O: r3 H# h4 ~9 d1 u
if(pItemElem->GetExtra() > 0)
/ J1 j I, _- _9 t continue;9 z- g I, C$ Z" G: u
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; d. z4 s8 f( i$ }% e
continue;- F% A3 z2 V3 N( ^
if( g_pPlayer->IsUsing( pItemElem ) )! t9 H& H$ w$ p; R$ N: [1 s; U
continue;
1 S) o3 u6 j9 l* j3 H0 q if( pItemElem->IsUndestructable() == TRUE )+ T; X x4 j$ D
{
8 J/ r0 ?, o6 |5 d& \) y% i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 f$ _. \; D9 U; _, B
continue;+ e. j# V1 e0 \5 {9 M2 W
}
( n. H5 n# j' D# ~& U5 o+ b+ s2 J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& I3 g8 ?! k. ~5 m1 `" r }
: d- y/ p* V' q) Z& S. v, R break;3 t2 j3 r. N; c5 d8 ~% O, p
}' w6 ]8 l6 b! o" `1 z3 [
case 1:
3 }( N. N D) E2 D# C2 u {
% M: ~6 ~5 K& V% l$ Y& X1 o //整理背包% o% e7 x) o& S* D# Q& L
//////////////////////////////////////////////////////////////////////////5 }" C% P2 f5 W; E7 b q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& O! }# w" R* e( I: n3 i& n
//////////////////////////////////////////////////////////////////////////# X6 I" V, |+ E$ J$ }
//////////////////////////////////////////////////////////////////////////
# I( l/ {, @2 G CInventorySort* pInvSort = new CInventorySort;5 H4 k, b3 s3 X; X. q! K
vector <sItem> vItem;
* d, j8 d' {' b% B$ J# N vItem.resize(MAX_INVENTORY);//初始化大小8 {% q3 l% P; s: _6 o5 O, \% `
//////////////////////////////////////////////////////////////////////////% e$ a; |/ D( l0 @
//填充数据
7 e7 _6 w% S/ y0 o# ?# n for (int i=0;i<MAX_INVENTORY;i++)
4 r2 [; e$ A4 j+ b Z' C" x: `0 @ {
, G" B2 G# e% @+ u0 ^+ ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: P( V E2 Y0 v& }- c1 b
if (!pItemElem)
# v. {5 b, ]% Z {
6 l4 B$ x) K! g# D3 L vItem.dwKind2 = 0xffffffff;
7 l! u& i9 @4 h" r2 _& ~ vItem.dwItemId = 0xffffffff;
$ n7 d9 Z! r. U, i vItem.nIndex = i;, n6 T. e3 o2 @3 j1 F5 n
}else {; A. C+ F9 [. j3 }! X' i5 E
ItemProp* pProp = pItemElem->GetProp();
3 U! O% j5 R7 i; d# b7 ~) s# @ vItem.dwKind2 = pProp->dwItemKind2;% q! l# o3 C( a( Y
vItem.dwItemId = pItemElem->m_dwItemId;
5 c* C6 X# h; ]1 ] vItem.nIndex = i;
$ z9 T9 X; l, V# i2 x9 Q0 E7 d }
3 y4 c! M/ L, x9 C4 V. H0 _. ]) S //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" C* l2 m) D' n' M$ V
} j, O" @. T# X+ F7 C. p
//////////////////////////////////////////////////////////////////////////# v' J* R! K) G3 }
sort(vItem.begin(),vItem.end());//排序' D: P* Z" c) \/ G1 @
//////////////////////////////////////////////////////////////////////////
' n1 z+ Z% {% o- f1 _# J* L //交换
+ F% f `# A3 h: H9 H: X for (size_t i=0;i<vItem.size();i++)! u) W; D% |8 r, d0 B3 Q+ c D
{
+ l& q9 R1 h& x6 a( \- K% y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& a8 t! w7 r j! u; j pInvSort->Add(vItem.nIndex);% |- S( d% V4 B" m6 e4 ]! u+ T$ q
}7 B. V7 L- _; L7 a
BYTE nDestPos = 0;, G' X2 k3 _* F. y% L; X
for (int i=0;i<MAX_INVENTORY;i++)
, N% ^3 k8 G- H( `. k/ y0 w/ z {1 \) b. `( h0 K' F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! T/ a) ?) L. F% w if (pItemElem)6 f3 G9 ?5 L X4 M0 m8 e
{+ M: X% X) T) h' e3 \
if (IsUsingItem(pItemElem))5 n3 b! e- W5 }1 E/ X4 b
{
+ e L) u- ?6 a. O4 h //这个位置无法放; f- c0 i1 g+ S% J
nDestPos++;
8 U+ _/ Y. x4 k6 w$ U0 |( P } @0 I Q- f: Q
}' ^8 ` x, A k4 }& x3 v
BYTE nSrc = pInvSort->GetItemSrc(i);7 p; Y7 s2 i) ?
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 k4 i8 `; m' Z$ ? f K
if (pItemElem)) d S# t8 i8 w4 E: g8 f
{
1 G* h: R+ S* S8 W" @0 s if (IsUsingItem(pItemElem))8 B \. \* ~: ?* e0 H# t
{- B& [% @: ]" R" b+ D% \
//这个道具无法移动,跳过
. W8 r" I" I# x3 E4 a$ ^: y continue;
8 X: F; [6 n0 {* r$ F }
- q5 _: [# X9 }3 \) R }else{) S) h9 F( u5 u4 V# k0 s' \7 M
//空位置 不用动% l, J% N* E, T3 h
continue;, ~% P! M/ W* Z c: m* x Y
}
! z* _/ M& H5 b$ E7 a6 D1 U //////////////////////////////////////////////////////////////////////////' u1 _+ u B4 O4 H0 x' y, f0 K% t
//开始移动
( x2 h# _! p( j$ v if (nSrc == nDestPos)) V" i0 E' {/ C$ H- a8 S
{
# q5 ~( T* T d; e, i //原地不动$ z/ @ P# m1 ?8 V" y4 J; p% \8 g
nDestPos++;" r, P' Z' R/ G0 K' w
continue;
2 U s0 o5 M3 u' ]# Y1 P& u% k }: @+ t: S: h' l5 _. U- P4 M' y1 ]2 }1 A
pInvSort->MoveItem(i,nDestPos);
+ J+ H7 g' B& [9 i8 |& [! E. h; _! g g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: x8 L' O" S. L" O- A$ M0 D Sleep(5);1 m w8 N; K/ u! m6 a9 P* S! q
//Error("移动 - %d->%d",nSrc,nDestPos);: n1 x/ u9 r) I$ v0 C0 ^( B
nDestPos++;( B% C/ |, j' K5 F3 c
}
4 a V- B% y" a0 J //取第一个元素的信息
6 x" Q( K+ \ K7 C+ J /*) g8 d8 T3 q, C( C
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" Q# e& H" j; O3 o; n3 J( _ {6 Z3 I+ r$ g' U9 d7 x$ p
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! e3 l% V$ k1 V" T; A0 }, Y( o7 }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 K# j9 I! `. B3 L
}
. D3 B) w) m& ]4 D- k) v, x2 }- s */
2 k3 E. @: B& z5 v# j* l7 u //////////////////////////////////////////////////////////////////////////
7 p) r6 c! a3 \0 A6 X5 \ break;+ l- x' i$ N6 h1 W+ ^
}
, a3 ?! [, w* A- N } 0 T; v% \7 @6 a; W& ~: j/ _
}) n7 L0 {9 _( D1 \- d( ?9 r
m_wndMenu.SetVisible(FALSE);
$ v# ?; ]4 I. Q! h$ A& f1 r7 w! k9 l- q* C, i
--------------------------------------------------------------------------------------------------------0 _2 K2 r m% Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 E1 h4 n' \" g# w
{& s0 J+ E- h' s1 R0 J7 z1 E. V6 t4 U
BaseMouseCursor();
9 t3 o% h( F0 [ f6 `/ c}
# K. I, n( B$ ?: D5 Y2 P3 y在其下添加:- ^# o3 g7 N3 c- w. {
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
s& g( f7 T2 I) ]' d{7 {$ p+ O. J1 l3 s
m_wndMenu.DeleteAllMenu();$ ]6 V- T# T( w4 v& r
m_wndMenu.CreateMenu(this);0 z4 I& ]9 T+ R( ]/ o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; }2 c9 ~) F6 L9 b) n6 B+ H- G& @
8 b8 N! H: o& |0 A4 qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 u# \& y9 g4 p- K
{
( @" }. u9 F# I0 ]4 M! x/ x //P以上级别才可以删除所有道具$ y8 a2 `' J+ V) ]" C+ `
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: {; s9 d6 O- w- g- n5 _: L' t% @}. [' u. Z l/ l8 {
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 g# z, _' W* y. Z3 h! vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ n) z: c# B: ?: N, g$ j) ^# k, ?
m_wndMenu.SetFocus();
" g+ ?5 c8 b' B% m* X" l}, N7 ^% H+ {. {& }7 B# O; j
------------------------------------------------------------------------------------------------------------
0 }9 N7 u$ ~ r n*************************
0 w3 T% }! W) c" a1 S; w8 rWndField.h文件+ V" _, }0 g$ n
*************************
. J% g! O/ Q* F/ X搜索:BOOL m_bReport;
( u0 W' F) n! @. F其后添加:% D. t/ w- }, P4 v
CWndMenu m_wndMenu;
6 ]' x3 i; j( i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ S5 r8 E" b7 S G/ W0 Z, L其后添加:8 U' Y1 }: u, w6 |2 e
virtual void OnRButtonUp(UINT nFlags, CPoint point);0 X4 d/ h" E k- Y+ V) m: W
7 _! g+ {9 k; @0 ~- q
7 A* S- k$ v# c% C# s4 o3 Q |
|