|
|
源文件中_Interface文件夹下WndField.cpp文件# s- W+ x2 i; g# _- T* n1 ?: s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 F1 h* K& [, ~& _# b% T: Z6 N& K4 w- {; F$ ]+ M4 R: M! O5 F
struct sItem: B9 A: }- `* z
{
* r1 K4 I5 l; H; W$ gDWORD dwId;( O( N9 k+ m. w1 z- k- U- P. \
DWORD dwKind2;; _% j7 k9 g- H* U$ g- e3 @# o
DWORD dwItemId;
, R- i4 D; y$ F/ I& x6 @5 kBYTE nIndex;; Z0 v; R- c0 r& _4 [' k+ L8 f
sItem(){
) V; T" a( Q& _7 T% ?5 E- R' z. \ dwId = dwKind2 = dwItemId = nIndex = 0;
$ G7 W3 s/ a3 V, m* T}9 h i/ r2 r4 S& P4 s
bool operator < (const sItem p2)& e2 V) ?- N8 k6 _4 Z; u
{( x" `" x& K/ _/ E
if (dwKind2 == p2.dwKind2)
' r4 C: P+ Z9 E3 A. i) G; i4 [ {. V4 F: s- x1 @+ ]; e9 J
return dwItemId < p2.dwItemId;/ ?' M% w4 j+ P0 ?0 C# i; s
}else{+ q& ^. ?+ k+ g
return dwKind2 < p2.dwKind2;( C# X2 m4 t \0 c# \
}
* v" _- b: E; o+ Y' b6 D}$ x& V, K9 c6 i+ h: v
};7 W/ |3 L% |2 t3 z- j# t
class CInventorySort
! P% f2 i5 U7 s( w. v: ^. V% q{
% ^* M2 f8 H- Y' K4 Zpublic:, f7 y6 _0 {4 E. R; j" k! _, y5 { k3 i
CInventorySort()
* B7 a1 {9 J& R; _+ \) k5 q- E{ \9 y( J) y' y* ?' {+ k
m_dwPos = 0;
6 M" i( w2 a# E7 d( w, X$ u}/ B* c& L: T! b+ }8 v F C
~CInventorySort(){}- s5 H. y& \! ^2 ]+ h% n& d; Z$ b- C
private:
6 D9 P8 M q- O- g5 s2 \: esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ @- H0 H7 w7 `8 u5 J" N, N5 l
DWORD m_dwPos;* T. m; L! T: q: X, ]8 N7 _
public:. b, \* `$ ?" a' N# n# x4 ^
void Add(BYTE nIndex)
- p- i0 B V% p" u! e5 l{
8 a. T$ B3 g6 Y4 z0 [! e7 ` if (m_dwPos >= MAX_INVENTORY)
2 M. ?9 O. ~2 m {
& I0 F+ Y4 d- N& W, e( z return;& a" i+ Q4 y5 X3 Y8 c% q
}& J4 H7 E: g e6 @
m_Item[m_dwPos].nIndex = nIndex;
+ n8 |2 U: I, A R ~4 d m_Item[m_dwPos].dwId = m_dwPos;
& B5 L; s( i! V& T; K( Q8 T m_dwPos++;) L4 a. |) p% A: t: F
}
. H. c5 K9 X2 uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 x; x4 p' N2 G! w3 k; e{5 }! A! c- q8 {# I2 Q* ~
for (int i=0;i<MAX_INVENTORY;i++)6 _! n) U; Z+ |/ S+ O
{% ^3 e' M! g# S2 ^& X. V
if (m_Item.dwId == dwId)# U/ x1 r1 ?, Y2 s" d) N
{- Z" z4 X# e& N) i7 h4 O
return m_Item.nIndex;
8 F6 Y( N5 P$ j- ^7 J }
. r J8 u; b$ _' C2 `: Z0 @ }
e! I% ~3 U" T$ h; Y2 @7 n return 255;
7 ^1 n r1 b/ X9 E+ N}+ Y# F; ?* l8 f0 H/ `6 s. h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& a0 {. a+ b8 V' M
{+ f; U: ?0 w$ s, p5 b, q) W
BYTE nTmp = 0;* ?: |. J8 y3 `- }3 M4 B
bool bDest = false,bSrc = false;
( H. v/ p+ G8 W$ ]9 s/ N5 f; G6 } for (int i=0;i<MAX_INVENTORY;i++)4 Y5 r0 u8 g H
{# H, M3 u, @; w5 N
if (dwSrcId == m_Item.dwId)2 g4 g7 Z. D# o2 K7 u
{; F& z# X; ]6 P; O, ]4 r; |
//id相等 则 改变对应的dest和src
2 @# r- H3 r4 v4 U7 l nTmp = m_Item.nIndex;
. P) _: K) C" [* t$ E m_Item.nIndex = dest;5 G( i' S6 ^+ s6 O
}! k% F! p' x3 [& s. n
}
6 V0 H& \, w9 m! |7 Q //临时数据保存完毕,交换开始
3 z" j4 j8 h+ X6 W @3 P. U8 R9 L for (int i=0;i<MAX_INVENTORY;i++)" |( t2 {, N0 d0 r
{: t! _+ m% ~7 @
if (dest == m_Item.nIndex)
4 v/ A& C2 |* D5 }' y3 x {
; h% {2 K! e" O: y; v" s' `- j //id相等 则 改变对应的dest和src* R) ]: B" m9 O: M+ |% K
m_Item.nIndex = nTmp;1 [( K2 d& T" n1 D8 E, J
}& L. _( D, C- ?$ X2 b* Y
}
4 r2 I# j. B% g( s}
9 T5 A: Z4 |5 V7 r+ ~1 ^};& }/ x, V/ H* ^8 [* V
-------------------------------------------------------------------------9 h# n4 K \/ j+ B$ k& Z" E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. ~5 F/ t- Z! s X% F2 X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ O1 n& t6 C& b7 A, s紧靠其上添加:/ I# _. F5 b0 G4 M
if( pWndBase == &m_wndMenu )8 p. g" c1 f f" T6 [3 P
{. R6 A8 w5 e. b- T' O
switch( nID ); k0 j9 g! [& e. g" a* |6 I# J& {
{. `1 T6 q) o3 _0 W2 F/ N
case 2:# E& c5 F7 w% Z- d
{
& D3 x! B+ M; Q" ^2 C- | //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% y9 f8 b5 A; o: f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), p. x ^6 Z0 `3 k% H" ^0 \$ k* C* ]3 \
{& W% U* l$ ~0 F4 {2 z8 }1 U) j8 A
break;% }0 U6 z$ i5 L, E. n
}7 T, \# b: R/ ?8 J7 s" o: j
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% ^/ l8 V8 {/ f/ Z3 l6 \! j/ e
{
& D! W) U+ n' H6 e9 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 M, z3 Y: n6 | J( S if( !pItemElem )2 F" ]+ P6 O0 f ~/ [" D
continue;
% f- e E6 A3 g+ k, Z if(pItemElem->GetExtra() > 0)
4 J) X2 Y% }) M T8 y- n- T } continue;
4 f0 J" w: l0 g U) a# ^9 h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 A! _+ R3 K$ o1 ` continue;# a0 N. ]$ n9 m
if( g_pPlayer->IsUsing( pItemElem ) )
( R/ A0 m1 V2 g5 @1 \ continue;
5 x) f+ u3 ]) K if( pItemElem->IsUndestructable() == TRUE )
" m: H+ @2 p7 o! q3 l" U { w) u5 |6 X! w% [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% d4 ^$ q, |' V6 R# ? P" g1 r! \
continue;2 I% h* b/ }- U. r0 n S W6 \" F
}
) s* h, `& K# ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 D, t; ~/ e& a
}
' ^9 l% x3 I& L: Z break;* f0 r0 M0 p0 U$ i% Y
}! M. y/ E" \' W" y, _
case 1:
0 j! W6 ~. q7 H9 D1 ]- W+ ^5 h {/ v9 M1 I4 i6 v
//整理背包4 H( \& y3 c1 \
//////////////////////////////////////////////////////////////////////////
) d( m/ o; ?+ S4 b$ ]+ O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" b# a+ w- }+ X2 J //////////////////////////////////////////////////////////////////////////0 [# \( a9 `$ m; y0 W% l
//////////////////////////////////////////////////////////////////////////4 I, P, _# C' L
CInventorySort* pInvSort = new CInventorySort;7 ]1 x' `7 x5 e Z) P; X& C4 X& i
vector <sItem> vItem;1 F$ ?. i0 v' A* |8 U( a0 r4 V
vItem.resize(MAX_INVENTORY);//初始化大小
# d6 k: y+ H3 D7 A- k; o4 ~# T //////////////////////////////////////////////////////////////////////////
9 p/ q. r" _& ]6 {& T //填充数据5 F; |( e' |2 k2 m
for (int i=0;i<MAX_INVENTORY;i++)
$ ^$ J( y: X3 p, r" B' u {3 r6 P# Z9 z! \$ k" k( w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, z: A* F: p9 r: u+ W# G; c6 I* ^ Z if (!pItemElem)# z0 P* g0 }) ~' b+ V# W1 Y
{
; h; B! T5 S" G' z B vItem.dwKind2 = 0xffffffff;+ X0 h" ^1 d. V3 U) k; d) B
vItem.dwItemId = 0xffffffff;
0 }9 ^/ f( B- i9 }) v vItem.nIndex = i;
8 {2 n0 r3 S9 Q+ a# K }else {
3 s2 @, d, ]7 M; E$ I, i ItemProp* pProp = pItemElem->GetProp();
8 z1 ^1 A% X+ I vItem.dwKind2 = pProp->dwItemKind2;
) ?% n0 C$ ?3 F/ \8 \) } vItem.dwItemId = pItemElem->m_dwItemId;' r4 k/ |4 i5 \2 ~& t" m
vItem.nIndex = i;) z1 Z# H+ |* G
}
% T' C6 g$ {) ]# [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 y% N( f0 V' ] }
. K* \+ K3 s4 d+ J& N7 j. D9 Z //////////////////////////////////////////////////////////////////////////0 b; N0 B# b; R5 k
sort(vItem.begin(),vItem.end());//排序
g% n% T: F2 ?( |6 n5 V9 a //////////////////////////////////////////////////////////////////////////
0 I, G ~5 T9 i4 [! \3 C //交换 M# M. m) X$ ?6 r
for (size_t i=0;i<vItem.size();i++)
- L+ x0 k2 P: T( P% j! r4 a {
- ? K4 S H- G7 d* w! R0 s$ U0 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- @7 q1 m* U: h8 Z+ r% ?- @* h' ]
pInvSort->Add(vItem.nIndex);2 j/ u8 I1 F* \2 l- g
}( z; g9 N" m6 O( Z( I3 N2 w0 a+ c5 x
BYTE nDestPos = 0;9 f% a1 M4 Z4 v- g, B
for (int i=0;i<MAX_INVENTORY;i++)# v" g1 E" e( @8 q& R8 a. v3 {
{
$ R% K7 j6 o4 A9 a3 s' A% z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) l4 Z7 x- c" x9 U if (pItemElem)
9 L( ^7 y! w) {7 N {
! W! s, Q3 h/ F if (IsUsingItem(pItemElem))
# {0 w& ~: w: G- \* p% J0 x {9 D3 Z% l9 d7 e
//这个位置无法放
8 L' p4 }) [ C3 V' z# {6 l9 l nDestPos++;
0 i. |8 [+ a3 @9 ?3 f }& k: w% `$ }' ]) c# f9 h' y! O( E
}+ K$ d( {, O! `4 o) S
BYTE nSrc = pInvSort->GetItemSrc(i);% J7 O% m& P1 r% Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 s: v% c+ x2 n7 w: Z3 | if (pItemElem)
) A- @6 r9 n& ^" h3 ]% J; t5 j {2 S |& H4 b+ ~; U
if (IsUsingItem(pItemElem)). A' S% {3 j# b. A3 @/ A0 i! H
{! @/ e" a/ | N9 A
//这个道具无法移动,跳过3 `/ Y- H0 v+ g5 ?
continue;
; [* C- n5 g9 a2 L# |( h9 f6 e6 m9 {0 X }- W2 [& t4 D" u
}else{
! w5 }5 Q" e8 }9 q" N9 {& `* H: ] //空位置 不用动$ c& x# y- \+ G) s% S
continue;
5 ]4 K8 b0 D/ q5 Z2 z/ i }
' ]; w# b, F, \. Q //////////////////////////////////////////////////////////////////////////
3 P' T( x6 i* A- S. |* v% T5 z8 t //开始移动! g6 c% T' m- [' |/ n/ d
if (nSrc == nDestPos)/ u3 @% r/ B' d4 y. Y( {* n
{
: ?) \, O) n& E* G/ J //原地不动* O) P5 L0 f- K, F( v
nDestPos++;
, d) z2 h( b1 C. h continue;4 |+ l' n: u; m
}) p' Z9 d0 E5 l0 o# N9 p
pInvSort->MoveItem(i,nDestPos);3 J5 ?2 O: |' Z4 a
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 ^9 j1 T/ H9 w- R& {
Sleep(5);1 w9 c. V6 b. [ y
//Error("移动 - %d->%d",nSrc,nDestPos);1 j6 ] P0 X+ Z8 f
nDestPos++;6 l" x M8 y# v3 Z, i
}7 M! c1 I7 G& \* g8 Q) [" y. ?
//取第一个元素的信息8 h$ h f( B% N3 [4 ^) B* ?6 [! Z
/*. e6 u/ v4 C( v6 A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 e! ?% |1 V' \1 k {6 ]! U! \; T- k5 r6 T8 ]2 N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 d. e2 x" o! o9 |! N
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% ]3 [( N( |6 Z+ E* T- t3 N }- [# {8 n: W `! U
*/3 [% M+ {) Z+ y$ D; d8 I. |
//////////////////////////////////////////////////////////////////////////
" `) _& _6 g) U& {: O5 K break;) Z' q4 @$ E8 E
}& @& }8 `' R! z5 K
}
* R: ]) B7 V! U& G3 z}
# i& Y+ Y. I- B8 v7 x/ Lm_wndMenu.SetVisible(FALSE);
2 A; G9 g, M& y; O1 l6 |
: E U: x& [ ^--------------------------------------------------------------------------------------------------------
5 n. d3 K ^1 W# J8 F; C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! Y+ Y: `- \& c4 {7 |
{5 F) p, m3 d. r+ ]5 F7 [ {% B
BaseMouseCursor();) h' P' o& M; H) i. W
}. l: L+ D* c3 M
在其下添加:
0 u" F- \! b8 b8 U& ^1 o7 q! `' {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 e. L& I7 h' U7 b# ]- T
{0 z7 s' i8 a0 }% n6 g
m_wndMenu.DeleteAllMenu();! B( |6 ~# j" W ^- A8 ^
m_wndMenu.CreateMenu(this);
K7 l1 N9 N) ^% i zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 G4 t! s0 r7 s! }: |7 a# O$ d) Y
$ C2 }# |- b/ O4 H! lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 C" [% F3 F1 D% D: p{" h3 e: w( h6 j# ^9 W% K( x2 A9 s
//P以上级别才可以删除所有道具
- }& ]5 ~0 }7 S" f: p5 J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 h1 N% M" p2 h4 S2 j5 J; g P( w}
0 i! B' a) j3 X5 V" Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! u. l+ q: e! Q# `2 dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 C0 z) k, J6 S( c; n4 E- i
m_wndMenu.SetFocus();* T8 | a/ b% J
}
8 P8 E, @3 _4 G+ n2 ]7 m------------------------------------------------------------------------------------------------------------
% ` j y" ?0 ~4 p# {2 Z, K( c7 E# V) E*************************8 B/ d. }8 a- P9 v( ^) M
WndField.h文件
5 i& z* I& {3 |; b5 J+ q" Z*************************
- i; I( ?2 D5 w搜索:BOOL m_bReport;
$ B( e* O1 i+ K) [. }- q9 `2 l其后添加:
9 S/ h, z) J9 _# `: u4 Z" c* ]9 }/ ZCWndMenu m_wndMenu;
0 F2 Z) E: B0 E# a9 o7 ~# @+ j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* n; V+ {: D4 I+ W, x
其后添加:/ m& o1 k4 j! e( N
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# o0 T, A) E5 `$ \' i9 `* T$ [4 ]; a
% F& j; C$ `+ O1 O: [9 j& C% d# e! }( i/ v: L- A
|
|