|
|
源文件中_Interface文件夹下WndField.cpp文件
2 y% d0 O7 U. q2 e$ _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 M3 N# C% b; k4 N
* ^# n5 u9 ~6 X4 Estruct sItem
. w2 l; `6 M/ G; A{
. o/ ?# v! J8 D7 ^- M( A1 F% t5 gDWORD dwId;
/ P. |7 K: {. uDWORD dwKind2;0 C: H) _8 Z' p9 _' U
DWORD dwItemId;
! V* c/ a& V, B* O8 c. tBYTE nIndex;% A$ ^8 v% l% ?; f1 q f3 C
sItem(){
" L _0 m& h- X" f' p* f dwId = dwKind2 = dwItemId = nIndex = 0;: l6 _7 b) k! _0 k" |& ^7 ]( F
}! p% C! y" m& t1 S* c! _) o
bool operator < (const sItem p2)
# B5 l: i3 D3 r; U% B{; j* Y; U* `8 D4 y* h/ r: n
if (dwKind2 == p2.dwKind2)4 h- h0 s6 P+ f0 E
{5 g4 T: F% Q, x7 T F
return dwItemId < p2.dwItemId;2 {; J( v2 b2 D
}else{ D6 ? L( k1 e
return dwKind2 < p2.dwKind2;) @( l+ R' w# n
}3 ~9 R, m% V/ n6 k
}8 Z! \) K& d% @
};
4 @; A7 `% O! Q' }class CInventorySort0 E; T! v( Q# l
{: a" ~, r( w8 k/ v+ m$ v" m% t
public:
) m5 S& i- y9 G' cCInventorySort()
6 i2 Q2 J- L7 t3 M( S+ M{
; I+ j2 d! s. \- r4 J4 B m_dwPos = 0;
& V; X0 p+ G- Q" k}8 o; L% w: |+ H( r3 @+ a3 @5 g/ b
~CInventorySort(){}. f$ G! C; f) |2 [9 X d. C: O$ ~" H
private:# ~' ^7 k! ~5 h2 _9 W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 y# @. Y8 j: @# i }: ?) @4 ZDWORD m_dwPos;
9 E8 z+ C# @; p# N1 I- R; tpublic:
! h2 k- K; S, u1 N! Mvoid Add(BYTE nIndex)
% a$ V$ ^1 c. _1 ^) U{7 H1 ~6 E- \# B( q. ?* O' r8 [! p; O
if (m_dwPos >= MAX_INVENTORY). _$ Z' T# M7 n$ z: N5 s
{' n7 P" k! `% _: |) ]% v) J1 P
return;
; `! p7 t8 x$ S" t }
6 X0 H2 c' ?. L: J' `) m& N9 _ m_Item[m_dwPos].nIndex = nIndex;% v1 A4 ^ O2 u7 ?9 f/ B
m_Item[m_dwPos].dwId = m_dwPos;
3 `' q# q" o. j) s2 O" I" u m_dwPos++;1 b" q+ q/ f' t5 t
}
/ N `3 z8 h# ~1 p# dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( `3 A/ p6 d. T" G& Y
{* Q, A) M2 m$ Y
for (int i=0;i<MAX_INVENTORY;i++)
! [7 K# ^! K* [) K1 @4 y {
0 c; O0 t. X! W1 k9 ?; L: G if (m_Item.dwId == dwId)
% X: A9 Z j9 i N" U2 P+ k3 E) ]9 ] {
" R8 r+ U' Q0 z return m_Item.nIndex;
) G8 i, w' t" Z1 Z2 x' t( d }/ p5 k# g& c9 c* y' N7 K% P
}
5 G6 S, @ p5 A# z' G+ a return 255;
, S. x @7 r7 v2 b( A. q}) q# k9 S5 X2 ~. c3 d
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
_/ {1 d7 n1 h! ~2 f{
- N9 z0 P6 A; t6 Q' K BYTE nTmp = 0;
5 O) H Y2 P8 ?! ~* q3 j bool bDest = false,bSrc = false;
( C* w7 W- [' h& P! \7 ~5 x for (int i=0;i<MAX_INVENTORY;i++)
, L( _8 s& M E2 S5 { {* C) g% G [2 V$ e3 f; V6 q
if (dwSrcId == m_Item.dwId)
y' B) I+ R& ]) b/ r {
! }& Z! H* A, C) j //id相等 则 改变对应的dest和src
# z$ K& u+ c- U# m3 \ nTmp = m_Item.nIndex;: v3 Z$ b- v% y+ O4 d9 c
m_Item.nIndex = dest;2 ?* \0 r* W2 f2 }
} ^% O3 T) r1 V/ W- m4 y5 P, N5 e
}
3 j) l$ b% v) q //临时数据保存完毕,交换开始
' t; D" _! t9 O for (int i=0;i<MAX_INVENTORY;i++)1 S3 a. U0 v3 o' G W1 M/ G3 s/ F
{# h- e( k2 ?# c9 B) t( k
if (dest == m_Item.nIndex)
) n/ { r2 L( S9 r {
3 a. R, c; z( ?3 c8 v7 W //id相等 则 改变对应的dest和src7 a: Z* d% E% P2 y. v
m_Item.nIndex = nTmp;
9 g+ ^: d% {- X; m1 Q }
. L! I/ f5 \7 r0 U4 L }& M/ E% o% n' x
}- R/ H0 u' m! P" H3 E& N0 } ^% U
};3 x. H1 V4 M0 F1 o! o
-------------------------------------------------------------------------
. f7 m0 R$ c) H3 s* i9 \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); E W3 A5 L. q9 V! Y2 y8 T2 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 a- K- Y6 L3 u* |4 S4 `1 X紧靠其上添加:' y: Z" K& [7 o$ C8 X4 L6 \
if( pWndBase == &m_wndMenu )( ~( {0 g: G8 L: V: w% N+ Z
{- C; C3 W( x: U. @# U# L( ~
switch( nID )
}) u8 O: X- @6 G- b' G; V+ I l {
M# [& I& b& _0 d' V case 2:0 I: P. s5 [; g7 c0 L
{8 D1 F6 d: O/ L, c
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- a0 o; K5 b7 Z5 Z6 _ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# V Y D8 M& p7 P8 d, v3 ~
{9 S0 s0 y# w6 t0 s: x2 Y
break;
+ J, D" U* P* J4 Z2 m- @" b }
% Y# n' f2 @" n$ ?0 b: q$ k4 X for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( P& S2 x1 [4 @7 j, O8 X
{
" Z3 C8 h8 M; d) d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ A2 X& D' @3 l3 O/ O. p1 T if( !pItemElem )$ _, q& B, F5 e
continue;
. I% @ C* z/ B& ?* }" n if(pItemElem->GetExtra() > 0)
+ f3 W5 ~; u' h9 D" n continue;
X, S) ~) U E# x' g; p, } if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , |/ K- y, p% U# h h) @5 T3 k* }
continue;8 S3 z; `$ f! N- D K2 _- `8 S
if( g_pPlayer->IsUsing( pItemElem ) )1 W1 i7 ~* j |6 J: V
continue;
g; c/ V! ~; I4 S" w0 I# i" r if( pItemElem->IsUndestructable() == TRUE )
7 J# ~; Z4 ~2 v {
' q; y1 y- b7 q3 s g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ r% V! \( f7 }7 d continue;
+ z6 h ?5 R( C; R }
0 h c/ l0 L, ^# \) Q/ W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 q# ^, y, n+ R) I- ] o. e
}
6 H9 n. k$ W# Z3 N, z2 j break;$ A# B9 k+ B% e- ^; \
}
2 @+ Q0 j. @. q: @5 }! @+ Q( [ case 1:6 {/ f5 L# `8 P" U, ]
{4 K: f/ q( \ x
//整理背包
@" |$ C& V; X+ p6 o p4 D3 K //////////////////////////////////////////////////////////////////////////' a4 {; @7 H; c; r6 E o. B$ J* p2 s
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ y* c N- R2 u' C# {' z7 K //////////////////////////////////////////////////////////////////////////# C# L- ~8 X! F: E( N
//////////////////////////////////////////////////////////////////////////' C, ]' L C3 D- @) I
CInventorySort* pInvSort = new CInventorySort;- e4 R/ s0 M% P: @3 f4 P
vector <sItem> vItem;
9 B" j" @# S C- v3 b. X1 I vItem.resize(MAX_INVENTORY);//初始化大小. T) d% [0 P' T
//////////////////////////////////////////////////////////////////////////5 O7 q) A6 j2 z# @( P+ M
//填充数据. C! f5 R0 A) f p8 B6 R
for (int i=0;i<MAX_INVENTORY;i++)
6 M& n; r3 A; ^0 F. c- |7 a' c {
+ Z( t1 ] a* U e1 B, ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% m1 I) V) Z# z& b1 g
if (!pItemElem)
7 M% w8 h/ J# d& z4 q) V {! ~6 d5 f9 @7 P9 c9 M& b( O
vItem.dwKind2 = 0xffffffff;
6 |) R! E m% P! g4 ]* p vItem.dwItemId = 0xffffffff;
. h; U7 O% Q2 \ vItem.nIndex = i;4 X3 H- u" t0 @* w( t1 {
}else {9 @: g3 M1 ? u0 B- ?4 L" C# G
ItemProp* pProp = pItemElem->GetProp();- H! }1 G5 k |5 F
vItem.dwKind2 = pProp->dwItemKind2;
' L6 b: R @$ ~% p vItem.dwItemId = pItemElem->m_dwItemId;
) ^% P* E* h7 @: e1 Y, R, u vItem.nIndex = i;% J4 f( q( H9 b% I: Y
}
) x/ q+ }3 _. `' B& l8 N: s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! @/ J }9 S. J; {; e: d9 z
}
: U( y" d) h* ^6 F6 j' o4 |/ ]7 v: X //////////////////////////////////////////////////////////////////////////
% f- \) p/ G% L3 i; y& z1 P sort(vItem.begin(),vItem.end());//排序
% i W! [+ u2 U7 R; O //////////////////////////////////////////////////////////////////////////
" V3 }! |' y6 C; ^# f, l& A //交换- P/ u. P0 g; }$ {3 ]: r- F: ?4 c
for (size_t i=0;i<vItem.size();i++)6 V) d; Y& w& R1 e0 y: J
{
7 T0 K) k+ U, z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) ?( O! G4 e3 u pInvSort->Add(vItem.nIndex);4 R0 [) s) j3 N
}
3 O- I7 a/ p0 P; l3 s BYTE nDestPos = 0;) S' N% T4 E. C
for (int i=0;i<MAX_INVENTORY;i++)
# _/ G* K% }+ ?3 |0 M5 F% m3 T {; G5 ^1 I8 l. P- D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% b; m7 ~& |# E7 _0 @+ x
if (pItemElem)
' Q. O# ]; y, [ {
- }0 A' a4 n/ D/ @2 _5 z( g/ @ if (IsUsingItem(pItemElem))$ X& i- S& ]3 f% W6 h- ?
{
3 F' J( X# E6 E2 F //这个位置无法放
" ]: F" R5 ?/ v& I) H nDestPos++;, F& b2 N% ~/ o
}
0 o6 Q* C% z e; F }
( Z( e0 ~& J } BYTE nSrc = pInvSort->GetItemSrc(i);5 c4 B D. i, }' V
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); ~3 u* M5 B. @- K- o) g# j" o
if (pItemElem)
/ a, x, L* f- ]1 P* X7 R {
0 t7 m u9 Y, G. Q if (IsUsingItem(pItemElem))5 o( o9 P# b7 ~) Y3 I/ M
{) {1 L) P. M) p5 O9 U3 d
//这个道具无法移动,跳过
3 h* I& k% u" r7 ?. I+ c continue;+ Y p4 D+ O1 r A$ B0 p
}3 l6 g U. w4 ?6 ]$ \
}else{
. `8 K1 q' q1 N1 r4 ?6 ^# w //空位置 不用动) p+ a- Y& K7 ^5 o# Y$ \
continue;
" V4 j* W) S0 p# Z% b( U; d }% T; J1 p9 O% ^2 n6 x
//////////////////////////////////////////////////////////////////////////
' K6 ~ k9 V( W! o- Q1 D //开始移动! T- G% C$ K! |4 }
if (nSrc == nDestPos)
+ R( ~$ z1 P9 g K- C( \ {
- I. g0 ] R l1 z; t" W //原地不动* i d- Y4 V1 @8 N
nDestPos++;
( ^/ I. a) T: a7 L continue;, T" ^$ m. H9 I) Z, a6 b. J
}
, k1 B- S* {6 P- ] pInvSort->MoveItem(i,nDestPos);
! R% F0 n2 i+ O7 P% g& _4 @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 X0 {) `3 }$ q, o2 X/ g# p6 g
Sleep(5);- E- @" b9 t- e; ^/ F f& ]
//Error("移动 - %d->%d",nSrc,nDestPos);$ Z% I1 ^5 S0 K! a
nDestPos++;
, S7 F4 m! e+ h) [/ p5 ] }
* |: Z8 V: O3 \! F% { //取第一个元素的信息( Z) a. T7 X* j$ H$ E% Y& b
/*
1 l. B+ S# e, U! k7 _9 X if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), V$ I4 Q+ U$ i9 A5 a9 W$ {
{
" r2 x. I* S, O8 O Y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ |4 c7 k0 a3 E) r0 B4 r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); T' a' h' e2 P/ g$ M& j+ u
}
' W6 ^; b- S9 W; v2 L */
5 |4 U9 A# x0 [( H; b+ q //////////////////////////////////////////////////////////////////////////$ N' n; D5 t% o) {8 N
break;
" H; m: P: s- }5 ^4 v }
- n! x4 T$ ?: H' S7 Z) D) T9 V! L }
; E4 n- y, J- l1 f}; B/ m$ ]# F. Y* v
m_wndMenu.SetVisible(FALSE);8 `* j; {, F3 ]8 e% C$ |
* F4 j" d% N8 F! O. i2 T, e' ~--------------------------------------------------------------------------------------------------------9 g: Y7 _( H2 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ G$ ]8 t. R0 `6 _6 B* Z5 _, G' e
{. E, [* L0 r$ w, i8 i- u. A" u
BaseMouseCursor();
6 M/ o6 m4 X0 W" R4 M" j! p}
9 K+ d# k# y4 S, S% z在其下添加:% G& C) \7 Q. M& \4 [( ^! l. ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ t- V6 X1 F7 P, z9 ?: Z2 J{$ v5 y/ g0 r. |7 ?6 u/ J
m_wndMenu.DeleteAllMenu();
0 l- H I7 i( b/ ^% K1 mm_wndMenu.CreateMenu(this); n; R$ E Y w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. m0 v4 Q8 x; M6 ]1 c0 j
8 B5 C3 X/ J: S- w/ g+ z. i; R1 S
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 b6 D& O, j# w7 z3 B{
& J" d5 |4 ]4 Y, I3 Z //P以上级别才可以删除所有道具% R) A- \! r, _4 d% m
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: g9 s0 B* M- x z0 A}* ^! _) q( R6 Z, m3 Q" S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 Q: Z; m) V3 ~: P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, U7 R& f6 j9 g: d1 Zm_wndMenu.SetFocus();) k. M; [. g4 d0 E; U
}* P7 k ?1 z6 l4 {7 P
------------------------------------------------------------------------------------------------------------( g' o! f$ k' I9 s9 _: C0 Z7 \0 I
*************************2 [2 A& J# P1 T# N# A) s3 |/ h/ `/ d
WndField.h文件
- r; Y8 H; n( e2 ], K, G0 b*************************8 |3 }5 z! W; R7 a( H( S/ d
搜索:BOOL m_bReport;
) R2 U( t8 H" k7 l; e; G其后添加:/ D2 L7 z9 ?/ n
CWndMenu m_wndMenu;
9 O: w) F2 }. l0 J) Z. R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, f& \7 |" ], [$ r8 Y" f9 I. V
其后添加:1 ?0 R2 d; P$ w
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* M g5 |+ y% e* `: c/ A2 {/ l, r& i' K( e$ C2 q9 z
! h6 V/ H+ I" g( M6 G |
|