|
源文件中_Interface文件夹下WndField.cpp文件
; u3 _5 ]" H9 s: E& h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% z/ s @/ p) m3 C, Q* l& t
3 ?5 B8 n/ N+ s& Y
struct sItem
r9 R& r5 a* [; P2 O{4 c1 N- Y# @/ E4 n. ?- H9 k
DWORD dwId;. i9 N n$ m8 q, q: Z
DWORD dwKind2;' g/ L5 m8 p& m; W
DWORD dwItemId;& } q7 V4 S) X% W/ Q) }1 f
BYTE nIndex;
, D/ J2 Z% H# c" l9 ~; g0 w, HsItem(){
$ F# e: ~+ V& A- L* x- Y dwId = dwKind2 = dwItemId = nIndex = 0; J/ C" V2 y/ i, r5 @0 Z
}
+ A* k% T0 U$ w3 p4 jbool operator < (const sItem p2)
0 N& a6 x: x T* T{& X. {! @ f: W/ @8 k2 r$ u
if (dwKind2 == p2.dwKind2)
- j' x. T# z: z& h( Z0 d3 v {
/ B, D' E+ R. _5 C) f1 ?/ b return dwItemId < p2.dwItemId;2 G6 [- i6 T) u# j6 W& k# u
}else{8 |! H* [. l9 y/ e
return dwKind2 < p2.dwKind2;, H+ N' |! M; O
}
/ i8 X6 |! t6 [6 ~- T v}
. ]: C& D6 F d; ]};; r5 J& I( h3 |; e7 T
class CInventorySort$ _' v0 ], H3 D' P8 n T
{
6 N0 Z; g% R; l/ j# \public:
! U7 w/ @# I0 e7 d& HCInventorySort()
7 @9 K) o, `* n U0 B% V8 n{
5 B ~7 E3 b+ ^ m_dwPos = 0;
; L* [5 f: h; r) j! r) ], T}
! X: ~$ I, Y, W% F, ^: B# ~' a~CInventorySort(){}# Z5 n4 C1 W% e* s3 D0 J
private:
: M4 |7 V, J1 @$ d: xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 D; J. G4 I% vDWORD m_dwPos;5 i. ~9 \$ _+ y$ T
public:' Z# L. M \+ B5 k. m, }
void Add(BYTE nIndex)
0 D5 h5 @6 J3 a. v6 I{# j3 z& m0 d# }$ E/ |0 o/ O0 t0 \
if (m_dwPos >= MAX_INVENTORY)+ ~: P8 y2 S) E _$ G6 e! W; k
{( x l" F2 D9 Z; X% Y8 j
return;9 E( L! @, E5 L3 @$ V3 W! n
}
8 l( ~0 D7 T# o% s& | m_Item[m_dwPos].nIndex = nIndex;
+ Z+ y+ ]: j2 Y" b2 d- P$ {* y7 j m_Item[m_dwPos].dwId = m_dwPos;+ @' |1 D7 ` J5 P$ Z7 _
m_dwPos++;
& l3 C2 y6 K, ], U8 Z}
" h( n4 K8 W, m$ F3 {1 zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 }$ @$ U: F2 T( U5 }: m
{
% ]9 Q ^/ R- s9 A' r. S for (int i=0;i<MAX_INVENTORY;i++)/ y& t5 a4 k/ L$ F& n
{7 G7 t. O# B4 n* |) N- i6 L+ o
if (m_Item.dwId == dwId): N4 V& B' V3 g# Z# u0 F% v
{
) h* i2 T0 z# S5 f: Z return m_Item.nIndex;$ B: B6 o2 m; T# r- E
}* k0 Q6 m2 R/ j
}4 U% j z$ l5 s* ]1 i$ z8 G
return 255;8 {2 b/ k8 d% Z2 w
}
' G1 m3 J5 \3 b- b5 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. A0 x$ h# @% s9 C4 d{% r% _6 s8 R# j0 g( I: T8 ?, i
BYTE nTmp = 0;( G( M6 c1 F6 Z" h4 r% v
bool bDest = false,bSrc = false;
& G0 G9 H+ J' ]( M% O9 Y6 V7 {' t for (int i=0;i<MAX_INVENTORY;i++)/ v- d5 d/ ?% H O; ]
{/ K9 P& |# a" U* Q: F' ^) w
if (dwSrcId == m_Item.dwId)
9 u. s0 [/ A9 k {4 s `( c) D" y; [% v, e
//id相等 则 改变对应的dest和src/ Q# l6 y: m( m( M' Y0 _
nTmp = m_Item.nIndex;& x x" Y3 k1 a) r. u% p
m_Item.nIndex = dest;( Z1 B# I2 y# k& S; c0 _- }! O
}- R' ^# T9 x8 `& S: Y1 H& T
}0 i8 u/ W; X8 H3 W7 ]9 s* s! _
//临时数据保存完毕,交换开始& ?" H# u# ?& Q% v( S4 J; t
for (int i=0;i<MAX_INVENTORY;i++)
6 g% i$ e: `& I: i {
/ q7 B V& z4 N" q( j# F& j0 f$ v if (dest == m_Item.nIndex)
+ @; g; B* B' D) O {2 H% P2 w/ y3 H% Q$ E% L0 H$ w
//id相等 则 改变对应的dest和src
* Q1 v- S" N6 y! r2 r% m m_Item.nIndex = nTmp;
/ J" M% E% ?, U0 j }4 n+ T# w: c" D' q
}5 P- T) }6 P: t6 J% h3 S
}3 E9 @! [) M8 O( t+ Q7 l" x
};
8 V- y* _$ [, T! h2 G+ r# m-------------------------------------------------------------------------8 L7 U* A/ `! L) {7 s: v
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: x' D; A$ _3 W! T+ }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ ]: \! ^4 s' C# w) ` D/ Q0 Q
紧靠其上添加:& q1 u; ~8 f$ K/ s { x
if( pWndBase == &m_wndMenu )
$ {& ~' U* ?7 x4 I) x{: y' m! Q: ~& B3 ^ j$ U/ Z
switch( nID )
- d. K D3 a& c$ M; z" Q {" \$ q) J1 Z4 G, b) H+ Z- \
case 2:
2 g9 d& h! O0 M1 ?/ @ {% w& f4 n# z4 R: e
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ c: O0 L- g! ~! `2 V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 F) o5 `' |& Y/ D {& V4 X7 ?2 C, Y; G P
break;
- c0 I5 X( q0 ?! Q }0 r/ x# i9 t& u8 R2 K4 W
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 V' F" b$ d; G# w
{) }: ]6 C1 L; K- G; x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! S9 K* r _0 f: f1 C if( !pItemElem )
) E% I, a. F: j' v continue;$ R, a: _0 X/ D* i
if(pItemElem->GetExtra() > 0)
1 J5 o" b- c0 E4 j+ S; n' Y continue;1 P4 ^" L, `: b: r1 w
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 j. B, D2 v6 v. x4 ~ continue;5 d% ? d6 ]: K6 j# O$ W2 y0 o1 N
if( g_pPlayer->IsUsing( pItemElem ) )
; G. x3 M/ @4 N; d0 [ continue;
8 P' H5 v# W. e- B) b4 H' ], { if( pItemElem->IsUndestructable() == TRUE ), Z/ K7 k" ?6 u! M' a( I, w! ]* T
{2 k) F4 c8 w+ O2 M8 N
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* o$ |8 U8 s/ H4 R, k) k continue;
3 H4 H( ]. E, g6 T7 M }* A4 A" w$ T/ a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 t& E& {( _. a* v& m$ x }
+ @1 s6 l9 f& t1 }7 i* _+ l break;5 X! T+ h7 ?$ B7 p2 f5 N
}* D/ I; H5 f6 R+ e7 ~. m' o
case 1:4 i; r* E: t) C* G2 x
{
! Q! g+ `1 Q* F+ i; i //整理背包
5 f) r5 C5 E# {' x- p2 h% {2 X: z //////////////////////////////////////////////////////////////////////////
5 u! `: ~. i! t$ c6 G% Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* k R y+ L: u1 a8 d9 e) Q6 `" w
//////////////////////////////////////////////////////////////////////////
7 \1 Z5 E L% u8 W: Z4 e: @+ A //////////////////////////////////////////////////////////////////////////. [7 ^* K/ E0 c M
CInventorySort* pInvSort = new CInventorySort;
; C1 ~2 X9 L: g9 y vector <sItem> vItem;
2 U6 e: I, }" V1 C) y vItem.resize(MAX_INVENTORY);//初始化大小
/ v* n; | g! O7 v) p+ @. \1 B& p //////////////////////////////////////////////////////////////////////////5 s# E5 k; y. B+ p! C2 O
//填充数据$ O% a$ s" @( M$ r* m% O1 v9 `- U9 a& C
for (int i=0;i<MAX_INVENTORY;i++)% U8 V/ x$ B g, k+ M" H1 P
{8 k8 {6 ]6 z, z8 v5 g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( J4 ^5 G3 Y2 y/ E; I/ n if (!pItemElem)
Y! X H6 Q( ]7 H {! L0 G$ e( c( m. X+ k
vItem.dwKind2 = 0xffffffff;
( l) W, p$ s3 N# {8 N! O vItem.dwItemId = 0xffffffff;
$ Z" o6 Y0 B8 Q7 e% b+ j vItem.nIndex = i;
' i$ }& x, j3 z+ Z" @0 Z }else {
4 s" L5 M- |0 K0 ~- X ItemProp* pProp = pItemElem->GetProp();
, `" X9 n$ C' C vItem.dwKind2 = pProp->dwItemKind2;/ c0 P: j! L5 j& A+ t5 T
vItem.dwItemId = pItemElem->m_dwItemId;0 `4 }: Y$ L9 G0 _# E6 G, U
vItem.nIndex = i;. e L* ?9 P. X
}
$ a e% X( c, y" w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ F$ k3 S' p5 l" s" d, e: y; t
}
" e+ ^7 I v/ ^6 b5 s/ v //////////////////////////////////////////////////////////////////////////4 {- v" ]7 p( Q. \" |
sort(vItem.begin(),vItem.end());//排序
3 R, Z& F Y+ ]% \% o9 { //////////////////////////////////////////////////////////////////////////" F$ h4 U- C. A6 y6 s$ l
//交换/ `. S3 i# A2 O
for (size_t i=0;i<vItem.size();i++)% V! q% F" t& T/ C9 j v5 ~
{
- l: ^/ W/ V* J& @) \- Q: C* N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 q- O: ]+ g7 r pInvSort->Add(vItem.nIndex);; t% z( f# b( X' d
}9 F/ a) }0 t6 v+ H f1 j0 z
BYTE nDestPos = 0;
& r$ r/ e2 `6 F3 Z for (int i=0;i<MAX_INVENTORY;i++)
8 n$ O$ H# d1 i9 q! U0 [0 ~ {
# n( z. \/ X! H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); @# v/ k% |( w0 k
if (pItemElem)
. A S6 T" c8 H: `+ j8 p n3 w e( t {; G1 g# M- X1 Q# n
if (IsUsingItem(pItemElem))
/ U+ E2 C) O- p {/ O2 @7 A2 K% ~% \: u2 {; ?: @
//这个位置无法放
; o3 `# ]3 L/ ]: G nDestPos++;
7 b* j+ b8 A- G- _. f }
- Z4 l+ ]9 R, ~- p9 i4 G" W* t }* G2 T) ]5 @/ g6 d
BYTE nSrc = pInvSort->GetItemSrc(i);) S" h( E* ~, V- A7 D2 j b
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) S8 h9 k- x# t, m* m$ @8 [
if (pItemElem), g# o E; r( _8 M0 P# G; R
{+ O1 J7 }. Q0 {( Z/ q2 c9 j
if (IsUsingItem(pItemElem))5 F8 i6 a2 _! W; @4 K0 H8 ^7 e. c
{
% Y& O- D7 |$ o3 N7 b# e4 E1 D, | //这个道具无法移动,跳过6 }, I: [( R# O) }
continue;
+ R; ?3 ?! f! s, v# U }% x6 t5 c/ S8 f1 }
}else{
. \, {6 W, q" |* X' z //空位置 不用动
m- h: S) L! x& a, a. C9 c( Z9 [ continue;' i! k) v6 f. k! [/ d: F% M
}/ P5 l, A$ b5 c6 v- y
//////////////////////////////////////////////////////////////////////////( h/ F N# G4 r$ i3 q- Q, C
//开始移动
c4 T& Y. X; t% c3 I if (nSrc == nDestPos)
1 V) |' x2 {0 n {5 P D1 ]: \" t7 G2 @! ]
//原地不动9 A6 } g0 G7 e( W5 T
nDestPos++;& Y% { e1 j3 y$ i( h
continue;
_( q# T" i1 g6 D- P }
+ j# G) @5 D, r2 L: i6 f0 ^$ P8 R- O8 b pInvSort->MoveItem(i,nDestPos);1 F' e8 m$ |1 U
g_DPlay.SendMoveItem(0,nSrc,nDestPos); j3 I2 c u; v* l' d
Sleep(5);! m+ l6 o; b$ P9 N+ a
//Error("移动 - %d->%d",nSrc,nDestPos);
( g B# E3 W% h* S nDestPos++;3 f, K3 d% v& \& G( A! S T4 p& [" T/ p
}
9 w# l& K: Z$ K4 q //取第一个元素的信息
8 u6 B0 C1 a$ {, m /*
5 u+ A. y; j2 f if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) ]% X5 ?* ]0 o
{; V: E' E9 J, O' H3 Z, D3 x6 I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* k F: ]( z' K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" L# `$ [ g8 n4 R0 _& }! b3 _ }
# O0 h/ M/ W+ K$ w */
# x* l: Z4 k2 S/ w. i( [ //////////////////////////////////////////////////////////////////////////
3 I; q, L: o5 m6 ^' ` i \ break;0 H% q7 O' |( g3 {( t
}
) s L: e+ ?% s/ ]9 l } * k, L/ q9 t' j+ K2 S8 D
}
0 X) W/ e4 D& V5 t. l5 e+ K8 Bm_wndMenu.SetVisible(FALSE);& @6 ?- S4 [9 w& l$ A
7 e7 C: n1 n1 p' b$ D
--------------------------------------------------------------------------------------------------------
, O; U1 k6 @, M9 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ G! O6 b+ F* {" f5 I5 _& D
{
4 B5 q% {) E7 p* {" r* Z) R5 o' L" PBaseMouseCursor();% u0 i( r$ ?) o9 R" l* D1 f$ Y
}, T2 u) b7 V# D- {; ^- x% M) c
在其下添加:# a1 x- K$ N) ^. J5 J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 b; Y$ n4 k: ?7 n7 |7 d1 M* c8 ^{
4 I1 J) \# X5 L# Nm_wndMenu.DeleteAllMenu();& s" w" |' W" |* _
m_wndMenu.CreateMenu(this);3 I/ p" w; Z0 B+ i* R
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% N! Y" s |* }
5 | q0 v/ K1 l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& s$ l0 q+ R7 v$ t3 J- Y8 a{" d9 O2 A3 r0 K8 K' l
//P以上级别才可以删除所有道具
( q1 E" z! A# I& p0 c) N5 h: s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ `/ ^" d* K& ~1 o- M9 R}
' W4 \* W+ r5 c/ p$ q$ d+ Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ D' \! J! |) p& b1 ]# ?$ c' Y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 ]$ L, K4 F9 J9 I
m_wndMenu.SetFocus();) p: S: y. r- M
}( @- P2 x* z+ `5 P" f+ V4 G
------------------------------------------------------------------------------------------------------------) [% H* `3 ^0 ~+ i
*************************
5 ]+ }) [! W8 s9 _- P" pWndField.h文件
) N1 ` u) @6 ]*************************, ?& Q% r) l- }) D$ ^/ ]' K
搜索:BOOL m_bReport;
$ N7 a% n) o" X$ l9 ~其后添加:# Q" B* r$ \, Y9 s! m
CWndMenu m_wndMenu;
. @6 j" P/ A! @6 ~( {8 j7 |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 X" J' g A1 Z0 Y
其后添加:
+ U z* v5 A( d' J) p' {* T: gvirtual void OnRButtonUp(UINT nFlags, CPoint point);
z7 a: n. J+ I7 f4 v$ F. F0 }) r% |" d1 }$ |
( R- k6 [. e3 Z! w! S# M/ F1 G
|
|