|
|
源文件中_Interface文件夹下WndField.cpp文件
- H( K8 f5 ^ r# ~) ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, h3 e7 L0 I o1 a f5 g/ S8 n# C" t/ c6 |) k1 n7 a$ j0 m
struct sItem0 m/ h( }3 K/ I4 S& H5 z# N
{) _, \& k# Z; h- l* N: D' r
DWORD dwId;
9 V- s7 J$ K# I' X2 x+ wDWORD dwKind2;
! H3 N m+ D8 W# W3 W/ _1 }3 xDWORD dwItemId;3 Z7 V0 A! C/ z5 k
BYTE nIndex;
& S8 c, ]/ |9 HsItem(){/ x2 ~9 ?3 Y* G( a4 g0 P* e
dwId = dwKind2 = dwItemId = nIndex = 0;
W& Z7 u \! E}$ {1 z) a7 T4 J* _
bool operator < (const sItem p2)
. T7 g0 B! [: w) n$ t. m4 X{. `, \' ?5 ]' s! E1 h' Z
if (dwKind2 == p2.dwKind2)* G9 p, s7 k1 m) M1 v+ Z3 H
{' O! m0 `+ I2 L
return dwItemId < p2.dwItemId;
4 g4 i% I R4 z5 T3 c }else{
( G: H" I/ n+ U2 H7 [2 O return dwKind2 < p2.dwKind2;
) d) a/ O v/ T! {: M( U }) ^' a3 i+ |# ^' d, s
}2 m) u2 B' m. X7 P/ N* @/ x
};
, Y1 [# j ^8 Oclass CInventorySort, Z( ^9 K4 z- X4 c% P/ Q& B) j
{; g( G0 m0 s5 d6 S% v: Z2 \
public:
8 V4 Y8 M; J$ O% }2 SCInventorySort()
% ~, a+ _ `) t{' M! |- \% ~# f6 o$ A" Z
m_dwPos = 0;
; R7 P# `4 ~$ Q( g# C}, h2 j# c7 Z& c
~CInventorySort(){}
% [: l& D7 s8 D: R; z/ Rprivate:
# C# V% R3 A& wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 Y7 U( o1 o% ^/ M# t
DWORD m_dwPos;( A: `6 U1 H% l
public:( _, W" @( y" V) G% r+ s
void Add(BYTE nIndex)
0 R2 O6 M3 ^$ w. I# c1 {{
+ K! W. k# I1 w2 J7 U2 r if (m_dwPos >= MAX_INVENTORY)
0 n+ c. Y4 S8 q% M9 U! C" X {9 n T! ?, N" b, q$ h
return;
2 R; L+ |3 x3 v! F) R1 E }
9 c$ n7 b) H& { m_Item[m_dwPos].nIndex = nIndex;
& }, ]7 E3 B# E+ ~, V0 I% i m_Item[m_dwPos].dwId = m_dwPos;* e/ s0 J M! w4 R4 j0 w
m_dwPos++;* T7 ^/ e- e8 C9 Y6 k
}' ^" B, ^( [/ F. [$ B9 Y0 c
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: q; j2 R" p2 y1 E
{
& `/ I$ \( n' N) r8 R9 p8 P for (int i=0;i<MAX_INVENTORY;i++)% [3 R/ c* K0 D% B
{' P4 s$ p2 [* I- Q" C9 `
if (m_Item.dwId == dwId); F4 J \' j& I
{/ d2 R. L# M& |$ c& U6 G2 G
return m_Item.nIndex;
% p, m1 y7 c) {. P }
* N. j7 X( y' @9 `' m( {/ e1 I }9 M. G$ A5 s2 s
return 255;
( d- E5 s$ w; j2 J7 [}* P. R; O+ \) e# N2 s% r
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, {. c! v7 U* C- Z4 y{
! P; }4 H$ U7 z0 G: r* s BYTE nTmp = 0;( E8 @5 o/ z. j3 F5 s# n
bool bDest = false,bSrc = false;
9 h7 H5 n2 U' b4 u8 t/ e for (int i=0;i<MAX_INVENTORY;i++)- @& u1 ?. d ]* f8 _; k
{
; r" {0 P6 Q$ ?2 B if (dwSrcId == m_Item.dwId)3 D0 @* N. J# l ~
{
3 b" n ]3 N4 t; X# E" W //id相等 则 改变对应的dest和src* i6 I: e! G. a H8 `
nTmp = m_Item.nIndex;
+ Y Q9 H0 f5 R0 R' ^# _* q m_Item.nIndex = dest;- T, X" I" \+ a$ @1 ^. o
}
X" R! z! S& v9 Q& j }
0 k8 {( d6 s$ r; u //临时数据保存完毕,交换开始
" E; d6 {' [# s+ c# R Q: G for (int i=0;i<MAX_INVENTORY;i++)
9 V7 V: @( J$ q7 Q {! ^ {# L7 a7 Z$ N/ {2 n* z$ X, x
if (dest == m_Item.nIndex)0 g& J$ N1 w) H
{
. t" p9 i- S$ b" P //id相等 则 改变对应的dest和src) U$ @2 B0 _( G
m_Item.nIndex = nTmp;
$ H) u( A& `7 g3 K, z }
8 Z3 F; N0 V% x2 A' j }
4 z& J. `7 h$ i, C# J2 C}
% |: w, G! C- E+ V# T$ F W};" \4 V# _ H( g: D! e% n
-------------------------------------------------------------------------6 L' |7 U7 G9 g4 G- w! `
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
m' `1 h2 t6 P+ `' I; D! }! {9 L搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% [, t5 H7 _- y3 N1 t0 d1 i. [
紧靠其上添加:5 E0 T( u$ X4 }
if( pWndBase == &m_wndMenu )" h( c9 P U; t, g
{
5 D2 w; l. s2 c7 \ switch( nID )
" b3 f. C/ Y- _2 @ {5 N0 w6 N( M3 V& h- K
case 2:
! e l7 `& w& {$ z9 h {
! P, Q' m) z2 R* B& f0 x* F5 ` //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 d: U0 `$ X. d8 B/ ? if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" Y0 T- ]! b" Z% V {
- `( r, b/ e3 G% D8 S W break;
: }. e2 b( r0 n* }0 d$ i, v' B }, B1 n8 @& z1 |8 Q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 k+ h1 z) K; d4 |3 {8 L
{
4 p/ x; v. ?8 n8 k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( `/ K1 e& p8 \- o6 N8 U
if( !pItemElem )5 W& R4 C! N. r5 N# q; f
continue;
1 F2 Q& }6 }3 G- t+ ~8 M if(pItemElem->GetExtra() > 0)
# a9 o- Q3 e* \6 P continue;
8 Q7 w5 ~1 B& {- b7 q5 O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 E' Q, z5 Z6 l: i* w! Q7 [ continue;
]% U7 q% d5 R3 |1 K4 D1 v7 N if( g_pPlayer->IsUsing( pItemElem ) )
2 I+ r% _/ U# B- a9 ]; b6 s continue;
+ N5 m8 w5 n7 S3 U" C7 ?% U# D: x D4 F2 y if( pItemElem->IsUndestructable() == TRUE )
1 j0 e7 D- w c {
3 {4 u7 k4 a, ^, Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- M; f/ I& p: u4 b6 h" a: C
continue;! \1 M- }; r# c+ P. o
}/ V) t4 |; @/ G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% s% w! G; E. W9 R9 R- @ }
5 {$ I. Q3 J% B/ S8 i; y8 I( B8 J break;; Z8 f# l# s' T! I" h) s% s
}4 P& o$ @+ W+ ~
case 1:( D) N T, u8 ~: s5 r8 d
{: B0 T: e5 `8 t# s) x2 d( c* q
//整理背包7 t+ ?4 w" b( i/ R$ h0 J
//////////////////////////////////////////////////////////////////////////4 @' l/ M/ g" u" Z- d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- x3 x& w% y. o) T
//////////////////////////////////////////////////////////////////////////
4 y8 `0 I7 Y% [. v( E //////////////////////////////////////////////////////////////////////////; w" H: u" C! g! k
CInventorySort* pInvSort = new CInventorySort;
6 s @. }- K6 j& n, b7 ]8 x; M) ` vector <sItem> vItem;
, }; p( @3 M2 E( j/ I9 m vItem.resize(MAX_INVENTORY);//初始化大小! S# z T" j! T8 F) Y
//////////////////////////////////////////////////////////////////////////6 J: r+ J8 ^6 t9 m# j! c, o
//填充数据
& x6 Q6 Q9 M6 i: A* q0 W4 X for (int i=0;i<MAX_INVENTORY;i++)
0 W, r8 B" V) Q) L$ | {- O% `7 L9 s$ b& [- a4 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, b! Y X: A3 G) a" Q* r$ M4 }
if (!pItemElem)4 w& N: g2 q6 d
{% Z4 l% d2 c: u6 i
vItem.dwKind2 = 0xffffffff;
- d5 K3 r+ X! z8 N- n vItem.dwItemId = 0xffffffff;$ l6 e* I1 K+ h$ B4 L' v
vItem.nIndex = i;
+ f6 b5 p& N" Y! f8 Z }else {' G7 T3 m" u( x5 _
ItemProp* pProp = pItemElem->GetProp();
2 w1 y% e2 T- X vItem.dwKind2 = pProp->dwItemKind2;
4 j, t9 B) L( {- t* x vItem.dwItemId = pItemElem->m_dwItemId;
$ ]( o, c3 ~! h, d R vItem.nIndex = i;
# c4 _' u/ k5 c o7 r# \- l- o }
2 w9 G) q3 {2 s; h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( v( u, n1 y; H7 C) _ }" ?' L2 W$ T2 K* d& V* [8 J- p
//////////////////////////////////////////////////////////////////////////, f, Z$ a' U( k4 l i8 \
sort(vItem.begin(),vItem.end());//排序# Y5 a4 ~4 N8 N7 K8 k; u6 K
//////////////////////////////////////////////////////////////////////////
& T, [8 ~+ ~- C2 J3 t //交换
' V* ^2 G9 q7 t3 [% F/ }$ u8 N: ~ for (size_t i=0;i<vItem.size();i++)( x, v0 U9 T" [' O* \( M/ ^& N: _
{
0 r! \3 B* r1 j- W //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ P$ k$ L% p: m9 D
pInvSort->Add(vItem.nIndex);3 V3 K( a W& L0 R$ A
}; q [5 k p! o1 I, l# s. v
BYTE nDestPos = 0;( l" L% a( ~! ]$ Z9 t) T
for (int i=0;i<MAX_INVENTORY;i++)
! v1 Y. F N7 s* h+ E {$ |6 O+ r& O: e/ C2 l0 O- v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 t% ?2 p. _6 w
if (pItemElem)
1 h& Y/ X# s. V% \ {# M& B* }% o3 d, W! n; }$ X
if (IsUsingItem(pItemElem))$ B( r8 P! D& ^2 H$ C' s, y
{
- l0 z1 `0 x" _) u5 I //这个位置无法放' b. p% R8 n0 f$ ]0 G" N
nDestPos++;
9 @: k3 e o( y; H; [+ P0 g }
% B" T! L8 f) [& N }+ ?9 B6 E3 ^* Y( c$ b+ K
BYTE nSrc = pInvSort->GetItemSrc(i);
$ i( `8 n W' e8 F* L% ]) c pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. x) b- ^3 p2 L. ~8 m5 D
if (pItemElem)
: d+ [6 J# T3 g6 [# Q( k0 [ {( {! T& l6 h6 y' k
if (IsUsingItem(pItemElem))% V9 ^# {+ o0 ]% k8 R3 ~' W v* Z
{2 P- {+ o4 K% U) x6 n
//这个道具无法移动,跳过
5 ^% @! _; W* b' H0 w* j0 g continue;: H+ ~ r3 v4 t" D- d
}
- e5 g8 N8 s8 `! q+ S- p, c( f1 c ^ }else{
: z0 G2 ~7 {, `5 C+ _ //空位置 不用动& I( E" \. V4 V4 u
continue;5 l4 G' D( k2 E: @
}( A7 g3 l0 s2 ~# j3 j" j2 L( J
//////////////////////////////////////////////////////////////////////////. C, b* Z" U- i/ G: o
//开始移动
7 b% _( T, {& @/ R* U if (nSrc == nDestPos): X5 [: J, l# l
{
, v6 u) s D' k2 T% O4 X' R //原地不动
: A; J% \4 p" Z4 A+ ]5 V$ I# {4 U nDestPos++;+ h) }5 e3 i% ]+ E$ _. ^
continue;
- y1 h# t7 {$ S, _ }
6 B* r- w/ Y* U$ b% u' L( k" l pInvSort->MoveItem(i,nDestPos);1 [# y' [" X1 Y% ?9 I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 @& D6 r3 Z; J1 y/ L: i8 I5 m Sleep(5);
/ y, q5 y% J( ~! O, v7 ]% [ //Error("移动 - %d->%d",nSrc,nDestPos);
/ |+ k2 n6 {+ ~ D% ~ nDestPos++;
8 H: ]+ d. H3 C# R }/ @* V% C9 j1 K! j
//取第一个元素的信息
9 ^ r7 T+ F/ P4 a /* y$ C* N4 J- D9 v- I5 v! G
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! f9 U4 k0 ?2 y/ p
{
% {. k3 i/ n& w2 U0 \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 b& _% U3 G3 `2 q- ]" | g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ B- f- ]: W: r! T8 L! @; Q }
+ k9 A7 T- B: I. Y" p */
: [& `. E( y% U) b) l% ? c //////////////////////////////////////////////////////////////////////////
2 |$ X7 F/ c! ~ i/ b, r* X8 T break;) w# E( s& b" w* a/ Q
}
2 [! {: T2 Z4 F1 E$ H% I } - J9 |. X1 C h* _- x5 }
}% j, z8 ] O* n$ k! N) x
m_wndMenu.SetVisible(FALSE);" \& m1 l3 k: Z9 t# }4 S3 L+ h
% k& p* U$ S1 [+ Z9 l7 f' J' F--------------------------------------------------------------------------------------------------------6 m+ `& h+ c! k4 n$ s1 R& d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
M, Y l; ^: V G* S{
" E8 n, G# p5 g; ]+ OBaseMouseCursor();
- f" H9 R4 W( v+ C}/ _; N o2 Q) \7 T& k- b" ~' l! [
在其下添加:
, r" c/ h) d/ G2 U; Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" A2 b2 N. D" M* B+ f{8 |& A8 E" {9 l9 X
m_wndMenu.DeleteAllMenu();; }5 }- x' T& i: G
m_wndMenu.CreateMenu(this);) h' q) h7 l5 X' ` }6 C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; D6 l- _$ p3 h* |0 X# W% x
' ~: |3 |; s, ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! n5 a4 T- n+ Y- H% f7 r/ D( o
{
# d/ P* Q t/ T9 ?8 g //P以上级别才可以删除所有道具
: u, t7 v. Q& h8 K( l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: I* Q+ T! S* ?# X% ~0 t3 g5 a; Z}& {+ P( o' r: I$ U0 A. w
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* m2 r" f+ G7 s. Y# ]6 E
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 o, @; }3 G; T4 x: r" D# E
m_wndMenu.SetFocus();/ J! I( j8 f+ X4 ^+ u* ]& f
}
; X" f; P p8 w, k3 V- B& x% F) T; }------------------------------------------------------------------------------------------------------------3 \1 r/ `0 V1 [% \4 a# B
*************************3 ~% g: ?- K, K4 i
WndField.h文件- |, ^/ O4 @$ B2 s# G
*************************
* X. N+ M _. S. D) f; s: T搜索:BOOL m_bReport;
$ Z, G; F1 f M. b其后添加:' w& x( q; x0 E! z1 x
CWndMenu m_wndMenu;# |# H9 \2 E" Y) S; a
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 s2 q) D1 Z3 v5 v其后添加:
7 R2 {5 r1 A4 Y( L4 G" d; mvirtual void OnRButtonUp(UINT nFlags, CPoint point);+ g5 a& g" A" `3 H
% C8 q9 f3 ^6 a) Q5 T
$ O9 w* D+ }; {1 ~1 M2 @, l$ I |
|