|
|
源文件中_Interface文件夹下WndField.cpp文件
* r3 U/ Z2 r1 o/ n" R# M; d% h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' {. j N- _- [9 s* u' j* V& a4 }' J" ?6 A% I! d
struct sItem( x# P r, V) |3 p. }
{
& g7 u/ }4 G' |) r4 E8 DDWORD dwId;+ M0 `# k M9 W, R+ Q7 O
DWORD dwKind2;' a, e! r9 C% h) `: F4 B
DWORD dwItemId;8 ]- g9 K7 \- s! }8 }7 z
BYTE nIndex;
4 S3 J5 D5 O1 ]. a' QsItem(){
! p; K" c* d) O dwId = dwKind2 = dwItemId = nIndex = 0;
7 n9 }% J v* ]3 a}
2 [2 r, T$ a* l$ c& ^% s* Sbool operator < (const sItem p2)
# e0 H- W" x* `{
/ w9 } h" i8 Z if (dwKind2 == p2.dwKind2)
5 v$ A7 R1 d8 T9 h5 y {
/ H9 J8 ~8 H. y( M0 b return dwItemId < p2.dwItemId;
' R: Y9 s; m$ B; m7 G# k) q9 q" N }else{6 h/ I& h$ |4 b, ?, W% w$ w7 }
return dwKind2 < p2.dwKind2;! \. z* ?/ M7 ]+ m* X$ w* N0 n
}
7 B! s6 \- }2 ^( Z4 m$ X}
* L& V5 S2 `. M. \: W- O};% D+ y9 ~/ L) W0 D# X
class CInventorySort+ A- X$ T8 x5 F5 r$ a
{
1 N* n' J7 d: x' N, Qpublic:
# O+ i9 S5 Q. G5 d5 pCInventorySort()
% u' i. j: I R0 } L{
% M5 F9 J2 |% I) c( o m_dwPos = 0;6 p6 J9 Q, A9 O! S+ L% W& |
}
" i( k8 X' O1 f& P( V, _* v~CInventorySort(){}" p: R1 U* |% T* D9 A
private:
$ L/ C2 o- Y1 `; QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" S9 R; c8 `8 x4 |, `5 X1 G" U
DWORD m_dwPos;
0 d; g! P m3 Y& N6 O5 A; c2 M9 Cpublic:
. a5 U4 `& C) J) C+ ^void Add(BYTE nIndex)
) A+ t# W J% S/ \, L" d/ [1 v3 p{9 Y3 f9 [ d, F! h7 s
if (m_dwPos >= MAX_INVENTORY)
$ s0 V5 ^* d0 g t6 i& Z {
2 b5 W' n" q% d return;
. l3 K9 M: {; r0 ?' h$ p }
2 U6 M2 C9 Q& A( Z% ^' Q m_Item[m_dwPos].nIndex = nIndex;* u9 C# X) d) C* f* v1 V* e: O& X( C
m_Item[m_dwPos].dwId = m_dwPos;
/ e0 U4 q# s6 d7 V m_dwPos++;
& C' z, k6 m' {/ K1 [}
3 N5 C+ d( d( Z- sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' B) L* \) h2 E2 R1 p! A8 ?7 v
{
* C, [( U# p3 B0 r) s! N9 h for (int i=0;i<MAX_INVENTORY;i++)
9 _1 [" X2 N9 o3 \- l {9 X0 N9 q" u3 \/ q6 U
if (m_Item.dwId == dwId)
3 v! i' Y/ T8 V1 x {% Q5 @$ [& A0 u# Q2 Z$ Y; `
return m_Item.nIndex;
6 G4 Y: |, G6 _9 Y0 A9 V9 J& z }
; A. _5 z z5 m" B; n- C0 ^ }: Y2 W' u) n; ]) p/ w- X. H5 }/ N3 [
return 255;
" A. S* X# W) h' j) S}) L) q! Z7 s) c: x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. s1 ]( Y# I' a L R# P2 p
{
, b2 P& @0 L6 y5 u w) v BYTE nTmp = 0;
, W6 |5 f; ?5 S) t& x bool bDest = false,bSrc = false;4 I! N0 o1 P1 U8 d) ~
for (int i=0;i<MAX_INVENTORY;i++)5 D6 L ^. G) f' i
{
2 ~9 y2 e1 F, i8 ]1 _- o7 N2 s if (dwSrcId == m_Item.dwId)
( k- o6 [5 n: p% Z {4 h+ j2 }6 T% T$ f% J+ G! H) V4 v
//id相等 则 改变对应的dest和src, }6 p1 n* T) ]: r7 r* e
nTmp = m_Item.nIndex;
: ^4 q' ~: L% i; V1 f m_Item.nIndex = dest;
' P! ` x, S% L( J. {5 `3 O$ v }# y( A) Z7 ~7 p
}4 f9 `, F4 c6 S; I- z5 f
//临时数据保存完毕,交换开始5 i" `: w4 `* h4 D
for (int i=0;i<MAX_INVENTORY;i++)& d7 T& M4 L% l0 U
{# B: v( B, P2 {7 m
if (dest == m_Item.nIndex)( G) E2 l1 I; a8 R
{- s' f& o7 b7 f0 q( @, p. N+ x
//id相等 则 改变对应的dest和src8 C; F. |2 k5 F! O7 b n* ?+ ~
m_Item.nIndex = nTmp;
4 v/ x% j ?# I) v8 w }
7 @$ f+ a$ ?6 R J! W! t }) r, S5 ?+ V, z# e) J K( y* }! i' K" ]
}* R% q3 q7 V$ z) Y
};0 A( j b2 i9 c3 G
-------------------------------------------------------------------------
. l, X: ^* I$ j5 C N5 f/ ?3 p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 p) C6 a: l1 i( p+ I2 e搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, O/ E9 O% b! r; y
紧靠其上添加:' z: R5 f/ x* C
if( pWndBase == &m_wndMenu )
) y' [9 `: R) Y. J% r# `: v: L{7 X n* e; P, [
switch( nID )6 q) J3 X" E/ G) |. K
{3 ~& r3 I: ~) g$ \* O# u& w9 P
case 2:( {% W" G8 \$ w
{8 j: ?# @8 q- @9 V6 {5 d5 U9 {
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( |) ?* | r. c% ~! Y7 C if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 r) o% C# e& h1 D! E6 G {
- R ^8 ^* I% h: ~% M f break;
' ?$ B* r9 K3 ^1 r0 S }% c: }# m# l) C3 M* Q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 |3 X: y$ I0 h% ~9 D* [0 g; ~+ b3 m {
2 S" Y1 R9 S3 f, e V+ e+ l3 [* n' Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 {9 V2 j A: z# u0 r# _/ \* t
if( !pItemElem )
' m4 }0 M: K% {# W7 b1 J4 ]( Z continue;
5 j% _: Q5 J- _ if(pItemElem->GetExtra() > 0)
* L* {$ ^7 y- x) }2 ? continue;+ u! y2 ]/ j8 P7 [! E" M2 U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; d9 p. E) y& l9 k continue;9 b; ?- s# O4 ?
if( g_pPlayer->IsUsing( pItemElem ) )3 d$ H8 A+ n: K- f
continue;
9 {$ u& P; }7 Y- `' }6 u& ? if( pItemElem->IsUndestructable() == TRUE )
8 s5 Q: u: Z( c5 u, L {
3 V! K0 q* N+ `7 w g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 ~0 ?9 [7 H6 r9 x! z
continue;
# p* Q3 Z' r! W8 ~; h }; p m- W5 l6 t6 E. r! o+ h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 o5 p* f3 ] R" o }* j+ V/ W6 E! p2 E
break;
7 {9 w8 f- ?+ E) S) s' a, z }
( n6 a& j) ^9 {7 H6 G4 t1 j case 1:
* X7 o' r( @( Q6 F) R5 k: t3 G {: t( h" F9 G# n8 z3 o3 o
//整理背包8 I" |8 a' G2 m( k& }+ f
//////////////////////////////////////////////////////////////////////////
* A6 T' F1 S N5 E //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# a; c6 f+ a' H$ m$ t6 N) s //////////////////////////////////////////////////////////////////////////
- k9 S5 o1 n% O+ o; c" i //////////////////////////////////////////////////////////////////////////$ V$ l! c) x" U1 {/ ~: K
CInventorySort* pInvSort = new CInventorySort;1 J, q- J3 @2 a% ?
vector <sItem> vItem;
+ T! X3 Q6 B6 I$ O5 f# F vItem.resize(MAX_INVENTORY);//初始化大小% N1 f; U3 Y7 g- ~0 ^$ ^
//////////////////////////////////////////////////////////////////////////- N B2 t0 X! i8 e8 w
//填充数据
% L8 p* T- k; |* |' Q2 x ? for (int i=0;i<MAX_INVENTORY;i++) x$ M2 z( ]" ^2 r
{# h0 u9 Z# R6 C1 a# r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 N4 b+ O3 B8 l if (!pItemElem)+ m7 R! \$ u! u" G, C
{
/ Y1 @0 a j, O/ S/ z* G vItem.dwKind2 = 0xffffffff;4 z+ j( @& c" R! A
vItem.dwItemId = 0xffffffff;
; d) D6 g) B4 k- e) _1 y t vItem.nIndex = i;
* R6 _" D3 i2 _! p8 S& ?, X }else {9 x1 J7 f% W! b
ItemProp* pProp = pItemElem->GetProp();- |# Q v/ [4 h% o3 G2 t$ U
vItem.dwKind2 = pProp->dwItemKind2;
' Q. v! ^! S) K4 b6 v vItem.dwItemId = pItemElem->m_dwItemId; G2 w1 l) O2 A3 M% |' q4 r, n
vItem.nIndex = i;) |9 d4 C$ G( t
}) v# L" y+ ]8 g# E' K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 z9 W( ?! N% G0 V1 |' t% z }* r; a4 I2 W: p" s' v
//////////////////////////////////////////////////////////////////////////2 q9 F- ~1 T) l; d' e
sort(vItem.begin(),vItem.end());//排序
6 ]* U2 x B5 u, X5 k //////////////////////////////////////////////////////////////////////////; q) Q4 j2 t7 E* Z8 `
//交换
4 a& V8 c, N, m' A for (size_t i=0;i<vItem.size();i++)
, z4 S) s3 a; }: ^" B {
( Q$ [% v& Z( l. u ? //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 I) m( O' c3 N& i6 {% Y pInvSort->Add(vItem.nIndex);3 q* U |- `- l
}
+ {/ }4 ^" `5 I5 q1 k7 f BYTE nDestPos = 0;
! ]# `7 q* g5 h: g1 ~0 m for (int i=0;i<MAX_INVENTORY;i++)' V9 n5 H5 k1 g4 }9 i I3 O# b
{
4 b# q& d1 [* z9 P& v: F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 h& [/ g% V! N if (pItemElem)
4 m) n9 u; l$ p2 A* p6 y0 }8 ?) _ {
0 i8 L# k9 u: y w' R; G if (IsUsingItem(pItemElem))
# |8 G( e5 ~+ G8 ^ {
( C) E0 _ L# R, N4 |1 \ //这个位置无法放2 [3 O% h) p& J' t h; h" O i
nDestPos++;
4 u9 g2 n" z+ M" E7 v8 e+ W- M }- z2 f9 Q; N+ k
}
4 n4 X; ~$ k7 D# h$ I n BYTE nSrc = pInvSort->GetItemSrc(i);6 Y' c$ Q7 g. i+ @
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 t+ _+ v2 l; d1 }3 z7 m if (pItemElem)6 y9 D M. E! l& L# W( _5 E4 w
{
. c# R" e9 i* ] if (IsUsingItem(pItemElem)) y# @ i8 A2 ^2 q G. z
{ ^! c8 R8 K0 R* |0 [& p. L
//这个道具无法移动,跳过
' P$ x) k# @! _, Q. ~2 d. b& C2 s9 O" N continue;2 L' U+ M& U" j- \- M- y! M
}% Y' t9 [; ]* }( v
}else{# B3 p7 J# u1 J5 s# Q
//空位置 不用动& d2 [$ Q) l" K% |; [( Z( v
continue;3 t3 [0 m# D# W* |# p J- i
} V' W1 j' j5 c$ @
////////////////////////////////////////////////////////////////////////// d2 {' r5 k7 Y; @5 h
//开始移动
8 F1 G M& h1 j/ Z2 m3 }% } if (nSrc == nDestPos)( A( y" f, v' r) m4 C
{ ?9 E# q+ Z4 {2 D, R
//原地不动
: n9 o+ r/ B3 Q3 S nDestPos++;
+ T( l8 k- I3 ?( O$ [8 f continue; e# ~# i, j1 [# V- U/ r. [
}% S) ` _$ B, g/ D% G% @7 M: u
pInvSort->MoveItem(i,nDestPos);
5 `/ m; J* v# P; a9 J+ y- v g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. c* N+ ?) c/ ^" J6 k3 K Sleep(5);
4 E+ u0 e4 T) V9 { //Error("移动 - %d->%d",nSrc,nDestPos);+ V$ j( o* K0 V0 ]
nDestPos++; }$ }# f5 z) f6 I9 v! x
}
' f3 c# }3 m; V5 H5 ? //取第一个元素的信息# C% `( K# [9 n0 p& w u
/*
. e) \( T0 X& J. P if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 Q( k, P3 e& I
{
$ B; G2 q- f: x4 b" d. f* { Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 L. P2 k ]+ a7 R8 x; P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! k* M2 ~9 R% A" j0 H; e }
6 d3 Z0 R& e/ }& v8 u1 w: e% k7 `1 o */
9 q; y) t) f! P } //////////////////////////////////////////////////////////////////////////$ h; E7 I5 [) V* P( `
break;1 t, p# T0 g: V2 a: |& K+ I1 J; F ^
}
0 Z8 y+ [+ ^+ b# L/ L } : i. K, \9 P) `& w+ M' v
}
+ k' G7 x9 N6 R( z/ C& Vm_wndMenu.SetVisible(FALSE);9 L- o( K+ R2 I( Q+ A
) H4 P/ A* r! B) ~7 i
--------------------------------------------------------------------------------------------------------: `- n! t5 s+ c7 E; u" q+ `2 ?) t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 k9 V' T# Z+ ]/ T{4 v& J5 V/ S) E; a( t
BaseMouseCursor();0 ?- g. a! ]# D9 f* Q5 J
}
6 V" P7 Z9 h5 u, J$ I在其下添加:) c( L* k1 i8 f. p% {( u& K- L
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 D: h6 K; A" K. J( R/ Q
{) P5 X! [# k+ [/ o# S3 {
m_wndMenu.DeleteAllMenu();
/ R' |' J S% \3 p$ ~7 r- F, dm_wndMenu.CreateMenu(this);; t4 j/ V y% F% Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 g4 P! O: w- t9 u# B
q) S/ Q7 T) z2 ]1 rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): w% f: X' c, u- e1 A& ~
{
# y3 {" g( u- `! S$ L //P以上级别才可以删除所有道具
' {2 m0 V. P* x) Z. t/ _" D" R m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 e' M& i9 O) N. n4 q
}1 R' J7 A" X: @ ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 R# G2 L5 B7 m! d2 b* N( S
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; g7 n$ {" K: W" Om_wndMenu.SetFocus();
p8 F/ }2 }, S, q4 T5 _}
5 ^1 Y* @. k9 w! ?! T------------------------------------------------------------------------------------------------------------
2 ^ A7 _2 _% D& F- B: V, Q*************************
, n( x9 x: S7 r- oWndField.h文件
6 Y% a( V. t6 Y# y*************************) H: K5 e3 X: K. W9 x8 D. v) v6 i( x
搜索:BOOL m_bReport;$ }. m; n6 p% V6 ]( l6 x% k
其后添加:
9 c$ C2 x% d$ f" R0 I( G* Q8 j1 f _CWndMenu m_wndMenu;
* { `8 M: Q5 C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! z0 P) G9 t9 {7 Y. H4 s/ b/ o
其后添加:; y6 }6 h& T |! D% G0 I' v
virtual void OnRButtonUp(UINT nFlags, CPoint point);& S4 ]9 p6 c: ] d
) V' _4 F# m$ l D& @; c. i' i1 i$ U, j) y; c
|
|