|
源文件中_Interface文件夹下WndField.cpp文件- _( j! a/ ^+ Q/ g7 k- R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) M a2 i y. L! w' f1 I, U2 r: x
+ O; D" u% I* [0 Istruct sItem
* z, d) }2 D' R7 N M$ x{
: Q: c* P1 u" P4 {0 l' B9 b IDWORD dwId;
$ I# w: B# ~' ^2 e; H; KDWORD dwKind2;
' D+ c ]9 ~- c/ Z! H. n- aDWORD dwItemId;
. E. @, r+ [3 G9 b7 QBYTE nIndex;
/ ]) n; ?5 k! I$ I/ CsItem(){
8 |- X6 F! h2 C; r, a' c dwId = dwKind2 = dwItemId = nIndex = 0;$ h7 R& @: x& u e
}
+ ~0 U- @1 @$ G, w D/ dbool operator < (const sItem p2)4 M5 p& @, W f; D* s( x0 j
{
: O$ u5 Q9 Y C* p if (dwKind2 == p2.dwKind2)
+ N$ s$ H) g" `; \, i7 r {0 ^* E0 k% l% _ M# [3 _0 s0 T- @' R
return dwItemId < p2.dwItemId;/ F( C9 M# ]% O* x u, C
}else{
1 C; J/ {+ E5 O" Q% L, H return dwKind2 < p2.dwKind2;
1 y8 b# E* i9 D, a6 T* c }0 U# d x4 L6 \# L* {
}
) l& ?) I6 T K; C9 ~" Q7 n};
! q) T) P; ~ v0 M$ K. R: tclass CInventorySort
3 e( i! l6 c8 \{
' {" H- d/ \* i) c; l# g7 ipublic:) k b9 j1 N' j- t
CInventorySort()
3 t4 O9 \4 ]. z/ W/ v+ B# A2 E* N{0 v3 p) e( I# g1 A' _
m_dwPos = 0;
* z1 K3 k5 b0 ^& k}
0 R9 F: u2 H/ W, \+ s1 Q: X, v0 b~CInventorySort(){}
a7 Y9 X% r" |+ L/ w; _& uprivate:3 G, f1 m% S$ D. H# i7 V b' Q2 y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 E8 }: h+ u8 p. w" r9 f7 l N2 y( r" m3 ?
DWORD m_dwPos;
' a& \1 f5 l; D: l0 T) d" Wpublic:4 f9 M1 c* {: c( R# C3 y3 V
void Add(BYTE nIndex)
, O& }! H; D- |6 M6 P- W' r) D2 \{% l: c, G* h) g5 p$ _( b! D+ k" P! j
if (m_dwPos >= MAX_INVENTORY)& b x, e" O% x3 q, N8 |
{9 u; F+ X: V$ y7 _
return;
4 ^2 k* D1 o9 T7 I }# z5 K/ R6 P/ V) Y3 r
m_Item[m_dwPos].nIndex = nIndex;
2 |& b8 J& \, O6 U/ M7 t1 ]) _9 | m_Item[m_dwPos].dwId = m_dwPos;
% d+ Y/ F% _! X( X. d- @% v m_dwPos++;* ?+ d3 R$ u, w" L: E5 @, `2 J% J6 m
}
7 x6 f# ^" H t. w2 }0 c2 Q0 cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
^9 x/ M7 K1 E8 d3 @9 S) ?: Q{) t. x3 R. ?. [. @( b* O+ M* |0 ~! {
for (int i=0;i<MAX_INVENTORY;i++)6 {) ~ X8 g$ l- i5 X
{" [' G5 N3 _' f! {$ [: l8 j
if (m_Item.dwId == dwId)
" N. `! E, g1 l- m# K9 J {- E8 {/ H* u* c) ]( r5 V7 F
return m_Item.nIndex;
* A/ ~! R, _- I- F2 K: u! ]) H* c }2 c4 O- `! h! `* i% d
}; V. y5 F+ F \
return 255;
& n* u5 p/ b: G2 {5 ~}! Q; \# T R/ l, D C% }( r4 y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 w5 x& U; ` R; G{- J0 L6 L. ]0 ^
BYTE nTmp = 0;. l* o" p! W* n& F; A
bool bDest = false,bSrc = false;
2 ?- W* y/ r5 }! }# c3 _. A5 j, o for (int i=0;i<MAX_INVENTORY;i++)
2 u# n! j8 y$ Z; r {
9 t" Y" F4 b. h2 ]. c; O/ X if (dwSrcId == m_Item.dwId)
$ c1 Y* N$ R( F! ]: c! r4 }; e {$ K1 B: h/ E% v4 t7 L+ k# e
//id相等 则 改变对应的dest和src
# _- }. G0 _8 W, l/ r2 d nTmp = m_Item.nIndex;
7 @. A3 o6 d) y4 g m m_Item.nIndex = dest;2 e s7 {$ e% L* i8 W
}
' R) M# f, w# S* G }6 b. C$ {% ?& A* C# J* ~* e
//临时数据保存完毕,交换开始8 J. u# C. ~# i9 P I5 d
for (int i=0;i<MAX_INVENTORY;i++)
7 Q R6 N# ^9 G {
' z) f8 F7 u' e if (dest == m_Item.nIndex)
, E& R# o+ m5 D, n; l# X/ G {1 d1 e: e0 ^( } H' ^) K' |
//id相等 则 改变对应的dest和src l3 N5 l0 v7 l% X8 Y; t' Q# L
m_Item.nIndex = nTmp;4 _$ W' _" F& }' |/ G/ X! G
}
6 n7 _# P& |$ N' V8 N3 n8 O } W3 Z, U/ j5 F, y
}6 z e9 P: F" O+ X3 U
};- D* I, i) P! c: c% E
-------------------------------------------------------------------------" d* J2 z0 X- k% h' f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! n# D) W- J8 }: q1 y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( u# A% A. A/ x* s( P紧靠其上添加:+ y7 w7 E& p3 K, a2 w
if( pWndBase == &m_wndMenu )5 g* }2 N$ B2 O% J% b
{' u5 Q d$ z! U+ [
switch( nID )
' M: Z% L9 h9 F/ J {. T+ I' U1 `9 o$ X
case 2:
; g0 _5 c m1 O; D9 w' V6 o {, E! h# g! `: y9 h+ r) O% S F3 }
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! o; D, Z4 l1 l- `5 r7 n if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 N9 x, d' ?0 s c0 ]+ l
{
# o6 N9 |" R q break;
5 v7 O, |) L5 U& n8 C }
& j# H8 m+ l4 K0 B3 L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; k+ T; ^& q7 V {
4 R' |" d- Q+ _; X. G" r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); ]3 f" E: C$ c8 y7 X: Q
if( !pItemElem )
2 Y3 f7 n6 {5 \* q7 y) p N/ x3 l continue;8 e1 e- e5 z) ~9 Z' H
if(pItemElem->GetExtra() > 0) W- W# |3 b% M/ H
continue;
- ]9 l, \! @; F# u& j1 u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + Z2 w) }6 e) F
continue;$ J' d+ C- F' C( v; C
if( g_pPlayer->IsUsing( pItemElem ) )0 h n' E F( t1 _0 A p1 f! K( @: _
continue;7 M+ o! c* {: u( h
if( pItemElem->IsUndestructable() == TRUE )0 s+ z3 I1 w$ W8 \
{- `2 R, u* `9 h c( d$ `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ r8 q! D( _0 I+ Y3 K% x& Q% j \8 J8 _ continue;
4 L: u2 Y, f: q7 p, w) v }' |$ u8 @; [& @+ r# [4 H! c, F1 a, V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' H( Z$ d& D) `) K m/ C2 D
}
# I6 G# u8 }- B. X break;
& b$ b& i) v, s }- h2 U- n( n) N" F; g6 |
case 1:: N+ B, U# c6 d L. e
{) Z# c! G O5 a, R; O0 d) W! u5 @
//整理背包7 s; s. B* _6 m! z- m. a7 w/ s1 B
//////////////////////////////////////////////////////////////////////////
7 f7 N' w% l! W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 @' [+ @( ?. `
//////////////////////////////////////////////////////////////////////////: ~& c: ]( o: t. a- r% e! A+ i
//////////////////////////////////////////////////////////////////////////
' Y# D1 U3 t z# m5 z5 O, F2 a CInventorySort* pInvSort = new CInventorySort;, x5 J) h J% ~
vector <sItem> vItem;
; w) t0 G! H: C5 v" l) h1 C vItem.resize(MAX_INVENTORY);//初始化大小
+ S, K$ W' w+ r p4 z4 ^ //////////////////////////////////////////////////////////////////////////" f8 i$ T& O: t, }
//填充数据2 Y$ j* m8 A" y8 E) m
for (int i=0;i<MAX_INVENTORY;i++)( N; R4 I, y3 T% I" c" t1 ]! U! `
{/ T) o9 q4 s* Y+ V9 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) f) a- ^' I4 G) H
if (!pItemElem)
) L: ~& A7 v" T6 C1 N {7 N' P* }1 B3 n
vItem.dwKind2 = 0xffffffff;5 X* y* B' r0 W( u; {, V
vItem.dwItemId = 0xffffffff;. v) O3 M2 t5 h/ g! g% q; g- D9 Q
vItem.nIndex = i;5 T: h( b7 @- D: W8 A
}else {
9 H. M( t% N! i" k ItemProp* pProp = pItemElem->GetProp();) _( N3 S5 t' n; c+ [- K8 c' U9 V
vItem.dwKind2 = pProp->dwItemKind2;
: @' q, P0 J* _, t/ @( k vItem.dwItemId = pItemElem->m_dwItemId;
1 @4 |2 l- P6 s" V# }5 O& S, P vItem.nIndex = i;
& p# P O( W, \3 Q+ M" l8 s }5 |2 J$ D$ h: c) n/ q2 @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( a/ c" V3 s( _& X* I+ Z8 w, B
}5 ~$ U; _1 F0 J# _ S5 E2 c. B
////////////////////////////////////////////////////////////////////////// G- Z' d M" J* `( d
sort(vItem.begin(),vItem.end());//排序
3 j" f0 l2 H' u5 g //////////////////////////////////////////////////////////////////////////
' K" U3 h) Y: o% p //交换
: [! Z {! _2 h+ [, E for (size_t i=0;i<vItem.size();i++)- T! S- a6 }* Q
{* V0 M! ^: A; v1 R! t( x6 h2 o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 x8 d% Y2 ~' X3 o! S pInvSort->Add(vItem.nIndex);8 M$ H2 b7 S& a( \8 b5 X
}# i9 t, T4 k8 ?9 Y2 {: O" s
BYTE nDestPos = 0;$ s* e+ P+ X. R. d3 l
for (int i=0;i<MAX_INVENTORY;i++)1 I) F; I7 J% s: g( h0 X6 ^
{" {/ @5 K6 r: O2 ?, Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 v* c1 @! m, u, d% V8 n if (pItemElem)
2 s# D( V% Y2 N* { {
5 h7 S4 Q5 j' i1 V2 T. K9 | if (IsUsingItem(pItemElem))% v, l1 s; M" C
{' \, F$ [- i* a" v0 P& V% w: R
//这个位置无法放5 [* @* k7 `8 A
nDestPos++;
) H1 V; E$ V' N6 w& w }
6 f v8 P3 S+ G6 @/ z' \ }
& |, ?9 x4 S9 O7 K, J8 Y BYTE nSrc = pInvSort->GetItemSrc(i);
5 Y4 B& j3 o0 X2 Y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& s- }$ Z1 U# ~" \& m- | if (pItemElem)
7 a" v; e& ?, i# D {( ~& @$ e3 K5 W- S+ w+ E( q
if (IsUsingItem(pItemElem))
n- \ x \* [" { V3 r2 w2 V. m {6 Z T( z, i4 a0 c. R
//这个道具无法移动,跳过" q M# ?0 o. `- K
continue;
K' y0 s C$ ~) _1 h8 n }8 R# ^+ H' B. i& P; w1 m
}else{
& t+ l h o/ M //空位置 不用动5 u; L4 y" e* I3 k. Q( _( p: c
continue;
2 D3 n6 b" E. k/ A; F) p0 D+ G }' A- \ p% _% p @- V
//////////////////////////////////////////////////////////////////////////- f! Z6 F7 |+ C/ Q5 B
//开始移动7 R1 m8 e0 m* O* x
if (nSrc == nDestPos)5 F' T* |; x$ B4 N- q/ G
{
& [3 q1 @7 T! k2 H6 f; a/ b. ]" G //原地不动' \! V2 A) I g& ]! L# S
nDestPos++;
3 L* U7 ^% Z2 w/ B8 u H continue;8 _& c: ]. D1 d6 l- n* r$ a
}' W. U& z8 u$ ^3 O, l7 A
pInvSort->MoveItem(i,nDestPos);3 D: r/ r" G0 S$ t$ v' a1 P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 Q4 X& X4 P3 S2 ^" v) o3 V" _ Sleep(5);
- f* C- A1 W( p( N5 p& G) e //Error("移动 - %d->%d",nSrc,nDestPos);/ j K5 a( v+ [/ U' P
nDestPos++;( G, z6 c: B/ u& U
}
8 x4 {( R6 z0 [! i- W4 T //取第一个元素的信息
: s: K; d& s! }0 Y8 Y1 I /*
6 E$ d: T, l6 {! b+ u8 h2 u if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* C6 g4 J/ c* a' Q4 [ U0 r
{
# S$ ^. G+ e2 ^7 O/ ?5 [% N* h Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 Y8 `) s6 {6 E9 ] g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* s9 N# a. a, d: Q: Q9 e4 h8 ^6 B }
: J! j6 P( b- u0 p */
! k" H1 t9 W9 m" p4 D //////////////////////////////////////////////////////////////////////////) r/ [# |" _: V+ P
break;
+ e5 Q; i" l% L# a, F }8 o0 e& [: N q0 `. }
} , N+ R8 w0 W/ s6 X
}
9 g& v1 h* s% h5 `0 C& Am_wndMenu.SetVisible(FALSE);& F* X: D! s4 X/ @; n7 Z4 v
6 ^% Z: J, g+ X; y
--------------------------------------------------------------------------------------------------------8 d) K- f5 W' v! D- T; F, k: W S$ n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 U% l( d& `* {
{! E2 B+ H5 J; X& v! m1 e$ L1 ?
BaseMouseCursor();6 c( M ~( \1 l# e# N+ V- ~4 }
}6 q; [" K6 q' d1 u
在其下添加:
/ j& t- \5 m) x8 p3 ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ f: y4 b y5 n
{
7 g, z4 Y! I3 m3 d3 `. Am_wndMenu.DeleteAllMenu();
0 M' [; J7 u: r, {5 Y8 hm_wndMenu.CreateMenu(this);- B. @7 ]! D }
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# O: |/ o( ?( D6 ?5 V
9 X D N0 X+ `6 t# jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: c/ v) R& \5 I- ] o7 l{
7 q, X( [; s5 T9 n- s, D/ ` //P以上级别才可以删除所有道具
4 r1 b" J3 a" ^$ r1 { P3 M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* Z( G; f. D6 v+ c6 q5 n4 J5 f( n
}
9 |7 Z! \: A: i( r' O( Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 `0 a5 {( w1 x: l3 v+ N- W) R
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 l3 h: Y6 [4 E0 g+ Km_wndMenu.SetFocus();
8 a8 R! T# N5 q- J6 k( f+ E}
! T& D- y1 z# l/ C ^. C* {4 j% Z------------------------------------------------------------------------------------------------------------- w" k8 Y; e+ b$ E d3 k7 {) K, q
*************************
$ C* i2 p& q2 n. p) p8 uWndField.h文件; j" [" G% V3 A' ?" \# [! F
*************************7 j3 I; n9 n7 Z: z( j# l
搜索:BOOL m_bReport;
& ?. r, Z. _. J- S) I4 o! V ^: f其后添加:
# K% a3 _1 _9 L+ _$ b0 O0 V( DCWndMenu m_wndMenu;) M, V' r, t6 \- o# v- T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 `0 N9 |* u6 a/ g其后添加:$ b- O) @& O- i; r7 _, T* I [# W% o
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 o; q$ v' a5 x5 ?7 P% n9 A9 W# e
* }- Q* X6 l7 R7 H9 {
2 s" o9 y$ W- ^8 z |
|