|
|
源文件中_Interface文件夹下WndField.cpp文件* W f* j) G0 |) z$ P$ U% E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). t/ D, _$ m- H+ N( @
7 X) S! w$ d. U" A2 M3 @5 X
struct sItem9 x/ v. ^- x: p5 I8 {# `( T2 t
{
" S3 F5 @+ n, g1 C9 I9 v3 qDWORD dwId;
. d, i1 D3 H9 V$ `" {& E9 j% ODWORD dwKind2;! G m( e% u. c, P& @# D$ j
DWORD dwItemId;
* Q6 P8 y8 k; N% @+ q5 l* QBYTE nIndex;% y: Y8 r0 o6 G- {1 S
sItem(){1 ?. i2 Q0 J* K n% M% ^' x2 c
dwId = dwKind2 = dwItemId = nIndex = 0;
, S0 O2 l+ C3 b! E ~} N7 C+ S3 x! @# T; ]5 U! d0 q
bool operator < (const sItem p2)* e! O1 D7 V9 V2 m" |) w
{7 f1 B1 _/ B d" \
if (dwKind2 == p2.dwKind2)
0 t v: {4 s" o+ b& s5 v {
, S- N/ Z. I. l: s" ]7 c4 S return dwItemId < p2.dwItemId;
8 u6 T. W& i6 h5 R3 [* m' h" R }else{! @7 K7 s: O. O( c8 @
return dwKind2 < p2.dwKind2;3 ~6 m- H5 O( `0 f: O+ m t
}
Y/ u" w: S+ b2 ~ v' l& p}9 {5 z4 T8 ?/ W
};
& B3 M1 m1 V z; a5 ^6 Gclass CInventorySort
! k2 X7 W& b1 H{! e& {3 h/ ?# ?9 _5 G0 u+ I
public:
+ r( w( ~$ o* o0 P# n) a! pCInventorySort() z4 x \% ~% t8 N# V( z2 E
{
6 |; _4 w7 @9 O+ f m_dwPos = 0;
) U2 t& C6 [0 n+ z}
1 \; H7 u# F5 t~CInventorySort(){}6 z# \+ b" V2 g4 p% ?. k
private:4 V: r* N2 c9 s7 h, M6 A' D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; D; R5 M8 P+ z- O9 D0 f
DWORD m_dwPos;
) P( d' p9 K7 ~8 ~5 W4 P3 W: g9 ypublic:/ H0 t+ D( N2 E+ l( J
void Add(BYTE nIndex)
5 E \/ g" p& n6 x4 Z0 X, t{' J% p1 s+ f9 V9 q0 P) y
if (m_dwPos >= MAX_INVENTORY)
( z0 r* \, R D3 Q {$ N) z0 V# d) U* _7 X% |4 {
return;
' ]: U: f8 z" ` }
6 d/ i' I2 I3 H* N5 v& f, n3 i. ^; X m_Item[m_dwPos].nIndex = nIndex;6 r- D: c, c# M9 {! {# |6 q
m_Item[m_dwPos].dwId = m_dwPos;
' r4 ~/ M9 }9 m# H) a m_dwPos++;- p6 v% l4 W3 S1 V! |6 W/ c3 k5 \
}
" f \7 \! \' J1 mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ p- G3 d+ Z, p' {{" E3 |! L3 r- U2 n1 r2 R$ e3 x
for (int i=0;i<MAX_INVENTORY;i++)# l! \, X4 e9 {( X# {
{% H3 H6 \: U+ j1 x
if (m_Item.dwId == dwId)
0 y+ O: | |3 b {/ v- B- E' a; S- |' S
return m_Item.nIndex;5 D+ h3 c+ Z0 B, _
}& X4 ^) o- Y0 W; M+ F! [
}4 q9 T. G6 j3 |+ B% i( K0 p1 y
return 255;# g( }5 @# p4 D( b9 |# v
}; G) o' W: k$ Y- S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 W, e4 Y9 }) u{; x1 Q: f6 q2 a+ N
BYTE nTmp = 0;
( y* t/ u6 N8 R# m' [# g bool bDest = false,bSrc = false;/ p4 Q) E5 G3 K3 D- |- T
for (int i=0;i<MAX_INVENTORY;i++)' b: G' F& ?9 @0 `- c# d
{
) n. t) f6 L: e9 p3 ]/ M if (dwSrcId == m_Item.dwId)
/ v# @+ y9 U$ e {+ f- _9 x- b4 `- V% k0 Y3 w, T& q
//id相等 则 改变对应的dest和src0 f% j0 {$ e1 } Q* o+ [
nTmp = m_Item.nIndex;
( Q2 {* Z) _. V F5 x- l7 u m_Item.nIndex = dest;: |0 M& I' Z3 ^9 i2 j
}% E) g! B/ K" t7 F8 V7 b- \& \" V
}
) J2 h& ~" N! ]; S' \0 U! ` //临时数据保存完毕,交换开始, e# ?/ K5 K% \0 R7 T7 K
for (int i=0;i<MAX_INVENTORY;i++)
' Y# C( Y! R. y: E/ p/ ?6 }+ B {
' y0 ^0 [! Z/ j7 s4 U L' c/ i1 R1 j if (dest == m_Item.nIndex)
- Z q. R+ r5 q! e {1 E+ C, G) h* a8 Q4 G7 p, R
//id相等 则 改变对应的dest和src
2 ]$ {- q. s, w9 T( H2 `$ D( l, F m_Item.nIndex = nTmp;
3 ?( H7 i9 G& W, F* P1 w8 ? X }2 b3 ?3 R# r5 P/ S% _
}" F; W; C9 T) \# r5 M% K
}/ F7 L- y$ h( }' F8 n- S
};8 s% }% Z0 ^( ?3 P
-------------------------------------------------------------------------
- e; L9 V- y4 R% U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# P" y+ `+ o0 w2 @' [搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 i. L X/ c4 m: n+ Z4 l6 d" A紧靠其上添加:
; b8 Q. I/ ?- ^/ u2 _if( pWndBase == &m_wndMenu )
0 _, `) a- ?; y' J{
. j' g0 z; w0 Q0 I8 f ]5 B& `% J switch( nID )
3 q3 y5 D! P6 d( j M* q4 r {
. i+ V0 J7 u/ `8 {) V case 2:0 J4 a3 ~) @6 V, M$ ^& O
{
- X& W% w) ]6 n6 c; m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 v7 r2 z: [# c: ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% \* z& M" ?& L1 E1 K( ^* x3 ?1 A {
; U0 J2 ^, I; ^. g$ ? u- U2 V break;
# {$ S$ R) j3 {- W7 J- i }6 q) J7 q M. f" G5 M8 x5 v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; Z, S9 w0 G& t0 t1 w' w {
7 J8 z: {( o6 j' g6 C, P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; k& x3 \: h9 z2 M( Y9 f if( !pItemElem )/ _/ P- \; f7 o1 c
continue;
! n8 u* O5 W0 a7 t. T+ m if(pItemElem->GetExtra() > 0)1 W. `1 M4 y& i
continue;3 o8 t. V l9 C9 c3 N) P
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 h8 H) z$ w) u/ q v
continue;; [4 h2 o, k ~+ j4 a, P
if( g_pPlayer->IsUsing( pItemElem ) )* q% k( r9 Q+ |+ l: i
continue;
2 K/ Q3 V) P* E: o/ R" Q. H if( pItemElem->IsUndestructable() == TRUE )
9 y$ H: ?2 _& G& O# h5 f' v {
( O [0 p+ @+ z* e$ N# Z- g g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* i5 f& `3 p( W }8 |; @
continue;$ }/ b" w3 z+ a; R
}! `7 z! E$ ~1 r0 f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 j( U3 d+ u% }$ Y+ U" Q }+ _$ v9 F5 T+ N! m
break;
( u: L9 m. t# S" B7 u4 Z L }
/ q) B6 f b) I. D+ D case 1:; O; \/ r/ B9 }: y K0 l' w
{
- ?! m/ i# F2 C/ ~$ n' m4 x \ //整理背包
* H; V7 N$ D- E1 I$ v. `' P //////////////////////////////////////////////////////////////////////////
* m4 r9 M% X5 m1 k; K" O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ {' m2 T* A. V7 K+ ~$ E f" U! {
//////////////////////////////////////////////////////////////////////////9 r7 I/ K: ~: X, L# y N/ F9 f
//////////////////////////////////////////////////////////////////////////
* ]3 e1 L* W( p @3 q" f" N! ` CInventorySort* pInvSort = new CInventorySort;
" c& L4 r1 L ~- Y vector <sItem> vItem;
& ^2 t4 C9 [3 U# `( | vItem.resize(MAX_INVENTORY);//初始化大小1 I% f, {8 E6 F0 H/ P5 ~
////////////////////////////////////////////////////////////////////////// A0 P1 v% e3 x' _: z; m: _
//填充数据
1 v- w; r9 h ^$ _ for (int i=0;i<MAX_INVENTORY;i++)2 j7 U, L& w" u3 @3 `+ l
{
. V9 W; _* [. o) C8 a2 r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( P4 ~5 `# P+ R# B if (!pItemElem)
" N( ^. y# K: i; s9 n+ V3 o" k$ l( h9 ^ {6 v8 P1 l( f$ ]
vItem.dwKind2 = 0xffffffff;0 f- W& _$ U- B7 L; }2 P0 h
vItem.dwItemId = 0xffffffff;
# |6 Z+ r7 `4 n ^ vItem.nIndex = i;
# K: |7 }. B/ ?( Z9 _5 r }else {3 ~6 N8 F" k6 \: a* o6 l& C, `
ItemProp* pProp = pItemElem->GetProp(); Z3 a% v8 h$ p+ o. F8 ^
vItem.dwKind2 = pProp->dwItemKind2;* a7 N2 E4 ^2 _. H
vItem.dwItemId = pItemElem->m_dwItemId;+ r; u( G, D. k6 I
vItem.nIndex = i;' A* u3 g3 F& d2 C
}$ g! g- n+ |/ M- _ B6 ?% P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* n; h7 `5 g8 A. A- d. N }2 I5 x! @' J' Z5 ^7 F
//////////////////////////////////////////////////////////////////////////
4 E a. F" V& m: j! R* P9 B sort(vItem.begin(),vItem.end());//排序
% t* b, J2 }! O+ Q; q$ } //////////////////////////////////////////////////////////////////////////
4 O. J0 [6 Y! q+ `2 H6 S! X //交换, v9 I* f5 |+ y/ n% C% g+ H
for (size_t i=0;i<vItem.size();i++)* I# b& ]6 X9 ~+ V0 b" E5 u
{
6 s2 ?0 U8 ]9 J% N5 \& j+ R# M1 T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 b2 D1 X; M$ v: _; d5 l% J4 v pInvSort->Add(vItem.nIndex);
) \7 b& f0 u6 \4 H+ W# b }1 B2 |5 | B( s0 D' _3 L
BYTE nDestPos = 0;
0 _: k& X% e- v \! b for (int i=0;i<MAX_INVENTORY;i++)
' e* J3 Y& G" Q- } {9 a# s( \4 \6 f+ ~ Q& d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 @8 i3 N* I+ X) p: a8 D. `+ q if (pItemElem)
8 g6 Y/ q9 X3 H6 e6 K; y+ _* Y {9 V7 P5 V3 v, T2 H1 _! V
if (IsUsingItem(pItemElem))* ]' p0 E& q( z
{; {9 h) @. }: P$ K$ i9 h) K/ C
//这个位置无法放, N, }6 u9 E1 Q! R' x
nDestPos++;
d8 ?- D7 ~2 o1 N }- e$ ?% p/ K* v" m- M. p$ t
}' O! o% a$ i4 B N8 v1 Y
BYTE nSrc = pInvSort->GetItemSrc(i);
# Z+ T! {: u+ c" N& { pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: l7 l* |/ w+ F, S" C# l
if (pItemElem)
7 E! w1 v7 H q2 m/ T/ p. T4 u {
' a! {; M7 A x8 x o if (IsUsingItem(pItemElem))7 O/ c' t4 }6 N) @
{+ K! a/ G4 b' k/ v6 _
//这个道具无法移动,跳过
& `3 M" P$ N9 _1 q. R continue;- d8 ~5 m0 f( E& I9 o0 I" j
}
+ A9 W, C7 S; P, q% b+ E" \6 E }else{
. l- {% F' X7 `6 h" m: | //空位置 不用动
! g6 V. j* h& T, D continue;
+ `0 v* U& i' O$ t) \$ ]) c5 J }% Z7 w7 K! O. t5 ~6 y' {$ Z
//////////////////////////////////////////////////////////////////////////2 R( H+ i6 a6 H1 N( b; ]
//开始移动
# s4 _$ Z9 }: j if (nSrc == nDestPos)
( A0 K: P! q5 K4 O$ T: V {9 z2 q, r: [' B" T
//原地不动" D# H4 s) b1 v% n) F' u0 g# _$ c
nDestPos++;
. a b; J2 g/ m5 B | o( R continue;
# Y1 e; B/ j" I# h, ]5 A }
5 K$ e) _' v0 r/ Z% d pInvSort->MoveItem(i,nDestPos);* y/ H+ f9 _- ^) Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ r6 @9 ^) O0 F
Sleep(5);
8 f7 i! O- P1 \" j //Error("移动 - %d->%d",nSrc,nDestPos);
% N5 `$ _0 F" r0 I8 w* p7 t nDestPos++;
2 X, t0 Q0 Q* ~, S" H$ \ } q; X5 |4 H0 V0 k' j" W2 ?
//取第一个元素的信息
# ^5 Y' i' e4 s+ L7 @1 C /*0 O$ Y' `- N9 [" b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. e/ ~3 J- W2 m- p+ e( s7 G9 I {4 k& d2 ? E& R( l) |" Y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) q( w E P6 b! M g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 T) p, y; M( i. _7 ^% r }( l, G% ]4 ?5 G0 n2 b1 D; g
*/
) A) Z; p. o0 B+ x //////////////////////////////////////////////////////////////////////////
# ]( z) t2 A) V7 {/ K break;
* ~. ~$ A/ \$ U# h1 ~ }: e# ^& _6 H. J% n$ [
} , m0 O+ n. {6 y
}
I/ F# N* M" O- Km_wndMenu.SetVisible(FALSE);
% W8 F! y/ l$ T' u! m ] n; ]
+ w2 b6 |$ ?; A--------------------------------------------------------------------------------------------------------
+ E( b6 w- G( O4 B& x x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, L8 P) j8 k# o! {- _{
' {9 ]6 E6 d2 g$ Y" E, t CBaseMouseCursor();6 v. A# o, M% e* C% u
}, W5 g! u1 F6 z1 D
在其下添加:
; r; n) H, K; D) D. Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. C1 j) T7 c+ k- o{- S7 G% X4 x+ l$ d; W& x N
m_wndMenu.DeleteAllMenu();& j7 c/ B, [$ ?
m_wndMenu.CreateMenu(this);
6 I1 T5 c2 j5 \+ O6 g8 hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 i' D+ Z3 w8 L8 t6 g+ Y
6 K2 `# V. ]' t& v9 O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" v5 z U- F9 G: a
{- e+ M5 ~" [4 v6 t/ C
//P以上级别才可以删除所有道具5 j: K. M2 M$ N2 n; Q, B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. O* A2 ]1 y L" y4 p9 ?
}' `& o4 H. D. m
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
a8 y' j* Z% \* y8 xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 M+ K, o Y8 h9 S. X% t! R, j% \
m_wndMenu.SetFocus();% k/ S/ h7 w) w" N2 q+ w; F" ^0 B
}/ y9 F9 j* u. m) K0 [% k
------------------------------------------------------------------------------------------------------------
' b' p' ]- k2 h& g" }. J% m! D*************************
: h5 }) N+ L7 y7 d- _2 gWndField.h文件
$ Z0 I* ]: \. f& N0 T: Y+ m*************************
" b% x. {1 p1 ]& w; ~3 G搜索:BOOL m_bReport;
- ^8 G6 u9 B. |其后添加:
1 _# i" {* }2 C5 F& G& i# V8 O- wCWndMenu m_wndMenu;9 _; A. g( i9 ]6 E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% l) G$ [, R& X/ m
其后添加:$ n" _* P4 i$ p+ e& r1 b: Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);+ B W# q) W! w* `; D# e* L* {# g
* o" y% C/ H) h+ s
4 g4 ^: Y5 Y& s/ o( K- K5 H |
|