|
|
源文件中_Interface文件夹下WndField.cpp文件
8 y: k0 E6 S6 S- ]5 O$ L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 K! u# i3 o) E
2 @0 k3 m9 Q6 I3 _+ i2 l5 O/ hstruct sItem, e& T" i2 u' F" E
{
1 i4 L% z1 G- [& s) {DWORD dwId;3 o+ W5 U$ Z( W( @4 W9 E
DWORD dwKind2;
, P( r7 Z' R0 D6 r8 s1 SDWORD dwItemId;4 J$ _9 l9 J, b% ~- i
BYTE nIndex;
. a0 W7 R$ O" q2 | usItem(){
- l1 ]% \* `; J1 N" A" o dwId = dwKind2 = dwItemId = nIndex = 0;
' H5 S/ v. R: [: ?7 `! z/ q" {% f}
9 v/ r A6 W# |* x) \" bbool operator < (const sItem p2)- Z1 {" t& P8 J# Z) S" T
{4 h- z9 a; b& j9 B t9 I
if (dwKind2 == p2.dwKind2)
) R2 k7 v' }9 j) K$ [% u {7 _; X4 E) c, Y/ R
return dwItemId < p2.dwItemId;
, T; M- w# |& a }else{
* d: l% q! @( B( l& Q7 t return dwKind2 < p2.dwKind2;
) H2 E- N% S3 j: K/ R }9 s9 ~8 M* `2 Q J+ s! M1 m* i7 X
}# g- F5 l3 `% W# T5 R6 g
}; h; q8 [" K/ y1 g' D
class CInventorySort9 D7 e L6 R# b. k/ ^% `
{5 R1 |% X- r# S I
public:
! Y7 v' x5 F+ z, K& h# A7 ^$ p$ dCInventorySort()
: N3 C& i7 e* E: M0 V{
: E U! c1 m+ F& X: A9 {, P- p) H m_dwPos = 0;7 B' _! c2 }. Y z( R3 h4 [
}9 X, A" g7 G5 Q* L \1 C
~CInventorySort(){}3 [. n" N. V, ?1 D& ]5 ^1 n; M. I
private:0 q' D' n6 G9 A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 I5 R$ P/ U8 Q/ }3 SDWORD m_dwPos;3 o3 W' `4 S- |& H3 L6 E2 f
public:
% E) ?! l4 r- P- J9 j4 m1 Q6 Uvoid Add(BYTE nIndex); \; M6 G3 ]/ H& l) h4 I* Z
{
$ u9 Z3 [9 `0 q. d! m9 L if (m_dwPos >= MAX_INVENTORY). q" i) b5 _5 l6 H# T
{# w$ s0 a& D+ k. w8 U) D
return;
. f. \$ [6 `( P5 Y } }
0 ?1 m: E/ F: E3 q m_Item[m_dwPos].nIndex = nIndex;
- S7 I# \& G9 i( x! F* u5 n% h m_Item[m_dwPos].dwId = m_dwPos;
: _8 e% k5 m" K m_dwPos++;2 y* |1 ^7 z, w. F8 _ D9 \
}
2 s* ?0 X$ h; r8 d. {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 [( U6 S+ j. x+ V, c5 A x
{+ k* h# e% ^5 K% A0 t( z
for (int i=0;i<MAX_INVENTORY;i++)% M2 o9 C& t; c0 V9 t V
{
; u( m: [6 I) D3 Z; E( |4 U" M if (m_Item.dwId == dwId)
" g! ?& j: B% g {: Y# ?) `+ S, v3 A- G9 k
return m_Item.nIndex;& d& N C; d1 s" \$ V6 a
}' I m! f s$ T( M) V& [
}7 D3 t6 Z* X" a' Z" Z
return 255;' v: N" }( U2 @! K6 ]5 i% U
}
6 {3 p6 B9 _( L& F# p: ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 W: |: n; t- V# d5 V{0 K: e; j. y1 k/ B0 U* {
BYTE nTmp = 0;7 P4 O" X! ~7 C- m# _# Z
bool bDest = false,bSrc = false;& L# J% V: }5 x& u
for (int i=0;i<MAX_INVENTORY;i++)
3 t+ C! F, W. Y' [: A7 q- M5 B {
! K1 o: {7 G1 W9 o) b/ T0 J if (dwSrcId == m_Item.dwId)
" y7 Y4 b# P% V& `' F7 ` {) b% l! X' O2 s: h, |
//id相等 则 改变对应的dest和src* P' z" r2 u$ d# |- x4 Z6 {" }
nTmp = m_Item.nIndex;
7 R# ~6 Z# V; l: ~# d+ G m_Item.nIndex = dest;! f$ e$ g* O& v0 ]; [& S
}) N% }1 h: F. u1 z8 \! T( p* a
}
( Z1 u3 W8 d: `7 h q( e //临时数据保存完毕,交换开始
4 O8 x' f1 b2 D) ~% } for (int i=0;i<MAX_INVENTORY;i++)
$ ?: T0 \) C& y# _8 h {
( w6 ?5 `/ a4 X if (dest == m_Item.nIndex)
" h- S( { D( I8 ~ `- A {
# C% X5 @ o" u' U& O/ c //id相等 则 改变对应的dest和src4 a. A/ |3 V a i) G# \+ `
m_Item.nIndex = nTmp;( P+ E O8 } w& N ?% g
}0 T: C! S+ Q- ^: v
}3 k& j1 f! D9 U a
}
/ F; \$ ~5 v5 u+ [7 I) |- s+ b2 P};/ g3 |) U0 R3 h3 T$ y* d% ]5 u' [* W
-------------------------------------------------------------------------5 q, |: m$ S" J7 f3 Y! d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& c+ C5 ^- g; S) E搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% H2 N+ k9 ~, h0 O& ?" l紧靠其上添加:" b4 d& s; I8 h( c. E7 q8 O
if( pWndBase == &m_wndMenu )2 W3 W% s4 q" d) @( d) S0 B$ H/ H- C
{
4 f( e6 j8 n8 z/ m/ ]& C8 T# i. _ switch( nID )
( |: m* ]8 e3 ?6 [" i, |& G2 W c/ A {2 y& H) b4 r+ N' W" |
case 2:
. }! \* e- W) l9 ? {
3 \7 s: B7 y" Q; ~" B; v: d4 V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, ` j$ Q0 O% J8 h1 q& s/ q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' T. \5 @; O7 a3 i7 j, E# V; c {
0 q9 `$ O* O0 [ break;* C) a \ X# v; |
}' A& V* h8 I, r0 L" e
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- M+ I" q3 ~) M2 c! h( @- b; _0 `! @* k {" u2 ~) j- R) O' H4 ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' E5 x: T' l% E( `1 o8 n if( !pItemElem )' B& Z7 c, ?% w
continue; @) Q D& [) f. J
if(pItemElem->GetExtra() > 0)% x( `) o# s% N' Z6 y& X/ c
continue;
: h+ L# {- W) v9 y/ w2 {, h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 M$ `* _) o# f6 @/ _& N6 ~5 u' F
continue;
4 ^$ e, b& T/ v) \9 w) @0 _2 t if( g_pPlayer->IsUsing( pItemElem ) )# I3 [& P' D5 B$ j% U7 V
continue;
( i6 O% {# J* F: X( ` if( pItemElem->IsUndestructable() == TRUE )
: |5 Q* C7 J- I {: d% g2 y: O; s' N' _! B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 A9 p7 v2 j( O7 v! J) T" f* p
continue;* q M' y! r6 i; o8 r- X; I
}
1 x, P' a* y" b$ S: q6 e g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: Z0 {# i J' e5 r8 D. R' f5 I: U
}6 C7 v9 n8 `/ ~% T- o. N" C% u
break;/ J3 I- u r( D2 H
}: n5 a" x V3 V9 F5 Q* y5 n; @
case 1:
: h# D) c- Q/ U) z2 g* ~) y: K+ L {1 ]" i, T5 h: m6 v: U
//整理背包
! R( j1 `& P9 Z% D+ v$ D" {9 X //////////////////////////////////////////////////////////////////////////5 B& L$ @6 m5 S0 W: x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" e4 r1 a6 B, R6 s
//////////////////////////////////////////////////////////////////////////; L' x6 M: a7 O, v
//////////////////////////////////////////////////////////////////////////
; K6 s' \6 a( w% n o$ G( D CInventorySort* pInvSort = new CInventorySort;
. f' o: j% G! a vector <sItem> vItem;
* Z! C* y3 i" L+ L+ F vItem.resize(MAX_INVENTORY);//初始化大小7 m/ P) A/ ]+ D1 s
////////////////////////////////////////////////////////////////////////// ~ |9 x; @* k' N1 J1 R; s( T
//填充数据
$ L# X2 B! [* ?/ g/ g for (int i=0;i<MAX_INVENTORY;i++)9 V4 y8 U) g& S' y
{" B) o; L( W; G2 T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 [8 y" S' t1 j l if (!pItemElem)$ O$ K' f; X/ s& `5 [' y; E2 N
{9 g% g9 m1 `/ G
vItem.dwKind2 = 0xffffffff;+ a T$ w3 Z7 @
vItem.dwItemId = 0xffffffff;- T- f4 c" N; d6 J$ f7 a
vItem.nIndex = i;/ {1 M; j9 j) @, f' I2 x
}else {) ^6 A8 B" A0 W. @6 r, b1 D
ItemProp* pProp = pItemElem->GetProp();0 f" P9 ^) P$ p& }
vItem.dwKind2 = pProp->dwItemKind2;. h- g" Z) T% a( W- G% b: `
vItem.dwItemId = pItemElem->m_dwItemId;
" h5 e# M b% o+ [9 a6 n9 c vItem.nIndex = i;
: R$ M! W# `& `. v5 R$ z }
. ?! ?3 E4 L0 l9 g //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& |' a; g# s( R% i' B# } }
* g* a/ P8 o C( Q p1 S$ s; H //////////////////////////////////////////////////////////////////////////
& m) R! Q8 [" B; N2 f sort(vItem.begin(),vItem.end());//排序+ s! T' U- L/ F
//////////////////////////////////////////////////////////////////////////
5 I/ M1 t4 V) f& K1 U //交换
, w6 j' J9 ]+ L' |! T for (size_t i=0;i<vItem.size();i++)1 G0 V2 J) e6 O9 }" O4 a
{
7 T( {2 v3 T' v& L# d# D* \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: z- w6 o9 i! z3 M pInvSort->Add(vItem.nIndex);
/ z b3 D2 E6 m2 h1 e1 m3 n1 W }: T) r7 ~8 ]. u6 g
BYTE nDestPos = 0;9 d2 O. o; T' a9 ?' r& N
for (int i=0;i<MAX_INVENTORY;i++)
4 N3 _, A0 o6 W. v! J {
# u L0 g7 |% x/ G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ M4 T; [8 }7 s9 k6 n
if (pItemElem)
; D) Q" u0 _" z1 q, h% X {
1 {% W2 O' @$ h W! h if (IsUsingItem(pItemElem))
4 r2 d6 J' h8 ~2 o) _ {
9 U8 l8 j+ T- w4 o( S$ q& h //这个位置无法放' c9 ^* Y; \' ^! s; w
nDestPos++;
7 [ o4 a' V: n6 @4 M3 T+ s }
/ K7 P* m- j* r" F% I }) H% C9 X) I' S, l' f
BYTE nSrc = pInvSort->GetItemSrc(i);* U. F' ~( A0 E7 W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 Y' o4 H, {( M9 U4 y4 }+ U2 a if (pItemElem)' b6 Y3 D& i( M0 l" |! |
{
, F, Q, G8 n/ T( q) L if (IsUsingItem(pItemElem))* H! B4 j- t) T% l% C; T1 S
{
4 t" ~, a3 q6 L* u# f) E: ` //这个道具无法移动,跳过, j& D# I* {; _7 o- k9 m3 q
continue;
' k! v! k; G9 }/ @7 c- ` }% r0 q( W: H, e( M
}else{, f" y. \4 u$ Q2 O
//空位置 不用动
5 q; j; j- A% P2 @, [1 E7 K( j continue;
- @( f7 ?& g% A& E3 y6 ?% p' F! g+ e9 Z }4 ]9 ~4 E. `7 d$ e/ P3 O& T3 _
//////////////////////////////////////////////////////////////////////////! v2 W, s' W# U: K1 r* I
//开始移动
, P0 C" \0 J8 @, V" x7 b, K if (nSrc == nDestPos)
- C2 Q8 f% s8 T7 f {
- J. k0 b5 P$ H: m& ~ //原地不动
V1 y k2 Q/ N0 t2 k& L8 w nDestPos++;
2 d, M" {6 ~ ~ continue;
; Y4 S1 `6 n0 o9 j% X+ _ }
* g. h S& U, ?$ P+ { pInvSort->MoveItem(i,nDestPos);
& {( b( L3 Q) A5 {% a; E# P$ O4 u g_DPlay.SendMoveItem(0,nSrc,nDestPos);. l: @' Q' q; [( e! i0 z3 E+ S; I4 H
Sleep(5);7 V5 b, B4 a; ^0 e% o, W( P, G7 f
//Error("移动 - %d->%d",nSrc,nDestPos);4 x& d* }( B% M7 x' ?! Z
nDestPos++;
! o4 {$ c+ C2 ?: h# @ }' \' C, m! y+ @; X, v
//取第一个元素的信息$ ^" A6 t B g7 t, k
/*; p* y5 x* E+ M# M3 c& N3 W( E# }$ s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ V+ ?) w0 L, f* d& d$ X {
/ g- `+ S; N. E3 `1 |! T+ e$ \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 Y' W$ d2 H5 w/ Z- l6 q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 `3 {! m9 m- x7 c& d2 Q9 e9 h! f
}
* B( W! m) c, ~ */, B; T; }2 c. u1 j8 m& \# i
//////////////////////////////////////////////////////////////////////////
4 A+ b: K* `, [ break;' b) u# {3 u5 C ^/ F* N3 V
}1 J: A' j0 [ M" {% E
}
6 U$ W, r9 G1 F/ w3 j}+ H" l/ e& G! k
m_wndMenu.SetVisible(FALSE);
( T4 r* ?- m+ K5 I3 W2 O/ ?6 j; [% t( h( t& k& i( o/ K
--------------------------------------------------------------------------------------------------------6 c7 b5 }/ ]8 y( j" t+ x$ G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, d$ w6 G* E4 d. t: x& I. _{
8 Q) U5 |: J1 k9 _* FBaseMouseCursor();- v9 K. B4 q7 E! ~( P4 L
}
" }. r- ?3 A! Y7 P" H0 T在其下添加:2 E7 I2 I2 z5 p' ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) L. |/ X, M. }% E$ W' x5 d
{: e- S2 C* q. n& l% f0 x1 f' q
m_wndMenu.DeleteAllMenu();* U5 |$ I% q8 R5 c7 f2 k0 R
m_wndMenu.CreateMenu(this);
, f: v2 a5 i2 |! H* Y' Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 Q, o6 H% p+ g3 @5 F; t+ Y$ P" [
2 V9 c- Q9 m* k# M: U) Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 S2 G: s$ i- ?9 X/ y{6 {' ~( G2 i* I
//P以上级别才可以删除所有道具
1 T$ v8 N# `# O" u3 o+ E m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 U6 q1 A5 Z4 z7 P6 ?}
/ T1 y% b) h3 P8 Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# O) W/ L- Q8 x5 Q$ vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& S3 Q4 V, R2 J; A
m_wndMenu.SetFocus();8 D4 g& O7 g% [9 A, g+ p# ]
}) |, Z- ?6 n! u7 d
------------------------------------------------------------------------------------------------------------
6 T! ~- n6 Q# `4 Z+ H*************************
' \8 r# D5 n! u# b) C5 p5 tWndField.h文件6 b5 F3 y& E% e8 X- H; u9 Q/ X
*************************/ J8 K$ e- H9 [, U7 _
搜索:BOOL m_bReport;
( } e. a; i/ ^* \其后添加:
8 g1 V# \1 u( qCWndMenu m_wndMenu;
1 }6 r1 Y8 l" f" h搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 ]% ?: k" f5 J* I @( [! [其后添加: u: O- Q/ {3 }! [0 K/ W: L
virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ n2 ]6 C( B/ l' ^
9 @0 O7 S' |, O9 g+ l6 }) ^+ g9 u3 m$ [ U0 k8 F/ S% \: u9 i
|
|