|
|
源文件中_Interface文件夹下WndField.cpp文件& ^; J% {" y( t. T8 M* v
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# W% i5 A( Q. X
% D3 Z3 w; U0 |, f" Vstruct sItem
! u5 a8 i3 L" P! Q# v$ u, b{8 ?5 K- Z; Y$ b. b: p( F' }- g
DWORD dwId;7 ]" a; j' Z4 D3 m; \% c
DWORD dwKind2;
8 b. w+ L7 U' J: z2 G- Y# \DWORD dwItemId;
, [+ d+ M5 K# ?BYTE nIndex;
. y3 S7 U: c( gsItem(){5 ?1 k( C. X; \' Q% W4 P
dwId = dwKind2 = dwItemId = nIndex = 0;
( O: Y' A: k# M2 ~& h# j. B}' Q5 y/ W: }0 Z
bool operator < (const sItem p2)
4 f) D: k6 u7 R$ L; r6 F{) F' U X4 g6 l1 Z
if (dwKind2 == p2.dwKind2)
5 S" Q2 o5 I/ Z4 b# L3 g- b" b {
9 ?: z, i$ x' ^1 ?4 F6 N return dwItemId < p2.dwItemId;
9 p$ e2 t* ]! k9 p+ ] }else{
7 [8 V3 s7 L! e return dwKind2 < p2.dwKind2;
+ c2 y) H* R* \8 M) K& [, n3 x }4 }# N0 r' ~$ H/ e6 f
}; P9 D% y' y2 G" k+ R) _
};' O% k9 P& `4 t7 a
class CInventorySort
3 T$ ] w/ @( y{" U8 I; R* |8 t* H3 [- t% r
public:$ e: b7 b' q# h4 q
CInventorySort()
9 @% Z$ e. w% A, p{ g/ [0 H6 @; d
m_dwPos = 0;. `/ o' `' V F# T/ n
}
+ n; _. g5 w- v* V( h$ c~CInventorySort(){}
6 F G4 I' U/ T. u A( l- Iprivate: A% C4 ~' d) J2 i' b
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 h% W1 R/ w; [4 p- d/ lDWORD m_dwPos;( h4 B3 |0 B& i6 C/ E) N( V
public:
. K/ o2 [* _0 ^' L/ }; \void Add(BYTE nIndex)
( {- u& j5 z+ f$ b2 _{$ I5 e/ B7 f. |$ j' q; y5 U
if (m_dwPos >= MAX_INVENTORY)
' X9 a" m+ i2 l! A {
6 N) Q2 G6 g: V$ [! N- C- |9 ]4 ] return;
5 r B: H1 o% H: z* ^ }
; g6 |3 }0 ?8 l. A+ ~ m_Item[m_dwPos].nIndex = nIndex;$ S! l/ B% O) i$ O& G
m_Item[m_dwPos].dwId = m_dwPos;: z. y) w0 c' n9 {2 b: Z
m_dwPos++;5 g9 S# ]0 x; w* u
}
0 m: a3 e( }8 S: B, ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 H8 {+ E! y0 l: N) P0 v
{
0 ?5 |" \0 b. U for (int i=0;i<MAX_INVENTORY;i++)% C. U, A5 h% l
{5 S8 h+ [6 ?: j J+ c7 Z
if (m_Item.dwId == dwId)3 d3 W4 n/ `1 U) M# L; H
{: X) ]3 } ~6 L+ D' S
return m_Item.nIndex;9 V0 N% x( m# K$ n: b; b4 C) I4 ]
}+ b/ }, T B1 O8 s. O
}9 |" W& H$ l L
return 255;
, K, H9 J1 j& I$ q$ o}/ j7 P( _, {& V1 ]0 K1 u. ?. l
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' E% w3 i4 ^4 T- t5 i{
5 @1 n. ?+ {6 t1 L4 h1 m BYTE nTmp = 0;
+ `5 p7 }7 h, C( h! r* F bool bDest = false,bSrc = false;
1 {1 G0 ~2 o6 @2 ]3 \9 G8 L# B, l for (int i=0;i<MAX_INVENTORY;i++)& c5 X% Y3 Y* {; X
{* Q* p" ~% @ |9 V8 ]4 q# E( H) m
if (dwSrcId == m_Item.dwId)
; c* }% S( J# C% m2 V( | {: q$ Q& x1 L2 B" `' E. ^8 s
//id相等 则 改变对应的dest和src6 f% I5 }5 ]4 o% v* F
nTmp = m_Item.nIndex;
2 f5 c6 A# R# M+ O m_Item.nIndex = dest;$ n0 L6 o x/ o, K; o) B `1 f& a
}
) g; T8 P: h0 n# k }. K' |! ^& d: u! D( e
//临时数据保存完毕,交换开始
) P# L$ ]! B4 { for (int i=0;i<MAX_INVENTORY;i++). n, {2 B) a) m ^2 Y" e; }4 j8 [. P
{
1 q+ d# Z( }8 q; H" P) e5 c4 w if (dest == m_Item.nIndex)2 ~8 o4 B2 V! E7 d7 s
{9 y1 Y: L7 l) p6 _" ?
//id相等 则 改变对应的dest和src
9 f7 [" m- D; U0 O4 j m_Item.nIndex = nTmp;; N5 | T$ X- F# `
}
+ J4 i c5 X3 d3 Z* R }1 }0 R9 ?* T: q |
}( l3 p' I$ j* ^6 B
};
1 l h9 _ l4 H# k! j) Q-------------------------------------------------------------------------; g& ^, C8 u, `9 V0 Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% ~, e/ H9 j3 `( r7 ^: Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 r h) j8 O7 S, a6 a
紧靠其上添加:
+ [# r1 l8 `3 e8 C3 Sif( pWndBase == &m_wndMenu )* Y% A& B, X. B7 b0 B) n* p$ v
{' f: u: m1 _: e% c6 r
switch( nID )
0 Y& s7 J5 m Q J2 t {( n6 l0 j. u7 Z
case 2:
2 w7 a5 g: N' }2 R4 {$ p% Z {% w! v* k" A! L& [% \) Z7 K
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 @$ J- }! E$ X1 V' N) N7 M3 d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 b- a5 P' ^, x9 G& E1 N {# {+ f1 h' S# G' [3 |# o" t* Y4 y# L
break;$ c/ u" _/ }" }5 m3 g5 K* v
}
, e( w9 _+ m* O# u' c for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& o, |9 ] @' ~7 @) o
{( t/ i0 I& R+ Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 W* p: M/ G# J' B8 [ w& P* r
if( !pItemElem )
7 O3 M& @& y E/ @0 E- @ continue;; a6 F; p& n, M/ R3 |+ j( Z2 Y
if(pItemElem->GetExtra() > 0)" `, u, j, [5 q
continue; v3 V. f0 S1 O8 I8 j7 [1 y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( D( A: o- ?7 @+ X
continue;+ Z6 k+ t) Z- Y" b) Q/ Q8 R
if( g_pPlayer->IsUsing( pItemElem ) )
9 R. t# S) I; }! A1 U X continue;
, W% I E1 j3 D' T4 g% G if( pItemElem->IsUndestructable() == TRUE )+ ?/ e3 f2 [$ G
{
, w6 F4 w& @0 x7 T; j' e g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* T0 p8 ~! r5 Q- }' c# `0 c" _8 m0 c
continue;
d+ g4 [: d3 H, e }& N- z" s' u h4 p, A
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 W9 K1 q9 u4 }: t4 i8 S
}# H8 v& U8 L `7 C( M2 a
break;
9 U) p" J& Y" J* `# i }" [6 \) `" a8 E6 U
case 1:
% k" u; `0 C2 \. v0 i/ A {+ T5 @( [2 r2 h
//整理背包
& e5 s5 ?% g5 q //////////////////////////////////////////////////////////////////////////( M- I1 _/ G% d5 n z4 E
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 x" m8 R, z8 t$ x; Z; {' ?* l
//////////////////////////////////////////////////////////////////////////
, R6 c/ D4 e" Z* I0 L; O //////////////////////////////////////////////////////////////////////////' m( p/ V' W6 _% z" D2 ~
CInventorySort* pInvSort = new CInventorySort;$ e( M9 o/ ?2 ^) S- i
vector <sItem> vItem;% s6 a$ A% V* V! \* z
vItem.resize(MAX_INVENTORY);//初始化大小+ c' t) `$ [" d
//////////////////////////////////////////////////////////////////////////
$ z9 S1 L7 e' N9 D3 P //填充数据
; i, r8 M6 M5 @# [% Y* m for (int i=0;i<MAX_INVENTORY;i++)
+ ~; V* B# i3 _) o2 q {8 Y+ [* i$ T; B7 T9 Q3 Q- @ ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( n$ h0 j; G7 V" f+ q" ]; e0 X" l; W
if (!pItemElem)
0 o( Z2 y, c# _( Q$ R! O- n7 t {0 ~$ H% i0 U& C0 T" M- a5 Z$ K
vItem.dwKind2 = 0xffffffff;! Z( B% K7 o0 @- D
vItem.dwItemId = 0xffffffff;) J: z H7 p# z6 U7 u" g
vItem.nIndex = i;
' n( n) C8 B: F }$ L/ w }else {% E4 P# _8 S8 I. v8 Y$ W$ W. N- `( K
ItemProp* pProp = pItemElem->GetProp();
3 b0 E1 ~* q+ s* T& }9 u9 u vItem.dwKind2 = pProp->dwItemKind2;* P4 x4 n) d, T5 H# e' e
vItem.dwItemId = pItemElem->m_dwItemId;
( K* _, k2 G7 R0 b vItem.nIndex = i;
" R( X" f$ F4 V }& C; c( Z: x( r ~) U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: i+ r: ~/ [6 |4 T1 n9 ]" i }
8 l/ r# p5 K/ D. s2 Y, { //////////////////////////////////////////////////////////////////////////) F& e! s* n4 M1 V% ^
sort(vItem.begin(),vItem.end());//排序
, A7 u" T8 c* N //////////////////////////////////////////////////////////////////////////
+ Z) _( j, s+ |; S9 |8 ~( v //交换
9 J, E) a) A+ x3 x {8 n' z for (size_t i=0;i<vItem.size();i++)
8 S/ |( E* {) Q& d) q" e! Q0 v% t {% Q8 U9 d; P" M! {7 v5 ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ ^# @5 R2 r: d, G
pInvSort->Add(vItem.nIndex);' L3 \+ `0 {# g
}% m. @9 b" Q4 ^( P
BYTE nDestPos = 0;. g& G$ K% N. @. y! R
for (int i=0;i<MAX_INVENTORY;i++)
( a1 H3 `4 ?/ m, i {
7 D6 y9 [- I7 k4 C" d4 h2 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 B, |2 b7 g: S+ r if (pItemElem)3 S {' {! ^+ c- a7 S% O
{ M* r& k3 X' n8 {1 ~! b- G; R. n
if (IsUsingItem(pItemElem)). s" C, p R2 O
{* m: P+ {4 f( B. n/ @- P9 V
//这个位置无法放4 {5 k* P8 H2 s. B5 s& m
nDestPos++;- A4 E0 L, W2 \) L/ @; U+ H9 K3 l, S ]
}
7 P, U% C# k9 b* ]* z }
6 ]) Z6 n+ B& k9 R: F BYTE nSrc = pInvSort->GetItemSrc(i);
9 { l/ h, T6 t pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 v% t0 j3 }! V, I, ]" \) `2 q: J7 ^6 I if (pItemElem)
4 y y! }6 t: z( u {
5 F' G S$ ~9 j( g; A+ N6 O7 D if (IsUsingItem(pItemElem))
% _$ w k3 s/ G, ^8 S& k3 V {$ Z3 E$ S4 w5 l+ O, Q
//这个道具无法移动,跳过4 p4 k1 a- A, j1 H4 t
continue;' T! k* d6 P! \' s6 K- m$ M' v# p8 l
}
2 |- p0 {8 D7 `! r# V2 Z; F/ N4 s }else{1 y* z1 Y1 y+ e5 G# n* e
//空位置 不用动! N# J8 {) j0 T1 n4 E
continue;
1 L1 }$ |) j) M6 }0 G, ~* x }8 x; K" ], s, I0 y
//////////////////////////////////////////////////////////////////////////
2 [$ p1 O/ a& o3 F3 X //开始移动) @, V& Z) P* |6 s0 X- W7 M1 \
if (nSrc == nDestPos)& e% W, G3 _( A+ A
{
) g: R4 g; R- j: ~ @ //原地不动- Q& K9 q. S/ f- Z- w4 @
nDestPos++;
3 n# ]/ w* G, v6 W1 I* T continue;
. I1 q. w; ~# n% A }! E9 G9 Q3 S% f# ?2 P
pInvSort->MoveItem(i,nDestPos);5 m' Y* ^1 |7 l; k
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 [- Z( `: D& |9 l Sleep(5);+ R# @3 J2 D$ y
//Error("移动 - %d->%d",nSrc,nDestPos);, i9 r4 Q4 Z; }" ~, h
nDestPos++;9 U4 f2 W+ _" t* ~
}
! J# U5 G4 N$ R7 W* k: C //取第一个元素的信息$ C7 `+ u7 S' O5 O
/*
& v2 o/ P8 @. q r U. P+ ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! J7 e# n: K. |* h. B( ?
{
7 ^9 m% P/ c* S, Z3 ?( _ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) G9 J7 ?, g1 f9 T. X- q3 |5 x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# f( J" w, A9 t8 @% c
}
8 |: P8 G# [' Z; s7 C9 n */
' Q; p3 K& }/ K; s7 C //////////////////////////////////////////////////////////////////////////4 a4 I# {# d3 o+ W) q& Z
break;
, M$ r0 ]& V" A9 ^( Y- w }$ \7 j$ M$ P# a8 J
} 4 U4 L; b2 i; l8 ^
}
. k9 S7 ?( l( `) \5 X6 _m_wndMenu.SetVisible(FALSE);
2 c$ G, h+ [: J5 ?3 V
4 p4 U: I3 k2 F* _5 G4 z+ E--------------------------------------------------------------------------------------------------------& e1 G0 a4 o. [5 c/ Y1 x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ H4 v7 z+ @0 [$ P( L{
2 h) T) i6 B# R% S8 k' gBaseMouseCursor();
5 z5 x, s9 k& Z$ K}+ R4 L3 `& K" J$ g* {
在其下添加:
" w1 @5 D* Q: d" Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). a2 z3 S- Z2 |
{
4 u( p9 g9 O* _ c3 P* Em_wndMenu.DeleteAllMenu();
6 j3 v1 l/ W' j( S7 s; Z0 hm_wndMenu.CreateMenu(this);
, x5 L7 r! j' G/ | U7 M1 mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 ~' H5 u1 q* J( L
% d- F M6 P o$ ~8 p, f7 n7 m
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% b7 a1 ?$ m8 Q0 o I/ I3 g
{% D1 {4 w7 j8 X* Z" S
//P以上级别才可以删除所有道具
* p- ~+ U/ u2 ?+ Y( B m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. Y8 u r/ Y2 t5 o' J: R: o9 |' \; m}7 m5 n! F g4 S/ B3 t/ C+ C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 }: {5 Z7 |5 V1 U0 Lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 [" v$ Y& {1 F4 ~7 t+ y z3 S3 j/ Qm_wndMenu.SetFocus();# W* w/ N' A0 c
}
- K% J1 U3 B& Y* h# C! M------------------------------------------------------------------------------------------------------------
- r! s9 d$ R. W% P( K8 W d*************************" \( X6 X( E, d
WndField.h文件
6 y* |7 f. g5 Q0 q*************************# r5 A# z) {; T* L" R _5 g
搜索:BOOL m_bReport;
& ~$ o3 |' A# p% X. e2 u其后添加:
5 b5 e: Y. I. I, ]( OCWndMenu m_wndMenu;
* ?7 P) @" ]% C/ K, L6 g& M6 M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. L# `( y, ^! r% Q
其后添加:
. A0 l; m/ t$ k/ ?1 {7 K }virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 g' B& y( z! T/ c* h/ V w) @1 s U
9 b! U8 }* o$ D% u, E- D
- w: q. Q- t/ U, A |
|