|
|
源文件中_Interface文件夹下WndField.cpp文件- l" ?3 _5 Q, L% n6 Q/ B+ k
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) R. Y/ S7 C6 [0 g1 r
7 ` j5 o1 Q2 E1 `# Q! `, s8 P
struct sItem7 }0 i+ e" p" S, @
{
& V, r6 u" R; ]- M3 B- Q9 ~DWORD dwId;
0 |. y( D" }: `3 J; vDWORD dwKind2;
: |( |6 Y8 z- V" j+ t, V2 E4 hDWORD dwItemId;
+ a w) ?* f& ]( m aBYTE nIndex;
/ F3 |2 F) e; }/ L/ r3 `sItem(){
; u* V; D. x7 t* g& h dwId = dwKind2 = dwItemId = nIndex = 0;2 \6 \& [* R4 i2 {
}
0 q; Z5 n U$ b5 W" @bool operator < (const sItem p2)
1 e* I3 l7 C3 E1 N& u{
0 H4 L; ~$ Z7 u' ~2 }- Q if (dwKind2 == p2.dwKind2)" V+ Z4 a5 [' [: m1 |0 `
{
, z% J/ h6 b; s return dwItemId < p2.dwItemId;7 z- c4 ?4 b7 N3 J( ?8 u. r/ {1 b
}else{
! N1 ?; A& P7 z7 {: S5 y+ @ return dwKind2 < p2.dwKind2;+ j! G2 l/ [' U! o! `, U- m9 q
}
% @: E5 _2 H2 s}
/ u, g( U' k* ]$ G$ q6 n};
9 s0 W( A+ ]1 e( I4 z% Vclass CInventorySort
7 J8 T4 U2 |2 R: Q( Y{
. r- E% q9 ?1 b% t" T- X7 Rpublic:$ r5 v2 U# ~3 @9 n
CInventorySort()6 v, `' A% x; F* Z2 t
{8 C. ~* \$ w/ \
m_dwPos = 0;7 e! W) T% e% C- ^; Q( F+ ]
}3 b/ k9 W8 m0 @* N0 _
~CInventorySort(){}
' c( Q* ]5 U1 }/ {. f) hprivate:8 v' v! A) o. J& ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 ~) S4 |- F3 ^& y
DWORD m_dwPos;# m3 A' Z: R, a0 R
public:; W% a. [8 f! z( K$ X
void Add(BYTE nIndex)
3 }- R( ^- K" V& v{7 N- u8 w. \! ~3 r
if (m_dwPos >= MAX_INVENTORY)
$ J) c& z; m# Y0 z {
, h& z& ]0 }: G. u( u: {7 I return;
9 P7 `/ Z- \5 l. H2 B; [ p! d; b }
* [1 O! k5 d) N d3 q( E( t m_Item[m_dwPos].nIndex = nIndex;" y- Z* r( [7 u% i/ N
m_Item[m_dwPos].dwId = m_dwPos;
c6 W) t" K9 e: c0 H& r$ c m_dwPos++;7 O6 Z/ l+ A2 V6 d4 ^% T
}* M( ?* j& ^. L$ A- G9 H, `# A( p
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* | Q. ~( s E% m* X& a+ O1 r4 g{( N' u* w: M4 L
for (int i=0;i<MAX_INVENTORY;i++)( N& m$ \, M0 j) @* a5 b% i8 t
{
* N+ k. d Q7 n! q4 q) q if (m_Item.dwId == dwId)
9 `' c$ U/ N/ L {3 \/ c: B+ Y, |: _
return m_Item.nIndex;
. e/ n4 |2 k8 V; n2 R9 p( A$ k }5 w' B4 @7 Y7 U6 L
}4 n7 p7 a* r$ c" L
return 255;
7 b1 T Q7 d$ q2 z}& w( b: B, v4 T" ~
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, s* q' R: ]" V" j& j' D3 d' K- A{
3 v6 y* O% q: P$ D- ?# U$ ] BYTE nTmp = 0;9 ?# g, M# I5 A' J [7 ^/ Z
bool bDest = false,bSrc = false;7 _9 M3 G s7 Q- m
for (int i=0;i<MAX_INVENTORY;i++)
* j4 c" X/ z5 b7 B( b& N {
7 ~, U) v( c( ]: q- L0 Y; o if (dwSrcId == m_Item.dwId)% v$ N9 l" l: U n1 X4 K/ D% Z5 m
{
# N$ f3 f5 \& m5 ?+ A' T* ~; |6 u //id相等 则 改变对应的dest和src
1 ?+ Y, L5 d* e3 P nTmp = m_Item.nIndex;
* D$ ^# k9 n( P5 C" A' s( h# n m_Item.nIndex = dest;
9 Y' C# L% x2 a. j6 w% {8 H. { }
/ Z. q8 B4 e- {% s' Y/ z }
' G3 v1 s& Q/ W- P //临时数据保存完毕,交换开始
7 U Y# G) b7 P- `+ k) K" E) _& J$ r for (int i=0;i<MAX_INVENTORY;i++): t+ f$ l. e# o. E
{* u5 C# l8 {% z! S8 f
if (dest == m_Item.nIndex)9 T) t: Y$ h* @: G4 A6 l
{
+ |: G$ P3 |. o) `4 S( J$ a //id相等 则 改变对应的dest和src
, o8 \1 f6 K6 J m_Item.nIndex = nTmp;/ o9 n% M, \- p& H, |- u9 S
} A' x, [! M& k$ [. p: [
}
. a U4 _& q2 y& n5 ~& P7 C}, n% b4 ?: G+ z
};
8 d. R5 e1 L; B1 X! [# o* L* n$ T3 @-------------------------------------------------------------------------4 K4 @& P E0 y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ o0 p) d7 m! }* u$ \搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! d+ C R4 z5 S/ n" U; I ^5 m) `3 W紧靠其上添加:& j, V! G# v& [7 _* C1 ^' a
if( pWndBase == &m_wndMenu )$ q/ X6 z. w& [% M! I5 h( M
{$ [6 j3 G# X/ m9 F# w$ ` G6 A
switch( nID )
+ W' l# X( `& S9 [ {
. D7 T8 J1 ~8 x! |1 G- ]( v. x/ D case 2:
0 U9 h7 K; ^. s+ G: n* }0 @9 v. @ {$ Q& ^$ A0 L" P: i) \6 P/ F0 g
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- X' F4 x, [6 S$ [. y3 c& y/ u. i; a) U if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" o, D! `4 |$ ~+ y0 ~( p b
{
7 P+ Z" p% B! {% K! c; B+ C3 u! c5 F break;
: L" L+ f! _* Z! N% |( [) x }1 t! m1 }1 [2 S, F
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, m P$ l ] v9 D$ i, ] {0 C* [) O/ N: O" s* m& _8 i4 d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, y# r9 u7 A$ n0 |( k7 [* z
if( !pItemElem )
/ w( t% ^) J& t; X! i3 s/ G continue;- S- P! `4 B5 ^6 ?# d& \
if(pItemElem->GetExtra() > 0)/ N7 z2 a2 m& o1 v) G
continue;
' K7 }5 @6 j7 L; g* a if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
L, h& V8 W2 @: c0 [ continue;
) t( n' S6 v9 R4 I0 H& q' i if( g_pPlayer->IsUsing( pItemElem ) )
$ ]1 K0 |6 k. N7 v$ Z" |, l continue;1 S& t R2 s' I# f
if( pItemElem->IsUndestructable() == TRUE )
2 G4 n# }8 g8 n5 Z3 [+ F2 z4 J& s {8 j: F' ]/ o! P( K9 _0 N" }
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ {/ K$ I& ~* v% [) I
continue;
; K( t3 Q+ O: S! Y$ F- ? }
' m4 b7 [+ z* v# s; X9 P7 N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 U8 h, @2 i5 I9 d! q
}/ a( x8 |( s- E' M
break; i8 `. a4 w, q5 t8 h. V# W
}" d( D; ], K: C9 [$ ~1 G
case 1:+ a; t, {5 O8 ~; t, S+ g
{# p( P6 Q; r- a7 y0 G4 g' z
//整理背包) }0 Y$ [; f# o5 A8 u1 ?1 ^5 T
//////////////////////////////////////////////////////////////////////////7 s7 u& }0 t+ p$ P0 P& G' h9 b) r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' c9 U! r; `4 l6 N8 S //////////////////////////////////////////////////////////////////////////" Z4 m2 I: d8 E, }
//////////////////////////////////////////////////////////////////////////
2 m0 C& ^1 \* C, m! i CInventorySort* pInvSort = new CInventorySort;0 N0 _2 \* h, h( q( o8 e
vector <sItem> vItem;2 y' `9 q# m# h0 p& v" E q# n/ l, z1 `
vItem.resize(MAX_INVENTORY);//初始化大小# C; w' C! m5 o- V) l! r
//////////////////////////////////////////////////////////////////////////
; |+ K1 ` A# ]4 e7 j' | //填充数据
# a7 A8 q& ?9 |2 e b6 h for (int i=0;i<MAX_INVENTORY;i++)4 V3 B6 x. _' S- s: f3 D% K
{
6 |0 u. x% a4 }! u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ E! [; K2 U( ^% A" {
if (!pItemElem)
- M. Z8 o2 m; m' V4 i; k ~ {5 D G, o% d: p) ?( Q8 p
vItem.dwKind2 = 0xffffffff;. ?5 n; j! P7 w1 I" H: x
vItem.dwItemId = 0xffffffff;& |7 [5 Q; N7 y
vItem.nIndex = i;
, t, I: _9 z/ T& r/ k+ c }else {
8 ]0 {+ {6 a9 e6 L1 X ItemProp* pProp = pItemElem->GetProp();
5 \2 T! K/ G3 {4 x# D2 A, D vItem.dwKind2 = pProp->dwItemKind2;0 w) k9 [0 s! S
vItem.dwItemId = pItemElem->m_dwItemId;
+ s2 p& x# z" c vItem.nIndex = i;
# R( f" S# f8 \8 I' k& n4 T- R4 P, g }
$ M R+ ]! @% }3 V0 l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( z( P: r& H+ q+ @( q
}& ~! j/ {$ j$ J
//////////////////////////////////////////////////////////////////////////
& F7 [4 R. |8 G+ U7 T' ]$ Q sort(vItem.begin(),vItem.end());//排序# F4 Z# D* p. L. N
//////////////////////////////////////////////////////////////////////////
+ p- v9 b! A8 ]! n //交换
3 m9 {) w: E( e/ t3 i for (size_t i=0;i<vItem.size();i++)
: o5 [: I+ I) a z7 z- s6 O {) A/ j" o- u+ X3 k+ V4 ~0 {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 P8 B( P% M, U* _1 ] U
pInvSort->Add(vItem.nIndex);! j* V, x$ e8 G/ r8 k4 Q
}- M/ I' y- d9 G% p- S9 H7 P2 ^
BYTE nDestPos = 0;
: T0 B2 I0 v7 Q4 l for (int i=0;i<MAX_INVENTORY;i++)
! I k, x' k& e$ }5 H1 D {
2 B! x! `8 G& \/ R( @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, G3 A5 T3 B( N: d5 I {+ x6 O. \" `
if (pItemElem)
% C) A; N4 i' E8 [ {( t9 k3 S4 b* r1 {+ C
if (IsUsingItem(pItemElem))1 [/ h6 j' J# `. Q
{) ]0 t0 G* [; s2 d1 `+ t. L+ A1 O
//这个位置无法放. T7 T, {" v& w" |& N8 G+ l
nDestPos++;
' s% h* H$ {7 J6 n5 M7 `! S }: r( p }
+ C; }% N) ~2 e- f3 b }( ?/ Q9 q6 x* Y7 y% y, t
BYTE nSrc = pInvSort->GetItemSrc(i);! D; c- C! x e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: y! R! Q* F% R- I
if (pItemElem)
9 }6 w1 w8 I% s( B' O" v- Q/ d! k, z {6 o7 [6 ?& k; `, S: ~
if (IsUsingItem(pItemElem))5 k( q$ }* x! Q! N
{+ l; T' x% T+ v/ ~# o
//这个道具无法移动,跳过; M+ K2 m: [8 d4 z& Y! `/ p8 e, ^
continue;
! |: s0 D. A6 e0 D1 r4 G }/ z3 H) w# i6 @6 S2 u$ J4 I# m, s$ S
}else{" V; w* G, C' H$ L, G* I0 F) e x' o
//空位置 不用动
0 \' `# Z. u, l continue;
" O2 ]7 P/ j; L4 t: A }
& O+ I+ Z- d5 |8 H2 ?- a //////////////////////////////////////////////////////////////////////////
0 F7 _' C8 {, l, C; S6 ~ //开始移动
5 z( I! r Y* D. n. \ if (nSrc == nDestPos): w5 P! A( I* J% M( z/ @- |3 i( `
{
' x' c. I7 X: q- f& _ //原地不动
y- o3 }/ A! Z7 y& a nDestPos++;
1 n/ ?* ]% a- D2 H continue;
/ I& d# V. T+ v& o }
; g4 W) f, j1 {' y pInvSort->MoveItem(i,nDestPos);
- H" L# Y0 B* o! o. q/ \, h* C. ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 r( x5 g* {( b; d. a2 `" B Sleep(5);+ c% k/ R' O0 T- i: Z6 C+ Z
//Error("移动 - %d->%d",nSrc,nDestPos);
+ F, @+ u3 ]; L2 a: ] nDestPos++;
5 e* k! [3 H% w" e* Q& i }
( b* L) Q$ B( n" Y7 j/ z //取第一个元素的信息: Q' L, Z; H( ?6 F
/*9 G5 h- q5 D; m% p- r+ P
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ N& }5 y+ p2 \, N$ s: ? {/ a9 Y3 O9 a. e: j8 ]
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 f8 A. _- _% ]3 h+ h! r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& U* a0 h! I2 Q( p+ l% @
}# Z2 w6 _1 d) P4 T7 Q8 X! q% F
*/
0 h" h+ y9 @4 ^& Y0 y# D //////////////////////////////////////////////////////////////////////////4 L+ p5 q# L0 L4 `
break;* T0 r9 ?, T; F0 Y6 \9 E+ {7 x
}
& C- l4 V1 z. O# u* ?! E }
7 {, Y. g6 A- E0 Y; J# E}
0 h% B- |0 T7 G9 A& Im_wndMenu.SetVisible(FALSE);4 U9 g; j# C$ B$ ~' i
2 M- j: B! o$ U/ m0 o
--------------------------------------------------------------------------------------------------------
6 I, e! I: s7 T5 P& Q) {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 R4 S* I4 F* [- Y; q8 r) W
{
- Q7 X8 U+ {0 d U* B- QBaseMouseCursor();
9 L* j, o, ]/ H) \+ T9 n}
$ O3 y1 {- r$ u, y9 p/ N: {) q在其下添加:$ s9 d. t* K/ `+ V! ^; T4 p% j S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 I& w1 h. X; e3 b. l+ A{
2 C9 ?, s3 a5 qm_wndMenu.DeleteAllMenu();
/ |7 |: |5 ^* am_wndMenu.CreateMenu(this);9 W3 Y/ A- C$ D7 @8 \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# P( e3 e. I0 W' `* s7 |' c. Y( j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 g: X+ [/ m( ?& x9 v* H
{
8 x0 i/ Z2 U3 s9 Y //P以上级别才可以删除所有道具
7 @* P! }( v% P7 Z m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ G( R- v- _3 y4 w& N
}8 V8 S I5 t! i! u, F
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 a( \1 J8 ~2 C- e. j* ?& x/ [m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* G- i! K/ d( Z1 ~0 b# O9 ~6 ^m_wndMenu.SetFocus();
9 q$ N x" ]) G- z+ L% U}
' a( K% I6 X3 ~5 d( Z4 c% p* f------------------------------------------------------------------------------------------------------------ T, Z/ {/ B7 b1 o+ h, {( \
*************************1 i! x3 K! d; C, C4 w6 v; J( ]& q
WndField.h文件
0 ~4 Z$ q( n! i; w9 v$ j7 E5 o*************************1 [6 k5 J. g y- I$ W( n- F. p
搜索:BOOL m_bReport;
& R( v U _7 T3 U4 _9 P! a其后添加:1 c" E! w I2 l9 j" t& C4 ^& i! }/ f
CWndMenu m_wndMenu;
& p! r9 X) T" y2 z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* I1 j4 K0 @7 h其后添加:
4 F A# d% h6 dvirtual void OnRButtonUp(UINT nFlags, CPoint point);2 a0 b- F8 K2 Y1 O6 I. ^
* ~, K+ Q5 l s7 ?; S" y
3 _3 _" V. M* p, V0 m' \6 h) i" c# K |
|