|
|
源文件中_Interface文件夹下WndField.cpp文件- x5 E, y4 k& _8 t3 ^7 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ }" x/ \" E7 V/ `& Y: \
% U% A$ t" C3 f# V0 ^struct sItem
+ I+ B r) M% _% ~+ T$ \- x' E{. _' B6 G3 H( r7 a
DWORD dwId;' m- u: Y9 U. R; F4 ^8 D
DWORD dwKind2;) ], K& \3 [$ C
DWORD dwItemId;; U$ {7 |% l' _
BYTE nIndex;
6 c* k( T. g7 `6 X0 a3 b3 EsItem(){
! O R& A8 o+ G2 B) m dwId = dwKind2 = dwItemId = nIndex = 0;7 N9 g( }% }. A# `* g* i9 K
}
3 v+ l! B* \; W) K/ [3 {2 Sbool operator < (const sItem p2). K% {/ F. z" ?, \
{5 T% M* C( r% |: }9 N0 V
if (dwKind2 == p2.dwKind2)
! g! {5 r" h9 `* B. i8 g7 _) x8 I {
' K! p: @2 o, b6 j% _+ @5 f' g return dwItemId < p2.dwItemId;
; M! s" a" B5 y9 t }else{9 R' ^/ d* x3 h; p
return dwKind2 < p2.dwKind2;, B: w$ w& e' B/ N6 i4 y, g
}
+ o# @* i' F' z4 A}
, w7 o8 D& y2 g& G6 H};* v: e2 L1 F4 S4 f! N
class CInventorySort1 Y: x- \$ _# V6 H5 o
{' m* R* O* q1 k8 _% j1 [6 v
public:
# K& G& Z% `: B2 B* b5 G1 s1 ~* XCInventorySort()
: A1 X! Q0 j8 ?% U" B0 d{0 d: k. J4 A# Y# Q- l
m_dwPos = 0;
: Z/ m3 M/ T6 Y% N}
/ r2 ^9 Q! j c* K/ N) {* v~CInventorySort(){}$ {& l0 G% l0 @1 O! h5 j+ f @
private:
' b3 {# [* }' j9 |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 ^! {: j" Y9 n( z [2 zDWORD m_dwPos;
% ~" w- d3 b% m; n: h( Lpublic:. R- G, C( D- Q
void Add(BYTE nIndex)) E3 X2 C' I: h
{+ O3 ~5 G/ G. K- D# x' q% B+ |
if (m_dwPos >= MAX_INVENTORY): J$ I7 F* D/ n7 i8 x& [5 e
{# P2 b- F7 r2 U8 r
return;
7 M ?! {8 j: S1 u: u. `3 O* O }
! A8 C9 J6 g# w& X7 b7 E0 M m_Item[m_dwPos].nIndex = nIndex;% `" J. d# a7 S8 G" L2 y; |1 {
m_Item[m_dwPos].dwId = m_dwPos;
[/ d4 F+ _1 z; {) A8 i6 T7 t m_dwPos++;
& Q( Y- K5 L* `& k+ Y# n: Z}) J5 d+ U& L0 {- B' G7 E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: `2 i% u/ h3 ?# M! d
{
" e/ b, e3 R* s) a* a/ K: G for (int i=0;i<MAX_INVENTORY;i++)
5 E: ~* g$ E0 k1 C; _$ U" {4 m" J {0 f' v; @# e( n: t
if (m_Item.dwId == dwId)$ X& S. o/ M- N( \6 f& a( n+ L
{" ~- `/ @9 p0 \8 l; ~
return m_Item.nIndex;+ I2 D' P6 Z& f4 w% \$ N5 Q
}
5 _) L% R' U7 M" { }
) q0 H' T: _/ ~ return 255;
1 K4 Y6 C( V" I* |- B2 k3 }}
2 e& {/ d, \" f3 U9 H1 d$ nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 \- d) y, w: {0 @% i4 W" }7 N
{
' L& C N+ t3 W4 r" I0 X- o BYTE nTmp = 0;& J; D8 q; A; k% G! X
bool bDest = false,bSrc = false;( _5 ^3 j. W& Q6 ^* E
for (int i=0;i<MAX_INVENTORY;i++)/ b5 l2 E; s! N. @# h
{3 r& ]" f. z& Q, A `) m2 p
if (dwSrcId == m_Item.dwId)1 V$ R) U4 Q* [) k- d: G; s B q
{: M$ O6 f; i7 ?) y: b
//id相等 则 改变对应的dest和src
- L2 }3 P, Z& {9 J2 P nTmp = m_Item.nIndex;, D* R; R/ i0 V% P
m_Item.nIndex = dest;" ?2 ]0 Z2 c& c, G9 G4 I* \8 f
}4 b0 r0 m+ x. k1 b% f+ ~( C
}: d% l* B! a3 ?. C) w
//临时数据保存完毕,交换开始
/ z( ^" s$ E- S for (int i=0;i<MAX_INVENTORY;i++). ?$ l. M) ?0 ]8 h2 a/ N/ B
{: \+ C& Z% I" t, O8 X: ]
if (dest == m_Item.nIndex)
9 O: t$ p- {- }/ T {% L8 v; ^/ Y& V# U6 C8 p
//id相等 则 改变对应的dest和src ?, s, Y) |' y8 J! |! \3 _, {7 t
m_Item.nIndex = nTmp;: i: P. f1 g7 e9 k
}) n! |& d. S( L, u7 b" S/ s* w& J
}
' A% E% K B6 G$ v6 }}
6 S) |) ^0 w( V" n& l4 y};% }: m+ {3 G4 l+ Y% J0 n
-------------------------------------------------------------------------8 r4 q6 q- I# K3 m: |9 ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" D5 i3 Y% F, N7 N8 k" l1 Q0 l5 R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 i( X" t5 c) j& s( v紧靠其上添加:
* W; a5 U9 f: U: [0 M! h; }if( pWndBase == &m_wndMenu )
( E1 t$ q2 g( T) M4 ?1 W" t{6 U7 p, t$ y5 h6 b% c, i5 R
switch( nID )
( D) M( u2 B( w+ j% ]) u8 D+ z$ Q {
. g. F6 u' ]3 }, w case 2:) }: U9 ]: w$ l0 X+ c4 B' r, @
{3 R4 y$ B$ ?8 m4 u" h' d) M/ ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 e/ R# G3 _2 K R8 L1 L if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ e" v/ x4 u z- S3 i {
. p+ h9 T% U6 L. k& {& j$ u break;) @9 E. r y* a9 I8 @
}
7 L- d1 D, f( H; V& g for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# T0 z& L; b1 e5 p, t: Y1 P
{
: `$ h* _ ^$ ~9 s8 ?% c- O0 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 I! W& w8 _" E. u/ ]$ ]' v if( !pItemElem )
( C- s1 `( q: x# G# H. Y0 x continue;
( p! {: k+ R. X: Y( }6 E if(pItemElem->GetExtra() > 0)
3 a6 }7 J J$ \" }5 G% @9 r continue;$ S- y3 I: Z) y) m% f6 _# x3 h3 t& Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 c% N1 @ B0 t" } continue;5 F" [( V" d: L# M( Y
if( g_pPlayer->IsUsing( pItemElem ) )& p9 j+ x8 P0 o4 s' a
continue;
2 E; J7 P# [; i if( pItemElem->IsUndestructable() == TRUE )4 p0 C! w& J+ g, }& B
{
# A) M0 S- J( \( D# _4 ^" X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 T8 j. t$ _; E1 y
continue;' {) O0 S( `5 y- c C( E& j$ b+ ]
}8 x' u+ R" W2 }1 a4 d9 f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; A; a$ K" { k; H, w
}
" i$ ^8 U: |. H/ D* }7 P break;
* C8 f. C0 d( n( F0 P }* E! K* w. s1 S0 P% v8 `; E
case 1:! T- V2 G. }7 N* A
{5 k" m8 ^: H4 k+ \
//整理背包3 Q% x& ?: b( X$ N. D( ]
//////////////////////////////////////////////////////////////////////////$ F& P! V' d! M- s
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! |7 ?% } V# n+ [4 }
//////////////////////////////////////////////////////////////////////////
4 U: f- }& ^9 N7 } //////////////////////////////////////////////////////////////////////////% ~: ~' ?$ ?* h; b0 g7 d* b) q
CInventorySort* pInvSort = new CInventorySort;; t% d6 j' x! x; n, \
vector <sItem> vItem;
, w. E4 x4 \3 U vItem.resize(MAX_INVENTORY);//初始化大小
& L. i5 s/ L5 Y0 v1 v2 F3 C. C L3 P //////////////////////////////////////////////////////////////////////////% [; O4 g5 a- D! q0 ?
//填充数据
: v5 G) S G' o. z! F7 ^ for (int i=0;i<MAX_INVENTORY;i++): `# k9 k% `$ ~* U; H# n
{
% N7 u# i, j- Q3 X1 h: P* s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 ?+ q" n3 b1 t if (!pItemElem)
3 y& K0 f5 p. Z5 Q/ e! V# | {$ t* u7 F* |6 {- [2 Z, ]' f, ~
vItem.dwKind2 = 0xffffffff;! _' u5 \7 b, t3 q- G3 k* b
vItem.dwItemId = 0xffffffff;) q7 P) m+ p: |! P- G! }9 u
vItem.nIndex = i;
# v$ o9 N$ @2 T0 e }else {
: H0 U. V& c7 F( ^% v1 P ItemProp* pProp = pItemElem->GetProp();' R4 F, y$ z* |2 U: w, H2 @# |: }7 |- T
vItem.dwKind2 = pProp->dwItemKind2;9 E' `3 o# H b! s- h( U
vItem.dwItemId = pItemElem->m_dwItemId;
/ N! C0 q/ m; d: C vItem.nIndex = i;' H4 `* P `% m2 j
}
' y$ b: o4 h% a //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 @7 l$ B( X$ v) x2 R0 N4 U
}
6 M+ a( h3 @* s }% I7 H$ S //////////////////////////////////////////////////////////////////////////: W% {% J: m) C" y+ S- \8 ~/ S
sort(vItem.begin(),vItem.end());//排序$ M) u5 `8 ^4 V) r! H
//////////////////////////////////////////////////////////////////////////1 \1 q4 P, ^* [7 x' k
//交换, g' ~ p2 m: _) d. w; b
for (size_t i=0;i<vItem.size();i++)
1 u% S% k6 \' e" Q. u4 U {3 l1 K: T: I, N" I: ?# H$ Y; x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 o8 Y V( {/ A% `) f pInvSort->Add(vItem.nIndex);0 x1 w) r3 @7 z {$ L$ I
}
% u! [# K. K5 V1 k# Q' x7 V BYTE nDestPos = 0;
: v; |, k$ Z8 c5 M3 u$ ` for (int i=0;i<MAX_INVENTORY;i++)
5 |1 ?5 M4 g0 }* `, K2 w {
0 n' q! }0 ?* u( [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& V' `/ o: _3 g6 Y7 f- @
if (pItemElem)
u: I* r* \2 P- A2 j {
% p1 r+ o, l. O0 ?. |( n) u if (IsUsingItem(pItemElem))9 s r4 z! u' s8 y+ B$ E+ ^
{
# b" u7 ]0 T! N, D //这个位置无法放
! E; S$ \0 y' m7 A nDestPos++;
7 A/ T* V2 o: _4 _ }4 M& H& N6 r: X, H% n
}( l r$ S% V3 _4 B, |0 m
BYTE nSrc = pInvSort->GetItemSrc(i);. R) [ X" [8 E d# m: w( K5 e/ j
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 L f; I* Y' ~ o if (pItemElem)
* C2 q. G1 W$ l* ` {
( |0 U: b/ R/ @! F& }2 z# K if (IsUsingItem(pItemElem))& `$ r$ G- n: e {& L' \
{+ V$ g" o+ p/ N) h* g. k
//这个道具无法移动,跳过
% r, _6 R4 k, n. X8 t5 |1 ?1 `& v continue;/ _/ c! F% a7 E
}. T3 X8 r4 {; S' w
}else{
4 D ^* g$ W: c& o( F# G' c //空位置 不用动9 u" T0 B2 \; v1 R2 {
continue;8 ?7 o% _# W$ c- ?$ `
}
+ G! G! {$ k# n3 y7 h9 w4 a //////////////////////////////////////////////////////////////////////////
( g) Q6 u% h5 u& A* C7 T( r //开始移动
, z6 o) `# C) W0 |2 a if (nSrc == nDestPos)) A6 c7 _, z" V: T. h2 }' R, a+ l/ n
{7 X6 ]! F" R$ [+ a, z3 k: \5 y) P
//原地不动) }6 ]& k; K) P* _1 U9 f
nDestPos++;
! G6 D4 g3 {1 T6 j/ Y continue;
: S0 g+ A# x- T2 \$ X. }3 Z3 z }# u1 W& M q$ a* O
pInvSort->MoveItem(i,nDestPos);/ y9 f" Z; g# l# `
g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 L6 }) ]2 m, @8 ^
Sleep(5);( T& a9 h* s: F/ d" O6 B
//Error("移动 - %d->%d",nSrc,nDestPos);
1 ], L5 E8 C- ]# k nDestPos++;+ J3 p/ Z2 f* ~$ o# E, U4 A
}& s( ~9 K0 a# v& t$ L1 {
//取第一个元素的信息
, f: F' p* D$ U# i# }( N0 T! f /*
& P5 c# Q( O8 S0 E) b6 j6 L if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ L# o$ N" P7 p" e7 g& r8 J- k. W3 ~ p {
2 C* |/ [0 I9 y- w8 C$ A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 \% q- p; R2 X, X' ~ I& ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); c7 i9 C$ P4 l! ^- E6 K/ N/ r
}
6 m- U; ~) Y5 V& { */5 `. p$ P( s; P; ]9 v4 `
//////////////////////////////////////////////////////////////////////////& J' t) T7 q) i* f# F
break;$ o; [, R' i2 L; D% U0 m; A
}
; v K V1 i7 f9 D2 E, m d } 7 O2 z$ S" V' s/ v! i
}
! X/ g5 k1 w' y% C0 tm_wndMenu.SetVisible(FALSE);
) }7 K: X: z; s; ^9 R, \' t( i, J
) b/ ]5 y* z: p7 }! f) ^8 E--------------------------------------------------------------------------------------------------------
4 Q8 \& l+ U @搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' o' U3 F/ e( q" [6 x5 W8 w3 ^3 w; l
{
( I9 U. ^+ X" ^BaseMouseCursor();" x% g6 L& M9 P" c
}$ U9 y9 `- L: `+ [: k6 h" q
在其下添加: E( L' [& Z# e; b- A, w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 M: _: A3 @# E1 X- Q9 r{
( U+ d" Z7 z9 Fm_wndMenu.DeleteAllMenu();4 Y, [3 \# @4 Q! D, i/ v
m_wndMenu.CreateMenu(this);
* \' ]/ u+ ]" l( d4 l! lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 t3 q4 G' ?* H& E" k& \0 r1 z, z& H `* W9 A, D9 v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( {) i. }" n" _2 ^, l6 Z3 F* [
{ U! S0 N7 C9 R5 e7 Q) b1 y
//P以上级别才可以删除所有道具
8 b0 V x7 H6 T$ ]8 D! | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 h7 y+ T/ ]# w6 i. q
}
: G/ P. S" q; z4 ^8 am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& O% H# }" H b5 e$ y% Q- D* B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 |/ ?* O0 O4 I6 W& w/ i
m_wndMenu.SetFocus();# v; V" ?9 }8 W' r/ ?
}8 q8 U) D; [5 D3 `; v" X5 G1 Q/ i
------------------------------------------------------------------------------------------------------------
" k( y9 K* x* _7 L! V- Z; w*************************
/ @8 t$ `% z: [. J wWndField.h文件9 W& I# E1 g# e( o, S
*************************
% q- m# |4 K- z# q5 @搜索:BOOL m_bReport;7 \# `1 N+ G8 I7 e) `
其后添加:
/ F6 ~$ R" W9 m# cCWndMenu m_wndMenu;
6 t) e0 }! I' N' c+ J. U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 ?5 C% U/ ?- ]3 [% I* Y% E& F9 L
其后添加:+ @" V; s% `8 \8 ^+ B
virtual void OnRButtonUp(UINT nFlags, CPoint point);0 z7 \/ |4 G6 U1 \
) p6 S3 U9 v n; w, _) O B1 W$ W1 S" X
|
|