|
|
源文件中_Interface文件夹下WndField.cpp文件/ G, X3 m( I& i: D4 V$ Q5 x5 u6 E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) Z* {' ~8 { Y: n/ d' @0 }1 e
' c/ Q! K/ d8 S+ Dstruct sItem% z/ M m' u4 v/ C. Y6 d% S# O
{; E- Q: }! y8 ?+ y( r0 { P
DWORD dwId;
& B, \! P; N- e, JDWORD dwKind2;% i& I+ A! A) u0 I: R' s/ u6 |. Y/ {
DWORD dwItemId;$ F! F b; i8 X8 f$ J9 _
BYTE nIndex;5 Q- O0 u+ U9 k7 @; _: q! g
sItem(){( f" B$ z( I1 {0 ~! K
dwId = dwKind2 = dwItemId = nIndex = 0;
. e" c: A3 a1 b) t4 {7 u}
6 K. c8 w* B1 g6 j/ u( V- B/ Qbool operator < (const sItem p2)
0 D, D( _8 P$ q$ [1 ^7 Z{. d2 N2 B0 l% P; ^# e3 t8 F0 ?6 I' G
if (dwKind2 == p2.dwKind2)
$ R( z0 r6 _* P- j {
+ O2 ]5 q4 O) |! j* E5 I" `& I return dwItemId < p2.dwItemId;: O8 {' A! Z# M& m, K
}else{
6 W' s* \1 ]+ U& l return dwKind2 < p2.dwKind2;
) X: }, w; N M% H5 T' R; U8 T }
* t; B! M I# [0 x}
+ x; @9 ]! U2 X+ c};3 M; s. F0 }' {$ R
class CInventorySort
4 ^8 l' c* x% y3 e{) @9 |. b3 I; t" u
public:+ D3 o0 P2 A! M" e: ?3 _
CInventorySort()
# T F; m1 y0 ~, K$ ?{
5 v$ i5 v$ D3 r% J7 Y m_dwPos = 0;9 o0 e) h+ F' T/ _$ t4 y) x
}
4 J$ g4 H0 v* ]9 {~CInventorySort(){}
7 a9 B' B( v3 Y" |( Fprivate:
9 m" K% x( q) ]% asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( K' w8 |8 f- m4 M! ?: hDWORD m_dwPos;3 ?% i: O' ]* p; C
public:
! U5 ~3 Y: J' n" j% Z( nvoid Add(BYTE nIndex)
' D% I' w w6 l' ^# W% q( C2 a6 o8 c{
5 ~- j8 m7 A: e if (m_dwPos >= MAX_INVENTORY)& K. C) \3 H, _& B
{4 n4 n5 l( k) \$ ~
return;5 _$ k- z# P5 ?0 E
}% b) M" f5 k6 y6 B, o1 d- _+ {
m_Item[m_dwPos].nIndex = nIndex;
) l/ m' u, l3 f% M: S: m0 q. h m_Item[m_dwPos].dwId = m_dwPos;
$ S- O! C+ z& q ?- _ m_dwPos++;
( u" }# @! q1 c}5 W( E+ a4 K" w6 W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 ~: b) [8 c- w( B{1 L5 @! M; @1 |( N4 E$ I& c; a4 W
for (int i=0;i<MAX_INVENTORY;i++)1 `) G/ W( S5 @8 O
{
6 t" W7 p4 W- G! I6 W: ]+ x if (m_Item.dwId == dwId)
* D+ y+ x+ e5 W) ^+ P2 j, |2 q% A {# o3 ~) z$ ]) K& y" K
return m_Item.nIndex;9 M# [1 u* Q- }5 q
}$ G* B$ h4 H- j; ]$ x2 F* g
}
. n/ @: T" N/ I5 ` return 255;: V8 T* r1 u4 P) ^
}- y/ e6 m# @, f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# W U3 C+ R* f0 ]9 E& p, a
{% s! f# P \" K$ W' ], L- h
BYTE nTmp = 0;
+ J! {* a6 t3 w/ j( U: b! m6 | bool bDest = false,bSrc = false;7 m: Q& Q' ?4 D9 Q* W
for (int i=0;i<MAX_INVENTORY;i++)
6 K7 C5 o, {8 ^8 \& g0 Z5 t4 w& W {
2 O) z4 G0 _, E% ?% f3 } if (dwSrcId == m_Item.dwId): R% C0 d, s0 p0 p, X# X* r
{+ k6 K/ S6 p ^# Q
//id相等 则 改变对应的dest和src
7 ]. I7 V; ?( ^$ r! Z. ? nTmp = m_Item.nIndex;' F5 x- z# U. u6 y1 A- c
m_Item.nIndex = dest;
) |- A0 R& W" P3 V' @+ Q2 m }
7 Z5 ` h! [+ t4 \. G$ ~% s! I( Z }* e& \0 q4 z$ ~3 Y* ?4 _$ m/ J
//临时数据保存完毕,交换开始
) B Y' f3 O. B. I/ p) [* ~) q for (int i=0;i<MAX_INVENTORY;i++)
, {) c- [9 m p- r3 S {6 i; {9 s7 h; ]( M# Z) L7 q
if (dest == m_Item.nIndex). _! Y1 P4 T- t. I# k
{
4 }7 a ^! A9 | //id相等 则 改变对应的dest和src1 o5 t* c; F3 D% m9 G4 C; n& {* d
m_Item.nIndex = nTmp;
/ E* ?( {( N9 d, B }# Q4 E" g: `; H. G6 ^& i
}
2 I2 d% r, I# V+ e}- A: H; e# w/ i
};6 C- `- s, v1 e- D4 l
-------------------------------------------------------------------------
) A: a7 d: M; B( }9 N依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 Z/ R T4 F4 }2 a& `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* J' |3 ~' D1 J! W/ g) A" |紧靠其上添加:
3 T/ y& P; u# B$ D3 {if( pWndBase == &m_wndMenu )
0 F1 I2 V- E# s B Q{
! r3 s/ M' f; P3 G6 ]3 K; b switch( nID )
4 a% c1 B. u7 }' Y1 Z, M# V {& b( \9 O, [7 Q% U
case 2:8 ]* A3 b; R3 t/ o* X- j
{3 i9 \4 x. |( D6 o) A' O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! \+ ]9 Z5 {3 }7 D, r: s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( f0 F3 m, y- Y9 K/ C/ P# o# U6 V {
: R" T" b# O+ `& G' T break;
, }2 l/ W2 Y" N9 g2 ~ }
0 t+ z" k1 T+ H5 ^4 k for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" O* T: T, N( {1 Q& W {
6 ` \9 Y+ [/ {6 @: Y& A/ P) e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% c- P+ ^( E# E) Q" @ if( !pItemElem )
- C6 i. a8 R$ w- t; x2 P continue;
, X9 B7 f1 u. J if(pItemElem->GetExtra() > 0)$ \" u3 \9 ?9 Z
continue;
5 A/ c3 c3 _7 n8 f- q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 a- L5 F+ ?$ Q9 {" L continue;. |: z" @- ~. A" }; N- q$ L2 a' U
if( g_pPlayer->IsUsing( pItemElem ) )( x v2 ~ s( u% S! m
continue;
4 ^" D8 A! b2 V$ Z3 g if( pItemElem->IsUndestructable() == TRUE )
- _( Q' u* ~! K: B. b( x. U/ G" o; K6 Q {6 z5 ?( K% w, ]- n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. T5 E5 T% t" f+ L ? continue;4 c6 d; R8 R& Q4 [& p8 W+ s6 J
}) w q: A- k5 ~/ F" ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( W5 {% `" k3 y( z8 U; u }
- ^/ O0 B/ x; B8 k" y5 F, Z5 M, S break;$ A6 X% T9 b) w) e0 ^) f7 _" F
}3 @% h" s! s* q; T; f5 o$ r
case 1:
% y; B" K( j S* S' V) a5 [; A {
% G! G8 G( b$ O$ Z' L //整理背包
8 V# _* h$ D. H //////////////////////////////////////////////////////////////////////////
: V$ r1 o$ I7 ~$ s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ t4 l8 g1 b- I9 e //////////////////////////////////////////////////////////////////////////
6 A" a( k) m, N0 P2 d8 } //////////////////////////////////////////////////////////////////////////) a9 x# E; H N$ h# I
CInventorySort* pInvSort = new CInventorySort;
$ {5 k/ M C: O0 v9 U vector <sItem> vItem; P2 K% O$ U8 g0 a
vItem.resize(MAX_INVENTORY);//初始化大小
( N* b( ~4 ?# s0 X' _ //////////////////////////////////////////////////////////////////////////' p/ c7 c( c- ]0 M7 E& a
//填充数据
2 z! O% \* \5 K+ ` for (int i=0;i<MAX_INVENTORY;i++)3 C% R5 k$ i G
{
7 y4 f& ? m: ]: f* j( o" h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# ]' Z) q. h% h7 P0 H. k( s& \ if (!pItemElem)
1 ^9 b$ q( N" H/ v0 }6 s {
$ v, W% ^* E, t; u vItem.dwKind2 = 0xffffffff;; M4 n/ s2 q6 X" r
vItem.dwItemId = 0xffffffff;9 \" i8 u. A s% Q; F
vItem.nIndex = i;/ e. m# t+ J7 p) U
}else {: L6 v) _( J4 s9 b
ItemProp* pProp = pItemElem->GetProp();4 b5 ~: b( X- p+ i
vItem.dwKind2 = pProp->dwItemKind2;" o( d, `+ `5 F" z+ q9 k
vItem.dwItemId = pItemElem->m_dwItemId;- Y* Q2 Z: J3 f" p) h1 b
vItem.nIndex = i;8 ]; i) \) `, |
}% D) Q6 m' w8 g5 W6 j
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; G; m5 W8 C' H, t# o( n3 {. m, u( O5 J* ` }
) W$ y0 s) E3 z" r //////////////////////////////////////////////////////////////////////////
6 j& f$ j8 [) Q% T4 p sort(vItem.begin(),vItem.end());//排序1 G) B# l' z8 j, K3 U4 m
//////////////////////////////////////////////////////////////////////////
- I2 p! W, Y# b9 Z5 B //交换; ]! D: E1 e2 ~1 g9 V
for (size_t i=0;i<vItem.size();i++). B) _3 L/ b( ~/ P) N1 o( d
{+ @( R3 ^! ], c1 w
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- W6 S) O* N- B- O4 ]8 }
pInvSort->Add(vItem.nIndex);; T/ p: {6 W' V. D s/ }6 x
}1 V2 e0 f4 p7 s" _
BYTE nDestPos = 0;% }0 g/ U6 C6 j7 B, a
for (int i=0;i<MAX_INVENTORY;i++)
3 | t6 l6 Z+ @; |( @# ^2 F& H. H {7 u" ?( q- _: e* j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& J, k9 I; o: w: W4 l! N
if (pItemElem)$ w9 D; ^6 R8 C
{
( B6 W. E0 ]5 q9 q& ^3 u6 Y: Y6 { if (IsUsingItem(pItemElem))
; [8 ]# U! K7 y4 u {0 F. O0 E- O+ X
//这个位置无法放8 r( |. ~$ T8 p2 B( B1 l
nDestPos++;1 B h( L+ ~" d; V _, @% e
}
9 H3 h4 }2 [, C0 ~/ X }
- b0 N0 h+ y$ m9 g! D( U, E+ ?/ ^ BYTE nSrc = pInvSort->GetItemSrc(i);6 D$ D# i i* a S' s- L
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- q2 H( t8 N0 d if (pItemElem)
% l2 V- d" q' d. v9 P {
; F7 W4 n& f4 }4 E" J if (IsUsingItem(pItemElem))
" U$ _' j7 \4 j3 Y! r0 Q4 U5 W2 M0 P! U: o {
; u) r( T/ ]% s //这个道具无法移动,跳过
# `2 F8 j$ X% W+ _/ M" E" y continue;. m4 R4 S6 Z4 j0 A% w
}
' Y; U+ c3 l/ |" [/ g" q% L }else{
+ K1 G$ E2 F: q; r6 |. l) a //空位置 不用动
# w( A1 N+ S' ~: | _* g; l9 M& I continue;
! }& X0 ]: O# I. m, t; Z# @- ^/ W: n+ } }
$ F( g% Q2 _* n //////////////////////////////////////////////////////////////////////////
$ U: q1 u/ }8 x3 k2 w //开始移动6 C+ U" l: o$ a
if (nSrc == nDestPos)
( n; ^' Q5 ?4 ]/ q {
+ z! K$ t" }- l/ O //原地不动8 c- r* l2 O) M; o
nDestPos++;
' @5 S4 r8 z2 K m continue;) V# B$ o" J3 r
}
5 X6 A: h% u" V5 A pInvSort->MoveItem(i,nDestPos);
& U8 P- G. N9 k/ X" @) _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' A( s: G2 [5 K6 y' J Sleep(5);/ z" J! D) F3 L- ], ]
//Error("移动 - %d->%d",nSrc,nDestPos);4 U* }! U- h2 Z' P- R I
nDestPos++;* S/ Y0 B- J( D' m
}7 g8 g6 w, |7 J o9 M, g5 i
//取第一个元素的信息$ U. u$ j6 ]# N% @3 d
/*
3 S7 d+ E- s, M$ t if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! n$ s% N# h4 b+ H
{0 S6 B- M+ N6 A7 L9 @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' M$ D7 _/ j# T) _7 N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 y. y8 K" l' r3 R. Y3 { }: }; s0 f7 v' o/ ?0 c
*/
, Q# ^/ O' ~$ H! D( ]: I4 z //////////////////////////////////////////////////////////////////////////
$ h" H( F* T7 _2 X break;
. F7 G4 U. t" w& n0 t& V( s- f }
6 }$ A& R. {+ ~/ A4 |; f: [ }
. E' Q0 o2 v: s}
5 c9 }6 B5 F- p+ j/ pm_wndMenu.SetVisible(FALSE);( v' ^- P, T$ \
0 L. r0 [6 O9 ]& c+ S/ I0 u--------------------------------------------------------------------------------------------------------4 K* s7 u% @9 f. L1 O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 _8 D) W0 P/ r ~( d
{' d, s8 l5 d. A5 y% u& I `
BaseMouseCursor();
( D: j9 A' t, G* X+ S# m}* }$ r7 [' s/ `1 f9 H) F
在其下添加:
, F3 z& I( [9 H+ ~6 Q( p2 @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 W5 }" h1 b J% @6 o0 p3 v+ y{5 Y- P# e6 I0 q6 k9 k- Z1 a
m_wndMenu.DeleteAllMenu();$ l8 E3 N5 J9 f( P
m_wndMenu.CreateMenu(this);
5 c2 r, B# K1 u' a1 Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 z7 v' x) x; b! }, h/ a4 i3 o# I @. r4 x& R) b7 q4 {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) B u2 d7 L G) L{
6 }8 z; `2 V2 w# B //P以上级别才可以删除所有道具7 h" ?5 V5 d# \. r% H& T" p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
\% _" v1 S/ E' Y% L a}
: n L, d* M5 W, S( {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" L' _. i: `0 q- j" L
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) E* K* Z- e) o/ ]2 p. A$ p* gm_wndMenu.SetFocus();. x5 P3 a, c3 h% m
}- Y( g1 o! s3 [. t- E# |, a7 C) H. q
------------------------------------------------------------------------------------------------------------
* v7 o3 R/ F1 | Y7 q# s o- _*************************& Z- L1 O6 }( g6 L/ z2 K& ?% j
WndField.h文件2 v. s# ?" X' Y; S/ U
*************************
! n; N% A" y2 \1 W* }4 q% L搜索:BOOL m_bReport;1 A9 M# m7 n! t
其后添加:
2 F3 L( S+ G/ A' pCWndMenu m_wndMenu;; W( I7 m7 L) {/ N: J* b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 y4 E' v+ g9 Z( A* j: a! m其后添加:: g) P" u! E5 P
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 e- V& @; d4 j! I8 [) \- {% {( G8 q9 a7 Z
/ J; q( e9 ?( H+ v9 H) a
|
|