|
|
源文件中_Interface文件夹下WndField.cpp文件( | j/ n7 i5 `# J/ I% |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 g- W( I6 \/ ~1 I2 O" ?5 Y% `$ r
* y5 V* Y, i9 b' ~) D8 {- `, P
struct sItem' x) J" l( R- O1 Y% w T
{
: X6 k6 r0 Y4 N' W& N2 d: `7 RDWORD dwId;6 y; V# J! M, _/ r) d* l* {! r+ P# p
DWORD dwKind2;
2 k \% e2 b9 I6 ?8 I# L3 v) hDWORD dwItemId;" a' o0 B. a; S$ r3 U Q) c& Z2 k0 p$ {
BYTE nIndex;% f! S, }* H3 \4 H0 _$ d) @
sItem(){
( v# Y4 I) H, A3 F dwId = dwKind2 = dwItemId = nIndex = 0;
- O% _9 s r9 _0 H' v}
5 i9 N e8 U6 ]9 ^) \; u( bbool operator < (const sItem p2)0 e3 B- c ^+ b% D0 t6 \' a
{
S2 c" C$ k4 d if (dwKind2 == p2.dwKind2)
/ H; L+ C: g5 V( ? @ {
. ] n: [" }/ P( u! d6 R! R1 W return dwItemId < p2.dwItemId;, }' D- d" f$ b
}else{5 z: w Y @* E5 _+ d& x" }( x0 o
return dwKind2 < p2.dwKind2;5 `0 D* Z9 f9 N' L/ w0 Y
}
8 Y1 O% s3 f8 A( w}3 Y1 H. B9 ?% ]1 t! T( B
};7 x7 ]5 x% z/ ^# U
class CInventorySort1 ?' I2 g: Z( A' Z& \ Z# E, c: v
{7 Z% ]5 M0 ^ v. c8 ?' M0 d
public:
* E: j/ E* A/ K, v8 L3 m" w" ?CInventorySort()
$ H, R# F# S# c* _7 z7 ~1 o{$ _2 J O. \0 U) X
m_dwPos = 0;. G! r6 v' R3 f+ p e; u
}6 z4 _+ t$ Z6 I2 a3 I, e7 {
~CInventorySort(){}
B) K; @1 U7 i$ R+ Y) Uprivate:
. [' W Y& D$ U4 t7 O1 S+ F, O% ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ l" D8 W+ E$ S) nDWORD m_dwPos;
# a$ g. O- L3 I$ s; @( U* @! Jpublic:
* L% a: A& g8 q1 Ivoid Add(BYTE nIndex)! U' W: N6 L1 V/ S
{% y5 F9 P5 X' g
if (m_dwPos >= MAX_INVENTORY)
/ G, _+ }7 e: E+ l/ K3 s6 \# } { m1 K, z( H: x
return;; {* e( |. R+ x, V2 k
}
C4 b" t: i& @" L; C8 i m_Item[m_dwPos].nIndex = nIndex;
( ~0 N% {- y8 Q6 ~ @/ c m_Item[m_dwPos].dwId = m_dwPos; D1 S. t5 O9 i! V5 f' A
m_dwPos++;. ?* v! R, K# D; d) {+ A" A0 ?8 Y
}5 i* b- S/ T1 ?
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, c/ b2 L- J# E) }6 q
{
1 E/ R) F. D+ _ for (int i=0;i<MAX_INVENTORY;i++)1 d% n4 m: o3 {: \ \
{+ p8 p5 L* V4 D
if (m_Item.dwId == dwId)
; i' ]" `% p) X1 u% _! i: G/ ]0 ? {
* N4 g3 n% d1 C u4 O, X return m_Item.nIndex;( O+ A, ~% r! p0 e7 Z" X
}
8 a7 q* u% [6 p' @9 F n4 h3 s; g }
l$ u8 |# N& I return 255;# s1 l5 l2 J0 e# Q
}
( C) @# V& l. [6 |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 q9 |; ~; P2 L
{5 i5 z1 A5 K* [% C1 J( {
BYTE nTmp = 0;
2 J" G8 K$ {+ k8 e bool bDest = false,bSrc = false;* j! r/ l' r0 M- R% m F
for (int i=0;i<MAX_INVENTORY;i++)
0 |- M- q$ v& H& T s$ n; j! s. K2 V {2 h; i: E8 T+ c: J
if (dwSrcId == m_Item.dwId)
0 R# M- K. C/ J! | {, Z5 t2 a+ J! x$ j- v( K: x- p
//id相等 则 改变对应的dest和src
+ T% [0 t$ s( ?( Q% z nTmp = m_Item.nIndex;! Y! }1 K' E3 h- l H4 z
m_Item.nIndex = dest;
6 {0 \1 {7 z) B4 }1 @6 l6 d }5 ~+ l0 c6 ^+ C+ s, M* |' _
}
2 D3 p& b% Y' B //临时数据保存完毕,交换开始9 k, i' O5 @7 l
for (int i=0;i<MAX_INVENTORY;i++)
7 i1 V6 U" U$ S+ f: q$ e# @/ Z {% M u. @$ h! Q% I6 r
if (dest == m_Item.nIndex)0 y5 c* {% \* n5 j
{3 Y E- f" b8 {+ m/ f+ r: U: r4 ~0 M
//id相等 则 改变对应的dest和src
. O! T; M2 A( f4 X2 ^ m_Item.nIndex = nTmp;6 ]; j9 B% I- L) f
}
0 q) e" I5 b5 `' @# F: C4 { }
2 W' `3 x! i2 a3 Q$ ~- g}
( G4 W% S! N: a8 l, z$ t};
5 V2 S8 c1 g0 D( z+ b-------------------------------------------------------------------------
- {3 Y; g2 r+ `+ U6 T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 X! {& n H9 H( v9 u* l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); W2 x0 W# @& T% n: D
紧靠其上添加:
8 q3 j4 m) _2 D, Xif( pWndBase == &m_wndMenu )
7 N* H1 D! {8 N' S{: C7 ]& U+ Q$ R
switch( nID )8 O N% H) ~" }7 X2 p6 ^ o7 y' U- x
{
" J+ G7 e, m6 E* e+ h3 A0 k( z case 2:/ k9 x- k* D- K3 ]0 [& W3 d
{6 w0 X0 z; H l+ q7 {" ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( c! K6 C; p% d/ E7 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 r$ ^0 u8 t8 L! t+ B {
6 q& V& F5 ~) [, y# g: B& ` break;6 p+ F3 D9 {3 W( {% a
}, S* i# W: Y7 f5 c2 P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' i1 Z/ T' T+ w1 g6 M5 l {
6 h* v! {$ W$ H) J' w# ^. ^3 W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ d- P* S! b4 Q( S6 B
if( !pItemElem )$ N$ J- M/ J; h2 c
continue;
/ D | d V- [5 J0 R if(pItemElem->GetExtra() > 0)
1 {, f3 D1 S9 \4 ^+ [1 I continue;6 l8 ^" f9 R/ Q% a" d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 g3 \1 }. n$ H9 o
continue;
* g& _( V+ y2 H3 e' O2 e if( g_pPlayer->IsUsing( pItemElem ) ), m% J- S' z" I* M' c
continue;
% V/ E% l$ D: q- h7 |- t5 F5 d if( pItemElem->IsUndestructable() == TRUE )2 L( k; h. A+ ~7 l) o5 U# p+ |4 O; e
{
. n" x5 r' a) ]3 b9 b* r" J: i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* F. @- a d$ \! ?# S/ h7 ~ n continue;6 G' f6 _3 O0 U3 X! b" k5 j! t& g
}
. X8 ^+ S3 z& R, [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* R" B3 \' L3 t4 c* f }+ c# g+ [' J" k/ m
break;
) O, q7 l! T: \* I7 _4 j4 W& A }; g% }0 e0 s6 v+ D) C8 Z
case 1:
8 p! {- K$ P* U2 U {/ N2 k9 n$ r# i1 Z- L; ?
//整理背包! ?; t( {- t( s6 _
//////////////////////////////////////////////////////////////////////////9 {7 `! g- t* C3 i, ~$ b5 o, {5 v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* K% Z1 x7 }8 ^$ l
//////////////////////////////////////////////////////////////////////////
7 Q6 b5 G% e1 `# y9 I- R6 A //////////////////////////////////////////////////////////////////////////
6 ^3 L ?5 s9 ~% }9 | CInventorySort* pInvSort = new CInventorySort;4 ]% V2 N! B# X5 v, z ^
vector <sItem> vItem;8 a0 ^* O& E: z4 a- u1 |
vItem.resize(MAX_INVENTORY);//初始化大小 a8 Q# w! X( u0 v$ Y
//////////////////////////////////////////////////////////////////////////9 m% f' M+ B* |% [ M* K
//填充数据% O" G& L1 T9 o" A, M, W
for (int i=0;i<MAX_INVENTORY;i++)
2 F1 V8 t9 l* ^7 O7 n5 U. m {
A- {9 m) W5 X( l! ^* _9 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 _8 \/ d6 x7 W. o7 |# V
if (!pItemElem)6 w& o, e5 I$ J: e! ~1 G9 r) O% d) E7 V
{
( W0 Z2 X y5 f vItem.dwKind2 = 0xffffffff;
' E: D0 y# E" p vItem.dwItemId = 0xffffffff;- }! x9 b" P; u J
vItem.nIndex = i;0 O5 c1 f5 [8 o# S2 N1 u9 A! K
}else {
% |% @: F9 x) U1 Z ItemProp* pProp = pItemElem->GetProp();
# {1 G: \5 Y2 C vItem.dwKind2 = pProp->dwItemKind2;# j" u7 e+ T5 G
vItem.dwItemId = pItemElem->m_dwItemId;* R6 h6 p9 a7 [0 z
vItem.nIndex = i;) S5 S$ L L) U/ G* }- @) S
}
! @' k( Z' ?5 l' [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); Y! W! ~* f( {/ q, E: @
}
3 F- y0 ~+ S. V3 G& S- b+ Q5 P) O //////////////////////////////////////////////////////////////////////////
# z$ h: t; A) `: W5 M* T) t( s sort(vItem.begin(),vItem.end());//排序4 R5 C0 }& J1 l$ k" L; A/ @* B
//////////////////////////////////////////////////////////////////////////: W- o& O( d8 T+ H( M5 {0 ?
//交换
, g: ~. }9 W6 v9 a% f3 O for (size_t i=0;i<vItem.size();i++)- q! y, o7 Z+ B7 ]1 I6 \
{6 S) p& o$ K+ z* d0 X
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 r9 l9 Q- s$ ?1 O/ N- J
pInvSort->Add(vItem.nIndex);+ q/ y Z2 Z W
}
: W0 U; J% N6 R! M! X BYTE nDestPos = 0;1 j5 l7 t% `4 E) @ A; M4 M4 G/ T
for (int i=0;i<MAX_INVENTORY;i++)
/ h6 n- d( w+ k7 Z9 }. t O6 ?5 t6 z9 v {/ Y9 F3 u' W! e' s; Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( A) o% ^) o4 _9 R! N& }- q if (pItemElem)+ p4 c: ~2 F1 C
{
1 U8 d5 q( O4 s1 D8 g" C3 j: P if (IsUsingItem(pItemElem))
5 _+ L& W/ k" r; M( G7 s) n {' j$ V8 V# {1 r/ F8 z9 o7 ~
//这个位置无法放1 _: s( N S" X( x
nDestPos++;
- c0 x0 O7 T+ y. s' B( j! h Z }
2 b" Z g- _5 f }
8 H, J: j6 d. g s+ D6 z7 I BYTE nSrc = pInvSort->GetItemSrc(i);) \7 y) ^8 E* h z, C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 H& g! K/ U& X6 r4 \' a+ y* M if (pItemElem)* L# j2 y7 V$ T9 c3 f
{3 U& P T# S+ w1 r& _
if (IsUsingItem(pItemElem))
: k P# q& W; r$ v6 `0 g {
3 p* \- _/ B J- \- Q8 C7 u //这个道具无法移动,跳过7 I4 c4 B, d# C+ I- \% @
continue;+ x k8 v; `# z, C" a* `2 M/ d
}/ H7 b- T/ _% u7 u6 p6 w
}else{
+ r7 P5 A# A' D& j //空位置 不用动
. o+ q1 p% P/ f continue;7 l7 R8 j' Y) b7 l# Q* C8 A
}. r. t8 U: i' h6 g; K
//////////////////////////////////////////////////////////////////////////
7 {3 W# K3 h8 K* ]/ a- E8 b //开始移动
9 P4 h1 G* Q+ x7 Y: R if (nSrc == nDestPos)
' A3 I& x) s! H t {
6 S' U6 W. _0 x; i //原地不动
- u P! D8 {+ l, i6 S& D8 u% { nDestPos++;
& I5 F7 N }$ U) W7 N continue;
, w. E8 z; M) m0 b7 g$ p) } }6 S: f+ w+ m7 d7 x$ L
pInvSort->MoveItem(i,nDestPos);
3 `8 ~4 L. T: k g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 F/ A' O% b# \% z; I Sleep(5);
% R3 n! M! V0 ]3 [ //Error("移动 - %d->%d",nSrc,nDestPos);5 l& V% H$ b7 b" W0 }# d
nDestPos++;$ F* O3 I4 d, O( T
}& D1 S: ~- I% C/ O' H; e
//取第一个元素的信息
: W7 Z |# Q& M /*
* r# T9 ~0 t& { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 o8 y9 A7 k# w& g7 Z! y2 i {
- r$ B, \: P. }5 H9 U2 T Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, R9 M7 A- a( M* p$ B- r
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. D3 r5 z! n% g5 g* O& o
}# B" M; b% ]/ J* ^" s4 ]6 n
*/
7 ~( |5 }& c; V8 F8 {& l3 \% x //////////////////////////////////////////////////////////////////////////
, c# A8 C- X9 x break;. y( I0 U* b# p# [/ `
}' F+ e+ z7 N- x
} $ k' T" o G. ?( z
}
t( r1 Q7 T+ s! k) |m_wndMenu.SetVisible(FALSE);
0 ]1 ?8 o. h4 h% U, ^
0 ?0 P% n* D7 h5 D& c) a5 C" U$ x--------------------------------------------------------------------------------------------------------
) Q! X: ?+ u/ r5 e% Y( U- P; T" y7 [搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) q# ?6 {8 y2 p% f
{
1 G+ X3 l M4 ABaseMouseCursor();. v( P9 \1 x7 B+ D
}
( B T" x; N7 ?; M0 O在其下添加:
- Q: t% A; p Q6 j% |8 G& Yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 q7 ]5 D; X& A" S$ p0 S
{$ {! o/ I. y! Y# ^ f6 ~7 N# ~
m_wndMenu.DeleteAllMenu();6 K. ^+ j8 `% h1 h% ^* _9 _6 c
m_wndMenu.CreateMenu(this);
) N8 P3 q; H" M; L7 c9 l* _m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! a: t$ E2 S, B3 x; |# f, I5 s) D
) _) s6 G- c5 R) Z' O; D, Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# ^4 R3 u5 J7 |& g{( J; |! {/ F# p6 X
//P以上级别才可以删除所有道具
3 z2 j- F+ i0 {% m m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 p9 ^( V1 g4 e}
3 h1 O7 p. p8 N( Q& mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; A# S4 E$ Z& R- b" O/ cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* {: ~* q' H( `
m_wndMenu.SetFocus();
. T4 ?+ }8 Y7 s& `* e9 o1 R}
+ {# g$ D7 C4 I! r0 z------------------------------------------------------------------------------------------------------------
% \9 Z3 p) W5 D+ G9 ?*************************
3 ]: X3 G7 d; ?0 w" qWndField.h文件
" v0 _7 i, j3 c+ M3 I. s5 m& H*************************: X+ S$ x% }: x6 a/ J1 ]! l
搜索:BOOL m_bReport;$ o1 e% w) Z; V; k6 W2 _6 T
其后添加:- T$ g4 J' v" B3 m
CWndMenu m_wndMenu;7 i0 M! ?4 Q* W# w9 G( n2 l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% Q3 X3 L, g6 ^* F- u, x/ ~其后添加:' {* y% }; R$ E# D( k$ d4 a# F
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 a1 E" q4 F% I* ~- I! |$ q/ Y) ~4 t% i
; p& z5 f+ m6 a0 d |
|