|
|
源文件中_Interface文件夹下WndField.cpp文件7 U7 K" V0 v$ ~; c
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, _! R1 S/ x* `; v$ S" a
. _+ E( c, R5 i, T9 w5 J- G0 f* {struct sItem" P1 a9 [2 S7 x& d
{1 f) \- G: U/ n3 }# F' E" M
DWORD dwId;
7 w' {. H. n8 gDWORD dwKind2;
( n- B l- L4 \6 W; xDWORD dwItemId;
7 X/ T7 G* j2 h: U) ~" dBYTE nIndex;
" D$ T4 B2 n( g# A/ S. DsItem(){3 w# m ?8 X& B( l0 H
dwId = dwKind2 = dwItemId = nIndex = 0;
7 O+ @! z3 j) O* }* U2 P}7 B K, s, s+ _3 q' v! f% j
bool operator < (const sItem p2)
* M& J5 C( L4 I3 ]3 A/ g' w/ g{
1 r9 H. W2 j0 f- |$ a if (dwKind2 == p2.dwKind2)- \1 A+ a5 O0 W. R( s. o( a
{) W* V9 `' u; ?; D6 L$ O
return dwItemId < p2.dwItemId;
4 E2 }" R; j& w0 ?/ @$ i }else{
! s+ U9 c8 a0 J/ T W7 e return dwKind2 < p2.dwKind2;
$ F+ i$ d4 \0 F }
( x# h- Q8 a/ k% T, l8 ^}
3 p- u8 y- K% w$ A8 o9 b# f};& H" o/ X4 \4 v' \2 ]7 d$ n
class CInventorySort
9 C$ a+ y! O. T O8 j' F; [{, J# y* e2 n9 H1 W
public:+ \6 q% Q/ @1 F. W: H7 ]" h: X
CInventorySort()
. t. V1 Q! C8 w a" G{
( q4 w6 O5 S& ^ m_dwPos = 0;
3 |: n% i O% C; N, O* b! D}: ~ U9 G) d% t6 |
~CInventorySort(){}
" ^" X& R6 }* i! @private:/ e& `9 t7 ]3 v7 t |* ?
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: u. r. \; J* e2 e8 R |
DWORD m_dwPos;
9 \, i, E7 b+ ~5 I. mpublic:
8 V6 ` O$ v$ i3 b+ k4 k/ q5 Pvoid Add(BYTE nIndex)
! V( O1 P) D$ ?{# X6 a5 A7 ?/ c
if (m_dwPos >= MAX_INVENTORY)
$ E+ U" ]4 Y* t {
. E9 v) b; q7 d return;& k4 C* g5 |! ]% d
}0 G4 M" |4 s" v6 I
m_Item[m_dwPos].nIndex = nIndex;
" t% p, i) x6 I2 \; Z8 t; U3 p m_Item[m_dwPos].dwId = m_dwPos;
9 y6 T8 ~0 [# Z, Q5 d$ b4 [9 b H2 j m_dwPos++;/ f L, I& R6 X0 K) X& N3 r
}3 J' ]( n0 M' b$ Q) d2 ]
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- n ~% P n2 V! x& }. P, U9 f _{" m& ~$ [# x: O: M
for (int i=0;i<MAX_INVENTORY;i++)
+ ~: N! Y1 G" c {( }5 @9 J2 Q. D0 P' j+ Z1 `
if (m_Item.dwId == dwId)
2 z, ~6 b% _8 a1 a( ~5 c5 D {. B8 ?) v5 d! z- }1 k- K6 @
return m_Item.nIndex;1 x6 v$ R3 S4 T5 d- m; s1 Q+ X
}$ D9 V v1 h% ~, U* B
}, Q' q4 [& B/ d6 x+ Y
return 255;
2 S* ^4 b' u: C" l) n* O" m$ y2 C}/ F- x3 ~3 J! I' M# g: c
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- k; h" o% ~6 b5 h1 ^9 U{
, a% `# k! z' P4 X BYTE nTmp = 0;
. J. H8 q! y7 ]. F; H7 r! t G bool bDest = false,bSrc = false;5 T, r: d2 W, Z* @
for (int i=0;i<MAX_INVENTORY;i++)
4 @1 H5 j+ A: R1 e" j; q {
: Y8 u' U# J, e6 ? if (dwSrcId == m_Item.dwId)
" F. o, {( z J# O9 N D( m {
. ?# N: H, e" X. b //id相等 则 改变对应的dest和src
( X: B8 `: S* l7 w' @ nTmp = m_Item.nIndex;
/ j D( @: r" S5 v6 o m_Item.nIndex = dest;
7 l( }: T, H" e; x }
* B$ U" F( S, c6 ]8 { }$ C7 P8 t7 T6 y! Y" Z* ~% `8 \
//临时数据保存完毕,交换开始7 H8 Y; N1 @1 Z
for (int i=0;i<MAX_INVENTORY;i++)5 n) { N3 _- n1 m5 W0 Z
{' \; {( I) O$ z9 o
if (dest == m_Item.nIndex)
& L' P2 |0 }+ r3 f! [* Q {
+ L" C* n% `* j: ]' I# l6 J5 x- v //id相等 则 改变对应的dest和src
7 l3 {4 a! \, ?4 B. Y8 e m_Item.nIndex = nTmp;
# P* a# a% |2 k# i7 o: G }
! `! s& H" e, a( D }
& A' c3 R! J; e, u" }" C1 _}
* \( Q% l8 j# c9 P) [, c& u% N5 j};
$ i0 K# K# r3 A* _( s$ B f" R; ?-------------------------------------------------------------------------2 f. r3 V6 O5 ^8 I' ~7 d, F+ O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" S2 `7 I, B0 n2 E, Y P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ y4 M! g/ k3 k! w! n5 G9 N
紧靠其上添加:- u9 s: ]9 r# ?% h( f
if( pWndBase == &m_wndMenu )
" ?! e% R9 a2 V8 i{% m. b! H6 z/ s E3 `3 c; K$ W
switch( nID ). T4 W' g0 W9 Y8 J
{1 C: z& f( i. Y! H- \7 ?4 Z f
case 2:
2 q% E1 x5 t2 T r {
! J, m9 H$ ?( @2 P+ w/ g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: Q' P4 k7 e5 S- B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ }& u) Y0 B0 o* [& u {" e' @6 |, ]! v9 w/ ~4 G4 K4 d4 d
break;# z/ }' E9 j) U
}
6 u$ D( s# m2 i) P/ W7 a for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. W) E0 x$ X! V' C {4 p+ U& Z8 i6 u L" C- t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( s3 f; L6 a5 c8 } N0 i if( !pItemElem )# q1 F1 e3 w, Z$ B, d( `* n( H" s4 Z
continue;' t+ O# l/ l* C6 y& }3 a
if(pItemElem->GetExtra() > 0)* N' W9 o+ L0 q7 v1 F- {3 \1 m
continue;
* Y% X" A9 u( b: E4 w( c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + i/ P# r! x4 H1 d: ^
continue;3 N+ w# b1 p! g4 g/ m8 G
if( g_pPlayer->IsUsing( pItemElem ) )
0 O, \+ y5 S5 |) V- F* ?/ I- x% ] continue;# D; T' Z& J/ t, H/ _
if( pItemElem->IsUndestructable() == TRUE )! k7 S2 B+ u5 b( w' u# y2 T8 r
{% S* S& E; N9 H! ^) x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" c# O) u: ~% O% P6 }- n
continue;1 m4 E, e- d: X- V
}- p, g! z3 m9 W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% y; @' R2 x- `$ [/ u
}
# o) E% L, Z- F/ h" z# o( z break;
0 L# q. B8 A% i' }! r! d/ k; } }# X# X: O2 N% Y' e% q! Z
case 1:
6 b+ ]; R6 k* Q0 A0 [! J {
5 ], L# t8 T) R! F" { //整理背包8 i& K4 |& J! q' j$ a5 K2 `3 f
//////////////////////////////////////////////////////////////////////////
% W& k# c7 G2 M //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- J: d2 w. H* C& Y, e) a- e
//////////////////////////////////////////////////////////////////////////
5 Z8 C& R7 W& ?" I //////////////////////////////////////////////////////////////////////////9 z3 S. q8 y7 \
CInventorySort* pInvSort = new CInventorySort;( h, y: _7 _; q- h; z0 b
vector <sItem> vItem;
; x6 y# }( V3 t, b2 ]8 ] vItem.resize(MAX_INVENTORY);//初始化大小
; P, p. K, U* L9 i1 M1 P% ~ //////////////////////////////////////////////////////////////////////////) `; q5 E! ]1 [
//填充数据
4 g$ T! }% |2 d/ T' i* r for (int i=0;i<MAX_INVENTORY;i++)( n2 g! g M7 z
{; ~, L. ?& {# F9 M/ Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ ?/ |9 d9 J( ~ P5 z) E* O
if (!pItemElem)+ Z% @3 F) ?, {* _" j5 ~9 q( |
{
% A) w( V1 _ c2 [* n$ {. j0 X vItem.dwKind2 = 0xffffffff;% x$ n: W; D2 B8 b6 V( s* |, C
vItem.dwItemId = 0xffffffff;
# D" ?) m' L$ q! E1 k+ _ vItem.nIndex = i;5 H. i ]8 p/ b
}else {$ u! ^( t8 N0 F6 w2 p' D% O7 y9 _2 ^# V
ItemProp* pProp = pItemElem->GetProp();
6 @6 j$ R! `, u5 n% w1 F, t: h vItem.dwKind2 = pProp->dwItemKind2;
, c' i' Z2 }; ?6 Z E* o* | vItem.dwItemId = pItemElem->m_dwItemId;
9 `) U5 B& E Q% ^, [0 G/ F' [ vItem.nIndex = i;+ A% v0 y+ L% b
}! ?+ z4 z1 ]! ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, h, Y: `0 W1 x! r& P: F3 o$ s }
: c: X/ J# K4 G# @ a //////////////////////////////////////////////////////////////////////////
p2 ]" g3 E/ q, k sort(vItem.begin(),vItem.end());//排序
6 c* R: L7 y* Y7 p( P% i //////////////////////////////////////////////////////////////////////////
, \$ S& @; T* D7 s, ^7 W! i //交换
; ~! P2 W( S8 D; y. e+ ~ for (size_t i=0;i<vItem.size();i++)
( }# c2 ^& u. c9 L! |$ E2 _ V {/ }5 N% f' u# }* r( D
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. B- F T5 Z% _$ x pInvSort->Add(vItem.nIndex);
; ]9 {! l/ F6 k1 H- \/ J }; i$ Y* J" S6 d5 {
BYTE nDestPos = 0;
/ d8 g4 v, p9 B for (int i=0;i<MAX_INVENTORY;i++)/ B7 Q5 G9 S3 _( w& \
{" L0 Y4 X% J/ t$ z" ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# x/ K$ Z: ~- ~$ E" `
if (pItemElem)( k0 J5 n7 K- M1 y" I+ M5 [2 {- B& y
{. }- g- z1 Y" r' f: J
if (IsUsingItem(pItemElem)): h* T p9 N$ L+ N0 c/ k
{
+ S1 X; q! n% v3 u! M% m, [ //这个位置无法放( q; y- v' B8 O$ q: Z7 s
nDestPos++;
6 K1 ~3 ^0 A0 x9 u- f% j }
% v, z3 B& v3 [* H6 p/ i }
1 Y2 l" @: y, W5 Q# B BYTE nSrc = pInvSort->GetItemSrc(i);8 W! E3 ^( E; `& Z1 l
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 N% [% k1 Q0 @( }3 I
if (pItemElem)
- h* L) ~5 V% H5 S {& o0 `/ O2 E9 R* p5 b
if (IsUsingItem(pItemElem))
7 ], |( B& ]( g" g! ^3 E; b0 Y' B {
' G& ]/ F2 M: l7 {" K; ~: z5 r9 V: I //这个道具无法移动,跳过
" k$ n" i7 ^' `) l# |6 B continue;. w% t# p2 H; {' r
}
4 \+ T+ B5 U' _: u+ V }else{7 j4 [# ]- H- E# U1 O6 p! k1 x
//空位置 不用动
1 J( A" w7 b( Y5 O continue;0 E4 V! n! J+ ^4 U" }
}
* J3 _' x3 ]6 b //////////////////////////////////////////////////////////////////////////% _2 q) q4 |+ {4 p2 j
//开始移动) s, t9 O5 A: i( g) b9 R
if (nSrc == nDestPos)
7 A" X# n7 F3 K: K: Y# R {
+ i' ^ X8 S2 d //原地不动
& Y$ ?( T1 n) K4 ~ nDestPos++;: T2 ?, u6 [, V4 ], A
continue;# T* w# @5 M* C& ?% [6 H' K
}$ `0 Z1 y+ \+ N v: ^4 l# t
pInvSort->MoveItem(i,nDestPos);
7 j, j- M/ n7 V% b/ r# B* d7 o g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 }3 s: b4 Y; d! I# s
Sleep(5);
% N6 q% Q' v+ E) t7 s //Error("移动 - %d->%d",nSrc,nDestPos);
r1 P. j7 z1 R9 S7 C- d nDestPos++;- ]3 u+ i. T" J, N
}
7 N3 ^/ y! U" f6 [3 b3 u* [ //取第一个元素的信息" ~7 g/ m- I( p6 g7 Y
/*! S' `, p3 k0 k3 |8 b' h5 k
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ q; e2 ]/ a- R9 h0 o5 e. {
{& d! Z* a# M$ k6 I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 T3 x5 W0 ?, }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 B* N/ F' a# o6 ^ b }6 ?: H; a9 I7 C. d: z' |
*/; ^! U0 v& k- E
//////////////////////////////////////////////////////////////////////////
0 L0 t0 V- S9 \$ a3 n w break;
* I8 d3 ~9 O4 v }
1 @4 f9 Y9 ~; W, D U3 M b: o5 C# z }
. M( F- V+ W: ?' b F% X}$ ^5 ?0 V/ |. ~
m_wndMenu.SetVisible(FALSE);9 Y$ _$ \ {6 U [! \) T
: F( ], @8 M% J$ E \6 i" T--------------------------------------------------------------------------------------------------------
0 m$ ~' C [2 j3 u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 ?9 K W, p- h' E$ C{8 N2 e2 l3 H3 r
BaseMouseCursor();* ~, M* D) b4 `9 g
}6 ]" W1 G1 g% O6 X
在其下添加:
3 G" m- @( g: z( U1 J" M8 Yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
P: k5 s' @3 I; R( a6 n: C{; s0 u3 W" y8 m8 h6 q9 {3 Z: ^
m_wndMenu.DeleteAllMenu();9 K, ]$ Z/ [+ H# k6 c' m- f6 K
m_wndMenu.CreateMenu(this);
- M+ {' E3 C" E+ s5 tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, [% ~" y- a: s* ?5 U8 B d, S
8 w: J% T) Y" _8 h! M/ o+ Aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* Z% f+ ]/ V- s' \( l k
{- S% ?6 z. C* }* ?
//P以上级别才可以删除所有道具
) h+ L! P; i$ i! e: Z. O m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% E W2 p) @: j" b- h}
$ w: T; S9 L1 v" }6 f5 Zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 W2 v$ |9 `' q; M T: G
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ j3 n! g$ J) n/ L1 Q: L- s4 n
m_wndMenu.SetFocus();
) N* J3 u k8 m3 F, [}
7 \. Z1 U0 L/ _1 l b------------------------------------------------------------------------------------------------------------
7 O+ c, u0 |. J3 R9 [+ N( B8 ^*************************
$ F4 v9 v/ ^' G9 S2 I6 ^WndField.h文件 y; G' s: u n" B8 [: f) H
*************************
0 L( E; ]* Z; h4 K搜索:BOOL m_bReport;
' W1 C7 n7 G& t: m其后添加:2 _ h3 X% I5 x& @2 g
CWndMenu m_wndMenu;6 n# }* E" M. D2 v$ j2 y4 j$ Y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% P: p- d: X7 ^/ o# L$ ~" R8 x+ G" A其后添加:
! W3 A8 a* ~1 i# m4 ^virtual void OnRButtonUp(UINT nFlags, CPoint point);+ e9 v) Q! m; d( G8 E( O: M
8 L, z$ G* O( ^' E! N0 q9 {, a% k0 I5 |- o9 G/ K3 c
|
|