|
|
源文件中_Interface文件夹下WndField.cpp文件
, V- \7 K: b) s) L7 s2 h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- o2 e$ Q& E! P/ O! q c7 q8 g
9 D' Q: {' g m$ p x: S. Q2 Q$ D
struct sItem
; m; E$ O' E( M# F+ V, S, W* ~{
1 ^$ @0 G+ h2 Y5 z5 c% pDWORD dwId;
- }: G& k/ w) ~+ ?# g- a) [' EDWORD dwKind2;7 Y. E8 n& X; ?# y, i' O/ X
DWORD dwItemId;0 g( A9 X3 t9 s% d
BYTE nIndex;1 A- p9 g: k% V: o; \( `
sItem(){
% d: W$ g: h9 L& @$ G dwId = dwKind2 = dwItemId = nIndex = 0;# S$ c! R2 N! E; }5 _
}
9 n8 Q$ g# W! ^; `1 U% Wbool operator < (const sItem p2)
6 E! S8 S, E6 u: ?{
% H" t; _7 M4 ]. o3 | S if (dwKind2 == p2.dwKind2)
9 C; c W2 h* J1 M {; C7 m9 I: V1 j3 |' J5 ^0 s0 f
return dwItemId < p2.dwItemId;4 b7 @& |( S" D$ t
}else{
( u, R, [4 j0 w/ {* C# Y+ g! C return dwKind2 < p2.dwKind2;
( X: Y- s |* G; T- A }
7 h! A) u1 T9 B; y* n) O}+ ^# B, y9 @2 |. l
};
4 ^( {2 w4 @3 |! e6 Z' G; y( p1 Kclass CInventorySort' o3 g4 k# f& d/ c# f
{/ a7 n1 V7 q3 E- D# T
public:5 r- ?; x1 \9 t: V/ F) y! q
CInventorySort(), r/ P5 D0 T* b4 E( @
{
( O, q% ? x1 h( }/ V m_dwPos = 0;
6 N4 J! G3 W" e' k3 x}+ \! w% b) V* I; W9 a$ m0 r& F
~CInventorySort(){}" X6 d% Z0 |+ a% ^- q
private:
+ `: N& O% P" e0 y( u& W! QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 ~. x& b2 Y( G
DWORD m_dwPos;, ^1 W: [7 a3 H8 q* y$ `. W
public:4 a; \; P& E$ K0 h4 i; N) k
void Add(BYTE nIndex)7 a% {1 o3 |0 h+ l
{% G& n* ]" A3 @- P
if (m_dwPos >= MAX_INVENTORY)6 C0 x; r1 B L ?
{
! P/ v8 g% ?8 d; i1 e/ z return;" w- x5 n/ G& g
}& ^' u7 X( h. _; }% |* x! b
m_Item[m_dwPos].nIndex = nIndex;
4 d. A3 a7 M$ n9 I" v4 E1 z% a m_Item[m_dwPos].dwId = m_dwPos;
o; H8 F8 A4 u7 ]5 F0 l m_dwPos++;; p3 O- e1 k; d& U) ~
}( B* B$ ]" \2 A* }5 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 P! d' Q7 c/ k' k4 l$ W{: o/ C1 ^" f* [8 Q
for (int i=0;i<MAX_INVENTORY;i++)% ^0 k1 _+ _* A o
{! B. o8 c" `; w* s. y
if (m_Item.dwId == dwId)
& T/ j5 M5 Q( P: A* e6 S u) Z* ^ {: H3 d4 E# N1 N; e/ v u3 O3 _
return m_Item.nIndex; k' x' ^! P( V* k E8 J8 `% {$ m, J
}
& ~$ {- J1 Z7 D4 d }+ C: _- q# l+ S: m3 n1 `+ G
return 255;
) {- @, B4 c. q Y8 |; A7 }# d}; `2 u& S. B. e) @ i7 B) x- O! N
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 G" y7 e: N* W, L{- h. X- V) S- t9 Q! L! @
BYTE nTmp = 0;
9 A# e, E* D8 f bool bDest = false,bSrc = false;
$ s9 F5 [/ a3 W# w8 ^4 H for (int i=0;i<MAX_INVENTORY;i++)- ]) N' C( C) F7 x
{
) z( O4 w+ [9 R. v) x0 U9 c9 q. A if (dwSrcId == m_Item.dwId)9 V) _0 W0 @" H' Z# C& I! l
{& }( E. W: y* f; k: _" u1 I& {* W
//id相等 则 改变对应的dest和src
/ C' J) Z6 `, ]( C* u8 N7 w nTmp = m_Item.nIndex;! _5 m, j+ w- L! t- W
m_Item.nIndex = dest;) e7 |* C+ O( T/ n7 w6 P
}
+ I/ {% b: m+ ~ }/ b3 h& m! b0 H4 q+ Q) Z
//临时数据保存完毕,交换开始
1 l3 G1 ^0 [8 \/ p% W for (int i=0;i<MAX_INVENTORY;i++)7 B) T7 c9 r# e- f/ h" ` y+ A4 o/ F
{
! c: t8 }0 r' ~1 w: |4 W" {5 Y if (dest == m_Item.nIndex)
3 j9 r) a: N) A& i {
% K; r# d9 U/ N //id相等 则 改变对应的dest和src
' E x1 I8 l- _ m_Item.nIndex = nTmp;
: ?! Y) A9 S" M, [ }
9 s- V4 b; m) @( P }5 P& Q2 O* T6 j) {0 X4 ~/ P
}7 L! @! Z4 A! ^1 l+ y6 a
};
: _3 ?' x. C+ |8 w* P5 i, R4 a B-------------------------------------------------------------------------/ ?; T5 D! g- r* v. \
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) Z9 o3 E" p" E7 b+ |0 \搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 b) ` O( \, d& N2 [8 a/ L紧靠其上添加:2 V) k1 W9 r# ?; Q$ ~; A: D- Y
if( pWndBase == &m_wndMenu )) }& G e0 ?' V/ P7 B
{( Y% c) O) n' P. n4 c. h
switch( nID )
7 m+ J# i+ d3 K/ V% { k# H9 C1 o {
; T1 W' M$ u# T. i& U2 B case 2:% A$ Z) r- B4 K, w- m
{' Y, y# [1 f+ L/ |, M# |; r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 c7 _7 W9 ]* H4 I6 w2 g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! o" @& U. M7 l7 `7 v
{2 i) ^3 l: }8 w/ ^. u
break;
# |+ K, u$ ]- [2 R7 @ }$ f ~/ |7 c: q; ~. j" i
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: F. [$ M: }$ q {* s: h T1 L' \" ` L* @, C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 r$ q1 m: L% A Z5 }1 `! d if( !pItemElem )0 ]3 ?: k0 q0 d& m$ a w; b
continue;' c6 ^9 O# ]$ R
if(pItemElem->GetExtra() > 0)7 ?* I$ Q4 m, u$ E6 s# ?6 P
continue;" U# ]9 k. q4 v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 C9 T" D ? F$ [ continue;% }5 _/ U/ ~3 S
if( g_pPlayer->IsUsing( pItemElem ) )
' T6 t& ]( y+ f3 i T" } continue;! s# B1 ~) {+ q/ G6 K7 U
if( pItemElem->IsUndestructable() == TRUE )
6 V4 ~$ Z2 z2 s( d" g$ a {
' M& p4 O% s' a- p4 @ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% a! T9 T4 W7 t) q
continue;
' G- }3 F/ w3 e2 |0 b# ] }" m; s: m: h/ a9 E0 y5 |/ r$ f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' L3 ^ n$ s5 H6 W' `
}* I* M/ ?: P0 N- e2 |
break;
: b6 W1 t3 H# u9 i }
: s* i( Q. `6 h case 1:: f: n" ~* M* C; `$ n( O+ ?9 o+ [4 \
{" L' Z0 E( b8 c# ~, F! B! B$ w
//整理背包
2 p! H, G+ ^- B //////////////////////////////////////////////////////////////////////////0 f) `7 G) v, u
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" }9 x( F: Q s& l9 M: H //////////////////////////////////////////////////////////////////////////
3 d: v& ] D Q0 }: L2 h //////////////////////////////////////////////////////////////////////////5 z0 Q8 J7 q, y) d* D
CInventorySort* pInvSort = new CInventorySort;- q f! l) N7 Q7 L. E0 L# b
vector <sItem> vItem;
6 y" l5 O! c5 W# Y vItem.resize(MAX_INVENTORY);//初始化大小$ ~# _, [8 e i) M* C% l4 Z
//////////////////////////////////////////////////////////////////////////
( e `' Z, o7 H! R& O2 v$ b4 G( | //填充数据
, l$ d# k$ N& Y7 ]( @ for (int i=0;i<MAX_INVENTORY;i++): a& h- J" b$ D" y# r( x
{
& n" i: K0 B$ N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: F* _ M0 ?; \- Q. s4 `
if (!pItemElem). k; l8 i$ ?# `- j% J9 a
{2 Q1 d5 k* E' I/ Q: F# x6 s
vItem.dwKind2 = 0xffffffff;. M+ V) p+ q: d! ]3 F
vItem.dwItemId = 0xffffffff;
3 Q+ X1 F0 B& q: Q" d _- _% V vItem.nIndex = i;
% q) n3 z& D. L1 S% S8 B }else {
$ [# u2 H1 Z. `/ a! I. l8 E ItemProp* pProp = pItemElem->GetProp();. O/ P. Q) r1 d. @/ ~% o; x1 h
vItem.dwKind2 = pProp->dwItemKind2;! ^. Z1 {1 y; ]0 a5 F. G1 E
vItem.dwItemId = pItemElem->m_dwItemId;$ g$ E% a5 ^; e5 T2 r
vItem.nIndex = i;5 ^' u, i8 h' O v: u3 O2 B- S) i6 b
}. v J7 s0 K$ r3 D- c
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ j+ P1 R+ p1 P5 @ }+ I* u! J, [6 [8 R
//////////////////////////////////////////////////////////////////////////
5 S- ?9 l+ c$ E) g) y" ?' H) [ sort(vItem.begin(),vItem.end());//排序! ]4 x7 S* s' W' P3 `
//////////////////////////////////////////////////////////////////////////
- W' K" H: T/ j4 J3 E H, X //交换' b& O; {9 c3 V. `
for (size_t i=0;i<vItem.size();i++), O" r1 l2 c8 v4 h5 K
{
$ _+ a! Q$ J* r$ T2 P8 F2 p# \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ C- M+ Z1 a$ F- A pInvSort->Add(vItem.nIndex);
- m5 |* c- g, i {' l4 ? }
2 x6 d; {1 y5 f! {; W' c* |8 H BYTE nDestPos = 0;: F7 m; `% r$ ?3 H
for (int i=0;i<MAX_INVENTORY;i++)
; `5 q3 x. x' q {
8 E! c2 ^; X; |3 D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 r( @, c* D7 Q! ]- T7 v9 p3 D# M9 b if (pItemElem)* r$ Y3 E- V3 U9 P5 E% F
{
1 b$ X7 [3 R! J1 C7 p4 U% Z if (IsUsingItem(pItemElem))' _; X# m6 S A& a( m- c
{
, U- a" x1 K# W( Q# @- B //这个位置无法放2 K4 o. _. h% `
nDestPos++;9 p4 v' b% L6 j5 e1 ]* i- m/ p
}
( m- Z$ s6 s$ R- _/ Z! d }
4 U- h# w: [* n$ K BYTE nSrc = pInvSort->GetItemSrc(i);
$ @1 n5 H' Q' F2 n* ?0 l& T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. ]) a D$ j: y4 ~' N" v! ` if (pItemElem)
9 e, a1 m# B; y$ A* d {+ Z9 o$ s5 J, y% q- f
if (IsUsingItem(pItemElem))
9 G( J9 L" N: T7 c% F$ k: I {
* g' n; Z( O/ D8 h; w //这个道具无法移动,跳过6 ?: K9 `8 H6 ^3 K/ t! M7 ^
continue;0 d, `0 ~3 o$ V' C, ?% q
}
+ j1 m; }2 m- E9 r0 V }else{
, {% h& k1 S/ A2 g+ G Z% M //空位置 不用动
1 v1 G* u; j# ]; R continue;3 i: C6 V4 N4 S `" T1 e+ _7 H( k
} W& V S6 V5 d2 X# d
//////////////////////////////////////////////////////////////////////////* ?2 o+ @$ V$ Y$ w E; A. E; A
//开始移动. g) R) ]1 Y" @$ F8 \6 r
if (nSrc == nDestPos), n" B! q3 Q2 ]9 u
{! N; c6 M w# D& |9 m) Y
//原地不动5 }2 n6 P% f( A6 e2 I3 ?4 s$ D% g
nDestPos++;' L [+ R5 Y$ L8 g* M
continue;
) B8 l8 w1 a: c5 n* _8 j* g9 B }
: H) t' a7 H* Z" t pInvSort->MoveItem(i,nDestPos);3 ~7 j; U. k4 [* F0 W5 c; B% a
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ ]$ H2 m! y6 t5 T }% |4 _ Sleep(5);
/ t. D+ n; ~9 b4 o% |. f //Error("移动 - %d->%d",nSrc,nDestPos);9 u0 l$ L* m& V8 E/ Y% G
nDestPos++;
$ m- \& w, c" q( k: V( ~ }
! c; ^8 W. e/ h' V6 ` //取第一个元素的信息
: }# L0 X# ]7 E$ E /*
: W; V0 r# S9 I4 E- V if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), w1 X8 b) {. V2 i* I
{; P8 S8 I1 }( j
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; A8 Z5 ]4 M; Z' Q6 a
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); E$ L1 `4 [/ n$ P: W
}# t+ o; s* |0 z# l
*/
9 V. B3 i$ ~+ u& j! C //////////////////////////////////////////////////////////////////////////
: d! I, l- z" E6 g% q! ^2 z1 a. ]3 a break;
- n! ~, Q9 E E1 D3 [& J }) Q# t% M; v4 ~3 }! L3 [0 k
} - d' y# Q: r( _ x& _3 x1 h% J2 U a1 M
}9 y4 z* [6 G& y2 L& m% f# |( F% m
m_wndMenu.SetVisible(FALSE);
& @: l+ H; i2 L$ i( w9 ^+ K( L1 ~- T' A. ?5 O
--------------------------------------------------------------------------------------------------------
, y) A# N5 ]; j+ ^3 T$ X; a) X4 x& k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 d8 G7 G2 W# N7 n9 S
{9 _. R. \: L" H1 `( q* Y) W. D
BaseMouseCursor();, {3 y- [, c: m# d
}
$ S, Y- P; |$ g! {; h在其下添加:
2 ^ K, [% I6 h Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 _ @6 m$ ~) |8 n X* s4 n+ m$ g{
& q2 r* ?! F' jm_wndMenu.DeleteAllMenu();
. b# q% g& U0 G7 k- `& xm_wndMenu.CreateMenu(this);( r6 J+ a9 A) W" J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ E' z* w+ J' [* K: @2 m4 s) t0 M
6 E; ] V' I' g9 fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! w$ R- Q6 D0 C; f4 Q* @1 K{
0 C& V: u2 H3 I- C' J6 i' z2 e7 h //P以上级别才可以删除所有道具4 k X- D* ]" Q4 \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- Y U9 K1 C4 W$ X+ {; p}3 w m# T& V4 ~& m# b' N
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 m0 c' U3 g, h' \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 V) W; B( w- o7 y; _) q- vm_wndMenu.SetFocus();3 @& d8 Q& ~" X6 p5 L, l h- {3 t
}* m) A( [! {8 e2 Q5 n" P6 Q% g; N2 \
------------------------------------------------------------------------------------------------------------( P1 i2 j: d4 ~: y% [; b7 R
*************************3 @$ y; Y1 v) ?9 P
WndField.h文件1 {( p9 t' U6 b
*************************
* |4 k) r* f, C3 b- X6 p& ~搜索:BOOL m_bReport;/ P& i1 J" O8 V7 v% E' c# g, `/ G! l
其后添加:6 d5 t" J! M( b6 B7 u
CWndMenu m_wndMenu;% p8 k/ s0 H) h9 _2 }; t v& m
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 x0 a4 O, V6 F1 n) y$ O( I9 o
其后添加:2 x/ n# b4 _: m- f
virtual void OnRButtonUp(UINT nFlags, CPoint point);5 _8 x, s. z( f+ @$ |
! O g; N& ] B4 E) Z% T( }! |
* X6 |6 t* r8 l. W; Z" i. A |
|