|
|
源文件中_Interface文件夹下WndField.cpp文件
2 b; H: z! A% L7 J. k5 `6 _5 X搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; s" d3 n! ` @, ^2 u1 P* R6 X0 X) \
6 r/ F, @' w7 x7 V0 @# H* Gstruct sItem
" z+ j' F5 |9 d' M% ~4 t{
5 C- Q% q! R' B% E) q2 tDWORD dwId;
5 Y( O t' i/ R, L3 g6 {8 MDWORD dwKind2;
8 g$ @$ X5 g6 ]DWORD dwItemId;1 B, M6 m; e/ z/ }
BYTE nIndex;
: W4 X U, L" D: J wsItem(){8 A& M. h6 [$ m- o" D! g0 }! ] i
dwId = dwKind2 = dwItemId = nIndex = 0;# m4 X1 @2 w, G* \/ y. {
}
- N9 l7 E! |2 d3 C# ?6 Tbool operator < (const sItem p2)
9 K1 M) O* J4 H{% x4 q: n! X! n X) A
if (dwKind2 == p2.dwKind2)9 ]1 ]9 v0 }+ w& S
{+ K- I7 E# _( g7 d2 B
return dwItemId < p2.dwItemId;0 }% w7 b) V+ H+ W* Y1 S
}else{
, w! F/ P% O8 f- ~ return dwKind2 < p2.dwKind2;/ R6 o# V9 }) L) M' @4 A
}; v3 Q4 r6 y0 u/ {6 s
}
]. k/ {: R/ N9 c};5 T3 z" {0 y) B; ]0 _3 q# L
class CInventorySort
- _7 ]$ `( ]: v$ h/ e{
) Q. R8 G" H% T, I( kpublic:* T+ l. J5 R" X7 `: T
CInventorySort()
7 W) C# |: _# Q{
- q) P! G4 E% r' ?0 B ^7 m5 Y: `& ^ m_dwPos = 0;! q+ e$ B( A# r2 x. y1 q% q" P B
}
* S9 v: i% _0 Q- w( L4 _~CInventorySort(){}
+ B% z( l, ?) O6 s% }private:! J" P( o* h( X7 g
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 W1 l2 }; x1 Y0 r' z! {' @2 h; `DWORD m_dwPos;% Y- L4 V6 l9 A8 B
public:
i7 P2 g8 `( L6 e8 Xvoid Add(BYTE nIndex)
, Y. M( |) w$ f0 v) J; }{
* _0 b* \5 O+ M# D if (m_dwPos >= MAX_INVENTORY)
& {! {8 r) ]9 f4 M2 k3 } {1 q8 F5 ^& ~: ~; }2 F8 g0 ?
return;/ S2 ?8 r5 m6 i. u
}
4 ]: E2 n% a e# ~ o m_Item[m_dwPos].nIndex = nIndex;; D/ b$ s/ W9 ~' l6 F$ d9 Q9 L
m_Item[m_dwPos].dwId = m_dwPos;4 f3 S" t, _) D& _
m_dwPos++;
6 w+ V( A3 f3 H! H}
7 F3 f) K0 j: n7 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ I( _( C6 C) `% D
{5 U8 f3 p4 V9 M; M/ A4 a! D! H
for (int i=0;i<MAX_INVENTORY;i++)( n% |9 L. a0 o% x+ b8 J5 e! o
{! |$ {* ]1 m, Y% e6 d
if (m_Item.dwId == dwId)/ L7 o" W- @3 ]- l/ _
{
& R) x7 F0 Q' T- T) u5 J, ?5 Q return m_Item.nIndex;; Z+ N9 Y4 D4 f% y$ _, G" S
}
6 l. n: v+ i# W# `# A5 ? B9 O }8 r n6 [% j0 D$ G3 W& U* @
return 255;7 y& G9 O2 ^' [: X* q7 p" v- W7 S
}
3 J$ a2 M% V2 M0 Z! Y( yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* `. c5 P7 [# R4 i{( g: N- S. j$ c* L0 a3 d
BYTE nTmp = 0;
, G6 f- A) ]; b3 f8 P9 e1 l# W bool bDest = false,bSrc = false;/ ^6 t0 T o. O* Z8 P
for (int i=0;i<MAX_INVENTORY;i++)
# x9 k# v( I$ T6 d! y6 n8 R8 j {* X- Q! n. I- r2 {( F% _% S6 \
if (dwSrcId == m_Item.dwId): C: u' j/ M- q) D7 E- a' Q: M
{
& e2 \& M2 V' f+ r7 o //id相等 则 改变对应的dest和src5 u' P2 ?2 @. J$ ]. t: \
nTmp = m_Item.nIndex;
7 U/ p. ?1 E. r, |! k' { m_Item.nIndex = dest;
0 L6 r( t1 i- e, K' i' U }" M: \; P/ _" L8 a! u4 t j
}
! w3 J; W# N7 C: K9 M0 W: s0 o //临时数据保存完毕,交换开始! i* t' C& s) \& K
for (int i=0;i<MAX_INVENTORY;i++). o* F& h- _5 g/ A
{
( ^* I4 l- u% S2 L if (dest == m_Item.nIndex)
/ z0 }4 _4 ^$ r$ {. `/ j {
; K+ W7 l4 D% _5 \4 W4 Q* @' V //id相等 则 改变对应的dest和src
7 ]7 B5 W: h" c+ y* g. n m_Item.nIndex = nTmp;
; d* O& P% x( Q p: o) L }1 |* y4 ?: G" X2 U& N
}
9 ]2 R4 M. p" A+ z/ `- o# I}: V% T z) e0 L0 P9 Q' K! Z) `
};$ D0 T9 t% }" C' ?8 I# Y' Z8 @# H1 c' J
-------------------------------------------------------------------------; g0 x) j- B/ [$ M& J9 `. _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# A1 n6 n. w& z7 q$ U9 f搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( d: s9 h/ O. n+ ~/ K/ w: y7 d8 r
紧靠其上添加:
! [! V1 C/ Y! y9 h% pif( pWndBase == &m_wndMenu )1 }% v" ^+ V- Q L
{: P) u7 p8 v5 U' b/ k; u
switch( nID )8 ~+ x7 @; p* s! @
{+ E0 Y9 F" O5 G0 }
case 2:
2 S: w% {2 z! Y {
1 ?; ?& I" ]- v0 z" h* R //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ G9 p% i4 w: T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). B; w. ?; _4 Y8 t$ ?
{7 T- U9 X) o# O8 p, R% u( z" j; m
break;; t; C2 G1 V0 ~+ O! z$ S! H
}# b) m2 G% N% M5 L* a
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 z3 j+ f" }8 A. O
{& \' _. v" D! L2 H8 K: q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! p$ G* @8 K3 {9 q) p8 G if( !pItemElem )
, w4 [5 T7 x* @# T continue;& B* y( ?4 K7 r) n# A
if(pItemElem->GetExtra() > 0)
+ ^; [( T }) q2 e% w. X: }6 ]/ r continue;3 k0 L! ], u( O ^
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 f( z2 l0 |2 A: _+ @, |& z1 e: J
continue;0 B& e: J# a6 U( t* w
if( g_pPlayer->IsUsing( pItemElem ) )
" h, d) B! y& x4 ~ continue;
1 w& ] ]4 W1 t6 e& r3 ~ if( pItemElem->IsUndestructable() == TRUE )1 U- |& W) I( ^4 C( W8 s
{
8 K7 |+ M- {/ V4 D+ ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 v- U2 ]7 C! q$ e Y continue;" k/ h% {0 |$ S0 k* W0 B
}4 r1 b- a$ }8 A v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 d/ g4 U. a% i Z2 L5 a }
! o, K! C$ e S1 y" @9 s0 x' L break;' ~( F1 s, [+ t7 {1 ^
}" i# f/ R6 \) F! Y- H
case 1:
% W( A0 w' F1 m1 N: f! I {/ E0 }" y; n/ ?# w; n7 a
//整理背包4 {# z4 j( i& x* a5 i( z
/////////////////////////////////////////////////////////////////////////// F. E8 Z- `* Y4 K- P
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ d3 G/ t8 J+ U$ n9 S c( D
//////////////////////////////////////////////////////////////////////////
- Q7 E# ?# ? C, g //////////////////////////////////////////////////////////////////////////
; |$ [9 ]$ G; F3 z CInventorySort* pInvSort = new CInventorySort;. F4 B1 ^7 P1 r
vector <sItem> vItem;$ V. R, T: G6 A) s9 m N
vItem.resize(MAX_INVENTORY);//初始化大小) U0 m- Z/ n" _* Y) U2 U; u& _
//////////////////////////////////////////////////////////////////////////
* v5 i2 J& N3 G; k/ g //填充数据
; ~$ f$ Y* u4 T* y3 G4 |& _ { for (int i=0;i<MAX_INVENTORY;i++)4 J! n" p: c) C9 {! C. s
{# x# R, u$ e& {% ]9 }0 \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ D; ?- g) r/ g% F if (!pItemElem); q, u( u) O5 R- j# e! R, Y
{) w9 }0 c6 H: ]$ q+ k
vItem.dwKind2 = 0xffffffff;6 ]5 M3 r: K( u8 z
vItem.dwItemId = 0xffffffff;! _, [. G2 Y: F
vItem.nIndex = i;
* F* l! c! w/ |: j3 k; x }else {0 n$ Z1 q$ @# U' Q& v9 h
ItemProp* pProp = pItemElem->GetProp();0 v0 f- b' l. M1 y0 g: P
vItem.dwKind2 = pProp->dwItemKind2;
! f" c: S. \+ b) }6 J; b* A vItem.dwItemId = pItemElem->m_dwItemId;
% x7 v; f+ w, ~) ?! G vItem.nIndex = i;
- }5 m& @( A+ ~7 a }2 `) ]- @/ v+ l q; d5 ~. }. W
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ r& f; K- x* e9 m/ X
}
; S" H% m- B1 ]0 N: [0 E /////////////////////////////////////////////////////////////////////////// N* t+ J& g4 E r/ i1 m
sort(vItem.begin(),vItem.end());//排序
$ O$ u8 I: {7 J8 F9 _6 y: v6 ~ //////////////////////////////////////////////////////////////////////////
s$ T+ a* c5 D //交换4 `) S5 e7 k7 z2 ^
for (size_t i=0;i<vItem.size();i++)% |% _" F ^6 S7 C# U
{
; w& p) W+ Z4 c0 T- C //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" S2 R* B e2 B3 a: D' p4 G
pInvSort->Add(vItem.nIndex);
7 a* J9 S8 v# K$ i! L& T, I }% D" p& S( A0 |/ N
BYTE nDestPos = 0;
& Y1 o& K) x) j8 g [) G' L/ x for (int i=0;i<MAX_INVENTORY;i++)7 E9 j- s% p! t+ J
{
/ L& H1 `" [9 p; d* k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) D$ x4 F* S- F3 K if (pItemElem)" _! r: r [! o2 I
{1 Q5 k7 A5 d$ B- N# i& l m( X C( j& q9 W
if (IsUsingItem(pItemElem))/ Z9 N9 u* o! Z* M
{
1 [! u2 y; [5 T3 V! t //这个位置无法放
1 s! f, x- v8 R+ H nDestPos++;
7 D5 @/ c& L# e2 V% O1 Z1 i% E } s' y) l T- B
}
; d1 Q; f( Q- N- ]) N) _3 q" _ BYTE nSrc = pInvSort->GetItemSrc(i);: J- z; }- l$ A5 T
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); n0 a2 i. O8 {( A: d
if (pItemElem)% J( h; B8 Q3 S; R% C# L9 M
{
9 O" t( R, L8 q9 e2 M% Z" g if (IsUsingItem(pItemElem)) ]2 A+ p6 i1 c8 [6 N3 j
{
$ g! R+ I# h2 y: ~* N //这个道具无法移动,跳过
: X% }8 v) x3 O' P8 p& E2 ? continue;3 y1 E3 s6 e* g4 m
}
2 Q6 }8 X. v8 T" H: l }else{
3 U7 L. v* _( ^ //空位置 不用动' W# C h: Q s3 g6 z
continue;: v6 E6 ~" m3 r* g, c! @ e& G7 |
}, E8 Y2 |* B8 L. }, P5 L# a
//////////////////////////////////////////////////////////////////////////
3 ~8 x# p- A9 ?$ v: ^ //开始移动, w7 d+ M; K# u3 X
if (nSrc == nDestPos)
( E( `- ^" U J7 N! r) e# \ {
% m& h9 ^* P! e4 @( Y //原地不动
+ G# n2 p% @! h% {( y nDestPos++;
5 L7 V# E: D l$ O. A2 U2 Z; a3 ?4 _- W continue;- W0 C- ?! q- n7 R" I& K8 z! d
}
1 u K5 L. j7 P( l pInvSort->MoveItem(i,nDestPos);0 Q5 e- {5 D% A! R; |7 F$ ~
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 t- O5 A: p* B' z: s0 H Sleep(5);2 P3 ^8 ~+ y3 J/ G& ~( M4 Y- S
//Error("移动 - %d->%d",nSrc,nDestPos);, I: E: K" S* z, P9 d
nDestPos++;
6 P+ H# k, j/ E) F$ Y1 g1 M }. U0 J5 u1 e" j8 T& H/ k* ~
//取第一个元素的信息6 ? j+ \2 I$ g7 L" B
/*3 a. a3 Y! n# g; P2 z% k( M; ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 Q+ p: ^. W/ X+ J7 n; a# l
{
# T: r3 T5 C- C2 J; _ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ C' v4 p5 c- R' k9 h3 b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" E- j6 Z% R1 r8 A$ M
}9 ^- [/ e2 I5 s3 M3 U9 B- j, H
*/
6 w8 u$ { l9 G //////////////////////////////////////////////////////////////////////////
^+ p6 h# d+ @9 n/ { break;
. `7 [- d0 l9 H( Q% _$ a }
( b$ U8 m6 ?* K. \% r- M }
! k' x9 f3 K; j! E0 Q1 z# H& }}- f0 I( U8 d& M
m_wndMenu.SetVisible(FALSE);
. m. ~# J9 w3 r/ v/ R
0 x# `$ @, f+ |* _' b# q' E7 U* N--------------------------------------------------------------------------------------------------------
; T, n! X- P( p* t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# C% u+ c) H! k i: @' Z- a8 E
{* y, z4 e0 `% x- V
BaseMouseCursor();; F. C( x% f& a H4 f
}0 T3 W. f; D4 o3 n ?" }: |9 ]
在其下添加:6 \% C* G9 @- h6 Z( n( a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" t/ x: E; c+ D$ E
{" O% W0 ^/ o# N7 C, W) a
m_wndMenu.DeleteAllMenu();
% x+ ^3 S1 F6 U# c! Z# [. ? W; Nm_wndMenu.CreateMenu(this);& C4 U4 G5 b% h6 a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; @1 N% e# Y/ u' C( P& t
% M. V/ K3 k: K- q2 ^2 Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 b2 t1 g2 I. r0 Y7 U{$ ?' N! I: a8 z8 d- ?+ c# q
//P以上级别才可以删除所有道具9 r3 a0 G$ @; j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 i8 n/ q7 p/ d# h1 G7 y! @}, a+ j8 P- k5 j9 u4 i/ l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 ]% O- T" ]" J( o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 p$ H! g# z$ Z) ~
m_wndMenu.SetFocus();
' P) \$ N: C/ Q8 |5 H" V5 h) b* b}
/ N+ M9 R1 F" z/ M3 |) i& j------------------------------------------------------------------------------------------------------------
; [4 X0 a' C9 q s; \2 u*************************
& h5 ?4 Y4 }/ k+ IWndField.h文件
2 r% V0 P' |" [1 R( b" u# j! i*************************
9 m2 Q+ Z' C0 g( h4 ]3 a) m( V搜索:BOOL m_bReport;3 r4 U' ]' |" U! b2 h( o
其后添加:
5 l" o) Q( D8 L) D9 i) XCWndMenu m_wndMenu;1 g# e u2 b3 u" L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 A( g' e4 v; e( w1 I1 t l. G
其后添加:) |0 \# B: ~$ N8 U8 @3 V( d0 g
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; {) ]6 r' w2 ~( T x
9 M# y7 ~( W1 X/ b" l4 p( Q4 v6 F- f* f* |6 V9 v' w
|
|