|
|
源文件中_Interface文件夹下WndField.cpp文件
' y& O% _5 u+ J1 a% o- c* f. J搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 e0 Z$ d- f' Q7 n
# x5 s+ Y0 S+ {8 f7 t# x$ @struct sItem
. L' T7 K) D" y1 m) w{
0 y- X4 _1 P. B. q8 _DWORD dwId;7 I9 K3 R2 g5 i% m
DWORD dwKind2;
' p' r3 i& ?' hDWORD dwItemId;/ E# ~2 r+ ~7 _( b+ N( }. m; k9 u
BYTE nIndex;
; [$ M4 u' y/ x# L" H6 T) `sItem(){# k( z( m9 q; o* ~
dwId = dwKind2 = dwItemId = nIndex = 0;& k% O1 c# Z" ~% P* g' K. D( b
}) k" n( `0 M- E
bool operator < (const sItem p2)
" G' ^) \ a( [& P* ]{5 _6 Q! f4 L) ^' T
if (dwKind2 == p2.dwKind2)
9 R& v3 c1 w2 \, d+ ? {* y" y$ s& F$ h2 t
return dwItemId < p2.dwItemId;
, x, o) X/ s% S" u& M: M0 E" t+ H( y1 y* H }else{7 W8 a7 t9 \: g$ w$ R- d4 S- J, d0 F* a$ z
return dwKind2 < p2.dwKind2;* Q# `9 h- d" q9 n* `
}& ?/ N; ~6 r9 f
}
' V+ b- @3 }* h6 n7 T1 ~8 s; m! T};
2 R. n3 Q! E- zclass CInventorySort
. C$ @; ~2 e% ] N$ T# x! `{
& R, t: `' i4 o3 f+ g0 ^6 H! P7 m' M0 m: {public:* S& f8 ]6 Q% H/ F+ R9 S
CInventorySort()" q+ M8 x' l% U% z
{
$ D" b' i3 U/ C/ ] m_dwPos = 0;. U# r6 J% g" W+ a' p( J# T
}) l# b3 o0 r5 x# s0 o& S
~CInventorySort(){}: L& C. D# y! O1 T3 b9 ^/ e
private:' J+ A0 p, {, P* {
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ M$ H! _# ]. ]1 J; u
DWORD m_dwPos;
$ X S7 m1 \& x/ N2 g( x" ~public:
, B* u* U/ X0 x n. {! i/ \) t2 P kvoid Add(BYTE nIndex)
8 g7 w: s2 z4 p. R{
: r+ |& ^* h6 M if (m_dwPos >= MAX_INVENTORY)
3 L* |& R0 ^1 C4 d, H5 G& y# B X {2 z& V/ L' _- x. l1 }. s
return;
' D2 x9 D5 Q- f* I% _" Q& Y }
& ^0 K' }6 U% z q& P4 _- f m_Item[m_dwPos].nIndex = nIndex;! g9 e5 ~: s! A) m
m_Item[m_dwPos].dwId = m_dwPos;) E! D( H( f* B3 M9 b/ A
m_dwPos++;& d! x. g# i2 c) k* B+ d
}
1 `2 B$ z. ]3 e0 DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 a# F; P2 r% Y" }
{# ^; X: d( [- v( l
for (int i=0;i<MAX_INVENTORY;i++)* [7 s7 g: c2 h1 v K9 H/ y* N
{7 i* _, x3 o. e2 ], y
if (m_Item.dwId == dwId)8 Y* ^) ?! t8 u- o% K
{
+ \* F- w- e3 b1 B8 ]; h- N) F return m_Item.nIndex;
# n m. @2 J! d& d/ j7 e }
' v" n8 t7 D# o1 I" b! J }
# Q4 B7 n, [0 y return 255;
3 a/ u6 ?0 f+ I$ A) t: `}
- n) I3 D7 m) \1 {0 qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! N0 I: @9 B% ]) `1 S& B o, i- a3 q
{& a6 E- w/ r7 J. F
BYTE nTmp = 0;
+ f7 }/ }1 x9 @ bool bDest = false,bSrc = false;6 } ~/ s$ R1 Q- M7 j) H( s
for (int i=0;i<MAX_INVENTORY;i++)( R& v+ E! ]. x
{
4 z0 t5 i, U1 X" @# X if (dwSrcId == m_Item.dwId)# [* b0 y: s8 Z
{7 c# h, e. A5 K m; M/ k
//id相等 则 改变对应的dest和src
7 |9 W! C% g7 e F4 b nTmp = m_Item.nIndex;0 @/ P! Z- s- H
m_Item.nIndex = dest;) o2 S* ]! U% }" j
}: D: R1 O5 d& ~; M
}0 t! A- E1 ^3 A/ V' E
//临时数据保存完毕,交换开始! n5 {* `# R0 p4 u' P
for (int i=0;i<MAX_INVENTORY;i++)
7 z: J0 n8 ^; Y {
& K/ d' G/ e0 _ if (dest == m_Item.nIndex)0 ?4 L7 a8 i! I7 \2 L3 f/ T
{
1 M. ]9 e2 o1 H9 \( R2 q$ } //id相等 则 改变对应的dest和src
( S) `% ?1 ~/ j" |8 } M8 t m_Item.nIndex = nTmp;% @$ J. |* a, F
}
* K1 R. ?: O Y7 B! K6 L; l }8 N% |1 r, Z: a6 P/ q
}1 V: \" o. g% D
};# F( H" w% k D8 c9 T) ^
-------------------------------------------------------------------------
5 L4 |" t1 r; [+ X1 Z& y, n7 [7 s2 Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 j, ~5 o4 @8 [: Q) g T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& g% [+ Z. `2 L8 ]: ~
紧靠其上添加:
% ~7 s3 O# w. O4 cif( pWndBase == &m_wndMenu )
5 s( Z8 c5 p0 W, C* J& J{* y& O: N9 u' `+ N" d) K! ^ o2 g
switch( nID )6 r. P: D& k6 |2 E
{
3 g- G. d. e5 G( n+ ~4 x case 2:& b9 d3 G }% k( o
{
7 s# f K' j1 i //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" @0 ?9 x' O' n" U' _- N) d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 c$ ?4 s1 s/ i* l! e. x. Q* V {
- ^" e& g; @' y6 e break;0 r. G* Q7 y. c
}/ E! B6 l* ^- d/ O
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ W# A7 w3 D6 j! r+ X6 |9 [
{
( U5 I1 F& j0 y$ ]# `& P Y5 I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 r7 z0 A$ z, C! ]; k if( !pItemElem ) ]( R( S$ a- l/ q# u1 h
continue;$ B: Y- Q# ~' h9 b
if(pItemElem->GetExtra() > 0)
- K" k( T8 H6 M- H9 B continue;
8 d% ~ u4 u& f: j2 Q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 I7 Q. z/ g v( `; F continue;
' t$ F% H! K0 B4 F" @ if( g_pPlayer->IsUsing( pItemElem ) ). E2 f. j/ i7 E. W0 k; i
continue;
: H: g2 _7 r6 N T) U if( pItemElem->IsUndestructable() == TRUE )
' X. G8 `5 x; y8 R6 O' d {
# r. ^- b+ \; t9 d1 A7 N4 G/ e8 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ ^. Q; o+ q" ~9 Y5 e1 L
continue;; o3 u J+ I- n' ?# _- K h
}
( ^, H) m9 x& U# @ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ ` b, {6 o4 q) x
}, p$ a/ r9 S# o+ M3 P
break;
7 ~% ]( @7 G! q& K6 \# {0 H! }" X }: q8 P/ M- V4 m( _" L, ^
case 1:
! L7 k: Q$ B( Z0 h2 C! t/ W& n {/ b% Q6 C( J0 p
//整理背包# P" x3 s5 w3 j# K, C
//////////////////////////////////////////////////////////////////////////
6 Y" R+ y) M. i* ]4 w8 |7 \4 A //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 Y1 F# [3 h* M0 t( V //////////////////////////////////////////////////////////////////////////
6 |3 H, y, M. S) U, D! N! g //////////////////////////////////////////////////////////////////////////
" o$ ?; ^4 z; O! X+ J CInventorySort* pInvSort = new CInventorySort;
- i j/ G2 G2 U$ m0 x: m7 a, a vector <sItem> vItem;7 y& u6 V6 Y3 F X9 Y
vItem.resize(MAX_INVENTORY);//初始化大小: m& f/ x6 _0 A' a0 I/ m. L! `2 V
//////////////////////////////////////////////////////////////////////////8 X v' A- m; a3 M }9 ?1 V
//填充数据
' u* y' O( B; W8 S* }: | for (int i=0;i<MAX_INVENTORY;i++)) S" D* r! z% E6 g- a/ Z
{
7 n& L- [% v4 L: g0 l9 c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ c$ o4 K5 U7 q* V: ^
if (!pItemElem)
6 Z/ B2 ~1 C7 B& m! x9 k. m {( k7 W6 I) J9 [1 O% x
vItem.dwKind2 = 0xffffffff;
$ m$ v- q% P2 z( D- v, H' t/ B vItem.dwItemId = 0xffffffff;8 H0 a, \6 D6 [" ]: M$ j4 t# I
vItem.nIndex = i;, ?# @& _' O1 R3 w) ?! y8 G
}else {: |, p [2 H9 U" n) E1 n% b& l( V
ItemProp* pProp = pItemElem->GetProp();9 _8 O9 W0 a% [* x
vItem.dwKind2 = pProp->dwItemKind2;4 Y5 a8 k, h8 b6 T3 `6 B/ e* y
vItem.dwItemId = pItemElem->m_dwItemId;4 s& }7 t& M3 S% e8 T+ e3 a' p5 f
vItem.nIndex = i;; E5 l4 R2 }8 ^) H1 A
}
+ B; K( y1 H* [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 s" a# x4 w1 n4 M; G& X( Y; N
}# \" J; Z; f/ i8 _# A7 c
//////////////////////////////////////////////////////////////////////////$ P- R$ G: t _6 B7 @( s# R
sort(vItem.begin(),vItem.end());//排序
- ~- f) S- E ]4 r3 I7 f, ^. p N //////////////////////////////////////////////////////////////////////////
# Q: y" g( i" o( Y //交换
% @) ~! @( R& T [ for (size_t i=0;i<vItem.size();i++)
& _/ R' S8 X2 ~2 @ W6 C8 U. L {4 R3 V5 @% x5 G" k ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 [; X9 Q( ^5 p$ Y1 m; _2 ?
pInvSort->Add(vItem.nIndex);
- Z5 [! a y: w0 c8 E1 Y }
8 y; m6 `4 v1 ^0 x' L BYTE nDestPos = 0;3 x' ?1 y5 _! f
for (int i=0;i<MAX_INVENTORY;i++)# T7 i) |9 N) t6 r7 @: w3 a7 a4 F
{
' @+ R3 N, d2 V2 I4 L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, m z5 F& F* d! _) Y3 ^1 K if (pItemElem)1 z5 Q. U; W3 B2 M/ v1 P
{
) C. b q z; c6 a7 @ if (IsUsingItem(pItemElem))
1 N( X. q* i0 _) U" n {
$ G* P/ f: }& x$ p# ?" n z/ u //这个位置无法放
* ?' p5 n* @8 a$ e6 g( q nDestPos++;
0 @+ b8 V7 Z# a3 X }
" x6 E9 F3 u- }' I5 n }
, `0 X5 L7 K! g" G; z0 R1 d BYTE nSrc = pInvSort->GetItemSrc(i);
: U) v' F! Q O/ x2 F pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# A v" M! G0 u( Y) j4 [
if (pItemElem)
, n9 ^1 _$ h0 X: J5 c4 n8 V {
. E2 ~8 y6 r; h j. ?* s$ a4 T if (IsUsingItem(pItemElem))4 R5 v0 w, Y3 R: \3 a) q2 o
{8 O( T, b5 s5 I7 X
//这个道具无法移动,跳过
4 W( K' f8 |& K5 g continue;/ k# {" i+ e+ W
}8 i6 ]$ X" j: a2 v0 h5 u
}else{
* h: w$ }- Q) f( {6 |3 B //空位置 不用动+ j1 K9 i: u* N* r/ N6 Y- ^' Z
continue;6 O7 }" I5 N3 x# l: W! U/ E
}
( {2 t0 S2 K) P+ Q- ` @# ]; Y //////////////////////////////////////////////////////////////////////////- K# E6 C7 B1 R9 N4 I" u3 R7 @
//开始移动
! t$ V% j' k7 f8 k) Q r if (nSrc == nDestPos)( k; b! e5 z* y$ Z
{4 z& |# g7 v' W
//原地不动
1 \" |0 Z7 P, M* h nDestPos++;2 N8 i& U$ s. P7 X+ f# N
continue;& x( ?1 v8 ^) U; D
}; R9 ?5 p2 k- K0 D, U
pInvSort->MoveItem(i,nDestPos);' R8 i8 c- T2 j8 D+ e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 c) H% N$ R8 D# Y2 F Sleep(5);
4 a( r0 A, x( `6 Y+ Y6 C/ T //Error("移动 - %d->%d",nSrc,nDestPos);
# m' J0 W/ X: x4 R6 s nDestPos++;
0 P# ]% W' i( O( v( X2 u8 G) l }
& C, g+ V8 T9 K; b //取第一个元素的信息
, g9 c/ C0 C) y# \& T /*
5 n y5 [3 g5 x3 ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& U/ w f9 b1 Z- G {
8 P! f! r4 h* p3 C, b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 `9 `& m. `$ ?4 q- [ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ a) m) `( E4 M$ O3 ?* }$ w
}5 ~! P c5 c5 n0 j
*/$ o! x) ~) p5 u4 k9 s. B* v
//////////////////////////////////////////////////////////////////////////) a# B0 ~: N- {* B; y
break;
9 n$ H5 o5 R% ]% b- h4 X9 ^( i }! I+ w; Q. S3 T0 q/ d, r5 n; Z
}
' n& @# j. d# F* j6 ?}
! n1 i- h$ z8 {m_wndMenu.SetVisible(FALSE);
" v/ ^' F @8 Z. W: f6 H
; A+ k& F' u/ H( X--------------------------------------------------------------------------------------------------------" V) H" o6 ?% t4 d8 x' U4 Y# r V4 X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 Q3 K, `+ H. t# G- W. b' E' L
{6 Y6 v5 ?5 W! X' l" A( \
BaseMouseCursor();% j6 }- r3 O4 s" p
}, G# |- E( z! g& e+ B- ]% s A
在其下添加:
4 _7 o* @( z( `/ qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 i8 U8 A# g1 w3 U{. _4 [$ e7 j* \, l
m_wndMenu.DeleteAllMenu();; V1 ]$ S9 j8 R, f; Q
m_wndMenu.CreateMenu(this);
: n9 ]" A- G; y3 i; M2 P* s7 Rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; q& n2 J) V% W% ]5 n# G% L1 Q) b6 r5 B/ Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
u5 j5 M" p' @{% `6 N* _. `. ?, @
//P以上级别才可以删除所有道具0 T: V3 L; w: a* V& C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' b/ p2 c" j3 k/ |6 z! b}$ a" w6 {% P l3 \& t
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 e3 ]) c0 |8 s* F9 s3 ^/ \/ x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 e1 S( T2 `0 ?1 j0 sm_wndMenu.SetFocus();
/ [+ B& B' N6 j}
' s, d& `) Z* f6 z------------------------------------------------------------------------------------------------------------0 Q8 L& c: p# }2 f
*************************: }5 O' p! r" {
WndField.h文件$ X) L0 ~1 _* {# t+ a4 B
*************************
! [: u0 a9 S* {' f; O搜索:BOOL m_bReport;
% b% J a# V; \' C其后添加:0 ~1 x6 t. p0 F* Y( g7 r J
CWndMenu m_wndMenu;
% I& C1 J# r2 K6 c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* f/ y) a# z" G- U其后添加:
6 B2 a; \- E) q% l% Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
) x! K( }# C2 `, I$ h4 A
! J5 `0 j+ W0 `& h
u+ X, J/ o4 j. _2 T. V) A |
|