|
|
源文件中_Interface文件夹下WndField.cpp文件9 [5 V4 G) v+ c" O2 |" C9 m/ A5 w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ v3 f f$ [) q w, J$ W( {& m8 N% V% ]
struct sItem& W9 g9 `6 B0 _% c7 p1 H/ n
{2 Q, ?- g+ F6 z- K4 p4 I! \9 w4 B
DWORD dwId;' R8 w" Z, C4 @) S. Y1 `4 q7 ^
DWORD dwKind2;8 f$ i4 ]% o; t( L4 v4 J: p4 G
DWORD dwItemId;
, o" j0 i: S! j: | o2 A; z- l, ]BYTE nIndex;; |9 P: N F" h
sItem(){
1 x+ [9 X( c+ C* B% v dwId = dwKind2 = dwItemId = nIndex = 0;1 {* n; \0 f7 Q) {" z: s$ F
}
5 a7 a; h/ g9 H' T2 k+ p1 ybool operator < (const sItem p2)
5 M4 X0 I/ Z2 z6 i: \{
/ c" X7 v" c# f' q4 f% N2 Z if (dwKind2 == p2.dwKind2)5 j5 b. U( S; Y. Z
{
- x; J1 Q& v$ a: S% L6 H return dwItemId < p2.dwItemId;5 Z/ V0 Q( A& S; p# g
}else{
) C) j. m7 c0 l" ^+ |7 |) k" N return dwKind2 < p2.dwKind2;( ]; |5 G2 T$ h5 R
}1 L& H* F" Q- Y) ]$ s
}1 e2 E8 e& O1 G
};2 N" i+ E3 g; V2 \6 I, k
class CInventorySort
8 f4 k: y5 k8 ^) N3 a{
" ?4 U# W# h9 G+ ?$ i Apublic:5 q3 E8 S% V: k4 |3 Y: Y
CInventorySort()
, B6 `* J! [3 p: `: R{9 ]) q' \! n9 F% U, q
m_dwPos = 0;) e$ x: C8 b3 c" U7 C& N0 }
}' \) N5 q4 I/ S& ]- x$ ?
~CInventorySort(){}" r, X1 y5 K0 n( I5 p
private:0 n+ ~! {) W" Q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( Q, {, R* I" V) ~. f/ G- B9 G9 e. TDWORD m_dwPos;
0 s3 Q+ V7 _% Z* ]- R% S, |public:' o$ r6 V, P+ |6 D+ h
void Add(BYTE nIndex)- ^' c8 m; h: X. G6 E1 x
{* _) J" b. w- @; }: x; t: o9 `, ~
if (m_dwPos >= MAX_INVENTORY)6 U7 L) b6 u* a. Y) i
{
7 i* z8 }: H1 x( J0 F- H return;
" V5 ]" z; j) {2 q+ S. N }; D- o0 m2 C+ B- p+ \' B0 P
m_Item[m_dwPos].nIndex = nIndex;# [. W2 Y! H$ O2 k8 f: L& ?
m_Item[m_dwPos].dwId = m_dwPos;* r: o/ p2 o* k* P7 Z9 x$ p
m_dwPos++;8 _3 ~& B7 R6 C5 b, E3 \# V$ w
}2 D) f8 X6 N8 F( Y* ^' X1 M$ U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 {4 o6 y) ~' Z! o8 V
{
7 x/ D% _% q {* @ C8 m for (int i=0;i<MAX_INVENTORY;i++)
5 w" Z3 ^0 F. R) T& n) B+ I {( b1 U7 |) Q8 V: Z5 a
if (m_Item.dwId == dwId)
8 i+ Q% I, B) t. @9 K/ r4 X {
3 b# E9 c& b$ V return m_Item.nIndex;6 g7 h( d' s l4 S% C
}1 t! ?" {( W/ l' R; |4 O0 ^
}
8 t1 n! P6 X, J" i2 M+ H" l0 G return 255;
7 [1 H1 w: J; \) E) m}7 u; |0 G) D4 ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 J8 I' q: g$ E) V0 E2 e
{/ q/ J% u! I: K* Y
BYTE nTmp = 0;; ?. o' M" _+ y6 ?" m* H8 B
bool bDest = false,bSrc = false; \' G/ s$ C" ]7 L
for (int i=0;i<MAX_INVENTORY;i++)* J# u! I8 ^# u W- R4 Z$ b$ J9 k; p
{. d4 E% |3 x$ u9 V
if (dwSrcId == m_Item.dwId)
; i' z) O" q/ I( h i: _" c: P& g {, ]2 H4 u1 [1 {7 E) L$ r
//id相等 则 改变对应的dest和src
# [$ {" r' j: T8 _ nTmp = m_Item.nIndex;
, N9 S+ l' Y( ?$ d# |) t m_Item.nIndex = dest;
6 r' b" G4 A9 A3 H& Q$ t }
( W: k& D5 x% M# x" ]7 g }
5 X9 Q1 Q- f4 v2 l2 N' x //临时数据保存完毕,交换开始7 i% h4 r$ u9 R o/ \( ^! z% b
for (int i=0;i<MAX_INVENTORY;i++)) S8 C& c; Y$ F* R' N4 y
{
& T! b* c7 I6 K) x1 Y' ` if (dest == m_Item.nIndex)
9 @+ h/ h1 w* F/ s0 V {/ V+ @6 G. D, m/ y; ^" j
//id相等 则 改变对应的dest和src2 D) t# X: h, h* X. V' @
m_Item.nIndex = nTmp;& C2 ~& d" i: q: A( x4 P
}
( s/ w# c. e, J, M, ? h- e }" y' h' i- I- x: q/ L
}4 x6 v# r: m9 W+ p3 o6 s
};& f7 T) l) Z+ z# {; L9 [: G
-------------------------------------------------------------------------; {. ?0 _; p. c
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ m6 U! E; ~. c2 f+ Q6 U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 ], X% w% g, i7 B( b7 p' U8 W
紧靠其上添加:2 H: z" I1 T, ] @' [) k2 Q
if( pWndBase == &m_wndMenu )
( E! [& h+ e9 T6 v3 `{
* k( |& m# y9 j0 X switch( nID )$ }2 ?( L7 ]" c
{ r6 x9 R$ S" A
case 2:
! r: u$ m. V. f! m; v6 F {$ Z% e" |: }8 G" h" z8 `8 O$ V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: D9 j$ `( g( g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 L/ W+ |5 Y9 _6 P4 u6 [. j {
' Q. Y( w6 |3 T break;
3 O: T2 ?# Z A& T g8 x9 B& p" F. z }
* ?* t0 p0 l, `( X9 i) |. O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 c$ K) Y) X+ }/ c {
" ]1 ^; r( A/ t7 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ n& s: s8 a8 x8 V if( !pItemElem )
$ ` \2 i" p# `- S continue;4 s6 [3 G* |' p0 T
if(pItemElem->GetExtra() > 0): U) \" U" `3 n$ e% A- ?' t$ [
continue;8 l: d! X0 E7 K7 s
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' W1 o0 k0 V- _% Q& i& ^' D continue;/ L+ W2 c( n& E( g
if( g_pPlayer->IsUsing( pItemElem ) )
y+ i7 G: I+ H# W0 a# V continue;( F! u6 j* X x0 Y( R$ [% t
if( pItemElem->IsUndestructable() == TRUE ); r( W+ X( s4 H- J
{* H7 \6 q5 m, ^4 o: ]" e) N+ K0 x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* J, \! y2 v- b6 |- t# h. f5 Q continue;
8 e4 I! D w5 T4 C, B& G }
% z. E! R6 F% g' q) W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 Z- {1 a+ T- K4 O9 x1 S
}
; `% ^( l( Y% K break;
$ r( _# P, f, u4 \5 Q }
( B0 b' w* U0 t, e' k- c/ s$ ^ case 1:
) _9 M6 X6 O1 F |" k. v: w& s1 Z {
0 y& H( ~+ s1 R //整理背包
, j8 O ?$ S# S p+ O. G //////////////////////////////////////////////////////////////////////////
0 M7 F) N# I1 N( n& M //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ c$ b1 Y- H" X- D //////////////////////////////////////////////////////////////////////////) M- P# [ E$ a& J- W
//////////////////////////////////////////////////////////////////////////2 M" L) K3 v7 t9 l
CInventorySort* pInvSort = new CInventorySort;
( n1 i5 B g7 D) ]# p" P vector <sItem> vItem;
3 d$ T6 g& U$ L6 X5 a vItem.resize(MAX_INVENTORY);//初始化大小3 J/ |8 @) B$ D' e0 w/ j9 {
//////////////////////////////////////////////////////////////////////////- x4 ?$ H. o5 _4 y0 H9 `# e
//填充数据+ x: t1 g* H, V- z) S6 ~
for (int i=0;i<MAX_INVENTORY;i++)6 t# k! @' C" f2 Y2 t" H1 ]
{0 `5 f/ F; k+ S; W+ @2 W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 h# p: ^, P0 V- @9 m0 r m
if (!pItemElem)
9 A# v! [8 F* y0 q* J3 l {+ Y/ K s% T0 ?8 L o9 n
vItem.dwKind2 = 0xffffffff;0 B$ K% R! D7 E( S- g- [
vItem.dwItemId = 0xffffffff;2 J/ g1 J: ?* \# K% Q2 }; B4 o
vItem.nIndex = i;
) s% Y( M% b1 n( V }else {0 P6 b k8 f$ d9 `2 z3 I/ d- i
ItemProp* pProp = pItemElem->GetProp();: l: u; V/ V' g- P1 D3 m+ \
vItem.dwKind2 = pProp->dwItemKind2;
7 r( m6 S) i# l4 G0 M vItem.dwItemId = pItemElem->m_dwItemId;& X* \* G Z* s9 _5 c
vItem.nIndex = i;( [( p( }" v4 U! F
}
0 S5 g4 l; ?" c$ b //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 e: Y9 s1 ^4 q( g6 K }; Z7 q, D- @* X5 |: ]$ F8 z
//////////////////////////////////////////////////////////////////////////
2 Q& C, G* B' e" L sort(vItem.begin(),vItem.end());//排序+ }, g! t; c" O+ @1 i# ^' O1 W. a5 c% u
//////////////////////////////////////////////////////////////////////////
8 }+ P+ ]3 _0 I/ W+ U+ i //交换4 L1 B! r5 F% k3 U( N
for (size_t i=0;i<vItem.size();i++)$ b% Y6 x3 { k/ F# N" ?) }6 N) G
{
" l; i& y* ~- p" L: Q, a! q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ v4 J! P( u& `8 s$ n% _# S pInvSort->Add(vItem.nIndex);* W4 S+ x8 y' V) N
}
7 u: J/ o% T. W m0 }; S- E( a; ^ M9 m BYTE nDestPos = 0;
% z) C# t9 ?; j/ L for (int i=0;i<MAX_INVENTORY;i++)3 m( G, ^; H3 u/ a/ ]: M( X9 ]
{
5 U( E. ]3 ]1 j8 y, {+ G! F; P& z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 X6 |4 w2 _! H# z& I if (pItemElem)
5 R. t' ]0 i$ K7 i( w' Q: L {
, Z* M% `9 R7 j5 E- \8 S5 W( n8 k if (IsUsingItem(pItemElem))2 t' z; D+ t/ d% g D
{) T2 N$ c6 y* {' T: U* M3 Z
//这个位置无法放" C* z- i* |7 R
nDestPos++;
" x% l' Y. w j4 N' v' i }
- S) E N6 S# i% T! f9 ]7 i }9 x% \2 ?2 R9 ]
BYTE nSrc = pInvSort->GetItemSrc(i);; n, T3 j" y% ^+ d( T# |0 a
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ n! c) V$ n/ _ h8 G7 x1 A0 L5 F
if (pItemElem)6 Z3 x0 ^' v* f
{$ O d% D& h% b) r3 E
if (IsUsingItem(pItemElem))
3 N8 r' `, k4 ~% J9 v {2 _/ r5 H: Q2 E6 S+ z
//这个道具无法移动,跳过$ _5 J4 L% b" F0 \# s/ E0 m
continue;
; v9 c4 C2 ^! Z }
0 i6 S: h" h5 F1 f3 d }else{
+ m/ n" X2 O) }8 Y8 e, ^) [ //空位置 不用动
9 ^% p2 P* b% f3 j1 V continue;) [; {- Q& x) W5 h& E
}
2 ^: C( e1 a8 t6 ^# {( b" w //////////////////////////////////////////////////////////////////////////
4 d7 v0 w* n M3 ?; H# U; X //开始移动3 W3 p' V+ x+ B/ {
if (nSrc == nDestPos)
% A# M% _; y1 P( j {/ v) @9 `$ C0 Q7 a1 D9 [2 Y7 ^
//原地不动
X% x8 t2 } n% ~6 I7 N6 Y. [ nDestPos++;
% [/ ^* K) c5 k$ k8 a continue;
4 `* b1 s4 ~5 o2 U; H& ]' U7 [ }8 i2 t+ n2 N7 }: D( P8 p0 T3 @( P
pInvSort->MoveItem(i,nDestPos);& I4 H7 a6 B/ a. ]
g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ D) E1 t6 c. \8 S! m- ^7 V6 [
Sleep(5);
4 K' X1 P f, w- \4 j. f0 t //Error("移动 - %d->%d",nSrc,nDestPos);
, ~& h% i$ r/ z& J; h nDestPos++;
& D3 \! ]/ f o- [8 \ } y6 ` P# U+ e, {/ Y, Q+ u+ R \
//取第一个元素的信息
: b) W4 n+ y/ S6 ~6 V /** U' {4 S% N* C4 f4 R% i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# d* A5 G7 T3 a; v1 w" B {: t7 h# F1 Z' v0 V* _. q7 d
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; @- U7 c# e: ]- N" b+ T9 h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ a% _7 r3 ~ }! `% y4 P& e( V
}; {. O5 l$ ]9 l' T' t1 o" w
*/
& s: ?: ?! S' i) S: ~ //////////////////////////////////////////////////////////////////////////% s/ K8 B$ j8 J Z" l' v; Z; J
break;
, U4 ~7 u6 s- {% H- K! E }
& J B- q& q* k9 D$ U }
5 p# S* M3 t4 u. S}
3 r; D! }/ i) C$ w0 r4 Am_wndMenu.SetVisible(FALSE);
- l& R; B( p. P$ A. u+ Y( L* }4 a+ A" T
--------------------------------------------------------------------------------------------------------: c# T# x/ v0 f3 r$ Q; j! k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 s' W, X* n: U! O
{3 _; v' m; v& d+ \6 U9 M
BaseMouseCursor();8 J- O8 D3 `0 Y. [9 w* O
}
! L0 }, X; S9 O7 L6 m! }! L在其下添加:
6 D" E; a F Q' j2 ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): j( {' ^) \5 _; e" B8 F( e
{, @+ ^* `; `! c
m_wndMenu.DeleteAllMenu();' d) Q+ J m9 r) }8 U7 o+ F
m_wndMenu.CreateMenu(this);
5 c& u1 N* k7 Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 r" o. M, D0 }9 W* |
6 H8 A3 f/ Q0 w3 E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, v# R/ J+ N' H( a; R5 p% W" G{
: j5 R8 ~, f# L //P以上级别才可以删除所有道具9 j# y, [' J6 T" e9 e: N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 O' I/ k( r/ {5 e}
3 e1 P, L/ D$ N. B7 U; Gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* n* P$ L& N; ^ W hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 x, l- ]4 P4 C) {# \% V
m_wndMenu.SetFocus();
! ~7 ]# o, A7 A* o& j2 q4 G}0 T+ N1 |$ q' _; y" E
------------------------------------------------------------------------------------------------------------
& C8 W% s8 m, A- f" e+ D' [*************************
/ ]( l$ p& ?5 e3 z/ [1 Q0 _$ X. F1 LWndField.h文件6 Y$ K/ A6 T+ m/ U" O9 \' p
*************************
+ B# A- a8 U _) R8 k5 x C搜索:BOOL m_bReport;
: e( x; M3 J: Y. F其后添加:
" u7 O4 Y/ i6 Z6 f0 h% mCWndMenu m_wndMenu;
; H& W+ b8 b8 u$ g+ S; g( Z3 X: ?搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 ]% U I- k2 j2 ?7 d: s6 j其后添加:+ t/ Y$ N- Q3 p @4 q$ T- u
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 i# g7 E! C' F! c* q
4 a0 \& G t$ S9 Z/ S; K$ e0 I4 ^' N1 @$ |1 r. L
|
|