|
|
源文件中_Interface文件夹下WndField.cpp文件
6 z- S8 l- G0 f" W2 z5 j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 w4 M( p3 W6 j2 `0 A- x
; D7 F/ f0 @/ @0 e- y0 \0 t G/ g* F/ R
struct sItem
7 T ~( R, L7 ?+ ` ~4 }/ a; f{
. B/ o( k+ `$ J* |: ^& B3 Y" x- rDWORD dwId;0 u0 a7 d/ k M$ `# V* x$ q( j
DWORD dwKind2;
& V+ T; \" q9 C- H3 r0 L& _7 P# rDWORD dwItemId;8 x; u$ @) ?0 o9 Z: u8 b
BYTE nIndex;
# h/ g% D7 z( v5 i" b3 @: ysItem(){
- I# \8 h9 j/ B/ X" K7 v1 [' \ dwId = dwKind2 = dwItemId = nIndex = 0;! M: Z% A2 n% B# h) x' f/ m
}
& s2 C, N; _- W8 J) f$ @ \7 ?, kbool operator < (const sItem p2)
# X) Z5 \' a4 d; O8 `{
* Z: u" Y& k" U if (dwKind2 == p2.dwKind2)
3 r+ E3 q7 {" f& A! N) [ { r1 ^1 S( ^# ^3 A, F X' A0 `
return dwItemId < p2.dwItemId;
$ ~1 q3 U5 H* J% y, \7 a" D Y1 e. F }else{
+ [ A/ i$ b8 k5 z, p return dwKind2 < p2.dwKind2;5 h% ~8 ]# G2 q: F# u7 C/ {2 a! c
}
7 U4 D9 d1 \! q5 e}% ~. c: Q' D) Q3 S8 H
};
4 U) M$ n2 R6 \( iclass CInventorySort7 ~, P3 U. i* _3 N, B
{+ A( E+ w4 Z8 Y) b1 i; N
public:
7 M) k1 A0 f$ g, vCInventorySort()
. E6 s" M! ]3 w& E* `; A{" P+ ~1 q L7 R
m_dwPos = 0;
' }( m8 o+ W' b}
1 ?( w* Z+ Z z4 M/ c4 N~CInventorySort(){}$ P4 [( Y2 w9 u( [: Y; t
private:; Z( ~1 I# B3 V3 v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 O+ a0 t# ^: m( B2 U( SDWORD m_dwPos;& N" ?" j7 W3 y" \! I
public:
. [+ P. b1 e7 s& C5 X' avoid Add(BYTE nIndex)
2 R+ `2 @0 A2 N. A4 L% ^{4 i% K7 q6 O/ |9 F. w: t) u
if (m_dwPos >= MAX_INVENTORY)
+ @5 t# b4 ?3 J7 D9 g: i {
& i3 R* \ r: q6 m/ G C7 [0 T/ c return;7 U3 O3 P Q. _: S+ E+ p
}3 ]! l/ f2 f; ]0 Q! l& d
m_Item[m_dwPos].nIndex = nIndex;
! X& n9 n, F$ i( F m_Item[m_dwPos].dwId = m_dwPos;
6 L4 }0 P9 w2 A m_dwPos++;5 U; N/ m: ^! r& x# Z
} | z0 Y! h8 S% g8 G! a( R7 l0 F D6 W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% Q7 B: W) C, t
{' Z7 [9 K6 O5 [9 Y8 ?% _' u
for (int i=0;i<MAX_INVENTORY;i++)
5 b0 |, g; A0 ?. ^" z# a3 q {
8 }' |% y# s$ b& D1 _ if (m_Item.dwId == dwId). J9 j! `" v o. s( f4 E+ p
{
4 G# V5 D @3 M; H2 p) [( V return m_Item.nIndex; o9 |+ I6 b/ C/ o
}! ~" r# w( a5 {" \
}* G9 U8 @5 Q$ I0 r# T
return 255;
- J% r3 P1 ?) {4 o& t3 B, S' @9 q}
( N: t% d4 K$ p, ?/ \& l% g7 Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! R% R/ S, I; ~3 j a5 s{
- A" B7 G& `; Z M1 R b! w% [ BYTE nTmp = 0;: E2 g8 C% P: ?8 f+ [9 L9 L$ e! q
bool bDest = false,bSrc = false;
! ^) l' Q& F- B( T' @9 C8 L for (int i=0;i<MAX_INVENTORY;i++)
4 e, j: u% S$ Y {6 ]2 q3 `; e0 K0 K+ a5 N7 P9 u4 t" X
if (dwSrcId == m_Item.dwId)/ B- {; d& l9 t# s Q3 U3 P7 T
{8 Q2 ` w7 [5 w6 d3 P
//id相等 则 改变对应的dest和src
! Y. z4 K8 M, Z$ V nTmp = m_Item.nIndex;4 }4 o) x9 L1 z9 |6 U5 P% N- g
m_Item.nIndex = dest;
& z+ `0 @& a4 g# C% F( n }# R* ^6 u& c) R# N: v. K# `
}; ?5 P1 ^# x5 n* W8 ]! N5 m
//临时数据保存完毕,交换开始4 d. V9 u+ c; u4 o+ I
for (int i=0;i<MAX_INVENTORY;i++)
8 h0 Z- X8 p( Q* y+ x% T/ @ {3 l) L! n* k5 _6 H* q o
if (dest == m_Item.nIndex)7 V2 x* v# ^5 @$ v |. d) k
{9 L; }2 u+ n& q" n( ~+ ~
//id相等 则 改变对应的dest和src; \) v \8 A3 o" [( o4 P# ?0 c, W
m_Item.nIndex = nTmp;: N( {- W, g9 x! z" V
}
7 e- |. p( }0 h }6 |9 K" j! [" U6 {8 ^% ]3 L
}
6 D0 ]# D9 C! F p" N4 H};% z. u6 b( `: M( N7 z+ x3 w5 |
-------------------------------------------------------------------------4 j7 d6 y1 n$ K+ ~" \3 d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 m- G+ K1 G4 z' g( N+ H# C+ ?搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 f9 P! H0 q9 `8 m% X; N5 a9 {
紧靠其上添加:" U& r. f; W3 C( s3 E7 O7 M
if( pWndBase == &m_wndMenu )
4 s) B. c" [3 \) p8 Z' w{" p3 E9 a+ c/ [/ T- S. o- T
switch( nID )5 D" z5 V0 D3 M
{
$ W, h" Y( v; } t# C. z3 P* s case 2:2 B6 i2 ?& I, _$ a9 d
{' z; Z! _4 j6 t2 |( k
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" h* x* L& K% d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 L' i/ X( @; I, A6 P+ F {
* n9 O& Q) h3 z% D* j& i2 g, B break;
% ~# L0 q I5 |3 L }6 v7 c( F& p& `, u
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
@$ X# D, q0 w/ | {
! c9 p6 R4 L/ `) Y I) T4 q. Y6 s4 C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) }6 S- O |. J: ]
if( !pItemElem )
I$ b$ g+ d6 a2 n9 f continue;( a, g3 W5 z0 F5 b0 _$ H# U+ m8 ~
if(pItemElem->GetExtra() > 0)) X- z$ k) b1 Y- `7 E$ i
continue;
0 O9 t9 Y6 o5 k9 J. ~- O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ o8 ]" C) M( X$ R+ A& ~* m5 ? continue;
3 j0 z4 F5 Y% O" R if( g_pPlayer->IsUsing( pItemElem ) )
# O. Z! g) K' d0 p" c1 d% J l continue;3 M' Z. A2 u/ O! M6 C4 x2 Y
if( pItemElem->IsUndestructable() == TRUE )
# A: s# o; i1 Y' Q' y {, H% R) l/ Z7 W5 @% u# L; {
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% X, k1 `3 F) U! ^2 v. R
continue;
Y9 Q- L9 f. e }/ o, B; e% T( S9 j
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 n! F$ b3 b1 B
}
7 k/ u4 f8 V: h7 h break;# n8 _& o' v# t: R. f, x
}- S& v9 v$ ^4 P7 i3 O3 h
case 1:0 i8 |3 i" Q3 O1 j% C) X
{2 G$ D% p; m3 s9 ^* Q
//整理背包0 ]8 q3 s7 M: ]0 e
//////////////////////////////////////////////////////////////////////////
2 K( m3 q; \; y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& N1 i( n9 |9 O' n, E. O/ w8 P
//////////////////////////////////////////////////////////////////////////) N# ^0 D* V9 z+ x- {$ G
//////////////////////////////////////////////////////////////////////////2 }$ a% D! ?. Z& T# O) y& |* T/ Y
CInventorySort* pInvSort = new CInventorySort;
& Z Q5 i0 v8 M0 X C, v vector <sItem> vItem; `: j T4 D+ F* |& X8 _
vItem.resize(MAX_INVENTORY);//初始化大小4 \# n% o s$ y5 |
//////////////////////////////////////////////////////////////////////////# G: Z( L' ~% s0 _% _* ]" P
//填充数据
' C1 E' R* N' M! H6 W4 Y( ]9 Z for (int i=0;i<MAX_INVENTORY;i++)- U1 b3 M+ a: f& z. O8 ]2 Z
{
" t- e. k0 \4 l* ]# I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! p" G+ w N& T( s! Z! w& P
if (!pItemElem): n+ d0 t* d4 U8 |+ P+ ?
{
! g( [- [' y9 i: L% x8 |# | r vItem.dwKind2 = 0xffffffff;, \( H% y3 s) w: l
vItem.dwItemId = 0xffffffff;
: k% r. G+ |4 F* b/ b vItem.nIndex = i;) e% ^2 g* n. A9 M7 V+ h
}else {: I# P0 X7 E! s/ z& q- t
ItemProp* pProp = pItemElem->GetProp();; W8 q( _8 T: @+ N
vItem.dwKind2 = pProp->dwItemKind2;
|0 k5 N$ ]' h+ _, k- ] vItem.dwItemId = pItemElem->m_dwItemId;0 [( c+ ]$ i9 M# l2 U/ P* k6 F' \
vItem.nIndex = i;
! h9 X- H5 Z( ^$ k; h Q8 p }/ m* `& C/ d( o! t1 s: d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% ^3 A d- @3 V: g; b }8 N. f* G: P5 n( @6 e1 d! Y
//////////////////////////////////////////////////////////////////////////+ L+ e0 |) k4 N/ I I
sort(vItem.begin(),vItem.end());//排序
) {2 a3 H/ L9 |: R$ I/ v //////////////////////////////////////////////////////////////////////////
; z! H h; v. p, h //交换" f* c6 u) P1 a: e7 \/ v$ }
for (size_t i=0;i<vItem.size();i++)
+ `2 ?- I. ~9 V5 \1 w8 r9 I {
! W$ v6 O# V2 T( L( _. w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( R3 b) E0 T/ q. m# _ pInvSort->Add(vItem.nIndex);6 f& r5 V L; I0 p# f
}, }2 K9 i* }! G1 i+ c
BYTE nDestPos = 0;
! C5 j" F" y- q3 A) [4 W: P for (int i=0;i<MAX_INVENTORY;i++)
1 U' {( E) y' O9 Q: c0 V {' h* a" W% Y6 l: v; t# Z5 v, d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- }* j) Q9 I0 B6 g& i& \/ Z if (pItemElem)
; ^5 X' g. I$ ] {( c! Z; a5 Y2 j# M
if (IsUsingItem(pItemElem))
0 Y' A: w: a$ Q {! r& N* {5 D6 W1 l) i0 I F
//这个位置无法放9 D" _0 k, ]7 l' x, E
nDestPos++;/ z& K5 Q' M2 g, U. u
}$ p) I. \4 \# k. H3 x
}
/ P6 d% W. R* }; ^- ^: r BYTE nSrc = pInvSort->GetItemSrc(i);
+ w3 x8 z3 N, }4 s4 l" f' I; B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 q, I& h) ~7 a$ S$ I1 k7 y. B if (pItemElem)
' G o8 |% k% B3 I4 q {0 u5 k% W1 o6 v/ m) k' I2 p
if (IsUsingItem(pItemElem))
% o( n0 ?4 r/ W; p* ?% L { e$ K1 T$ y( `1 p
//这个道具无法移动,跳过
+ _& c# j) [6 I' t K1 n+ G7 [$ U continue;$ _ N. Q6 \5 {& s; i
}9 z0 Z7 f- _, ?9 S% s3 ^) w
}else{
( F. c- [1 r: f //空位置 不用动4 X" k$ I7 W, l4 T2 ?
continue;0 L6 t: A, h$ Z0 D$ {! ^' B* J; ^& L
}
+ R) q: {9 S9 F' ^ //////////////////////////////////////////////////////////////////////////
! j$ L8 T! ]9 v! j! H" o //开始移动( F$ ?6 k) w+ h5 f
if (nSrc == nDestPos)
8 [3 o9 I- T& ` {
/ X g/ _2 y# n+ r# |$ q d+ O //原地不动' O1 _( A$ r% Z! G, k+ \, l/ I0 I* Q
nDestPos++;/ n$ L' }8 f/ C0 J& Z( l( ^
continue;3 V2 y1 K2 X" N
}
u: _# q @5 k pInvSort->MoveItem(i,nDestPos);: M0 Z, B5 W0 K2 {
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 A$ `% y7 K2 V9 r: A; @+ Q Sleep(5);
1 N, `. a _# f! H //Error("移动 - %d->%d",nSrc,nDestPos);% ]- V# D) B' b$ a' z+ C
nDestPos++;
/ e8 h' F. m3 p }7 n6 Q$ v y! T! @8 }3 A
//取第一个元素的信息4 V; n' o! w1 J6 {3 O: r" W" x
/*
2 h7 J$ ~: T3 f; @& f2 m; ^4 A/ b if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* t; [- L; i% L; N* b L# e {
4 s" @& {, W V& n6 k: D. C# }5 } Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 ~$ m ]" }/ Z& x3 }! L% Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 i6 Z, \! t5 D8 t) j" f
}4 O/ S$ O' ]' {6 q& \/ V$ L7 _
*/
: ^4 u9 t* j' A //////////////////////////////////////////////////////////////////////////
& t; n+ V9 d: Q4 F3 s" A break;6 i- z5 d" |& B6 c8 q, s2 R7 Q
}
/ u7 u2 v1 X( O+ Z- g$ Z1 V$ Z { }
% h ^- L2 f. t4 ~}
( {2 f4 v: r7 Q, D) S7 N Em_wndMenu.SetVisible(FALSE);, {3 L) y3 e5 D3 n
) `8 S/ Z9 C) `8 @--------------------------------------------------------------------------------------------------------5 P' g( C+ w0 L1 C! {6 Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 L/ j0 p2 C, m: E2 e* H9 n{
' w+ c* J4 H8 zBaseMouseCursor();" a: e9 R+ c5 H& [) e
}$ ?4 B. ~) v2 ~! Y7 `2 A) R0 r
在其下添加:) R$ |& _5 L7 m. G% A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 ^; ?# {/ p* i$ a: f{# E0 n6 i! Y) g T0 `
m_wndMenu.DeleteAllMenu();' E1 F" {" A7 U& X8 f$ i4 I3 F
m_wndMenu.CreateMenu(this);
a: s* f% g5 I9 ]2 y4 P/ p+ X: om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. e5 ]/ L' m/ u: G1 I
+ G, ?0 w* g) U7 qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 L8 Z# ]. p) _ i- a, T7 J/ P{9 L$ t0 l0 n0 W
//P以上级别才可以删除所有道具
5 y* {. @, m7 O m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' `3 V0 U6 p0 @3 d9 g5 R! p6 c
}, M$ x5 c4 E. X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 [1 s* Z3 t# g6 j9 Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" @% W& R6 S, V! @m_wndMenu.SetFocus();- m/ d! C0 q. \% c
}
2 P8 a' d, i: k------------------------------------------------------------------------------------------------------------& [% p9 E3 r, M& u* t6 Z
*************************
$ R$ d7 e C- I: Z, p4 E& O( K9 sWndField.h文件; I( m* C9 D7 q- ~
*************************
* H) J# W9 h) w, }! t1 p搜索:BOOL m_bReport;- w! q/ u+ x( s0 q9 B
其后添加:
& t9 y& o8 E- ], Q+ N: `% ECWndMenu m_wndMenu;$ [0 l0 B$ \- t, f1 ?/ i1 ] T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* m8 ]3 I1 @; ~( o0 h8 m
其后添加:
/ ^9 Z1 t/ {) E: `. y: Wvirtual void OnRButtonUp(UINT nFlags, CPoint point);, z1 g# ]1 G: e) V# o f; w
b7 H; S, R7 ~' _
3 K1 Q6 `8 A/ Z7 |2 \9 [
|
|