|
|
源文件中_Interface文件夹下WndField.cpp文件 c2 x7 v" y- F
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). G( h, X$ C1 Q s0 m
/ E0 Y/ Z( [. q
struct sItem; [. r) a; P" [ E1 P( K, r
{
# m* C/ P) B+ \/ |DWORD dwId;8 F& R4 X+ F8 H8 }, c- X
DWORD dwKind2;
4 k7 h2 u0 o# N; U' f; ?/ c: N7 cDWORD dwItemId;$ k. d* k5 w% n2 @4 s
BYTE nIndex;) R/ W. s# N, g) w( W9 T3 u0 q5 }
sItem(){3 k1 c7 _ h0 \# N- W0 j. H! S
dwId = dwKind2 = dwItemId = nIndex = 0;
2 {+ m1 L3 }3 Y$ Y3 Q}; U9 h5 ?4 `. S# N6 M4 o- w- l0 G
bool operator < (const sItem p2)1 q* Y) u2 w3 q* A" U
{2 l+ _- j6 Y. D' |" F* t
if (dwKind2 == p2.dwKind2)
* T9 e% \ Q% X0 y4 |$ l6 L2 x: s: | {
* S- L: i' ^ V return dwItemId < p2.dwItemId;
6 |! }* r7 ]) Q6 k6 f }else{* M. ^% H- t: i! C! F
return dwKind2 < p2.dwKind2;+ W$ ]* {1 g+ }. R' a# {6 ^0 s
}; t& n8 @! M# x: a3 d( Q
}
/ Y0 K W' K* \6 v* L/ n) {};
: `" }3 ?2 ^& X1 a+ wclass CInventorySort
& {/ B1 V8 T E8 a2 n9 W{" y' D G' t" G
public:
. ?2 Z$ x# L1 {: C& `CInventorySort()
6 z3 ?6 A b8 C P; Z/ Y2 V{
8 Z1 i0 G9 p- _/ v5 f" B m_dwPos = 0;
- l) ^5 `! K- a. Y}3 F" B3 H( c; u: W" ^
~CInventorySort(){}
+ p1 n- x. T" i' {2 wprivate:
. c* R; l$ O N6 ~* @1 q5 TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% e( ]7 L2 F$ r
DWORD m_dwPos;
7 Y# e( i0 K$ @+ U3 Bpublic:
2 {; C& B6 |' Fvoid Add(BYTE nIndex)
0 e1 x. b. K8 A$ T! V+ P w{. \( `" N9 T+ r. d+ M( {7 a
if (m_dwPos >= MAX_INVENTORY)
" N! k l6 [& [: H( G" _# q3 W" D {
& @* ^( F0 g' W/ A. ?4 s return;
/ H5 k9 _4 Q u }- z) N4 L2 u' o
m_Item[m_dwPos].nIndex = nIndex;
' f! u; N' k! p3 D' d m_Item[m_dwPos].dwId = m_dwPos;
! @4 m% h7 @5 P! P# C( v6 @6 E7 Q/ g1 V m_dwPos++;
$ E# A8 [% Y, e}
2 \2 x/ r1 _6 d6 G. LBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 k$ e0 j z0 a# j! X; N; r6 I4 |{$ k9 K. x4 c7 N( p3 b3 d" e5 {
for (int i=0;i<MAX_INVENTORY;i++), I( j7 Y. u# `9 Z! _0 ^* @
{1 D- K- A; A. r4 x2 c0 e
if (m_Item.dwId == dwId)
9 S9 k5 P. T, F6 l {
" U2 L$ ^2 p8 Y7 G' J: B return m_Item.nIndex;
2 f+ r! W; g; Z4 ] |$ m# {" z }1 p$ G/ m. b( M$ `" ?
}
( q) o$ G) z9 \$ F! x/ b9 J8 y return 255;
) L% x0 }4 ~( g/ x}& J( {5 m0 @7 j( {0 L6 W9 }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& W" c1 R5 b% i{
* @; ?. I4 e4 J% `: X. {% M BYTE nTmp = 0;+ J5 g& K/ z3 v. S/ u7 ]
bool bDest = false,bSrc = false;
$ R9 s7 K1 K- @) u for (int i=0;i<MAX_INVENTORY;i++)3 H9 J6 v: z& p5 J
{# P3 q2 {' K7 n. n/ {% v* L9 R% ~
if (dwSrcId == m_Item.dwId)
' [* k) B) m. z; }4 _5 p B S {4 p( t' ^0 O3 v" m- _7 S" J
//id相等 则 改变对应的dest和src1 k q0 Q1 B! V1 m1 r
nTmp = m_Item.nIndex;: ?3 H5 p! D# f
m_Item.nIndex = dest;
3 h& ~; h* [1 T/ c2 N8 Z }
/ l2 l+ I8 d: Q9 Z }
" z% E. U5 X- N2 \0 f7 _, P+ o //临时数据保存完毕,交换开始 J8 j- s/ h5 Q% s& Y; d3 h
for (int i=0;i<MAX_INVENTORY;i++)2 j" B% t' J6 g/ s
{7 S! J3 A$ U" Z3 P
if (dest == m_Item.nIndex)
0 `0 { n: U5 V6 m6 E/ e {/ `5 r7 C) R: h0 n! K/ g4 k
//id相等 则 改变对应的dest和src
( ~6 i# H L" {- p1 ]" z m_Item.nIndex = nTmp;. F5 T5 x# I. |5 N
}
4 \& A; b/ d+ R m* U) q }
Q6 j7 W. E9 v* d" ?# o}% Q: t) Z% W: ~+ \
};6 }) ]+ L# t/ q
-------------------------------------------------------------------------4 V3 U( h2 ^8 z( N5 f% `
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), p: q: t- U# F6 V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- [" I% z. E; n0 s5 O8 Y紧靠其上添加:4 y8 o- J: f) k+ {( Z o, A
if( pWndBase == &m_wndMenu )
' z0 N+ @0 [- H0 l{
- I3 M" @5 t& e- j switch( nID )
0 H( U- ]! s5 p9 z9 }! {; f# Z$ M {
) f3 Z4 A5 z: p ~% o7 r7 J u4 I case 2:
0 i/ }4 e3 H% o' I% b. F+ M! h {1 u5 Y% q( s) t/ G9 ]6 ?; B
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; O8 v6 Z7 x) t! F
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! Q. w' Q+ V, \5 \' d- t! G5 }
{: c. M8 C. P4 q+ k6 u
break;
; z# e! v% A0 T- q$ K* B7 q }5 @' _. y$ Z' K4 r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ t$ T5 b& H2 Y& E8 ?& [
{
! h0 S9 O/ y1 } j; A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ u) g O E; L. x ]9 j5 g
if( !pItemElem )
& Q; z9 |9 c6 W continue;5 N" O) ]' _* d! P- c/ H9 }
if(pItemElem->GetExtra() > 0)2 q- v/ }! B2 A6 k: T; n$ |! T
continue;. Z3 g- ]: ~+ G3 X: i7 |6 ~& Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" e# v9 R" g1 _3 n) f( O R! F6 A continue;
5 Q5 ?$ k4 \6 H: b) M if( g_pPlayer->IsUsing( pItemElem ) )- z! w; k. x# o4 T8 s+ v
continue;
6 x f) `1 c* O6 U! v% |8 E if( pItemElem->IsUndestructable() == TRUE )( T7 r% J W. Y$ D
{
. m B1 x( j& N4 u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ i: s$ w4 {, a( b$ b+ b continue;
: B4 O6 q3 w, g$ Y9 Y) F }
/ ~ n6 l, o n: s. H+ f: Z- D g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 J5 @9 Y: J; x' u# g' ~& a }/ K8 T# T& ]6 i3 {% s) e
break;
. \" |. P6 O8 V I }
* H' O0 K" F( U- U7 y! r case 1:
3 V& i8 o. L _1 w( R" w" f' a3 x- K {
8 z+ v- k9 k5 Y6 O& ^ //整理背包. @4 i$ q4 }. L; I( e I
//////////////////////////////////////////////////////////////////////////
& x m( N: l4 E9 Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 {% c: z7 ~# Z //////////////////////////////////////////////////////////////////////////
4 X1 O" h. b+ h; ^2 M //////////////////////////////////////////////////////////////////////////
- t8 d2 v& W. ^* d! N! q# W CInventorySort* pInvSort = new CInventorySort;6 e2 ~" R: j( Q
vector <sItem> vItem;
( s: o0 U) h0 Z vItem.resize(MAX_INVENTORY);//初始化大小( ]. i5 t9 q: E* Y/ g
//////////////////////////////////////////////////////////////////////////
5 x" L" a' T# }5 O6 M/ O$ i //填充数据
: c( X( O/ \) d for (int i=0;i<MAX_INVENTORY;i++)
4 }# Z4 _$ t; p9 o3 u( ? {
# |; y5 T; [$ X e, x. W( r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% e! r8 n4 Z' M2 | if (!pItemElem)
. n3 w7 m% c! t {
& ]! F6 w& q( j+ N4 B. w1 i vItem.dwKind2 = 0xffffffff;
; f. U8 g9 \6 s vItem.dwItemId = 0xffffffff;( u, I- s: E: ^2 p# I D
vItem.nIndex = i;; c! f) S+ z3 o6 }* W
}else {, R* M- e @! f; m5 f
ItemProp* pProp = pItemElem->GetProp();
/ A, Y6 T" U5 @ h" L5 M/ O8 k. M vItem.dwKind2 = pProp->dwItemKind2; m" t; ]/ R; L* P
vItem.dwItemId = pItemElem->m_dwItemId;9 c* R2 g) L: W6 y& Q- I( Z: g5 \
vItem.nIndex = i;7 O$ ?: B, f% _& t
}; q" {0 X. G) a0 v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ u. j$ G# f# h9 ^* c }, C# G* R1 n$ C$ V x
//////////////////////////////////////////////////////////////////////////
- j, G! j i5 l5 g0 i5 s0 r sort(vItem.begin(),vItem.end());//排序
, I# e) R+ Q# s; }/ r# d( I1 C2 I //////////////////////////////////////////////////////////////////////////' F1 g1 s8 k/ j, b! M8 r
//交换6 P) @" h5 b. D B9 m( T0 V
for (size_t i=0;i<vItem.size();i++)+ w7 p6 D5 R$ k7 `4 I4 }9 y
{
+ l! E a: j- {* h% }1 r' ] `+ J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: B1 M/ n7 `0 b+ A F0 @" i pInvSort->Add(vItem.nIndex);$ Z% Y3 J, k. J/ n
}+ J# T3 L1 x/ W
BYTE nDestPos = 0;) W+ C+ Z8 ~4 B; q% O
for (int i=0;i<MAX_INVENTORY;i++)
; p( V$ |6 T0 z% E8 ~: R% e. x {/ U4 B8 I- e* Q2 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 H8 p& q$ ^, I if (pItemElem)% \% N7 J* h$ J; w* `
{. w; s. S- h, v8 Y( Y2 Y
if (IsUsingItem(pItemElem))% l5 }! k2 ^1 ~# U+ B/ l, G
{) M* W- X+ J( V0 j# e, z
//这个位置无法放6 Z. g3 _, d- u3 b$ S
nDestPos++;; u' ^9 c2 q: M8 u) a5 Z
}
% D" Y7 J {! ^' H# j }2 l/ Y0 F E4 B( ?- A
BYTE nSrc = pInvSort->GetItemSrc(i);
, a6 M( B1 v$ R" y6 Q) I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) o6 Z: h; v! h: | if (pItemElem)
5 m, h$ O" a2 A2 B0 H3 i4 w# X {4 Z, A$ X0 O5 I
if (IsUsingItem(pItemElem))- o7 q) h/ g5 l2 c' c
{
: K2 \! y( K3 L2 `, W //这个道具无法移动,跳过
! V" V& f j/ u- d continue;
' K: Q/ u: q, E# f }
7 ^6 e. _ Z$ w/ s+ @ }else{$ Q9 f( n! x3 }6 Z& X2 a
//空位置 不用动
3 {7 \8 ?( c. u* b6 j8 r, V* z% ~ continue;
6 K" A0 O% M" m5 s* e% ?& s4 s" @ }
0 x9 I+ @% Y* Y% T //////////////////////////////////////////////////////////////////////////
. q* P5 `- Q5 {8 S F //开始移动& B- |& {; s* c* ]. g% m* n
if (nSrc == nDestPos). Q2 r, B: y) \6 h, o
{
, I* N" i4 o3 G //原地不动
/ Q& t% M3 s# y8 Y' @ nDestPos++;
5 O5 S0 T6 s& Y1 I0 u7 P continue;! D0 f5 _* G7 H6 F( }& {3 o
}1 v+ h, L+ `# e
pInvSort->MoveItem(i,nDestPos);
- F' d5 ?; M7 k0 I g_DPlay.SendMoveItem(0,nSrc,nDestPos);
T2 t3 D% ?7 B1 L* O1 l. { Sleep(5);* I! _( F: e% C$ o5 _
//Error("移动 - %d->%d",nSrc,nDestPos);$ i$ ~# k% h* S( p% W9 `
nDestPos++;5 i* u3 t5 w" b5 e- S' I$ F) h
}
; C3 k1 ]4 X: M! l* o8 L$ M5 l+ e //取第一个元素的信息! i# \- e% p* I: J Q/ y
/*# C8 {5 D7 M/ _2 P5 `* y5 w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) F P$ J6 K9 R) b
{5 M7 D8 K% t) K0 E8 L q0 y0 {- [9 r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( S5 ^( Z$ n i& d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 u* I) a, R/ B7 c# b ^# P; @
}4 D `0 \' _1 _2 b% D
*/
% d5 ?; O# W! ^4 d5 W4 g //////////////////////////////////////////////////////////////////////////
& w3 \6 f6 Y) r8 S2 } break;
% C; ~& U1 E4 B }
# g" x! c+ }! ?, | } & q3 P6 T1 Y% D
}6 J: A, \' I+ o; f/ _
m_wndMenu.SetVisible(FALSE);6 } q- H3 p' z
U( o; s4 l+ T1 ~
--------------------------------------------------------------------------------------------------------9 h* j. C* p8 ]1 R& G. N
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& o4 M. y: r+ r. {; s9 V' }" L. w& R( J{& _+ v z5 b1 X
BaseMouseCursor();1 a3 `* ^! p5 f3 }' j
}+ q4 o; \1 S; O3 [
在其下添加:! _! b# c; Q. Q! I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; M9 s4 S' M3 z1 B{
$ G6 U4 }) M6 }* W7 W8 d$ E1 Wm_wndMenu.DeleteAllMenu();5 G g, l3 S. r/ u; X; m
m_wndMenu.CreateMenu(this);. g0 ?) g& H7 A$ E1 E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" ?' V8 G* T& b9 u7 ^& m
; o. s) Q6 }/ E! Y" |9 a+ K
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 N4 r5 |, K0 e' ?0 h! L' Z* [{
8 M: v$ B8 S$ H) H3 l //P以上级别才可以删除所有道具
. _4 l; J. X* i m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 c& C: g8 L+ L5 I& ~2 K3 f- X
}; x; @9 N* f, F5 B9 F
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# \% j# _, k s3 ?2 {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. k0 n( y( A% Q" Im_wndMenu.SetFocus();
$ u/ P) s Q _+ F3 ?3 U% ]}
$ ]9 d7 ]! t2 i9 i------------------------------------------------------------------------------------------------------------
3 V( Y v6 q! {$ A*************************1 K/ D1 I8 R% q4 g+ T8 f1 W3 Q
WndField.h文件& ~) H5 \* m2 [& N1 g) Q/ N
*************************
Q; k' T+ ]0 D3 W4 i搜索:BOOL m_bReport;; F) D$ u' Q& x' J9 I" k/ p# L1 z5 E
其后添加:
) O8 K& v1 [8 i* b( n! h9 pCWndMenu m_wndMenu;
/ h/ V d$ b# i/ b4 B G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 h/ E7 C9 X2 q+ W其后添加:
T! l( {: a( }4 cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 F, D! ^7 K1 T
B8 ]1 R# j+ ]) O
) j- y7 E3 `+ W1 J4 i1 P5 e: n2 z3 r |
|