|
|
源文件中_Interface文件夹下WndField.cpp文件: a% \! N0 t) o. K- ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. ]3 w& K7 K9 E7 C, O' t$ }) {# E) }0 b; y( J6 ^3 L# `4 L3 S8 @
struct sItem
n& L* D( I# h" L6 E{ J+ N" @. Q* ?
DWORD dwId;
" j; t$ a& O" z; n6 D6 C& hDWORD dwKind2;+ _# P; S! \+ l" U# G
DWORD dwItemId;9 ^) a l l0 v& n. b- g, w1 b
BYTE nIndex;
2 W' f; C2 H9 A1 {( ^! X; V9 KsItem(){- n P Y3 c) \; ~
dwId = dwKind2 = dwItemId = nIndex = 0;: \5 N/ b. _& x+ }. b. l! U" v7 b% |
}
! \- [' i( N6 a: I5 B$ Z7 O' ubool operator < (const sItem p2)5 T. \9 R, ?+ M# D% \) C# }& e
{
4 q8 M9 t1 i, |1 ]& J if (dwKind2 == p2.dwKind2)2 C" w; I8 t+ K: a$ s) [7 g
{
' j3 p E; ]1 s1 W return dwItemId < p2.dwItemId;( X+ x3 s4 d) i. s
}else{
. g8 [. S* h* ?2 ^ return dwKind2 < p2.dwKind2;
/ R8 l. s6 P/ k3 ^. ], b2 ^ }' P3 n! M3 |; s Y; Y5 \/ k; T
}9 t" z+ A& c; g! z/ O1 T
};) {; a0 G' `# F3 l; _. \5 d
class CInventorySort8 f Z4 f8 z$ B z# Q2 X* m
{: V7 @. k Z6 `7 F
public:
H: z, t( S- Q' y1 Y- mCInventorySort()
^& G; s: O& d' f* v. g# G! f{7 {+ e# N2 U1 t
m_dwPos = 0;
. v3 |" Y; @6 }) C) t! s0 U! z}
% Z' P$ I# B* U$ h, Q' }2 b& r~CInventorySort(){}
6 x' C' h) o0 B5 X, ^* E' Cprivate:/ [( _7 W0 V4 X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ b, S+ p1 A) v O* p
DWORD m_dwPos;
2 P5 b, j2 y! Q2 I' Q& Ipublic:
% J4 N* r) W+ n' D7 W- T3 L2 Vvoid Add(BYTE nIndex)
' v' t6 d$ R' k( b0 S t{5 Y4 L5 R* Z" y5 X+ r" z) }
if (m_dwPos >= MAX_INVENTORY)
. h P1 B5 O8 t# O {
- q( c* e O/ l! [( q7 q return;4 C4 k( Q2 R6 v4 F* m& r4 F
}3 F) |( u x* z3 u L3 h; G
m_Item[m_dwPos].nIndex = nIndex;3 M1 i$ ?3 M& }' ~! w
m_Item[m_dwPos].dwId = m_dwPos;
# w6 ~8 X; ?0 f/ t F8 g m_dwPos++;
2 b% S( O& m) v& v$ {5 q8 z# F}
( Y; s" [3 q3 qBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' d7 I: f ~5 w/ s3 c
{( G5 R1 R7 \! C& D* f) u
for (int i=0;i<MAX_INVENTORY;i++)1 \0 h5 C$ E; ]( E
{
* p. R4 ]) W" w) X if (m_Item.dwId == dwId)3 u% P1 G9 D$ ~; T5 h8 P7 b) a2 C
{" H1 l. j1 h* {8 @3 K: I+ ]
return m_Item.nIndex;- T% W P: I5 i: t* `1 ~* i
}6 o6 u7 p v9 p# V2 p1 v7 S( r; `
}2 w+ k9 c- L8 c- R' z( J
return 255;% r: J; \+ c" }% P7 F, D
}
/ }6 {- [9 y+ S8 }4 ?4 D( F. ]void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 `# f7 a* K+ d" K& m% Q. a
{
* O% G, j' R2 n- J BYTE nTmp = 0;
5 `3 F: ?, o3 `1 E* V! W bool bDest = false,bSrc = false;8 R+ c3 ]* P V4 g( V
for (int i=0;i<MAX_INVENTORY;i++)
/ |% x0 e" K4 D; O$ v {
. N' n8 |) X# n/ t& {3 j! q if (dwSrcId == m_Item.dwId)
2 Q- C M$ X, _% c; e {
& L9 d6 b: i( U //id相等 则 改变对应的dest和src
9 k$ V4 |$ E, Y1 M( E8 U! v& s nTmp = m_Item.nIndex;
! D: R7 l& x [# a% f9 B" T8 ~" ~ m_Item.nIndex = dest;
' z/ e. q# x% R, t; b }% O( ^2 z/ k/ g0 A' T
}( ?- r' H9 m' T% e
//临时数据保存完毕,交换开始) ^, G I. M) C+ S! H" U4 u
for (int i=0;i<MAX_INVENTORY;i++)
! Z1 E7 f7 R9 |% s, L% R7 F! j8 ?1 T {0 { ]$ E9 d: k `
if (dest == m_Item.nIndex)
1 E9 Z! D" S/ S+ G: V {$ V ^% j$ J& g7 f
//id相等 则 改变对应的dest和src
/ x! S. p/ M: N1 n. G3 O2 ]7 ` m_Item.nIndex = nTmp;( c- b+ S) w) B+ d- g" o; R
}
3 |" Q* j% v* P4 M: W9 _% N }$ e( A0 z) W X, J$ r) b+ |
}) R1 I, z' v( k3 m0 r, u2 {
};
. a/ x1 C# ~3 C; ~0 F T-------------------------------------------------------------------------: S- Q& K- Z' o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 X/ _- l+ @) ]( n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# ~+ n8 G4 J& G0 U. e7 Z! _8 n: o紧靠其上添加:
# e# c5 p7 c4 F8 e9 T( Yif( pWndBase == &m_wndMenu )
# w" A8 n$ t% b8 n6 M- j{
5 t* J. }# p2 F) p9 Z( j( G" S$ ] switch( nID )
* N) s. O i* s. W9 I- k) d, t {7 f8 O/ u! v2 v- [$ d
case 2:
6 m/ A% Y$ {: |# X% D- P {0 u3 Q" Q- F. k* e. }$ M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 e4 E# t) s; }: H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 u$ b1 f+ D- }" [# j# U1 n4 O {
8 }8 | U/ \% B9 T3 R. C6 G break;8 Y9 F' R: w7 H8 x3 X2 m* t, U
}
( G+ d% q+ R$ R. p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% |& Z# M- d s, a9 e: t$ K {( P# n1 m9 _1 J9 O: }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 c/ {$ P! h6 r$ }
if( !pItemElem )
" N' h% [5 `# }. q+ U continue;# l* \! c: `2 ?8 f" Y" E1 a9 w/ N
if(pItemElem->GetExtra() > 0)' `$ u/ Q- h8 K6 `7 p) I# u
continue;' W3 q! @3 L! X5 E: _
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) l. V& | {4 N# Z6 F
continue;" N; `! G; y6 t" c1 n. w' x. {( }+ r ~
if( g_pPlayer->IsUsing( pItemElem ) )( B! k8 Z5 u, H* @! j' E& _7 `
continue;
6 }4 S: S2 b% V- f, `$ x8 G if( pItemElem->IsUndestructable() == TRUE )
( k5 I6 P9 _/ b {
2 z/ n& e) C3 J4 e8 [+ v4 b g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! |/ U% b* }. s/ H' t continue;
/ @4 Y, E4 J, T# t3 R }
; R* I% h5 u$ X" `: l g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 d1 d% g3 C0 B% b! i/ ?* t, M$ Q- U
}" a+ \% F$ S: o6 V
break;# i$ m! @8 M. o A3 e2 a3 j
}
1 l0 v6 ^4 j) [7 c$ r case 1:
: n- j, |# s2 @& W& o M {
$ o1 o$ q. z- S //整理背包
5 L% F3 G( s% _' o9 H9 ] //////////////////////////////////////////////////////////////////////////9 K! e+ [; c$ G, V" f3 D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 p0 k% G8 J7 n7 Z8 P //////////////////////////////////////////////////////////////////////////( D2 c d" Z1 _, f7 x
//////////////////////////////////////////////////////////////////////////
/ F7 f: a) N, b+ d, u. l+ y: p% q CInventorySort* pInvSort = new CInventorySort;) s* p* p4 e' U8 q* |# I- g
vector <sItem> vItem;
1 n2 `- r) S1 G* n- U5 V# E7 g9 x vItem.resize(MAX_INVENTORY);//初始化大小) o5 f9 V) r2 c1 t9 d2 \1 E1 h
//////////////////////////////////////////////////////////////////////////
2 V# s0 w5 t3 S$ R" L //填充数据6 q( e$ H5 |7 k
for (int i=0;i<MAX_INVENTORY;i++): q8 X% s4 E1 _6 A# i8 N3 s
{6 Y7 Y6 y, g5 Q/ O% Z6 N- h0 n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" f: g' Y' I# l
if (!pItemElem)
' g$ a- H1 Y0 e7 P7 V( z; b% Q" E {
. Q8 ~0 Z! t* Y0 E$ c) e8 ]) \* o" |: o; h vItem.dwKind2 = 0xffffffff;9 F5 j$ p# X! A3 L% {
vItem.dwItemId = 0xffffffff;
( r( S- _& J" ~$ `" v vItem.nIndex = i;; p8 y9 J7 G i w& z/ Z
}else {/ ^# t# e& X7 Y
ItemProp* pProp = pItemElem->GetProp();
7 z2 _. k: G7 D% a* j/ V/ t$ F vItem.dwKind2 = pProp->dwItemKind2;
( U- @. _) r" m- F vItem.dwItemId = pItemElem->m_dwItemId;
7 [# L2 o" a. p# |% q) z5 E vItem.nIndex = i;$ d2 f2 k7 Y. A; L9 e0 D$ V# ^$ f
}
! C9 i0 ^9 a3 M9 V, I6 }- y" d //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! w& ~) ?% `+ I1 V! H. S+ |0 u
}* k* T% S* \8 S* y! v" v5 `
//////////////////////////////////////////////////////////////////////////- Y: Q3 T* ~- I* e
sort(vItem.begin(),vItem.end());//排序/ s, {' c/ M9 Z$ a# f: X
//////////////////////////////////////////////////////////////////////////
* ?% K7 |) a, h3 o5 C; U //交换
# r. A# `8 h* m) w0 m for (size_t i=0;i<vItem.size();i++)
. c# R) A4 ]5 b7 _. O {
- m* e8 y! E+ I: \. d$ t! U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 N) ]3 t8 [: d9 Q6 _/ T9 `
pInvSort->Add(vItem.nIndex);
% u0 j3 } B8 s4 H9 H, t6 _ }
7 k; s3 h' k' W; g BYTE nDestPos = 0;+ |5 @% z% G6 z3 G2 n- k
for (int i=0;i<MAX_INVENTORY;i++)
" _, N% `/ g6 g {
$ u$ M) N0 O; s6 M/ z5 t3 D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ V! G1 `# P, {! n. |* g
if (pItemElem)
; j# K8 o. |( G. K {2 Z+ ]6 ]1 w9 G& }( L/ {0 q
if (IsUsingItem(pItemElem))" V- g* ?8 V: j) S
{
# ^* G7 Z( E% }7 w% }1 v, f3 v //这个位置无法放8 D" g. }% [ j' U+ s5 M3 x& N
nDestPos++;; z. B9 E0 u) v8 }9 z
}( b5 @, ?' g! E: u0 d
}5 l4 j$ L5 s4 W" p0 J: u
BYTE nSrc = pInvSort->GetItemSrc(i);
0 `& R. z6 v% A! `8 { pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 Z% ~' P- X! }- X; w- v
if (pItemElem)
: n# E7 }" ?3 [. b" z) G$ [ {" r( F& j: F5 G5 l* Y
if (IsUsingItem(pItemElem))
Z3 {) g' c2 c2 h' A# { {9 Y C _8 [. B3 ^0 K
//这个道具无法移动,跳过
3 G0 S6 h, K6 i6 ^ continue;
$ n v* B) z' \' e } N7 u* v* e* G. w
}else{! t2 x0 D1 T$ k. n) @
//空位置 不用动& d* R# R" {/ b* o
continue;: K: u1 {( a5 K: B- T) _" m
}/ F3 ^/ d$ w- u$ e$ e1 ]9 Y( v- B j
//////////////////////////////////////////////////////////////////////////! O0 W- P! Y5 A! S- Y- i- W4 A& w
//开始移动
$ [: |, Y8 y: u6 c# O- D if (nSrc == nDestPos)0 P5 D4 D; K! U( {. Q' A
{
5 Y( r9 Y) {; m9 T9 i$ \; F4 x5 L //原地不动+ U$ h/ ^* c3 Q! v; _
nDestPos++;% C( }2 u; A/ G J* `0 j: z
continue;
8 t6 f1 q/ ~: ?% N1 t! |4 k+ ` }' `. t. g( t# `: S% g- Z0 b
pInvSort->MoveItem(i,nDestPos); |: G6 j) Z8 b: C- X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( m9 G2 [( F: s8 ^* h! W Sleep(5);5 J( g3 I. q% R. |1 N ~
//Error("移动 - %d->%d",nSrc,nDestPos); @7 }" e( h9 g
nDestPos++;
( p' P4 G7 p8 C# B( h }
0 |" S1 q$ `3 |; W1 ]0 W! Y //取第一个元素的信息+ ^ T# U( c! J! {% f. x
/*
2 w* t- _* z9 N9 z. p9 e if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( \1 ~6 i1 N$ c8 I
{
# f2 {6 F2 P! _* l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- m" b6 o& @1 k' h4 L g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 {1 K6 O1 I$ r }- T }
3 a) O. G4 r- \4 R q( X */
" R, _- Y3 L4 B& c% H //////////////////////////////////////////////////////////////////////////
' m1 C8 Q4 S) z$ d7 p, P3 ] break;% l" h( v8 k( o
}
! |0 O& [( B$ q$ { } : F: n" z6 x. Z" G: P$ b/ k# L( q2 b
} N4 Y& X3 k: M( `6 L9 M$ J: m* P( P
m_wndMenu.SetVisible(FALSE);
3 d# [9 B+ |1 q w" D f$ }" E! C2 {7 r
--------------------------------------------------------------------------------------------------------% `9 G- K: c9 C8 w
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 J! p" k- ~! e" P3 c
{
! y8 _& ~! n g8 M- k3 `4 sBaseMouseCursor();
+ v8 h) s6 `! ~$ w V/ @$ f: w}( h% h* K/ ]2 |( _. I
在其下添加:- @1 F; @; Z! `3 V2 J+ S: z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ o# E" h( l6 c# R$ K3 M: `/ G
{
( x' J) e+ _- o5 {7 ?; ~8 Ym_wndMenu.DeleteAllMenu();
1 @0 t/ `# L: `- [+ x) Rm_wndMenu.CreateMenu(this);
2 J4 A ]' z# K6 v/ Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ C' a1 ~ ]* w* C# r4 e4 {! D/ p- j5 Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" M5 U5 g: c) n3 O
{
7 r1 g% B( l' [$ J8 Y( c //P以上级别才可以删除所有道具+ y, @/ P/ f8 a! E( G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 f6 H; [; z! |- {, W/ d
}
" a9 A3 V; j& Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: {7 `& N* Q8 Z& X' D" u
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! T0 t7 R* Z+ R) Wm_wndMenu.SetFocus();
/ L) X& y: `! z. G0 N* g4 d6 p- s}
; v3 C8 O0 u( r. j------------------------------------------------------------------------------------------------------------/ a; D& y7 W% {
************************** |' I; {9 C8 N6 u
WndField.h文件, m1 q. W0 o2 R4 R2 l4 K0 `
*************************
; K+ W0 E% a& F' X搜索:BOOL m_bReport;
/ l1 x/ l( e. k. T/ T* N其后添加:
7 ~% q, p( p+ L& o+ w0 p* \& G2 b4 }+ TCWndMenu m_wndMenu;) H. o( u' t" G8 l) A5 x$ \0 J9 G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! x) w, O) y4 {7 p其后添加:! l3 U8 V' u3 _, q1 x, b
virtual void OnRButtonUp(UINT nFlags, CPoint point);! u: W% P- L/ ]8 p$ z
3 l' R0 R6 \4 e, Q) V
+ i9 W* R& t7 b. S# o |
|