|
|
源文件中_Interface文件夹下WndField.cpp文件
! g k' ]5 i( K, R. f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% j0 P0 d9 m$ }0 z! C V! L/ f6 |' x
; p* G3 |% \( N
struct sItem
, B, \, ]: x3 s+ e E+ |. i: J/ X{
6 d |0 @. K/ Y5 H6 B1 D4 oDWORD dwId;; [8 a7 ~+ w- ~
DWORD dwKind2;, J- P! e6 I. D4 n9 ` Q% s( S
DWORD dwItemId;9 ^+ e+ l/ T% z& r; b5 V
BYTE nIndex;
+ w% W! N" P7 ?' OsItem(){
$ _ W2 P# ?& ?8 q3 m8 x3 W dwId = dwKind2 = dwItemId = nIndex = 0;# m9 V& j* [- T" ^/ i6 w, e, B7 u8 B
}
. W+ _# ^ w6 e0 ~1 _bool operator < (const sItem p2)
' P5 k2 z) |; {# N# q9 {, R5 b+ y{
- M0 z V5 J/ N9 H( K2 k$ B) A if (dwKind2 == p2.dwKind2)
& i+ Q6 q1 X9 H, a3 k {6 e. X! I. ]6 m. s( m* [
return dwItemId < p2.dwItemId;
7 V) |5 s, T0 f* N9 d& u2 | D0 h }else{
) X) V) ~3 o! K$ ]7 }) m# N return dwKind2 < p2.dwKind2;1 F, x. O7 {) W2 \4 l
}
, P" h* O- L5 t; x, Y* L}
; |5 R& g' u: ~ }; Y* k4 `4 Z};1 w! i7 f, k1 P; e7 {! R
class CInventorySort
" k+ G# z) G$ e% U{% [3 v, W- f* b9 c
public:
3 ~2 w- q$ Y9 ~. o" s. aCInventorySort()
- u3 p5 o/ }+ k6 n! v; ~{
3 a& r1 _8 O+ p, Z. q9 O7 j8 a m_dwPos = 0;
, i- H! J2 r& j, v}
B: V. }; a# X) g7 n' l~CInventorySort(){}
. M3 a5 w( C3 ^" F: @) Aprivate:
p! R4 ^; Z+ j( l& H+ a7 msItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 I9 l% Y7 ^! n4 ^2 N. G% O$ N
DWORD m_dwPos;7 k' A+ @) u" v( q
public:0 W. Z ~$ d% [# C0 D
void Add(BYTE nIndex)7 u# E% ?! m! m5 _: D. L9 l
{, n4 g: X! v/ Q' \/ G
if (m_dwPos >= MAX_INVENTORY)
7 v9 Y6 S0 N; {* O {
8 j t7 ]5 I2 I' i; D return;
& x5 w+ }) m3 [& H2 W2 V0 C# `7 [ }
$ s% w% p! ], S' V% x3 K% [ m_Item[m_dwPos].nIndex = nIndex;
C. L4 @. C7 s0 h m_Item[m_dwPos].dwId = m_dwPos; t' ?# w+ l# z+ o* W3 [* r0 n
m_dwPos++;
- z% M3 `. |! g; B' o# R( |. w}2 s2 N! ^( k' R3 V1 N
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ Q# w# ^4 m6 Y/ Y- c- y1 z; t{
' F6 h9 C6 T- a# L( k9 T r for (int i=0;i<MAX_INVENTORY;i++)6 D; h& J" o" H F n* q
{
; i* u. B2 c" d* V+ ^) p if (m_Item.dwId == dwId)
6 I. }: U9 ]- l7 }% y1 Y6 K {' ~- i6 E1 O' _3 w B2 h
return m_Item.nIndex;) b z/ X7 b% r- s, t5 C
}4 G/ P6 C( _- P
}2 x$ c% s% z) i+ j8 G j- B* a
return 255;3 L7 X9 k% o. B" w
}; N+ I, o% \5 z6 L: V' q1 }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, i6 T! C: f1 @, X" D4 I{
: ~, \* F' Y' E0 f BYTE nTmp = 0;7 _5 `, `4 y' k4 Y8 e
bool bDest = false,bSrc = false;' o# N$ J1 L% S8 d! b
for (int i=0;i<MAX_INVENTORY;i++)1 i( Q* X" P K4 M# ^
{
1 h8 ?6 J' e- C+ t if (dwSrcId == m_Item.dwId)
6 A" x) x* ~4 Z W+ C {0 m4 E' {; ? v1 f$ l* A
//id相等 则 改变对应的dest和src: O- D( L: f2 q1 z* D/ [: v
nTmp = m_Item.nIndex;
- l& f" D. }, V' E, o& }$ l7 G m_Item.nIndex = dest;
! }% d+ |7 y+ V }8 Y ?( C3 z7 h7 T; e( A
}
. p, J$ b: \* ^6 b0 \3 e0 q //临时数据保存完毕,交换开始+ O3 a. e3 m' _! ^0 x f
for (int i=0;i<MAX_INVENTORY;i++)- t. D5 j" P) [4 ^- y
{
/ V1 w# o- T8 D. H- K if (dest == m_Item.nIndex); ^( q9 ]( a' A0 y' \0 ]/ f) C* J
{
, L$ v* Z, \/ F- n //id相等 则 改变对应的dest和src
* V* u# h3 R' F$ C m_Item.nIndex = nTmp;
. _# s" K; U" h }6 L% M% l! J v
}8 a9 N) q' o7 x v6 E
}9 J! Q( t E% n$ ]
};
' o+ M- d m' z) b0 S4 `-------------------------------------------------------------------------
( F \$ l- z; N" Y: C) o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 p+ v5 Q- X) q# A& v9 N! C% n% V" e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ _; S3 W% ?( b' i- Z紧靠其上添加:, O! l- h! a, K L
if( pWndBase == &m_wndMenu )+ _ z# h- f; {3 G8 a! Q$ b
{2 a7 {) Q' h# n; J# X
switch( nID ) C0 E- F% E' j% ?7 B( \$ ?, U
{
7 J1 ]; d( l! A" \, ]- e# T! R s# S case 2:) }. J" W1 Q u& M
{8 r1 n0 Q6 u; F) H
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% D$ s/ ?' A9 {, \0 T" g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" R* }/ ^8 V" B/ @; D( k {) g" ^& e# M1 ^
break;% J0 y% U6 Y) Y3 J/ U
}
. n ~) |- G+ e; M! N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); W$ j, c3 R# Q- H* J
{2 j, O4 D2 k7 k7 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- @& q5 F/ N7 t if( !pItemElem )
3 Y! e. S$ W! B- X7 R% c+ a& ]0 S continue;% V: t* T9 o4 S' Z9 R0 [2 [4 ~
if(pItemElem->GetExtra() > 0)
1 P4 I7 z S# ?. J2 u+ \ continue;
+ R0 s+ E7 @; r" _: Y, v8 @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 s$ |" Q9 q! u8 m0 a continue;
; c" F7 V8 x) q if( g_pPlayer->IsUsing( pItemElem ) )
2 R/ {, X$ j& u# H* O* v5 f3 r continue;0 l2 L+ H! J3 M$ ~
if( pItemElem->IsUndestructable() == TRUE )
" t/ E7 z! E6 \8 a {1 p7 I& g" b, u* h+ G. S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
D% r1 p+ q% M7 K" J& _6 T% ~; o continue;9 O8 r9 f; X0 l; N% g& N
}4 ]9 q) U0 D a6 f- u
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. \4 f I* a7 r( ~$ I: b }8 y5 o( a: L- h" u" i
break;4 p- E0 v# s$ |3 h" g9 N; o
}
6 ^' |7 c& ~& U" g: m case 1:
2 d$ k7 x" O% P! [! ~ {! B$ k+ K/ B) v+ D' }" O
//整理背包
: }% |- O( P9 j; b/ o2 S. C //////////////////////////////////////////////////////////////////////////
- W: a( n; [4 t% O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; R; a/ t1 N$ M0 k' y6 f8 L1 c2 q //////////////////////////////////////////////////////////////////////////
5 g8 d8 Q9 g" ]" ` //////////////////////////////////////////////////////////////////////////$ N; J$ k2 j' n/ C6 x
CInventorySort* pInvSort = new CInventorySort;
9 I4 ?( z, ?% P# I' k, o vector <sItem> vItem;/ ~4 ^% M+ S! j" G
vItem.resize(MAX_INVENTORY);//初始化大小2 @1 j/ h, _! h' a \) M5 ]
//////////////////////////////////////////////////////////////////////////
+ |; ^" l4 t' \9 b: B //填充数据7 U# o( c' I' n) W0 }7 A" L
for (int i=0;i<MAX_INVENTORY;i++)
1 t& W2 B+ ]7 d; B2 K {, @* j$ g2 E7 ~( [9 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 V; R% V$ y& d( A2 M if (!pItemElem)
( G+ j$ Y) r- k- L1 o0 v/ e3 @' B {5 ]% d+ M" v4 q; [9 ?9 j" V
vItem.dwKind2 = 0xffffffff;
( j4 t d" ?1 Z1 Q4 a vItem.dwItemId = 0xffffffff;
, Q% G# _+ O7 D$ z' |2 Q- p( q5 e vItem.nIndex = i;
" t0 |3 o5 L% q) D s& i+ i* z, t& { }else {3 X$ r- j2 a3 @9 A6 k9 m% c
ItemProp* pProp = pItemElem->GetProp();9 M& l/ D+ e- ]% \, K9 |& p$ U, c
vItem.dwKind2 = pProp->dwItemKind2;
3 S% `. T i1 r) @" w1 ]& m) n/ ^* c vItem.dwItemId = pItemElem->m_dwItemId; P9 j* J! K4 T8 n3 N# M
vItem.nIndex = i;
8 p9 i7 e) [( o$ Q9 K- B }
6 z' M1 h# j1 ^" G1 L$ x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. d+ _+ x9 \0 F( c% {
}$ ]) C2 D B/ T
//////////////////////////////////////////////////////////////////////////
* I- O$ |0 U7 S6 s* c sort(vItem.begin(),vItem.end());//排序
7 |# R1 g+ q5 E0 M/ |( A9 U //////////////////////////////////////////////////////////////////////////
& r7 u; f4 F' `) x; B& | //交换
C& y8 m1 o5 n5 Z for (size_t i=0;i<vItem.size();i++)1 c. r# H: T& a0 |
{
7 p8 m( q; j$ |1 b4 m2 ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 j( \2 ?- N) o8 @; W, E' {6 C, c pInvSort->Add(vItem.nIndex);3 \0 t; k2 v8 f$ H; H
}8 Y" k4 ]4 p/ S- w
BYTE nDestPos = 0;
3 T; g0 c( e7 x+ z for (int i=0;i<MAX_INVENTORY;i++)2 p6 V, N7 [& K( s- w# [
{! D7 c7 I; |) J' i3 Z6 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' F* E8 _& ^' {) \
if (pItemElem)
: C' Z( L& H& C {( }1 I4 U' K8 s
if (IsUsingItem(pItemElem))! `0 _- b L2 N) O& h- v
{
8 J4 J) z" z* K" y8 G4 S+ A& f. c: F //这个位置无法放7 L$ x( Z2 x) K2 x; t
nDestPos++;2 A1 e0 ~ R7 m" n( I' z
}
8 Z0 U: a. V/ E1 Y6 z, m7 ^& J }
2 S6 a6 R1 l T3 }7 {; B BYTE nSrc = pInvSort->GetItemSrc(i);. c) H3 t: L }8 f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! X- S# ?. L$ K' m& A if (pItemElem)
: i$ }& M- R! s f! w/ D {
0 J! v) z! [! E3 i5 I if (IsUsingItem(pItemElem))
5 ~. C4 r& T: N, }9 Q {& Q+ S6 Y+ }6 K1 |7 c& P; ~( p
//这个道具无法移动,跳过
, i4 P- u; P! g/ ?+ D1 e7 B1 r! U continue;6 y! ]" f, V( {4 E& h- _" p ?" V
}
$ L; G+ E0 E ^/ a& T2 T }else{
" j+ p+ ]$ L& }4 I$ Z8 `4 R //空位置 不用动, ?9 S7 _. ?' c4 b9 k0 I1 C
continue;& |7 s' H; _( I- U" `$ K. D; v
}
" I; X$ \* c! w" Q- E //////////////////////////////////////////////////////////////////////////3 |9 H$ V4 i4 ~9 J& N1 n
//开始移动+ s0 D s6 o( t. ~
if (nSrc == nDestPos)
6 ~* O* a. @- H/ E$ M/ o9 C {' j: m( C2 _! T# P
//原地不动
; q) {2 k1 R+ ?6 V' i5 y nDestPos++;
4 E) }3 I. q! Q continue;
4 C) m! D7 T- h$ d( k& J+ k, w$ ^ }
4 J" n9 x1 K( k/ k5 n* _8 k pInvSort->MoveItem(i,nDestPos);
- M% }0 i, |) s4 y g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ f/ y0 A6 X1 ?8 V8 {' ^ Sleep(5);
1 Q6 q K) R# Q6 O& N* \/ Q, l //Error("移动 - %d->%d",nSrc,nDestPos);
/ ^+ e: V2 v0 S7 b8 |1 O nDestPos++;/ c# D' e+ {+ S( x( m9 H
}7 L& ^+ X! t: n$ V- `
//取第一个元素的信息& M+ a3 l0 l* v* ^5 z
/*8 E: g+ s" C0 F! Q8 W/ {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* X$ Q' Q# q; }! b, y% i {2 z; f# ~+ {- t6 U& N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
?( u9 x; ^% t7 v, _" ~( D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 {3 r+ o" a2 z
}2 z6 K6 R% l* D: E6 G, y
*/ d8 s7 _- s6 Y! G& Z* p. a7 @
//////////////////////////////////////////////////////////////////////////) O& E+ E* t* I9 @$ B \
break;
* Z6 [. Y) X, B! ~* c0 d/ m( f: F }6 A9 N$ W \& M' m
}
4 Q7 F9 q+ ?+ M/ k. W* \& t8 ^, u0 _}
+ L) ^$ d7 X) A* k6 Gm_wndMenu.SetVisible(FALSE);
- l+ H$ H, O( Z( ]0 N' x/ s8 a& u' F( B9 u& O. X, ?
--------------------------------------------------------------------------------------------------------# T& }. f- t" [9 h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# x { |- a; S
{
2 M. N1 G& U/ z; [7 mBaseMouseCursor();
' R B! b2 ?4 _' r- \9 x a2 t7 ?}" v% _, D8 I5 q. ]3 k/ Z$ J
在其下添加:* x& A% ]4 A4 j% r8 E M3 ?* a- h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) N6 F4 y4 L8 Z{( L- M7 G+ v9 X' p# T0 @. s
m_wndMenu.DeleteAllMenu();* h9 @: l7 i6 Q1 J9 f3 `* L7 t" u
m_wndMenu.CreateMenu(this);
9 s, n4 J/ A& c+ @! P' Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# F* T7 x4 U9 ~+ {' ]
! r% b+ R7 D7 s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), D6 J% e4 m, b$ i
{
; u/ u" |0 m J6 c6 w, o2 n/ b //P以上级别才可以删除所有道具
0 O9 z6 ?# N4 ]3 u: g, M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' F+ w6 q9 d) H
}- X% N) S* i7 u" H% f, l4 t, _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& y) I( H$ ~7 U' h; om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) x0 a4 J2 K) f- W* ^5 Y! zm_wndMenu.SetFocus();
2 ]5 a8 _) p. s+ b, Q}
: O, I. r# j1 d" [4 {& a% o6 {5 j------------------------------------------------------------------------------------------------------------( c' P9 O) b0 n4 b% X
*************************. c: m/ b* ]2 d% G5 o' l& I
WndField.h文件+ k) H3 A' M+ L, o
*************************
% }$ y: s, `- G, |, ^搜索:BOOL m_bReport;
+ }- Y6 P4 x2 k$ Z b. y其后添加:% w8 w* k8 a$ ]) V6 m
CWndMenu m_wndMenu;
4 P9 g @9 G. D3 ~+ z, J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 B) i1 ^9 J& r& y" A \. J9 b- r+ H其后添加:
$ H2 R% q$ B. e# b( [virtual void OnRButtonUp(UINT nFlags, CPoint point);; d# c) ^# R1 c. p
2 o% f( ?+ g3 d* j5 b) ]7 N2 n# s
1 [/ { p1 _' V+ A |
|