|
|
源文件中_Interface文件夹下WndField.cpp文件9 a! j4 [) I) J
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 ?, ^* ~% Q6 s" q& k3 ?
6 }, t7 l* \2 B- D
struct sItem
# B+ [3 }/ W0 G{
6 d6 f) |2 g) B# pDWORD dwId;: ? {, n: i0 w& V
DWORD dwKind2;
4 l7 E1 }3 k9 ]6 ]DWORD dwItemId;
! {: l6 O+ V" P( jBYTE nIndex;
! w$ J$ l0 o: l# XsItem(){
7 N6 H6 Y. x4 } dwId = dwKind2 = dwItemId = nIndex = 0;+ i$ I9 [! m. D
}
- M a; F1 H1 Z& s6 ~4 {3 Ubool operator < (const sItem p2)* E' d) r/ K: s; J
{4 Z& T5 Z6 {: `+ t
if (dwKind2 == p2.dwKind2)( v; k: \; W1 w! n$ F
{
& w6 i" x# w+ V$ m2 X# k return dwItemId < p2.dwItemId; g( H9 e* [1 ^1 y
}else{: ?* g5 A, _& R9 x/ [$ l
return dwKind2 < p2.dwKind2;
0 |4 b$ S, g. o1 h: R- J7 `! N }
# Y4 z3 s3 e0 `% Q9 P2 t}# G; e! i& O# \1 ?, ^/ Z) Z3 c+ z
};
( }7 [- r8 d4 `class CInventorySort
6 ]) S0 A: S* M' M1 X{
) V9 \$ D# ?8 w" Ypublic:7 Q. R9 ~" _0 i& ]9 R$ i
CInventorySort()- O2 Z3 M; [' q
{
2 Y W4 M0 y& } m_dwPos = 0;, q' s7 ]. e$ C! ~ y( I
}
2 ?% `# i6 x8 D~CInventorySort(){}
1 f( J( q# b5 k% t- C$ l% Bprivate:
2 z$ l! k7 \' J7 l1 R" i) asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- U" h: a6 V2 }1 g! s; r1 `DWORD m_dwPos; C4 R, n6 a) o- {5 N% ^
public:; K) F0 J7 Z& @* `1 t
void Add(BYTE nIndex)
. W+ p: Q) \2 Z{
1 `% h) O( g, B6 e if (m_dwPos >= MAX_INVENTORY)
( f( v" G" f/ x3 z( ?* J {$ I1 W4 y& s; r- D
return;9 _* w2 @' L4 _4 Y' P- W
}
7 D* M* }0 v7 B4 x1 J m_Item[m_dwPos].nIndex = nIndex;
) F! F2 v9 N% A( I! h m_Item[m_dwPos].dwId = m_dwPos;! k9 u/ K7 V- |
m_dwPos++;
; o' O6 v" }, c. k}
) i' q3 W) [6 w3 r5 N: yBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; i% @; L% m. o3 [4 W{, w' v* f5 \; ^+ j" T/ [1 t3 W
for (int i=0;i<MAX_INVENTORY;i++)
3 \' m, [" z% M2 c* K* L2 N F {
2 ^# M# q3 P2 `( f( q% T6 j1 f if (m_Item.dwId == dwId)
" q: w5 r2 _# a0 s& C/ m {) }/ p, A/ [) e
return m_Item.nIndex;
0 l# M5 t+ Z5 G* g& w }
1 z9 K) u9 E! N2 x f }( r9 E! G9 n/ R( A, o) O1 ]
return 255;
8 S' j! w) y T}1 A7 l" B9 ?4 f( ^ C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! k; N/ R+ @( g{8 V8 F+ {" I( n0 G
BYTE nTmp = 0;
# E. I [% \# }* V: W bool bDest = false,bSrc = false;; `- Z" o/ u# i9 ^" ]0 L9 U
for (int i=0;i<MAX_INVENTORY;i++)
% K( i. t5 d f0 R {
6 a2 |* D3 F& @ if (dwSrcId == m_Item.dwId)
7 d1 L9 h- J7 C: t, L* T- I {# a, ^/ P$ t, r3 ^/ e1 ~; `6 Y6 \6 _
//id相等 则 改变对应的dest和src8 ^1 u+ I6 }+ ^
nTmp = m_Item.nIndex;
3 S6 ^+ H( L; E m_Item.nIndex = dest;
1 J- X1 U9 N9 s7 U }9 _$ m# C/ M+ t- s9 M
}
4 k+ ^3 R6 _0 y% x, P7 m //临时数据保存完毕,交换开始$ m$ u& \+ E# _, j$ Z( F/ m( u
for (int i=0;i<MAX_INVENTORY;i++)
9 a2 v$ R4 ? H, g {
( k; N9 q7 z4 U$ a' ~7 _4 o if (dest == m_Item.nIndex)
0 B" w5 a- y! G; T2 k {* b0 Q/ w e4 Z S7 d7 u8 \
//id相等 则 改变对应的dest和src6 N( m* _ {/ d' i3 q6 @5 u9 G
m_Item.nIndex = nTmp;, i+ _+ P$ p& T1 |& G
}- h0 b9 g+ M3 ~. F: i' m
}3 C' F4 \% h1 W, W0 i, }! d3 X+ \
}% y' k4 Z5 i& T$ P+ X4 e# V( ]; c& u
};/ H( j7 T5 I+ m. k
-------------------------------------------------------------------------8 v+ m F; r3 R' c* L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ @. U) {# M0 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; C, [0 Y: h0 P) x+ f紧靠其上添加:& g- T( p4 a, \" \ }+ w0 ^8 ?9 W
if( pWndBase == &m_wndMenu )/ @2 i$ }( V/ K- o, B
{. X8 ~- w. z" y- l- z1 I" ~
switch( nID )
* E& a0 q4 l2 Q {
0 x6 h4 T N2 q1 k9 g case 2:
3 m: R) F; r$ N. z {
- f- v4 l, r, h& e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 m6 l! u! f& i5 {! D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) L' v- |/ u4 [2 v
{
( f* P* r- R5 C break;7 h* U9 K6 u. q$ v4 v5 z/ x4 W% l
}
' b& O$ [ F+ }& t! x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 {) m4 B* c' } {
- }! _. h4 j6 _5 h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 ~4 C! S3 C3 k: z
if( !pItemElem )
! B& P0 C3 b# I; C- J6 Y: ^0 {" } continue;
+ ?0 N4 W: c/ H4 \2 Z6 ^3 t& w if(pItemElem->GetExtra() > 0)
0 \. I$ \3 Y! @0 x& s9 y# o continue;
! W8 c5 c' r& A! h" \ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, o, P. N% T' M, Z b continue;
F( B5 d5 p2 |6 j8 Q5 t if( g_pPlayer->IsUsing( pItemElem ) )# o; w( M2 R1 B `: V
continue;5 E$ B/ [- s2 ^+ g, r% W. }- Z1 M4 N
if( pItemElem->IsUndestructable() == TRUE )
5 {! y- i3 J' ?1 f2 s {
) F% v% B* \% E g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& ?7 j, h2 i" `1 v continue;0 K* N* m! z; M- s: z( b# x- }
}
p7 V' h0 z# \, J3 J% d( h3 B/ R g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) w' b+ y9 p: ^! @8 A }. p" z" N- C- y {: @
break;
/ \- X0 Z7 p6 E% K& ?2 q Z8 P/ A }
7 R9 Y; H6 B$ I case 1:- P5 Z5 Y* J* c
{
# L, G, f# `( A0 r$ d8 p3 s8 l4 r6 C9 r //整理背包
4 R; w5 j, N3 E# ? //////////////////////////////////////////////////////////////////////////" O# L) m5 f M7 m( y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# X& l" c" R4 v% K //////////////////////////////////////////////////////////////////////////& N! C1 p9 y' u9 o. b
//////////////////////////////////////////////////////////////////////////; p1 L( Y6 ]9 M% y: G+ \
CInventorySort* pInvSort = new CInventorySort;% P* o$ g' ^7 W; T
vector <sItem> vItem;
# e& R- [$ t: P vItem.resize(MAX_INVENTORY);//初始化大小8 r6 \; g9 w# Q3 Z+ B0 ?+ e
//////////////////////////////////////////////////////////////////////////
8 T1 j) R ]( I- V //填充数据
( \2 U& ^3 O1 q1 [ for (int i=0;i<MAX_INVENTORY;i++)% L) T: a( S6 T
{$ f/ G# d( e: c% K- V! Z7 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 v6 U& ]# S( L8 z% s& u if (!pItemElem)) M* |. B# U( h/ W; { A4 @: A
{
7 C3 e$ V! n( U5 B3 u/ O9 I- w vItem.dwKind2 = 0xffffffff;0 r4 D; S0 k. m a( x3 T
vItem.dwItemId = 0xffffffff;( b* ^1 J t8 r; D$ U6 |- N
vItem.nIndex = i;
9 ^0 P0 ^& D- b- [, C9 w, E }else {
! C" \' n- X8 ?2 ^. _3 F ItemProp* pProp = pItemElem->GetProp();8 ]3 h/ N' W- x+ }: Q$ ^
vItem.dwKind2 = pProp->dwItemKind2;0 W# V z/ H- t
vItem.dwItemId = pItemElem->m_dwItemId;
7 L7 L: S: J; R; d. i vItem.nIndex = i;
2 g* |: ]5 h$ h7 |* ^ } O }+ o" ]( f8 W9 F1 V E
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ T( D) c1 X4 J
}( y- e. v% B6 A: h% @! Y& |
//////////////////////////////////////////////////////////////////////////- `* R% y0 z: I) D* E5 |' r/ x
sort(vItem.begin(),vItem.end());//排序
) G7 u! F" L6 t //////////////////////////////////////////////////////////////////////////
/ G" ]- U& F6 W; d3 W" ^" s' Z5 s //交换; w) a! Q2 V; d1 W* N
for (size_t i=0;i<vItem.size();i++)) P* C8 I6 ]$ L' Z% [
{
7 h" }3 `, i/ V/ Q& @' G8 B //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 a q8 ^1 P" |% q pInvSort->Add(vItem.nIndex);
* R% _; l" J& b3 F }
$ K. O0 M2 Q+ _; C. X BYTE nDestPos = 0;
5 F9 u% b2 J) J! S# P" v for (int i=0;i<MAX_INVENTORY;i++)
h3 e9 H9 J4 n, @1 E& { Y" u {
5 |0 O8 A8 q2 U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) S [& f4 @% h( G
if (pItemElem), h2 k- {: Q S- \
{
; ^8 m; D9 w+ G+ U4 Y* l if (IsUsingItem(pItemElem))# a# {* \- g) U9 ]2 n$ D8 G1 J
{; o$ n) K: N% i8 X- v' U
//这个位置无法放
( ^3 c6 w1 [& B' ?7 c nDestPos++;+ P$ i8 J S9 i5 D1 Q6 z
}
* w- `0 x8 z5 t% n% I }9 E& b) V/ z/ {9 N2 O5 E/ E, N a
BYTE nSrc = pInvSort->GetItemSrc(i);
h& B( [9 I: { pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' K' C) ?( W7 I1 B1 G: }, y$ E. i
if (pItemElem): |: y' R! T9 M$ x2 W1 Y5 j
{( Z1 }0 ?6 j$ y) f5 G. [3 q
if (IsUsingItem(pItemElem))
: E: {- w' {( b {$ L0 C9 h) ?$ z& Q& n0 U y; L
//这个道具无法移动,跳过
5 N' A, C4 ^5 r2 f# S8 a continue;0 \4 a8 O1 T6 J1 h, C
}8 C9 }; l+ M# c0 Q3 ]
}else{( p' Z+ f3 k5 J2 h
//空位置 不用动6 U) ^+ Q! Z. g8 @
continue;2 N. y* p& L# F* A5 m0 S' V
}
. U8 G, b, P/ r4 z0 ? //////////////////////////////////////////////////////////////////////////
: v$ K2 V; i8 X. V; x% T# L //开始移动- q$ ~- j, W3 Q9 R5 b
if (nSrc == nDestPos)
1 M; h# ]5 Q$ L& V {
' ` L5 |9 A6 Q4 C* j9 h //原地不动& w: S, {0 v7 F9 D
nDestPos++;
^7 Y& v- z9 J/ G7 q& b2 c4 j continue;
2 b6 C0 {, `) H8 q2 ], [/ @' } }( |( ^4 s- A m0 |+ |4 F
pInvSort->MoveItem(i,nDestPos);$ N5 ^$ U* Y0 x$ }5 g7 V: c @
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 x6 p: j, s2 k; K ~ Sleep(5);
) E N$ @; t* p% N7 x8 |8 K3 o //Error("移动 - %d->%d",nSrc,nDestPos);8 M! f+ I1 \3 M* J8 d: e
nDestPos++;0 n& j3 V) u8 \! Y' O
} `9 n! ?4 g% O$ s
//取第一个元素的信息
" ]. ]$ w0 i* ?" v, G3 a/ |( I5 w /*! v7 y2 A; |' ^) [4 k. ]* b: N
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 ]( G' y, a; e+ ^5 b {0 w
{9 P& f7 d5 p, M! R$ d* W
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: N- i5 R! S/ W+ C g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( b* s8 c: J2 i r8 B$ j& v
}
& K; ^' |$ q6 A1 T0 I K */
$ b8 S* d/ L+ A5 E: C. K //////////////////////////////////////////////////////////////////////////. d* a4 [6 q; [# c+ S4 y
break;
# e2 ]" s u& J& v }/ g8 J* {( i/ F
} ) j1 g9 `( k7 J
}
* K7 {, `7 J6 nm_wndMenu.SetVisible(FALSE);
$ u4 s: ~: r' {, t+ @1 I3 G" f: p9 z. c, Y% ]9 v9 K
--------------------------------------------------------------------------------------------------------! d4 `/ U0 l" t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 q1 @* K( \$ o6 h! s; s% a
{
" m1 Q" ~" M+ s# w8 lBaseMouseCursor();
/ c/ [! ]7 g$ {8 J+ v" J}5 h/ U: i! ~ V. _
在其下添加:/ D" C, W8 ]3 L
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ @% ~3 w* V( {% C8 s2 H: \{
! ^( p; p5 `7 j7 S+ A# x' jm_wndMenu.DeleteAllMenu();" [5 }7 c. b5 k3 R2 ?/ |$ a1 q% k _
m_wndMenu.CreateMenu(this);+ _9 o* V1 {+ I$ s8 P9 V2 H8 b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! z7 E. o% l- _5 Y
- B! T& y% A# G. rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& R' E! k1 T; @0 d" F
{
3 F3 C* f$ x; r( n9 C Y //P以上级别才可以删除所有道具
/ h/ u. m) ]0 S+ V/ z* s; A/ F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' H4 s1 e3 M/ T7 N1 u) Q: j6 m
}
) M- [+ g$ e8 H' {- C; {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" Z8 ]! C8 c1 D1 t8 I% z/ b. Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 C( Q r# x" I- O: ?( O6 e* b5 ]' t
m_wndMenu.SetFocus();
- g I+ p/ R4 y* f2 l* ?5 S/ A}2 E; e; W8 _; D% E
------------------------------------------------------------------------------------------------------------
& K2 X6 k; u' m& s4 }$ x*************************
- J+ u! O7 f! X4 U- X1 _; M7 t, YWndField.h文件
0 G S! B7 p% `% u) k5 C*************************
! Y A- C# Y l# ]% R- M; M- Z搜索:BOOL m_bReport;$ P1 H+ E. d3 L/ U( g" }
其后添加:8 L0 n+ }& Y% v0 g( Q
CWndMenu m_wndMenu;
/ h2 `& x& k( E+ r7 s. H6 H搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 |3 J" w: M% t0 h其后添加:" S5 {( {, z& l5 R8 g. l* N
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ z/ J% Q8 Y# T6 y+ p
$ z7 M! d+ T7 E
0 m- C4 C/ @7 o. t- e" c |
|