|
|
源文件中_Interface文件夹下WndField.cpp文件# B4 @0 E$ t% K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: U/ l9 b) |4 M( v' x7 b/ I6 ?( ]
$ o3 P) c) ^% ?: fstruct sItem9 C# D% c' a2 ~( x' L: q
{
6 j% `9 \% h9 }% z/ l# [DWORD dwId;1 ^; ] S3 G; a- ^% A
DWORD dwKind2;# Q9 a, E3 B+ \' y% e# ?
DWORD dwItemId;2 x. m; p' b' B
BYTE nIndex;$ s, O/ \5 C) l& H$ W% e0 b, ]
sItem(){. o$ h; ^ B! @$ f$ B; ?- ^
dwId = dwKind2 = dwItemId = nIndex = 0;/ ~# S/ T! Y' R0 R9 H
}
E0 e9 [/ I) w* L& d: ~bool operator < (const sItem p2), p! t3 i% O+ Z4 I T
{
8 g9 o# e# i% B) S if (dwKind2 == p2.dwKind2)
- K0 j5 y0 P- m+ Z {
' z+ A8 m, a1 h! a( a return dwItemId < p2.dwItemId;
# E! N1 T3 Q% a; _2 k C }else{
5 N4 q' k7 V8 U0 N1 O' u8 d return dwKind2 < p2.dwKind2;
# g+ h0 V% A8 ^+ C }
" D2 K1 V4 n# W' n# M- _}
2 H. t/ k9 X0 x- }; k};
1 e) [( ?8 X* S9 N* o$ C* tclass CInventorySort' w* q0 M0 d- F" O, j
{
. w! n- E7 T3 E1 l+ \public:
9 W8 b9 ^, G) k/ Q- t" h# A! CCInventorySort()
0 C) S. g& [! i* i+ A( J{
( a( b1 [/ e! ^! z- v H! P m_dwPos = 0;
( T+ J1 o3 I: |/ T3 u; I- M( |}
, J7 @+ C+ Y6 b9 }! S1 ^~CInventorySort(){}
! z% T' x+ L& ^/ m l% Tprivate:- L8 k2 f* U1 T( n# b( Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
x3 s) D% s; x' S' C* I( ~' ^. W$ zDWORD m_dwPos;5 t- c e6 [$ u2 s7 X
public:, k3 H) O( n4 a8 r
void Add(BYTE nIndex)! A7 }1 R- b$ R
{: k5 N# H* \ `1 o7 [' y
if (m_dwPos >= MAX_INVENTORY)1 r( s z0 K2 X7 S- d+ o
{
{: F# p t" a8 n/ } return;9 ^" F& X6 L& ]$ ^: y
}
) h3 m9 X* Y( r( M5 l m_Item[m_dwPos].nIndex = nIndex;( n; l- j0 p7 z# g6 }2 W6 q
m_Item[m_dwPos].dwId = m_dwPos;
2 S \) z/ f' b9 z m_dwPos++;+ l; N1 W+ e- ]8 {9 ?
}
. H9 Y8 c+ }! {. P3 e9 tBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 |( j Y6 n; n r1 N. P{
. ?$ t: w$ U' m* D6 F for (int i=0;i<MAX_INVENTORY;i++)
& y4 L, c! _; c9 d [ {
m$ w% E, m& V/ U! I0 [ if (m_Item.dwId == dwId)
2 x8 B+ c1 [* p$ ?0 M1 ]" ? {
# e8 @' P# J' t/ i! ^ return m_Item.nIndex;% f) V( [2 n! s4 \9 y, o) S
}
2 w. R" @2 O, k" r! U2 S+ f) z }
- O& A2 S8 e3 |+ K return 255;& \/ v S- @6 g- h. u( ]! P( W6 H
}
; H) B$ z4 N4 U# Q+ K% j1 svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 `8 z1 o) Y% v# K# B
{. ~( @4 C- a. p) |! z
BYTE nTmp = 0;
4 F n) T) f6 \$ o0 l/ D& H bool bDest = false,bSrc = false;; {6 U: \. v# \# Q/ D0 ^
for (int i=0;i<MAX_INVENTORY;i++)3 q3 l4 S; g% V) M T
{
! ?. T/ x; T# t6 ~- Y if (dwSrcId == m_Item.dwId)7 q2 Y- w" L/ P0 o$ M, O
{, p& w) d& B7 k' i+ l9 W3 J
//id相等 则 改变对应的dest和src8 S, {& n r- A- t. C9 o2 W
nTmp = m_Item.nIndex;
5 c7 O& E/ ?9 {$ t m_Item.nIndex = dest;8 [+ Z* A/ l# O. @ H+ }. J. x
}
4 i3 U6 u. e: O/ m5 S0 ~" g- E- _ }5 T' G0 c0 c2 U
//临时数据保存完毕,交换开始- {0 |7 b* l2 ~$ u+ m
for (int i=0;i<MAX_INVENTORY;i++)
) _3 A y5 G( @( l) D; L% s {8 X6 G% j) t* `, d
if (dest == m_Item.nIndex)0 }4 h- {, V2 \2 R [
{$ r R% i) G3 Q3 N8 ^7 r" s# k1 T
//id相等 则 改变对应的dest和src
( G; E' j0 Y0 o m_Item.nIndex = nTmp;
0 E+ I) c2 X1 g2 H" d }
6 Y0 p1 K }3 w5 a }
) E7 w0 ^& V3 s. v8 w' t}! z$ O; @3 D6 S
};0 K. _& m1 Y2 e v( Y
-------------------------------------------------------------------------# M# d' L$ ]' W, U+ W
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 U' }, K5 B z% x6 F( t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 L! _5 s3 l( B紧靠其上添加:2 Z" L# v* K+ y6 M3 I
if( pWndBase == &m_wndMenu )
S3 m! C; F- F) d/ ?$ G{
+ G3 b' b9 ~; M, m( t3 L* K t: R6 u switch( nID )7 ]( v7 E6 `, }. T% ?4 R) h; ~7 o
{, d1 H% \4 f) u( U* i
case 2:
& j; _( w+ g, d* H+ m' ^; U {' U. y6 @" K2 H& [$ Q" V4 [
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! W3 U. t0 C& D" [) ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 b6 T7 {# ]: W* a
{
5 B, k5 M- e4 p" l& s( ^ break;) q4 \3 B: T- P4 ~3 _
}) G- w- F! C- G2 t Q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* \3 f' I# B' F' e+ R {
6 m0 B' b8 `) x$ T, {7 T5 O6 ]. F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 W! s0 m( M @- z# @" q0 m9 e) k if( !pItemElem )
2 E# e% u: \* W _ ` continue;& J3 g. U, H9 U4 y9 @
if(pItemElem->GetExtra() > 0)
, N% {, Z% J. c4 Z$ [ continue;0 Z! k. Q7 e/ o. L# r* {8 c, B
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! v+ a g- B! p$ Z% i
continue;8 y3 Q0 X5 C& c; n3 {. ?, z
if( g_pPlayer->IsUsing( pItemElem ) )
: H }5 b" H4 O2 D4 z( a, c continue;) F/ Q0 H5 u" C& b$ |) F6 ]% j
if( pItemElem->IsUndestructable() == TRUE )
1 J. z8 Y8 V" V/ F; Q4 c {7 @, ]0 J+ S. B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 n- F- G, M5 v4 y3 c7 Z continue;
2 c8 ~; c J2 _) ?* D6 y }4 y$ Q$ Z( Z, K/ g$ o( }* w7 g
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" U7 O/ m5 [$ K5 k/ M }
: a2 o$ E% W' R o# y5 }( U5 b: J. G break;! z# r2 c5 w! Z- ]8 ~! g
}! |1 F0 W2 B+ d+ i W# w
case 1:4 k. B, R! u* E3 R, B
{& {- i6 f* j2 t7 I4 F6 ]
//整理背包; F2 p6 c6 D9 ]# v' U5 `" U
//////////////////////////////////////////////////////////////////////////
# w ?$ w& B4 I" t( @% X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. G+ d* `$ L3 L% N2 h8 E0 v
//////////////////////////////////////////////////////////////////////////% o6 t; _6 P) F3 O( u
//////////////////////////////////////////////////////////////////////////
* f' _3 I! J" F* {: L CInventorySort* pInvSort = new CInventorySort;2 |: x- f; M8 U U0 P) W
vector <sItem> vItem;6 o+ b9 i$ |7 Y7 i' [- \; [, n
vItem.resize(MAX_INVENTORY);//初始化大小
$ k! E! t* n6 ]- W2 Q9 Q/ \ M* s$ o //////////////////////////////////////////////////////////////////////////
* x) q( h' q" \! I //填充数据
5 x8 A. r- E& h for (int i=0;i<MAX_INVENTORY;i++)
' ~. E7 {0 [$ H. M# h! `. D# b {0 a( `8 L% z. K2 F N- h' Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 I/ u, K- I& q" S
if (!pItemElem)$ p/ F' E/ A& f: n$ K8 `
{
y a! q3 H$ {0 Z9 _- u vItem.dwKind2 = 0xffffffff;
O& b6 Y3 h5 q; J* a' ? n+ O6 X vItem.dwItemId = 0xffffffff;
5 N% E. t+ w7 N: e7 c% ]: C" f vItem.nIndex = i;
- E' h# E# d9 k4 W! }: O$ P5 J }else {
5 W" {& t7 [& a J6 J" a% L3 J ItemProp* pProp = pItemElem->GetProp();
5 Y: @% d d- |# b vItem.dwKind2 = pProp->dwItemKind2;! t# c( s/ s& t& A+ g% P
vItem.dwItemId = pItemElem->m_dwItemId;
( k6 b9 c/ Z1 @ vItem.nIndex = i;: ~, h7 i2 {, q6 P' v2 Y2 m: a7 D% `
}7 u$ C/ K! R8 n4 O, m5 U' J% W; O) Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* P: m4 I/ H3 j3 K# u& {# A" K
}
) p; L6 ?9 j! g* h //////////////////////////////////////////////////////////////////////////' `' c+ Q) U( Z" }2 D t
sort(vItem.begin(),vItem.end());//排序" V/ `% p6 X! ], c( y; {
//////////////////////////////////////////////////////////////////////////
7 W1 B5 q+ [4 H- v* I+ v //交换9 |6 ~# D Y, e( t/ _
for (size_t i=0;i<vItem.size();i++)
1 U! @% ?) H( K) j# e# ]& Z {& X- B9 B' S2 L6 f: E6 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" z* F2 ~$ r {. m- N$ U
pInvSort->Add(vItem.nIndex);
- C0 G" l, `! U9 C" } }
7 Z, ?6 l- l3 p7 u BYTE nDestPos = 0;
9 z {4 S( w/ ^- W: D for (int i=0;i<MAX_INVENTORY;i++)/ q7 D" p- `9 e) J0 X. Q
{
2 o) D/ F4 U5 ]5 ~4 I8 x7 N, W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" B+ g7 w9 ^$ e3 g+ P. u$ e5 V) |
if (pItemElem)
: K: z K! [) C2 C: l {
$ q5 X3 R2 Q) z q# M if (IsUsingItem(pItemElem))
( A# T3 V$ W* a& Q( ?# s7 H {
9 a0 M0 ~ X1 y# G. x5 \ //这个位置无法放
& d! V: h! i$ l) F& H nDestPos++;
5 Z5 ~3 l# ?7 O, V }6 Y/ D' {) g7 r; `
}
% o' B: L; U$ }$ h% \ BYTE nSrc = pInvSort->GetItemSrc(i);
0 q' c' p; ?3 |0 s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 ^8 @4 Z# d* D8 I0 F9 D# P9 Z4 T6 x
if (pItemElem)9 E2 K. Q5 q% F: P& K# f) T1 ]/ {
{
$ j) }. W) C& c" |3 C+ O! t$ o if (IsUsingItem(pItemElem))% @' R6 Y5 Y, u4 y% _0 u# B
{
$ A5 K5 z- _/ B! b$ F% k8 a# Y //这个道具无法移动,跳过
+ M% f- _4 J, p- w/ ~# v) I continue;, N! J2 e3 q! e: [# Y
}3 Y8 y, e; p8 x4 Y: y. D }7 I+ V
}else{- t. M. d1 e. e9 _1 y, R8 J
//空位置 不用动& s% x, r1 E& [9 C/ T
continue;
& t. M6 A R c5 q* p* C& J- r2 Q }2 C3 i& J1 K r* e
//////////////////////////////////////////////////////////////////////////
8 l, m% t3 V3 w4 t' | //开始移动- Q8 `1 s: n5 v7 Z5 k
if (nSrc == nDestPos)- m! ?! f8 v: J
{1 i: Q. W8 T$ I! D& J6 o4 E
//原地不动
+ k: Z {/ z+ ?: I nDestPos++;7 ]3 m/ _" q' j
continue;, ]+ B% `( g; ^( ~1 T' `# m7 e
}: r2 U( s5 B2 b7 J9 P! Z
pInvSort->MoveItem(i,nDestPos);1 A3 b6 r& k! g) R7 j4 A& O
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 Z* I# g' U6 H& }% S- C Sleep(5);7 w! S3 n1 D; k/ o
//Error("移动 - %d->%d",nSrc,nDestPos);
9 j+ O% z0 M T3 C3 Y nDestPos++;5 q- f' c3 k4 [2 |1 ]
}
- O# J- |+ l% b# V //取第一个元素的信息
7 H Z+ s, \9 q9 i& w /*+ r0 I7 @" r- c3 G% B! ^5 O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 ~3 D2 j4 P# Y" i; ~6 j2 @! p
{+ a% b( z- V( ~) ]" l
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 ]8 z! d/ Y+ L2 n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% ?$ Q4 t% b% v9 P9 W' B
}
1 W3 b8 I1 L/ h6 n */
* q/ J o9 n" x //////////////////////////////////////////////////////////////////////////
& K& P( |8 c/ o' k break;/ W8 V2 C% w; W' G1 f( b
}/ m7 e& d# P. p- l* Z7 x5 S
}
9 t+ L: r9 m1 S; V, _9 C0 _}
: I$ I6 n" H& |- am_wndMenu.SetVisible(FALSE);
- R0 ?3 {2 I% Y1 G y0 C% O w% {
0 G) A( X$ H) J9 Y E, L--------------------------------------------------------------------------------------------------------
6 e* e* J: m% G3 V C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: F' l. h8 u( }. f{% o; r, V0 Q, e9 C
BaseMouseCursor();7 u9 t9 k& L3 o% S# G' `' Z
}2 G, a) \. _; ^9 ]
在其下添加:
- I6 A9 W; O/ H! B' pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 O% B9 Y4 H9 i8 [3 Y( L8 J
{
, l2 t* o8 c& dm_wndMenu.DeleteAllMenu();# W3 c5 F4 q% i5 \! X
m_wndMenu.CreateMenu(this);
1 ], F r/ K" G0 @, n( sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ O$ \' F! H Z, P, @
( s- ]/ Z1 G* d9 R; nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- R5 o% z7 t" l7 U2 M' M4 p1 c7 X
{1 y. A% n P* ^1 f" D
//P以上级别才可以删除所有道具# ~" V3 T; k* }. z5 @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 C8 y' E4 H3 G/ n1 A3 r
}7 s# a7 |9 x' \0 [: R F; U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 R! f, N) i6 r/ C/ ]% \7 ^m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' D3 b4 h! d3 C+ ^8 |m_wndMenu.SetFocus();
7 b6 q5 M4 g- `. {}% W- O1 r6 |/ K! X( b
------------------------------------------------------------------------------------------------------------
$ J. f5 M- u0 i*************************
: T& P5 g* z5 J! i$ lWndField.h文件. v1 C/ M) W6 | |( N: z
*************************
$ k( l1 N6 G/ R2 k) Y5 y搜索:BOOL m_bReport;, q0 l' F# `, Q
其后添加:3 o2 J9 F9 [# Q9 U) b: \
CWndMenu m_wndMenu;
% z1 L# q O( k* B$ U" }, L, p: K+ f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- W% g. R; @0 R' p
其后添加:
6 Q/ e, g2 r( Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 O# K2 {. j8 c
6 y' _" q" s5 i* c8 d6 o O% S; I8 q
|
|