|
|
源文件中_Interface文件夹下WndField.cpp文件
6 \4 B$ ~1 v4 Z) i9 j; v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 W; n! k* W0 U
( m9 }( B2 g- E2 p' r
struct sItem. F9 H3 \3 K$ V( g7 Y( ~& N4 n
{
- p, m- w7 K8 I6 p- L6 }DWORD dwId;
- l9 X& c2 n% |6 a5 c5 N3 Q( vDWORD dwKind2;6 {5 ~* [" z. E1 I( ?
DWORD dwItemId;" k9 F& J) D/ W$ d
BYTE nIndex;
. |9 K& m8 c) N0 u' _sItem(){
6 }$ y6 x3 ~; \: B9 q dwId = dwKind2 = dwItemId = nIndex = 0;+ U8 C; q0 ~4 k9 ^" Z) `/ x4 r
}
' q4 s4 d u1 _2 {6 I2 Zbool operator < (const sItem p2)
7 K0 j3 q- \( @3 l! z( L{% @; }: J, h/ u/ K+ e0 j: S" K8 `, O
if (dwKind2 == p2.dwKind2); k3 Y) L& n/ K# }( ]& X9 c$ }
{
# N2 L1 c- M5 ^0 E% F8 [ return dwItemId < p2.dwItemId;) j0 `# t/ C k' @; o- N
}else{. `5 g3 ?8 f3 v9 S G
return dwKind2 < p2.dwKind2;5 {; U0 Z( i* A2 b
}. c# d7 V2 b2 X! h) n
}
$ u) N2 L; Q7 [& m/ o e};
) `" S& X, J6 j2 L& e! k+ [class CInventorySort
: z* W6 V' C6 N7 z) M2 Z% G, e{
# t8 A- g! u; K3 u* w9 _, Gpublic:/ K) N7 W- ?8 x; {. g) q2 o) P
CInventorySort()
( v- T- s, @1 P- X! Y{
J' P$ ]" b6 Z: ^1 a- p m_dwPos = 0;
0 Z3 l; y7 A8 H}* ?6 X7 r! m& P8 K/ j9 {
~CInventorySort(){}
7 F% l; k4 F# i$ l' L [8 J2 ~private:! `7 m9 u. F4 E1 b5 b
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! o" Q7 h$ m4 p" FDWORD m_dwPos;
1 q( [8 j0 `4 R# J2 N; npublic:
3 `$ b0 }7 ?4 Fvoid Add(BYTE nIndex)% m6 W6 V/ c. z
{4 K0 f$ R2 U2 Y" U0 V
if (m_dwPos >= MAX_INVENTORY)
, p+ U# P, f( V; ~5 } {
( S. u( y. X V$ Y1 Y2 V* {4 v( h return;. k! z: k, E- N' X2 d }
}. i6 p' ~( ^ J; t+ F( A/ `
m_Item[m_dwPos].nIndex = nIndex;
' m e( _% g3 C m_Item[m_dwPos].dwId = m_dwPos;
+ ~$ u% G7 F" Y+ b3 m6 ]5 P8 N m_dwPos++;5 p) F$ w6 k! Q9 i
}
9 A3 j0 L* D2 f. G* F. e: mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 F A1 W" T. N! e* k/ E
{
" s8 c" Z! O: D0 y9 L" P for (int i=0;i<MAX_INVENTORY;i++)' y2 l' j; w0 r: ^' ]
{3 N# i4 J) B4 I9 K/ p" \
if (m_Item.dwId == dwId)
/ d: H3 h9 W, s* I( @ {8 s7 n4 w+ ]1 h" _, f
return m_Item.nIndex;" p( Y! k1 w5 D. t
}
0 ~3 ^ S2 Y) L3 \. H }" }/ j0 d: o$ r5 n8 _
return 255;
6 M$ s! f: _1 F7 B0 a. f8 m+ h}
4 Q) j d, t; a0 [! B$ X# a Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 h* w9 T0 ?6 w' X( ?) d2 s
{% R, O% d. d+ H/ ?! @
BYTE nTmp = 0;
, h5 G8 d5 J w bool bDest = false,bSrc = false; q4 V2 b3 C; \- a4 i) M
for (int i=0;i<MAX_INVENTORY;i++)& Y0 i. X5 }. S/ V& V2 Y) U# Q
{
& S* ~9 q; n, E, R4 H2 b/ G if (dwSrcId == m_Item.dwId)
9 j3 r3 o' e, f$ p, U4 H' J {
, i: H, T) {/ h$ f //id相等 则 改变对应的dest和src
8 {/ Y: K5 z( v6 `) a4 w1 @ nTmp = m_Item.nIndex;
: x: o4 k- n9 n* u% ?: x1 [4 A) D; K6 { m_Item.nIndex = dest;
; t2 @, X. g- d# l! z. F }
) l$ F# [6 D9 }3 d H }
6 y4 @/ @- r# r! S0 P) j //临时数据保存完毕,交换开始
S4 i$ z# v5 V7 J0 h# O for (int i=0;i<MAX_INVENTORY;i++)( H4 ^) S: P( R' B& M
{( z( v3 A4 @- F/ O3 M2 p$ a
if (dest == m_Item.nIndex)
4 ]2 D3 C- \$ z; L# [1 \, ? {5 [' a' @( t1 X& N" O9 }
//id相等 则 改变对应的dest和src. H& i4 c3 N9 @ \4 z, S5 ?
m_Item.nIndex = nTmp;
g [ j' w$ W0 W! [/ V) s }
8 B1 B" ~5 x: L# l }3 y& D4 p8 S; L8 z* ]
}
* Z+ d$ H$ t9 g) |+ r};
! {! o# R1 \3 ^-------------------------------------------------------------------------- \& E# v, D) K7 u' O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
W' r+ Y8 _7 Q$ A2 r' f. M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); a E. y) D* M! p; {- L" i( s
紧靠其上添加:
% K% O" r( D+ E& m8 B3 [4 |2 z) cif( pWndBase == &m_wndMenu )
# _% W" Z o4 n7 i" @' Q{
$ K4 P% z% q6 d% X; m switch( nID ): f& E1 U% x0 g/ b
{+ G& Y7 ?0 a9 b) R3 X& R2 E3 t
case 2:4 a2 {$ I2 d- G2 `/ r4 }
{
' ~4 E- O. P, e' q e7 v4 H3 W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( ~% ]' x& y0 c! H7 U8 ^7 f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& j8 ]$ H( o$ v$ S: t
{2 r9 ~+ V( \6 t' N9 k+ l5 ^
break;
: m5 s. `) W% `5 J$ h& ]0 R: o* M }* s2 V% C; E8 z! E. u4 @
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) `: g2 |- M! x! _) V
{3 Y, `1 ?) N [# e M; K9 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" y/ e" d% {" E E# l/ R* q2 q4 p8 M
if( !pItemElem )3 _2 c, b: p, U0 P3 P. E9 Z
continue;
- I5 ^# `% c4 p& p/ ~8 ? if(pItemElem->GetExtra() > 0)
( [: J+ x& ]' v- N- y4 Z0 \8 ] continue;( w, M. T( Y" n
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 C5 ?3 I2 i) `7 r3 C% _/ N) G6 s0 K7 i V continue;
' ]+ y; x1 R) K' \0 R; I3 R+ l if( g_pPlayer->IsUsing( pItemElem ) )) F/ e$ l; m# `: `4 E
continue;
# c% C+ u5 h1 m3 A if( pItemElem->IsUndestructable() == TRUE )
6 b# }* b3 j5 V6 G; f+ h {
1 T2 Q' w) B! u7 Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 j3 z0 e; d7 O, ~9 U9 h( b8 a, h
continue;/ l3 Q6 N& u; j% D, s: S; o8 w
}
0 Y& F2 ?9 \: M' x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& k6 c- g6 T* N( e5 y
}+ K, ^+ N* I% p7 ^9 r/ I
break;. q" n0 n) p6 V, {8 j' }
}
+ \2 O$ ?% Q9 t case 1:
) l& Q; w! o g" U. O2 ] {$ c* `( q# v7 u$ K, r. M
//整理背包
6 i/ h4 r, l$ ]' W, O/ x: W% d7 i //////////////////////////////////////////////////////////////////////////( H/ ~8 j. o( Y. N& u: f
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' O+ q" F# y# M, n- U //////////////////////////////////////////////////////////////////////////% G& ?6 f/ l# J0 v
//////////////////////////////////////////////////////////////////////////1 k4 q7 u! ?: f" p0 ]6 U
CInventorySort* pInvSort = new CInventorySort;8 l% u4 t, ?( k
vector <sItem> vItem;
' _) _( S# y L' g" L1 b% @ vItem.resize(MAX_INVENTORY);//初始化大小0 s4 L: ?9 F; M
//////////////////////////////////////////////////////////////////////////
7 I& f9 s9 E- Q) K: n% F5 m% X* l //填充数据
- B# N: y" i1 Z, P7 C% { for (int i=0;i<MAX_INVENTORY;i++)6 n" w7 M$ G$ D
{
0 W: H# [+ J l) \( T# e2 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 \9 {$ i5 m0 W9 I9 I* ^
if (!pItemElem)
6 `$ Z( F: l7 m: O {; r$ \0 r6 j, F6 f' ^
vItem.dwKind2 = 0xffffffff;
& C& N$ {7 J/ N, ?, H vItem.dwItemId = 0xffffffff;" f( s6 M4 m) B7 \- z3 V
vItem.nIndex = i;8 t! g, \0 W `3 G
}else {# ?1 H9 o& g3 b$ ^* A- l2 m9 I
ItemProp* pProp = pItemElem->GetProp();+ t* h9 u6 l9 u: g" L" k
vItem.dwKind2 = pProp->dwItemKind2;
* G0 u# S3 C: N; [ k3 [ vItem.dwItemId = pItemElem->m_dwItemId;1 m& k3 I7 B+ \- q7 Q7 z$ I
vItem.nIndex = i;
7 \) G" O+ Y6 O }. A) c- z" [6 t% ` r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 e' b0 d4 x# Q- n
}
2 U6 H: Q! ?$ W7 M- v% Y* ] //////////////////////////////////////////////////////////////////////////
' t7 B0 b2 V5 Z- `$ P. @( `% A$ f sort(vItem.begin(),vItem.end());//排序% [; X! t/ g* T( z
//////////////////////////////////////////////////////////////////////////) A/ q+ U+ f, t! g
//交换
& h, E5 f6 r, L5 ~ for (size_t i=0;i<vItem.size();i++)
( d; m% X5 o9 f3 t8 W {' R/ R8 G) F; p5 u7 g1 P# D% E
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: \- ?. `" S# \2 ` pInvSort->Add(vItem.nIndex);+ m& B9 X/ K2 G4 r `( G8 B6 p
}9 ]: c# F _3 C z# {! B; O
BYTE nDestPos = 0;9 n$ G9 k7 \7 `8 W; k7 b0 y. ^
for (int i=0;i<MAX_INVENTORY;i++)# {+ t& f0 j* x' i* r
{1 v4 v9 O& j% k8 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. I& T9 s6 `) u+ v: I0 |1 q1 q' c
if (pItemElem)9 P6 g2 E5 b0 F( I/ r9 T) x4 Z5 C0 z! k
{
) C$ f1 W: N, E if (IsUsingItem(pItemElem))6 f8 q$ d& h3 l W& d. V0 W9 |' [
{5 L$ K/ k/ Z0 u- e
//这个位置无法放- M8 \# l- W1 b1 C g5 g
nDestPos++;! h8 F# I4 g: p- w3 O: w) A/ E
}
; A5 u- k/ D6 h% f }% F m+ `4 D, Q* k: k! h
BYTE nSrc = pInvSort->GetItemSrc(i);' ~9 {- b9 i3 t6 }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' e5 i, r) X; N* s/ d( C/ ~0 C V6 G9 B if (pItemElem)
; a' X8 H: e; b {
7 Y3 V! p/ J! Y/ P+ }1 s if (IsUsingItem(pItemElem))
# f0 I- R" o/ Q$ k0 | {3 { |" n5 ?" i) u: G$ u7 ~& ^
//这个道具无法移动,跳过- _5 A! C T( o3 v5 Y9 x
continue;* ~: c3 u& a# Z- y: j
}
3 R8 [$ L! ]; ] `5 r }else{: H! P* |) @- D" W$ Q
//空位置 不用动7 \" ^( C7 D$ a& l
continue;
2 V* ~2 y* Y5 H, S }7 H- h& `: L; V( X: H J/ ^, [& w
//////////////////////////////////////////////////////////////////////////* F# h8 \2 h: E5 g$ P# }5 U# @
//开始移动* H, u3 J0 V* p/ ~6 C
if (nSrc == nDestPos)
6 W) _% }) C0 C) `+ ? {
?) M9 r9 E5 ?* A; E4 A" g: c //原地不动( v+ p, W3 x3 A1 f) g
nDestPos++;
" O+ ]. R9 X9 F6 u continue;0 |$ K$ o1 \" Q) w
}9 R1 X' ]8 u4 b5 J: i9 b# ?: f: j* w
pInvSort->MoveItem(i,nDestPos);7 K: ]4 w$ E# b7 [
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! r. e: _' o r8 _1 z
Sleep(5);* r, h7 `* y" H/ i& ~, Y
//Error("移动 - %d->%d",nSrc,nDestPos);
2 G7 a: L9 u t, } nDestPos++;
* }6 a! m, ]2 m$ r. m7 Z }! h, X" W n [' M$ s
//取第一个元素的信息( b7 A4 V: c, k0 B( n: r( r
/*0 c3 Z' Q O" g: x
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( J& j9 |1 s" z+ @5 K {
# F. v) ? i2 g9 `$ D/ k Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 p- \. R+ H2 C" e( p5 }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 g+ M2 }# }6 U+ S
}
8 I! l0 |0 [. f$ O3 ^ */0 |' I) j& v( G. v( ]
//////////////////////////////////////////////////////////////////////////
/ e5 @3 v# ^2 t break;4 d8 z( \, \4 q# i0 e5 A' k3 h( {# K
}
$ F! D P5 Z/ o+ |( A$ K S- W9 f' w }
6 X: s& G R5 \; ^}8 c$ h6 r% A5 z
m_wndMenu.SetVisible(FALSE);
! I8 J+ E. k+ K1 o F1 M1 r2 q( V6 [' u! P
--------------------------------------------------------------------------------------------------------
7 f+ f6 p. O# Y) U搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 @* S: K0 [9 g/ U7 Q
{
' r: Y4 D; j2 K, ~ R8 U4 OBaseMouseCursor();
, F: ]+ u6 K& T3 ?/ F, E/ u}0 b& v5 O; }1 U$ {, j* }
在其下添加:" P& m: `$ b: P( ^7 u+ G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- Y# _6 \ E" n$ p
{+ B+ h& |0 `! ~( I" y( k
m_wndMenu.DeleteAllMenu();$ A; G& l$ I! ] H8 E
m_wndMenu.CreateMenu(this);
3 z/ ]6 [2 W% |; a+ [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: e/ e! r/ W! u& T; [2 x
0 Q6 p; t! Q1 W" N5 F! Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- u4 D2 Y2 x4 H( {{! ?/ _5 Z6 K/ t- z5 b, f' D
//P以上级别才可以删除所有道具
8 j- Y( g$ [7 P m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 u7 j- E5 A6 p. O, k' M: f
}) c) N, j" \1 ~: ]7 D' @, I/ [% D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 ^2 C! P0 x( p, K- y0 S4 |8 x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 `: X8 `, }5 l' s- p& A B
m_wndMenu.SetFocus();1 E& ^6 ~5 y+ Y" f
}; M8 y& E8 L6 u4 b* t% _
------------------------------------------------------------------------------------------------------------: m6 q+ p' ^ ~! c# f* J8 W, k
*************************% f s/ a/ p: s# F
WndField.h文件
2 d, `' E0 N3 W9 P- k* ?* l*************************: |3 I/ S5 \% d/ f! q
搜索:BOOL m_bReport;
+ U" p1 K8 I& U7 w+ o4 @9 S' l6 E其后添加:
$ |' @( I% C ]5 K6 p7 ECWndMenu m_wndMenu;- ]. c+ S0 d! U0 k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 ^ [4 u! x9 v" ^9 I$ [; Y
其后添加:( T6 V! Z# e- Q4 N6 v
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* F0 X8 b* P* ~+ ?0 D' c- G, c% \, H
( U' B4 `4 L2 E3 h
) [1 L% a/ P( a4 Q5 t( u& Z# { |
|