|
|
源文件中_Interface文件夹下WndField.cpp文件
8 |# e' }& B: N( C) X2 l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% |" m/ w9 Y W% m
( R- \$ [5 w: S$ Lstruct sItem
7 J% ~' r; s8 l{
1 J9 n/ d P, O+ L/ mDWORD dwId;6 V2 H J8 ]" P V
DWORD dwKind2;
, I3 F7 A9 }% S5 PDWORD dwItemId;1 l' q1 R9 d( h( I2 ]
BYTE nIndex; W5 H) t; N. e3 A1 M, J+ _( A
sItem(){0 D4 ^1 B& p ?. C% R* B1 }
dwId = dwKind2 = dwItemId = nIndex = 0;4 J- X" [: ?0 e' t& w6 J' w" t
}
# |. G2 W- g1 x( W2 Jbool operator < (const sItem p2)" z/ K I- {. t
{
) U. l J6 P% A if (dwKind2 == p2.dwKind2)+ P! M- M% _$ e
{
8 l# s) {) T. q: o1 ?% ^# C" Z& g return dwItemId < p2.dwItemId;
" G' p* o, U2 w9 }7 p7 i }else{
: b9 i! a6 R6 ?' Q3 n return dwKind2 < p2.dwKind2;
" }, V# D. y' g; N }
$ r. A! A x2 l- \3 B}
: _% h; k- Q/ o. g! P* B};
* M8 F+ L5 v' Hclass CInventorySort
( J) e' a7 v8 ?7 `{
4 z% }* Q! ]2 u4 O4 Fpublic:4 v( o8 j: D5 V6 H' I
CInventorySort()" w" s$ n5 e. I2 L Z& P
{, d9 e; k7 Y4 w: ]
m_dwPos = 0;' Z2 |' b6 z, |
}8 ?- w! p1 ~& F8 V( J
~CInventorySort(){}
" T! _* L+ K1 h- Z h# x# p/ P* Zprivate:
9 h x, s. \9 i$ x- asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 K6 Z2 y+ G# q# s8 \0 T8 ]DWORD m_dwPos;0 i+ w/ o7 [) o7 q+ X
public:( l# W' |2 v! J& L( ]1 f" N" U# S8 Z
void Add(BYTE nIndex)3 z( `& @! b& T D
{- I4 g" `7 g# V, T8 c$ Q" y( l6 b; n
if (m_dwPos >= MAX_INVENTORY)' @* ?- c- \. G3 b; w* I" r# m
{1 q: @: b4 x, w
return;6 W( b1 M) a8 d/ f
}- C. ]1 C: \ v+ ?7 N
m_Item[m_dwPos].nIndex = nIndex;
! H4 Z' @5 ^7 h# t9 W" `& x1 v1 _# U m_Item[m_dwPos].dwId = m_dwPos;0 l% E' f! B: p$ F# N! A
m_dwPos++;+ p J8 s! F, ?( K% W
} E! z: d9 d! g1 C b9 U0 L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; H& h4 k9 @% `7 P, o5 f: o) f, K" b+ p
{
, [* v- b" U; a for (int i=0;i<MAX_INVENTORY;i++)! [, b' L# b* }& `7 N2 D
{* k: n( D& i& |8 P: B! `! B# S
if (m_Item.dwId == dwId)$ ~5 R. l6 e/ V$ [3 O
{' I2 _# N. n3 A) B! s
return m_Item.nIndex;
+ |5 |$ X, g% m' m G+ c, M }
3 x0 ^* R* a( Q }/ i' b' [8 X. M9 Y6 m% ?! Q Z
return 255;& t6 r& N3 D; B1 [
}) a6 r8 x j( I, I, I" D2 D
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ \" E* D: g( L, y' `. A{ ]. @) C# x' d
BYTE nTmp = 0;& k9 y7 r( g8 O) }0 U$ U
bool bDest = false,bSrc = false;& Y; J B. T3 X: j
for (int i=0;i<MAX_INVENTORY;i++)9 ~2 [2 h: C$ S: ?
{
7 W, p0 L+ \8 v8 E3 w3 q) R6 h! v if (dwSrcId == m_Item.dwId)
/ z% D0 c5 H/ E4 C; k2 H% [& v& o {4 I m# F. v6 l0 M4 e5 K" {
//id相等 则 改变对应的dest和src0 X% P: N. Q; [- m. R A) u. M4 @
nTmp = m_Item.nIndex;6 K) K! N$ L" ~: W
m_Item.nIndex = dest; k6 v* a% j( W1 ^. D2 _' W n
}
0 V% o/ P. d0 {# M }
& m( M% N' j2 [, W0 w: } //临时数据保存完毕,交换开始
8 k: S4 Z% l Y- Z& A2 o for (int i=0;i<MAX_INVENTORY;i++)
8 j1 w8 f" g1 C1 k6 X6 m- Z$ Q {% M6 f0 [+ c p' \8 r, B
if (dest == m_Item.nIndex)- o9 _0 X4 G9 t, ~# G4 k
{
8 B4 Y% D& y3 V( f" G //id相等 则 改变对应的dest和src
9 {7 R' k) M$ p2 u2 G m_Item.nIndex = nTmp;
* a" V5 j, D# o/ |0 r2 J3 x }
# z2 c9 [' N' t5 \( d1 s }: e4 j$ K* z( S* P
}
( o; q t& m; ]: u/ y};
: z3 f* g) f2 C& S! q0 k-------------------------------------------------------------------------
' z% Y2 O" w3 x' }* Z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; a/ ]: o: H# |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- ~) ^7 Z* F! O8 U紧靠其上添加:6 g5 N1 F$ o r; g; _/ E) Y: {
if( pWndBase == &m_wndMenu )
* Q4 z9 Z \) [* W; i3 M9 r{# ~2 z% _! h3 x
switch( nID ); n" o! C8 g6 o9 q. z& `8 g$ ?
{
, }: M/ Z- ~2 l' U( \ case 2:
( E+ w! I# b3 H; K8 W { F: `/ b' Z( j# X
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. z( T! v% M+ g( N# e! V
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ J( A% m: v A: F1 N
{
: Q. G/ f+ {. r# m, K, | break;
, n! }& v& q# Y2 q7 t }
# r1 i' A$ c. E0 X s for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 Z* T; C2 Q" o7 o: U {% l" e- A+ A. D5 j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 k- q @8 i7 E/ \8 Q3 ~" s$ C( | if( !pItemElem )+ V! v5 R- g Y* M" d) b- u
continue;* m! Z9 l) F; W: W6 G; Z- {. f
if(pItemElem->GetExtra() > 0)
& ^# T7 c2 W, c/ n4 z1 j continue;" |* i b- L0 r- i7 n
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' |& [9 x$ X* O" c+ o' a continue;7 X2 F+ ^+ o/ }& W2 K
if( g_pPlayer->IsUsing( pItemElem ) )2 ~9 R; |* ]+ j/ a
continue;" Y1 D5 ^$ C7 Y X( ~& Z% S! y
if( pItemElem->IsUndestructable() == TRUE )
7 G1 {* ]2 ~$ X0 T# t. q {0 y& K$ P$ @! \/ \2 E8 T( y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ v' c9 p8 ]$ B: a7 \# M& z
continue;
' E9 E7 b: m1 i2 i. G }$ Z# H( x: P% g0 H
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) i/ p: E2 {- ? X% y9 T+ [ }
: N# X' G5 [7 P- c4 [1 K break;
2 d: [+ H, C2 u! r! W. R }" z# H a; f2 r* r- b! ?# b
case 1:3 S/ G" m6 l$ i# q% {1 M) y$ f% Y
{
, j3 U4 r r; S, [3 @ //整理背包
+ M4 p! r$ y. h //////////////////////////////////////////////////////////////////////////
' j/ S4 W* y/ M6 F) V; @5 Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); I. K" q) {* A T& j; e9 m( e
//////////////////////////////////////////////////////////////////////////
+ D7 \7 d8 x# R# f3 Q5 h- K6 n //////////////////////////////////////////////////////////////////////////
; @$ H3 }2 [* g0 O( @) ^: d' V3 G CInventorySort* pInvSort = new CInventorySort;9 K" V" n5 _" F9 B4 O+ z( p7 x
vector <sItem> vItem;
. u8 j7 p9 H6 F& ] vItem.resize(MAX_INVENTORY);//初始化大小+ A+ L ^3 e) a) j" p; i9 S
//////////////////////////////////////////////////////////////////////////
% r( l9 o* b0 s+ W( J //填充数据
. R$ A* F2 m" b# _( J for (int i=0;i<MAX_INVENTORY;i++)
0 v7 C [) O1 v) W' X. W {+ ~% T& I2 K9 q$ o: X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 c9 E" e2 U2 h: L. W! _
if (!pItemElem)
+ X! S" |+ B9 {# g+ U6 t {
$ d! E3 I7 R& V vItem.dwKind2 = 0xffffffff;
( F! j" m( Z" d2 n+ x- H vItem.dwItemId = 0xffffffff;4 y' ` T r$ t; o+ ]4 F
vItem.nIndex = i;
0 Y4 r4 R2 \& Z0 i, A3 i }else {* P3 P3 {+ L# X( z4 Y
ItemProp* pProp = pItemElem->GetProp();( S6 K0 q+ f; ~% p' e$ \4 x2 m
vItem.dwKind2 = pProp->dwItemKind2;
- I0 G1 p" ]: `' |0 y0 R vItem.dwItemId = pItemElem->m_dwItemId;
; l- G1 ?3 o" E7 M1 o1 m vItem.nIndex = i;
; n l) i1 b8 ^! d" ^ }7 [, x* |7 K$ k$ c2 M: R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 K3 m3 }1 G- D1 d2 n- f9 B
}
( n3 g. C: B h' z //////////////////////////////////////////////////////////////////////////
$ }1 i& ^2 u9 _* P sort(vItem.begin(),vItem.end());//排序
; [/ m4 @3 b1 u2 U$ l' | //////////////////////////////////////////////////////////////////////////0 K: [4 J, R$ [* U9 J$ j
//交换
6 V4 D3 i* } y# K* c: ?. v; C* i for (size_t i=0;i<vItem.size();i++), ^' v2 f. ?; @, n$ l
{0 v. [/ n( A$ T W! e# {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* G3 O$ V1 e" _
pInvSort->Add(vItem.nIndex);
1 q5 |3 H) n4 ?- ] }- Z1 }$ c4 n! T* c) j
BYTE nDestPos = 0;" B1 B4 [% @) u
for (int i=0;i<MAX_INVENTORY;i++)$ X3 M2 f8 W1 W5 x0 e
{9 W: _8 A, U, _7 _3 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 [) m% D O7 ], y$ _6 M$ s0 O, x
if (pItemElem)
2 L! h I8 h' `- s9 u {- b; S# W J/ I3 s
if (IsUsingItem(pItemElem))
! x& @2 q, W; {% b4 I9 ] { \! H2 M* z! \% P" R8 G3 W
//这个位置无法放8 [. ]7 p! |6 \ X4 Y
nDestPos++;1 H9 B7 S2 s7 d
}0 Q' R! A& J0 X$ x/ Q! u0 \
}
) E# |5 b* A8 j; }0 N/ X BYTE nSrc = pInvSort->GetItemSrc(i);5 N( t# K% `. V/ b3 Q L0 Q6 s* D
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 \- S) R0 ?3 \: |; Q5 H if (pItemElem)
1 [. }! b/ B+ r+ Q {
& N% G8 k" B% y7 Q6 R if (IsUsingItem(pItemElem))
$ S W$ Q) o* X/ a* _7 P$ y, [ { J" a% w) m, G
//这个道具无法移动,跳过/ G2 Z, e9 z4 X( L2 j( e/ g
continue;- Q1 u5 n7 o4 q) t/ y0 M7 V% T
}( D, n0 f+ O7 W6 v8 t
}else{9 {; d* V! L0 g9 D/ Z& t% X* p
//空位置 不用动
4 s' I2 ^6 }! h9 e1 _# c! f continue; V* n9 ~; Q. Q7 |8 ], A( x
}/ ?- L4 i1 V! B/ F) R7 Y
//////////////////////////////////////////////////////////////////////////6 O( L. J9 }; X
//开始移动1 R% g- Q4 V3 F* K* a
if (nSrc == nDestPos)" p V# s/ _' M
{: H! n0 _7 ?# W0 _# t
//原地不动
8 P3 G" H; k0 V6 C5 o nDestPos++;
8 i+ J% f2 Z. m2 z6 k, E continue;
. ]. l# T) ?' G \' t7 E }$ J0 i" Z( M) P' U3 _$ g1 v
pInvSort->MoveItem(i,nDestPos);
: i, k/ M; Y+ C, q0 F g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 W% F/ `( M; x3 ~' A Sleep(5);- G0 I1 L+ l' g! }) ^1 S% O% R( w. E
//Error("移动 - %d->%d",nSrc,nDestPos);
1 `% S/ W+ I+ V% B& ]0 e' E nDestPos++;: Z& ?2 ~0 |- p w P
}& ^, |" b+ I8 O& z; m
//取第一个元素的信息
" E+ y+ z1 @( ^0 J- V8 l' S /*
* }, e3 t& D6 |# s7 Q4 C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). O1 b8 ~. Y; w& V' X2 Z
{
! B3 W# Q! u# O4 S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
F6 F- C5 U0 I. e' K7 p3 F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 F4 q: W( C3 Z7 j& ^
} y4 v* x/ o, W1 f2 y% `+ T7 v( ?# z
*/
% E" k+ D5 K: \ //////////////////////////////////////////////////////////////////////////2 J. d8 ?$ t( b; C4 h8 l
break;+ S$ K4 R) ]' W/ l4 J( v( g' {
}
* S' n0 p/ ]7 j5 g' {1 v } 7 c: v& M4 \) A1 f- y1 ]2 Q
}
+ {* s; d0 u2 b$ F- D1 ~& w) Ym_wndMenu.SetVisible(FALSE);
m- O: J* z* C6 Z# Y& X( {" f4 n( J$ z; |+ d
--------------------------------------------------------------------------------------------------------- ~3 z% x: s2 K# `# A% x' f$ \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 V# ?8 N, {8 J- V) Z; X" a{
! P( u$ x8 `* t L7 x& n E4 fBaseMouseCursor();
9 J( c2 Q$ ]4 s8 o* b' e}
9 A+ ` Y1 @& e2 {) s在其下添加:& P6 `, J) a T& p/ ]) H
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- d% @+ r+ Y& J/ \$ }) L
{
% X% y% _' c) l4 Z' u ]" Lm_wndMenu.DeleteAllMenu();
$ n c9 }3 ?: H) x f, }m_wndMenu.CreateMenu(this);
. I2 v8 u5 d3 s% \! Z% o8 L% j- sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' [) U" ]) Y/ o4 v" E; x \$ z
" Y) ~8 u _! _0 [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) C1 K/ {6 Z* w
{
/ R' V. W2 m3 A3 V% } //P以上级别才可以删除所有道具
1 l/ E& j- d F4 `1 p6 o. u; S, M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% c3 ~, T! l- W$ D; J}
& }1 H' R& ?/ V" l1 hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, U$ D" L3 A& o) d$ D7 D" [! _' b1 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; ^7 F# X8 r2 l6 Qm_wndMenu.SetFocus();/ V7 P- ?( M( h% e" K$ @5 V
}& A0 ]* N- ]( Z; a
------------------------------------------------------------------------------------------------------------
6 I- e- |- v7 Y" }% Z- b*************************
1 r' W2 `% k6 u/ U! b MWndField.h文件" `' D3 W& |" G; B5 ]
*************************
. ~ k! x7 a4 I. M: C搜索:BOOL m_bReport;
% W, T# ~2 `! G! o. l' f& O) C其后添加:
6 |$ }5 v& D8 {3 P6 m5 S' n; DCWndMenu m_wndMenu;6 y! d' u9 a- @0 d& t$ L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; c1 K( i6 b) y8 v t' n7 c. p: L0 ]其后添加:/ ], p4 w2 B) ?7 x$ K
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 J3 I3 I3 @" ^9 ~+ K& k( X* g$ L6 A- e, _
% N! ?! @3 K" G |
|