|
|
源文件中_Interface文件夹下WndField.cpp文件/ ]: ~( d$ D" ~6 W& s$ Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): n( |( O1 i2 @) E/ T
9 [3 [6 I* m; ?6 }( C, Istruct sItem( f" r, ]5 f# u, f' A
{/ W8 s, S9 |% a/ q
DWORD dwId;9 K8 Y9 J3 \: P* H* j# `
DWORD dwKind2;
/ ^# Q& E' @5 g; ^; G/ [& L# D4 }DWORD dwItemId;# y2 \; [9 H# |. w
BYTE nIndex;
1 p: E: |3 k6 G9 o! ^& |sItem(){& | a' Z% Q) \2 R j9 R4 Q! s
dwId = dwKind2 = dwItemId = nIndex = 0;. `/ c$ I5 C/ i; a
}
G) z& g. x/ V+ q/ `* Xbool operator < (const sItem p2)
R4 V( G7 L4 P( V9 k" |{
+ a4 t6 z+ T% \3 P if (dwKind2 == p2.dwKind2)) i) A+ F; P# h/ `+ y
{
& \6 w9 Z" \# A3 Z0 t$ \; s return dwItemId < p2.dwItemId;
8 E8 h1 L, D9 Z' X% p }else{+ F" J! y1 ^* }0 x0 i8 |4 o; l- C
return dwKind2 < p2.dwKind2;
- U0 j2 a/ e( F; Q! U: f( D }+ M* q4 [& `1 W! G- `; e
}
& K2 }8 N6 U+ r# E3 n$ \- A7 m6 w};5 R. @; y, U0 u; n
class CInventorySort
" z: c V9 j. K* D{
; Z1 P: R+ F n/ Z( V9 dpublic:
1 V! Z5 w! O, n$ E2 Q: i* LCInventorySort()
1 I! g( ~' E1 ^/ C5 L{
- j$ |& ?, ?, K. O, z m_dwPos = 0;) d: p4 b0 z: a% I. ~
}
% `/ g7 ~/ m8 S( t~CInventorySort(){}
3 N2 R8 h0 O9 A; @& y( _$ ]private:5 l9 x1 E; ^7 d! K% o0 t
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 r4 c8 S% ^0 d" h9 xDWORD m_dwPos;: s+ Q0 r7 S" Q: G$ M; z, h
public:
+ R2 d; z: w3 A2 M5 Hvoid Add(BYTE nIndex)7 K) e9 g2 t. d
{
+ ]* g, t+ k4 B# Q if (m_dwPos >= MAX_INVENTORY)4 l, K% o6 C- E) g6 Y
{$ Z: v- Q! t( Q. A* C$ c8 B4 }' P3 n
return;
' x. M# N" h& Q. R }! E! d4 h( `" }1 h; T: a$ Y( T7 E6 i
m_Item[m_dwPos].nIndex = nIndex;4 a/ l/ H m' [2 f8 t( x
m_Item[m_dwPos].dwId = m_dwPos;1 b- O( k! x/ ?- ]! x5 J2 R% s& [
m_dwPos++;/ W$ A, {, k/ R% n4 l
}0 ^) u- @: O8 @6 F& P
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# h, B9 e- h/ G! n{
& t m/ |. _7 Z# w for (int i=0;i<MAX_INVENTORY;i++)* ~$ f' ?, O- c/ T
{7 o A- ?& F0 n/ s6 Z' ^
if (m_Item.dwId == dwId)/ D3 E+ |% Z N& y" J
{
6 {1 N' l" F+ |6 O; T& s return m_Item.nIndex;( Q9 J7 j# J* I3 G
}
. v& d" s/ e) E) o \# w }! N' w G. f6 |$ Z/ v9 \# A
return 255;
9 @4 {9 j' q$ z% P. a}
& G- z; a: R+ l% Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. H0 f+ T. S- {! V
{; I! v4 P: |/ ]# Y3 b; Y/ H2 A
BYTE nTmp = 0;5 E( U7 }8 X' o$ q" g
bool bDest = false,bSrc = false;& _. X$ \4 ~$ D" ~4 V* M( @+ d9 a
for (int i=0;i<MAX_INVENTORY;i++)
2 a; s" P+ f/ ^ {1 ]6 y* B9 Q) S3 G- E5 i/ X. r
if (dwSrcId == m_Item.dwId)) F6 g0 E. W9 a. J+ P
{
) |1 w7 u9 C$ K //id相等 则 改变对应的dest和src
+ O3 j6 v4 g" C/ P6 j8 R3 r nTmp = m_Item.nIndex;, U# `( X, s5 J$ x& S( `( a/ B9 K
m_Item.nIndex = dest;
9 B r8 n: h& z1 E: T }3 w) n) O$ r9 _, T! n0 r
}1 P( n& L) Y8 A9 f& b5 `
//临时数据保存完毕,交换开始
2 W& j( ~5 w& x9 Q' ~2 a, d" ` for (int i=0;i<MAX_INVENTORY;i++)5 k; s: V/ N( x* `1 o
{ N3 p2 D1 o: B! S3 i0 \6 R
if (dest == m_Item.nIndex)
2 R" m& o# E S/ B! B* N6 u { t8 B# r6 N9 D0 M* v; l5 C% u. u
//id相等 则 改变对应的dest和src+ F A3 g( \& N- B- e
m_Item.nIndex = nTmp;1 T+ O0 l0 y' ?4 h/ J2 M, _
}
. j9 L. ~6 k. U! n' p% l9 \ }; A5 g& c+ ^5 A; ^% n$ I) t
}
! w! z+ [+ K# B2 f: X};
2 j! e. R* ^( c/ g! u$ [3 H7 G-------------------------------------------------------------------------$ Q# Q# s0 N6 G! K
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 C! A% z/ b+ J6 O) u) p L) s4 S' w \
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. A, q! s6 D6 L8 r, _) r; f
紧靠其上添加:5 c+ k m; U, r) ~0 ?! c; r
if( pWndBase == &m_wndMenu )
6 w* ]: P C& M7 @, L0 j9 l{
# }1 k. U' Y. J switch( nID )
& p: {8 @& V$ V8 p, y: E {, V% y1 o: n4 ]6 z2 X# D
case 2:
: l4 g! O0 k0 s+ O. D/ Z8 V+ }/ o {# j. K. S5 ?3 p2 l: `
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ ] Y5 S' z6 S2 K: a% h if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( t4 |$ o( i% P" Q# e$ A1 F
{; N* z+ a: O2 O& |( r. a0 K3 T* ~
break;
7 e6 J0 I) \8 { D }
9 B3 d' E0 T' p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ a' ~' @, _& q( y {
% \' H+ t* ^- O* h* f1 p) } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); _( P3 p) k* N0 C8 Q7 B
if( !pItemElem )9 k2 V4 F% N% A$ h, d% C
continue;
0 x" J" Z* _5 l if(pItemElem->GetExtra() > 0)
5 h, L5 @% a0 R* w \$ N e continue;" C' t3 V7 e9 R* o9 |+ z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ o ]3 i# L+ B) o9 m) L0 w8 x+ Y
continue;. k9 f9 V/ Z1 D' O/ c! T1 h* E' o- \$ H
if( g_pPlayer->IsUsing( pItemElem ) )
3 e# E0 \) C$ r continue;7 Z9 c% a. v! F7 ^; |7 i3 f! E
if( pItemElem->IsUndestructable() == TRUE )" e- _# E- E3 h: _& u4 `
{2 X( n9 T4 j5 j7 ?. {' [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- J6 s9 r) h- }" d continue;) M4 s, ^3 i% N2 P
}
1 O4 w- ]4 M% I9 v9 ?& \: T, W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 K; M+ A, p1 N8 s& U }
" t9 r- j M( x( X4 i break;1 n) |; u+ C4 m; ?5 E6 s; s2 f6 ]
}( v. P2 v3 r* f! l0 y! f
case 1:4 Z$ {. v4 m5 T+ F$ O
{
1 p, {) ~ i0 s //整理背包
% j$ H0 E0 n) ~. C: k$ M" N7 t //////////////////////////////////////////////////////////////////////////- r! B- u$ F! z4 a+ w2 l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 H# k; [ X( ~' P //////////////////////////////////////////////////////////////////////////
$ {0 C" e9 {; H. ]1 [) I5 Y1 { //////////////////////////////////////////////////////////////////////////$ d" H& a( {; Y' w) J
CInventorySort* pInvSort = new CInventorySort;' o2 ~" E8 b7 Y
vector <sItem> vItem;
5 U. i: }, Y- x# A- ^ vItem.resize(MAX_INVENTORY);//初始化大小
4 B0 I; o; Y# T' I j3 U2 `$ v //////////////////////////////////////////////////////////////////////////
$ O. }5 \( ~2 ~- V. q) B //填充数据0 E1 ^$ ^* z4 @4 j8 l. \1 d
for (int i=0;i<MAX_INVENTORY;i++)
# ^) }9 u0 a6 [* L( \- L' ?5 ] {
5 q9 ^! v) s5 ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% ?# K2 m; ^, d4 G
if (!pItemElem) i8 `2 e ?; y3 o4 f8 h5 W
{, h) d+ P7 t' u: B% H1 ?5 P
vItem.dwKind2 = 0xffffffff;
7 H7 d. U: n/ U% P8 M vItem.dwItemId = 0xffffffff;) C7 H9 B) S9 m) I4 ?( ]
vItem.nIndex = i;
+ `7 M/ E6 q8 s$ j6 z2 v }else {7 J2 s0 C) G$ {6 x
ItemProp* pProp = pItemElem->GetProp();& T" G/ p1 N+ t9 u/ y6 q$ M
vItem.dwKind2 = pProp->dwItemKind2;% n. Q% H9 e( h$ K5 ]3 Z) \5 L) B
vItem.dwItemId = pItemElem->m_dwItemId;( _3 F. d+ a# J6 S5 h# [" s
vItem.nIndex = i;" e# d p% J+ X
}% z2 f; _9 `: B3 l4 T+ Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# L9 V. ^/ r, r; l5 y9 ^ }
V6 V! h7 V: B' R3 {9 N //////////////////////////////////////////////////////////////////////////5 m" j+ R1 C# z' t8 V0 N
sort(vItem.begin(),vItem.end());//排序2 w4 r6 p, t5 _( r+ z
//////////////////////////////////////////////////////////////////////////
) e, o9 D7 h; z+ Z //交换) Z9 W$ D! k" K8 I3 c; y
for (size_t i=0;i<vItem.size();i++)
8 C& \% y* J) C& W4 X2 X {
# K) w( f7 s+ a+ q) a, V* } //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 b/ s Z. j4 l, Q$ | pInvSort->Add(vItem.nIndex);
; Z4 M5 n; [6 J( a }
, T6 o0 H' Y4 u2 I+ N# e) O. J: S BYTE nDestPos = 0;& ~& M9 e4 E! A% K( {" p0 X& w6 \
for (int i=0;i<MAX_INVENTORY;i++): T) I9 y1 X. B% }: L# {8 K
{
8 x- S) J [" ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 f. M9 M( F, I" h0 s! n r if (pItemElem)
# E. L* H3 y, r" i4 J { `: m; P! u7 |" r
if (IsUsingItem(pItemElem))5 a5 [8 b3 `$ B& h& T
{
- w& [: h+ a3 f% b9 e/ [* { //这个位置无法放) y6 H- @0 `4 S' h" h. w2 ?+ g6 P1 ]8 S
nDestPos++;) m( L9 o5 ? X8 N* n2 T
}
/ U) ]' F2 H& Y }0 ^8 Y' ~: x% ~' @
BYTE nSrc = pInvSort->GetItemSrc(i);
6 W' i# |3 F4 E, h pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ d4 o; C3 i; {# f s if (pItemElem)
6 k: C! E v, a- T0 l! }4 S9 _% b' ] {( P' B6 f U5 y' K
if (IsUsingItem(pItemElem))! J; G* M, g& D( n
{ Y2 o8 v1 q, ]9 H* F: L5 o% t; H
//这个道具无法移动,跳过
M4 F0 ~/ M. P5 |+ [5 C continue;
, a! ]4 y- {5 v( y/ e M: Y }
2 i( P; _1 [8 R8 J$ c h: G4 o1 e }else{6 L! j/ _1 H/ @5 X& M% j
//空位置 不用动
% s* P8 R6 G0 Z& U* ` continue;
( S2 t9 V( T- X( a' g% Y0 y }
* Q' {/ p: ?/ M8 f4 a! T //////////////////////////////////////////////////////////////////////////
) m; _2 C" F) g% O' H& W; ~ //开始移动
9 K' [! h0 U- t( l. } if (nSrc == nDestPos)% v% | Y Z( n% x, }6 R
{" P1 D R- Z7 h1 ]$ J
//原地不动
! M) H* g* b) }7 B nDestPos++;
5 P4 y3 i* T) d4 h' C7 I% A% e9 Q( C continue;( p2 v( G" Y' _; z! z
}" i$ T @" H2 U4 D! |
pInvSort->MoveItem(i,nDestPos);# `) }1 ^% q" E, \5 T
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
G" d* }" R. x Sleep(5);
8 F8 g* P @4 p& T- I& n //Error("移动 - %d->%d",nSrc,nDestPos);
! d, o0 i- w ]& ~: t nDestPos++; s: V" H3 q2 m4 L. p( C8 F
}
! V" q8 o2 R4 v- P" O' P, Y //取第一个元素的信息
+ H; w4 j2 m# C+ M /*' d% F8 T: N+ S6 g+ y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& k5 Q" a; \) Q& r/ [, F) P' Z# ^
{- ]+ e; ~8 K; X$ N2 }$ c
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& _7 z+ U$ w- J! U g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ {6 W7 @7 a( H& J4 J% Q }: t; ]3 b) Y/ B1 d
*/
( p" |! P! o7 F& _% W$ S8 U2 ?( r //////////////////////////////////////////////////////////////////////////8 F" }9 }0 v8 F5 ]+ `
break;" i n' Y2 N6 x8 g+ o
}. `2 ~- c$ y: I* Z
} & i7 B. g8 O' O# l' M. o
}
5 ]4 ~8 F6 Q' Hm_wndMenu.SetVisible(FALSE);
3 m! @% s0 c7 J% m" D" Q/ T a; V0 ~& @5 B
--------------------------------------------------------------------------------------------------------/ g1 X- V* j; h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ o8 J8 N) z1 x K) Q6 L( s+ U2 A{1 \0 D, Q- N# ]) X6 j
BaseMouseCursor();. w- g$ O+ u; W; ]% v1 s5 c
}: O4 r, p% ~! s" S
在其下添加:. [+ o- i: F. S6 F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 z5 O8 i+ N& }
{& ^6 ~- i9 y5 r
m_wndMenu.DeleteAllMenu();
+ m4 U1 s& k! Y4 P s3 ^% um_wndMenu.CreateMenu(this);
/ b" P" A: x% G" B0 rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% e# V- a I" h& G* K; _( [. T1 {5 ^
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& e/ F* I8 @' l% U9 S. P% i{
5 ^( y& ?) }* m) W //P以上级别才可以删除所有道具6 _% ]& {% E7 i* C R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 D, [% @+ r& u* J
}# U$ x9 j, B/ |2 m$ F
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 W9 v0 H9 f5 A, e5 ?6 N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 I( D1 W1 V+ }m_wndMenu.SetFocus();: E" L# h4 D+ s) l
}& o! `) N3 u, ]% j: F
------------------------------------------------------------------------------------------------------------
/ A$ q$ L! I, L: {. G1 R*************************
# z' I4 f) X. I; {! tWndField.h文件1 ^6 x8 X. q8 \ B3 Z. ?9 \" q0 j
*************************
' O7 \+ i& m, H& A/ O2 u& E) ]搜索:BOOL m_bReport;
Z ?$ a4 d2 \% R$ y其后添加:
; T: l. ^/ c( ~* s7 U4 aCWndMenu m_wndMenu;
: Q) a7 V- J3 A5 j- i2 Z6 I4 Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ X7 N$ G3 p @, x其后添加:
. J1 R" I& x% X7 S5 Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);9 }5 e' }0 _2 b# N
+ j% j2 ^" K! G- o1 l7 E( f0 R V7 Y8 c! S( A# S/ ?. A, |1 g
|
|