|
|
源文件中_Interface文件夹下WndField.cpp文件
0 d3 v+ b" p X6 T/ Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ k% \6 A5 i% X2 _- a
- j/ d" L, h/ o: _
struct sItem
4 A/ G5 |! c& E1 K7 m{- }4 s% _( i% m- N- g' T5 T' J
DWORD dwId;
$ r) i' i( p Z+ GDWORD dwKind2;0 T, Z( Y* R& h, _9 K. l
DWORD dwItemId;% W1 X; o3 a. K
BYTE nIndex;# e m* D |8 w# ^" P$ w8 d- |
sItem(){# _+ M4 f2 J. A! v, Y. \1 F
dwId = dwKind2 = dwItemId = nIndex = 0;$ c2 e$ T! W1 _$ W' \# d; L
}9 [& \: K, d( r C
bool operator < (const sItem p2)
, o `( x" X) E6 Y- X{! ~! b6 k# c+ q- u7 b1 J. a
if (dwKind2 == p2.dwKind2)
, C% i, G, k9 S$ x/ _/ o {0 i$ _# u6 K' x9 D1 Q
return dwItemId < p2.dwItemId;& E0 x* N0 W: m* v' ^6 }
}else{
3 D) A4 G3 r2 b+ @8 f6 `6 P4 A return dwKind2 < p2.dwKind2;
+ d+ i, k/ x) q. }3 M* j }; b% @* D& X0 W9 m3 z5 r
}# g8 U: @9 U L
};
# Y. e: F0 K4 p. B# s Qclass CInventorySort2 |- b5 j; G8 `5 L: M
{5 I; N; A. m t2 h& @
public:
# D' D# b* \( E" k" Q( eCInventorySort()
9 ^9 ~3 f# g( |{
y' w+ B8 L4 B' A; x8 F m_dwPos = 0;) K9 T. A' F$ p8 y: Z( A# u! D
}, M) k2 U# O$ S5 O
~CInventorySort(){}+ z! m! p5 V# ?! m' `) [
private:- x) {; l9 N( d" n6 Y' K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# i# b7 K% V6 I* G% I* ~DWORD m_dwPos;3 I" A! Y, F8 e; r( u
public:
- Y. _1 i# O8 a/ v, T1 ~5 L, J: [1 F) Ovoid Add(BYTE nIndex)' y* d: Y6 e) i- u4 M( L
{
2 u& Q5 {! b# ~ U- q9 L if (m_dwPos >= MAX_INVENTORY)4 f- }7 }- d6 f. ~' f) r8 k6 q$ s* a, ?
{
2 F3 o* t1 N8 a! J7 A! y return;
7 V4 X! f/ U9 a: n. ]5 D4 M/ I4 A }* ?) k. S( t- s6 ]+ p4 h2 S
m_Item[m_dwPos].nIndex = nIndex;" P4 x6 ?6 u, m
m_Item[m_dwPos].dwId = m_dwPos;
7 m8 P" t/ f5 n m_dwPos++;
, \. I6 w; w& m" ]+ X2 L}) N t! R7 @" w$ L" b( Q& z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( Q& ^$ p" P9 `: o$ R( _1 x0 ]& Q
{# L" {* x, S& Y/ ~2 ?
for (int i=0;i<MAX_INVENTORY;i++)
/ Z; W- m/ h5 D) ^* x {$ R& A y7 U' V
if (m_Item.dwId == dwId)
& X" Z, t% B# T1 S: a {
, j0 K' r3 N i' |, [0 P! v return m_Item.nIndex;
, X4 A: Z$ `6 X }
0 T3 `/ T" H/ ~$ B t }; D% \) D4 F) t/ p& p0 u
return 255;5 g8 U# m/ w# o* u6 K: ~
}
2 n7 C8 y/ K9 U; s0 m4 Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ K" T% H$ S$ y2 Z B0 z{8 z0 O, t8 x) T$ g# w: L' f. P
BYTE nTmp = 0;
$ o9 b4 ~5 P3 ]* _ bool bDest = false,bSrc = false;
1 Z" ~' p, o8 M" S for (int i=0;i<MAX_INVENTORY;i++)* |* x y6 i( S4 |' c5 A
{
! h( ]& [6 A7 O/ M8 G if (dwSrcId == m_Item.dwId)
' Y; b0 x0 N: Z" R" N1 r {
; W2 Z6 i: D1 }. P //id相等 则 改变对应的dest和src/ b& A6 i# r0 s9 H! v
nTmp = m_Item.nIndex;
$ b+ S: y1 z: u ` m_Item.nIndex = dest;
0 L4 x- [ }, u& a }1 j/ g1 g, E* M+ X6 p) ^
}
7 e4 [0 e: v2 m% }0 t8 r8 ~ //临时数据保存完毕,交换开始
. B: S, X$ u$ a8 ?& n0 o5 T for (int i=0;i<MAX_INVENTORY;i++)* O3 G8 f0 h& R- [. D
{
8 I' |8 l7 n# R- B! g' C if (dest == m_Item.nIndex)# @5 p+ p" Z" Y4 C" F# H+ ~
{
; U; i* |& {4 X) o; x //id相等 则 改变对应的dest和src
, o9 r+ F# |9 y% } m_Item.nIndex = nTmp;
# {1 H2 Y5 \# z: g9 N0 ? }& ^5 E# b2 Q( _3 ?/ _, w
}
& ?- o9 G& y9 W( b. m}
8 b% ]" L* D" I& [- ]};
( F5 ~" b, \: `% E9 Y( ^-------------------------------------------------------------------------
M r+ p3 E+ B* M" @0 f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' V$ ]9 \5 i' o! g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 j+ a; O5 @8 h6 a( S# e# h
紧靠其上添加:" z1 h1 J. W2 b
if( pWndBase == &m_wndMenu )( e0 Q9 }* b. S( x8 X |
{; C4 N; d; t+ B; h. \7 \
switch( nID )) w& k3 r! M+ b- Z2 v4 i0 n
{
! h0 _+ O/ j3 B9 y; I case 2:
7 ]# U4 {, X' y0 r( @% o; ^4 k; {4 ] {+ z6 ?6 [/ X. E7 N# U: ]
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
L; _ d7 h. k& a, `# ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 q' T$ Q, \3 z+ g {
" y$ U9 a/ l j t" T break;
. ]: f; L5 S/ ~8 F* C0 @ }
3 t; M5 \ d( @0 \% q9 ]$ j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 c$ S, `) u/ `0 B/ P1 b* i
{
+ Y7 ^# w+ G: B" y i( M7 E) d/ f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( X8 Z4 I! B2 S6 F+ k if( !pItemElem )
" i- R( s5 f- K2 i* i1 V continue;
2 L0 ?8 O8 @$ F, ` if(pItemElem->GetExtra() > 0)% ^. B; Z6 b: q0 K
continue;
% O7 L* q! l* G& t2 i+ r3 W if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" z) `0 w+ ?' k# \& d/ ^- y$ H: ?' i continue;. t5 u9 i( I8 N U- w! [# n
if( g_pPlayer->IsUsing( pItemElem ) )
+ H# b5 Z$ l1 n; l continue;: f+ q; b0 I) `* f; k2 U
if( pItemElem->IsUndestructable() == TRUE )
, f/ J! V/ H6 r% C6 [$ x8 ^; d { n4 Q$ e J* U; k/ N+ e4 P
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- {# _$ x% _3 j) c, s. l continue;& p: N, _( K4 N' ]- J2 {
}% ?; Q! s/ B9 M0 M& N9 n7 M9 }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
@3 [2 n" z; p3 g& k& [5 q5 j$ J/ P }
A4 h) B% k/ b9 N' h break;
! R2 P) t8 v Q }8 G3 l9 [0 U3 ]3 g* g) I0 `# k6 g4 P
case 1:, n- P; @+ w. x' g+ _
{
3 N3 f' b/ ^8 v, l //整理背包
f% H _1 _1 h0 ~7 u6 Q. W //////////////////////////////////////////////////////////////////////////
/ ^2 B2 i$ G3 Y( \ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 t& G! b4 z0 X: u: `3 _* b" n' [ //////////////////////////////////////////////////////////////////////////
b- t8 E$ G+ r0 p4 J1 @/ ] //////////////////////////////////////////////////////////////////////////( g4 \' J7 t/ n- k; G1 j1 z
CInventorySort* pInvSort = new CInventorySort;
8 m# Z8 l- G. G* }( T vector <sItem> vItem;
2 D' h. e- B8 }- d4 Z, _ vItem.resize(MAX_INVENTORY);//初始化大小
) S$ [2 M1 I1 ~' P4 j //////////////////////////////////////////////////////////////////////////+ P' v+ H) S) Y) {/ `2 d+ v
//填充数据
7 B" U2 t8 r! y9 D' F- E for (int i=0;i<MAX_INVENTORY;i++)& |! X! E# I8 x) {7 c* y; n
{+ I# }5 y* k$ k7 h) Q7 ]6 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ J2 Z& P9 p5 U. u1 N q
if (!pItemElem)7 m j, J; ~. ?: l5 x$ p# a
{
' D# ~8 M! v7 q" w5 p vItem.dwKind2 = 0xffffffff;
8 q! U& l' _7 N+ h1 `# l, f vItem.dwItemId = 0xffffffff;7 h0 y* X3 }8 x4 t4 n% c3 `# x
vItem.nIndex = i;
& X8 ^/ o* W2 o7 \( w7 F) f4 N }else {7 b y( s& a& e! f+ [& @
ItemProp* pProp = pItemElem->GetProp();) y Y" y, n; B; l4 Y
vItem.dwKind2 = pProp->dwItemKind2;
& L6 }/ V* o( i. y& u/ A9 M% e vItem.dwItemId = pItemElem->m_dwItemId;
( B' F) c: ?# j( K# W vItem.nIndex = i;( U2 C! {2 c- x4 u
}" }) z0 F* ~6 Y+ n8 w* d5 t
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* j6 [7 |+ O2 v
}
! {. U2 m6 T, y6 u9 d //////////////////////////////////////////////////////////////////////////; R3 K5 R0 f0 [1 A5 _
sort(vItem.begin(),vItem.end());//排序/ P9 M# e" S' l9 O
//////////////////////////////////////////////////////////////////////////6 l% t; [! Z- N0 e$ |; X& G
//交换6 z4 r7 U$ Q" `, d
for (size_t i=0;i<vItem.size();i++)
b; z9 \ {5 ?' D1 ~# v {1 S4 n; U3 y1 r* G; u2 x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. S( {% O% L& L! w pInvSort->Add(vItem.nIndex);8 I6 |0 t. N0 l
}) S" F# g9 q9 Q7 l
BYTE nDestPos = 0;: X7 {* h+ J+ b( |/ g, V# h8 @% ?5 s
for (int i=0;i<MAX_INVENTORY;i++). U9 i1 S0 n7 e1 o
{. j7 ?( z! m5 [8 E% b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# A# [" w; y) r- ` if (pItemElem)
* l; G7 b+ K; m/ } {
, U4 P2 O7 g( \1 L6 \ if (IsUsingItem(pItemElem))- }8 n* K! J# s. O8 W
{( d5 U- y; L$ F; j( G, E
//这个位置无法放
7 \2 p4 O. U Z, W" ? nDestPos++;3 O5 f7 d- ~& m" \9 T) Q
}
! W4 b0 H; R5 ~4 {: C }. x# Y3 ^& s( x, W6 F k
BYTE nSrc = pInvSort->GetItemSrc(i);
- q. t4 K2 H8 D0 }. y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, u0 G$ m: }7 e N if (pItemElem)
7 M- S, H4 d1 I) E- r/ c$ W, H {6 {% u) D% m- @# H
if (IsUsingItem(pItemElem))
4 w* q' V% q% o {
. z S% u. K9 P2 v) S* I) G //这个道具无法移动,跳过
0 m( e% R# n7 s0 K$ S continue; L' j1 n3 K- ?% D3 g" h
}
0 z8 K+ _8 v/ O7 `2 \ }else{
$ X, S' w) p) O+ p N( g9 w2 u) a //空位置 不用动
2 k" r' w% B! m6 y; k$ U* P0 {# n continue;5 T& K$ y# d w5 P
}# X1 i0 y; d4 T
//////////////////////////////////////////////////////////////////////////1 R( ?. r0 m* C1 K7 U9 l- a' b) v
//开始移动
, i. D. t6 I# O# ]* W if (nSrc == nDestPos)8 F: s* U8 d: W9 L! b! U2 g8 |1 F e
{. g5 z( U9 a2 c. G' F. H6 o
//原地不动
: X0 D( y. {, Z/ d# ?6 W nDestPos++;. p9 \) L: a7 b1 j Q/ H
continue;6 o- Q& A2 Z. ^. ], D
}
N- X& l. Y9 Y pInvSort->MoveItem(i,nDestPos);4 E% i" w9 ~, k- n
g_DPlay.SendMoveItem(0,nSrc,nDestPos); N/ Q0 ?8 N& e: T1 L) c
Sleep(5);
( ?; o# L# _; I% `+ q9 ? //Error("移动 - %d->%d",nSrc,nDestPos);* D: w+ W. e' _1 W9 p, }- {
nDestPos++;
0 I9 E/ K' @0 v7 [6 Q: w }; g8 f8 j: i7 q( ?# D
//取第一个元素的信息
2 q6 l# B! U; j! h3 @9 M: c /*
3 U* H6 {0 [0 x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( s. p2 `# b( h; t: Z
{; i9 E5 ?, G! Y" {( F
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 k0 u X7 w2 f: h' v! Q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ v. z1 H; ~; ?
}
4 x4 K6 e) |( R2 L) u( I */
: J. P$ @3 V/ Z9 g9 q //////////////////////////////////////////////////////////////////////////% E+ ~! b; M8 k, w
break;! Z' p$ Q! G+ S
}$ G J9 k) s- k6 Q, U C
} 9 I+ c/ }- p; t w* F u
}
' a$ G* b' |, \7 i9 Hm_wndMenu.SetVisible(FALSE);
: U# m9 C( e" n) O5 Y7 @9 O6 ^5 u) J
--------------------------------------------------------------------------------------------------------
2 S" s& f. I3 K0 C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 q4 A4 g! e4 @; I1 |. E0 A{2 I! u5 U% s9 K9 m% ?/ h2 F
BaseMouseCursor();
7 h( L! y( l3 q}9 G; v% Q/ j5 T0 R. e' |
在其下添加:) G, W1 ]& s! A# E' x1 b* H
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' O5 x/ B6 U5 f4 b
{; ^( F5 ^: ~1 ]
m_wndMenu.DeleteAllMenu();% k0 y6 `% r" n ?* |) U/ p; z
m_wndMenu.CreateMenu(this);
; C: i7 a/ U, n$ ]m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' r9 S1 ^" \. @1 D3 J
6 c$ e, t) l5 o3 p4 u5 h0 j; Tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
P6 C3 I" q0 l! a( z* m{6 H! r: X2 N+ l
//P以上级别才可以删除所有道具
; Z8 ?+ ?1 k! [ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 A) i, Y2 x, Z& I. j0 e7 n+ {}5 U2 H7 s W5 o, x2 k& M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* Q o# A4 D! K1 \& V/ F$ [: gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );9 C( g& K6 @8 I O
m_wndMenu.SetFocus();
& J N Y4 |7 F}
% Q2 z9 p/ v5 U3 Z6 g; @# @2 Y------------------------------------------------------------------------------------------------------------ D, _" z- ]5 F
*************************- e3 f4 @% |- S$ ?& d+ @7 \* O
WndField.h文件
9 o/ ]6 M- Q5 ?! x# n8 v9 ^2 d*************************
" g) U# U. V: j' y C搜索:BOOL m_bReport;* a' G% J/ w5 E
其后添加:
! Q9 g5 i) s% q7 H7 [2 hCWndMenu m_wndMenu;
; O" S* e+ A5 g( I' W6 j* ~搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) ?) P! t5 x# S& K; p其后添加:6 [; C& d$ c9 Z* Z: _
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- G7 m1 s" o2 n/ @- @( ~) P, g
% V0 U8 j2 `; h/ C9 ]+ p
4 `: c; c& g4 d l, X! n6 j |
|