|
|
源文件中_Interface文件夹下WndField.cpp文件
6 D4 Y% h, f% O' a# N! W/ j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( @4 A( c1 M: {+ l% c* k
# X) E4 i0 x& A/ d Z
struct sItem/ k% w7 s0 [# o6 e% v7 N6 s3 [0 F+ s
{- z/ k0 e9 \/ T$ P; ?! l
DWORD dwId;
2 @7 b; I i8 |1 HDWORD dwKind2;3 `. `1 T, j. U" | _( X
DWORD dwItemId;
7 O! \$ j) l9 s; z7 P! s, jBYTE nIndex;' q3 N- F5 a) Y
sItem(){2 i Q" Y2 }8 I2 C
dwId = dwKind2 = dwItemId = nIndex = 0;
6 y. ^0 |% k, H" S1 {' C}
6 e J, S% [- ^( V/ H @5 s; Ubool operator < (const sItem p2)5 w( L( V( v; ]2 g5 z
{$ m3 v/ O, U- e& X c
if (dwKind2 == p2.dwKind2)
9 f2 z6 j0 x" M; E3 y5 {/ V6 O {! ]9 m& E7 |* V+ t1 @4 H9 F
return dwItemId < p2.dwItemId;1 ^2 x; m& o: h5 A! B9 j
}else{& A' }) Z0 ~, o
return dwKind2 < p2.dwKind2;
- V- D! A o9 c9 N5 O* h/ Y }: |3 {- V+ G2 a: s$ V1 ]
}
* K2 l( c* |- C};: m: x6 T4 b2 i) \# K! S" d) i
class CInventorySort
+ @2 I" n+ S% \8 u+ W' i. p" i{
7 A7 K9 l5 _ \+ t! tpublic:
5 `0 n4 O4 ?# h4 N( I8 t" Y8 [7 vCInventorySort()6 M1 D4 |' @% P5 d
{
' s8 X6 K9 R& r3 z8 @ m_dwPos = 0;7 b) p8 D% f/ p; @
}
P) V: ]0 u U/ |~CInventorySort(){}7 w9 J2 K7 x3 f, c/ K" H0 b
private:
! F! l; N9 p5 \- hsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' U5 r" K& {2 N& m
DWORD m_dwPos;7 H4 Q. }8 [+ }1 b% v5 Q- h
public:
9 j0 J5 Z7 J- b& ^/ svoid Add(BYTE nIndex)0 ?' V8 h4 o+ h9 `* n+ n
{, f e% f7 b1 ^6 n$ E
if (m_dwPos >= MAX_INVENTORY)
; C% P# x! G8 G ` {: j8 T3 j8 [) y3 [9 v5 @
return;
" y c6 K6 P% k% q6 k% V }
1 s$ _, c% t9 J# x m_Item[m_dwPos].nIndex = nIndex;" d( j$ d; f( T" h
m_Item[m_dwPos].dwId = m_dwPos;
% ]/ E; ?' v u; U4 u% ~8 ^& ` m_dwPos++;
1 @4 @6 P k- d6 `9 l4 m" Y}
3 }0 |8 @- h& `# J; s5 T) D$ Z, h7 {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* w6 O8 _ w* d" D2 p$ _! @" D0 ~ w
{' ^: \. Q# I4 e, I: B
for (int i=0;i<MAX_INVENTORY;i++): i9 r( g% v. q
{
o# c# P9 M) f" | if (m_Item.dwId == dwId)
$ L: R: p) l, U6 Z- _. T8 U; I: i( U {
; R7 w5 l2 r6 @( A' f% I return m_Item.nIndex;
+ o9 K5 m( l; y9 d }
( D0 A1 o1 q% \+ V! w }- k4 ?9 D" p( I" T
return 255;9 U" ^- ?; Y3 {6 h: q9 r! t
}
) a6 K/ \' D1 G Rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; t; B" P4 `, j1 J
{
, l& e; _! d) b" ]) m! W BYTE nTmp = 0;
# t# @1 t' o" z& @ bool bDest = false,bSrc = false;
/ m# V1 B# d8 ^9 ~) R for (int i=0;i<MAX_INVENTORY;i++)0 y. B' a8 i' x8 i# o7 K
{; i3 f4 F, W- `5 ~8 @
if (dwSrcId == m_Item.dwId)
- |/ g R G- x$ K: M; c0 A {* f5 h/ u7 p4 Z5 k+ z
//id相等 则 改变对应的dest和src2 W. ?. S% P% h' A0 }! P
nTmp = m_Item.nIndex;
% \$ [# x i# j. ^; j m_Item.nIndex = dest;
# J7 T3 W! c- v; o }
1 l6 o0 b: Q2 _) d6 | }8 I7 f$ P1 z8 R z4 I
//临时数据保存完毕,交换开始6 }" E' S5 |% S& e+ @/ y$ A" S
for (int i=0;i<MAX_INVENTORY;i++)$ Z& d A, ?" d0 |; ~* R' d g
{
2 y$ I+ \2 r1 d, C7 b2 M, r if (dest == m_Item.nIndex)
" L b& {4 }! } {
; k1 q' p: k; A, Y6 Q //id相等 则 改变对应的dest和src
+ m9 k. |+ z8 P/ R" k0 u5 K m_Item.nIndex = nTmp;
3 T( B9 w# |9 C }! q9 {+ l1 i% d5 ~: T
}
- |1 @* l1 Q4 G" Q4 c( j; f- U}! D- C4 D# z3 t/ g" X A
};0 T) l# ]5 Z; E- ? [3 e
-------------------------------------------------------------------------
% r7 d0 c4 M9 o! E, T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 u8 ^- u% g1 o+ M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 p' J, u. [5 `+ n) G
紧靠其上添加:7 S6 [6 ?7 m* A7 D) i4 w
if( pWndBase == &m_wndMenu )- W* Q0 K$ u N X6 Y# d
{
: S8 {/ L5 D6 X8 n switch( nID )
) y2 l7 t/ j6 L' r, K0 A {1 O% V; A4 q$ U7 ^3 r( S# B5 A3 a" x
case 2:
2 x w( c8 ?) [9 N( v {, y* z; Z0 Q" ]
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' Y% `1 k4 d: Q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* V V( d/ i$ f/ A3 b" u
{
6 ?- u: ?" e/ c- I; u break;
9 S$ H+ K6 Y& o7 L: A5 C% G }6 `9 A# K8 p# {& c# j8 z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* J8 ^/ G4 y& G t# \/ d- H# O
{
' R# G4 z1 c- q }: Z. B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) u) f3 {2 b5 |3 R- h: t1 i0 B6 z
if( !pItemElem )! L( [% X1 @' Z" R1 \
continue;
% D& Q; C: O$ ^- B if(pItemElem->GetExtra() > 0)
7 U. r2 V! J2 X4 x$ l/ {+ [ continue;: p. G# Z) j% f9 d) r5 z' Q0 q7 C
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 H) t, k! P g& W+ ^% J2 {2 w' K continue;
2 @6 g) {" i9 T if( g_pPlayer->IsUsing( pItemElem ) )
1 s1 ` |2 H- w continue;! ?5 O: U5 a) M3 c; w- X
if( pItemElem->IsUndestructable() == TRUE ) i8 l2 j8 f B0 S6 t
{
; e* b' `& f- A( d9 V9 g/ z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 A- J/ ~* p; D0 W. e0 { continue;
3 w' m$ [( t$ K; N }! J1 v1 F* j0 v8 g" J5 B) y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 o8 v$ m: c/ K6 Q9 O+ w }4 H/ M/ L6 Y# Y+ @- [: ~
break;$ C$ E ^7 b" P/ \: Z
}: x8 P6 g: F# V; _; r& v
case 1:
) b& j# j% T+ t( L7 I6 A) \ {. g) ?- ^0 I4 s3 s0 N3 z
//整理背包
/ D* T0 A( Q/ O: ?* r //////////////////////////////////////////////////////////////////////////
3 i8 h5 T) e& `& c/ ?2 F! N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ {% R. Y4 M$ t: _ //////////////////////////////////////////////////////////////////////////
+ E# X8 ?. u$ E9 n2 U" d( P ////////////////////////////////////////////////////////////////////////// y8 S& o# M1 S: Q
CInventorySort* pInvSort = new CInventorySort;' i3 l7 {! e8 O: j7 A/ I
vector <sItem> vItem;
3 r9 v! H) ^' W; E) x3 Q vItem.resize(MAX_INVENTORY);//初始化大小$ |$ T& c6 p1 |+ p
//////////////////////////////////////////////////////////////////////////& c/ P; s+ t4 C0 D" E) Y
//填充数据
. e* p/ L$ s% X! ?6 Z for (int i=0;i<MAX_INVENTORY;i++)$ r2 Q6 n4 p' f3 W
{
9 w! _: B) v5 G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# W; E$ G! {1 n6 O @+ ]: L0 U1 G if (!pItemElem)" F9 Q) [, W6 G M
{/ V* B( h2 f( k9 d8 t/ T, w
vItem.dwKind2 = 0xffffffff;1 M5 n' Y" [% ^% k' V* H/ _2 P
vItem.dwItemId = 0xffffffff;
, y6 e5 z4 \* W. _ vItem.nIndex = i;
! Q4 }1 u& j, ~. @; T1 h& [ }else { B, ^4 i3 [: ?3 c
ItemProp* pProp = pItemElem->GetProp();) w5 p0 q+ |/ O3 U
vItem.dwKind2 = pProp->dwItemKind2;
- Y3 y! o C! F! B vItem.dwItemId = pItemElem->m_dwItemId;
2 o( c3 b5 H0 M4 u vItem.nIndex = i;) j: V w- I t0 Q' Y4 U, E
}6 L, l7 d% ^4 m1 J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 B) N W' e9 F. [* Y' e }
3 v' V' _) C: r& P' _ //////////////////////////////////////////////////////////////////////////( |$ M' Y' d# W* @$ B1 J- S' a
sort(vItem.begin(),vItem.end());//排序
. A/ n# E. o; w8 N( \/ D6 z //////////////////////////////////////////////////////////////////////////6 ` ?6 o' t" r1 _/ J' [& J
//交换: a7 D7 v6 _- C8 N: H% C* d
for (size_t i=0;i<vItem.size();i++)
. ^, B2 h" w, i+ a% o8 {* B {8 p$ {, Y P3 w
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% s, S8 g- G- D1 G/ @
pInvSort->Add(vItem.nIndex);' V- D6 e( M4 k5 Y9 ~
}, v$ a: P4 m5 a: p& L6 B- C. N
BYTE nDestPos = 0;
& }7 \0 w* [; K for (int i=0;i<MAX_INVENTORY;i++)
# p3 P' @# v& g! q3 y {
! k5 x, l0 D! O' h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" R2 K7 f) h K4 s" X# O if (pItemElem)7 z# B0 A8 G; U6 `9 }
{% ]4 r c8 `# a& }0 ]8 w
if (IsUsingItem(pItemElem))6 u8 |: a7 b* L. A& F1 w* Z' c! O
{1 c5 q o, Z- j
//这个位置无法放/ ^, f2 i2 @' g0 x* _
nDestPos++;
, V q& Q. J/ P: r4 e5 h% h }
" d3 P- Y4 ], V4 P' F }
% z& e; L- G$ z% s* Q" m# v BYTE nSrc = pInvSort->GetItemSrc(i);
6 G( c7 x# s9 C" a* o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 W! f0 J4 ~' b+ G5 X( v3 U# B! a if (pItemElem)3 s' \- F4 g" a7 ^$ V
{
$ d4 |6 g$ g. R+ x' S) T' P; K if (IsUsingItem(pItemElem))
4 [' x3 a) l$ F {% V* z* F+ E4 l Z# M: I
//这个道具无法移动,跳过
5 ^% Z0 e- t S! i continue;
7 z4 d4 M6 d& F# ^/ B' X }9 `4 G. d9 _% W, U
}else{
3 { h" ^7 [ o# S5 [( I9 m2 z$ }; n- Z //空位置 不用动
$ b1 R* r! q# Q- H1 Y& E n continue;
- M, j5 [* a, a' Y }+ Y5 t; V0 n+ i! H
//////////////////////////////////////////////////////////////////////////
$ t& _$ f$ t7 O0 m* a/ W //开始移动. ^$ Z0 G: l; O" Y, ~
if (nSrc == nDestPos)
8 {8 h2 v* K% X& N- ?% @ {1 J: h4 o2 W+ O7 u/ w3 H, g" l
//原地不动
6 Z9 z( s2 Q! n O9 X: M nDestPos++;
7 `, `3 z& q) T/ a2 F4 O z N/ ? continue;% J( j0 W7 O9 _- r# A+ Y4 t
}( v# C! h4 m3 l
pInvSort->MoveItem(i,nDestPos);
" A0 S2 n8 G( G6 f' p0 T% b, w g_DPlay.SendMoveItem(0,nSrc,nDestPos);
v; r2 j4 y" l3 d; g Sleep(5);/ @( F8 k4 Y: W3 |" b! i
//Error("移动 - %d->%d",nSrc,nDestPos);. V3 N# E0 v" K; s& q6 @
nDestPos++; C; R/ U2 M+ |& g; ?
}7 e: d: I6 k! H7 |4 X: z- M/ O7 I$ e
//取第一个元素的信息
& u% W- {+ U# I$ q" S0 A /*
0 [8 E% [7 v; C: } if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): e5 z4 z( O2 @/ F
{
9 O( N* A" @" g Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 u. p4 A! W2 d/ I* \: m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ \+ J# V( T% o
}
: y" j1 ]+ s- y* A3 l8 x- N- V */
! r6 j* w! A7 F0 C8 { //////////////////////////////////////////////////////////////////////////+ I9 u4 U8 A5 G6 v( v8 Q* h. I3 k
break;9 R1 l- W4 m: u" {
}+ w( o9 T( {+ W, J
} 5 f2 D( y, {- l: N7 s
}
# i6 V$ Y5 |9 [' rm_wndMenu.SetVisible(FALSE);
1 ` w+ R4 ~# A
/ E, ~$ l- B! ?" L8 M; J--------------------------------------------------------------------------------------------------------; i2 o5 r8 i4 A0 p: o M: P2 |9 \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 E% m( A% w2 }6 Y+ f1 d
{
; M$ B1 Y- m3 h6 Y/ P6 cBaseMouseCursor();
5 n! {" V" a3 N}$ M8 y( ~1 u0 t2 Q! {) O
在其下添加:' c2 ~0 p: K& a$ }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! ^/ A, ]' K! l4 n- a{
3 q ]! b0 i) U4 P, K; m+ ]5 um_wndMenu.DeleteAllMenu();6 g" k! A' u8 |% A6 A( S. Q6 [
m_wndMenu.CreateMenu(this);
/ I: o& i; w8 s: B5 A1 um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& w6 M) d8 { u& e
- N/ T/ z% E% Y" L; u* x* \ @. s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 Z- {( }7 | A' [; `* `{3 q7 A+ q3 ~& f. W5 }% d! y
//P以上级别才可以删除所有道具
5 F+ s, Q1 H4 n4 C# [# w# Y5 v4 F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ r/ l; z/ z8 b1 I, j}4 ~' ?3 R( { m' F# N
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 c& Z- m m0 l. w. r. u5 g# ^m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 k) W# S0 m2 @* d% s
m_wndMenu.SetFocus();
" \7 e; ]! w* o: J( r}4 w7 _; s7 i7 h+ J
------------------------------------------------------------------------------------------------------------
" w9 T1 K) E, \2 h& f# i D*************************' e! y. K3 w# H
WndField.h文件
% l, x) m) K* i' \3 ]) }# T1 m& s" i*************************
9 Q: j+ A' _. K; a& x: Y4 W搜索:BOOL m_bReport;
) t; W1 d: A- k- H; Q1 p1 ?其后添加:$ P* A! J% d- I" K
CWndMenu m_wndMenu;- _: v' I- H+ I) s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; T, D0 Y. f) h* p$ {2 K0 t+ _其后添加:
0 a4 q; I! ]4 O+ @; N8 yvirtual void OnRButtonUp(UINT nFlags, CPoint point); ~: f8 ~6 z A( k
* ~: K8 w: j2 h9 I9 |
7 S" O% U+ B9 ~! x2 R g n
|
|