|
|
源文件中_Interface文件夹下WndField.cpp文件* L# Y( n A% U2 {+ P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 C* R+ q. F/ e$ T7 l- c# C
2 x3 ~( j: |3 X) k% c- l' {struct sItem+ u7 g% s8 z; ~7 A8 u
{: k1 `# J( e4 v# A4 J7 F9 g* j, S3 R
DWORD dwId;
; [! z8 b; b9 l1 _' \ O- [DWORD dwKind2;5 a% m; p# d8 y& ^. I z) ^
DWORD dwItemId;' }! F# {* y! y+ d' X
BYTE nIndex;1 b: R q$ U4 `/ {. S
sItem(){
" D9 T" Z: I7 B" n dwId = dwKind2 = dwItemId = nIndex = 0;5 t- q v6 S7 ~; U. X
}3 F% R' Y7 R6 K- Y1 T
bool operator < (const sItem p2)- X6 @) B/ F7 i% g& D( V0 g
{. R% a6 i+ Q7 Y& F
if (dwKind2 == p2.dwKind2)5 \8 X8 y" F' c& j9 q7 G! X
{1 m) Z# J, e! u; f0 l+ [# [
return dwItemId < p2.dwItemId;& T8 ~0 b4 I1 u( c
}else{
* l+ R2 [( M& I) @. b" ~4 g5 U return dwKind2 < p2.dwKind2;- b i7 J2 G, ^
}
, J1 J6 `7 e; w/ J}
( w J9 X; F* ?0 R" h/ Y};
& U* O$ L* C: {6 L @* c+ s- `2 Xclass CInventorySort
6 f$ g8 L: M5 H" G. ?{ |: T. O2 F H( U% J. H: R% s8 C
public:1 u' H* k n/ O8 q9 U1 J5 e
CInventorySort()7 Q; x& v/ N, }" p
{
9 o1 W( O& H( ]5 a0 J$ d* y m_dwPos = 0;
" V2 l2 }: C3 l9 f8 i}0 m4 T8 ~2 ~2 q: m; |8 R2 Y2 S7 z
~CInventorySort(){}
( U8 p7 P6 p. R7 lprivate:
; ^9 @" K/ y0 O$ G8 o' usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 `+ H* r& ?3 t3 IDWORD m_dwPos;% @$ A5 V) V3 G9 u2 H4 j& [
public:
: ^. ?2 v- L+ ~) r, S3 |) Dvoid Add(BYTE nIndex)- m x5 e0 x& |" f/ B, o
{9 c' h8 p/ A6 C2 w1 u; u
if (m_dwPos >= MAX_INVENTORY)
. E- R5 Q; Z* w8 }' g) P {
/ D- K* d' q' B6 K' e9 r return;4 ^- m K$ I- \2 r }+ s* \
}/ {5 c7 k; S( w* A
m_Item[m_dwPos].nIndex = nIndex;
0 b& E1 l( h/ _& i' Q+ v m_Item[m_dwPos].dwId = m_dwPos;( V# b' f& V! T: l3 r/ K4 a" G
m_dwPos++;1 H0 ?/ W; K. ]0 n
}. `8 d# {8 ]) g# \7 s( m( \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 w9 [- p7 B) v* Y) q
{
2 |9 X) b, b& b- f- G+ S: S for (int i=0;i<MAX_INVENTORY;i++)/ P3 X" Y8 g1 C; t1 x- T7 ^# q1 k
{" W" W8 `* n9 ]( J+ l. C4 J
if (m_Item.dwId == dwId)& P0 C- B- x% ~, R. b3 ~2 m
{
4 ?/ C: f7 @- b. W* h3 d2 m( J7 l return m_Item.nIndex;* i e( G: F* D- c
}3 U( ?2 r8 V! s, k [5 T
}
) C: D& T. f/ x' J+ f2 S return 255;) M5 N, V, U0 c l) B- a1 f' w6 ?
}
% T K: {% w4 _; a; W, }2 uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- X7 e. J7 ~/ |/ E7 G# ^% K{% A7 _9 O( a' P. }* m- B
BYTE nTmp = 0;
. c0 f. N" K& p; x7 t; {8 }- | bool bDest = false,bSrc = false;9 `# P: a1 {7 h2 ^4 I
for (int i=0;i<MAX_INVENTORY;i++)9 g# O. q/ Q% P: `
{
# n& j" }- d. H0 _7 @) J* k" q if (dwSrcId == m_Item.dwId)9 P3 l0 W" [) p& P* v
{
% p: X2 z+ Z' N6 x //id相等 则 改变对应的dest和src
! V' f! E( ~" x) ^+ q nTmp = m_Item.nIndex;5 ?6 X. d$ x c2 ?
m_Item.nIndex = dest;% @$ P% G1 u2 ^% w6 z
}
! s- F2 x1 j5 X6 U }
! p9 U; ^! d! x. L5 @) C9 M) A; a0 o //临时数据保存完毕,交换开始 l3 _( N9 u9 J/ W. @
for (int i=0;i<MAX_INVENTORY;i++)6 ?9 h0 J( X& T6 R5 ~. W* M1 S
{
# ?! I5 u! m$ Y/ V/ Z+ X8 ^ if (dest == m_Item.nIndex)) m9 K; t) G7 V2 m. z* [3 }& }
{6 @* O9 p$ b! m9 M% n
//id相等 则 改变对应的dest和src
- {6 Y+ N9 D2 c" o. @% j; j8 b5 I m_Item.nIndex = nTmp;' E( k# q8 a# @7 M+ _, S/ B$ {/ O
}
% L" ^* {. t* i. _2 ~" }. b) O }; S0 p% E* P/ Q4 g0 @
}
0 s# `* r- z- x/ w, z};7 Q& C! w# \8 Z
-------------------------------------------------------------------------4 a5 U) X" w3 S3 |+ G5 D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' o- ]; K- c' W3 d
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ A1 L9 W# O4 g( ~" z' [4 {# F, m
紧靠其上添加:
& n l. M3 A" Z7 C4 wif( pWndBase == &m_wndMenu )
) L+ G- v0 O. f6 h4 F{# r1 z+ j p# b8 h
switch( nID )
) E# b+ E8 [ w# K: `; U; U( y {
0 Z3 y. c, D1 l3 W' }6 m7 q9 {) }4 h case 2:
0 u8 ]1 u" o% V {7 p+ | X7 f" ^( _: _1 H
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 D* O, x$ {2 N t r
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 N* x z- s. a) A9 r6 H* p {
+ R" n% E5 w# `' ~/ ]9 M break;
4 d- z0 [ t2 E" H' s% x4 L, _ }
2 D1 D9 _: [# Y7 ?4 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 \2 _$ O7 m- ]7 z" @
{
, K5 y) I/ U2 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 |% {# B# \+ [" l$ ]
if( !pItemElem )5 K- z- G j- g! I% l! d/ V
continue;
& q* X- V, P3 F3 }8 {8 Q3 J: F* ` if(pItemElem->GetExtra() > 0)4 q/ i4 N! f5 k, |/ N! S
continue;8 t* U C6 A4 o s( _- O
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 ~; I5 [, E; w/ k& c0 }/ c( k
continue;: I8 a- t+ k7 C5 ~: M
if( g_pPlayer->IsUsing( pItemElem ) )6 q" H: d4 m* ]' Q
continue;
! B! X& \+ P3 X& m if( pItemElem->IsUndestructable() == TRUE )
4 V. _* r3 A! B/ Z9 E0 S$ R# F0 [ {" J; ~- n; g# d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* K2 M9 O9 Z h+ x3 g
continue;0 y& S! W$ x4 R7 E; P
}8 ` b6 k7 ?1 M" ~ y- d4 g9 \( v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: d: J2 `+ T B" q0 ?8 B }
- ^7 V; @9 {( ^ break;
C K: |( _# S }, i! @' w$ q O% m2 M0 [
case 1:
5 R/ P2 v" e8 ?# U5 K. Q# e {
. U8 u: b. P% I. e+ b. W //整理背包
& P3 H7 K3 s. P$ y# N: V //////////////////////////////////////////////////////////////////////////# z7 a- i) n6 E2 Z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
Y, _6 I8 M2 L9 R6 q) C; n //////////////////////////////////////////////////////////////////////////
2 W R/ M9 W( C0 d- ~+ K //////////////////////////////////////////////////////////////////////////
9 q- [; u+ F9 L# _7 J" C- R. | CInventorySort* pInvSort = new CInventorySort;
j F% H1 Y# N5 B0 d5 W" m H% T vector <sItem> vItem; W+ u$ r, _' A
vItem.resize(MAX_INVENTORY);//初始化大小 g/ J4 d7 C' v, I
//////////////////////////////////////////////////////////////////////////4 V7 r+ K6 z0 r9 N% u
//填充数据1 w1 O) {' F2 g" q1 d
for (int i=0;i<MAX_INVENTORY;i++)$ R4 O1 H+ g w" z7 F0 N
{
& e1 W( h; ^# C: t% |$ b/ o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* n9 N7 R! D! W4 O; x if (!pItemElem)
$ B/ V( n# P: J) g0 J2 C5 P: D& b {0 b' j0 X1 x5 C7 l
vItem.dwKind2 = 0xffffffff;
" u3 L' {" a% \3 A vItem.dwItemId = 0xffffffff;' x) w1 a* U6 x5 ?' V+ [
vItem.nIndex = i;2 |2 n- G: z6 D
}else {
0 ?. B9 d1 a1 v9 k1 Q3 X ItemProp* pProp = pItemElem->GetProp();" L5 i. F8 _ }0 R, j) R+ H
vItem.dwKind2 = pProp->dwItemKind2;
, p9 o$ C$ T$ e8 h vItem.dwItemId = pItemElem->m_dwItemId;: S7 {# g8 E% w2 ~
vItem.nIndex = i;) y A5 B4 F8 T& V: T+ H! u# V
}5 `( ~9 b, M1 u; v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. I; {" P l- M" u/ F( A }
; J8 i. Y* V$ B8 u5 M9 {% @: |1 q //////////////////////////////////////////////////////////////////////////2 W+ Q( Y: i9 j/ g, g0 i6 C6 O7 M
sort(vItem.begin(),vItem.end());//排序
7 f. x; L. ^ R& C0 C //////////////////////////////////////////////////////////////////////////5 Y# V5 Z8 M. a
//交换2 [, O; T! h; S! _+ \
for (size_t i=0;i<vItem.size();i++)
: I/ ~+ o4 [1 s! H/ l! { {
1 X6 N. r5 c( m9 n! C5 }. D8 N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 G, K6 r: u7 w) x4 D4 Y
pInvSort->Add(vItem.nIndex);
& n, o% O5 K# R: Y8 s4 } }/ X7 V; o' }+ \; J8 h# }# r7 w$ z0 o
BYTE nDestPos = 0;: y5 W5 [% j- c9 f$ U7 j$ g
for (int i=0;i<MAX_INVENTORY;i++)
( W1 @) C2 w. G( I0 K f; [% ?* k {
8 y3 @4 y% v% O' b/ _# T- z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' u' p N! i$ g: \ if (pItemElem)6 R1 o S/ U- P# F
{
! J5 y9 W R" y! U$ u if (IsUsingItem(pItemElem))- ]/ d/ ^! }; d5 I9 o
{9 K3 D8 F" V8 a8 S) P8 J
//这个位置无法放
+ v9 d/ w/ i* i D4 W nDestPos++;
: n- M5 @$ x/ o, z9 R8 B2 I5 R }; k9 _ l/ y; ~/ T& q
}, t9 |$ \7 l) {) l
BYTE nSrc = pInvSort->GetItemSrc(i);1 t6 H, z1 {& d& P& L
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 {/ H& k$ w! } \' L if (pItemElem)4 \. H/ S+ W/ }8 d8 s% G4 E
{! J) P5 K# U/ O D9 Y5 O
if (IsUsingItem(pItemElem))- R% o$ n" m9 T
{
0 M$ i2 `/ ^, I7 X1 R5 _' L //这个道具无法移动,跳过
7 P! Q0 [; j% B7 C$ k/ z% W8 w continue;7 p* h! W4 U; c5 Q2 B7 p
}( D4 ?; K0 G) {% P
}else{4 N) M5 U9 b# F5 y* i! X
//空位置 不用动: @8 F a! C" s
continue;
' N- K& P) N) b+ Q. k }
4 U6 V% ?, i5 {; S //////////////////////////////////////////////////////////////////////////
W0 e0 G. H8 b3 g' a //开始移动/ X1 B4 m* r; @' C% Y7 G) z$ v1 }% \
if (nSrc == nDestPos)
. f0 T: ^* m3 x6 f- G4 B8 ~' [ {3 t" u* l7 @8 ?3 Z+ i4 Z
//原地不动
& I, m, h I3 t) b( K! ^/ p nDestPos++;# Z6 C9 Y. M4 _! r# l
continue;. V2 u1 a9 A2 Z! o9 g
}
) |; J; K2 _6 [* u _) V pInvSort->MoveItem(i,nDestPos);
- F5 I5 j& L5 `/ \& W) a" w g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ `0 m) M7 c8 y5 J0 B Sleep(5);
0 ]$ f5 a+ T* `5 X9 g //Error("移动 - %d->%d",nSrc,nDestPos);
4 ?4 @/ i8 S5 }/ W' E nDestPos++;! W- D) p; F2 `4 Z; g8 I1 ^8 f
}
' ^+ r0 p, f3 D6 R' O; V$ e: R I //取第一个元素的信息9 i. A% Y9 ^/ W4 Y+ ?: y( P# m- e F* b
/*. E; t& K+ i8 o6 W2 V& M
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 S3 c' b( K8 M2 h) {1 S _ {
* ?3 Y5 X5 }- C, u2 ?# a Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 I5 C& i: T, t& R4 Z" Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 t$ i; K9 ^. u* }3 o
}
/ r5 J3 g% C% B, r5 b. p- c1 V0 S */1 ^2 j# i/ {5 o
//////////////////////////////////////////////////////////////////////////( D+ y* k# O: i0 S3 T
break;
$ \. ]- K) z. ~9 |+ Y }6 ]+ z2 j) F& ]" J& l
}
5 r1 G- @) }/ \ w& {1 o}
5 m1 s3 t8 r0 H4 ~; Y' F O8 hm_wndMenu.SetVisible(FALSE);. d; I8 s9 A& g [5 X. c
( z5 |4 n: _9 a1 m; J
--------------------------------------------------------------------------------------------------------
$ f, h( ]* @7 f& ?! J2 q5 W2 m$ q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" A+ ^& p( `3 ~" g! t
{
, \* l/ f3 T9 [; |# J' LBaseMouseCursor();
+ f- ^$ }. D: G; u. D. h5 h}
( V" ^3 N: n9 S/ K+ x5 G1 D- Q% i在其下添加:% i0 ^0 W6 s: N7 O" g1 W H
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ T! _/ f; H# e4 O( b% G. }
{0 j H: _+ B+ M
m_wndMenu.DeleteAllMenu();9 K( E) f$ j$ J4 V1 f' v
m_wndMenu.CreateMenu(this);
" e' w$ V+ X+ q0 h- cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' h+ M. J; Y5 x
8 p: f# a! F6 u `/ f3 H' c9 p6 W5 Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 Q) G; e( g* A- Z
{
* @1 X$ E6 A7 ^$ { //P以上级别才可以删除所有道具
# m- }+ `* L! `# o! L$ B/ F3 @+ L m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 h( [1 `# c/ I" L7 |2 U
}
& M- c" y. y, B: c: mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) c* D0 j+ R3 M% K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; }$ c2 f( \9 I, i) M. Am_wndMenu.SetFocus();3 O! L/ v/ ^2 T5 p
}
/ F% }6 h% z1 @3 K; |! t------------------------------------------------------------------------------------------------------------
' e; p4 i2 T+ [6 N. c- v: p7 @*************************
1 t/ W6 |/ p1 r2 e& c' @6 L* k/ SWndField.h文件
8 p8 m# k5 u2 X! ?2 W: v*************************' i7 _, h; A Q0 m" O8 s8 `6 l
搜索:BOOL m_bReport; W# T* O$ N+ H/ a4 C- M' D2 Y4 B
其后添加:
: v$ G( _, Z1 B: h- K3 j; G) N7 w/ n) x) JCWndMenu m_wndMenu;
& C) J, @! _. C# F9 ?* W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' p. S% B* x0 w
其后添加:' I: N8 Q8 e) a
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 m' v9 r! O: j# C5 N. G; P5 j/ P
/ k# U% x2 v* X9 f3 d( s$ D
' p' q: Q5 D9 j# w- y( ~ |
|