|
|
源文件中_Interface文件夹下WndField.cpp文件- a& Q. C* W- K+ Z7 I5 J
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( d( ^6 R7 r7 ~7 O0 J: g
8 Q2 V; R4 b n: }
struct sItem$ l- K- f4 V* X! N0 s* p5 k
{- n$ \. x' D- Q+ `$ j
DWORD dwId;. a0 O. ^5 }" H% O
DWORD dwKind2;
; r) P3 V) N0 v3 oDWORD dwItemId;
& {7 {0 D- f' z/ n2 J& I2 {; DBYTE nIndex;
8 {7 [) [! I, y- R" HsItem(){- X3 C. i: c" t2 v/ f7 N& ]5 l$ r
dwId = dwKind2 = dwItemId = nIndex = 0;
- h. _$ N% `# h1 E2 T) P}5 r0 T; {" y% @$ J
bool operator < (const sItem p2)
5 B7 [' t; }+ g{- w9 Z# q4 @. |
if (dwKind2 == p2.dwKind2)
* x+ s' {. H) ]( E {
7 @$ x- t; _: s- s9 w3 _9 x return dwItemId < p2.dwItemId;: p! n1 q1 i ^. h; Y' `
}else{0 f+ K+ |( v: N! P& L
return dwKind2 < p2.dwKind2;/ } J( e4 ?. d5 b
}# q7 G' A4 g' F8 g& ^1 c! ^9 C3 D* y
}* L* i8 o y" f H T1 a
};; f5 ?. R9 T8 S5 J4 }; p7 k
class CInventorySort
7 h4 z3 m. n7 i% Z0 D{5 m1 ~( x$ c) }" q G9 V2 G9 u
public:
, R0 X2 a4 J( r7 g. SCInventorySort()) H/ w9 l7 T/ {" T
{7 `& K X* @( c2 }7 B
m_dwPos = 0;; k; Q1 v. Q9 z2 O# Z
} `0 i1 L# H+ P+ _) _
~CInventorySort(){}+ a, n' H) Q" t$ G7 t& c6 X: n
private:
' k7 q8 s2 Y7 C! V! J, `( O9 EsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* B* N' w; w6 J, {% X2 E JDWORD m_dwPos;% M/ J5 o' R8 u( v% ?
public:* d7 l9 d1 O: j) l& E1 J W2 |( E
void Add(BYTE nIndex)8 @4 V3 J. G: |/ G1 ~
{
9 ]7 Q& q6 E5 p8 ~. D if (m_dwPos >= MAX_INVENTORY)
6 j6 A6 t) L8 N% C9 ~ {
. ?% T" {, ]) c$ W. g, J. F2 ` return;
( ~$ f2 T- |% ~3 ^& G }8 v4 x+ L- ]2 B Y) k7 ~: _4 r& O( D& }
m_Item[m_dwPos].nIndex = nIndex;
% Y/ j$ M; H. D1 m6 H# [ m_Item[m_dwPos].dwId = m_dwPos;/ A# B" L% y8 ]2 J- j
m_dwPos++;
" a. V( ]; [) H* J: x. W0 C}/ d& e2 f8 U2 }" f/ {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 x9 F6 O. a: I- @( V! t( J9 X# Q{
) Q5 p. ~. K0 X6 F1 |1 E for (int i=0;i<MAX_INVENTORY;i++)/ D) z; @, J; R
{
+ }' G/ H2 d% M' V3 q if (m_Item.dwId == dwId)
% N; ]# \( q' s6 p {
R* \: z' P3 H8 e. A5 G6 b0 |* q return m_Item.nIndex;
9 I7 O' O W9 u& D; i+ l }* ^3 Z1 E) u" |6 j
}
; y4 w7 K6 ? R1 X! x return 255;
2 y5 C: C* H& n0 o}3 o2 P) V$ e; Z% G0 L# k7 s6 _9 c
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. I6 O, P. j9 b6 |{
. t& r9 O7 b6 F: L- o BYTE nTmp = 0;- @5 U0 B. f: g) E' k- f' C
bool bDest = false,bSrc = false;
( |2 I$ b! L( h7 Q' h for (int i=0;i<MAX_INVENTORY;i++)) j) o1 @2 n2 X$ `2 @/ l: @
{
( i: m# w1 k! V& v5 x3 l9 R if (dwSrcId == m_Item.dwId) a# H( d# @* r/ Q1 e$ C/ X
{
( ~* c* k+ Q- d6 }' v* D9 R //id相等 则 改变对应的dest和src5 ~2 V0 F" P/ n/ ?: u
nTmp = m_Item.nIndex;6 g9 i% M9 e+ L1 u+ ]2 R; c
m_Item.nIndex = dest;
0 ~. U5 c7 X) J# Q8 z, W7 G }: P' x3 B; _- K. D& v3 |. D* Y" p
}
+ V9 i2 I3 l$ M, B7 U# L; _2 G //临时数据保存完毕,交换开始7 i; m# b/ K- j+ h3 u4 h5 g
for (int i=0;i<MAX_INVENTORY;i++) K, I, e4 U8 A# T
{1 K- d+ k1 M b
if (dest == m_Item.nIndex)( y! O2 D$ r1 K2 X" C
{0 d6 i( P1 b% I
//id相等 则 改变对应的dest和src
3 i% a, E6 E( H: v) X* q* p5 y- T( ?3 [ m_Item.nIndex = nTmp;; c; u0 g Z2 Q+ c3 p+ I# e' [1 s
}: m" |8 G, u. t' A9 X6 n
}
( Z& T8 P: @+ L! X) v& @" }}
2 y' ?- V- q5 J! Y};% s1 l0 z' S; E+ Q
-------------------------------------------------------------------------
& o" z# X' b% t4 s1 Q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 n0 [7 T# f) ? `- H( N( Z( A
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 {( x0 V: P/ N1 n# w: q% F
紧靠其上添加:/ ~6 F: ^/ q9 d/ q V7 r3 E
if( pWndBase == &m_wndMenu )2 n- q( `1 Q. n0 m$ l% @% f
{
3 v+ @2 s' \" X$ p, G switch( nID )
+ c8 u ~- P% ]' ~ {
5 Q6 @6 `8 q4 x- _% N6 s case 2:
( X- a' {* s/ {( |( S( u8 a {) ?- c; V& W; k. n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* @; F$ a* K- w* h8 }5 O, f1 w$ l6 f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. K3 p6 Y) b$ w6 Y {
* Y; E7 C% \% ? break;4 k4 j ~) m9 c
}
% n7 S5 N k" [( `: f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 J6 S& f8 \& d I7 R
{
/ a7 q6 _) x! ?7 ]8 U8 r8 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 j U3 M/ x! s6 l! J" x' N9 `) c
if( !pItemElem )
& J; f& H" u* I4 X! j0 @5 `6 `. F continue;6 M5 j/ ~; }/ a( b
if(pItemElem->GetExtra() > 0)
4 `: \5 f2 m2 y" ?! B, N5 Q4 Z continue;
P; _+ R* {7 g, T$ @! V if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% K! T. y o9 s/ y8 m& g continue;( o8 J, S: Z, n. ~1 n* ]6 c* n
if( g_pPlayer->IsUsing( pItemElem ) )
; J5 y6 ~ e: M$ E$ A continue;
: |1 w6 h/ K& ?# y" N+ H if( pItemElem->IsUndestructable() == TRUE )0 L3 G# }2 ~ Z0 Y! a- a
{. K: ?+ e; d! Q/ }# U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 Z+ L# g- [ d9 f% { J9 T continue;0 p6 R6 {, f5 v% J
}
& A3 X5 i1 d* k U% i6 s; y2 K g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 I. b6 }& w8 l. y) P/ y
}, E9 I1 g6 l; ~# \: h/ O/ I
break;
( I/ }' T# R$ \% C# e }
6 ^7 w; v2 S C) |* X case 1:
* S9 _4 l- z4 m {
7 j5 @( h. e# l4 h) l //整理背包
3 k* V Q/ a3 t! q2 U; y //////////////////////////////////////////////////////////////////////////
; t/ L/ Z) @3 q; z3 z1 f4 M //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" D( p' b. r5 Q) S3 G //////////////////////////////////////////////////////////////////////////
; Y- r& p* z5 _4 c9 g" q( K //////////////////////////////////////////////////////////////////////////0 W: L- {! p% l: X7 w
CInventorySort* pInvSort = new CInventorySort;
6 Y8 O- b% y# W vector <sItem> vItem;# V+ J2 P/ S/ F y
vItem.resize(MAX_INVENTORY);//初始化大小
5 x9 ^" t) L" F& ` //////////////////////////////////////////////////////////////////////////$ u/ U( R9 q& m2 ?% E0 e
//填充数据
E, g1 K7 r( g for (int i=0;i<MAX_INVENTORY;i++)) j3 L Y% @* Z: s
{
- ]+ N F4 `1 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Y' I2 }$ d1 p9 G* L if (!pItemElem)
B$ }* s% e+ p/ ?7 z( n2 o {" f7 _$ x a# J, \6 u
vItem.dwKind2 = 0xffffffff;1 x! ]. S- O- p2 H
vItem.dwItemId = 0xffffffff;
$ M" o8 a5 w K( O4 q, d vItem.nIndex = i;2 V6 F1 K4 f+ X# y. `
}else {, x& k% m P0 a- [" y
ItemProp* pProp = pItemElem->GetProp();
$ S1 F( U0 b8 ?2 i9 m& R) ~ vItem.dwKind2 = pProp->dwItemKind2;
' m2 O5 x; {3 H" x2 a4 S' Y; F5 p7 p vItem.dwItemId = pItemElem->m_dwItemId;
. [* f3 H% x# s) B3 G! `6 T vItem.nIndex = i;+ m( s! o3 P$ S2 i- E" ]
}
5 B' K: [ C) F/ o7 d5 s7 t( q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- F4 r [& t9 y& g7 _ }
$ L$ Z5 L8 r: j& R //////////////////////////////////////////////////////////////////////////$ N- x; S* M. k, w. v3 l
sort(vItem.begin(),vItem.end());//排序3 E( s7 f2 X( O
//////////////////////////////////////////////////////////////////////////, b! t: E& d) V; b1 t3 |
//交换
0 k/ m$ q2 a$ \$ X; H( Y/ I8 H for (size_t i=0;i<vItem.size();i++)0 Z/ t% L$ s4 o2 j4 S# E* X
{% \* i* K+ a3 i# M' p& ~5 f/ `
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 z+ H+ F. C3 Z8 n
pInvSort->Add(vItem.nIndex);
B5 R6 H/ \7 S$ h2 Q% r! o8 ~# w }
8 W6 n* D3 Z- M) g) Q BYTE nDestPos = 0;
6 @- N$ W' ^- K7 x7 a2 Q for (int i=0;i<MAX_INVENTORY;i++)5 @5 K# Y7 _9 {- I. v
{' m$ X( h' O- K. B$ {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 m& \& A+ T$ W: O4 \' W
if (pItemElem)
/ o/ p! X: H6 @4 @* g' f9 I) P, d% { {
! l& j$ r9 [: o if (IsUsingItem(pItemElem))$ G0 U6 N+ \0 h/ q' F) p; Y0 Q
{1 `: n- w" F% u8 ]( Z
//这个位置无法放
& C. Q, t# L! H% W% L! X nDestPos++;" O' k( @$ @* Q# W$ c1 V q6 k
}; E! c* P4 b1 b; P2 a
}
, T) V+ D8 }# T2 E O# } BYTE nSrc = pInvSort->GetItemSrc(i);
3 h( |* u% v# b# O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 c; w; {1 m6 C, C* [0 e if (pItemElem)
4 `! H% u7 s8 ]6 l {, `$ K' n( J/ X# s5 X
if (IsUsingItem(pItemElem))- b% z% g2 _9 W4 }, {# D1 ^5 U
{
[% {. M3 k0 S3 S8 S' q //这个道具无法移动,跳过
! o8 y1 Z) p7 W+ u continue;$ ~5 V8 C q4 }/ [
}7 H! j% _ j8 Q7 ?
}else{
# i: Z' n/ V8 [+ A4 e8 ? //空位置 不用动$ w a9 H: l( i: f
continue;
M5 c% T! J/ t" f2 @0 d }
6 K# g8 w) L+ {: o2 Y4 e //////////////////////////////////////////////////////////////////////////
$ J: m8 e. w" y- L+ j$ Z' z, B //开始移动& t, z. Z4 T1 R
if (nSrc == nDestPos)0 l5 L N6 d- q; u& b8 b7 O
{4 n; {- k6 Z' X1 D( Z+ b
//原地不动
$ K4 B" r% E6 _7 O nDestPos++;2 q. W+ G* d/ y$ q u/ t
continue;$ P8 x3 W8 Q Q
}
/ g% h) D& X8 a4 |8 _ a pInvSort->MoveItem(i,nDestPos);2 \7 D8 T/ Y7 p/ A- s4 f& I& h3 X( K; R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 n R h) y0 y% T
Sleep(5); ^" o+ M2 j8 h+ D% w% t4 N
//Error("移动 - %d->%d",nSrc,nDestPos);, t$ L* {2 c8 S5 V7 S8 g9 x
nDestPos++;
$ x4 |6 g$ _+ M3 o+ V$ a; f }+ @& }) ]0 H) z8 e. y, j- C# K
//取第一个元素的信息( H. K d' D" I
/*
6 m) \1 H1 Z* s2 @3 |4 O if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): L; [1 Q, ^5 G% S
{8 A& C( A O0 ^5 j1 G. t
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ d: W/ \' S7 ?. A: h) p8 M
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, }+ q. X }, T8 O9 l9 V! t9 z7 h3 H
}- L! e% [* y4 t+ y
*/
1 B2 Q, H( n7 F2 l. [! j //////////////////////////////////////////////////////////////////////////: r! Y; H; [ `
break;
" j9 S3 m! t# V7 X' }% ^/ L# n! | }7 |; W2 }1 D! u9 x. D6 ?
} * h/ k5 r* x6 a( i) @7 q4 |
}
5 p! g' u6 o$ p: L% |/ }8 u( _m_wndMenu.SetVisible(FALSE);. E& a( U Z, E$ I4 \
3 V; o/ z/ ?9 x3 u
--------------------------------------------------------------------------------------------------------2 ?; s8 j( I) y: B8 D4 W+ X( [ ?: s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 M( e( d+ h# B8 k* ]4 _1 Q+ B{
+ m" F+ I9 l+ _* U& l4 k" _BaseMouseCursor();
/ q7 Y1 a* A- i1 k0 l' M}. } b1 M: a$ @% w+ R1 y4 [1 G
在其下添加:
% @- n4 F! z2 h2 dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ N4 V% M* [& t4 W{
! q% W2 w t# X0 J- Cm_wndMenu.DeleteAllMenu();
2 ^7 N- V* v6 W2 j, n U% I# im_wndMenu.CreateMenu(this);
% V% W9 @9 s1 \1 km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' ~! k% \( [. K2 E
* H7 F1 z$ D, s, r8 P' [! \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 _7 ~# \5 z9 ?. z0 f! D
{1 N9 x, c( U% `
//P以上级别才可以删除所有道具1 {" v E6 f0 f; g8 Q& a# R( M
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% k" T4 f9 m0 Q9 U; e9 {1 m}) s6 X2 Y( q* [6 B- D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# h% V7 V- D6 `" ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. y% |! V; B. A- C: `m_wndMenu.SetFocus();
( m& O/ j! H; ]6 Z" B- ]}% p; }3 e8 A' g$ G7 [, k0 ?8 o' B1 p- w
------------------------------------------------------------------------------------------------------------' `3 h4 g# ]# \; l+ _+ E2 ~
*************************
8 y& h! F9 E1 x# MWndField.h文件% m- g7 v6 N9 m$ e4 H/ x! S6 ^1 P: n
*************************
- }# `1 m2 Z# j( i0 E8 e0 `搜索:BOOL m_bReport;
& _5 s5 a R# K其后添加:' q2 ~+ i7 ]4 X! V& s4 r
CWndMenu m_wndMenu;
4 Y: M7 Q$ p D0 J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 c+ l* x5 \* K: _3 u
其后添加:
9 N7 c& G4 D* h V8 Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 q# ]/ N7 F0 c: g& y O! X/ a/ b6 w+ J
* T2 b {5 M3 a
|
|