|
|
源文件中_Interface文件夹下WndField.cpp文件
% y. i( l5 V! k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& D" A+ T4 P8 q0 y4 x/ _2 V0 D- S: B3 g
struct sItem( H; s3 [0 R: [0 s$ M/ M7 Y
{
1 [0 T, l M* F9 s$ yDWORD dwId;
* ^7 B+ X5 f+ x# l1 V* TDWORD dwKind2;9 J6 t, _$ N7 y/ c) [$ m0 w
DWORD dwItemId;
" [1 `: n E$ e( D/ L! CBYTE nIndex;
& r3 I1 O. h9 K, H' rsItem(){
5 C7 {# I5 N5 x+ y1 | dwId = dwKind2 = dwItemId = nIndex = 0;
$ E5 T a/ j2 a6 b* V- |+ A4 V}
1 J8 v& ^' C1 {4 R! {/ `bool operator < (const sItem p2)
0 z7 ~& q2 l$ G1 ^8 o' k/ e{9 g- X+ @7 d8 h8 b: e
if (dwKind2 == p2.dwKind2)1 f O$ I4 u# E
{
3 g" o ?0 y& ^; ?; w! g4 v return dwItemId < p2.dwItemId;% d7 x+ p+ B; R5 W- ^
}else{
5 o! s" R/ {% W. j1 S8 H return dwKind2 < p2.dwKind2;9 L9 P ]' U4 i; |; i" {0 t" `& z
}; \- ~- }/ m- n# W- Q: G2 x8 s
}& [3 R8 o" }0 l- P$ Z
};" B4 `. r. q: d! J- M- y
class CInventorySort1 x0 \, R5 J0 C2 U& U0 C r
{
; `7 |6 s, U% J, E& ^; t# |3 fpublic:6 R, w8 ]) o( g F9 q
CInventorySort()0 ?. I0 H4 d+ L/ }, g
{7 D. d% l/ K% i5 \" j
m_dwPos = 0;- f* L! o$ q. F0 p7 x
}4 L2 q( l/ I% p$ |2 w
~CInventorySort(){}
3 o( e( J# T7 c) O2 kprivate:' ]6 k" @ ]/ I4 x+ Z/ O
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* G7 G' t/ G0 k6 L9 g
DWORD m_dwPos;8 B9 J- ]' z; G2 H: ?/ G3 _
public:1 o% i: i. n0 ^& j
void Add(BYTE nIndex)
0 c/ G5 o/ p% P# [{
* K! ]; _8 e0 i: `- g2 J if (m_dwPos >= MAX_INVENTORY)
$ z T7 o: \ e3 X9 H- k- v# k% S4 l {
9 @: V5 L8 O# Q0 } return;$ k" P1 A' r( _, s% k
}
, | D3 t3 |5 }- Q: U m_Item[m_dwPos].nIndex = nIndex;
$ K- T! Z! J# M2 `7 \ m_Item[m_dwPos].dwId = m_dwPos;
! Q! ^+ G) [ o+ y9 ~: } m_dwPos++;
3 c9 H$ }( H9 h+ n1 m/ V}8 P) ~' y8 [+ g8 d: w$ Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& Y& ~3 p# r) s, ^' Z
{
0 r4 {; V$ p; W2 x8 c for (int i=0;i<MAX_INVENTORY;i++)
' u- ]" \+ n" y6 ^ {
' Q0 {- |: q; ~3 a: d if (m_Item.dwId == dwId)' g8 H* E! v. t$ c- t# q0 j
{
" x$ b8 a" a5 j5 S8 I return m_Item.nIndex;
8 W \6 H* G- _% O7 I }+ |2 v2 U2 u4 Z2 K; a" g m# N
}# F& ^% J4 U5 w
return 255;0 S3 Y0 @ v; P- D) I: }2 z4 {
}, h- \6 }, h; `0 ~" H8 k1 c
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! f1 W/ g( f% c" e
{
0 f' A' r1 B( Y5 X1 O BYTE nTmp = 0;. s5 N. \6 ?$ l% {2 a7 z8 x$ G+ v
bool bDest = false,bSrc = false;/ U$ \" q) ~* @6 [
for (int i=0;i<MAX_INVENTORY;i++)( A/ ?- ^4 \9 m1 ]: @2 Q
{6 w, Y) f+ m" k5 q' K! Y
if (dwSrcId == m_Item.dwId)0 j1 k8 ]. Z2 t
{
3 Q( a7 W, u: a- F9 U* ^ //id相等 则 改变对应的dest和src- q+ K1 `, F9 ?. o) _7 q
nTmp = m_Item.nIndex;
, M3 B& L+ @& x( H* H. U3 f m_Item.nIndex = dest;
( w G7 W) [9 F3 W5 t7 @: X- R }4 r3 s) l# C$ a
}& m9 q* f, o9 E
//临时数据保存完毕,交换开始
. {1 g6 r* ^; V& E' Z ] for (int i=0;i<MAX_INVENTORY;i++)/ @; B+ \1 x1 B' T' o* Q
{ u& o8 V8 ], i, ~
if (dest == m_Item.nIndex)9 N' i4 Q" |! o$ N# C2 u* F% e8 U. {
{ }' m* b8 I9 n8 y2 f- U
//id相等 则 改变对应的dest和src
8 {7 w6 R; R1 U. F5 A% ]9 |4 _ m_Item.nIndex = nTmp;5 N- ^* H0 E& M6 z
}
; t: T# E5 x7 ?, x" z+ s+ t) F }
& G: e8 A+ P! p' ]2 z}
7 {# v& B3 n& g( h};. z! o) K" E1 Q z( `
-------------------------------------------------------------------------4 j2 _( t& v5 o3 d6 }/ E, H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, ]1 x% b/ H$ Y3 G* j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 N: C: t5 Z% k( R+ q1 b/ G e
紧靠其上添加:% x6 u& a4 P6 [4 b" k) U
if( pWndBase == &m_wndMenu )
2 o# T5 c' S+ Z{2 w) S6 f9 s: ~, W
switch( nID )
6 J( B. E z0 A0 ~+ l9 m# N+ @ {4 |6 n: [0 s/ b9 x
case 2:- ?& b8 O5 ^- T1 \9 [
{! t6 p+ e6 v9 u9 J( t7 x. u
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, z1 q0 c& ]/ p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ e, ^4 ~4 I0 m* l4 m5 x
{
5 r. M' u0 @! f2 j break;: @$ F- b x4 @- z
}
4 X+ k( g. J: h3 U4 h- p& r6 ]- L) I3 M4 h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- N! o( y: r; [
{2 F1 R5 B B/ m' Q" ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: N' A0 E& F7 t# Y
if( !pItemElem )
$ S9 ^$ L2 c/ k2 y0 V" r continue;7 G! L/ j( ^( f7 W; _6 W
if(pItemElem->GetExtra() > 0)
6 B; |2 C, ~' F1 @ continue;8 ]& \! e, L! Z* K
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 n7 l( j: M; J2 P z$ w/ E7 k! [ continue;, T+ {, T) _2 b
if( g_pPlayer->IsUsing( pItemElem ) ) ^# Z7 \4 ]/ h) M3 \! ?+ j* X
continue;
: I1 Y' y1 g5 w! b if( pItemElem->IsUndestructable() == TRUE )
+ m: O8 C0 d# f {
5 f0 S) c1 z/ A# @9 R: U7 f g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- x' S% N$ l6 z, K# p! H& A7 m- { continue;
+ u. G& Z/ i! z" t( x6 _* ~# @2 W }: v+ h( G9 K, L# i
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 W$ c+ @# i$ F }
, Z1 i" h. Q! D$ G' J3 v7 ^: H break;
+ Q: Z# v& N2 c }0 q6 v4 k& b& ^/ c# s
case 1:) f6 V. ~- e V6 e$ ]" u
{
. N+ H. ~5 B0 [ h; u //整理背包3 z; s+ k, K- n% L3 ^% g/ ~. a
//////////////////////////////////////////////////////////////////////////
: l% u4 G0 ?6 W8 s( W3 | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& }( \& Z6 @5 c4 q; d& F) R7 o
//////////////////////////////////////////////////////////////////////////
% L% V0 K( x: U* |- c1 t: X //////////////////////////////////////////////////////////////////////////
" H, D2 T2 \5 @# z- { CInventorySort* pInvSort = new CInventorySort;+ X* \( i5 ^' P* Z* U
vector <sItem> vItem;
, a8 l) Y8 _6 S, J vItem.resize(MAX_INVENTORY);//初始化大小
1 P. O/ S' I& _5 k0 Y3 a //////////////////////////////////////////////////////////////////////////" J) ^1 h: k9 B8 C: b7 d
//填充数据1 K& G% j- g9 H4 o
for (int i=0;i<MAX_INVENTORY;i++)/ @3 p' z/ s6 A. N% A- |$ K
{- r% T, S. t( I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 Y6 }# _- d* R; a if (!pItemElem)# E' l* ]3 U5 P% F
{1 U m/ {8 O+ }" \
vItem.dwKind2 = 0xffffffff;8 m6 Y1 U9 w) r+ C7 m: J# G- U
vItem.dwItemId = 0xffffffff;, @# ]: U& E% ?# u# K
vItem.nIndex = i;
: g R8 x. X1 p" x$ v8 x7 r }else {
7 }8 Z: ^+ L, o6 @. `, B ItemProp* pProp = pItemElem->GetProp();
8 d/ E" L) T- k7 C- V vItem.dwKind2 = pProp->dwItemKind2;
3 i9 p3 h! `1 r; H& i vItem.dwItemId = pItemElem->m_dwItemId;4 `! _3 l; K0 E7 g% B7 g0 C! R
vItem.nIndex = i;% `* I0 T( i6 j4 \
}
* q8 e, Q: H- {5 C) ]4 F: J9 K) l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. I( e) C3 p8 d3 ?9 [# s }
4 t$ s6 D$ x1 Y2 c# l% ~ ` //////////////////////////////////////////////////////////////////////////- n0 l. t+ u1 ?: \
sort(vItem.begin(),vItem.end());//排序
0 E" l* K/ \9 K9 ~ //////////////////////////////////////////////////////////////////////////# t$ J3 N/ D& C3 D( s: [) A
//交换
3 P. H. |$ \: g% J3 B5 m/ L for (size_t i=0;i<vItem.size();i++) m/ \% g! A' X' S: B6 C# [
{- c' E7 h: A+ P! b
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) ]$ q% [" W* A, y" L' H
pInvSort->Add(vItem.nIndex);
% \; a, z( k2 [/ n* }" w) {0 d }- d: v4 L. _$ W$ q3 r( }; _
BYTE nDestPos = 0;. v- n* [& s3 G9 [+ V
for (int i=0;i<MAX_INVENTORY;i++)6 @* I/ {/ Y3 |/ ~4 [9 Z% S2 k" \
{" `! V% _ `$ i p) T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' u9 y% w3 ~8 i) u* ?8 t, ^
if (pItemElem)
9 w5 b- l7 E j. m" U { ?- d0 K9 s) ]4 v" w$ L
if (IsUsingItem(pItemElem))$ d/ Y% g7 c7 D( q
{* |( U% a( f$ _7 h9 n- d( R
//这个位置无法放
0 H% M; b9 M0 L' [4 p nDestPos++;
# M4 d5 e) v/ a }- Y# [" u) o6 L0 s9 ^% Z" O9 R
}
! t8 e/ d+ U9 H7 S& w. [, _. H BYTE nSrc = pInvSort->GetItemSrc(i);
$ d4 e1 U3 e! K2 r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. _+ X. ~( `. C
if (pItemElem)
% Q) G* Z& L. z3 L9 O {7 M1 j: E& m- N
if (IsUsingItem(pItemElem))
' T# @9 Z6 W- u) s2 k& D0 |/ E {) X0 ^( u! P) O4 B3 j
//这个道具无法移动,跳过
3 U6 K" h' i' ?+ A continue;* R: N# I0 _) x" n4 w. s' X+ Y
}
0 M3 m4 }# S) I }else{
) E- ]& U' u w' y& }, C //空位置 不用动: C, A5 k' M6 P: V% j) x8 |
continue;7 n5 W0 a9 I; ]0 a7 C; L
}8 N' U5 K- N9 d3 H( F& H7 W
////////////////////////////////////////////////////////////////////////// X# V+ M# O* s
//开始移动 ?) a- b9 V; c1 T9 y9 i
if (nSrc == nDestPos)5 Z) t O6 p. j4 o$ r; C+ s! W
{5 b5 w6 i6 Y! O! P- |# N1 T
//原地不动
/ M' L3 \% ^. _ nDestPos++;0 m3 [6 j8 B* ^; O; q, r$ x, u
continue;4 F: p( Q0 x$ p! L
}9 e N9 {4 J7 W$ ?; }' ]3 V3 z
pInvSort->MoveItem(i,nDestPos);7 k' @+ S% f ?* h8 ^
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 O. q9 v5 Q! h$ @- L! ~ Sleep(5);; n W, J. E# q) t5 d% p0 Z: q
//Error("移动 - %d->%d",nSrc,nDestPos);: k0 X- I* h, j9 p, R9 @
nDestPos++;& `" S8 r+ M r, k
}: B+ G- D( i* |9 `6 D! S
//取第一个元素的信息
& y* ]+ z5 D1 c7 b! ?5 D /** a# ]. w4 R1 Q+ s) Z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) ?+ r* `+ p! S5 k, A
{3 Z H: l0 U8 x" k" e" I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, y: D1 K, M/ l1 e$ } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 P: [. k. }+ K+ o3 Q }8 \" Y) w, z2 i
*/& C: V1 Q/ p8 y& y3 y p
//////////////////////////////////////////////////////////////////////////
2 f' |) V+ E) h- ~ break;
7 V+ I0 n1 R' O }
9 j; W& S2 g" x } / P6 z; l$ _! d' g+ l. k3 z3 e& \2 ~
}2 B9 ?/ t& ?9 p! y6 S9 q$ [- r5 L
m_wndMenu.SetVisible(FALSE);
# }: L: s9 A7 K0 d: m0 a8 ^& H7 L7 I: N2 `8 N2 k
--------------------------------------------------------------------------------------------------------) j! G9 r! B7 Z) E! G, w
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! r0 C' f9 ]/ q t# p{' F" ]; D: N8 ]( u
BaseMouseCursor();: Z/ E" d8 U. X4 N, a K
}
; `3 e2 r2 K7 c) k' {在其下添加:; [& R0 d- |4 j' v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 `% F- ]0 j* Q; h* A% E( S* @" t6 n2 F
{
' O9 Z! p0 g: ]5 ?6 tm_wndMenu.DeleteAllMenu();
: [' J+ a1 S& s x4 o1 Sm_wndMenu.CreateMenu(this); y8 U; _/ V7 J B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, @; S. Z: m7 {7 i
! e1 ^$ a; l* g1 ]+ t6 i- t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 J% k: X) G" o4 \! _{9 i. e* s H2 K5 E2 r
//P以上级别才可以删除所有道具 ?! ?( Q @! V3 ?3 W+ w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: \: E) K* x! }' J( g. q$ H
}
K$ G) F v3 m1 _6 Y1 w* j/ W9 nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" D! o4 p& v3 \8 Y" r8 lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 G/ E9 |. x$ O/ ^, {2 jm_wndMenu.SetFocus();
D X }0 U. `1 Q$ }9 g7 h}
& H* `7 J1 c+ D# c( V4 e6 M! p------------------------------------------------------------------------------------------------------------
5 s+ \( ] C# s1 P" P3 ~5 D*************************
1 V- z- ^/ |# J9 sWndField.h文件$ R4 {5 r5 g( X( i# {/ L9 |
*************************' q: f+ O% k b0 e5 t1 |! G) A
搜索:BOOL m_bReport;1 _9 m7 M/ e. m$ ~
其后添加:
/ K E0 @6 m" p$ Q$ ]CWndMenu m_wndMenu;
: d k) _; G( o- J( L搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 L g! y! n7 o$ ~- f8 X' k其后添加:4 b: b0 M& a u' R
virtual void OnRButtonUp(UINT nFlags, CPoint point);, B0 u% }0 l' I6 H% _0 W
' _' O# i) v. F
9 O9 F( j/ Q/ D2 x8 @3 L! d |
|