|
|
源文件中_Interface文件夹下WndField.cpp文件4 n6 @5 T$ _/ W
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 Z* x9 l' r' m5 x) f: ^
@) g& M) ^1 p6 N: O8 t8 k
struct sItem
7 Y, g$ U' Y, a8 y5 P3 q4 d, ?% r{( u7 T9 L( O" D; L D, b
DWORD dwId;8 P) I8 C+ n6 P6 M# }
DWORD dwKind2;2 ]$ Z q) Y1 P: L' v0 l
DWORD dwItemId;
/ H0 o9 Q! r0 n" o2 \- N* ?' Q; B! ?+ CBYTE nIndex;3 S2 j, F2 M+ j) f; w/ n+ a) w$ d
sItem(){' q8 B* R' U E
dwId = dwKind2 = dwItemId = nIndex = 0;3 \4 \) Y! t- o1 E
}& N$ X! L- C$ N! T
bool operator < (const sItem p2); }/ k S! G0 ~ Q
{
1 ^ t" B2 Q3 L1 Q3 F" j; N if (dwKind2 == p2.dwKind2)$ l H- y) r$ _' T( X+ M
{ \- [0 W# g1 d: f1 s
return dwItemId < p2.dwItemId;
9 W2 q3 w2 F3 n }else{
# r1 _0 ?. v4 w7 J return dwKind2 < p2.dwKind2;- g1 D6 x# Z) F3 N! j: U
}
6 L8 a$ N; V% e/ {# C# L- @}
9 K! K. ~# m$ D, n# \4 U5 D' a+ p}; |; l6 k# q0 t& R& X1 \6 o3 | i0 e2 t
class CInventorySort6 K5 o5 j8 L1 S G
{+ Y9 S* J3 d& |6 m4 {- B, d
public:; }" E0 J4 o) m5 a( C
CInventorySort()* |$ A; t j$ f
{" `5 f) C, |8 o. Q; L" Y9 d
m_dwPos = 0;
( [( |/ i2 V$ U5 ?/ k}
$ @3 E% i7 v/ r" N. A- E9 |6 `~CInventorySort(){}
1 h6 H5 r4 g7 |. U/ w9 ~private:
Y+ G$ k% G: j' h+ V4 KsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 ^1 v( B6 t$ W# R$ x
DWORD m_dwPos;8 ^! \# }7 c! q) i. _, Z& E
public:) r5 x! J" x' A' N8 W
void Add(BYTE nIndex)
, n: s1 \7 p) W: r6 q{
; a5 ]" {& k7 r( W if (m_dwPos >= MAX_INVENTORY)2 `& }* @" C( c. g: b7 T
{
4 X1 E2 \9 H4 M- h) }) j) ?8 l return;
7 z$ {2 s8 k! Y, b4 \, c' s9 _ } S4 e4 m8 H: l, z6 v# M2 l
m_Item[m_dwPos].nIndex = nIndex;6 K; ^& B4 ~' D9 h# \! c
m_Item[m_dwPos].dwId = m_dwPos;
1 E: G) e+ v, [ m_dwPos++;
5 D" ]6 g1 r. A# \9 P}, C5 \ w2 ~, c) F5 z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* n) ]' m" r& f" T, g5 U
{% o/ y' e, r! I( [0 f* E6 \' p, B; M
for (int i=0;i<MAX_INVENTORY;i++)# T* s7 e8 K* m/ E% |3 e. C! ?8 \, ]
{$ f2 K9 U, w4 s: q1 k
if (m_Item.dwId == dwId): K Z, R% P! |9 C4 `
{
) A6 P3 Y6 z7 ^' Y b8 _+ ~ return m_Item.nIndex;
1 ?# p: o; o1 ~ }4 e }6 C3 U5 ]1 K$ i, r
}
7 l# h U6 A1 A% u; H return 255;% x' H% U5 T7 y: A7 F( C6 }
}
1 {$ D* p( D3 }& K7 dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" } `( \) M- x4 ~) i. _{
- v6 J* J" k1 ^9 l6 f BYTE nTmp = 0;
* W9 q5 c. A( h* l bool bDest = false,bSrc = false;
5 c4 r ]# u, R& k4 F& B for (int i=0;i<MAX_INVENTORY;i++)
) M( N8 g; n* I5 {5 v {& O6 T% u. E: ^ q9 b2 M0 Y% b2 _2 v8 N
if (dwSrcId == m_Item.dwId)
, ]5 |: L$ i6 ~0 l {# Y% e6 ~/ F7 q& G' d9 v1 u/ \) ]
//id相等 则 改变对应的dest和src, `. U0 t5 p% c8 n) n$ o" w
nTmp = m_Item.nIndex;% I3 B- G) _4 ]2 t( f
m_Item.nIndex = dest;; w4 C. ~: x# q& M, K
}
. ~; ?2 d c+ Z2 ] }, `/ N, z `% d5 @- w9 Q, o
//临时数据保存完毕,交换开始
8 |' g8 t) g: s: G2 K for (int i=0;i<MAX_INVENTORY;i++)
, {5 l: Y+ b5 p% t: F {
x, U2 m; Z9 x. W, Z if (dest == m_Item.nIndex)8 Q$ K' L! e+ E$ G& B# G, ?- Q, B4 d- c
{3 O3 T% Z, w* {- W+ r
//id相等 则 改变对应的dest和src
% e: |9 ^$ i9 T1 h: ~ B. y m_Item.nIndex = nTmp;6 Q& i" n5 Z k
}
' @- ~ s& n! r }
' H. x+ V( I$ y}: k* q) l% k6 a( K9 R c
};
L# ?( {* [) b5 N6 v-------------------------------------------------------------------------
+ b" ^! D% |& M2 i依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& c9 n v6 x" _" T+ ]; y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" X7 ~; c" ~/ B5 }
紧靠其上添加:
v/ I6 r, c; F$ Fif( pWndBase == &m_wndMenu )
7 H# z7 F3 j$ d2 Z3 h{, m7 Y+ H3 S: {- J. u: I
switch( nID )
4 W7 h/ B- H; I4 C" S {
w* C) ~# W% {+ g case 2:4 Z# \/ w# A, B3 }
{
0 D: ?% _+ S! F( ~5 q. ? //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. ~$ x- S! Z5 f: |1 ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 W( m9 w4 L! {
{, s4 j% ]: s9 o6 ^+ j
break;
! x2 z6 \6 @% q7 Y. J2 k3 _. R }/ L" F4 |4 H: w4 \' m) J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, M6 ^0 b) Z2 J: [" K- z( o {
0 _$ f6 F; v3 e- r2 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 H" m* C0 `3 M( z, _
if( !pItemElem )
+ d7 p4 A, f- }8 U! z: J continue;
+ k9 d8 X9 p+ z4 n3 m% @; y if(pItemElem->GetExtra() > 0)
# } Y' v+ c/ b; r7 G continue;
8 Q2 [' K" W% X0 x7 I- N if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' |/ d6 q3 L& X6 B- k
continue;$ o: A# I* R2 }6 G! D
if( g_pPlayer->IsUsing( pItemElem ) )% m6 Z1 e% t3 Z& I! P$ D- k
continue;
9 E: l/ A3 h, F( `5 S if( pItemElem->IsUndestructable() == TRUE ), s% C( H) @8 a, I- d* h
{
3 |, }( V- m/ \0 C) I: B( e5 D g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ T* h6 g. H+ F* |% U continue;0 _" p# R: e% S; ]: m: s' L
}3 M8 A- e; X9 `1 z3 C7 |7 p0 j3 m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! s% l, y. Q$ `& q0 a& v+ t, R
}3 j4 K( e/ w$ G! u" [9 _
break;1 F% p6 z1 F- ?* q
}
3 o: f! _* D1 @8 {$ e( z/ X case 1:
( P# W& y6 i$ e y, |" A {
5 X- d- U9 t$ H! E //整理背包
) [/ n4 X& N: H# k //////////////////////////////////////////////////////////////////////////
9 l/ Q4 L, K8 r% u. S% v$ W5 H Y2 |8 L1 z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 h/ {+ l/ h4 B //////////////////////////////////////////////////////////////////////////
5 Q) p \- E. d% ?6 a/ \ //////////////////////////////////////////////////////////////////////////
( E1 Y; U. \2 I1 A CInventorySort* pInvSort = new CInventorySort;
/ j: b* A) t- U vector <sItem> vItem;
* l$ X5 n* w+ q& u, {0 i% U' N vItem.resize(MAX_INVENTORY);//初始化大小- s) @8 a! j0 j! Q( U) t; n
/////////////////////////////////////////////////////////////////////////// k# O* G" ~$ ?% C; Z- d: z$ V& Y
//填充数据
: p6 o# L+ r+ t4 C& ^$ b. t for (int i=0;i<MAX_INVENTORY;i++)
6 @2 x& ^1 r/ |9 H {* ]; a, _: ~3 m i" u& e0 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ D( f% s- q& M, |7 a if (!pItemElem)
% v: o6 [* E4 A: j7 ?7 T- y0 a {7 Z; I( c- p4 P& H! L1 h$ q5 T
vItem.dwKind2 = 0xffffffff;! W6 N, a1 | a9 z
vItem.dwItemId = 0xffffffff;8 d2 P1 v' p' p- i" d5 ^
vItem.nIndex = i;+ J0 d5 O5 W8 h ^
}else {
r- q( ]' _. x7 ]/ I# y, ~ ItemProp* pProp = pItemElem->GetProp();. I) a0 u9 ?# C& U4 A! z
vItem.dwKind2 = pProp->dwItemKind2;
/ N8 @0 u5 J6 @3 |: \8 T- E& A: v vItem.dwItemId = pItemElem->m_dwItemId;2 B! N9 N6 i" O9 G" h4 e
vItem.nIndex = i;+ V0 ^5 m9 Q, s: X2 f
}
+ q' B+ j0 J! o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 Q; c2 l4 z b9 G% L" s5 k }
, N% }. p: p' Z4 z- r //////////////////////////////////////////////////////////////////////////4 S9 ?' x; B) j
sort(vItem.begin(),vItem.end());//排序
% h2 u: f; Z( ? //////////////////////////////////////////////////////////////////////////( q B- `& I% h' R
//交换7 Q0 h9 E! r( l4 g' Y) D W3 G5 D
for (size_t i=0;i<vItem.size();i++)' j7 W% |- O3 Y
{3 J+ H1 ~- g$ ]+ g6 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 j5 E/ L# s6 ^8 n, Y. P# [ pInvSort->Add(vItem.nIndex);
7 o2 J# e' V( S" S }
^* m P" d( Y9 `. B BYTE nDestPos = 0;
! u8 h5 d; ^' |; B4 {! f for (int i=0;i<MAX_INVENTORY;i++)1 l; E) e" o( f& H$ a
{
. W7 c9 i. h* K/ V/ O/ U M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. O3 p0 h r* U; E* E' Q
if (pItemElem)! Q! W# c* O' {! c& N4 g* g3 g: u
{6 Q$ g+ ^( d" I6 c: M' X ?# g
if (IsUsingItem(pItemElem))
% W1 _5 }6 ^! W" O! P4 ?% g" e; a {- ~# {2 ~: m7 X/ w% j
//这个位置无法放
+ i2 H2 U" q0 p5 r* X! n nDestPos++;. m! G4 f/ ]7 s* E) d$ u
}; h9 ^) B8 q6 @7 y' M0 S8 ]! B1 Z
}$ f1 u* d& N. Y2 _- N3 k
BYTE nSrc = pInvSort->GetItemSrc(i);: ~2 R& K* Y- c3 U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; u. m* H0 d; k# h8 ?6 O# z0 k9 T if (pItemElem)
5 F& Y9 g2 a" c {
3 m$ P2 D% ?1 [/ a+ F: v if (IsUsingItem(pItemElem)); d4 i! y# k G) N5 C9 G) f+ `8 d
{/ m0 a. B- |; p+ y+ E b: H" L
//这个道具无法移动,跳过
4 I9 }) X: p# y continue;
! D. Z7 F3 ^4 u4 N/ h% D" a }
: F9 q# L: d9 V/ J }else{! J8 h! O E" e u2 {- |; U3 z
//空位置 不用动1 M' X# }. Q' x3 t! K" p
continue;6 b3 ^( y; b4 J( O7 J* H- Q
}
& \) [7 w2 B' _9 a //////////////////////////////////////////////////////////////////////////' C* e$ w( L. W D
//开始移动
5 i, U; z5 G% J if (nSrc == nDestPos)# [+ H- m' `) C4 F) n; Q) J, D
{! i8 l' ` Y+ G" w6 F; S3 g3 L
//原地不动
, X1 z7 G# O7 A" |; V nDestPos++;
/ V: Y, P% b" ]) r& a7 P continue;: c. k c& T. X8 T1 i! Z0 J
}) d' ^/ M1 C& z* p. d/ E
pInvSort->MoveItem(i,nDestPos);' ^) v2 i, i7 C+ X) o5 y+ w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 d. Q+ h* p$ c K$ a$ x2 X" [/ T
Sleep(5);. R! i# K3 b" j/ \6 _
//Error("移动 - %d->%d",nSrc,nDestPos);
* U/ H6 j+ ]9 w0 w6 O nDestPos++;
% [% l. |- D V! { }
- S2 W' k: f" r' ~9 w9 O //取第一个元素的信息
# l6 O3 t2 T, _& L0 F7 ]8 m8 v /*
( d# f5 I" _7 q/ ~' ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" M0 w8 E3 {% x. i {
' B& [! t3 G+ U/ |# j% X Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, S S5 U5 h5 k5 \# S; z e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% x6 ~% D; i/ c9 |9 ], I
}& c8 m: |+ T- H: B' F+ c/ Q+ v
*/5 n* I: P3 A# d
//////////////////////////////////////////////////////////////////////////: M, g, O0 a: d, x' n9 w3 p* E
break;
- S5 l: K. X' p* {9 M; n3 m) ^# X" C; L8 \ }8 ?5 C& d( D" i" Q% H
}
" b: [: L- r% \0 r}; W2 L0 {( q! [4 A
m_wndMenu.SetVisible(FALSE);) ^! A# a! ~) Q y# Z) `
5 _, a* ^+ e% w/ F% Y# f) f0 v
--------------------------------------------------------------------------------------------------------! e% ^0 C- w( v7 ]3 B3 @# q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ f) S5 D6 [# C6 P
{
* m }: C5 J: u8 ?" F# e% YBaseMouseCursor();
/ \5 ]% y: b3 B}3 {6 b' r W0 P2 s* c
在其下添加:
- i) _- v8 f% x* Y, v+ kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
Y9 h; `0 w; x/ I) W0 {1 ~8 x/ [{
: p2 U& y. f5 K' K) R! x0 x& D! bm_wndMenu.DeleteAllMenu();1 W2 V* _ k* {8 o. o- K9 u4 Z
m_wndMenu.CreateMenu(this);# B- ~/ w1 L! o2 j% v/ o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& l) I( j) x6 x2 J# ?: c
+ U- t! Y( Z- }# e4 T, r4 U H2 mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). _4 L3 |: P- {/ _) E
{) |" N' A) o- P3 |7 K
//P以上级别才可以删除所有道具
* M) D E- v" x1 ~" s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. `, X* B- ~ u9 u% r5 C}/ w3 q9 E7 A4 D' l# E# `/ `3 K, I& z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& b4 G5 S9 t% `' Um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* o0 z, i$ k2 \# b r, tm_wndMenu.SetFocus();, G5 D7 k6 Y$ x/ d) O/ G2 ` M1 ?
}2 T) l& [$ v1 E7 e
------------------------------------------------------------------------------------------------------------
$ \4 z I- e/ C7 d) P# t7 F+ |*************************# I5 ?4 u0 Z7 m0 C$ K1 q
WndField.h文件* Y+ g" L, K: `# U5 D& j
*************************
# i3 y3 Q- }& j搜索:BOOL m_bReport;) U/ l7 D; c* U' K5 p7 V
其后添加:" Y+ J3 e+ y3 E6 L6 \
CWndMenu m_wndMenu;
: `$ }( {& N. R2 b8 Q. U' t搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 I( k$ M+ {+ U# ^ P
其后添加:
) D/ W+ B* H: D: Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 I1 k0 z+ g3 z& \7 _6 @) B' k: [$ J: O5 Z# o, J( s
1 g% }7 n7 q: N" ]5 D6 k* h |
|