|
|
源文件中_Interface文件夹下WndField.cpp文件
7 n$ e. \/ s, m& _' y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 F6 N) ^: g/ b. W" ?( r. c; w% E h! r% o. x# G: C4 c: H6 X
struct sItem0 \, Y" _2 j9 h
{
2 k( i. Z( m0 T y5 BDWORD dwId;
. O7 `4 ?! B9 I9 ~" hDWORD dwKind2;7 ]0 F# ~4 J0 \: @, B$ k
DWORD dwItemId;
. ]. K8 _% L& _+ H0 k$ c' r! cBYTE nIndex;* X2 |3 h$ I0 ]3 T7 ]
sItem(){
B5 q* A6 a- S; p1 N dwId = dwKind2 = dwItemId = nIndex = 0;8 p! L( A6 q( ?
}) |! c' ^( d4 ?6 o: M
bool operator < (const sItem p2)
, a# H: Y* Q, U' V+ d+ J% y7 f{' O$ X+ m) J% X3 B% H6 | P9 Q
if (dwKind2 == p2.dwKind2), L% _" Q1 y) W) w
{* L) ~' j/ J- c6 \
return dwItemId < p2.dwItemId;
! t/ M) h# P% S6 r, t }else{
7 L0 N' ]: ^- b) I+ ` return dwKind2 < p2.dwKind2;# Z) R K: J4 h0 @, x/ R2 A- l9 X
}
/ i9 S( Q7 _/ q, b6 p# J$ e. a9 j}/ N$ E, H' s7 M, G$ C( \ s
};
4 R6 x( H4 ^9 b% P& K/ `class CInventorySort
8 f3 D% A1 D7 W{
! S7 s q1 @0 Z' c0 M, k" Upublic:
0 N& @7 M5 e( b- G0 b% ?1 q! jCInventorySort()
5 U; [ \0 i. q. l8 ~/ a1 h9 I{
$ O ]" W6 w n) ^ d2 j& i# _ m_dwPos = 0; x6 `* t3 b/ x. a. |7 L' [
}
3 E8 I8 }: M H~CInventorySort(){}# |' |- z' s+ Q5 A7 {
private:0 j- R/ K1 q- W9 N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 K. l9 d) }4 Y) c4 P' ~6 _; eDWORD m_dwPos;7 P; \3 ]4 Q% z" m/ K& s& Y
public:- `4 `# X3 V+ X9 E& i. d
void Add(BYTE nIndex)
' l+ `# D6 |9 c; g{2 L) x" e6 i' P+ O* L* [7 h
if (m_dwPos >= MAX_INVENTORY)
$ f+ x" P( V2 i) S {
) Z$ j4 W4 p3 O return;
' T, u9 n [7 c! u% K }
1 O) W( ?4 Y7 N& V# F, r m_Item[m_dwPos].nIndex = nIndex;
+ E. l1 A7 t- g; U8 E+ h m_Item[m_dwPos].dwId = m_dwPos;8 h4 x' Q# B" w- @. |' z; E8 @
m_dwPos++;/ |$ |/ k6 P9 F
}5 h5 x- A* ^- S9 \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 J G1 ?/ F! l# L' n{. z+ G" C* a2 m- g' z+ t9 B
for (int i=0;i<MAX_INVENTORY;i++)
: O4 R, j1 ? @7 @0 k( f! b {
, Y( W2 I) b8 } if (m_Item.dwId == dwId)( l8 E. c$ [2 x0 D! \
{
& ]. }! j, l& F' ^1 b2 s return m_Item.nIndex;7 e9 {; b8 m: [* O5 R" Y
}% t7 \# `8 J) N' a! z
}
% T+ A8 R( M/ R/ V9 ]# t( Y return 255;
- a$ \3 N9 h. g7 M# l+ G* W1 x' z}& S0 Z, P9 |; b. d, Y& n: s# Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 b6 H+ C# N6 s* U{
# y2 I: {4 B7 g BYTE nTmp = 0;
2 b' ?. ?7 z3 b. G& z2 t bool bDest = false,bSrc = false;% a7 ~* P5 o: V+ g, x$ |3 I0 b6 f
for (int i=0;i<MAX_INVENTORY;i++)1 P3 m. k7 Z( ~5 @
{& n8 g& h: P0 u! v
if (dwSrcId == m_Item.dwId); v3 S, d( m3 F+ w
{
2 A3 V' B$ N5 x" O) s$ v' x6 t) n/ ? //id相等 则 改变对应的dest和src
$ ^- A( R, ~/ u4 ` nTmp = m_Item.nIndex;
1 h( ~ w3 s6 E2 m8 [' E2 O9 e m_Item.nIndex = dest;8 y3 G. G5 v" R- }8 p1 I
}. B0 H4 D$ h% A' f O
}# k* Y3 W9 O8 ~7 Y" s
//临时数据保存完毕,交换开始' s; J, v! y# E+ b0 A
for (int i=0;i<MAX_INVENTORY;i++)
9 ~$ p$ c9 ^, m. c/ r/ C' H- D {
7 k) G! z3 I7 U" \# x if (dest == m_Item.nIndex)
6 O& {$ q# ]2 X# U {
6 y. N5 S- |7 z$ l //id相等 则 改变对应的dest和src6 V: f0 J1 w: D* h% @5 [ V
m_Item.nIndex = nTmp;
8 N/ X; z; i/ q1 [0 V }
o. \' E) ]* T7 S9 T }
4 E. e& b- M4 N/ ~3 i" J/ {1 q}
, L q' C, n; z};2 l8 W5 u, g% y/ P( }+ M
-------------------------------------------------------------------------( A! }( E) a3 C3 u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 A- `# E- L) ~) L搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; E3 s4 a+ t- N1 \; u Z2 ^3 K
紧靠其上添加:
: E) F- R7 S0 P1 ]+ L# V% uif( pWndBase == &m_wndMenu )
9 j P; ~* _% ^4 `{" g6 M d; i" b1 u- X1 h
switch( nID )
% d4 ?3 [9 R+ h8 _ {
& r( ~9 Q* p5 \9 O. b case 2:
# u; q/ | q0 o2 k5 N {& a# B9 A# ?7 y8 g, o2 E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, N* S6 |) Q. r3 y1 y2 D3 Z% o, T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' y9 G1 K1 {& m& u {" G3 \+ O0 [/ k$ r% V
break;5 E/ b% k6 L L8 g& Z0 V
}. O* r5 e4 H8 ?, T8 r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( m- ], V& w# G {0 B- c9 I- h$ Q0 ~1 w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& c& B0 U7 g3 M n
if( !pItemElem )3 V: F/ |0 P0 |$ D! J
continue;3 B. y" e/ J( R% N
if(pItemElem->GetExtra() > 0)
' V1 _+ g+ _6 s' G0 Q3 s7 o continue;
) ]* n* ]5 T0 m/ B if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. ~) _& n% Z+ z0 J. Z' R/ C continue;2 N, U4 M8 I5 Z2 e! F, q
if( g_pPlayer->IsUsing( pItemElem ) )% ?* l: w! K* t/ l
continue;
. A& l% ~. i1 }8 J7 x if( pItemElem->IsUndestructable() == TRUE )
' \' N+ A8 p+ S {4 O$ a. d" I. G4 x& @- N1 I% ~
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ J7 ^% m0 S7 T5 \ continue;0 w6 ?$ a5 D) W+ Q. w: Y, d
}
6 L. \( A- y; N- e1 z3 q" x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! ~( N' l6 E3 A& l
}
; h( y: v& t; Z) c% X break;
* H& {( u5 N/ b7 x2 ^) E, P }/ B4 E7 z* v5 g
case 1:$ z! l' t/ y, W& a' ~! x O, J
{
. k6 @& ?1 R6 q* L1 e) X* m+ U( e: b1 e //整理背包
& E, k; F# I* {( I //////////////////////////////////////////////////////////////////////////
6 r Y. x' w9 D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 s/ h9 ^7 @( }
//////////////////////////////////////////////////////////////////////////8 W9 h& E9 r5 [
//////////////////////////////////////////////////////////////////////////
% ]& q/ [1 ~2 `0 Q( h CInventorySort* pInvSort = new CInventorySort;
3 P: t# ~+ h& H7 W8 }& R5 W vector <sItem> vItem;
; J, u7 s' \# y6 C( ` m9 A vItem.resize(MAX_INVENTORY);//初始化大小
) y9 J6 \) G) } //////////////////////////////////////////////////////////////////////////
+ v) Y& i; n2 O //填充数据
: F$ A; Y: q. C3 S" F& ? for (int i=0;i<MAX_INVENTORY;i++): D n, e* G1 y6 X
{
) u) l$ w4 F( b. }5 y- p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( P2 D7 e, |/ M. U) t( A. e
if (!pItemElem)
5 P2 F3 O) b" M* r {
& F4 D+ `) }6 }/ X vItem.dwKind2 = 0xffffffff;
' c Z$ K: ~( D. I4 F% E S vItem.dwItemId = 0xffffffff;
3 S8 R x% w6 d: T* k vItem.nIndex = i;
0 F. S6 ^/ u; |& F1 f6 r o! K }else {: _6 g- D. G: D2 F1 t5 S! I6 S
ItemProp* pProp = pItemElem->GetProp();
3 ^1 q& g) t$ c: w, } vItem.dwKind2 = pProp->dwItemKind2;6 Q* e P9 H: L
vItem.dwItemId = pItemElem->m_dwItemId;' o( v6 S) {) f' [" F
vItem.nIndex = i;
9 \* f! z7 _1 ] h* V# U% ]3 o* A } h* d" k5 c; D
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% {5 P+ [2 h5 ]% H4 d% E
}
, w" @7 p& j: Q; X8 A6 c; u: C1 w //////////////////////////////////////////////////////////////////////////
6 F$ P# j+ b3 l1 K. O sort(vItem.begin(),vItem.end());//排序- G( d4 h. j5 T# @" I
//////////////////////////////////////////////////////////////////////////
! W8 W4 ]5 ]4 z //交换9 y( ^+ P3 Z$ P3 ~* B0 m
for (size_t i=0;i<vItem.size();i++)$ e! t0 Z$ o" n# Y
{
7 L, I) t8 P) x4 g3 k n0 T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 Z; G9 ^8 ~$ }9 U+ E3 Z7 B
pInvSort->Add(vItem.nIndex);7 ?) D4 [, O: h
}; ^ s P4 c0 `, n. }
BYTE nDestPos = 0;
( r1 ]8 H/ k$ a: u" t- X4 Y for (int i=0;i<MAX_INVENTORY;i++)( V/ g0 P K: n i$ O$ l
{2 g+ f5 c; ?2 v4 ?& Z/ ]( d( {( y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ t2 z! h$ z+ o. N( F# I+ Q
if (pItemElem)
- l* {4 V* ^, W* y/ |2 A0 X {( N( y2 |; I5 ]( o7 q! g$ {6 i
if (IsUsingItem(pItemElem))
, r- g. O4 M8 W, J/ `6 Y# C7 g7 y: a {& A- b3 S- j. K8 J# ?2 }4 [
//这个位置无法放9 Y4 S& u1 P9 u, q/ B# I. O
nDestPos++;# u. O" N* P- t' ? @7 w6 s5 s
}4 T1 z" a# J1 I0 h9 v0 f
}- K$ L2 }( E4 x7 ^& `- G1 u
BYTE nSrc = pInvSort->GetItemSrc(i); _; N( z% w. l: H& }" u
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% b4 Y7 C% w* \
if (pItemElem)
: _+ s; F* p0 V) \% M {
4 |! w4 ?# g* M' k: L: k if (IsUsingItem(pItemElem))
; t' G: B& N4 C5 s9 u; u' s {6 V7 A% O, o& m. h z* e
//这个道具无法移动,跳过6 q! [+ Y# u6 y7 R9 J- t9 [
continue;
- J4 |6 Y( _4 l, g" E& O4 W/ P }8 g/ ]" x, |3 N x
}else{# _3 L9 \7 P& y5 ?( ?8 O* _) K, M
//空位置 不用动3 O0 } I& _! f$ A
continue;
. E N6 j& ]8 d2 O }4 p3 T" }' p+ b6 w4 I
//////////////////////////////////////////////////////////////////////////
( s2 T" X4 ]2 _; N$ U. ^; t& y //开始移动# V: Z( ]* [* r+ n$ d9 ~
if (nSrc == nDestPos)
, ]* D- E/ g3 u2 U5 C3 t! s4 S$ k {
: o! x% C0 D% e& Q //原地不动# F Q1 [4 K( D: S0 T8 t3 k; c
nDestPos++;
: S$ r) o% ]$ p continue;- o8 m1 B) C7 _& `: ]0 o
}
- r# ]$ K. L1 w( n; X/ R pInvSort->MoveItem(i,nDestPos);
( \1 Z. Z% z; X# K8 y g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ J# L ]; o" K. c: S1 X1 h Sleep(5);5 E7 l8 d2 R, D1 d/ i H2 |
//Error("移动 - %d->%d",nSrc,nDestPos);
; m1 Q9 f+ J6 K! l. G# I1 \ nDestPos++;
- {$ y: i4 M" j1 `, y }
& A# ?$ A6 @: [! @ //取第一个元素的信息
9 y$ g" p, s0 H2 g0 p! O9 ?/ c /*
b( i* |$ }% F* U7 f- p5 z: G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' f; H6 X) \, {9 T! S' d8 {6 A {
M6 e/ {* \ `4 h1 L! o. C# S3 V Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 o! s* q% c3 w6 a' S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' }# E% K! t' o, k( Y
}
3 l& B) Z$ S; p5 T# A */
9 P6 | Q1 T. ~6 w0 Y% J! v& o //////////////////////////////////////////////////////////////////////////
( a5 y# I% k4 Q break;. G% r1 K, j; _% A/ i: T, B
}/ Q& G( p1 V- |# C$ a, V+ D1 d
} . p7 ~3 f5 T \0 ^% ~, w; }
}
: g( t- N8 l' k4 p8 b1 b% g( }m_wndMenu.SetVisible(FALSE);
" t& d7 H4 q4 S* K& l2 `, J9 u, U" {/ H; C8 y B' f
--------------------------------------------------------------------------------------------------------0 D1 y) o+ s% a" C* x5 u. y2 S
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 w9 h& U H8 N
{
5 D! H/ I# ]/ U; {, z. _ U- FBaseMouseCursor();
; `9 M: Y1 |) h}
" o* C" P6 ]6 n+ M1 K/ m* O在其下添加:
1 B1 U! {( U- `) K+ S& ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 o u; i7 S5 T% n7 T; K{
0 `: G+ A3 S \1 Tm_wndMenu.DeleteAllMenu();5 a% t$ H/ P! {/ C) n0 Y& H8 U
m_wndMenu.CreateMenu(this);6 d5 J5 m/ h l( r1 ?: D- m
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 E' C+ K( T; c7 {# H: ^# Z
1 s/ c; H; m) h' d. tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 l' H* F+ o. w D{
+ q: h) B/ c" m2 p. q! u( A, l! Y //P以上级别才可以删除所有道具
* B3 E1 ]& } J& c0 }. x7 J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ a. `1 x: F& r7 M. X& d2 s}
) I+ \, M! J9 M, Y8 S: F8 ^) [ Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; Y8 ?5 Q- W% ~) e. s) ]4 W1 g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! ?! `. {% z7 {7 _/ N+ x) z: y9 a, gm_wndMenu.SetFocus();& M+ T8 s2 f9 t2 g# l& v0 f
}, O4 l6 i% v8 l! [# Z
------------------------------------------------------------------------------------------------------------) D6 K7 _ M! ?3 G$ ?. [
*************************
' u1 E* p# G, D3 m5 H RWndField.h文件
" ?, N, A8 v6 u Y4 Y*************************& w X: U: W w q
搜索:BOOL m_bReport;
2 p4 t" l' M) Y) x) ?# J其后添加:8 H# a! N6 \ l
CWndMenu m_wndMenu;6 y# W; Z! P' w$ c2 h
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 `/ X% _ d0 I其后添加:
, @, X4 U2 z" X5 B) A8 Hvirtual void OnRButtonUp(UINT nFlags, CPoint point);
& z7 d6 a5 p' d5 e9 D; o+ B- _5 } D% Z
' @8 ~: t6 f+ _7 D
|
|