|
源文件中_Interface文件夹下WndField.cpp文件
( B( V, M/ T+ q- H# h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ ^8 a+ ~/ Z r7 o7 w9 ]6 q
) [$ V! O9 O8 ^) X" xstruct sItem9 ?0 [2 x% l2 v/ r8 ]5 L+ j
{* I3 g7 [ p2 X& ]7 L7 O
DWORD dwId;
! v% x! D; w: G4 S1 O1 JDWORD dwKind2;1 h7 _, \; J% Z6 b* e
DWORD dwItemId;
3 y' k7 a7 E+ z0 n1 PBYTE nIndex;+ H% H# A0 Z/ ~% m8 X; `
sItem(){3 ?" t9 b( o0 {- y9 S. b4 A- `
dwId = dwKind2 = dwItemId = nIndex = 0;) @ S: ]2 g# v# y% U1 h9 Y5 F, i
}6 I% f+ ]3 E( c# ~0 }( Q. B
bool operator < (const sItem p2)+ Z. {0 |0 t4 t( O( Z5 y$ D
{5 Z- \$ m) k' A% `: Y9 Z
if (dwKind2 == p2.dwKind2). p2 i2 g2 F# v7 `, [2 j
{
: {" M. Z& A7 [, |% W return dwItemId < p2.dwItemId;
4 f8 O+ I& n# Y% p* |, A }else{
! [6 J0 r) d. i4 z3 `, O0 t return dwKind2 < p2.dwKind2;
2 B5 u0 N) Y' s0 s- X6 j5 Y }! W2 v% f4 W9 k
}( e' H6 x; n/ l. {# ^1 e
};) ?7 b4 N; X4 q/ j# R5 v% ^
class CInventorySort8 s+ e- ~6 Q$ T0 _% r, f
{/ t( q7 L; D" ]% V
public:
+ t' q @) R5 T/ ]7 |CInventorySort()
5 _" A6 W6 x4 j7 k9 h{: u9 n( f( Y7 G$ F
m_dwPos = 0;, p: P: q( u; u) {- ]7 { e
}
- R/ K/ N; w Q% p/ _7 B% O~CInventorySort(){}; {1 K' H3 Y' V! w. T3 |$ M
private:2 c! j2 |; _, x4 g% ^, o& u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; H8 A+ k0 C& K8 y; {1 J8 IDWORD m_dwPos;
6 B' e2 o' O u/ V4 i1 ?( i6 R% n+ ]public:
4 d! J: Z8 j# C4 i* Hvoid Add(BYTE nIndex)9 P, C n) k L% j
{
, ~* J$ }. k1 z+ X+ r2 F2 [ if (m_dwPos >= MAX_INVENTORY)
+ i5 t6 y3 n& R+ k' w/ v( E {/ ^' X* W! t( ^0 V
return;
( x% j& K6 B! m* V }) {' @' I+ {; v) l, r
m_Item[m_dwPos].nIndex = nIndex;
J8 X6 C/ w& y/ y; P7 \- \& [ m_Item[m_dwPos].dwId = m_dwPos;8 Q1 G5 t& x; ], Q
m_dwPos++;' Y7 K6 E) y. w4 H: W9 c h
}
& G. Y( @: _9 ^; F8 NBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 r3 b# q$ E Y: X: c# h& T& A{
# T" q- Y v0 W( K for (int i=0;i<MAX_INVENTORY;i++)+ _7 g6 I p) n9 k
{
' B8 O1 z/ s g4 _. w1 H5 J2 [1 U if (m_Item.dwId == dwId), _5 C( R# I% N9 X0 K
{, m+ t8 v2 H8 K9 d! y
return m_Item.nIndex;
) u, Y5 o8 Q' e" C5 {. Z& I( H/ K }5 s! T- A* v" }( r6 O
}/ r9 \$ A) Q, Y6 L2 u
return 255;* r& J) _& `* h. _# K
}
: T3 O0 g8 N/ d! N* Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 e7 a5 E5 ^$ H# _
{& ?; w4 F1 v0 y% T9 v. B+ H
BYTE nTmp = 0;* C1 R0 M5 z V2 D& N& t1 j2 C
bool bDest = false,bSrc = false;9 N* e" k- L( I. T
for (int i=0;i<MAX_INVENTORY;i++): _. U8 J# q- K0 O0 M0 B9 \
{
/ p8 f2 T( V- y9 s) J if (dwSrcId == m_Item.dwId)9 [: _+ w; R# z6 K) g3 p
{$ v3 e2 c% q9 e9 k- ~
//id相等 则 改变对应的dest和src
9 E" V; T8 L/ p- L+ f9 h nTmp = m_Item.nIndex;
& ?1 [4 z* }$ c" w' x7 q m_Item.nIndex = dest;
! `/ a- k+ c1 q: G6 o& r8 K* b }4 O& A$ c3 @, e, e. x
}/ u8 P2 \# O: I, W
//临时数据保存完毕,交换开始
+ j; N8 s0 F/ i* n) b+ f; V for (int i=0;i<MAX_INVENTORY;i++)
1 @5 O% I$ ?1 f" X3 J& `5 _2 { {
( k+ |% w2 B1 r9 F if (dest == m_Item.nIndex)9 ?1 `8 S& r+ G- m
{ C; N' i9 E! S
//id相等 则 改变对应的dest和src# a/ A$ p4 ~ c9 E
m_Item.nIndex = nTmp;( c- P+ u7 s4 Q; n' ]- Q2 G+ }
}
5 j* V4 e+ l A, e }
/ b9 V- n# T5 N! D}
6 r( S, L4 }) e( \$ s! B};: K) l' K% {+ `0 Y
-------------------------------------------------------------------------7 Y+ A5 S$ f) H6 B' Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 J; L4 g; ^; A% i0 Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! `8 H% N7 t U+ ~, ~. a
紧靠其上添加:; M. m$ s: ^' @7 S4 _$ Z
if( pWndBase == &m_wndMenu )
/ q8 _) B+ ]! c5 V& F0 t5 w; O9 {" \{: B6 j- n4 s8 B% A6 j- ^
switch( nID )
" l6 o( q/ d7 z( t {3 l& H: e1 ~6 _+ M
case 2:
( F; \6 S6 r, {* M! q0 } {$ e3 P# @0 ~& t: ^8 b
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 }8 M, { Q, n4 {2 ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); d8 ~; e% Z6 N
{
4 Q1 F! n4 }$ ]8 q% Y4 X break;, o; p3 g9 C# |: m3 J8 ^
}
0 z0 ~4 y* i. d" B/ L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 g" K/ ], x! L0 Y4 V2 V
{# \4 K& K% M5 w: m2 O1 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ v- O9 p; @2 E" A. e" \: M if( !pItemElem )
; _8 u* P% Z A5 G' e& ] continue;+ u' {, Q+ I7 H# p, j3 V
if(pItemElem->GetExtra() > 0)" {1 R4 m! O2 X. f' S) K
continue;
, f, K8 `! i- N1 | if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 `+ Q: M; }: j+ i7 s! g7 z2 m* V# ? continue;6 M: @ S4 F8 m- Z/ V" h7 J" N( ^
if( g_pPlayer->IsUsing( pItemElem ) )7 b3 y& o6 t3 T4 G# l/ U
continue;4 N5 |4 r9 Z+ x! V; P
if( pItemElem->IsUndestructable() == TRUE )% k; U' @0 F$ e% Y
{
0 E% ]' X: H3 D- p6 C g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 o" V5 u0 p; T1 j- R! j9 r
continue;3 H1 v o* ~3 l; i0 J
}3 u D v9 {6 W H1 [
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" R: u& E' _. \
}8 f! x# U: q2 C0 a4 q0 Q
break;
9 N, F2 {! T8 I) v& V }4 K; z( ?' ]) B7 C* N" G
case 1:
" @! [) i% X8 p& e* P& ~! N {
. P7 c+ p* i# E' _8 _ //整理背包
- G8 W- q f' W2 E3 Z //////////////////////////////////////////////////////////////////////////
: @7 Z7 m* E: t7 A" Q; I! g //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! c: x1 |0 g& t% j; w: v //////////////////////////////////////////////////////////////////////////' y4 q8 d% M% [9 Y- b' S
//////////////////////////////////////////////////////////////////////////1 O8 j) n* K# v' g
CInventorySort* pInvSort = new CInventorySort;
8 [7 g, j( I# h) U9 E% I vector <sItem> vItem;
4 Q5 o' U( }8 }: j0 F: t vItem.resize(MAX_INVENTORY);//初始化大小3 `2 q; q% A* O: H+ O
//////////////////////////////////////////////////////////////////////////
# @8 E8 k G' c; K6 m9 I+ ~ //填充数据1 Y1 u1 K) b/ G0 F9 {
for (int i=0;i<MAX_INVENTORY;i++)
9 y/ S- E2 h9 m8 T' f# f {
: {8 F7 D) y1 G$ \2 Z! u5 x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 r; c8 V5 j4 s$ V if (!pItemElem)
* ~. P6 }' J) F9 E$ V {! k# Z4 ~3 k: S& J! b
vItem.dwKind2 = 0xffffffff;
% ]8 K: @5 y) @' L# p2 D* i vItem.dwItemId = 0xffffffff;
" @& D6 f, I7 ` vItem.nIndex = i;
6 J+ z1 A$ j) i/ e0 D }else {
) f! L( s. J4 o) ~: J ItemProp* pProp = pItemElem->GetProp();
9 J" a. W3 x7 z vItem.dwKind2 = pProp->dwItemKind2;
! F* @8 ?# Y; n% ]1 t7 P vItem.dwItemId = pItemElem->m_dwItemId;
$ W" Q! e% {7 q vItem.nIndex = i;
6 [+ h- e0 [, j; v f }* l& A9 N( |3 }7 B5 k, V v! q# ^
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. X0 L5 h ~1 b7 n) A2 S) }8 F }
( B) z" p; C, |- \. { //////////////////////////////////////////////////////////////////////////
7 H. v$ ^' U' i: q$ O+ V: V sort(vItem.begin(),vItem.end());//排序
/ G/ ?1 A8 v. R- U0 | s* K: q //////////////////////////////////////////////////////////////////////////- P0 O# \! _, ^# X/ E
//交换
% Q5 R: i) J! G" ?/ d4 _$ U for (size_t i=0;i<vItem.size();i++)* J( d6 ]. E! O/ `
{
- D; A+ O+ z8 C/ p5 h& [2 [ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 H0 I) h0 U: |+ P( x) d' S pInvSort->Add(vItem.nIndex);
4 y' l5 i+ k" V L9 }$ d }9 g8 [$ f9 @" w5 Y/ f# g8 C5 u
BYTE nDestPos = 0;
5 }5 }, S8 X7 N. [) P! H for (int i=0;i<MAX_INVENTORY;i++)
) G/ T4 w: N P6 M2 ~; X {8 Q' S( _; I l* o0 n# Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ B2 ]4 T2 }3 x7 T$ u" l6 u
if (pItemElem)5 T* s+ d3 G3 V* e% V; @) W
{
* E6 {: H0 d5 _- u" R9 m9 [6 l5 S if (IsUsingItem(pItemElem))
: R- Q0 m0 i/ a# J" G3 P {
: G! A0 s2 L W9 |) P& l //这个位置无法放
8 ]5 }$ T! T) k4 E& v0 v nDestPos++;) `+ Q( F; F- a
}* b+ L2 S( p( x
}
6 @3 H- w; @9 a4 b: [; ]4 @! i' c BYTE nSrc = pInvSort->GetItemSrc(i);
9 d# Z J8 E3 [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 g8 x) ?$ X9 O+ y6 S k1 A if (pItemElem). p7 l0 [# t) f: i
{
! z( C; U4 [9 l+ a9 P2 e8 }& t if (IsUsingItem(pItemElem))
' S( p. e& N$ i9 A5 _ {
) K+ W- p, U& P7 V( T6 U //这个道具无法移动,跳过
2 [) ^+ ]- l" T( H continue;1 }3 j0 d( M) d. n: s9 D
}
- V ]) Q$ d' ]1 |7 y3 N }else{/ z1 T" X+ Q0 u) q7 ~" w1 V
//空位置 不用动
6 U& h) p2 `7 c! e' k7 g; }: K continue;- w M% l& ]" k
}
, i8 Z/ f j$ { V- p' C9 N //////////////////////////////////////////////////////////////////////////
) W+ h7 k5 F; L7 a //开始移动5 T$ }4 T' P7 b+ R" {
if (nSrc == nDestPos)
1 m# Y, e" O2 G2 P& U, }* q {" f8 M+ T. N" k
//原地不动* B% B- f* Q2 u% r8 m
nDestPos++;6 ~* U- Y5 e& d ^* u; E+ l* g
continue;
# R* f m5 T1 y/ K0 k$ t& P }7 R/ T! m/ ]+ O( ^# G8 |
pInvSort->MoveItem(i,nDestPos);, v: p1 V% }! @4 Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 y2 S4 }% | G5 c# m0 }+ z Sleep(5); `0 e3 {! I t8 E
//Error("移动 - %d->%d",nSrc,nDestPos);
7 d1 ^4 [$ j$ R6 ^$ T4 e nDestPos++;
9 I" A) s; Y. u0 U1 T2 o }
1 x! W+ \) T. c //取第一个元素的信息
. i: ^4 a! {/ u+ Y- ~ /** w- d+ {* E3 ^" b) D; K/ E. b& S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 K2 r9 z; X a6 M! ?: H# ]! R {+ @5 O( Y- g7 u: C
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 I1 d6 B0 l! t- ? g
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 J: i1 d; d$ y8 L8 o
}
, _7 z e9 p" X4 Q */
/ e* ~0 Q! f4 [" l D1 f. T //////////////////////////////////////////////////////////////////////////
( u1 X6 U6 Q, Z6 ? break;- e8 `8 h' t# l# r( ]
}
! \/ w, ~/ \- P8 t; b } 4 Y0 I& T# e: M" I* N3 g
}
3 X3 Y8 h; I: h2 ^7 q6 @7 Tm_wndMenu.SetVisible(FALSE);
0 \. w, v j5 v) C- B5 q1 ^5 H" D0 H/ H9 K/ b
--------------------------------------------------------------------------------------------------------
9 E8 [/ `% W) R7 M% i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 j8 w' @( D" x! [, `6 g
{
- t/ C! w- n; t/ W% lBaseMouseCursor();1 F* J2 F! C9 `, J( i7 |
}+ I' ]* ], x9 h, r% }
在其下添加:, v- z! M$ M: [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) `5 c; Q) m' w/ B* N( I, C* ]; s( M{
8 W6 e9 O. [+ g0 g& Cm_wndMenu.DeleteAllMenu();
/ q" ]& u0 X, Z% \, e+ \& pm_wndMenu.CreateMenu(this); J: g* O9 \0 M: |. |! _( @2 V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% R4 Q( O5 `( d4 q7 r# s
6 }1 I. y# d! }$ b, Xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 M( K1 {* n( f0 h: n- o{" t. Y$ t/ I" Y$ C7 }
//P以上级别才可以删除所有道具# W7 }! u6 I: Z! T f- B8 m
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- c5 Q2 k$ y2 |
}* M1 [; ?( [ H: z, Q7 Q8 }
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) C# m# R, ?7 D6 M$ r% e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 C) i; o4 g- F1 I4 Im_wndMenu.SetFocus();0 h4 N5 A. u G' p- E
}% E) b8 v6 k! f# B( i! @. {; j( g
------------------------------------------------------------------------------------------------------------. {% S r6 X2 l; s" r, b# F
*************************' q I& p( e( z! c
WndField.h文件
_+ L% E g; ]************************* Q3 J! q' @3 h) A
搜索:BOOL m_bReport;
( Q6 D( w4 v$ s2 X$ _其后添加:
) L$ C6 `# }3 N/ W+ xCWndMenu m_wndMenu;
4 Y K, Q/ y% v8 T; ~# f2 d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& `: R7 w$ d0 T其后添加:
! ~. u: e/ o' t+ x% s$ j# v5 zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
S& R& c* w7 x6 O& s6 a0 F8 n* w
( n2 X5 b$ j' L* [8 I& `5 x
|
|