|
|
源文件中_Interface文件夹下WndField.cpp文件
2 u0 h1 t' t9 W, L5 Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# _" M! b. u; {" W7 {3 j
7 J4 [ |! e2 e: C$ Pstruct sItem2 Y$ N! o; Q8 }) |# T+ W
{& F& O; ~2 x+ j Y$ n
DWORD dwId; q2 K! F; t% Q9 `3 A" U5 ]9 T
DWORD dwKind2;
, \. D& T$ \6 b( ], aDWORD dwItemId;
$ x# O/ p6 v4 q6 bBYTE nIndex;4 S; ^% |2 ^" B% M: p! C, o% M
sItem(){
+ M! H1 ^6 G7 t3 l9 P dwId = dwKind2 = dwItemId = nIndex = 0;0 k& u, ~3 _7 L9 h# j9 @4 Q
}7 S3 G1 u! w1 u0 O
bool operator < (const sItem p2)6 a4 Q" t3 K! f. K0 X0 F8 u
{; J5 L4 E3 L1 M# \# }0 t
if (dwKind2 == p2.dwKind2)
9 i4 Y8 Y6 t( t* T8 w) E {" \1 F( I. q4 `
return dwItemId < p2.dwItemId;
; a+ W& J- L2 Z; s' ~5 a3 l }else{
1 A; Q2 K# a( Z$ ~ return dwKind2 < p2.dwKind2;
l+ _1 V* p& O6 X1 s$ A0 @) _' @) U }6 |5 u# E g% u/ s# w/ _3 X
}& Y4 L: T( F5 n" X2 k
};
. K# N3 O/ L* l( G% q5 Cclass CInventorySort
( W2 W& C' A0 l+ H7 o. P{
* [ F6 E! U, O! Ppublic:3 A: K& v& S2 M8 O7 r' G
CInventorySort()+ ?$ J5 M" g8 ?( s+ I' K" ]5 G
{: [. ~1 [5 N, a! F' J" B
m_dwPos = 0;
0 c7 P- D3 B! B: {}
- |4 k; g9 ^$ P9 f~CInventorySort(){}2 K4 v2 M9 J6 O/ _7 m8 |
private:$ \3 M' P/ m0 e5 H2 r$ |- {
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, D7 K+ H2 G5 J' G. }
DWORD m_dwPos;( C$ K* K, T- r
public:
! j# Q0 S6 P* ~( }4 b4 B. ivoid Add(BYTE nIndex)
7 q8 S2 z" p8 R l+ D$ O{0 w7 x3 H! E8 o9 t4 W
if (m_dwPos >= MAX_INVENTORY)
' Q6 T9 |1 b6 h: F% ? {9 y# A* l3 f) ?+ p; ^
return;
8 K9 M% U6 S7 r$ [% D4 q }
3 _5 }( F) b# h% c m_Item[m_dwPos].nIndex = nIndex;3 O( v3 t& Z1 a+ ~' B3 M
m_Item[m_dwPos].dwId = m_dwPos;
9 h: e7 t6 e# _& a m_dwPos++;
! U" N# `. T4 W a}
' K1 a5 |; ?3 [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. Z8 l2 D, g/ G1 B: Y% |9 @" v1 u
{
5 N1 @8 ?/ F2 L, [ for (int i=0;i<MAX_INVENTORY;i++)
" j9 J4 ^3 i7 S" ^ {* N& F6 R! x- j, y7 S" m/ I) \, b
if (m_Item.dwId == dwId)8 @8 Y7 o7 x! p
{2 Z/ G% V1 q& N8 \ P+ I" M
return m_Item.nIndex;
0 a7 \* b1 F3 J3 z; C }0 o5 @: Z3 g6 X: y: b% i5 [
}% R1 t7 S- g0 N/ G& W( f1 S" R
return 255;3 @( m1 N1 {8 V
}
% b3 i, H+ I( D& x1 z) f2 f( vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" g+ o" Z% v+ ?( _/ S1 ?8 B{: ^% s' l1 Z' t( m# [
BYTE nTmp = 0;
) _2 e- G, [3 o3 x) D bool bDest = false,bSrc = false;
# O. H( v/ ]2 k" l1 d( y for (int i=0;i<MAX_INVENTORY;i++)' `) `1 I! ^( s7 `' \
{
N& i9 L. q1 Q8 @* ?- C' H if (dwSrcId == m_Item.dwId)$ g8 U. v/ u( W4 f
{
w7 F! `) [* N //id相等 则 改变对应的dest和src
) W H4 B' o/ W1 L& _& N nTmp = m_Item.nIndex;7 V! L4 ?" D, o
m_Item.nIndex = dest;1 q* f) n6 o' L" g. ^
}
* u |9 N; ]5 m6 N6 ` }$ d! Y( m N) C0 @
//临时数据保存完毕,交换开始
4 I h9 Q2 e7 V; [$ w+ X for (int i=0;i<MAX_INVENTORY;i++) H1 I/ l' R& V4 ^+ B
{! S4 K- Z) w% i7 E0 c/ P5 b$ j8 ~
if (dest == m_Item.nIndex)
$ S7 a; H0 y5 o7 f8 ]3 v {& \+ Q% l) K' T2 _
//id相等 则 改变对应的dest和src8 k, X+ ?$ L8 v+ b) j! \, I
m_Item.nIndex = nTmp;
2 [2 h7 V* M9 A6 C L }7 @: o3 ~* W+ ^ l) A" B* o2 X0 G
}# Z Z- T- P; n- C7 P: ~
}
0 ^* p( g$ I0 ^6 Z6 u$ |6 S4 m};
2 ~' z* D3 L) v# C' c. X/ {-------------------------------------------------------------------------
* c5 l ?: V" w8 v! u- X E+ [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). y2 @4 U& z. {9 o6 {: Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 U% {" D( X4 \: L紧靠其上添加:; {3 l6 n( b9 N2 R" b
if( pWndBase == &m_wndMenu )
: Y8 O$ H4 p( `( E; ?{1 b6 j7 e+ C4 o9 y, d, ] K1 y
switch( nID )
. n3 \6 O! H+ m {
+ ^! F! L/ n4 j; |! [' ?5 P case 2:1 I' H4 q6 T5 ^* T+ j
{$ d* g/ v! i( w5 p* N, t3 h
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# P* V; C1 {6 n o) S8 \# w+ V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
w& \5 Q+ o) W3 G, A {
2 w( ?8 B- D: b break;
I# N4 U& `7 T: }- d; f; m) S }
) G4 G G7 S- r4 C. ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( L+ R' f4 Z; N" A. w
{ `3 X. [2 p: z, D2 L9 Z0 G3 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" O8 S$ L6 {0 U' n# G* J* J if( !pItemElem )
2 H7 e' q+ `9 d0 F1 V0 h: P" P continue;
! X3 Q9 x3 N7 ^4 r: U if(pItemElem->GetExtra() > 0)2 N C9 N: N- `' v a, E+ g( A }
continue;
- N: s2 J4 K9 f) f2 @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + P8 w0 C$ h: [; t& d7 D! Z
continue;7 X( Q9 d$ N, I
if( g_pPlayer->IsUsing( pItemElem ) )' z, d& B; ^7 ] {) K0 A
continue;) q. `( N: e: I, `
if( pItemElem->IsUndestructable() == TRUE )* j/ T( J4 V9 r: \
{
" I" w! w8 n8 I( d: a' f9 z$ g& c g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" Z& T! s- q. Z3 E
continue;" l( B; D. Y0 M& v9 Q8 [
}, }9 _- Q0 Q- d7 r3 I/ p
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 _% |; ]2 y/ v; I: c1 D3 @9 i7 `
}- w0 W7 V7 [! G+ {4 ]
break; I& n. H! Z6 p5 L5 S! o
}) i3 K, y; I( K" e9 C" c
case 1:
! l( N; m4 O Z3 ` {
# i' l2 ?7 o% H2 l! c8 j& | //整理背包
# E% k# U- q/ P //////////////////////////////////////////////////////////////////////////
1 C1 d, @3 |: R; Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 v0 n- m6 X, X' W* C( z" V: E
//////////////////////////////////////////////////////////////////////////
. k# t$ {9 [9 y5 V9 U6 w ////////////////////////////////////////////////////////////////////////// g7 H: i9 b2 L0 {5 U1 q6 C
CInventorySort* pInvSort = new CInventorySort;) Z! h' T9 l7 K' y8 ^+ q/ G& J( S
vector <sItem> vItem;
; U7 j t# f6 L, R$ p* n vItem.resize(MAX_INVENTORY);//初始化大小
! o8 `8 |9 A4 ?8 s* a: ~4 ? //////////////////////////////////////////////////////////////////////////
5 ?. v- o6 l' A# D4 C //填充数据
" c! K% k" x6 D9 V- u for (int i=0;i<MAX_INVENTORY;i++)! P6 ~& i, i9 b& s; O0 n& {
{1 n/ F# c6 [; g: R ^9 ^/ s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) w1 b6 W0 U9 r# E/ K' R
if (!pItemElem)1 q! }' E6 v3 |7 E- W& Q" `- m2 [
{9 }) ^' D" z( n, I7 ?- C
vItem.dwKind2 = 0xffffffff;
- h: P3 h$ z5 W6 M- ^3 v q vItem.dwItemId = 0xffffffff;
D2 }) N, ]: X p& i vItem.nIndex = i;
' ^2 k2 l% b$ s; x5 w }else {/ T% `% Q5 b: l! k4 e2 U* n+ ^1 V
ItemProp* pProp = pItemElem->GetProp();
; j' E% U3 L' Y2 | vItem.dwKind2 = pProp->dwItemKind2;! ]' ?" O$ C/ p$ m
vItem.dwItemId = pItemElem->m_dwItemId;
8 t( b8 A) \& b* n4 [' ]$ ] vItem.nIndex = i;" g& W% h) |7 u+ }1 Q- R
}4 Z s' J$ t0 K0 C7 o% ]/ ]& {
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! M, d5 u, H4 s, x) J. b }2 Z0 S1 x# B* n. i% s/ y4 j
//////////////////////////////////////////////////////////////////////////
! ?) K" i! z; ^/ O, y6 U {5 Q sort(vItem.begin(),vItem.end());//排序; C. i4 g8 a/ t6 T, Z( w1 q
//////////////////////////////////////////////////////////////////////////
3 `) O; E _+ i c4 p1 k6 k //交换7 X- U1 Z* p8 i* J" Z! H
for (size_t i=0;i<vItem.size();i++)
- K8 w: _+ w2 p& V% v6 W {& S) Q9 ^0 ?! A5 U5 w8 }4 ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! W/ U" I4 R9 P. V. e: h% q pInvSort->Add(vItem.nIndex);! Y& w6 L( x' b
}
4 o$ V( E& e& u: ~1 e BYTE nDestPos = 0;: v E# m% b9 m4 i
for (int i=0;i<MAX_INVENTORY;i++)
( w5 F ?& H8 X3 h, R, D5 W4 e {
! [! b3 v6 F) p: d( c0 ?* }3 [% k( G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* v8 N. ~, Z( F1 h' o; F; B" V if (pItemElem)+ s5 k9 O* `& L5 G; K
{; [! q& m) B) t% Q" T% i3 n3 h, r
if (IsUsingItem(pItemElem))
) Z# f$ s% e" R: q- Q {
$ j( w% u1 e; N- v: Q //这个位置无法放
; r5 d5 [& h6 ?) A; i; z9 U nDestPos++;0 V5 T+ ^/ C3 G$ V* U* t
}
( B/ G/ z2 k1 c# a; s }
1 Q% P1 x; U& i0 j u1 O BYTE nSrc = pInvSort->GetItemSrc(i);
9 n& ]8 k* r: |' \. `% s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! t( h( `' w: l' E5 P if (pItemElem)
* \& D0 K; f6 V# Q {* ]6 d6 _1 Q) a9 i9 K! B9 ]
if (IsUsingItem(pItemElem))
2 j* c) `( q2 u+ y4 z) K# l {5 |$ ]3 K$ \' [' C& z3 d
//这个道具无法移动,跳过6 S& y$ l+ |* g6 a$ V/ B
continue;
) a' ?% ~$ w- ]7 U }- \" J7 c# L2 Z' _0 c- H' @2 |$ S
}else{) `: I- y' Q. M1 L& E4 P
//空位置 不用动& r: j9 o# Y/ q
continue;
) G1 C/ z5 |( } f, H$ O) E }
( k5 a# r5 X A4 [, x0 z, b //////////////////////////////////////////////////////////////////////////
! x2 b! a4 G( f3 W0 i/ l/ h //开始移动
' \% f& @7 Q) U% Y if (nSrc == nDestPos)
8 r* F+ `" x2 z' H {4 f8 A+ b9 J3 L; \; y, g
//原地不动
* i! a& y" t& Z$ n" C* E, K nDestPos++;& T( P! t) G. z k2 @ l$ L
continue;
" O( C' u4 t$ ?7 g7 v6 e& } }' T# m. o* Z' i
pInvSort->MoveItem(i,nDestPos);1 U% u; c9 O3 `2 \) T- V5 r% S
g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 h1 ^9 D5 ?" }/ T+ T. w7 B- c
Sleep(5);
* F. T* k5 P! k* z/ p# d7 p //Error("移动 - %d->%d",nSrc,nDestPos);* Z% u t! ^6 e7 l- t% P$ F
nDestPos++;
; Q1 S& m5 h5 z5 i' m }
! e* f' y+ t$ D5 a //取第一个元素的信息
+ X# C' T% U0 m) D% w /*
' m( ~( J2 ?# E2 n+ C/ o2 V: V& i8 Y9 Y3 U if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" V. U& Z, A3 t1 g) Z
{
* H0 R: X' [% ]' D; S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- s6 q( Q) A. t. ^* K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: E7 g8 f7 Q5 e }
. F3 n9 r+ _9 M" z, W( N# W. x */
8 F7 v8 G; \6 r! L //////////////////////////////////////////////////////////////////////////. y$ z1 }. u; U0 k9 q/ j% w( U7 `
break;& {, h5 R! v0 i( A; g
}
0 U8 @) N! h+ Z: u4 z }
! B: I T7 l! B. e1 _}
( p, q9 H& N, M+ J% F/ qm_wndMenu.SetVisible(FALSE);
2 J W7 h0 i. P- r' }8 ]
- V' S% r2 u9 z5 N--------------------------------------------------------------------------------------------------------) z( ]$ J1 ~1 A$ p9 ^( v
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; `7 D$ D$ w `" _{1 c4 Y) Z1 ]5 Q) d+ L( e
BaseMouseCursor();3 ~9 u$ A, E; Q8 p% [' h& a2 d
}3 I6 Q5 F2 _$ q
在其下添加:
8 }/ m* U) n/ ^$ l# r9 t3 ]5 kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 A* j+ n, A2 W4 [6 w* y0 A" E
{# }% y! N6 a x' `
m_wndMenu.DeleteAllMenu();
4 m& D* }: M4 I9 y2 m/ {" @m_wndMenu.CreateMenu(this);
, M# z9 ~* y# {6 l& P0 Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 r+ u6 O2 V7 u6 l) Y% r2 ^2 U2 i& D" W2 ~; S2 Q4 e
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 r* X# D3 C2 z9 n6 @- n% W
{
+ R$ z: ?, p/ \" B( ^) | //P以上级别才可以删除所有道具
. G* t4 I `0 S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) w" r2 N- t/ ?0 N}6 H- h0 g' K; l: V7 }
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ W2 P7 s1 k6 J. ^4 b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) j/ S3 \. @! N, p am_wndMenu.SetFocus();9 [: ?* N* R+ S: B
}
, `- r6 X9 u+ V7 w------------------------------------------------------------------------------------------------------------. e& \" x5 G2 P/ [6 h! M7 R
*************************: u8 r) J9 N" A5 S+ U
WndField.h文件
, H6 ?, D: G8 | E7 u+ t' [9 e*************************
6 x. k/ @! J7 X5 E, X6 j搜索:BOOL m_bReport;. s: K4 ]9 z2 V6 x- \+ W
其后添加:* v" t+ v7 |1 I: Z
CWndMenu m_wndMenu;
% q6 b+ `$ _6 x4 I6 I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# ]! @0 f- y ~# E& L/ X其后添加:
6 E( b; }4 }& Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);5 q$ q, c5 P( B0 Y4 i
: n) G2 X$ }* L: E. y5 W8 q
2 _, B) w0 f6 \% c |
|