|
|
源文件中_Interface文件夹下WndField.cpp文件$ a4 n9 n+ v& `* \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); f A- @" y0 Z2 P- r7 S
3 i8 K0 r3 u, T1 ^struct sItem
6 g# e- b# k5 {' e{7 D( |% o0 m# ?
DWORD dwId;8 ^( F" Z! h" c1 W2 s$ K
DWORD dwKind2;
$ c L. s) T' o& d3 HDWORD dwItemId;
# j" p, n/ E( _BYTE nIndex;
' B1 V& R- l# e' _7 t7 v# `" f2 D% osItem(){
: M! X2 R4 G, ~. ?0 j0 g dwId = dwKind2 = dwItemId = nIndex = 0;, N, y& L+ {1 s9 ]1 Y8 K* t- H% Q
}
& G3 _ _7 c2 I* L5 L2 tbool operator < (const sItem p2)
9 U4 F' d1 {5 V5 b1 ^. b6 H( p{/ R i6 S$ P9 P0 x, [, O6 q8 B( [
if (dwKind2 == p2.dwKind2)/ c; G2 [$ Z1 Q
{
' R! z5 l8 N0 d/ R/ \1 q return dwItemId < p2.dwItemId;
( R5 s7 I) {5 D1 Q2 ^ }else{
- ]* R) F8 g9 i return dwKind2 < p2.dwKind2;
8 C" f/ Z3 O2 U6 r }
+ w7 j" h* M9 b0 e+ k1 l) I}
/ e' p. W5 K1 W, |) n4 J$ Q; d4 ^$ D" I};
4 Q$ F3 p0 U# ~- S. H* |- h" r9 F. G5 y% Hclass CInventorySort
# S, |9 @+ }8 { J{8 J: j( x6 I6 k' T2 m% o! ^
public:
. r7 ^1 V; n' f s; O* y! ZCInventorySort()6 e/ {) T$ q' H( j7 ~
{
% f5 W, f, R+ }- N, Y m_dwPos = 0;" Y- s0 c- I' a- w; A0 _! ^6 A. R8 F
}
7 A: ?9 j v8 Y5 L~CInventorySort(){}+ k+ P' m2 K+ C2 T5 c; B
private: q4 i" M: Y" L/ w$ M) @* T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 G2 C ~/ e6 @; v ^/ l- R& wDWORD m_dwPos;* h. q% V& V ^
public:0 o0 u" p9 S3 D5 Q3 @* t4 ]
void Add(BYTE nIndex) g R0 }7 z @, z( C; S
{
, x- h' a$ j% t5 f( ^/ a if (m_dwPos >= MAX_INVENTORY)0 }% u1 H5 @$ W' M1 e/ K
{$ S% g: n; I+ ~% b, _ \
return;
* M; y- r- ]+ o% D# A" o }8 i& } Q4 F5 U0 P- Z, t& U7 d/ ~) }
m_Item[m_dwPos].nIndex = nIndex;
$ M# D a8 c! ` m_Item[m_dwPos].dwId = m_dwPos;
f- L( c6 c! L7 \% @" V m_dwPos++;: l: B' o) j* z2 N
}
5 k. N7 p- L% k9 e4 l. O% ^9 ^/ F2 ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ R' n+ A* T5 m& Q6 C
{
' J! w$ [& u9 U% b9 G& E7 Y for (int i=0;i<MAX_INVENTORY;i++)% B& U7 b6 U- B) K& i$ r' _
{) E' P" A& W1 d! L: q
if (m_Item.dwId == dwId)8 J/ r# p8 A" ]
{5 z2 q3 J' t7 J( ]6 B
return m_Item.nIndex;
+ o) B# I2 m9 R0 f }8 ^- l2 \! ]; ^
}
0 w5 a1 n5 s% a* S# R return 255;2 v8 I& h& `. o3 G) Q6 a' K1 \! _( x$ s
}: E' L% A9 y5 m5 h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% W+ k H" B! y) h9 Z% ^- ?{0 y. b( v* e- b6 U& L( _5 h
BYTE nTmp = 0;
" B" t* m/ I& n1 e# _. M bool bDest = false,bSrc = false;2 z6 I0 |1 ~/ X$ ~/ q2 R
for (int i=0;i<MAX_INVENTORY;i++)7 v5 c5 l2 V/ }
{
` A1 N" D3 o6 v" K if (dwSrcId == m_Item.dwId)
5 u, r# N9 T; v {+ f8 N$ _7 @7 f7 e R7 z3 \ K5 d
//id相等 则 改变对应的dest和src
6 }, T( S, l: w% s$ k- v7 [% b3 C nTmp = m_Item.nIndex;* o4 q4 b, b9 j% w/ N2 t
m_Item.nIndex = dest;
$ z. p: Q( H e7 _- y" I$ v }! ^# [1 p( ~! X6 p; g
}
! Z7 A; G+ {$ ]8 Q4 F //临时数据保存完毕,交换开始- [) B' D5 X* D" h- d
for (int i=0;i<MAX_INVENTORY;i++). n' Y3 G5 L2 ?( E+ D
{
! b8 i: X |# k/ t* i# r9 ] if (dest == m_Item.nIndex)
' ~+ _. p1 W$ S {
/ O4 C/ m/ i y3 S$ } //id相等 则 改变对应的dest和src
0 |; u, o" m1 R& ?2 ?4 { m_Item.nIndex = nTmp;, w) L0 H/ H1 p8 V" D5 Y$ c( U
}
" @6 | V) O( U. }" H" ^5 G }
\2 i s" x$ x' C. M* `0 O, O; a}' d( ]" T# h# A
};
% H$ `- a; A* k( c-------------------------------------------------------------------------
) T- e# Y& O+ x9 ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 u) I4 G0 [" w' n: i8 m
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# H3 o) x4 e% E紧靠其上添加:
4 V3 P, G- p) a: S$ Y$ I3 E5 qif( pWndBase == &m_wndMenu )3 _* H0 S- e7 l
{
4 ~$ `5 u: s* g+ y switch( nID )
9 e; _2 h& E# H, E% K' Y {
) n, u0 H5 y9 h2 {7 m) U case 2:
; l) ?( U7 H/ M { X/ I I4 F, y$ a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: t/ z/ \, L+ y& G/ i+ a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 q; d8 m. o, f/ i {% q x) c3 K8 }5 N* a) v
break;1 K9 l+ s9 t [# X% q; a
}
" z. J' W' y: L3 X for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
F9 O$ s- e2 e' J7 D0 ` {
6 Y; u1 A4 n. }6 \' | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& P8 d R& V/ u8 M& Y* I if( !pItemElem )
$ Z& M% w$ J' \' v; `5 d continue;
0 A/ r/ X( j8 {; `4 ^ X if(pItemElem->GetExtra() > 0)0 O: F- [* R8 I& p3 V1 p" V
continue;
Z7 I4 Q: h& H, u% X( {. [$ j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / |8 Y' ]: a; H$ z1 ?3 k
continue;
$ Q# P/ b( I1 ~: r1 l5 \0 q if( g_pPlayer->IsUsing( pItemElem ) )3 T2 M) C8 ~3 b0 |
continue;: P9 X! i# E* T8 ?
if( pItemElem->IsUndestructable() == TRUE )
4 L% x5 ~% K6 D N6 | ? {
2 @1 Z, y5 W! a, c0 \# f g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 j, u+ e* |& X w7 d# [1 f
continue;" x1 ^; b# F0 F& r
}
$ P, ]8 \, J! g, Y1 E. e g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% G2 E8 y6 M$ d$ ]% {6 x }- y% T3 H5 P( i3 Y! z) r% S& q: o
break;
* |9 k% s) U5 n6 Z7 r- O }
% q; Z6 [. [$ q9 Q6 ` Y4 E9 q case 1:1 _; k. ~# T5 b: J$ f* ~
{7 v; `; q) k$ |& q, n* D! T! \
//整理背包
* N& i b* f3 v" |, H% `/ M //////////////////////////////////////////////////////////////////////////3 T- N, o( A; S8 ]( k9 t' \8 Q5 l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 H3 N% q" k9 A. }1 \
//////////////////////////////////////////////////////////////////////////5 ?2 a0 [8 n) n( G" ?
//////////////////////////////////////////////////////////////////////////
! u- f! L0 @! g CInventorySort* pInvSort = new CInventorySort;
& e2 U9 g8 ?9 O& J' f! X0 C vector <sItem> vItem;
) H9 A o' z( P3 E9 _8 p vItem.resize(MAX_INVENTORY);//初始化大小& k# e. D) b. y. n% q
//////////////////////////////////////////////////////////////////////////
4 F! a8 N( T/ |+ A3 I- R( o //填充数据2 \% O% O: M$ H0 u/ [6 G
for (int i=0;i<MAX_INVENTORY;i++)7 s7 U k6 A) D
{; R" @: z$ B7 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 y) R n5 d5 x3 K1 y
if (!pItemElem)0 e! n& h0 j$ m5 G Z" a' @
{- P/ [" u# b+ k0 d9 u
vItem.dwKind2 = 0xffffffff;* K3 K& B$ o2 \# T" s
vItem.dwItemId = 0xffffffff;
* c. ?* D) c" t' X; k) }% v vItem.nIndex = i;/ B3 y2 M H. D7 v, {; S
}else {1 I/ w7 V* b) W$ J, o, P% V
ItemProp* pProp = pItemElem->GetProp();
2 f" u, {3 \; P9 ` vItem.dwKind2 = pProp->dwItemKind2;2 C7 k' x; z7 y9 L
vItem.dwItemId = pItemElem->m_dwItemId;; K; M3 O8 A% c4 g
vItem.nIndex = i;
+ n) M5 X( j: {" Y, y1 S' X }: h1 s: w T- }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 W3 {$ U: [' ~ o" W6 G: M& b
}3 k9 N# k2 }/ {! _9 {, r
//////////////////////////////////////////////////////////////////////////, X* j! e; j, C, q. L- X& z
sort(vItem.begin(),vItem.end());//排序
, ?3 F+ z1 _- S, `- k. F+ x( n //////////////////////////////////////////////////////////////////////////) H* _5 X6 _" q3 y! T
//交换% C5 O8 ~$ g9 \* R8 t) Y9 R
for (size_t i=0;i<vItem.size();i++)
1 `- d# ~) y4 n {/ P) c4 G' ?$ |* y1 y" z% C1 s
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 V/ }" D a! Y6 _( j
pInvSort->Add(vItem.nIndex);
! U! u' d6 U; K5 n0 C. J0 P0 M }) |# t4 s# U J0 o, s c$ F
BYTE nDestPos = 0;# a2 U- ~( O% T9 U3 Q
for (int i=0;i<MAX_INVENTORY;i++). Q2 Q2 ?1 I: a' @2 R
{) C5 f# V" C2 K1 U( k* c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- _" ]5 m7 A& ]( I2 _
if (pItemElem)* @/ T3 e' f) i6 b, f: Z: m* X
{; X+ G4 z$ j. h- t& J
if (IsUsingItem(pItemElem))5 }) o2 c. _6 E# Y
{- N V k# J) O, A
//这个位置无法放- P* h1 K* A1 v* L
nDestPos++;
6 t {. X- d6 g; Z }
6 ]* P; F5 m4 a( v1 i }
q; Q Y4 e! A! E8 ~1 V BYTE nSrc = pInvSort->GetItemSrc(i);
4 V$ y5 m. P* w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ D5 v* ^& v- l6 w! m3 [
if (pItemElem). J' T" A) q+ p4 h0 f7 Y
{1 i9 X! f/ ~# m/ m( R
if (IsUsingItem(pItemElem))
0 o! N: Q m% t0 T, _7 ? {+ j' l/ I7 L5 J/ ]
//这个道具无法移动,跳过
# C: w$ r5 M" R* ]& r1 U continue;
9 C4 ]+ @! I( v }: k8 F* s9 w# m: L* p$ y
}else{
a M# D4 l+ F! v2 Y" q6 _1 t1 z //空位置 不用动/ ?+ d3 R: \$ Q5 U3 r) v
continue;7 T0 Q9 s" j& L9 O6 H2 V7 q% n3 d
}* g3 R9 Z3 H) h+ y( K
//////////////////////////////////////////////////////////////////////////" ?& Q6 e o' M1 p3 ~: `( g
//开始移动8 }4 J/ X5 ^5 h# V$ z! w' v
if (nSrc == nDestPos)- [2 A6 ^9 ~$ r! ?
{
" u8 D& F& A3 U5 u //原地不动4 ~; E. E' e& @0 B
nDestPos++;& r$ j+ p( @9 n# N, V
continue;2 b6 C2 z* d% S- X
}
' A/ Y6 E3 V6 b; @ pInvSort->MoveItem(i,nDestPos);
) l- d+ {' h4 X% n9 M1 C* _( v g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! f/ n1 _1 w O5 k Sleep(5);; w; }8 D! Q; I7 F3 ~
//Error("移动 - %d->%d",nSrc,nDestPos);
a7 V! c, L$ Z) C' ]6 j" d1 \ nDestPos++;5 g }* t. S' k1 P" F
}
/ N; H# z7 ?' d3 {; W' b //取第一个元素的信息& C; k" n/ ] L4 |
/*; ~% L: y: N T' ?
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% o9 y. C6 P: a; Q5 Z8 U4 \: L4 {* @. R
{4 s. Y, S: I8 u% L( I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, s2 x" ]9 t' f. k g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. f2 f* O4 o. f% v- Y' X: ` }
7 i$ x1 K4 i6 f& N */
+ V" G y9 g% z //////////////////////////////////////////////////////////////////////////
* x( ^/ w, ~6 @/ ? break;! D9 s2 Q+ E( k4 c* v
}
8 w& W, ^1 s u7 M# F5 d+ h& j5 v0 E } . b0 f* R6 s# Y( J$ p8 j
}
. D. p% _0 ]; Em_wndMenu.SetVisible(FALSE);5 y! \0 F$ A5 K/ M0 [8 d
0 x7 |6 o% o3 m }/ e
--------------------------------------------------------------------------------------------------------
& ?8 P# p }4 a3 `2 p6 B搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# y+ r0 m, n: [, R
{
" x9 {1 @6 F; C, WBaseMouseCursor();; Q/ A$ T) `+ |) K# @! a
}; E9 q9 X0 [6 B6 {- p* A
在其下添加:0 ^) a% b% M' D! G8 d: o. y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. I' R% k% X( k {! t' C Z{
* Y% m4 s+ m8 ~2 q0 o* m0 em_wndMenu.DeleteAllMenu();$ }) O' _+ m" X, m
m_wndMenu.CreateMenu(this);
' k" M4 A) Y( c1 ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 x6 N. C5 \& P, }8 ?0 M2 a; G
A7 ]9 K7 P2 v' {# ]( h: I
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' p4 U8 C: R7 ^1 i
{# u- {8 g$ p, |7 B+ Q
//P以上级别才可以删除所有道具! k {* ]5 y; b
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ t* ^/ [# s0 C' F' h4 R$ N" e
}$ S. _9 @4 v/ R; V
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) [* }9 ~2 p1 k" G) v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 d0 `. r& ]! v1 s8 [( f; \" n' sm_wndMenu.SetFocus();" M) L) {- }! S5 W& P- I
}& d; F: r5 O* ~( t0 b) D
------------------------------------------------------------------------------------------------------------
' H2 }- C1 E. q*************************
b" E }1 y; LWndField.h文件' I! z# ?; B/ Z/ ]% |. T
*************************- A% a1 s9 x5 ?- D4 P
搜索:BOOL m_bReport;* `8 J% c3 Z$ {# O# i: Q4 C. G4 X
其后添加:4 V2 G/ A# ?; E# C
CWndMenu m_wndMenu;6 h ^+ n( f% u" I0 r8 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* F- }% S. E$ d: i4 f f
其后添加:& p# x% A3 s6 z; U& m
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* B, s5 e" e: ]5 E
$ x2 @# B8 F6 w% U
; L# l+ y4 Y( P |
|