|
|
源文件中_Interface文件夹下WndField.cpp文件
/ }2 E; D, @4 y) F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" s! Q" Y* X/ w% T' a0 ~/ L- R0 \, R
3 e$ ^$ E2 R; s- o1 m/ ?struct sItem
& n- z, w+ C4 B B0 v{
) [' F [( e! f/ O( sDWORD dwId;' w% @7 [' e) Q$ L) |
DWORD dwKind2;
0 E! c7 @9 N5 yDWORD dwItemId;- B) y5 q$ Q, i2 e
BYTE nIndex;
8 f7 r1 U) `" t2 k' P) tsItem(){; d9 J: `4 g) ~6 W# u# W: D
dwId = dwKind2 = dwItemId = nIndex = 0;
. X7 d1 M% \6 s: U5 Q}. Y2 ^" I" r& K* c
bool operator < (const sItem p2)
! Q' ~4 w$ H; V/ ^$ Y/ \{; ?# c$ j; f+ l# s% m) Y! Q
if (dwKind2 == p2.dwKind2)3 A4 p! v, ~& o
{
6 ]: Y" u) {$ F! ?: X2 Y4 O: h return dwItemId < p2.dwItemId;9 Z5 C+ m: I$ u! E1 T5 ]
}else{
) `! l+ r. I% } return dwKind2 < p2.dwKind2;1 U$ ^. ?$ X5 N' y2 R- U
}
9 Y# c3 w y$ i! o}
) @0 B+ ^ q8 f- g" [6 z};2 Q( q7 ^( Z# I0 Y3 j" A
class CInventorySort# F& _+ A2 [ j' A1 }, J5 M% n; e
{: k) s5 Q0 J7 a* v
public:
' d/ h- z$ x0 p) J& ~1 k) BCInventorySort()$ q$ K! m; ?' `" d
{7 N% b% R3 |2 h1 G+ A$ T
m_dwPos = 0;' n; G. N, |' K
}
" [1 v. U" g" M' ?~CInventorySort(){}! w* j" s" u5 Q6 u6 U
private:
6 D0 L5 B2 n& }5 osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; p5 X6 {. z( ?8 B
DWORD m_dwPos;
2 E5 x: q7 D4 `/ G3 ipublic:0 B+ R* W3 V9 l& o2 L9 a
void Add(BYTE nIndex)7 p' m" o: h2 ?
{
; t" ^% `; x0 c `8 W if (m_dwPos >= MAX_INVENTORY)5 V. \8 f7 ^. f( H9 P" e5 M$ c O
{! \2 Y4 W1 ]* U/ ]' X; S& u
return;
: j7 }- U2 }+ p) w$ M/ M+ ?) t }9 F( _% x; Z, J" P
m_Item[m_dwPos].nIndex = nIndex;
7 R: x) \; g+ X6 ?5 Z m_Item[m_dwPos].dwId = m_dwPos;
! ^" ~7 J' P( u1 t9 N m_dwPos++;" A- p3 M1 U8 F
}8 D, G9 U5 i$ D( z" @
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ Y6 i5 r9 t/ k4 C( q{
3 |# Q( p; V9 {* {# I, p for (int i=0;i<MAX_INVENTORY;i++)0 o4 S6 v: W+ h7 J% n2 ?! |
{
S" A2 `- }1 j! e& L- x/ S if (m_Item.dwId == dwId)
/ b. Z2 b% u1 M" U6 T {3 W9 y! }! M- B1 ?& l. n, e
return m_Item.nIndex;9 a3 K- P" I, h/ b- W4 J
}+ X5 O: x! c9 v8 H" `
}
; }, v) V. ~4 Q; r' M' P, s9 K4 h* | return 255;( B; U& i( \8 ]- z6 }2 ]8 x
}; H: Y' V( w0 L q6 ^, d) O* C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. u4 H" p2 g( \3 B
{
$ C, M* g' L8 I( z R; f/ ]$ w) A BYTE nTmp = 0;: S% i6 d e3 b
bool bDest = false,bSrc = false;
8 _) p6 Y8 }. O1 H' v for (int i=0;i<MAX_INVENTORY;i++)8 ~& J% M# P( B5 f
{3 q2 \9 G1 i/ w: V9 k
if (dwSrcId == m_Item.dwId)
! a8 u# W- m+ F, J3 _5 |% O" P. H/ V1 u0 \ {9 t* ?# y& b/ W9 ^/ `- m6 W, b
//id相等 则 改变对应的dest和src; f% A5 P' _2 O5 K, G r' b
nTmp = m_Item.nIndex;
1 o: f | \" Y7 a* U3 S, @9 H( F( b m_Item.nIndex = dest;
& v3 n) _% b7 Z$ q: D" E& M }
' ?0 t( O% `& W# ^1 @+ _+ U }. F; f ~" U2 n5 x/ `! W2 H
//临时数据保存完毕,交换开始3 n/ J: h) v0 l1 }! z0 X. o- A
for (int i=0;i<MAX_INVENTORY;i++)5 h s: Z4 N% t2 ?3 ^
{
2 E! V) t! l+ f1 M3 o% k if (dest == m_Item.nIndex). ]: v+ N* F/ Z% h* Y5 l
{
- a: t" O5 g7 F6 O/ ?8 R //id相等 则 改变对应的dest和src. c- u% @5 B5 z* C5 o) Z: t
m_Item.nIndex = nTmp;9 o5 {, `' X% [$ ^: _7 M- G
}
6 k7 N) P, @. i- l* Z: } }
4 X6 ^8 _6 r$ w2 R/ Z6 u}
2 {8 }: C# |( e& x' Y};
4 b4 q$ F7 h# ~: l9 I% H! E-------------------------------------------------------------------------8 T( D+ ^9 |2 K5 }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. Y' T! ?" ?$ C7 c. X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' D( f9 y+ C) ?8 u& b+ h
紧靠其上添加:
0 m7 Z" c. G* o1 x' Q. e# x- i, V7 F! @if( pWndBase == &m_wndMenu )$ L; H: _; d+ q3 v! z* A# ~( \& a
{6 k- e4 ?8 W, t, h! U
switch( nID )( M* D, E [: A# n N. K
{
) R5 k* H/ A! J, P" O case 2:* `3 U2 v: W: K6 S) t
{2 O" A4 E1 }$ T% f! Q# M& y3 m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 r' B! Q0 c8 X O7 w if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) R# `% j0 |0 C% @7 W; g2 w
{) s* {3 @/ N" n1 o0 U+ L8 b4 ?
break;0 a1 o- i5 d2 W, k& W$ b
}( @5 v+ F; t- {6 \9 f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% @0 n9 w3 |' f$ B1 a1 X9 |/ C. ~ {) f r: Y! U7 c9 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. `, H. j# X. r6 A if( !pItemElem )' p) z) R6 W: Z& ~1 [& L
continue;- _' W; U3 d C9 h7 ?1 @* }
if(pItemElem->GetExtra() > 0)
; ~5 {8 ~2 J0 o! \, j0 ^+ { continue;0 l; M {1 e4 u: u# P3 |7 i
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 ~. G; H* ^9 ]. }# m: g; J( s
continue;
5 ^/ F' r- ?, C: |+ D5 X! v6 o if( g_pPlayer->IsUsing( pItemElem ) )& Y+ L- d6 V4 H" V+ U+ P
continue;
6 B' A4 g& m3 H4 [( N x, a if( pItemElem->IsUndestructable() == TRUE )
$ a1 x# r" E2 i# `0 E% e {8 O' B! ]) q4 ~+ j7 g* f
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) M/ Z* c( M* P; h2 _( v
continue;) {* \' i- E& c6 P/ Q6 |4 S1 M
}. z* z/ u6 G' X8 j: }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
o! Z& ]; t0 n. x0 s( a }
7 P) _' g) u$ ^& {0 m% r break;/ {. z. _. N- r2 ~" ]* k
}
* x5 z6 f' u/ z" z4 x case 1:
& P7 P$ d; U, g2 O" ~+ h5 p {
4 |' P) L- f1 s) M/ |- j //整理背包
1 l! v5 ]' f& p) B# Z //////////////////////////////////////////////////////////////////////////
4 B4 s# E2 U) S //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- h+ l- P+ A* J: N6 z# G //////////////////////////////////////////////////////////////////////////
- W3 y; ?( A* k# _5 M" f //////////////////////////////////////////////////////////////////////////
8 A2 j! f4 h# U1 { CInventorySort* pInvSort = new CInventorySort;+ D) k [: A6 F! q" h0 A2 J
vector <sItem> vItem;
$ ~& }( k* e& [; m [5 V+ S vItem.resize(MAX_INVENTORY);//初始化大小
w7 n: S8 j$ i* n+ s3 n //////////////////////////////////////////////////////////////////////////. ]5 c+ T5 U% \5 f9 ?
//填充数据
: O" ]2 l5 {$ W6 X+ l for (int i=0;i<MAX_INVENTORY;i++)
0 S- b! v! p( }; ] {
$ G' m' o/ g, X% X; I3 n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 x; L/ d) w' i" i: Z
if (!pItemElem): z+ z# [8 Z$ B! v, K) G% ?1 w
{
# I1 Q( P# F& x8 ^" d vItem.dwKind2 = 0xffffffff;
6 t# J. v% b: W7 j5 o* o* \ vItem.dwItemId = 0xffffffff;% E4 {6 {8 B& N5 J' `' g
vItem.nIndex = i;+ n8 w" W0 a' @6 |
}else {
7 l5 @3 _8 Z; h! p% _0 c: a ItemProp* pProp = pItemElem->GetProp();7 w! J, N( @) K+ B2 t$ X6 `7 p
vItem.dwKind2 = pProp->dwItemKind2;% x8 t- O* q# X+ t7 b1 Q! _
vItem.dwItemId = pItemElem->m_dwItemId;% @) @- C& D& O( H9 I: e- V
vItem.nIndex = i;( ~. H' u7 C& ~2 x% u( S! e
}2 ^6 q3 T% H8 L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' a4 M& [% \! J X/ R }. Z9 x1 G T( D: q Q# _ W7 U- U
//////////////////////////////////////////////////////////////////////////' j2 t5 T( u2 q5 m5 |" c
sort(vItem.begin(),vItem.end());//排序
! l4 X5 Y) F* X" R //////////////////////////////////////////////////////////////////////////' u) g) O; K6 ^+ r
//交换
- t" C1 k8 I- W" l) F, b for (size_t i=0;i<vItem.size();i++)
" e$ d: x7 l0 |: R+ y {2 G1 ~7 \" w0 a! m! V. z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 f" b3 C- i( r pInvSort->Add(vItem.nIndex);
' l( @; b7 s2 @9 c: H }- I9 w, F+ j3 X0 [2 o9 K% K
BYTE nDestPos = 0;
. C, ?2 s8 q: j9 Y0 W/ b for (int i=0;i<MAX_INVENTORY;i++)3 j! S9 C& h+ c3 a6 q- p( ]
{
' e9 e3 n* |+ }. o! V/ ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, m# N# H C3 [- k4 J if (pItemElem); Z3 S) b( ]' h) e' R4 h
{+ g" ~$ k2 |- Z
if (IsUsingItem(pItemElem))
- E0 n& [( J: L- F" { {
* U4 k9 h; `# v3 D; { //这个位置无法放 f; B% x- W2 d6 l: D. ]/ w
nDestPos++;: X, u8 L7 |4 H
}" y# T1 c, V3 z) G5 z
}6 } F$ h" d8 m" e y3 z" C' Q9 j
BYTE nSrc = pInvSort->GetItemSrc(i);/ |- H; m. y+ x N) q( m
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! J2 H" _) P6 e. E: Q r3 N+ A if (pItemElem)- R5 s. Y, e/ |
{
5 m( D2 b# \6 G s# x9 Q if (IsUsingItem(pItemElem))
& \: l9 u- H& K: ~6 j$ a" e! v {
: W0 r4 |7 L ]' d& C. f: J //这个道具无法移动,跳过
3 Y% ]6 d- d' L, w0 k3 s# D continue;
/ Y' Q' M! p5 B$ ?% I6 o, N& F }
8 w5 N4 L9 v2 W% i }else{
4 X0 @2 m+ ^+ m: U: q //空位置 不用动7 u& u7 j) _$ C% Y
continue;0 Y U( e* |+ X6 y
}
% w2 D; T% Z1 f1 l/ Q/ J //////////////////////////////////////////////////////////////////////////7 Y1 Z0 _% w& b7 _: w$ {/ B W
//开始移动
- x0 S5 Z/ N$ ]& y6 t$ B- M2 y if (nSrc == nDestPos)
! y& c3 G b; d: e; z {
0 Y5 W$ x$ `% p: N& f; O V //原地不动
- _8 n: C5 [! J$ k" T) z4 ~ nDestPos++;; O. _+ K, x: u9 J8 J. K5 E
continue;" n) E) v9 j' k$ b
}
, p; m5 T4 w5 D/ C0 b" D" ]. I, M, Q pInvSort->MoveItem(i,nDestPos);( |# e9 {- Q$ u
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# W6 h2 p% r; A* V Sleep(5);
0 R" X: ~2 A& J! A# P //Error("移动 - %d->%d",nSrc,nDestPos);
' ~' E3 n& x+ \8 B nDestPos++;
3 G: d/ |2 {' [9 i4 f% D }2 \! b$ b% X1 y- u
//取第一个元素的信息5 Y. d+ g" T" b* _
/*, z+ `/ a4 a6 N$ V5 B4 F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 u# H0 Y. ?% \/ e3 |7 w9 j1 M- n {
+ k! Z+ f2 E9 ^) f) t& B( P Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 I2 |# f$ @& ]- k/ [( B* f g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* B* Z3 ]/ _! n* x& W }
6 |$ n& m% k6 n& t' w. d *// D0 }4 H# ?, W0 A6 z$ n% N- {
//////////////////////////////////////////////////////////////////////////
( e( X8 l8 A: ] break;
# t/ P' n7 i' J( K" w6 k' X }& p7 Y R% D' f1 M6 b2 L
}
* \4 g0 `5 W& T) r}5 x2 {4 T, r9 g* ~# { j' @
m_wndMenu.SetVisible(FALSE);
) R$ r6 o3 @) ~, I. F7 x" R! p
6 K" F+ ~8 Y4 |8 j3 N/ \* D8 N--------------------------------------------------------------------------------------------------------2 O3 Q' z7 H5 m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 I7 H$ w8 n: J3 G# }: v# n1 ?7 I
{& J" H9 ]/ ?" `, h! ~( l
BaseMouseCursor();, a( M- q1 F2 j7 Q0 H( ^! K; I
}
% j3 A% M: a5 R8 h1 T在其下添加:: @+ y# G; N$ D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 ^& p; F) K9 w{
6 T% O8 q5 p: d4 l. K* l% Dm_wndMenu.DeleteAllMenu();$ u' N& m$ l) O7 G
m_wndMenu.CreateMenu(this);+ |8 V/ ? Z8 c5 p3 J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; }$ ^* r/ y* _" t/ v
- O' q6 a8 Q+ u8 Q$ y& jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: g H$ h$ n4 n: t{& B# w) h0 t' A* l1 h
//P以上级别才可以删除所有道具
" O! N$ N/ e" K3 z, p m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 e4 F/ ]! P) F0 A( N; P; k. u
}
# [/ n( I9 D& q W, s/ Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' X* |. E* G5 q1 rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 G2 C7 a% H0 b3 ?6 im_wndMenu.SetFocus();
+ m. E+ S: i4 e2 ?: @8 }: e}
+ b7 j. A" M, M0 i; e9 f- y7 L------------------------------------------------------------------------------------------------------------
4 i) `; N2 Q A*************************4 ~" R3 |1 ~& \) d
WndField.h文件
1 R; c4 [2 @8 J*************************
{/ g( e+ g$ Y搜索:BOOL m_bReport;
5 ? U0 S+ Q$ m! g9 _( p' E# s其后添加:2 l: _$ Q* m- ^; A: r1 A
CWndMenu m_wndMenu;! E+ V2 F9 g$ L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 I/ \1 O2 o$ M8 A
其后添加:1 c: [& T/ B m) S
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, s+ g0 C' m7 L, T" B; ?
O( t+ Q4 P$ P8 `- i: j% {
4 F* U$ d7 K% t* k |
|