|
源文件中_Interface文件夹下WndField.cpp文件
: l4 W' C' v, F2 b9 w, A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ c, }0 v' X- F+ l% _+ d- V. L8 A7 m) t
struct sItem
+ ]0 {9 ?& h# V% `{3 h6 Q' I9 j; A+ ]- D; C
DWORD dwId;8 b* t3 ? ^: |# B& v
DWORD dwKind2;
1 x, n2 B+ ]5 W9 ADWORD dwItemId;
) U3 J7 Y3 W# |4 R0 X: M7 SBYTE nIndex;
: O/ {( b$ N- G3 r: W+ lsItem(){
# o8 J( m% h/ ?/ Z) k, Q8 _ dwId = dwKind2 = dwItemId = nIndex = 0;& P. I+ [; f7 q3 a
}% |- c/ K& ~: K% L" a
bool operator < (const sItem p2)
( n4 u% V' v: T, Z- J' G5 m{
2 e Y# I: h: i; K8 B1 J L- l if (dwKind2 == p2.dwKind2)
# N0 A: K! i! v& S& N {: z: r- f! D1 s* i
return dwItemId < p2.dwItemId;' M' H! M0 F+ I. V- n5 {3 E
}else{ u) G/ T& l9 A5 |5 T
return dwKind2 < p2.dwKind2;
, {9 h1 M4 P% v' ] }, A2 H; U, w- K# @- `
}4 o2 x8 P: Q; W( f$ k7 @# L
};% }: P; M# k, f! q6 U' D
class CInventorySort
& G) K( [; Z2 h2 ^1 i7 g{
/ @8 J8 Z! o K0 n2 X, ^public:
; v: o1 c* J( MCInventorySort()( m# l. a% D( Z
{
& }8 H' ?3 ^' B, H& L. y5 S% k! j* \ m_dwPos = 0; y3 Q) L' M6 t5 |) H! J+ K3 G: m
}
# l* o+ a# f! t% D5 R% S~CInventorySort(){}
+ {! E" @* ^% o/ |+ Hprivate:+ R6 d2 ^' }$ h9 O: q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ U5 t+ _( A8 Z; I% H' F7 { A
DWORD m_dwPos;
$ h, P/ g+ Q: q+ npublic:
4 L/ `# @" p, G- B" Z# X5 Xvoid Add(BYTE nIndex)
$ R T, T- J$ T/ ?6 }2 |6 m{; l1 \7 W# }0 S8 Y: I5 P5 x
if (m_dwPos >= MAX_INVENTORY)
1 g# b# V; c8 g {( T5 w8 ^, ^$ s' B" I
return;
# w5 P7 f# o% U# M/ F/ W }
' ^) r5 x5 l; d8 T0 L( U- y m_Item[m_dwPos].nIndex = nIndex;
6 R# ~$ Y7 z) a; |7 Y m_Item[m_dwPos].dwId = m_dwPos; w# u) u" R: j
m_dwPos++;
+ r% r8 h5 {. F) z e& D1 p" M7 Y}6 N# @% v( ~+ v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 B, t8 O, Q; l h/ B W# h$ e. z{
1 p4 c+ u/ A F7 f) J0 K" Z- N9 r: [ for (int i=0;i<MAX_INVENTORY;i++)
; J w+ f0 P+ y {7 Q7 O, e* k6 G6 i7 b! y) g
if (m_Item.dwId == dwId)/ S# f; J! M% w3 w
{
0 H4 w: J9 r0 [% A return m_Item.nIndex;
* o: _8 i' S/ P; z4 n7 R }
: W' N" c7 A& G$ }8 P }
9 j: _, f( u2 ?9 J# ~ return 255;0 R7 c9 @& V( Z0 z
}/ b& B* P" [7 \ }! [ g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- L: D0 t# ~" N
{
3 O( X( }* i/ ^1 c BYTE nTmp = 0;7 {$ R2 X+ _. p9 ^- {
bool bDest = false,bSrc = false;
9 H E, \4 Y$ p7 d3 { for (int i=0;i<MAX_INVENTORY;i++)
, _; R4 @7 [4 M a {) ?& [+ o, s; z2 _+ Z/ n4 ~9 q
if (dwSrcId == m_Item.dwId)
9 V* o @5 y$ I1 i; h: D! Z7 O {
- c8 S6 ?5 }% U, Z% ~ //id相等 则 改变对应的dest和src
( u+ Y( ?0 F$ \! |: y3 C N nTmp = m_Item.nIndex;
* G" e/ I( i* U4 ?. P; z7 d S m_Item.nIndex = dest;4 I/ j5 H: K' {* q+ k, _& g" r8 h
}. {5 M/ b9 T# c D0 M9 j6 z L- g
}
& Q, z' C+ c4 e! V1 C/ }' Q& @ //临时数据保存完毕,交换开始2 j! `; \% W% X3 y* e. d! G
for (int i=0;i<MAX_INVENTORY;i++)
/ c: {0 o; U" f {
: e( G8 w: A$ w- R( Q' O3 A' e if (dest == m_Item.nIndex)
. R, ?" \. T" Q/ S2 [8 M {7 v" d& ^9 e; q5 t4 p
//id相等 则 改变对应的dest和src
* A5 g) D: Q0 { m_Item.nIndex = nTmp;; \/ e N- o( S6 X
}# ^/ v) O! g" m8 ^
}) H( `1 Z, o- D; i3 }. U& e8 T
}
0 m% ^; R1 L0 d! Z2 T; s};
( R' W% l7 {7 H8 f) g-------------------------------------------------------------------------
0 H5 c: l: A! X6 w7 f% E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. H* A3 K1 A9 i) O6 G6 P! b% o' M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ Z2 }) h" x; a" p5 T: W" m: O) s
紧靠其上添加:
) g, P9 f4 F" T6 _if( pWndBase == &m_wndMenu )' e6 f: p6 V4 L1 M# m* d
{
1 ?; E: l& ? n switch( nID )
/ Z" j# d9 B: v; e {; k4 V: x7 ]8 v4 J/ i
case 2:* [' `, i3 ^$ Y7 A) l4 d
{$ k- \) Y! Y" R) c+ H6 Z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ L0 y, d7 s' x5 I) o+ L0 |
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 k% s6 r: }* l. A3 @ {- G+ C i( D/ K1 [8 ^- [
break;
5 }, g3 U# w9 T3 g9 V% N }, I# l* b& R* V9 t* S
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& t+ |. N A. s q$ _, n0 T3 Y+ S {
8 \$ B5 L! Z- {8 ^4 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; C% k$ n. j# e. M5 t9 E# t8 t, k1 O if( !pItemElem )1 c j, Q3 v0 E! g- a
continue;
' H0 \8 J `$ ^: z7 |7 ]3 I! R* @ if(pItemElem->GetExtra() > 0)
" @9 c, [4 P# O7 G continue;# q7 t9 y" q2 m' p9 \+ Z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
@: V) E2 E7 ` b$ G2 D q continue;
- [4 C8 n9 L) @* W+ t0 G9 Q1 N if( g_pPlayer->IsUsing( pItemElem ) )& S4 L7 c# z$ w+ }- o- ? a
continue;7 s. l( u X# c$ H
if( pItemElem->IsUndestructable() == TRUE ), r4 e7 o0 I- s' {$ g
{
+ s& l! D( U K$ |* ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 f$ m+ o) ^% U. `
continue;
0 u, p' |8 T( w( b) H }9 T Q" q! @8 _% {, J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ X$ |9 |9 J |9 M
}
9 `& G j3 ?9 {$ [2 ?$ X1 L break;
- P7 `5 k9 D/ Z$ r( ~3 E( o* I0 j }" Z: h; o' m7 ^) T! ]9 g+ q G
case 1:
* [! c9 d) C: `$ e N" D/ w {. ~; O+ _& g+ ~9 k" M. m& r. u* X6 o
//整理背包( @1 p8 ]* f7 k F: _/ `/ C
//////////////////////////////////////////////////////////////////////////
. s+ U1 u; M- _' Q/ d //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; f( `1 [7 p) ?# |9 F //////////////////////////////////////////////////////////////////////////9 i; \0 N0 O" N' S! I8 q0 s
//////////////////////////////////////////////////////////////////////////# ]1 @, F0 f- N& ?/ z3 O2 d
CInventorySort* pInvSort = new CInventorySort;
0 B2 @3 C- y% y+ d vector <sItem> vItem;
N4 T/ E5 M4 T2 ^7 Q vItem.resize(MAX_INVENTORY);//初始化大小
! f6 e) }) E" h4 F$ | //////////////////////////////////////////////////////////////////////////
8 d* d/ m G! ~ //填充数据1 ]' O4 @5 u! x9 H
for (int i=0;i<MAX_INVENTORY;i++)( Y- {6 B( A3 p2 L) i, g5 q/ Q
{
- l K/ y/ S0 A# o& x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; v% z f5 k; ] if (!pItemElem)' n9 d2 k0 B \9 j
{
' l1 @* {- {8 M5 f7 D v \ vItem.dwKind2 = 0xffffffff;' D( C$ k- O/ [* U" k2 p Z7 q
vItem.dwItemId = 0xffffffff;
/ c0 z# ^ P# y7 R vItem.nIndex = i;# h: C- T8 O6 ^0 K' `6 J* `5 k
}else {* X" B E# h% C7 I' @$ e- j4 c5 P
ItemProp* pProp = pItemElem->GetProp();# v9 m: J6 l0 E3 z, P& p
vItem.dwKind2 = pProp->dwItemKind2;
$ N" u) ]# w( B i/ Z/ e1 b j vItem.dwItemId = pItemElem->m_dwItemId;
; E3 O" w7 l) F1 w) M3 q. V vItem.nIndex = i;3 M( S' [8 |; ^9 r
}. n5 e; T; g B& L- b* Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" E1 A' a# z6 e }
& I; d' |! c6 A8 ~" b' N! ]- j) T //////////////////////////////////////////////////////////////////////////& h( p d5 w4 f, T
sort(vItem.begin(),vItem.end());//排序6 ?8 U) ~" `/ O9 ~% G' H
//////////////////////////////////////////////////////////////////////////5 O: J. z) i. m
//交换
: @0 M% ?" }, p, D7 C3 D* s' | for (size_t i=0;i<vItem.size();i++)
3 D% R$ M- ]* [2 S/ W {- l: c- _7 m' C5 P( _' _8 ?/ f* P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 K+ j# q) U6 y% a) d x pInvSort->Add(vItem.nIndex); n _) H, E7 k% A4 h/ E" {
}
+ o" n1 c) t2 u# w BYTE nDestPos = 0; T- S7 Y5 M5 C
for (int i=0;i<MAX_INVENTORY;i++)
, q1 [" u* y* X2 | {5 v' j& R# J$ E0 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 Y3 V/ o& H5 V+ C# w
if (pItemElem). N4 ]# Y2 i2 `( E
{
0 T! E% f6 d4 K) {6 [+ Y8 {2 n/ w if (IsUsingItem(pItemElem))9 D4 K* c( W0 V a& f
{) k4 N/ C x" K0 A) \
//这个位置无法放
; a; m6 o% H/ z+ t8 K/ y nDestPos++;
. Q% |6 d- Q z6 i2 R/ h) Y }
: T4 ]( B* j6 }" I; R5 C }7 [" ]; u1 M& I) V- h' A9 a
BYTE nSrc = pInvSort->GetItemSrc(i);7 e* I/ f) l% w2 V9 Q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 P; x% t8 f' a& g if (pItemElem)
0 M R1 i8 d6 G9 p- u, I {) |6 w& T9 P" M: O' d$ O
if (IsUsingItem(pItemElem))' M P% W+ M) o* N7 V
{5 x: M6 M. d5 Z9 D0 v
//这个道具无法移动,跳过! a' U Q7 }9 t4 X- j, S j6 u
continue;9 c; l( D; L: V' C2 j6 Q
}
) k8 y: p6 A. F: C }else{
$ n" c. N. R- K: a# | //空位置 不用动) [, R/ V# N% s6 J6 L2 P# {( g) ^
continue;
4 u8 z$ o/ N. `1 Z1 K }* Z2 A+ I5 d- M* D! b$ V5 C
//////////////////////////////////////////////////////////////////////////
7 v' J$ [8 P7 X6 J; h" g/ P4 Z, g( a //开始移动
. ~5 _. W4 u0 w7 ?+ X8 a0 H if (nSrc == nDestPos)
' e( Z/ ^( v8 u+ X {
# @* r, B$ H& V2 E6 { //原地不动1 Y6 g+ |- w+ D4 I: X4 r( B0 @
nDestPos++;& ^" U* a* _/ @3 |- Y5 h8 P, r
continue;
: m# p+ x8 Y$ t1 S2 ^6 o* c }
W6 f! Y- K5 d b pInvSort->MoveItem(i,nDestPos); J, ?- P1 o0 E4 F( I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 }4 B8 j0 n9 ^) y* N Sleep(5);# ?0 G! q: J" i: X3 U9 V+ \
//Error("移动 - %d->%d",nSrc,nDestPos);( _2 J; J$ b( P: d2 K( Z
nDestPos++;0 f: t0 U; ~) ~9 S. _; u
}# b7 Q6 F& ~6 G3 u# w
//取第一个元素的信息! w/ q4 }( y4 ~2 E8 l9 K6 R
/*3 H! c' [. T( I1 R/ G: _3 `# L
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* |; ^3 r& U6 S K5 c8 N. V {
% S6 t- A, G7 h9 v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. u3 N4 |: O( u. [! B4 P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) C4 X% v% t. @: J# F/ l1 L/ ] }6 I" L! ^+ `8 I. Z9 |) A
*/8 c5 O* E; I6 {) L, K+ D
//////////////////////////////////////////////////////////////////////////
. D5 c! m& ?, L7 k7 d1 c) B break;
" s: f9 ]/ }( R5 p! K2 V- ~- a* d }
: x2 o% c9 e/ b+ e |2 ] }
- }- z3 g) B1 Q4 `/ k+ N% C* {}. V' ?3 K1 t0 t9 E
m_wndMenu.SetVisible(FALSE);$ D2 [9 s/ @, I& A5 ?
0 [, W2 u& f( m--------------------------------------------------------------------------------------------------------( m& k+ i/ T8 X$ u6 Z5 Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 m; H5 d5 o- m5 g# S; u% u2 c
{
5 i% X7 \: z5 U! Y2 P) S; m4 g6 p2 R/ @BaseMouseCursor();! N+ T" d- f) W, l
}6 f9 V( j- U4 d* ]0 z' h
在其下添加:
3 |3 h! M5 Y: S. u& v. Y4 | \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 R" B* T I$ M& I{ t; c5 R8 c7 ?# `6 ~
m_wndMenu.DeleteAllMenu();
1 L; e4 s9 W# K7 B8 I# ?" ^' d+ xm_wndMenu.CreateMenu(this);3 e* b! @% T! w W
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% \, w8 x2 ], \' {% h; U. Z1 y+ m8 I
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! a% ~6 P4 W ~{( P8 T/ _2 J3 |, L% f. b
//P以上级别才可以删除所有道具( S, a$ e, M& I& J8 K5 F% k5 d
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) X! k2 ~: J* W% R- \}# K2 i) X8 t& c; J2 e
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 t2 N4 j: W1 O; gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: J% @# y0 D. q9 ?: Y, ~
m_wndMenu.SetFocus(); f# K Z) W7 w% f
}
" R1 t$ n$ i* y4 f* [, Y& a B------------------------------------------------------------------------------------------------------------
; |6 |# O9 P) l*************************
: T* w8 L" ^! LWndField.h文件
+ V7 A: I& ~) v; j*************************
# D, Q3 K) D0 M' x9 f1 y1 }" t! b搜索:BOOL m_bReport;
0 a4 W( i, i. R8 M0 r2 y/ q其后添加:
9 v0 x# y& m. B V. jCWndMenu m_wndMenu;
" r, W* F" V3 y4 J: y) R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- w U" _/ j7 q3 L8 \$ ~
其后添加:/ z5 a+ J$ @" U4 n3 ~' y) t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) _# ^/ R6 i5 D$ C3 K& k. P$ ?6 C8 d$ E ^
7 Q3 A5 p, X" O, U
|
|