|
|
源文件中_Interface文件夹下WndField.cpp文件
4 m9 t( b1 A! C+ H搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 s( p7 {- U$ D+ A+ p) T; x' m
9 A7 ~2 `/ W+ q$ m1 E# }/ [struct sItem& k+ F+ S7 o9 P
{
9 S+ `7 d" y8 W% j- ]9 H5 n+ v! r9 EDWORD dwId;
& A4 v/ t/ P3 L( F+ N4 BDWORD dwKind2;
7 [+ z- x' h' q4 jDWORD dwItemId;
7 ]; G6 b, _; T/ Q) n+ ]BYTE nIndex;
+ v! K- L/ n/ D4 ~8 QsItem(){1 n' A3 S; r. B1 N% S
dwId = dwKind2 = dwItemId = nIndex = 0;9 K6 J7 s5 D+ a7 B" R
}
- | i; k) E8 A5 ]5 _bool operator < (const sItem p2)
. b' B0 _6 F/ z9 D5 i{
9 N( f( x, N8 k' c if (dwKind2 == p2.dwKind2)5 _+ m6 k4 M# n
{
2 N; c% d0 C+ G0 a/ H return dwItemId < p2.dwItemId;
: l& D6 m* W' _6 ^" n; C$ ` }else{
3 k0 i! H7 p2 {! }- v o return dwKind2 < p2.dwKind2;
# }5 V# _% W+ w5 x/ g }
: F: j& ~- I% G$ Q}
4 G+ @' U/ n/ z& @" f};0 P C3 d8 m* V9 c
class CInventorySort
/ |2 w9 N$ S. `) j3 H2 \& T{
8 M" I# k* M# j" `0 J3 _public:. F" M: D2 c8 O2 Q; X4 G* L
CInventorySort()1 e- L }) F4 z) i
{
( u) \% d) ]2 Z0 P( g9 A, T2 k m_dwPos = 0;0 A) Q1 \8 n6 O
}
$ m! r8 p/ H+ v( t% y% J/ Q~CInventorySort(){}) g! v" a1 j; e% v% P1 m% b: r
private:& ~6 y7 a% m2 |; h u8 g( n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 ~9 G4 Q& ]+ }: k5 _/ k/ Y8 A5 IDWORD m_dwPos;
& o& C5 {$ @/ T" m$ _public:
\. K [0 K) \. kvoid Add(BYTE nIndex)8 h' M; O# d4 H+ i1 C% _. ?
{
+ l8 J; c1 Z( F0 x" [% Q if (m_dwPos >= MAX_INVENTORY)2 h* j. s2 q- m, C& \0 [; R( p
{ n, i* C2 d9 `% z
return;
" t' o v( {& [ }) n. Y; y* {0 x& r+ F+ k6 I
m_Item[m_dwPos].nIndex = nIndex;
" T% Z- w6 M" l6 F' Q m_Item[m_dwPos].dwId = m_dwPos;
5 W1 L6 @8 d$ U3 L: h& k) i; u m_dwPos++;1 T8 s+ t M4 L. R2 b; Z. W
}
+ @& Q1 Q; |6 U* K1 Y; ~! w3 a r. [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 R, c' e R2 H5 D0 J& h8 r{
& n* `+ P* y, X9 q* ~ for (int i=0;i<MAX_INVENTORY;i++)
5 V4 h) Q2 ^: w9 r4 A {
: N3 q- C+ v! G7 g& r/ P if (m_Item.dwId == dwId)$ A1 l2 g2 i/ N* n) I* C1 V2 W4 s
{+ P, n9 y: J- T3 D* D# \
return m_Item.nIndex;; J# d9 Q: F( p6 R3 n1 b% `
}+ `) K, ^8 P& |, Y R
}
A* W" \8 Q& j9 E1 l6 o- m$ ^ return 255;
6 o% O, h/ l* X% ?! B" b}
1 x8 K# M; k' \ b/ R9 k7 Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ I+ f7 X+ v8 r$ Y* g{
9 F1 `' X% _9 B" j: ]& p BYTE nTmp = 0;; A& h: c" k5 i2 ]) o7 F% |% _
bool bDest = false,bSrc = false;9 l5 @* J2 l0 E# z* J# b
for (int i=0;i<MAX_INVENTORY;i++)
1 X2 f9 J5 `# e$ ]; ?: f {
O. E. j) @- p$ a8 [ if (dwSrcId == m_Item.dwId): F6 s2 w; ?; y. ^( B, u
{7 ^- M4 v+ f5 z3 L. H" v6 G7 w
//id相等 则 改变对应的dest和src. W& f. I; P4 \4 s( o5 e" o
nTmp = m_Item.nIndex;
/ K9 Y6 X* ?1 v% u9 c m_Item.nIndex = dest;3 r9 n. c7 i6 i1 a b! m; K2 a8 {
}
$ y, E4 `+ E4 W$ ^ }
; X1 N" q8 L" c+ Y$ A/ b3 L% ] //临时数据保存完毕,交换开始( O* E% |; P1 t, p. O3 _- E
for (int i=0;i<MAX_INVENTORY;i++)
. C: Q5 E6 e/ N2 a- k {5 v& h# u6 f N, }$ B- f8 |& ]; v8 U b
if (dest == m_Item.nIndex)
! [+ O8 e: U2 E! w8 J Z0 ^$ ] {
. c; U8 }* N0 {0 T/ |/ n //id相等 则 改变对应的dest和src; H' \0 ~; I% f
m_Item.nIndex = nTmp;3 H2 { Z6 p9 p( V" i" H9 G6 J$ X
}
/ K* j* D# r7 _ }5 r; v' X7 c" T _* s
}! H J5 S* A4 L5 m2 C
};8 ~3 I* _& e. i$ e. e' c
-------------------------------------------------------------------------+ ~+ P6 c' w1 q" g9 o( I
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 F- r% z, @& E7 s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* ?. j" v, G' j4 O& o$ w% K紧靠其上添加:
4 O, d6 D9 v* d# F# N3 Sif( pWndBase == &m_wndMenu )* `9 C3 ]# ?& H E2 K, R
{
( m$ Z2 `& a8 M9 D6 x9 r( ?; u+ Q switch( nID )
! O- c4 t$ b0 t! e! r {- T s! i# v, l+ v
case 2:0 N$ b9 @6 {$ M
{
( I( B5 {; k3 P- ~; r3 p //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' z1 u% `0 P( Z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 p$ g$ D' ]! O# |% {3 H9 q( | {
7 x9 j, y* `7 o) ?) _7 L$ M5 D break;& N4 r' o s% o8 S. L
}
- }+ w' o- `! \. V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) w9 g& l# F* T' p* Q+ p9 i
{5 _. l8 P9 L9 W o2 q! l4 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' V( l8 l: N" @+ F0 |. l" G6 \2 E
if( !pItemElem )
# @' C, d1 Y0 k6 c& {5 N" J/ l continue;
% }7 V5 b5 R, J if(pItemElem->GetExtra() > 0)3 i3 h( ~, S2 ?6 `. a( G
continue;
8 ^- T5 F; C* L* o" q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 P# L! G% r: C continue;
* |6 X, H8 q0 w l% B7 d if( g_pPlayer->IsUsing( pItemElem ) )3 K0 t$ W4 y$ A/ e
continue;
u- K' K, P9 s" ]! V: [# L' F: j if( pItemElem->IsUndestructable() == TRUE )
. ]" {) E. }! J1 W& J. N {" t8 ~( r3 B! d* Q& [4 b: G
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( e6 M1 O+ g9 U6 V& @
continue;
# e! G+ H0 ~% ^. ^ }
6 E3 F6 C& [2 M; J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) @7 h( K+ J3 \5 i }
; T/ z6 ?" q* {* _0 U, W6 C break;
( t" c7 \) e! D2 L }% K! f2 ^9 | m+ k; a& ^2 V
case 1:
/ k0 R! B: s' g0 O/ c# i {' F! S* g$ H5 B8 q& I3 z8 ^0 x
//整理背包% n9 I: j6 j' F3 _
//////////////////////////////////////////////////////////////////////////
) _ u4 H h7 _3 Y# q, _ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ Q) u" j( ^+ R: K G //////////////////////////////////////////////////////////////////////////6 [2 D* j& {; x6 f0 b- _+ H
//////////////////////////////////////////////////////////////////////////. \5 d/ ^+ E _9 Z* c: }; w& d
CInventorySort* pInvSort = new CInventorySort;
2 v5 Q" D$ n9 n. P" V2 K/ [ vector <sItem> vItem;5 j$ f5 S& q* \0 d. l8 G
vItem.resize(MAX_INVENTORY);//初始化大小
$ ~+ [: v; s9 q9 v$ P" P //////////////////////////////////////////////////////////////////////////4 P) W1 a, F4 K8 L
//填充数据) @* Y/ d; Z' Q4 Y8 e% y
for (int i=0;i<MAX_INVENTORY;i++)
1 f" l% z% ~' k& |( j {& H# h; G0 F% ~5 L, H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ Z( F8 A! B; ~- y
if (!pItemElem)1 w, E. d# Y8 G" |4 V! K
{; w. \, q. {1 b+ U
vItem.dwKind2 = 0xffffffff;
; e Y7 Q* `( {: U: b vItem.dwItemId = 0xffffffff;
g0 z' a$ U$ G% l3 V* _& h+ ~ vItem.nIndex = i;
4 V9 f4 x2 k) D/ h, s |, v }else {
- d6 y( x' n3 g6 h ItemProp* pProp = pItemElem->GetProp();" h# b8 ]$ K7 f1 D
vItem.dwKind2 = pProp->dwItemKind2;
6 |8 N* r+ w X vItem.dwItemId = pItemElem->m_dwItemId;
6 D1 [, c& x: ?! y7 M2 D vItem.nIndex = i;# c# D$ T: Y) r+ T# ^: b/ c8 g
}
; y8 R1 S* O) M5 v J3 f! ?( f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 a4 R# _* o. n( |" l( c }5 p9 Z* r' H# U8 Z
//////////////////////////////////////////////////////////////////////////
% s( ^$ \- k/ E7 H( e8 R0 a sort(vItem.begin(),vItem.end());//排序3 d) i& ^8 H" ]* q( U, z
//////////////////////////////////////////////////////////////////////////
' N: _4 t2 L1 I! E9 `, d: D //交换4 P) H+ ]- c2 U! L
for (size_t i=0;i<vItem.size();i++)
{ m( y' N; o! l5 b) A {) N% [* F+ K2 J9 w5 m0 f9 ~ o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 @5 Y) N7 b0 Y+ g' e) F
pInvSort->Add(vItem.nIndex);' ? k. ?3 _+ c# Q9 e' _. p
}
0 H& v: J# t. n BYTE nDestPos = 0;3 [, }, n# V& c/ w; |
for (int i=0;i<MAX_INVENTORY;i++)# I( [1 w2 v) v g, E) }
{
7 o0 q7 {1 e: G) ~% j H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ F$ r! b3 J/ t3 X if (pItemElem)
! w# n! b/ b2 d6 K* t9 c9 V) j) w {
! p ` p8 N: }+ G if (IsUsingItem(pItemElem))
0 x% P, [3 g& M/ Q# K {: M& N$ A4 l$ y1 v- D
//这个位置无法放
2 j( F5 u% B1 Y. A* ^! i/ Q7 _ nDestPos++;
9 Y2 n1 U# ]$ Z } _! ]; ^( {9 {
}* E5 f# G0 k* e2 {; H( z) ?8 N
BYTE nSrc = pInvSort->GetItemSrc(i);/ F! {/ [! ~* s, B: A4 X& a; }. _
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: ?- F3 z# m+ j) W( s. Y
if (pItemElem)
$ ^3 c1 s0 i4 k! e) L8 ^, ` {; K/ ^+ b2 f( O2 K
if (IsUsingItem(pItemElem))# G4 ?- ~8 N$ A& w8 J4 E
{9 C5 b# H2 d w- I( V
//这个道具无法移动,跳过
+ @2 r& H& d. H& S9 [ continue;
/ y) ]7 c/ l, H' ~3 b {* { }
5 w% {, g( `) J: y }else{
, X$ y, I) f+ ^+ ] //空位置 不用动* `% v$ a3 O* `! @% l
continue;
9 F- k( [* L! w1 | }, {! j4 M: I2 }8 h) v6 V
//////////////////////////////////////////////////////////////////////////! n: ?; h. p7 y4 }; B; Y
//开始移动
' u; _8 |' W5 @$ d4 @' m if (nSrc == nDestPos)8 }& u+ ^9 T2 m# @, L, _% b! [& |8 R6 N
{: W( o5 r0 \7 x) P( U4 _
//原地不动' t" |1 O% d$ l; l" e: E. h) R
nDestPos++;
" V* w) z3 ^9 }( X6 k# |& @0 h continue;
" N! j. h/ M4 W" l) R, ^ }
6 @# K8 [) @2 G K4 |7 I pInvSort->MoveItem(i,nDestPos);* u% D: B- |' j. q+ F1 ~
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) x: O1 T0 `# ^0 j1 O5 [6 i Sleep(5);
3 d' R4 A, A( O //Error("移动 - %d->%d",nSrc,nDestPos);
: `. y" i2 [5 R0 h+ { k nDestPos++;0 \5 s& m- w6 o7 ^
}' R8 }( x" D4 h# h) F
//取第一个元素的信息6 z! A8 S+ j7 F4 l+ Z/ L+ U8 f. D
/*
# c$ _9 A# |: X! [9 Z$ K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' [8 W7 C! ~4 {7 l
{; Y' |2 M0 M! D% `4 X: V
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ P5 u6 }- c! _ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: ?+ @) O# z, x2 a! a8 o; L
}2 V: c& Y R" @
*/' e3 Z" U9 z% R4 s- x
//////////////////////////////////////////////////////////////////////////
$ N6 `" Z. \( J3 b$ b, f/ Y' a break;( |5 [& F' \& l0 ?: v& \' @
}
6 |. U! W) [9 }4 J+ K0 n6 o }
( _" }$ O2 L6 \4 s' t# B}
/ L) t9 u' |* s0 im_wndMenu.SetVisible(FALSE);) R: {0 t: }" S. P ~/ q' k, l) l
/ E$ V" M: T) K4 Q' ~% A4 K7 ^5 i--------------------------------------------------------------------------------------------------------
7 C- f/ D: s1 `' q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, r Z- b+ f/ G; Z8 ], |{7 O3 t/ U! J! B* `) f* \, m% s1 y
BaseMouseCursor();* l7 v) C* `: B
}5 Y5 e1 A, Z) j/ ~+ s3 g
在其下添加:
$ Z: s7 o5 V6 }" L5 Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% O1 i1 l- ]! H; l9 o8 B
{7 m& P( ]9 C R4 U$ b" y6 g( I1 w
m_wndMenu.DeleteAllMenu();- X2 T9 z! A% C% F3 K& U; `5 g
m_wndMenu.CreateMenu(this);
, y. @2 [# N; x! x" a' b1 Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% ^: x3 l( @/ `6 h
T% ^: _/ _- X) Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( ]6 c' N. E# v0 ]: K
{* ]' c/ b4 ]5 ] a
//P以上级别才可以删除所有道具- K! L: t2 u. ]8 @& J3 u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 S( ^, o1 m( h7 D% G}
" x+ A& v0 M" Q3 H. pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 ^" O" r0 J' c5 C- h" _
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" H$ z( P& y! L: Fm_wndMenu.SetFocus();
$ b6 ]6 z) l( i6 |1 E}7 m- `9 c/ L' s5 q' V6 R! a
------------------------------------------------------------------------------------------------------------
; S0 ^8 o4 U$ K3 K/ b( u3 B3 E*************************$ L4 o& p; d7 @/ ^9 T. ]! M$ |
WndField.h文件
+ F! s( N9 A5 q- B7 x1 h$ z) s*************************
9 W# ?: @% a2 b: w6 M搜索:BOOL m_bReport;7 n$ q7 l. k& F, ]) u1 x
其后添加:
5 u- \ I, Z7 A9 B9 P8 y$ c# |CWndMenu m_wndMenu;
% s& J% g, y( p% D% g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ D2 H9 n+ J" ~, T5 ]2 L* r) y其后添加:! |7 a5 R+ ? o2 J
virtual void OnRButtonUp(UINT nFlags, CPoint point);
" |! Y2 \5 f& Y5 l9 i
$ `# d; x. b% L8 O
$ o" f p4 ^3 o6 F |
|