|
|
源文件中_Interface文件夹下WndField.cpp文件' s3 i# _1 A p1 k
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* ]. ^6 o' H5 @, a$ p7 K
& C% Y& X% e+ k4 W9 G: L1 T* Bstruct sItem5 C. n7 f# q" w O$ J
{% C8 ?% t0 k! K* j8 d0 Q
DWORD dwId;/ `- F- f' p& W$ v, i* p2 n9 m
DWORD dwKind2;
0 {7 h! Q. B, w" }& x! FDWORD dwItemId;
) |1 R7 p. |5 p: i$ l0 A: q+ n, ?BYTE nIndex;: _+ s& t& x; Y6 P" D$ v+ E
sItem(){) y1 ~( H6 U5 j- [; g1 f
dwId = dwKind2 = dwItemId = nIndex = 0;. e- \& w% l& U4 M
}
) a. Q9 }3 Y6 R0 ~! `8 k/ _bool operator < (const sItem p2)8 a. D8 I2 g( E' t' T8 q$ E
{
0 v) k; l7 W) [1 s% t. l3 V if (dwKind2 == p2.dwKind2)
' i) g( d; \7 ? [, V- [ {
( ]! O, p! `! r( q6 d return dwItemId < p2.dwItemId;9 `* ^3 ]* P9 `. ~1 p+ u: N
}else{
- d6 H. w% u+ _- u. u- P& S return dwKind2 < p2.dwKind2;
I/ g3 p+ w9 S$ E" U }
# T. b, l- x$ W}; E$ h! w. |/ L
};
! y8 }; U0 x7 z2 ~class CInventorySort* p$ w. m7 Y2 F+ d, N
{: @# P$ U! j7 L) O0 j& c& }
public: B% @2 K" \' A) O
CInventorySort()
5 L: F' C# z9 j1 o+ F{9 n) q( o) }- Z/ S5 D) y, @' f$ o
m_dwPos = 0;0 F' s2 N! k9 g, d
}: s0 y8 O* f3 [' |
~CInventorySort(){}# b0 ?; h% |) m: e3 @: M6 o. f
private:
$ i5 U2 p, n& j/ V0 psItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 U: }$ z) o) T7 M6 C9 LDWORD m_dwPos;
- o0 T9 H; c: i8 U1 [* W$ Cpublic:. J: S4 x6 p1 x0 P; i0 P
void Add(BYTE nIndex)- k" J$ G2 _& k/ u; K$ M
{
: w" i- q- G' i if (m_dwPos >= MAX_INVENTORY)
) X* C4 t% q% y2 r" m {0 O4 e* J, F; `3 w+ r u7 e' Z9 g7 q
return;1 n0 z, ]/ E6 O O
}
8 v- s: G% @" @! T! P m_Item[m_dwPos].nIndex = nIndex;
# C7 t$ r/ K' X! K m_Item[m_dwPos].dwId = m_dwPos;
9 b6 v( b4 } V; N" ? m_dwPos++;
& R; A* W) R' i* L}8 V, Z d$ T8 W: |! h$ {( ~# p
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* Y- k0 F' {: R' W, S
{9 [; t; G2 j+ \% y' J
for (int i=0;i<MAX_INVENTORY;i++)
8 k& Y9 i( y: R* g0 A4 | {
& j% {, X1 w! z6 | if (m_Item.dwId == dwId)3 N# \1 I% ? W' [7 ?0 |8 s/ U
{5 G4 U6 Y3 N+ q- @. g
return m_Item.nIndex;% d+ d8 V) K7 {7 [5 d- L% {# _
}
1 L. |/ v* _) }" J. [! H8 b* S }* V0 {5 u/ W, L& \
return 255;0 ~! V9 L( P' \6 o; ^
}
- P; Q: Z( r4 D! Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: ]0 j, q3 a# j7 O
{
, E9 h ?% o$ Q0 T" E9 m4 k8 d BYTE nTmp = 0;3 ~' p) S/ k# }9 I$ e7 W4 S2 d! P' o* g
bool bDest = false,bSrc = false;" {0 l3 M5 D; e
for (int i=0;i<MAX_INVENTORY;i++)7 Q% b0 x2 m. V6 X
{
, i$ }! Z$ ~0 p3 ], K' e, f( L if (dwSrcId == m_Item.dwId), I, y0 H, {* C$ Z8 M$ v3 K+ U/ G
{" [' G* b; c% \9 E \1 g
//id相等 则 改变对应的dest和src% Y4 U$ y J4 b# ^* Q
nTmp = m_Item.nIndex; B' R. b) R' s6 F1 X7 O- ~
m_Item.nIndex = dest;
) {# O1 [) A1 ^2 Q- ]( v }0 k$ T7 _( Y/ P! _$ r
}
% D, J$ y5 M! w3 } //临时数据保存完毕,交换开始# w4 Y9 K: a/ d: t
for (int i=0;i<MAX_INVENTORY;i++)
) e1 F% Y& }: {/ W! F {
2 X, G, ?% I& |1 H' ?$ n0 g if (dest == m_Item.nIndex)
8 b5 h8 P: Z$ t! } {! H0 e- q$ K: c h* n
//id相等 则 改变对应的dest和src
2 V- o' }2 r7 U2 U8 r1 i B0 L m_Item.nIndex = nTmp;. t+ [; f' z2 E% M3 k9 [
}
' t8 n4 B# G4 D, {7 w$ { }
; y: K' C! J) z# |& W; }}0 m' M* O2 ~6 p8 c* P
};5 `0 D. N$ `* q( K- l
-------------------------------------------------------------------------
+ r/ g9 ?0 S, H) C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); m* X" t* _5 B; L
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 @$ i0 @3 Y4 p/ r紧靠其上添加:
# j% E: N1 m3 Q! wif( pWndBase == &m_wndMenu )
C# |# r: c1 J0 J! E7 r" Q{
2 |; K% t% ~2 A1 k2 e- i switch( nID )
; i$ I& ~) S( B! _- R3 p% I {
5 ~9 e: d6 r- \7 T case 2:
* E6 o0 ?" B0 F7 x {
9 c7 ]% d1 e( R' {$ j' @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 \7 j/ O/ H* y& K* l* S if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 H& h' g9 \9 C' i {
! i- k+ p6 X9 m) a/ u break;
" F/ R4 b: h* ? }
0 M; ]+ d: Y2 l# f* v" `- d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, ^+ j! I% T' n) M! a( s {
& W0 D8 k& Z+ l: [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% L0 l$ d9 y# `3 |- v) h
if( !pItemElem )
9 H0 Y5 ?9 V/ K" b3 S7 ^; v& S continue;
: q; k% K/ d( F. G& w: ~ if(pItemElem->GetExtra() > 0)
7 I0 L$ `4 [2 m9 f* P: T* b9 S continue;, R/ M: j+ w/ y) j @
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + ^) X; m' V, h! P$ B% @9 [3 o [
continue;' `6 `: I3 D. ]8 N7 Q- x1 k+ C
if( g_pPlayer->IsUsing( pItemElem ) )& H* T6 [- c: `' ]0 T8 z( ^
continue;
q# _- _/ A' \+ v0 c if( pItemElem->IsUndestructable() == TRUE )
; A# ]) l% A' R& Y {/ m0 c8 z9 p0 i, F" v5 W1 b. T! |! R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% {% t' [8 f4 X+ K) z6 I, R
continue;) _, F; u; i% Y" S1 Y& F! V2 X5 ~7 J! F
}
8 o! c7 Z" t7 |7 a A g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) `% n3 X7 T! K, F0 `
}. |8 }9 o0 s) {" |. N3 h# N
break;
. p _) ]- r* K8 A( R4 P }
0 T- P# ]+ s: a+ j case 1:
, Y, x, ?5 p7 G* H- K* _) U% U- t {
! z! ~" Y+ ~5 } //整理背包% T! k7 s% ^, y' E. u" n+ ^
//////////////////////////////////////////////////////////////////////////
9 D6 d- G4 A0 V/ D- ?3 w //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# U4 a1 E5 r2 I9 b
//////////////////////////////////////////////////////////////////////////
i- n4 ^3 S/ p2 l //////////////////////////////////////////////////////////////////////////
, e, {, O: ~' s( _9 x5 F CInventorySort* pInvSort = new CInventorySort;
/ x) P8 J! S# z. ?" e vector <sItem> vItem;
/ K6 d5 |3 Q( }; [/ {. l3 h H" H7 F vItem.resize(MAX_INVENTORY);//初始化大小) R2 R7 X6 z# i+ `# x
//////////////////////////////////////////////////////////////////////////
- K: N% a! C; Z U" ^3 O //填充数据
: S2 J/ S1 ?% O+ e/ T! R for (int i=0;i<MAX_INVENTORY;i++)
( Z6 |6 c# _5 q ~9 X3 { {
8 b* t: G# X1 m, }+ o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' i, ]0 l! L3 i, N9 \ if (!pItemElem)* u- {( o% ~& |# \2 x6 R" p
{* M' H* F* k4 r( ~! P' F, A6 Y- l
vItem.dwKind2 = 0xffffffff;
3 g$ T# S$ Q& o7 C7 J% `! ^ vItem.dwItemId = 0xffffffff;
3 `$ E: T! B4 y j( r vItem.nIndex = i; W4 o1 K( Q3 K% K
}else {9 d, x7 z) W0 E8 h* B5 t
ItemProp* pProp = pItemElem->GetProp();
/ V, V* y$ s! C7 v U7 | vItem.dwKind2 = pProp->dwItemKind2;
8 V" S$ G }6 R5 b+ J+ u vItem.dwItemId = pItemElem->m_dwItemId;
8 J' D5 l0 `4 U& Y vItem.nIndex = i;$ f: M7 \) R7 W1 T# N5 m
}
: A" M7 t% y# ]9 L" k# H6 Z; _ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 s) w1 z& V) _2 P1 L$ q
}, X; _2 Q, V0 D o7 I: A9 ]
//////////////////////////////////////////////////////////////////////////1 l) s4 R0 Q' Z
sort(vItem.begin(),vItem.end());//排序
% ^# j0 I) b) F3 x0 I //////////////////////////////////////////////////////////////////////////
; z# i- O; V y1 [% R O //交换
" j0 b( m! z4 U for (size_t i=0;i<vItem.size();i++)
0 F3 g6 [9 y4 \7 X1 @) Y( p {
0 e+ o8 {: f) l8 Q% ~0 E, }1 | //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' i3 N \- D. r' P/ Q
pInvSort->Add(vItem.nIndex);. s' R1 M9 q8 Q1 w" o0 c7 G1 X
}
3 M; Z e( }6 k6 z7 O2 {& A BYTE nDestPos = 0;
9 Q1 U) s' q& a7 T P for (int i=0;i<MAX_INVENTORY;i++): W/ t9 k/ c; _0 [3 b
{
: ?! n2 W4 ], X/ D1 R. m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: H6 ~" B5 c" u# Z2 A
if (pItemElem)
% M( X) V0 r K8 @/ e o {
: |- h, `" B1 W! W4 D1 C$ V: { if (IsUsingItem(pItemElem)) Q" o+ Z. W; S6 @6 C N' I, \
{+ k8 i% y$ m$ O) a G" B. E
//这个位置无法放# e. C; @9 B# I+ ]0 ]9 @
nDestPos++;
. a. \1 m, {5 A/ x* j }* \8 f3 G. ]& e S2 H; |, i Q
}
9 S& d/ Y4 a9 Y# v BYTE nSrc = pInvSort->GetItemSrc(i);# Z! }' U4 |- E2 P( i5 B8 D1 [
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 p- p- |- u0 s
if (pItemElem)
, _) i" q9 t3 H6 m( S& u* u {3 G: Z8 I/ p1 r! u/ b& ?
if (IsUsingItem(pItemElem))+ f9 W, [+ L C0 N. Q9 @/ U5 }
{$ K/ @9 Y9 t5 r; V
//这个道具无法移动,跳过
2 T- J$ K3 t; t" l/ N continue;
6 w7 U, u$ z$ M' z }/ }# T1 t8 J- n" @+ z3 o* D! V
}else{
; H+ M7 O$ Z7 @% p //空位置 不用动& G$ M' L; x3 [- }6 ^' x1 Y! t v/ P) o
continue;! U; \) |* x. ~7 S1 L+ V6 v
}
1 m. V8 v! W; b/ K5 p //////////////////////////////////////////////////////////////////////////6 L2 t2 r% }1 l
//开始移动
* j, Q0 }' O- E" B' M7 l7 X) ~0 ] if (nSrc == nDestPos)0 s# ~7 [. c1 j4 P
{
% S/ U) j' H5 a //原地不动! L# ^6 w/ @" Y, P2 X2 p
nDestPos++;, e' A8 u3 Z1 d* M( k6 X A
continue;
' p" u+ [, H5 n+ L }
5 r4 @! x9 g1 I1 u. ` pInvSort->MoveItem(i,nDestPos);4 x* t9 g, Y6 d5 ]3 T
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ d0 v2 c9 x& P M5 r8 ] ` Sleep(5);- F' D5 x/ j& v, b$ Q7 v. s, d
//Error("移动 - %d->%d",nSrc,nDestPos);+ f: l/ i9 f; @. v I
nDestPos++;
+ t/ N7 Y x6 {3 p. ~' P4 @! e" q( W }
# }0 W/ N$ E/ u% {& ~$ A //取第一个元素的信息
! Z1 _0 ~! F/ @7 j" ?/ C# f: E; Y /*
* D2 P* M- P" `5 s: Z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, z$ G0 a4 d3 d. x; R" d {$ _3 y3 o9 i; E9 m4 f1 u+ X4 K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( G% x$ f% E% g" k' j& A0 i! O
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ e. x* o" L/ }, d b4 h/ j8 P
}" O% X. x4 g9 B$ a& {
*/* i& x" d7 W: K2 p
//////////////////////////////////////////////////////////////////////////9 \( s$ @) v, O6 Y
break;
8 ^) b# s, r+ k) W- d, X0 U+ K, ^ }4 P/ O3 v. p$ {0 _- _: a9 d
} - y. T; ?2 U9 m: b) l* T
}, F I2 r, X' S
m_wndMenu.SetVisible(FALSE);, W; w5 a0 D% A* e. E
5 s& D1 w5 w; W# |$ V" T& E6 T5 ~ W--------------------------------------------------------------------------------------------------------+ A( q: M: q+ z, y+ l
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. M/ Y7 J) T* |$ D8 S; p$ J{5 g- Z0 e8 I' C
BaseMouseCursor();
( d& @: w* j; ?}
: O r( p7 s6 X4 T在其下添加:, T4 r- E+ V; g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; u% j4 O0 T( v' M* }; N( j{
' e1 n- X, _9 a5 x8 n! R* P* um_wndMenu.DeleteAllMenu();5 K. y* | m: f u
m_wndMenu.CreateMenu(this);8 Y0 _8 @, ^ x" J* i( a8 b8 {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 N6 M3 w2 d l. s7 w$ }
; Q4 ]$ n' M' S) j* V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( m- [ f7 ]# m
{9 n& r3 C) B% R6 U
//P以上级别才可以删除所有道具$ R, r; q6 a% i- L; P" p; n. N+ }+ G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- L. a% H+ z" e4 W) q- o8 H
}' T1 f* d% k6 s" p7 p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
\7 F# `1 o: |* K- c1 qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 v. C1 A) |3 `m_wndMenu.SetFocus();$ Y2 s% B: Y( X S
}) ~) S9 Y9 M' L# t; p& B0 k5 \
------------------------------------------------------------------------------------------------------------% w: z# ^( \$ U+ u: A7 H
************************* [1 @) j; l3 `
WndField.h文件
6 |" [" U+ ?4 m& }7 Z1 N*************************8 S5 p$ ?8 g( d) `6 L
搜索:BOOL m_bReport;; P, i. ~# F( d- h6 i9 V& C
其后添加:
5 o; c* @/ H+ Y# V# n! _CWndMenu m_wndMenu;0 h$ U3 D1 ]7 y% d+ t" t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! y$ }8 R1 h' ^其后添加:& o0 ^' C! f* M1 @& w
virtual void OnRButtonUp(UINT nFlags, CPoint point);( J; S' \) R0 ~- @( J
% Y; B, {# `4 V' o' s; j, J" d' Z4 R( {# H; n$ A
|
|