|
源文件中_Interface文件夹下WndField.cpp文件: s- Y% t) T0 m0 ?5 n2 G2 o
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! J ~6 I$ w3 C& f* e/ D! I( x5 E6 }+ R0 r3 m, b/ F
struct sItem& U& c: X6 _: r/ v
{ r& Q0 G( R U3 a8 e* |, K$ Z
DWORD dwId;- s0 s$ c% O$ C* Q7 Q, \! D
DWORD dwKind2;
4 n# B; ^7 p* u1 {- wDWORD dwItemId;( g) y5 R' b# G4 Y' _. Y, s
BYTE nIndex;
; t+ ~, c. j- {. _" BsItem(){2 o) H% L8 N9 k8 k8 s0 ^, R
dwId = dwKind2 = dwItemId = nIndex = 0;! F/ {+ F+ e3 A+ Q( t, {! K. x
}1 H1 B; l6 ~' f: i, x/ g. {2 k
bool operator < (const sItem p2)/ ~, d( z/ V9 F
{ f; |" h1 V7 D
if (dwKind2 == p2.dwKind2); f1 `5 S: R. U, {
{: m# t& O; [$ O6 C) s4 o) Y
return dwItemId < p2.dwItemId;+ D7 Y `1 n1 f1 f. g
}else{, f, j z- h- G: }3 N+ C$ e
return dwKind2 < p2.dwKind2;3 b9 A: b C' X: Q+ M% P( n
}
6 X O* E l+ `' I6 x}/ t' W. |" y3 O$ o6 Q- t2 x6 H
};& M/ E3 w9 H3 {! d1 n" `
class CInventorySort1 m( a* f0 J* V% V/ T0 S! V
{3 j0 O. [% g5 j0 W4 y( X0 g
public:
6 m$ F. R3 N9 x3 S. a7 {6 aCInventorySort()& [; _2 @( ?, s9 K% ], k
{$ }5 W' e! v3 I
m_dwPos = 0;: ^5 P+ `1 Q" v5 k) \
}
, I* i; K* i% Q, F3 `# J~CInventorySort(){}
$ h( A) J" I" S# q4 |4 P$ Vprivate:3 b3 R& Q* m7 ]; ^5 s
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' `4 ?' a7 a$ F) b! G7 K' a0 P2 d
DWORD m_dwPos;
9 h* e2 X7 x t7 B- Z' upublic:' g( e3 J; T5 a8 q4 E5 g: X
void Add(BYTE nIndex)
# N% c$ E' `8 s9 Z4 x. o8 z8 O- y{
" }, h* |3 Q) M2 r if (m_dwPos >= MAX_INVENTORY); C } Y7 D8 N5 R
{ |: N/ \( o6 n- \" B
return;
2 j4 \4 P* K4 L. V }
' V1 i( e$ K1 H7 U. V6 v0 M! I6 D- X m_Item[m_dwPos].nIndex = nIndex;
. R- E0 C" E$ K" \+ N m_Item[m_dwPos].dwId = m_dwPos;
9 y/ e5 V. U8 U6 W: K* Z7 P m_dwPos++;5 `* c4 z) o4 z' u5 x( `
}+ ^9 Q3 ]8 _, ^- p4 h7 [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: A4 l8 |# [% J/ V4 d, y/ w* Q+ R
{# {4 B; n& Y H7 m( ]: v% P
for (int i=0;i<MAX_INVENTORY;i++)& q/ p5 M4 j% o
{, i+ \/ [7 _3 A% [
if (m_Item.dwId == dwId)
, i4 b1 K3 l6 z/ ^, @ {% G- j6 W0 v3 @. s5 g
return m_Item.nIndex;. t# D% W" a/ D; l3 {/ W; p
}
5 M2 F! T, A+ P9 g" B2 ?/ b9 n6 f5 S; Z$ Z2 Y }# U0 k/ e! L9 ]1 w, d4 x, P* t
return 255;
% ~) ?! A+ T0 n1 `7 [/ Y" ^}
1 J/ e) V1 Z9 k3 hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 M, |0 L( p* k' m5 D: x{
0 L' A1 E0 i6 _7 x- Y BYTE nTmp = 0;+ x( m2 v* k p C$ r" A
bool bDest = false,bSrc = false;1 p; w8 @4 m, I% k' P
for (int i=0;i<MAX_INVENTORY;i++)
* X& W8 s% f' l4 a {
' n, r+ @$ D1 q if (dwSrcId == m_Item.dwId)5 I' f, r0 }% h+ J% s! j
{6 S E! V/ W; B& _$ r
//id相等 则 改变对应的dest和src
9 ~1 J" p" x3 _2 m" N5 h nTmp = m_Item.nIndex;
! ?9 b0 f% v) e8 ]% j m_Item.nIndex = dest;" `* i8 Q$ P9 y# B: y
} ^' V4 U, a* ?5 _" Q
}* W: P+ b$ y, g
//临时数据保存完毕,交换开始
N5 H: d6 Z8 [ for (int i=0;i<MAX_INVENTORY;i++)
, e8 ^# T& x* J8 _" C: | u {
- [: Y, r% }7 U7 r$ T& [ if (dest == m_Item.nIndex)
! _7 u2 l% v8 J: [# G7 W {
% v$ o1 |; o. v o( e //id相等 则 改变对应的dest和src
# c7 `, B: m3 x m_Item.nIndex = nTmp;
' S g8 v" c- q4 m" E. o6 k- P }
5 z. K: i4 k) L: |: N( \9 b) c }
@0 g" w8 X$ \( @0 n; K; K}
1 k6 F2 D4 M5 ?( q7 \( [7 K};
+ p" c7 E6 M6 t8 y8 @& Y-------------------------------------------------------------------------
$ Z+ F6 a( q$ ]; W4 R5 U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) q2 d0 c% ]$ o- h9 @5 `) i. D: p# F搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% b9 t% P" J( d1 b6 L) p6 g
紧靠其上添加:
1 C; K ~5 X0 S5 Iif( pWndBase == &m_wndMenu )* [9 J- q$ ~" t. w$ }$ P+ D9 u7 V
{& F5 Q4 X, {0 \1 Z$ o% C
switch( nID )1 G7 g! S2 y5 t$ h6 m! j, X
{% t3 N6 |" b+ d y
case 2:' E% L4 I! ~ W4 A* M0 ~# W( K
{& n+ N8 O/ O7 K. k2 I( o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 N, R/ ]$ c! D- [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 k/ ^) N5 r2 F" {4 b0 p
{7 `2 T2 F$ R/ X; S& q" \3 e
break;
: _6 A$ _# Y1 i7 r3 N I- E1 a& L }: ~0 [3 G3 X' `0 z0 Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 O. L! _% T: E; O
{& U+ [+ F1 e4 L) D% g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. \ G8 ]$ b8 A' H' O1 c* k
if( !pItemElem )8 b, f6 x# x1 n
continue;# _7 C% H7 p7 x" s5 |4 Y( [* b
if(pItemElem->GetExtra() > 0)
7 l% `: r, E7 j continue;
' y; ]3 n+ u' g if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' z8 V/ B* Y' e7 q6 G- p
continue;% G2 W+ F4 ]( e4 [+ D
if( g_pPlayer->IsUsing( pItemElem ) )( g& A) }5 Z9 H. O
continue;# `; s) K/ `9 E- h" ?
if( pItemElem->IsUndestructable() == TRUE )
2 [8 N: b) P! X. m. | {
- n( x2 Y, X( e% _3 } @ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" @$ B* ~' E$ b3 l; q+ l3 d continue;
5 u0 \) ]1 k& f% q3 \7 J }/ b$ R8 l0 o4 b% s
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! O0 s3 |+ L4 {8 m/ a- h1 @
}
, D& s) ^ B: } I* S% A7 o break;+ A8 y+ v. h" p4 N9 V
}
% L6 H3 q G1 B1 \ case 1:
( O$ f' e0 p1 O/ E$ f5 z {
6 \3 S0 a5 M& B4 y/ C" v //整理背包
1 e* @9 v; A: Y* t& A; q //////////////////////////////////////////////////////////////////////////" c3 H5 ^3 G+ V$ |9 j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& l& t* x1 _) ^4 U# {
//////////////////////////////////////////////////////////////////////////
) F4 m9 a" D, o# Q1 o //////////////////////////////////////////////////////////////////////////
" T) B" R$ c; ]$ v CInventorySort* pInvSort = new CInventorySort;* e2 f n( D. i5 L( k
vector <sItem> vItem;
3 G/ n# w1 D5 A vItem.resize(MAX_INVENTORY);//初始化大小7 t6 f0 W) V. O+ M- R
//////////////////////////////////////////////////////////////////////////& d, I- x5 s4 @+ `5 @" i9 O# w
//填充数据2 E: { w; L! o+ X
for (int i=0;i<MAX_INVENTORY;i++)' w) P; e7 Q* K3 ]& M
{3 F( I0 s6 ]; L0 G8 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" q5 u5 S' M+ L& g0 N: x* ]
if (!pItemElem)
) _& T7 w* |5 ]% j, H5 G {
9 _6 e* t2 S9 E6 F! B" J3 A5 x/ H vItem.dwKind2 = 0xffffffff;
3 g5 K2 c5 H) p( X$ J: v vItem.dwItemId = 0xffffffff;
u9 k$ Z+ K h vItem.nIndex = i;( F7 q1 ]. s/ n5 F/ x3 W) c
}else {
! G+ J6 P {5 G/ x. g+ V ItemProp* pProp = pItemElem->GetProp();0 L1 @( |7 a3 O" _. [! V
vItem.dwKind2 = pProp->dwItemKind2;
- m" F5 u% y+ c7 v/ }) V vItem.dwItemId = pItemElem->m_dwItemId;
) ]; F0 l+ o. ?, E/ @3 i vItem.nIndex = i;
) c/ h: S5 I7 U; E5 o }
# g- d; Z7 m( j! R B7 h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 A0 g& n; B1 ?6 j) P h2 |, u! T }
9 ~5 L- u7 V$ k3 t //////////////////////////////////////////////////////////////////////////
$ |+ K* P3 ^* J3 S) t# c sort(vItem.begin(),vItem.end());//排序+ ~' Z& ^5 p4 ~$ E+ Y$ t
//////////////////////////////////////////////////////////////////////////4 E* M- e8 |3 \' `
//交换
4 o0 [. @6 j: [( z# I( r for (size_t i=0;i<vItem.size();i++)
j- n" W. C* D. ` {
8 M- d9 f1 z* U; W* I5 ~2 G //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" w- T \- z& y" Y" K. @ pInvSort->Add(vItem.nIndex);6 Y" ^# H- M' F
}
$ h# v; y3 s" u9 N5 [ BYTE nDestPos = 0;0 ?+ m3 m4 ~6 ^
for (int i=0;i<MAX_INVENTORY;i++)
% @* h: V9 d3 K3 d+ ^ {
6 r, o& V+ i0 e* { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: y3 K7 v9 W5 n$ ?4 n: B" _# p9 H9 P
if (pItemElem)( ` o. q1 i; i$ p& U6 \4 e; B& e' C
{1 @. f) X4 }1 e7 j3 l& N" i2 c5 i
if (IsUsingItem(pItemElem))
/ N7 i% K. b( y: S" t$ o# ~: p {! A# U* X. Y5 i, R: W, P
//这个位置无法放9 Q8 {3 Y! v7 i
nDestPos++;( v% v. Q1 W& c. Z
}
4 b0 n% i3 S, G5 T& t5 G }
. b N# B; W( |# R! B0 D8 e9 Z N8 d BYTE nSrc = pInvSort->GetItemSrc(i);
% Z0 p) C+ G% P2 y, |( i# s x' ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ |+ D/ b% t, U) C" l- [3 P if (pItemElem)
4 P3 x ~" e/ t) B& b' m6 J$ [ {2 G+ g/ J" _9 m: G, _3 y# [
if (IsUsingItem(pItemElem))
7 r; b0 e8 ?; t |+ K: c8 J {
9 V5 h9 c4 n u' l- p( P //这个道具无法移动,跳过: y* d z* t. C Z/ e/ D
continue;8 V9 ], }8 u# B
}9 f3 m, d X/ q3 _* c% ]" C# O9 `9 l
}else{
: H# I9 M J; R: A //空位置 不用动5 ~9 ?" X2 Z4 C, V2 W
continue;
$ o/ `3 Y3 {- _+ F9 h' ] } e) g; @* a5 y1 U! G6 m
//////////////////////////////////////////////////////////////////////////. C, a0 L" |" w3 b4 g$ |
//开始移动3 }: ]; v7 {: G/ Y0 ^. p7 [
if (nSrc == nDestPos)* P8 y3 q" q1 G0 f1 f0 O
{% P$ `( P0 J. c& D
//原地不动2 L- i+ j& T! b8 d$ \
nDestPos++;
7 C4 Z( j/ |2 q0 e0 y4 B( W. u continue;. ?6 t( z3 L1 b, x
}
) h1 S3 ?" z, m7 N2 c. R pInvSort->MoveItem(i,nDestPos);4 W3 `" C6 @- E" K9 O5 a* `
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ @# M* s% c2 O" K2 [3 {" f Sleep(5);
8 F% H: ]; F0 D0 b //Error("移动 - %d->%d",nSrc,nDestPos);
- n( B8 R h7 m/ P nDestPos++; U9 u; v( w% ]$ C; Z3 H% q
}
; X: u g: H A8 h7 H. J" X //取第一个元素的信息: u* A P7 t+ M0 o
/*
" X4 C: Z8 Q" G3 l2 T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 i' b9 S) K' j+ o$ o3 F
{: ~; o$ u5 t4 ~; D4 \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. b) m+ p- O/ q+ c g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 ]1 ~" H0 ]) T* w0 ]7 k4 p }0 Z0 i/ @$ }* x- N% n o r! q
*/
5 g# T. V3 l b3 b- P9 K4 {" U //////////////////////////////////////////////////////////////////////////) x$ D! Q H' r% t1 ?
break;
) u, J; _: K" |# i; ~7 ~ }
$ W& R, D m) t: v+ P2 O1 y9 ] } 6 Q+ w6 ~4 M F4 k
}
! _! N* J4 \! i I; q) Lm_wndMenu.SetVisible(FALSE);
9 q9 U, q* o' |8 O# i
% [# ^1 ]! P8 l7 q--------------------------------------------------------------------------------------------------------
( @& m" w2 X1 _% u' n) L, Y" o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- T( k4 B* S6 s( H* d" M. j
{& ?* |4 d0 x7 O8 s* e
BaseMouseCursor();9 @; j2 l! P0 A/ |
}
' y# i1 O- B2 X在其下添加:
4 U5 a6 s" X& i' P1 E) f9 T# Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; L- v% z9 i$ x0 L2 N+ Z0 g7 ~{3 s2 d! p& u( E0 j4 P
m_wndMenu.DeleteAllMenu();" U8 ~/ t& F- X5 b5 L7 z: O; [
m_wndMenu.CreateMenu(this);/ J. N6 w8 B+ e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% A% H( T4 ` Q" T
5 J, h! f8 X6 V. Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 `: {$ r' u/ v) Z V3 i{
+ R+ w/ m8 c; W6 B; v+ J //P以上级别才可以删除所有道具: b7 }) o1 ~' n3 N9 x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 _ K/ |1 [( X% C5 w}
0 U! v' H$ o. j0 n- gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. W# b, ^- B9 Xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; L% K) D" Z8 K8 h' O# u; S3 u! |6 im_wndMenu.SetFocus();
. y! ^' B; a4 I0 S' L1 S! H0 N$ c' s) p}
( r( W |' z2 e2 n; \7 _! c+ a------------------------------------------------------------------------------------------------------------; @" K2 z; w( o1 B
*************************4 @7 N+ @5 s) l, x4 g
WndField.h文件) v& }5 {2 W g
*************************
& z2 s9 |4 s/ v% x搜索:BOOL m_bReport;
6 _" I+ j3 y U其后添加:- h1 ^. i/ X6 b8 l! o* v
CWndMenu m_wndMenu;
, V/ ` B$ S$ h$ W+ S& l" ]7 F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! ?" \: u- h( t5 Y H其后添加:
" v1 @. z7 b! k0 y) pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 y# U1 V9 ?8 i
, Y4 f: [/ f# S) P9 V5 D
% H7 G- A8 {& J# b |
|