|
|
源文件中_Interface文件夹下WndField.cpp文件7 D7 q9 q& H/ A7 x# O& x+ h3 X
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" S& g9 p7 @8 n4 {" P( }( e
' l' H) S" D, t' A! d
struct sItem
2 }0 ^, V2 s4 y) ^( C{- P. F x p7 T9 z! L
DWORD dwId;3 i4 |2 I0 g9 \" J% w
DWORD dwKind2;
1 K& R! G% x; f fDWORD dwItemId;
& j2 y- D) h+ e9 w, ~9 QBYTE nIndex;4 A8 c! j. b( i6 x+ ?; X. L/ x
sItem(){
! U# n8 r8 A# Q dwId = dwKind2 = dwItemId = nIndex = 0;, J( c0 F0 J5 i. V
}
& h( E1 \2 M+ o# P& Hbool operator < (const sItem p2)& x# H9 V9 X1 i6 S8 a
{
% J, Q+ g3 p; q2 W) o if (dwKind2 == p2.dwKind2)' q9 Z! [. X) W* v& q2 S+ F8 N
{
% Q( B$ T v% [6 x2 Y, x2 Z return dwItemId < p2.dwItemId; L& S7 X) c. O1 ^& [" G
}else{
1 L4 \- V* Y7 \5 C' J+ ]5 A6 q return dwKind2 < p2.dwKind2;. Z# m( Y/ t) W1 I! h7 V
}3 t: C/ K4 Q4 B: O+ Y' R9 J
}) X6 L9 t9 u, B4 Z) k
};1 v Z0 ~( v+ ~" ~4 T
class CInventorySort% f. Z6 Q# V1 m
{) g5 r) Z4 F' ^6 i
public:% s l: V s$ D' W% X, ~1 s3 J3 ^
CInventorySort()
?$ T1 o6 o8 n1 a" \, _{6 o0 j6 d% x! S8 c P* C: T
m_dwPos = 0;6 f( x% q+ D8 _' L* I2 e
}
; u6 M$ J* X2 \/ f~CInventorySort(){}
) m4 c+ N$ R; m% R$ ]private:# b; a4 s3 D! h, r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
\# z( t0 E I+ U, Z0 x( t0 Y; v1 yDWORD m_dwPos;7 ~- { G7 s- y/ u& [1 p" C% t& U
public:
0 w0 `% p8 b2 Ovoid Add(BYTE nIndex)
; a5 d7 A6 p5 y{
0 ~: L, R& s( p7 E- q/ z u# r if (m_dwPos >= MAX_INVENTORY)
. q1 u8 ^( h1 f1 o+ @' ~+ a {; }; ?2 g0 D. M9 H
return;
, `, l, G; z$ E% D, S }
5 P, ?, m, B: e; n2 v% }+ A m_Item[m_dwPos].nIndex = nIndex;* ?" T! p, D! |4 |' \3 y0 W. x
m_Item[m_dwPos].dwId = m_dwPos;9 ^9 I& {6 c4 j# s" n
m_dwPos++;
9 c! H1 y: X9 p% O} z) c8 T3 x8 o6 P) ~* |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% _* M ?- V& p9 K2 S# l7 _{* `* o1 V. d% w- L }/ k$ Z% S
for (int i=0;i<MAX_INVENTORY;i++)
6 }4 E% ?. Y' D* w {" x7 N7 _" Q$ `6 v6 \8 e
if (m_Item.dwId == dwId)& C; p+ e( ~9 X* q; V/ ^ [4 W- _& C1 _
{
6 {' w; I& I+ K# x return m_Item.nIndex;
4 J8 C: i: J( r# Z- o2 g: m6 [$ {! { }$ ?# ]$ j2 I& f$ [% h
}
8 v l6 l1 O5 E, }5 u1 U return 255;
. F. x6 d* P3 d0 Y}" n$ D* `* u, R- x2 j
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: U X: m0 y$ ], \
{
8 a' P+ m& F: Z* I: _1 I BYTE nTmp = 0;
9 a1 |& d' g3 T( b7 f; w bool bDest = false,bSrc = false;
/ D$ B0 I' _* x' J for (int i=0;i<MAX_INVENTORY;i++)
/ B" a8 S' z" D5 u7 P- T! O0 d, f {
7 N- Z: t, h6 u+ Q M: } if (dwSrcId == m_Item.dwId)
% J) W* o! I8 e {! {3 ^7 ^8 Y: l7 U( O4 f; d
//id相等 则 改变对应的dest和src
- ]4 o8 w L% {, q2 x, p nTmp = m_Item.nIndex;
4 ?& S1 ?1 p+ A% H2 X& ^ m_Item.nIndex = dest;
: ]! p: e6 `6 V' K9 u1 c }0 q0 n) x; o% X$ i3 h
}
- L; x# n% z" }, y" t //临时数据保存完毕,交换开始# \$ c4 J7 A, Z
for (int i=0;i<MAX_INVENTORY;i++)5 Q( [( Z. s, u6 _6 a( t
{
1 X+ ]; ]& E, T( h( w' f- ]- ~ if (dest == m_Item.nIndex)
" q" S5 s" r5 @1 v) Y( Y: x! f {1 y* ^) O+ G8 l; V
//id相等 则 改变对应的dest和src
/ T4 c3 W' q( v m_Item.nIndex = nTmp;: c7 A+ }; x* P) n5 l4 U/ F
}
+ @; Z$ x* L: y. B+ {1 B }
, R" }; d* M% S' Z) n}
) ^, Z* F# r: a+ w; C}; \: p5 w; {) k& A
-------------------------------------------------------------------------
* J1 l y7 J- \" y% h依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' w& M% L% D! D2 k" x# F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 a' o+ {9 R. s9 Q9 ~# S5 q
紧靠其上添加:& O1 S3 g* P3 b7 U% N
if( pWndBase == &m_wndMenu )6 k! d9 m, B4 ?5 G
{2 p) G: u; q( W. _4 |- g
switch( nID )6 J4 L1 z, K9 _, p7 ~( s
{, i- Q1 t5 w: C
case 2:5 u; L2 K2 i- `, G+ k
{$ j; B. J! Q( \3 f7 I# j) e
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, {0 {/ o9 J! t7 o- q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: i: T- c7 F) m* s {) ?2 o7 O" l; q
break;
3 E$ W8 @, \* {6 d, ^ }
s: J0 @9 Y+ C# Y' P3 V5 s2 W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- p; ?, e5 z- e" s5 h
{& a/ B# q3 W, ~% B1 O# V( g. e: b2 E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( \6 B$ K/ R# K8 r4 u0 l$ d* v if( !pItemElem )
' R2 a7 ~& y" Q% T# R continue;/ ], l# O2 b0 _! A3 q
if(pItemElem->GetExtra() > 0)' I* _- f; G. ~3 T' y2 ^/ k2 E
continue;% E% @' r8 g" K# @8 i4 h
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 b- a5 X! k9 _; W8 L continue;: a! G! L2 |$ f, J" h9 [
if( g_pPlayer->IsUsing( pItemElem ) )
, j3 P! ?, ~1 V6 P- p$ S! v continue;
( h& h! ]1 `% Q8 {8 @; R3 i if( pItemElem->IsUndestructable() == TRUE )
. w3 _8 W# k) `8 U {
6 k3 p/ Z/ Q0 _, v: K g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) C/ e- |9 g- P" u: o; I! y% W continue;
5 c) o; h6 n9 E, h2 f7 ~ }6 A; H/ s, V6 P, O# p$ P! E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 y3 ^( [5 A8 E5 J: v* `9 z/ P# i }
9 x" r1 B0 u) y4 A break;
0 d* C0 Y- K! b7 _4 x m. b }, z' o/ T: P; u Z2 m8 ]5 U: b
case 1:
8 @9 N8 m' w( S3 M. d) Z/ T5 X {
* J" T- T: V: G! S2 { //整理背包5 f; B; r: F4 ^/ X
//////////////////////////////////////////////////////////////////////////
& ~! m4 ^, d6 | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# ?! S+ v2 D# [
//////////////////////////////////////////////////////////////////////////
" h, Z/ B4 V! L9 v c7 I2 n //////////////////////////////////////////////////////////////////////////
9 C# R2 t8 M- i( Z/ W5 q CInventorySort* pInvSort = new CInventorySort;: m( o0 U4 Q( U$ _1 A
vector <sItem> vItem;* W; _, h g3 ]; m: {
vItem.resize(MAX_INVENTORY);//初始化大小5 v5 j1 x l/ U9 E8 C
//////////////////////////////////////////////////////////////////////////" |4 l( `6 k# [2 k8 m/ V+ N# K
//填充数据
% V) d0 L1 Q% z1 d; A4 F1 R for (int i=0;i<MAX_INVENTORY;i++)
5 t+ E3 {& Q8 a {
. Y& u, b$ _. V( e5 \( l3 C p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 E/ o1 L( k( r$ C1 ?; d) J if (!pItemElem)2 j+ V. v& \; E* |' r b4 f" q
{
0 O$ X% h$ P: L. y3 p& Z- U vItem.dwKind2 = 0xffffffff;
* e- D) {% c, Y' ^; {8 ^8 d( K; x vItem.dwItemId = 0xffffffff; d, X m9 U% [, K" y
vItem.nIndex = i;) H7 ?. C0 o. n: p$ {( b8 Q; U
}else {0 Z. o' A6 I1 `; _7 ^
ItemProp* pProp = pItemElem->GetProp();
+ Z+ v( @# Y# t" {- h vItem.dwKind2 = pProp->dwItemKind2;
* V+ B8 z3 U H vItem.dwItemId = pItemElem->m_dwItemId;
" M) }0 U6 q; h1 G1 A& `+ ^ vItem.nIndex = i;5 }" \% u- r0 Q; g
}
% c" v) Y7 F% p+ v3 c' j //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- r5 s" _1 x9 N- F' j1 P$ v }5 k# ?$ ?( N9 Q0 B' ^7 r
//////////////////////////////////////////////////////////////////////////
6 ~* t# R# M6 A+ ]% `! { _ sort(vItem.begin(),vItem.end());//排序) z* b) H! U: L4 C1 C$ [8 G
//////////////////////////////////////////////////////////////////////////
) w# d- C- V7 e, q //交换
# ]0 n7 \1 |$ t3 ? for (size_t i=0;i<vItem.size();i++)
. H( {8 b4 M$ r1 g1 u2 z {
$ I( h* k+ I5 s3 |- h //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ @2 i% a5 z3 C% F+ Z* q
pInvSort->Add(vItem.nIndex);2 s& c+ V" t' }. F/ i
}' Z: b7 x: [& K
BYTE nDestPos = 0;
' u2 s: M/ ~" o: R+ ]" w for (int i=0;i<MAX_INVENTORY;i++)) m! g8 x5 O" h& N
{; n- q- V2 |% k- k2 H. S( ~8 X3 K- a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); [- e& B5 b% @" ~
if (pItemElem)% S7 ~" g# t- X1 c$ y( H
{+ G6 S# J) c# ?$ g# u
if (IsUsingItem(pItemElem))4 ^$ k, B7 y) G0 D6 h6 F+ R
{ L& G0 k- S+ ]' Z
//这个位置无法放
7 @6 j3 o' f. z4 C# V. c6 k) a. c nDestPos++;9 W5 Q& x, Y7 h% {/ } E
}' \4 B2 }7 k" `: Y0 ~
}1 t2 [+ A+ S" a. ]
BYTE nSrc = pInvSort->GetItemSrc(i);
( H4 m2 ?1 h, f* @$ T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! ?+ V- `4 |. i' H; M if (pItemElem)! D0 M: [' G# f! f4 p n
{# N8 j' y+ _2 r! P6 A( \6 x
if (IsUsingItem(pItemElem)) |4 r: M* o0 Z# |& a
{! t$ P6 u8 F1 t1 T8 Y0 P9 d
//这个道具无法移动,跳过
+ v( C* q: _$ C, M! v/ c' B# U continue;
! Y k, L3 `/ _/ P }
9 [% ?, M0 J. i4 h* @ }else{: o R9 o% k1 q) v% S8 ^2 [& y( C
//空位置 不用动
9 D7 I; L. U F continue; S' y! D( u; k% R' x5 c0 D
}8 A+ ~% `3 {/ U$ Z- d& k
//////////////////////////////////////////////////////////////////////////; J `# ^1 b; V7 W' ~
//开始移动
* l1 Y/ H1 N% N, T' p: M) E if (nSrc == nDestPos)
. f" \" P' \2 x H5 U/ Y {
( E, C' n) Z/ Z0 ~2 G //原地不动
" n2 b* W+ T/ I; ?: L: T nDestPos++;5 e; H& l, |; [
continue;
! ~' P2 }6 s* | t6 u: Q }
9 P- q* u* Z; _$ } pInvSort->MoveItem(i,nDestPos);
- R" q+ S$ L* t/ O$ z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ L6 Z; v$ V8 J. \# M" g4 g- H, c Sleep(5);
. y: F! }' B1 M8 m, _( c //Error("移动 - %d->%d",nSrc,nDestPos);% d6 k; Z* \2 a5 `& K
nDestPos++;
5 f, m+ ?2 h; C( i/ s2 [ }4 k1 f# @0 U# v5 P% E9 H
//取第一个元素的信息+ L Z `3 l/ U; \/ M* y- S
/*
% _5 m* E3 W1 ~' M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ x, d; t' u: y8 _5 A {! G$ p4 P3 \' _
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ m$ `6 l) q: B$ l& U5 O- j
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 D5 v9 C: q9 M! O }
, P# T: r1 @1 \% }: | */
# Z; b- x0 T6 l* e/ ] //////////////////////////////////////////////////////////////////////////" d9 t" _/ Q- R$ L. D6 s4 Z- f) {
break;
$ M( R1 _3 S1 e9 h' c; |4 l4 Y- D }
5 @2 [' l9 |6 n: L0 n- t5 W }
/ H3 Q& N' {1 a} M+ v0 d# \/ A( [% g0 |
m_wndMenu.SetVisible(FALSE);
' M" h" U I2 X+ ]% l( s0 Y9 _3 A6 }3 y
--------------------------------------------------------------------------------------------------------
% {9 _1 V8 F0 _2 @* w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) n/ e$ t0 y9 B5 L" t. F
{
1 r/ C* y# P) V. ?: N. d' WBaseMouseCursor();
5 n8 Y. K7 J4 t2 G) X}
+ n2 J P, q* s' e6 Q+ p3 O) Q在其下添加:
; g6 b0 |; ^; T) evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- ^. b$ y" f4 R
{- Z& `+ i: L( p& r% {
m_wndMenu.DeleteAllMenu();+ s/ x3 q' a: |4 @: Y5 x# M! b2 W
m_wndMenu.CreateMenu(this);: i/ ~% C( r' E: A2 E/ i7 J/ F- N
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: O6 U+ R) ?& x3 R' ?
& v( @3 Z# G. a U/ Z( u1 o' n! Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 {+ q# ~/ g1 D) e! I' V S) |{& f& a* I: H% u* l
//P以上级别才可以删除所有道具
5 g( } Z/ e y' j2 {$ R m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 }' E4 K' b2 f" b, @9 \3 d}
3 ?% N4 ?& {0 \0 [9 om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% w5 J. b8 Q6 Y* ~$ Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; W" O4 f6 q" v, o) ?
m_wndMenu.SetFocus();
& u% w8 F& n# R2 t4 p, |. D}
1 ^ \- S. ~1 h0 Y7 a/ Y% C- x' r------------------------------------------------------------------------------------------------------------% d; W( Y. @0 g4 J& e7 F m! V
*************************# o& x' \# e# I4 c$ `$ y
WndField.h文件+ z& }% ?0 u7 t
*************************
* t% [+ H8 J3 t2 _2 L1 _& {搜索:BOOL m_bReport;* J1 T% g# N: G( W; V# g
其后添加:( @# {8 {' K2 v' S
CWndMenu m_wndMenu;! e# Z( |7 a1 T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 l% ]) j6 Q& Y- t! u6 h& C/ k [其后添加:
1 v/ w* H- A% |3 Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);3 p2 y9 `7 k0 o& L0 O2 F0 K
& N3 p8 ^+ F% i* j" E- t
4 b/ K; x4 C+ G [# t |
|