|
|
源文件中_Interface文件夹下WndField.cpp文件4 H/ l+ Y8 _6 e0 Q; _5 O
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- h/ ^7 j& c8 e* d# G, [3 w2 g
, o" c# D7 k$ R. Y( w! estruct sItem, k7 G5 l6 l: D$ v4 K' D4 H
{5 M$ ]& v; J1 |+ y, q
DWORD dwId;. m+ ]7 l5 _5 H% U U3 q* X% _' |- Z4 y
DWORD dwKind2;
( U7 F* h0 r, G7 X, ], rDWORD dwItemId;
" o* Q' Z! d N2 ]& U B& QBYTE nIndex;; d9 K7 E( f% m- g# n0 _0 d$ O
sItem(){
7 c7 B: ?# N/ \' p% H dwId = dwKind2 = dwItemId = nIndex = 0;
- n" b- Q: F; M/ k3 N( b}
7 a. ~! }! k* I- _$ K2 p& C4 ibool operator < (const sItem p2)
3 k, i% M( k$ K+ E2 |{8 O- q$ z' b" q3 W- J
if (dwKind2 == p2.dwKind2). A0 N" W, D1 M3 p2 j- u1 c
{! m S2 Z# S9 N) s- S+ y# ]" h! u. V# r
return dwItemId < p2.dwItemId;
( n( z+ w! t2 s. D3 r) d1 b6 [ }else{
+ k, {- }' Q6 q/ o3 ] return dwKind2 < p2.dwKind2;: S" `8 M" c3 T6 |2 D4 f
}
9 ]+ O" n9 U$ d( `}0 b7 p* Z! j6 i. l* U
};* v+ E) d6 d. M% @! O5 u
class CInventorySort' v. H. K% J/ e2 H& C3 R
{
' _3 k' \! O/ J0 [2 Xpublic:
; {+ k! T) C9 g4 N BCInventorySort()
0 k l7 m( E* K* P7 I$ d9 p% O' B8 y{
7 z1 I4 A( J. n% q8 B! O7 b m_dwPos = 0;
; v( R" b- k4 [3 {1 x4 o) Z& p}
7 R! z6 p3 x* m~CInventorySort(){}! }. z% I2 T! K1 e
private:8 M# Z3 o# J3 s* B: P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& @' i' V9 x X1 J5 k$ R
DWORD m_dwPos;
0 v' U8 T+ D5 h. k9 X z( J: Y8 mpublic:
2 E a+ F$ r5 s* t/ X! P2 N. ^void Add(BYTE nIndex)
" D9 g* y! ?/ i% R& q{; A8 P' }: t0 ~8 ~
if (m_dwPos >= MAX_INVENTORY)
2 `& t+ S2 P( U# ? {
1 g/ \4 r; n' R& E: H1 i% \# \ return;
' B5 H4 t# B1 ~/ y' { }! c1 b, [3 H! e/ Z: X
m_Item[m_dwPos].nIndex = nIndex;
( k5 g- r# K9 i1 {1 o5 W k0 y0 H m_Item[m_dwPos].dwId = m_dwPos;5 ]+ z" O& U: B
m_dwPos++;
- D6 g0 \3 [( T# b; C8 G) Q}% v) ]2 [& p' q F* [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ x7 m9 I- K5 ]6 g- \5 W% j
{
* C1 H7 a+ r; X# V for (int i=0;i<MAX_INVENTORY;i++)
3 C+ Y9 X- ~3 f5 i5 c {1 N/ I r; j. n( R& L: T; Y7 W8 U& M
if (m_Item.dwId == dwId)
, Y, r& c9 p; X a7 |2 h( ~ X {
M9 F% c( T7 q return m_Item.nIndex;
u- M y1 Y2 {% T+ h: D4 p }
. x. @/ H) r. T& K1 s7 h& e) W }- w4 L& {3 i; f% [" G4 H
return 255;) E, S$ ^& w6 v e# S+ M/ D
}
+ L0 C9 y/ y! s' P$ _void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, A* b- \7 `# l# n" w
{
( `& [4 D/ K! K7 B BYTE nTmp = 0;
) f1 F' s8 j3 r5 a bool bDest = false,bSrc = false;
( X/ j$ N R- k7 a. x for (int i=0;i<MAX_INVENTORY;i++)
% `. r! v% k, h1 i" B {# G" g$ f! l% }( y( `* y3 ?
if (dwSrcId == m_Item.dwId)$ d5 S: M% S/ w# `
{& b4 _7 P' ~/ v4 d* }; o
//id相等 则 改变对应的dest和src
4 S6 K/ I) M' c C nTmp = m_Item.nIndex;- j0 u( b- g2 y8 P; s$ x7 G! b
m_Item.nIndex = dest;
- T8 x$ {! B: n- `6 r. A }
( m; N& w' y% K- ]* t0 P4 w# V6 E }
+ C% I) x0 p% V, }% p //临时数据保存完毕,交换开始( J4 p1 n! Q, n" A
for (int i=0;i<MAX_INVENTORY;i++), @" b4 @9 t# ^+ n2 V8 d- Z$ X
{4 Y9 Z* Q$ U8 |3 |
if (dest == m_Item.nIndex)) q* P/ T. }& ]: S% M6 ?; }
{8 y0 p5 W) G! }: C
//id相等 则 改变对应的dest和src. s4 F3 z$ E% Z9 a, M p
m_Item.nIndex = nTmp;
# u- n" Y: D$ z* } }
) p+ S3 D' [/ p' K7 j* l2 N8 _" T }& q% G( y4 g% h! b
}
- S# I" a" R( F4 O/ x( h! X' w};
" r2 E1 F: U- M3 R) p$ B. P2 d-------------------------------------------------------------------------
! H8 f, d4 b- l: r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 g4 M7 M1 m4 v2 Y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; ]" [ P! U6 }9 O- g9 r9 w5 L: v
紧靠其上添加:: K& E9 Z. N, u$ u+ p/ G8 u! y$ y' T
if( pWndBase == &m_wndMenu )
! r4 j. i9 D. Q{, ~2 T2 S1 w% S# B3 g) A& i
switch( nID )
& w6 Y/ v+ [; |; {2 m+ t# e" w {
l( d- Z# B9 D# W case 2:
+ p3 _! N2 p. h# x! X8 R' M {- S) x" \: |* \% N( P( F& O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# E! V$ t7 F3 h4 r
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! o, V! S: G" l1 U {5 k) K6 J2 M( @1 A3 |* I" V* i
break;
0 C# N* o0 u* c5 G }
- e) O) F( B+ k f: S1 c7 G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 h' a4 a' ?3 E% s" o
{
% K3 N5 r+ F+ D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" j, r) Y6 u& ^
if( !pItemElem )
7 e* s; A1 k" e, k continue;
8 E0 E8 Z. k) w5 [6 {* r. {1 s3 P if(pItemElem->GetExtra() > 0)
7 o# C9 @% r7 Q8 c continue;
. k4 ]+ U* @# b% l$ |( O# a3 d8 Y0 _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, _; ^6 \0 l2 [& c. c continue;
& H" \* b! x# C% Z" Q8 G if( g_pPlayer->IsUsing( pItemElem ) )( m) f4 A9 [2 W, q6 w9 `# ]" p
continue;' G9 w$ N- U8 w W
if( pItemElem->IsUndestructable() == TRUE )! M# C- `. c5 m3 ~
{# q5 a! m5 f# U# `( ?
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) C6 F0 m8 @( m7 S continue;' Z0 Q. {: d9 C# {* [2 `1 D
}' x& ]) X5 n5 i% l8 K: x" A( a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* A* I2 A4 n; F3 h }
' l# o, d+ f% m, u break;* ~* N1 P) J( U, O- ]
}. P5 s; r0 @, t2 u$ q+ J+ |
case 1:
/ @0 ^8 y' b0 S; h& Q$ i' J {
, j0 B; m* u2 H9 ?3 { u, N //整理背包
! b+ m( |# {, z& J+ K/ O //////////////////////////////////////////////////////////////////////////- J" w& R' \+ h1 n2 f
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ W" I" e9 k+ y& b! e. q7 \* x2 p
//////////////////////////////////////////////////////////////////////////2 k. J+ u) W. x8 W
//////////////////////////////////////////////////////////////////////////
& l" `: M: Q3 x3 I7 l) {2 r, j3 c! L0 P CInventorySort* pInvSort = new CInventorySort;
8 ~7 P. F1 J9 Z+ ^' h, B/ d vector <sItem> vItem;
" X3 c5 b8 g; S' j; N/ i8 [" ?% V vItem.resize(MAX_INVENTORY);//初始化大小
' j# N. F6 |' b2 a3 S$ x7 N //////////////////////////////////////////////////////////////////////////) v- t" S, J( |* S9 A; D
//填充数据
' U- s" c+ N1 Y2 u1 [ for (int i=0;i<MAX_INVENTORY;i++)$ G: g1 e+ I! g/ u% c0 i, t
{
% H/ E# d4 t8 I6 U H# t( D% m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! e& i* X5 x# z4 [1 {' I- p
if (!pItemElem)0 \; K% s/ x# j8 {) X
{
6 _# _5 k4 {+ [- R- w& _) r' v4 _ vItem.dwKind2 = 0xffffffff;
+ i+ G: s' B2 R( D F0 [ vItem.dwItemId = 0xffffffff;8 n4 j! K K& q9 n" T$ y! ]
vItem.nIndex = i;
- X4 t4 R+ q& V6 [9 H1 k; q }else {
1 _7 L% P; G( w ItemProp* pProp = pItemElem->GetProp();- d D7 H( B: F6 V1 H, A
vItem.dwKind2 = pProp->dwItemKind2;# j+ g" y( S" i4 j
vItem.dwItemId = pItemElem->m_dwItemId;
4 a8 ^3 p6 K) K$ n vItem.nIndex = i;
7 ?6 Y) Z' P( v! @- l+ Z }
8 Y4 g: o1 O0 g, ? //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) H c* L% d" j. {& H }! I: W7 Y7 a- n
//////////////////////////////////////////////////////////////////////////# B3 ~4 H7 _: O4 d
sort(vItem.begin(),vItem.end());//排序; X9 s( g( Q+ |$ j' J4 ]4 t
//////////////////////////////////////////////////////////////////////////
4 T9 ?/ V! ]8 _4 V //交换
' j* Q' k; \& A- ~! o8 c for (size_t i=0;i<vItem.size();i++)
5 l+ g; z. l) l/ a4 L- j7 x {6 l" e; M9 S9 h7 Z" }) p9 k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 M9 `% ?: k, x- F# V pInvSort->Add(vItem.nIndex);; D6 X; p' y, J: p( u0 f R
}$ K8 b6 t6 G( W4 Q9 k
BYTE nDestPos = 0;; q4 ~3 W3 o; y; |
for (int i=0;i<MAX_INVENTORY;i++)0 n( n$ ~3 A9 ~3 _ t' S
{
7 T' z6 P: s8 S3 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ x+ p3 Y+ O6 @ if (pItemElem)* K# f# `2 p5 u. n: s& ~/ s9 T- ]' A
{2 j& ]* R& ^8 ?% K0 P
if (IsUsingItem(pItemElem))0 o8 }" m- w5 ~1 c, I0 T
{
7 c. x3 F; z7 ~; y% K: y5 H //这个位置无法放
% D; B3 ~5 n" d' ]5 M nDestPos++;
6 B6 x/ Z; P' e }
; f: `& i8 h% I# s+ I }
5 K5 H1 G" }7 ^$ i) s% f5 p! k BYTE nSrc = pInvSort->GetItemSrc(i);4 M/ c6 g3 V$ i% g! L$ F
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( r2 e. O; }9 {
if (pItemElem)4 r" u. l$ Y9 M; W7 |
{7 R0 |, K$ ]: D/ e
if (IsUsingItem(pItemElem))& A# \$ F6 A( B" C: d
{! y2 P( K8 o/ B7 D4 u Z
//这个道具无法移动,跳过
$ a5 |% M% B j. D4 u) b continue;
, {3 B7 X; q. z2 Z5 O- U1 d, w( p6 k }
' [3 d7 {7 g8 r }else{
* n- S+ x5 ?- l& d" m9 n0 U- |. ~ //空位置 不用动
$ l2 O* B. k" N5 s) O& h continue;
- O# V- V( @/ D6 x3 w% b3 g }
0 k: O L S! W' H( h; g' G- M //////////////////////////////////////////////////////////////////////////, x2 P1 s; J. _% }
//开始移动
7 x e5 B& F0 |) b+ T m+ { if (nSrc == nDestPos)
- _- \; B- F2 A) v {
, @1 {* p- a, n' Y' R0 ^$ x //原地不动) m+ y7 _9 {( m1 U1 `5 [8 T
nDestPos++;
- S5 V5 N/ u6 u# r0 X7 m continue;% @# c! i) N' b' `0 n5 a2 F
}
. K: }* x. z! E% l, D' v, ^" ?. E pInvSort->MoveItem(i,nDestPos);
- v; Y! ?0 ^2 B+ c; M g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ L0 g$ n# m7 {) {4 |9 t/ z+ z
Sleep(5);4 |/ K+ A. p! o0 B
//Error("移动 - %d->%d",nSrc,nDestPos);9 X# ^% v) V1 u) f2 I [- Y% `7 m
nDestPos++;+ c% Z$ G" m8 ^
}
6 {! X2 d5 C2 u9 g6 J3 Q8 w# n/ O! A //取第一个元素的信息& C7 r3 X" M6 K4 l( K' Z
/*
) y3 y' a- N Y- N9 A3 F5 e6 x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
q; g+ {3 j% R$ V. Z3 u7 N {' ^8 S* W+ q6 P* _
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 O' f/ H3 u, R) [ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- L o7 @- c& r( f$ @6 N }8 Q; p7 e8 W3 C/ C
*/' J- Z2 }; Q8 n0 R$ d7 i% s* G
//////////////////////////////////////////////////////////////////////////
9 X5 e2 N4 i$ O4 B, R7 q' Q( g break;$ g5 _9 ~! ~/ ~9 y( v3 b; g! C
}
4 [3 M& o, {) B" V, O; { } 2 A# J3 \( O) c) O, w: U# Q
}
3 d# n7 i& ~ B/ c4 Tm_wndMenu.SetVisible(FALSE);! V5 s$ T+ H2 C( c5 k K
9 L. D5 C; j7 l, Y* l--------------------------------------------------------------------------------------------------------
6 ^% v7 `0 y& p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, f2 V& x' e0 ^! Z, ?{5 l$ B4 r/ q5 g% m0 g- {) M9 d1 r
BaseMouseCursor();+ Z- m9 V% _* B! s
}
4 J; Z: ~& g( ~4 A2 }8 y# x在其下添加:
+ [ W+ T! i9 t D4 }& Z9 N: ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 i2 s/ b# G2 z. h+ G1 l
{0 H1 w d3 Z5 D) K/ M5 R5 S* j
m_wndMenu.DeleteAllMenu();! a" w K! N) M9 w! R, A9 x
m_wndMenu.CreateMenu(this);
k# q& v: X9 d( ~3 j4 jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) v% e/ S$ M" N, ]- r4 M# U, r) C4 a+ |
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) D5 i# c( L3 {; o! y7 K5 S
{
$ Q$ X2 ^/ N0 {; U. ~ //P以上级别才可以删除所有道具) U' c- Z! p0 W) _+ b
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 |) x, z7 t) f( x1 b
}
1 L# v+ m6 @6 mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); }" U* F1 ^$ ~4 M# g2 l% B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) D0 y& S3 ^/ [6 _' Z
m_wndMenu.SetFocus();
; i, g5 W; K9 V% F4 r; L) k}4 I `9 z/ I& x
------------------------------------------------------------------------------------------------------------- h8 s7 r% b2 Y, T1 f/ u3 l' c
*************************
+ G# ?9 a. H+ s1 M/ g* o" qWndField.h文件, f- y% F4 t) z7 r6 u+ b3 v
*************************
0 b8 q: n3 O# ^( I D2 Z搜索:BOOL m_bReport;
; G5 R( c V7 I2 c' o0 Q其后添加:0 T8 V+ X: ^* o1 Q1 [; J) [
CWndMenu m_wndMenu;) O Y. ]: L& J1 n! Y; z8 K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* b# a- t5 [7 u8 q/ ^& ~
其后添加:# `6 l; Z n0 [" f/ R3 n: q: n" O
virtual void OnRButtonUp(UINT nFlags, CPoint point);" P+ d; ]& g. N
. j( t, g( K/ B( F3 T3 E+ U+ g
9 h- I5 `% b7 X |
|