|
|
源文件中_Interface文件夹下WndField.cpp文件
# |- ^: O4 _/ I3 n: b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! T& J4 b; a( ]3 w* B9 S5 V7 Q( S# K
( m6 I0 K5 f( K) {* dstruct sItem7 D! r, `$ t0 K3 P
{& m3 T3 `0 O+ J7 Z
DWORD dwId;
( U) h; ?# p$ ?7 S+ |& d. \! i6 kDWORD dwKind2;4 m& P# X" w6 e0 p# u' z+ ~
DWORD dwItemId;* Z. g' `0 T9 a
BYTE nIndex;; b; l- {$ ~/ S8 A
sItem(){) m0 ~6 b; r: g2 ~ A" q& {, j
dwId = dwKind2 = dwItemId = nIndex = 0;
+ k; o& y" G9 t( [" w}" m' K) j" r* c9 V: d
bool operator < (const sItem p2)
2 f, E, K# \& C# f{
4 ^* V, E% C: _ if (dwKind2 == p2.dwKind2)
% m* c0 |/ @& [% s0 p8 g% K/ o {6 N* H7 i/ _4 Q
return dwItemId < p2.dwItemId;7 L6 @( _4 d2 `$ c! D
}else{
& |1 m5 V& \+ E1 r return dwKind2 < p2.dwKind2;
$ {8 O/ t4 _, x. } }
$ }. b3 |/ p. H+ o. h}
9 F3 v- c& i9 d};
- M; D3 K1 h. M. G2 uclass CInventorySort; _ J; s5 F" l8 E0 ~
{
4 e7 h4 l9 G- K) E. b2 H, _public:
* z4 N8 z) H( M! x7 kCInventorySort()
, J$ f- c4 E& @$ q{
5 n; ^5 |' W! c m_dwPos = 0;6 u# N8 L$ g3 I( R7 h
}
; B: ^6 q: N! c2 {" L' r' {: I~CInventorySort(){}) {6 d: K: z% g( v0 e. N, h9 J
private:
+ Y8 a5 c& N1 bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
N+ ` `5 t: d( @1 P8 A4 I qDWORD m_dwPos;. S# x/ Q& H# [ f" S0 F! {- o
public:
! B" R! z: k7 |" i2 D% @; `void Add(BYTE nIndex)8 `. |! M( y, D0 h
{
5 c- Z: G/ D8 G3 o, b/ C if (m_dwPos >= MAX_INVENTORY)
/ `) b. Y1 Z' B* A, j$ w' k- p {
+ U/ F$ c: }) B: ?4 `# G' f# b return;
7 U3 v7 F0 W$ G- h4 V; U$ H) U# y }
A: }8 Y# k' n- {3 W3 f6 k m_Item[m_dwPos].nIndex = nIndex;" K9 o: ~7 V7 G2 @* _) T
m_Item[m_dwPos].dwId = m_dwPos;6 @- L- |& W7 ]5 |) E9 `2 w
m_dwPos++;
- E- Q! r2 V# x I" f9 k}' D: C2 Y, T! \6 a ~4 H' X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) e9 X$ n; q1 ]3 B+ O{6 s, `( }$ D; S
for (int i=0;i<MAX_INVENTORY;i++)- P6 O) A. m8 O; I: D
{" F( x7 Y5 U/ z4 R8 N
if (m_Item.dwId == dwId)
9 I: Y0 L$ m' y3 J2 L! m {
u: N1 R; t7 R: l3 I% v: I- B return m_Item.nIndex;
& S- L$ m }: ~8 ?, a% e ^1 n }* T+ m: `0 R% ~1 O0 \2 T& m
}
2 g4 K" g6 Q% }! Z3 \ return 255;4 a3 D( s1 q1 ?& a6 M% j
}6 R" u; x: a; G& ~, X
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ T8 r# R- {3 ^9 V" f v
{ Z! C# I$ M" U; v" X% K% S% p, S) F
BYTE nTmp = 0;/ t5 @5 r5 d% p$ v8 l$ h% _8 p
bool bDest = false,bSrc = false;3 B" Y- U* e! P& ^& I* o; S! K
for (int i=0;i<MAX_INVENTORY;i++)* B* S0 [: N( X+ M$ n, m, T1 x
{2 L6 z8 ~3 P8 ?# i
if (dwSrcId == m_Item.dwId)
: N: ~5 B7 A$ j {1 R& ~3 F$ X8 J1 M! F
//id相等 则 改变对应的dest和src& K3 v& P, {% h# I
nTmp = m_Item.nIndex;
' A! l, v# ?* {! D8 W7 T/ a m_Item.nIndex = dest;
% H5 s1 j9 _& k. N8 W( d0 s }! q1 B; c6 I7 {5 ?# a b$ _% g4 W
}
7 |9 K0 `$ u! I6 S0 t //临时数据保存完毕,交换开始. \; u* U# E7 B! \2 E" Q1 d1 i
for (int i=0;i<MAX_INVENTORY;i++)# s, G! n9 [: t* D$ R) T. P: [
{
( i6 f2 S% `6 t1 h if (dest == m_Item.nIndex)
9 u! Z X; f; f; H h& i {) z9 I7 G4 z$ K2 h8 j8 C) ^
//id相等 则 改变对应的dest和src% R0 ?$ z1 Z- @8 h
m_Item.nIndex = nTmp;
' S" _& b: ~4 I7 b; R+ d* @7 N }
: k% _0 e+ _, N- N }
3 h, f3 P* p( {6 O( h; ]+ \* V}% N8 v+ }. F1 N/ I6 q
};
# N% B( \5 B2 s: X+ G5 b9 A5 o5 t! _-------------------------------------------------------------------------
( `7 W' r' [2 l1 l r/ s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! n! b. d# M( D. Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); D# S- ]: t' S( \
紧靠其上添加:
- R5 L6 d' l' U2 Hif( pWndBase == &m_wndMenu )
4 R' k/ F: i- j& `* m{, z2 k2 u5 V* W1 \4 o* N
switch( nID ); \$ Q. k+ r: s/ o0 p
{
|$ W4 o3 x$ G, ]& o4 b" B case 2:+ z! a1 j; L. z4 X1 q9 P9 g2 R9 p
{
: r7 j/ c4 ?# R) Z6 U; \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, S% L7 H$ b1 j2 \9 j/ g8 u, R! X( I
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ W, p, l$ u- x% i {5 a0 E) s0 Y9 |7 I8 t
break;8 a, D% l5 o n/ o+ o+ h% I
}
$ A/ F; a" \0 q' M' E! }1 h5 [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 \8 B: e) o8 |3 D2 G {
2 x& @& b2 w1 M& u& w* y" Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. t; \: \$ X' q; ~ O. I5 [ if( !pItemElem )
2 s: a! D2 V2 s4 f continue;+ Z y- W. b7 h/ R3 e
if(pItemElem->GetExtra() > 0)$ i2 H1 m. ?8 p! t% V
continue;
& e, p% B% O4 H3 g if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 J) W/ j# Q. E& t, o, p, k
continue;5 _' o& Z8 {9 w2 v6 x# ?" h& Q' [
if( g_pPlayer->IsUsing( pItemElem ) )9 w4 D7 t* G: B: Q2 H5 f
continue;
; R/ l9 e% Z. w1 G; o8 N8 c# X) v9 J4 n if( pItemElem->IsUndestructable() == TRUE )
" [5 [, O7 }" n) B0 b: P% B8 | {
$ _7 H+ Q% f1 i' y" i0 i' c g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* _6 [. U, ~( y" X4 {
continue;+ I6 B7 F$ G' A: n& a+ Q
}
7 d v+ h+ `0 l( o0 J6 k' e g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 V$ {% d( X* ]( ^3 F6 P6 l }
0 n+ o$ p: q( s9 b* ~' H" F break;
g* b% m. O m. s: C4 t }( w, B2 |7 { m' |4 A% L
case 1:
" ]: j) v$ C* K {
- |+ s3 B: w) Y7 G- ` m //整理背包) V: `9 @ z( a. \
//////////////////////////////////////////////////////////////////////////
( D* X, g* g2 [6 ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 I+ Q. X0 d) z! t" d' F$ J: p
//////////////////////////////////////////////////////////////////////////* p) {" q5 K+ i" _" M. c% o
//////////////////////////////////////////////////////////////////////////! I3 m. U7 r$ L' ?
CInventorySort* pInvSort = new CInventorySort;1 E1 e- Y& C/ ]# E7 L( B4 J _1 h, G
vector <sItem> vItem;1 u' r/ q* j9 l3 x# I4 X; J/ Z
vItem.resize(MAX_INVENTORY);//初始化大小, R) e; l5 L: f' E- y
/////////////////////////////////////////////////////////////////////////// _1 D8 B' [ v5 b8 q: W, S `
//填充数据
) b+ R4 D# f1 R5 s for (int i=0;i<MAX_INVENTORY;i++)
) n! \ z3 B/ C {" a8 g2 R1 H" C6 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- @8 R V/ ]9 s o7 u: [ if (!pItemElem)
+ \8 q$ b- M% b9 a7 F {
0 K' K& G M! I$ }2 Q vItem.dwKind2 = 0xffffffff;7 v4 P( M: E5 J0 f& G: `" ~
vItem.dwItemId = 0xffffffff;
! u. h: L: l! O vItem.nIndex = i;- a& N. B+ l8 }. T$ j% S- r; b9 \
}else {) M: @. O- d8 f% l2 K
ItemProp* pProp = pItemElem->GetProp();
# e1 O* n7 C" _& K6 E/ W. B vItem.dwKind2 = pProp->dwItemKind2;
# B7 E! c5 @/ P& _, z/ t vItem.dwItemId = pItemElem->m_dwItemId;( ^ H/ f6 ^ E, {7 o" Z
vItem.nIndex = i;
! q0 y: n' ?; g3 ]6 V }/ n- e f+ i, V5 J* v4 r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 `% E1 F) E3 `- E7 C5 ^ g/ u2 J }1 ^) X7 J1 v+ L8 C, L# ?
//////////////////////////////////////////////////////////////////////////5 u5 W! N1 u& F9 ?( g; V
sort(vItem.begin(),vItem.end());//排序: j( B$ ?' n3 U3 t' v. o
//////////////////////////////////////////////////////////////////////////; F( ?6 U; ~. R2 v C
//交换
/ t6 n) n& h4 ]( c- b for (size_t i=0;i<vItem.size();i++)
$ g8 T: y; K. o$ e& A1 }. { {2 E% V0 r8 }2 J# [; S
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; ]- k7 ]& i" u, s4 L pInvSort->Add(vItem.nIndex);; Q1 P: l+ `1 x. I4 V# {
}9 K+ h/ @, `; H" ?
BYTE nDestPos = 0;2 |) I' ?- A, {6 l- y! m" k2 B
for (int i=0;i<MAX_INVENTORY;i++): C9 \+ ^6 F [5 A( z
{
+ I& z! D7 W, J* R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 a, z3 s$ X$ ^+ r: c. a if (pItemElem)* }2 b1 O# u3 ~1 N
{
# p7 k& e! N8 ?) ?1 X$ K' K7 \- j if (IsUsingItem(pItemElem))
9 l+ p5 z) p4 }, D: F {" J9 I9 u& d( n6 C$ }
//这个位置无法放, ^2 g9 l7 U( P, s2 ?& T, {
nDestPos++;
4 t: H3 _3 Z [4 v. J5 q5 K; s }
: A4 r( p+ e+ V. `/ U) E+ I }
0 A }; Q2 ]) v* C/ [5 _8 } BYTE nSrc = pInvSort->GetItemSrc(i);) }3 Q: B9 {5 Y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); B) |3 f4 e; X% q, y6 x
if (pItemElem)
1 d; w/ T+ b) D, ~& v& ]$ [ {
1 n% j6 r# Y3 p) R: \8 o$ e if (IsUsingItem(pItemElem))! @) Z2 X! y0 d5 Q
{
6 @+ ~: T" g8 z# Y; f //这个道具无法移动,跳过
0 \/ _* S, b$ S0 K9 e continue;. C# C) \5 h) q
} N; e% ?$ ]' O/ [% o1 I
}else{
% F2 S7 m1 u/ j* u1 _+ h% x8 c //空位置 不用动
" y* V( d, K1 ~. d& p( q continue;
* M0 c. a9 l7 C% i9 y: Z }# s' u! A' K& T# `5 B6 g
//////////////////////////////////////////////////////////////////////////
4 n) g- j: D! Z //开始移动
/ V* t# L2 p5 p if (nSrc == nDestPos)7 E; U6 U1 R' C7 A3 R. M
{4 g E7 u, R7 b1 G7 W7 X' \6 V- v
//原地不动: Q* d E) \* f) X& R
nDestPos++;% s9 B! \ L7 t/ h' l& ~2 Y
continue;
7 o; i$ e+ I1 B3 W _ }4 ~+ P8 l; n! }
pInvSort->MoveItem(i,nDestPos);
7 f3 \+ C! j. {# l2 b$ @7 u g_DPlay.SendMoveItem(0,nSrc,nDestPos); u$ ^6 w) k/ @* r5 U4 {
Sleep(5);& W# g1 O+ ]3 p1 p: @
//Error("移动 - %d->%d",nSrc,nDestPos);
2 { d; [8 ~$ H, a nDestPos++;2 C7 D+ k6 f7 ]! A$ h& Y, Z
}
& w1 G' g: o* o7 Y# d //取第一个元素的信息5 |8 R8 x/ v& c4 l' ]
/*4 Q1 R% N4 Q4 Q9 X9 X6 y9 u7 L
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 t5 _3 v0 X7 Q( Y2 I
{% E5 d3 c6 a4 t/ o% \& y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ @1 H# R; U6 ~4 S7 F7 b* D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& w" O3 R8 Q7 }7 O. E- a8 ? }
/ N/ Z# V( `% q/ Y */3 J4 U; `# _: V$ {
//////////////////////////////////////////////////////////////////////////2 P% A7 f. J0 E
break;9 B0 ]* ?) v7 g2 B/ [7 m
}
# m% W& a5 V" X; E8 Q' ?8 u2 A7 I }
2 ~/ Z* r, H/ o% T$ x' {( ?0 G: v}! X9 D. @1 ^, i* Z( q3 u8 K
m_wndMenu.SetVisible(FALSE);
2 q8 f6 P! T W$ T5 t, r
& l; |* o1 Z. m- C/ ]) r+ P7 E--------------------------------------------------------------------------------------------------------
4 h1 i+ i5 { ?, D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! l3 L0 I2 H/ E; y `. ~{' u2 {- Z1 F" U. v0 Y
BaseMouseCursor();
; j2 f! W }* z- X}! i& D. j$ y, h2 w! h' K6 e
在其下添加:" H; I- T( w( Z s9 C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ H6 r# i- o4 m: s; s% @+ ]& t{+ [! h- O6 ~ V5 W& Z# |
m_wndMenu.DeleteAllMenu();& Q: ~# O$ K8 j; i ^
m_wndMenu.CreateMenu(this);
. L4 g+ o! c0 z% k2 B' [& ~2 Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 j! v8 a( J- Y' Q. W$ _ y- @% @. p: u: l4 O# ^1 K
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( F; p- h% l( y) Q$ A. L{# `4 T. q: X& I5 U
//P以上级别才可以删除所有道具& a9 Y. E7 F! R) c2 Z& A
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# r! Y4 l$ A. Q: d& Z
}$ _$ R# Y8 }0 y7 V) x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 X; X0 _* g/ R- t9 X% vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 D8 L9 Z0 |5 O: J0 a2 ^
m_wndMenu.SetFocus(); r7 ], k. L4 ^
}! p/ Y: X+ e# C; D2 u, g9 f
------------------------------------------------------------------------------------------------------------1 c7 ~& Y3 r$ u+ i3 a
*************************
/ X3 y( W7 q; t5 o7 \WndField.h文件
- c7 K# w4 `8 g. X: W' ]) @*************************
j0 `+ ~ L9 [9 c1 Q# Y搜索:BOOL m_bReport;
/ N7 W% O- `. N3 z其后添加:: x' z$ n& c s6 i8 s
CWndMenu m_wndMenu;
0 C" D% v8 A3 i0 V0 D S# u# F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( K# q# W2 v- E: ]' R0 G
其后添加:
6 h* {/ B& G# ?! V) \- Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);+ L) ^+ O% x" I; e* z! y6 A
+ Y8 L. }! q, [0 v: g9 k- o; @2 [! b7 C, n7 _: G, A
|
|