|
|
源文件中_Interface文件夹下WndField.cpp文件5 q5 d4 r4 G* m" d' N( b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
\3 X2 O$ u; K" v$ a- l1 z% f1 V* ]) f( m# [" b' g$ b
struct sItem# x' Q" ^' C3 K2 `, A" K: @
{- \$ @; R: ~% Y" w- Z, r. D& i
DWORD dwId;1 W3 ~4 k3 E u1 Z7 Q1 Y7 O+ L# r
DWORD dwKind2;
% [+ L {! H6 w. Z/ v/ U6 GDWORD dwItemId;
# T8 {+ q* d% LBYTE nIndex;4 h: H" P/ R$ h
sItem(){
1 I. s# G- O( R b: A: c: w/ y) Y dwId = dwKind2 = dwItemId = nIndex = 0;
. l, ~$ j, q! o, e( ?) F( l! c$ m! D}
& ~0 e/ K/ Z( B6 Z* ?" Y( v8 L' Fbool operator < (const sItem p2)5 V, A& i' w4 p* t8 k
{" [& j" N5 E. O6 S/ h/ {1 P4 z8 g, x
if (dwKind2 == p2.dwKind2), d/ Z" k& y+ P" ]3 a
{
1 f! I0 }/ g1 I return dwItemId < p2.dwItemId;
5 Q6 P( Y) x6 {$ ]5 s- G& O& f }else{8 P m ]9 \6 W; I2 [* U$ H
return dwKind2 < p2.dwKind2;# f! [' O# E0 Q, R! j
}) b4 a. R/ z/ v! F3 Q& t' P/ M T( v
}
, I' B9 E4 s# `' s8 t3 v( w" D. D* d};1 I4 Z- ]7 s D2 v6 ?+ D, t; x
class CInventorySort
! w$ B! M. v. n: p/ o) w{: Y; k3 K* u0 z- g" L
public:* y! }* a6 y# Q& A/ y8 ?
CInventorySort()* d& f0 \* k. ]. x( j
{: ~# D% a# @+ H' L* A
m_dwPos = 0;
* d9 B* w! T) s4 h- t}
1 N9 z7 p. k* h* [, U6 X4 }8 z9 v~CInventorySort(){}
4 V! J+ [( z* wprivate:
( {1 K, K" i4 D) w0 w+ ^( T5 {sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( {) s/ |, I9 \3 G" K' ]2 {4 ]
DWORD m_dwPos;$ m& s; y5 E. h9 l
public:* A* M: I. \* d* m; N
void Add(BYTE nIndex)2 F1 s4 ^. ~ A U' h& [
{- e& d$ u. r- A( y) Z% `7 X. W
if (m_dwPos >= MAX_INVENTORY)0 K/ T7 m7 C+ {
{4 \0 ^; u8 `: }7 @$ K Q5 l
return;9 p& T% S5 j' I( K) O2 r$ R
}
. ~% o. M6 G* M) }, S" [9 p( U, J m_Item[m_dwPos].nIndex = nIndex;8 ^7 I7 r3 r: ~
m_Item[m_dwPos].dwId = m_dwPos;: [/ I: v1 C0 I3 D0 _# w
m_dwPos++;
) D" @' [3 b' n( T3 q; [}( Q$ F3 K% ^+ X8 r
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 H8 v$ ~" F1 |$ f3 a+ e6 k8 y6 C
{# o1 _/ p3 a3 Q! \+ C& `
for (int i=0;i<MAX_INVENTORY;i++)4 E1 x3 H- o1 y" j8 u8 }& C& W; a
{8 w* ~6 q' p5 h7 @& H3 t
if (m_Item.dwId == dwId)9 K. q4 r$ x& Q, E
{
# _) B) ?: _ |" M( N/ y return m_Item.nIndex;9 O& J, v2 e# X6 P0 L! A6 g
}
3 r0 m: ]# {7 g; W3 ` }
1 b( t7 b' P1 o9 ]5 ^9 V return 255;
+ }) P, c( H8 l, Q8 G}
& p+ E, H. u5 W, G! P5 Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 x) n1 X$ L& i
{; u3 a, g4 h( J5 [: O& S
BYTE nTmp = 0;& @; x% i3 y. _/ S& n4 W
bool bDest = false,bSrc = false;1 c% ^' F! j% u9 O ?: [
for (int i=0;i<MAX_INVENTORY;i++)& Q @9 @! \7 X0 H. K3 W, d) L
{
6 w; n# t% H/ [; \: v if (dwSrcId == m_Item.dwId)
& `* f: \$ v) I) { {. h2 t" d6 N% Z; A
//id相等 则 改变对应的dest和src
, U" G* a, `4 c, T nTmp = m_Item.nIndex;, T; D! k9 @2 o: ~
m_Item.nIndex = dest;
7 L/ P/ M2 n: _. ~/ b) C% X! X }
- }7 z& l3 h2 t! _) f& ` }
; y+ f3 f( a, S1 | //临时数据保存完毕,交换开始
7 D- B3 m* Z0 A0 [) R2 I for (int i=0;i<MAX_INVENTORY;i++)* a& W6 J8 \2 r5 c
{! n1 C6 W. K9 ?8 w3 r
if (dest == m_Item.nIndex)
, r- c/ o4 _4 f v: p( v; j! | {
9 X6 C- M3 M" h1 b) u //id相等 则 改变对应的dest和src4 c' L8 A |0 A0 c9 _
m_Item.nIndex = nTmp;9 N3 u3 J* X+ ]7 F, g
}
6 t( k! E4 A. H( g# G) N }' S' _/ f2 Q" @6 g) N' U! s% ?
}" E) E# O; H2 Z3 t1 t/ J
};: X, N, t# ^2 ^2 o$ l$ w+ j
-------------------------------------------------------------------------/ y8 R+ z; A+ W# J* N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 F: z( n9 s- n: k7 r, D/ T/ ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- }+ K# G% `1 T2 g3 O- V紧靠其上添加:
1 a$ {) p7 G8 i2 G8 Vif( pWndBase == &m_wndMenu )
t* X8 J& k7 g2 V2 l! W{! ?+ U/ m; `/ ]
switch( nID )
* a$ t4 e" |' v; o {
7 _' `; b& T# T/ o& k case 2:
2 z- j- u, I1 E, u9 F, f" d0 i3 q, i {
1 ]/ V6 N% Z: d( C" { //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 M2 ^2 t$ N0 j+ w4 `9 C* y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 [) w& _) v* ?
{
7 `- ?+ `4 H0 w* I2 X4 F9 b* l! q break;- v* z9 ^( n, Q
}3 l1 ^, Q$ u- |9 o! @
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' C( ~0 T) w0 K) w# W {
6 s! }, V7 t0 j+ R7 U% @8 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 M7 n. N) G. I) A
if( !pItemElem )
/ [( c0 h1 N7 @+ H: m continue;
; q3 `2 h1 D" C8 J6 |+ ^ R, R if(pItemElem->GetExtra() > 0)6 u( r; {* Z( Q) g G! J* \5 ~2 v. x
continue;7 Y5 n. M; K: s% g1 u
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 F2 o' O* q: B3 \% } continue;/ s0 ^" [/ U1 h$ a" I, V3 ^
if( g_pPlayer->IsUsing( pItemElem ) )
$ G+ Q& V P4 `5 O$ R' ~ continue;
8 O4 @. B: L9 P2 ^' p r" z% J if( pItemElem->IsUndestructable() == TRUE )
+ H% x5 c2 J/ d* y! t0 Z {) u9 ^1 B# r' O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% o" I: t( g" F* O* Q3 s continue;
3 B) M7 O3 |5 e& j! D1 m; C1 L( ~$ Z }1 O; B; F, `( w' U+ k) }* [# R" J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 H' `2 Q1 H8 E8 v; {4 m! C }
' O6 `3 P3 }& Q. f( f0 p break;8 M7 Z* Z- |$ |7 N3 u5 ^) V4 ^* a
}1 y4 X2 ^9 {6 l! [/ E' E9 Q
case 1:
% c1 \4 m4 p2 I* y. r {
, D" ?1 E( r6 `. x( d% U4 Y, }; ^ //整理背包
* }* [$ D' S! o, m/ i4 k C //////////////////////////////////////////////////////////////////////////0 |& I+ d2 k( G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 n( `6 [5 ] f" ]
//////////////////////////////////////////////////////////////////////////
; R+ X- c7 a, M( l //////////////////////////////////////////////////////////////////////////
* j6 m: t1 w+ {7 a CInventorySort* pInvSort = new CInventorySort;
3 Q3 t9 N% ]* u4 I0 P4 k8 v& E1 t+ C vector <sItem> vItem;
3 r4 \: x; T6 z+ f vItem.resize(MAX_INVENTORY);//初始化大小6 h0 p5 A0 O+ u# `( H) Z
//////////////////////////////////////////////////////////////////////////
6 n/ v, ~- X+ c# ?: t //填充数据
/ M) Q' }! N& U( r for (int i=0;i<MAX_INVENTORY;i++)
?- H( f: G5 S; { {/ z; C. w3 Z+ S/ N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' e3 Y5 C) M8 V) B. [" N if (!pItemElem)7 D% h" @: Z8 H* K: {+ ]
{
X/ V% |; {4 E5 s x vItem.dwKind2 = 0xffffffff;
0 o2 M3 T+ Y3 [& t. D vItem.dwItemId = 0xffffffff;3 ?* D( Z7 r( g$ E6 C$ X! B
vItem.nIndex = i;& H" K& i7 ^1 `( U+ T: F' Z# ?. N$ V
}else {
$ r5 |7 m r9 |6 Q$ e5 I, i ItemProp* pProp = pItemElem->GetProp();
( E$ C& p) T7 y; H4 c vItem.dwKind2 = pProp->dwItemKind2;
$ Q- K) w2 |9 j0 R* C) V3 M% } vItem.dwItemId = pItemElem->m_dwItemId;
% ^5 E% O8 V, G! ^. d+ U3 c: H vItem.nIndex = i;9 k% X# V1 w. f Z- M k" l" G
}1 l, c# p6 I. W$ S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 Q- D7 b z( l }
( T% B `7 b$ \/ J% F //////////////////////////////////////////////////////////////////////////: n7 |! C. X0 x; D X1 ~
sort(vItem.begin(),vItem.end());//排序
, G( @& Q4 Y0 D) G' }5 j //////////////////////////////////////////////////////////////////////////! ?3 e2 s3 B6 {7 K {% ?: U" n
//交换3 M( v7 y3 |) G& N0 U4 X
for (size_t i=0;i<vItem.size();i++)
2 T) ^ Q" y( ~+ L7 x* v7 Z+ o7 ?6 _ {
6 ~+ t, ?* |0 ^0 K //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: T% r0 }7 `- @6 y" k# R pInvSort->Add(vItem.nIndex);
2 e1 d$ z2 X7 I9 l; c }8 A6 m% q% S1 |& V+ e% u; g2 C
BYTE nDestPos = 0;
% i! D w! X' W, @; }* H& V: j for (int i=0;i<MAX_INVENTORY;i++)
+ T9 e; u$ Z2 o) T {! l$ x' v- W6 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: |" \( J" V/ o Z6 ^* ^$ i if (pItemElem)
( ?9 q2 [& Q7 O- r/ { {* w, k4 e/ m( L% z0 L) C. `2 K
if (IsUsingItem(pItemElem))& p" a& D: v0 f! ?: v& n8 b
{
$ [$ v) f4 G' n8 K5 d //这个位置无法放) E0 {* j; j( C% y7 B8 D8 g1 h9 n; H: n
nDestPos++;
7 d/ ]4 c8 q+ a) H, D0 y% G1 u1 G }
% M- r: u9 z. b& ^ d) C }
+ n1 ^$ ?* \ }& J& L" P BYTE nSrc = pInvSort->GetItemSrc(i);
' V& O5 R" z& a" G+ A9 q$ t/ l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
`" Y$ ~6 z: @3 O( [ if (pItemElem)' c3 c. q$ a3 w- F
{
5 x: i" A' S M' G f7 T2 i9 I8 q if (IsUsingItem(pItemElem))
# q& \ B+ x# K# e! } {. z( D9 `( X( Q* X( }
//这个道具无法移动,跳过
2 `& b1 V: i" ?+ h7 h# l0 a: @. j6 m4 y continue;0 P7 ?! a5 F+ p5 k b
}
* u+ ^! _: N4 _+ B9 d }else{
% f7 O: D& E5 s //空位置 不用动
$ Z5 a, l) J( c6 p2 ]& l continue;$ l$ M3 I2 U1 x! ?
}& K8 {6 N) ^7 ~! n% |: `6 [- ]
//////////////////////////////////////////////////////////////////////////
( U) `! A- J. l, U) m9 v7 a& @ //开始移动
1 Y1 B. S( W+ p% ]( ]9 D% x if (nSrc == nDestPos)$ x: h$ @/ F/ ]& R9 _& T5 J
{/ c) w, v1 Q/ @
//原地不动5 _" w; }* C) q- x1 n
nDestPos++;
7 c5 w: N1 s% f continue;
# Q( V6 @; c8 x( [8 e# T; q5 W }3 @0 z7 w! l2 p# ?9 p* N
pInvSort->MoveItem(i,nDestPos);
( m' S& K: d! i8 `" p P g_DPlay.SendMoveItem(0,nSrc,nDestPos);, K8 Y N; U2 F# F; }0 l" ^
Sleep(5);
0 Y9 ~5 _3 |, n# c/ { //Error("移动 - %d->%d",nSrc,nDestPos);* z) \& c$ W, G! u& o8 W
nDestPos++;
7 I* [, d+ {$ T }
p' a1 R* Z2 w( g //取第一个元素的信息
. m: q5 P3 R1 q q' z /*6 f5 Q$ A/ J1 W6 u% t$ _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& C9 j. j% t& ^. m6 {0 f
{
' ]# r0 V! Y( P( a8 k, s Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! y1 t B: }1 k% a- P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# B5 r: I& H; k, \5 P( C }
5 N n8 E& A/ }4 h */7 v; V6 u3 w5 H" u
//////////////////////////////////////////////////////////////////////////8 v8 g1 r w$ \: C- Y
break;
1 J) R1 V* v. B' Z9 I; o }8 D) Z: N6 @2 H/ _
}
- g5 e* e% A2 u+ O a$ u}) H' f+ u$ Z8 R4 @
m_wndMenu.SetVisible(FALSE);5 n& Y: m5 F% Q$ y! u
& z9 G2 W w7 ]) U$ m3 r
--------------------------------------------------------------------------------------------------------& @* R2 c3 a/ r7 Q* {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( i: X3 q$ ^- T' z9 ?2 I6 B9 w z
{
' Q4 h7 |% R& CBaseMouseCursor();3 ~, `+ x& ~ |: Q' O- r6 }
}7 k$ \3 I! x5 V& {% Q9 j1 B% I
在其下添加:& v+ k: ]/ }% z, R3 t2 P
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 ` s- t; c4 n8 r{
. d3 M- r* X8 @4 L) C; n( Vm_wndMenu.DeleteAllMenu();4 R8 o! G# e7 ]# c5 ^) |
m_wndMenu.CreateMenu(this);2 H3 H$ r- c: Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 m1 p: ? S2 @6 m K$ v
) S8 \0 R$ {2 ] ?5 u' mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ A% r) D2 S4 C% ?% O& W
{2 K! p3 A5 o# V/ l: S6 A% e! k3 z ^
//P以上级别才可以删除所有道具
" B& s0 l% q# P8 o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 R6 ^3 F/ p2 ~, D4 _; _; v
}% P" ~/ W3 N& I, H- q; u: B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 ]) @" u! m+ ^) Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 H) r8 j3 Z6 V1 o* q, nm_wndMenu.SetFocus();
- M/ \1 d7 i& H, z8 _' p}$ O$ i; ?: ~- [4 E6 F
------------------------------------------------------------------------------------------------------------+ Q) K8 M% ]6 ~( [+ J. C6 d
*************************
' Y: [ }% E! o, T9 LWndField.h文件; {9 ]8 r* _, y; N, [) m
************************** L/ l; y% U3 W7 U$ P. ~- ~. q, i
搜索:BOOL m_bReport;: o# O2 ^* t: N- Q5 c- Z6 `
其后添加:% Z( Q4 w. |+ v* R% q
CWndMenu m_wndMenu;5 h) I6 p* i @! k( ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 M( X5 b% P4 ?$ W [3 z3 N2 b3 w
其后添加:
# K/ `# O" _# S- yvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ S! f3 h; x$ F7 ?/ D
& I: _2 ^, R5 `9 W% ]
% s* f* w, i2 r% Y |
|