|
|
源文件中_Interface文件夹下WndField.cpp文件0 \" y6 c$ D: D0 {/ \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# y% L; K/ p7 @, N0 ?! e* m2 p: Y
1 i& r9 N3 b, J: t& ?( s
struct sItem
/ k8 Y) p3 ^& ]& X{
$ ~ h9 r5 q- _: _DWORD dwId;# H# J" ^4 |5 B2 e1 v0 e/ h
DWORD dwKind2;& U0 g3 D) S: d& `+ E, i
DWORD dwItemId;# q) t0 ?1 e# B- `" g' c1 ^
BYTE nIndex;
e$ P5 w6 u& V4 X& P: QsItem(){
4 a* d5 ?3 ^. C7 n" s% j6 f dwId = dwKind2 = dwItemId = nIndex = 0;' V6 b3 @$ l) p9 z# @3 y
}
9 L( z9 o1 p. }8 ebool operator < (const sItem p2)% t. I" U4 a, t5 E! x1 Y" m9 X
{6 j r" P5 S- ?7 U' O
if (dwKind2 == p2.dwKind2)) t& O* {$ S' M
{0 j- X8 B$ K5 C c. Y* |4 G
return dwItemId < p2.dwItemId;
+ _% V. T0 K* C2 Y1 X# g2 ^ }else{
! g: b. H! M; ` r; ]% C% ~ u return dwKind2 < p2.dwKind2; F C# p# @+ e1 N- m. s# j' \
}
" C) v) {: Q- o; R" y$ S4 J" Y7 I( ~}6 o! |8 f+ u9 `5 C c% I
};
7 S4 q( Q- n0 n$ y8 k8 V- ~class CInventorySort/ Z9 A8 P) E( x, q+ S, N& i
{ L9 s7 v, X) A# g
public:
$ F2 Y2 A+ t! b; N* q) v* iCInventorySort()
( Q: T' ^, q) b+ C5 |/ M4 w4 F* ~{( Y7 k a! `9 `: s5 M1 [
m_dwPos = 0;8 L; j% W& T) ~+ w1 O
}
- k. L5 R* R) v- U# S5 q~CInventorySort(){}
6 _& m' l0 V, L: mprivate:( ]- J+ P* g. C4 f2 K% k' R
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 l9 S. ^8 F" [6 p; Y
DWORD m_dwPos;! X2 M% Y7 P2 U# B. J+ `6 C7 {
public:
3 [5 \& j+ r( u; d* |- Q- \void Add(BYTE nIndex)7 {; m( G9 i" Q4 S. d# b
{
8 ~; E! D/ g b if (m_dwPos >= MAX_INVENTORY)
' e% J8 w1 D2 l& d! s {3 y3 g5 k! [+ J* ?8 L5 Q
return;
% |; P0 }) C5 w" u) X0 ]* l( b }
- N5 h8 T- E: ~2 P5 u# u1 B( T m_Item[m_dwPos].nIndex = nIndex;6 d9 [2 s0 D3 e
m_Item[m_dwPos].dwId = m_dwPos;
L6 z9 I$ ~6 |! B/ T m_dwPos++;- `# C/ B: F' `6 q2 ~
}1 J0 ~6 T* h% P+ b- I# m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 b t% @: M" h; S; x: O- E3 _
{' W& `% M! R1 l* Q" s
for (int i=0;i<MAX_INVENTORY;i++)
2 ^* i, [4 E- G; r1 p0 q$ ^" g {
6 G* D! r+ o8 U# [& R if (m_Item.dwId == dwId)
# c) V) P$ T2 l/ z( ^( h) A% u; M# r9 p {
n5 k$ @& h% e4 G1 S return m_Item.nIndex;0 G( y" @" \& g1 F
}- @( ]3 d# I; ~6 o, T# f: }- ]# G3 _
}! K5 D2 n3 }3 K6 W
return 255; B! ?4 l9 H9 _1 _) U
}
_9 ]0 L% u5 i/ g Avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* M" `+ O* [+ p& Z6 x+ p{3 n$ N4 ]/ a. Z
BYTE nTmp = 0;
8 O1 P" Z2 U& b1 N bool bDest = false,bSrc = false;
1 ^- `' x' E7 G' h9 J( m/ N for (int i=0;i<MAX_INVENTORY;i++)
) f G6 ]! n( X5 G' j- A! Q {
# y, J5 A! h3 r& u if (dwSrcId == m_Item.dwId)! t2 N0 D9 Y8 {# q
{
, t7 i4 k" H0 b" z3 r$ J; h. L //id相等 则 改变对应的dest和src
8 a1 S8 y6 y) X$ L) u: C% Z nTmp = m_Item.nIndex;
, x( s# {7 D5 [1 l m_Item.nIndex = dest;
/ ` \% U0 x6 B2 t }, O& b6 w5 X2 s) y8 y. X2 I0 [% K- f: y
}
. K; |1 Y3 L3 x0 q5 R //临时数据保存完毕,交换开始
3 I3 ^ z3 f- x0 R" Y. I for (int i=0;i<MAX_INVENTORY;i++) f; c" l6 y# A, I) j
{
3 I2 s7 {# E" ~: W. L% p if (dest == m_Item.nIndex)
7 k: ]6 D; C3 ~6 s& X {
/ \ f2 K* E2 T7 l- s* o //id相等 则 改变对应的dest和src
) X9 z( q9 ~0 f& a4 n8 T m_Item.nIndex = nTmp;
3 \) h& g1 x1 j' t e }
) y! W# y2 V! V/ u g }
3 Q# B" E1 f+ _8 A: R1 W/ i& T% X2 a}! w0 A8 P$ u5 y" _/ N, c( J0 d0 V
};" h3 M: `9 R( J T8 \& h! D
-------------------------------------------------------------------------
; ~, Q" A* B, M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): u7 B. w2 a# K, c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ F" F0 }4 b9 q8 D0 p( e! b
紧靠其上添加:
% {: V+ {% w; O; P- yif( pWndBase == &m_wndMenu )9 j# u9 J! s9 d0 p* V# j6 q
{1 j; P6 m( @/ I% q
switch( nID )
* I% v2 Z9 o5 V) Z {
; c) m( P- }6 M7 s) `( z6 t case 2:
1 w+ G; H( H$ y$ s% X {' j. j. e0 e- L3 R; v9 o# L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ {8 k& k( [* [/ z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# z* \* P/ b/ E# K
{
' J( Y; G& {2 _0 I- c break;' [' q2 v% U0 T2 p7 H4 b
}
9 q7 I/ c# a0 X. z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( M& K' q5 R: ^2 C* [; {
{
$ O0 [! U( o$ G0 X( [8 r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* y6 g: q$ X* M- h% C, y) A5 J if( !pItemElem )" L& F( x1 B' o, i
continue;3 W- W! ?" L4 @( w
if(pItemElem->GetExtra() > 0)
# ]0 |0 @$ E% o: S8 }: { continue;
; A: t/ d6 K$ I' I5 a8 U: d d+ b if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & f: d J! U7 t1 w$ T6 D
continue;- p+ j, N1 h* ^8 \/ z+ d8 d# j, L
if( g_pPlayer->IsUsing( pItemElem ) )
$ e9 S; d/ c2 s9 v continue;
- f0 W- | R) H9 R& |6 [5 [- o if( pItemElem->IsUndestructable() == TRUE )
7 J; f! i+ k. X3 E; p {
9 l* j' V! r! |2 ?6 T g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 c: L( b ]9 l% s
continue;! n0 L7 w7 W& G! Q& p, t
}! B! k" Y Z+ d$ m, U
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, D" L; k- O. @0 ? }& X) j$ b3 l$ ]6 y* e; ?& p
break;
3 ]) c0 k/ ^. m( k0 X& ~ }3 g+ h- f0 R! r0 S, L/ S
case 1:' x4 k/ L" M+ s
{
1 V+ q% b: k d6 G0 i //整理背包" G: f: y- ~6 N, N& Q. |; w
//////////////////////////////////////////////////////////////////////////
4 f* V+ z. q; Z3 H+ P7 m# O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ c1 I6 t4 C5 o4 l" ^
//////////////////////////////////////////////////////////////////////////
, n, ]4 u% K/ \8 S //////////////////////////////////////////////////////////////////////////2 D' @" F9 ]+ \( c1 ^( V3 v
CInventorySort* pInvSort = new CInventorySort;
$ I+ M6 V# ^/ ? vector <sItem> vItem;8 i9 Z; I8 a; j7 }# I
vItem.resize(MAX_INVENTORY);//初始化大小9 d# a* {3 A9 U0 _. M
//////////////////////////////////////////////////////////////////////////
) c% p( g+ T; O/ Q! d: h( o/ L //填充数据/ k5 W3 T1 \1 ^6 _# K* B! j
for (int i=0;i<MAX_INVENTORY;i++)6 I m- z8 m0 z7 U* i9 X- T S
{
0 b& r; n! s, h! O( [0 G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 [: ~( g/ }4 {, A- w if (!pItemElem)/ `3 L* o2 R" L' j; |
{
* I- c ]2 l6 L+ [6 ? vItem.dwKind2 = 0xffffffff;
9 A3 |% C4 k4 p- ]5 n U vItem.dwItemId = 0xffffffff;" D+ p8 P' L3 u# D0 V2 d; b5 V
vItem.nIndex = i;
( f" [! s, x/ _+ S, m6 Y! J0 { }else {# ^( c6 O5 w ~' K" v. H- r
ItemProp* pProp = pItemElem->GetProp();4 t: e& T' k7 y7 c
vItem.dwKind2 = pProp->dwItemKind2;
0 ~- B) `* X, N5 j" f) e8 F vItem.dwItemId = pItemElem->m_dwItemId;
2 h. R0 {0 |, [# ]: P vItem.nIndex = i;) ^2 l$ }" r v
}
. D; \0 h2 p9 v- ^. a //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( K0 g$ T* {5 H O" j# E1 b
}+ @# p4 S5 w1 N% x+ `' v
//////////////////////////////////////////////////////////////////////////
- r" }" v9 h+ u sort(vItem.begin(),vItem.end());//排序
& j0 I* O/ r6 X! \/ y9 Q //////////////////////////////////////////////////////////////////////////) y5 H/ ?% l0 ?" Z9 o/ T
//交换, y. M8 G: J5 m" V! O0 l3 _
for (size_t i=0;i<vItem.size();i++)
/ W6 X( E3 G. U {1 A a! \( ~$ s ~2 K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( k* V1 T7 c' { y* d$ }3 g pInvSort->Add(vItem.nIndex);# X, X4 w+ ^: `" N- G# w' O
} S7 z$ W: Y. i; J+ |+ D6 p
BYTE nDestPos = 0;3 V$ @' `2 O9 Z" Z
for (int i=0;i<MAX_INVENTORY;i++)
( w6 K5 M* ]1 a7 R {0 n: x8 b+ I+ O t2 I" T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# m$ D8 n( g: ?/ V( T3 l" B& R" }2 [' u
if (pItemElem)
8 M& P0 g: I) s2 t/ r: r1 L3 K {
* Y% A. n, ]* ]/ ~ if (IsUsingItem(pItemElem))
8 y! Z& D7 w' [" }$ Y! f2 {+ [ {8 q" H! b! P: q
//这个位置无法放; f3 s: a+ w0 R
nDestPos++;2 c, H( b3 t" u: Q% K
}
+ I/ m* u1 O. s1 V& C8 k }
! D, ?0 l }: v* W, F1 W: p# W3 S BYTE nSrc = pInvSort->GetItemSrc(i);
. K6 @" A1 i# C3 @" T) Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" d6 P5 c6 P. s1 d# f1 n! }: o S* H
if (pItemElem)2 d* M: i9 u/ W
{
- @- g. D( {; j8 O if (IsUsingItem(pItemElem))* R- j" P: J4 m/ ^
{
( f$ i2 e* g# U7 T7 \) c //这个道具无法移动,跳过
& T8 ~& `" Y" z" u+ M+ Y continue;
N. X+ r5 L% q$ V" ^9 u" Q }
+ g+ J' k; c! q7 e$ V1 l }else{
2 X$ ^% S3 A8 X: c //空位置 不用动
" p8 \4 J: [/ Y continue;2 }( |8 z9 t0 y9 ]" Y1 ^$ R& X
}
/ T/ I8 p% v8 o" R //////////////////////////////////////////////////////////////////////////
# `1 F. K4 O% u& j) I& K' G+ _; _* x( Y+ ? //开始移动
1 G3 A& X9 @( ]' ^ if (nSrc == nDestPos)- _) |7 R! E5 g+ F1 T' {, ^
{
: p8 F: z& C% b- a. @5 O+ r, g; q" L //原地不动% j. o6 | L# p/ a
nDestPos++;( w" D: x3 A& j6 v; @7 K! A
continue;
4 K1 A4 V7 m+ u2 y }
! G# j1 i0 N& h2 x pInvSort->MoveItem(i,nDestPos);+ t$ a) C- g) c! n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);* Y% {+ O1 L6 ]4 s/ A
Sleep(5);$ _& w4 l/ R4 f
//Error("移动 - %d->%d",nSrc,nDestPos);
* O; V* s& @8 C" Q" \ nDestPos++;) D, k( V2 U. i$ p, P( N# @1 X
}
7 K; f3 L w3 F, Q! M //取第一个元素的信息* N' y( C9 K G. u @: d
/*
, H1 g& `5 s+ C% v8 i& r if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) I8 r* c& k4 H2 w0 b {) N' b7 A x) |9 h9 b( f
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ ^8 ]; S; f" n9 L6 F. B
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ L% r5 G6 e- \0 {9 S; v3 F
}! x, H* g* c- E$ p
*/
; f7 Z0 H4 a, k; u* I //////////////////////////////////////////////////////////////////////////. R0 A q6 r, L3 @) T
break; I5 k8 M) |% b8 N0 b
}* ~ u3 h& n- o+ M$ W7 N
} 7 D2 O2 s2 p+ o' B1 p6 H% s
}
# J+ }: n e. L9 g+ b0 Z# _m_wndMenu.SetVisible(FALSE);/ p& o0 F ?: ?6 J$ i1 T* L
; ?6 o* m1 p' G( Y--------------------------------------------------------------------------------------------------------
2 Q& f( G5 _. p, Z$ d; E9 O+ M搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! K5 O2 s b/ _5 E! p
{2 K8 E* i8 I+ J* w/ }# ~
BaseMouseCursor();
0 J6 Q3 K& u: [+ P4 I2 G}9 m- y6 L% w9 U" w; N. q. a- P( S6 x
在其下添加:
' Q& A9 }. C; H( P$ I, i+ R1 jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 ]" \& U1 z$ w1 ^/ |- I/ l1 t
{. C. l! V& ~) \
m_wndMenu.DeleteAllMenu();- g) Z3 P8 s. [+ }
m_wndMenu.CreateMenu(this);
+ X; g" e/ B8 ~0 rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 Y, Z. E5 Y( h% ~% m5 t9 M
! \' X$ b* F. o- d0 [) O. }/ y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): z' c# P/ A9 v5 h9 _
{
* K0 e) r6 E0 Z+ f H$ e0 ^ //P以上级别才可以删除所有道具
0 v" P" J% N5 j) q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( F% E! b. s6 Q! u" I5 h/ q3 _}4 @ u: T1 q1 d2 L, X0 e1 |6 T7 j
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ J# ?( x1 j+ L; u5 ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; W# c% V) y. |6 K7 m0 um_wndMenu.SetFocus();# x) t2 t) f* _' e7 F( y
}! L: O$ l# p; Z
------------------------------------------------------------------------------------------------------------" c4 R! Z1 L$ Q
************************* ^3 K4 T9 I; ~/ p: {6 p( S
WndField.h文件5 z% ] m% o: U: ^0 ~; e
************************** E" ^: Y8 c1 ]% n% Q: v
搜索:BOOL m_bReport;; }5 K2 H; n1 t* Q
其后添加:, O3 ?/ Q- a6 ]0 [. K- M n
CWndMenu m_wndMenu;0 [( |; k- a* m( R" d6 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 K- q/ q9 Q6 n
其后添加:
/ S4 |$ f9 O1 `$ mvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 a" K: A! \' u/ s' g
+ d+ S- X s: t7 b* `% `$ M6 Y* `8 s6 n: {, _- X
|
|