|
|
源文件中_Interface文件夹下WndField.cpp文件7 @1 x/ p# N# s* Z1 g) v, e6 H& L# u
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 c' ^% @" f, r6 Y9 J, W9 J
6 E: ~/ L: q+ c2 }struct sItem' H9 U0 T8 @5 B
{6 s5 S2 F* R4 f) @: x D
DWORD dwId;3 C4 B ]$ c8 U) p/ |/ X$ i4 L7 s% u
DWORD dwKind2;/ L" N) ~9 ]$ Q3 Y
DWORD dwItemId;3 Z$ l% H8 ^! {9 ?+ l4 \
BYTE nIndex;
+ R6 u. k0 e( ^: h2 b$ LsItem(){* ? H, m) s% ~6 @0 M
dwId = dwKind2 = dwItemId = nIndex = 0;
4 E5 Y) Z9 o2 U9 s}: t9 V# Q& Y& v% r
bool operator < (const sItem p2)8 l0 g$ M6 X9 ?4 ]& s5 |
{9 }7 ]& V3 h _% x7 V9 ^ M
if (dwKind2 == p2.dwKind2)* L- K0 `$ Z7 H* H+ g' J
{; [8 X7 S7 d# K$ F: @
return dwItemId < p2.dwItemId;
. }: B# W. A3 Y& A$ ^ }else{2 B5 @3 h' a( T6 _
return dwKind2 < p2.dwKind2;" Y5 u7 d% M$ v' I
}: b4 K7 Y+ f9 Q
} k* W& B0 N4 _8 K
};
, J% c8 S, v! Q% N2 @+ G( j# Oclass CInventorySort: \, s4 j, ]" C' d
{7 p% k% W Z/ }. W1 {& {4 X
public:9 i0 x" {6 m! K4 h, u+ Q) s
CInventorySort(): b& b! c9 q, z( X5 F
{
% q! T- Y0 ^) w1 x7 n: }' T m_dwPos = 0;$ @7 m" {. m! O2 B
}* F# x6 W5 h. c! L
~CInventorySort(){}" L! q! e, M2 M& K
private:
% V. | b, s" @' ?" d/ S. qsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 C+ x1 B" d& ?! u" ?! F/ qDWORD m_dwPos;, {4 q5 |' A8 ^3 W) g+ b% h7 o
public:
$ M" W5 v4 E t2 O) \ svoid Add(BYTE nIndex)) I! C- _! V: ^, L% t! g" w' W
{* R; u3 `# o7 t$ \$ k* a( Q+ L% B; r
if (m_dwPos >= MAX_INVENTORY)" |# c6 w; K' v! S% W' y
{, O: t% u5 ?7 s5 S8 z
return;: R% W0 S6 n/ I/ }; I5 ~
}6 A3 {, K4 F% @9 v/ ~
m_Item[m_dwPos].nIndex = nIndex;
3 p. U, S- q+ u7 m m_Item[m_dwPos].dwId = m_dwPos;- O5 v: h" k) q) D
m_dwPos++;
( v& T2 R' C9 p( o7 E% X}5 z; M; e& h2 a+ G2 R9 a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, i! t' J( z; j+ Z( W* c{5 n2 D5 g5 i+ H0 c4 l* W
for (int i=0;i<MAX_INVENTORY;i++)
; ] i# L# Z- R# ~8 d }5 q7 v {
6 ]1 T/ Z B/ I) z( n u& T5 a if (m_Item.dwId == dwId)) B( \. c Y+ @
{! t4 W* t: W$ H P0 j" z
return m_Item.nIndex;
* `, M9 W9 Z8 J5 X0 d }& @. Y$ ]2 h- b
}
- S" o$ X1 j0 k0 k8 R' ~ return 255;# |( t6 a* V$ U4 ]
}
9 m$ o- B$ y7 }" ], w. x8 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; ?, ~4 T2 {+ p! Z8 L9 N
{! n6 _; _- j$ L3 i0 c
BYTE nTmp = 0;
6 O% Y' ^" j& | bool bDest = false,bSrc = false;
+ S+ O9 S4 k! Z for (int i=0;i<MAX_INVENTORY;i++)
! _5 m5 Q1 U' Y% I3 N {
7 h* y0 u" a/ m# _' T! W. ] if (dwSrcId == m_Item.dwId)
- x+ c: v) A" m9 ^% e$ I {
* z" @8 r/ I$ Y: S% c. C //id相等 则 改变对应的dest和src
- o$ j1 R1 _* u" s# i: I" f nTmp = m_Item.nIndex;
' s; j" F2 H) n* W4 ] m_Item.nIndex = dest;
1 C: u6 C P5 q& t( Y/ i- l2 d }( l1 {4 M# S4 s( }% h& C
}8 e* b" {* L. v3 k$ R
//临时数据保存完毕,交换开始* R6 O9 m; i" i: B% H) ?
for (int i=0;i<MAX_INVENTORY;i++)
3 B1 A6 y: h0 W7 o* |* O% g1 q( q {! [ f& q' O- ^8 t6 E# h5 ~" B
if (dest == m_Item.nIndex)
1 E2 @- q$ L* y+ @ {3 F- \! h( ^, u
//id相等 则 改变对应的dest和src
6 ~, c3 T( Q( |% Q! L# I m_Item.nIndex = nTmp;
, b. [' K# I% z8 e6 [ }
: M' r/ W: m7 e2 N$ |/ d }
6 u, n! K0 R# {# ]5 @3 D: m5 m}3 {! _$ D. }# B. j$ b0 ^
};+ M, Z1 P! K9 t9 i
-------------------------------------------------------------------------, Q" b7 X. I: v G# l. L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' X9 R1 y4 q5 _' V/ I/ m! |5 h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ L$ P, {; g% i J1 K& \6 G紧靠其上添加:- p8 n" Z7 P! p& S5 v, }( C9 W
if( pWndBase == &m_wndMenu )" B; [' z6 }1 C, l
{& ?1 O8 ~0 j3 u2 i% E; o
switch( nID )
* M0 l* _/ _5 s# l {/ H. K% u4 b1 f3 P8 y
case 2:+ f; z# x* L' ?
{& @) u) M! h3 F0 s
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& T2 ?. y+ j8 W+ x" @0 L8 a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! k1 t$ P* T k% L. p( r1 [ p! C {
1 F# z6 { j, d3 x break;) a6 n Y: S* _
}
2 y; F" c4 Z) U' n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% k( h6 E6 T7 \# s {1 @: L; o8 ~$ L3 c4 V3 R, W1 T% U; L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 O+ G( }4 z# e* Y) r
if( !pItemElem )( ~9 X: v* T' c% E L! m1 c
continue;
3 z- @+ A5 B4 }# C7 s/ D if(pItemElem->GetExtra() > 0)
" b5 [ Z6 q) v continue;
# V. a P: \ W% s/ o* K+ f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # _5 u- {$ H- |% K; Q; q
continue;4 m1 q+ l$ R2 a1 q9 v
if( g_pPlayer->IsUsing( pItemElem ) )
n) t! C/ E! [' {' I/ W continue;9 f+ G+ P" n, i* [
if( pItemElem->IsUndestructable() == TRUE )
, v B3 ^8 |& F! u& ]! K1 u8 ? {
$ k: H, X( s z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 L+ I3 [! _0 J9 f7 z* b/ f continue; F6 \# B: i f( _5 F
}
" [+ ?/ c; \$ I8 P. p g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" H. i2 P/ S3 e: b4 Q
}5 F( O! z Q6 I. B
break;# h$ a$ {/ Q: O* [- S( l3 D0 N x
}4 O7 g, V J) b; r; L- |7 O$ c
case 1:
3 A, ]# A# `) j/ e5 p# O2 b {# R: ?5 r2 u- |0 N
//整理背包
' B+ i" h9 u- h/ ]! @" D //////////////////////////////////////////////////////////////////////////% j" J* c" L" V* `& x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; j" x. C1 J7 }& R0 O0 f
//////////////////////////////////////////////////////////////////////////2 ?+ @/ X/ z( l& I/ p- N( J# t9 S
//////////////////////////////////////////////////////////////////////////, d. y( y, E$ h" W
CInventorySort* pInvSort = new CInventorySort;
) ]& L7 i& B4 y# b; t+ r3 v+ L vector <sItem> vItem;
, S$ k' ~$ B% H8 E vItem.resize(MAX_INVENTORY);//初始化大小
3 l, u' a0 @9 l( t: G //////////////////////////////////////////////////////////////////////////
; y2 @" Z6 s# ?5 Z //填充数据; E: T+ U7 W& q. c3 A. |2 ]
for (int i=0;i<MAX_INVENTORY;i++), T B# {& ^' I: `1 Z
{
$ I% f& F) U: u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! Y5 S# a3 a5 Y
if (!pItemElem)+ \+ k+ d! H f
{
! e1 Q. |, s: g* Y vItem.dwKind2 = 0xffffffff;: \ z2 s: r1 {( F( Z4 p0 l
vItem.dwItemId = 0xffffffff;2 z* t0 @- b, W$ J
vItem.nIndex = i;
' B6 u- L$ ~3 i z/ ]- s }else {# V8 j! D0 w/ s7 V0 g
ItemProp* pProp = pItemElem->GetProp();" r* q1 M0 V% t- u: G
vItem.dwKind2 = pProp->dwItemKind2;
% z7 `' j) j& S* _( S( s+ M vItem.dwItemId = pItemElem->m_dwItemId;
! [2 h- G. R/ b. r5 k vItem.nIndex = i;+ Q# ~1 Y1 H4 W s$ N
}) @$ ^, B2 T& P: Q3 l8 }) s: f
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ M' Y' |; D2 A* B% \ c }9 ^9 D' Z: _- H: f
//////////////////////////////////////////////////////////////////////////' c P& S: F5 f; o5 T" D+ d5 i
sort(vItem.begin(),vItem.end());//排序8 p, W, U5 D5 C8 Y$ w5 r
//////////////////////////////////////////////////////////////////////////
y& j! s) L0 D! Y7 j //交换0 M" I6 [, W4 J0 s L+ z% F& a1 U% d! u
for (size_t i=0;i<vItem.size();i++)
8 v1 k" j( n- Z8 t& G' S {
8 F( {9 [8 w2 C" Y S: S/ q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 {9 t) L* \/ s4 Z' P& u ~2 W, X4 j" M
pInvSort->Add(vItem.nIndex);
' q3 w" C4 U; J' b# K' o8 P }
( j$ n$ j4 k5 O2 |) C BYTE nDestPos = 0;$ H5 b* c( M' t7 V, C# ^
for (int i=0;i<MAX_INVENTORY;i++)
, U- `* A5 P: J5 e# L+ a# @8 p/ [ {
5 K$ c" H8 \# K# [1 h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. p! `2 C! N' Q
if (pItemElem)
. `" W" c$ R1 h( {4 f {
7 K' y: d5 r! ?) V, H% C% s if (IsUsingItem(pItemElem))" ^* p5 M* T( k( z2 l
{, Z4 U/ [, K1 y6 @" y# h0 [
//这个位置无法放
* _, z" x l" `4 A$ A nDestPos++;& s1 e2 A" j- n7 E
}$ D: S! t5 v& V- I9 X& {
}
. v, J$ [8 L: y6 w( f# q: _ g BYTE nSrc = pInvSort->GetItemSrc(i); }3 ~4 B7 h5 }# N: i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: \: }1 P9 m" O if (pItemElem)- m% l, f* g* m6 |" Z1 v
{
; F' ^4 ]+ D% l0 G6 O# p8 [ if (IsUsingItem(pItemElem))
# _& L$ u/ n a& }- T {$ v, P. Z) i l. V8 [/ v( l s
//这个道具无法移动,跳过
3 c! }% S, I2 m6 ~ continue;
9 Y3 y7 N8 o4 d% [: e; B) ` }
3 Y% b3 Y" L1 Y* ^' @3 _% O }else{" _' U: }* M$ \; @2 ~1 B
//空位置 不用动
1 K6 B, p8 e4 k: ]# s continue;
: y. e+ Y2 j3 z& M( _ g$ f% K6 \ }
4 T/ h: x! k, g0 L% m) j V! i //////////////////////////////////////////////////////////////////////////
- d8 a% d' E/ N0 q& M //开始移动( i/ ^% {' y2 u z A5 r
if (nSrc == nDestPos)" R8 N0 e; W a$ Z, V8 F
{: r! O' d1 {$ h8 e$ y
//原地不动
7 p$ X. |- W( g, U nDestPos++;
: U G. ~1 A4 o continue;
2 r/ {. d- c2 @" y: p/ r }
3 B; D; |9 ?! O- ?1 l3 ~ pInvSort->MoveItem(i,nDestPos);8 `4 G! Q* [' w! J: D: \8 X8 m
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% V% `+ r& R3 u* n- V' b* b0 @ Sleep(5);/ w8 h* T& K" b, L* m
//Error("移动 - %d->%d",nSrc,nDestPos);
; y) G- f- L5 f$ e; D nDestPos++;% q7 z" V! {: c# g, [' f4 {
}
' J8 h9 ~; d" u( u! M0 h2 D q //取第一个元素的信息
+ b! k4 S; [+ y) ^ [+ ? /*
7 g! T' W( P0 p: a( X if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 g* `" @$ F( I: E6 _+ N
{
5 z. T7 C& J1 ]. n e6 _" {4 i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 D, Q8 `* Z t3 S, l9 A0 t0 O+ j. h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( O$ |5 {" a. E) V8 r8 r
}
3 @1 Q" C9 C; K; O# @ */
# J2 t- q2 M( u //////////////////////////////////////////////////////////////////////////
+ H" k# b5 b: d* @' ^6 j3 U: ] break;" _4 W0 E/ J. U1 W! V9 i% C: y3 i; f$ l
}
6 e6 _! U( d" _# J }
; r8 w9 E! k( g( s6 U/ q}0 u! S' }9 q% H- y8 o
m_wndMenu.SetVisible(FALSE);
, w E5 q6 P3 x9 P* H/ D$ z" p
* w& K% f; p9 r--------------------------------------------------------------------------------------------------------, G% g# K9 d/ ~( E
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 k! O# j$ l$ X Q
{
4 z8 p/ ^2 d1 b3 LBaseMouseCursor();
! r4 c. {, Q3 P}6 i% C+ C7 k/ t7 R3 s
在其下添加:9 ]0 q3 a- v' J% Y: X
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); F3 [) U D* R
{
0 {( g) h$ [/ l0 f0 A) m( Q' bm_wndMenu.DeleteAllMenu();
) S$ V& p8 E ~% m8 z3 _9 j3 B! ]m_wndMenu.CreateMenu(this); m: \) C/ d1 N+ K: g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& f, F% M) k+ r5 ~' q- S
% F |9 J: U1 n* M3 Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& h8 f2 A( m' h1 s# L3 t, a{& X6 i: g/ b1 d, U
//P以上级别才可以删除所有道具
( s8 H7 T( I( ]1 m, e2 ?9 w m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% l. F! C0 t% v; e2 Z
}
9 ?/ U2 ^. ?) |8 ?# u& T8 g1 k7 wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ E: S w2 ?1 F: [m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ O3 `" W0 G$ H. {8 Om_wndMenu.SetFocus();
& \/ v5 P& W8 f6 I8 ~3 ~}
/ [! Q. F: i( L+ L- ~$ m------------------------------------------------------------------------------------------------------------' E! n1 e* W6 E8 w7 c' z
*************************
2 S. `) D3 s/ `+ e4 V' @WndField.h文件
% t; |5 k( |. m8 p2 ~* {*************************+ V- H6 w# Q- F1 w2 V8 d! f4 s
搜索:BOOL m_bReport;
J) ^( x% L' O; S K1 w) `其后添加:
( ^; E! L! t) j# ]% ICWndMenu m_wndMenu;
5 L" j0 L2 W7 L搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* H2 ~ M- `' s0 x; \其后添加:
W4 a, B2 K: l0 bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* U8 L! G4 h1 v4 C9 w1 [- {+ O' x( j5 F8 |9 t
( { F7 L- d8 A: A; o |
|