|
|
源文件中_Interface文件夹下WndField.cpp文件' p9 A4 ?2 r' T9 X# R- d4 `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ [" F4 `/ ]& ?8 i! m6 l
0 Q _' `$ @( |8 N, Xstruct sItem" y4 Z* _" M/ u. r) Z7 L! C
{
5 K2 N2 _; J1 |DWORD dwId;& ]+ ]. y: B% c6 K& S) o' [
DWORD dwKind2;7 e4 m4 K5 w9 `" M b; X
DWORD dwItemId;
+ w/ A2 q5 @3 {, p0 u+ T/ HBYTE nIndex;
+ o7 L7 f/ L5 P# A) {sItem(){) d& j3 ^+ Q) x$ Y4 A
dwId = dwKind2 = dwItemId = nIndex = 0;& ~5 T% z4 `1 N% B% J
}8 m0 r6 n6 [% P0 w0 m
bool operator < (const sItem p2)! N" `5 e1 [* `
{4 f: k7 b: o% O' u4 V$ d
if (dwKind2 == p2.dwKind2)
: w* M! W Q0 S& m% k, s {. ?! T" J# \ i) S( g+ Q( ^( v
return dwItemId < p2.dwItemId;% k5 @8 q3 h3 |- m- A
}else{
R$ q7 C) w% y! {( W) m4 ]$ i return dwKind2 < p2.dwKind2;
6 |. u( L! L& v }" A& ~* ~9 x/ m! \3 N& S
}
. p* v3 ~* q6 @8 o8 M( p9 b( _};. d+ i8 J; v& Q( z! u7 Q
class CInventorySort' c, T# l1 [" S8 p' o: ~
{
- B; }) s- } ^1 m- ypublic:
6 b; D' G; y6 r) W! F2 I5 pCInventorySort()8 X& s) J8 C; Z- x' F& b4 T, c' @
{) d2 K- F% E/ L4 u T2 t3 l
m_dwPos = 0;" T4 j5 v( E: e' K- S% A/ o
}$ n f/ l! z: M7 b2 R+ u" _! F5 z
~CInventorySort(){}6 U( a6 L) o$ m& e/ B) {$ x4 |
private:
' N* U" V2 V6 D# o6 k$ Y' a3 nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 D- T5 p9 }( s9 k$ {
DWORD m_dwPos;( a4 U! ~( C( `
public:
$ I* L7 Q* ~; W& M. X1 n9 h; fvoid Add(BYTE nIndex)9 P" f; {) d1 @/ W* o- P
{
9 C9 v# T( a' Q4 b! q if (m_dwPos >= MAX_INVENTORY)
6 l& `- `) ]' [' M% x" f) \) ?0 b) R {3 u) |$ ?* d+ o
return;
% S3 I. @( m- w- m. w I }; D. h: P B1 Y
m_Item[m_dwPos].nIndex = nIndex;! N7 x1 R* w, P ~
m_Item[m_dwPos].dwId = m_dwPos;
" f' S0 Z+ m( n- V: g: a5 N m_dwPos++;/ Q) U6 ^* _% V, z
}$ L! a6 [; X2 x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' V2 L" p1 l: |0 }, a7 Q/ x{7 z9 i/ {3 l3 n8 ]
for (int i=0;i<MAX_INVENTORY;i++)/ Y G' @) W( {: i% N8 R5 y
{
8 p9 E0 h8 C3 F& H) z) c if (m_Item.dwId == dwId)( @8 ]9 o. x! U# Q9 U# j
{1 a5 {% h7 Y6 `
return m_Item.nIndex;
8 [% s0 m0 k; ~, c9 ~2 H. h! b }
9 S) g0 D/ e7 i }4 ~8 `& n$ j! T ]4 f; V, A! R
return 255;
% F0 d# A0 [3 k* T5 z& y' |1 a U}* o* y9 ?6 p2 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( Y: P j! `+ _+ Z* y: L* z' f4 P
{
4 n0 P3 j7 t9 U- x BYTE nTmp = 0;
- X4 a/ ]+ V" u2 n% Z' q; Z bool bDest = false,bSrc = false;& L- Q/ m* S0 C! e* P/ V$ @
for (int i=0;i<MAX_INVENTORY;i++)+ T# }3 q. o4 y7 r5 k
{
& V' e: Y! N' `. L$ _/ o$ o+ ? if (dwSrcId == m_Item.dwId)* b8 S8 J0 ?! ]6 q- U5 s# V
{
) d! t j! u: A4 M* \! M //id相等 则 改变对应的dest和src* Y+ |1 x, }& H# ?
nTmp = m_Item.nIndex;: ?, R+ }/ W& r* [' z3 R( j
m_Item.nIndex = dest;
% S' ?6 K* T+ y7 u }
8 R ?2 r* v( I1 ?' t }
8 X. b a, k0 l# U/ z m* ? //临时数据保存完毕,交换开始" I0 i! G1 A; s: G) t- [# s
for (int i=0;i<MAX_INVENTORY;i++)% ?) j3 A: b- N2 L
{; c# L |6 y2 h0 u. R8 W0 Y
if (dest == m_Item.nIndex); o9 E- B i1 L5 U9 a
{' A4 j5 {. t! D7 }2 e
//id相等 则 改变对应的dest和src5 Y3 l; A) a8 [" k$ t0 T/ }# [
m_Item.nIndex = nTmp;+ o- e9 R9 i6 q, h
}/ _# y9 s- l* p8 q; |8 O# q
}4 ], E0 |, N" v
}' f, H7 W/ }! w6 F; ?) g, N$ y8 |
};8 O, J/ M: j) Q' O
-------------------------------------------------------------------------/ P* ~( d# v. C0 \( ]# h' }' g1 t
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 |0 O, Z3 b( t9 H: }8 j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 G. {+ ^7 l6 M2 v. B紧靠其上添加:
! g% W7 E6 c, ^ D9 W8 Jif( pWndBase == &m_wndMenu )
8 v/ {& t& p& Z5 Y8 s{
5 v- V6 L+ q7 u |7 d switch( nID )% c6 w+ y" D. A$ B' @
{
( E3 t5 Z0 r8 l case 2:# n5 O8 ~6 F9 O- p" ]
{
. |3 m5 s; s9 {+ T //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 i9 K# T$ r& O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), q5 h b4 O+ G
{ X: w4 [$ O2 N
break;
' U; w% F, g. y7 L& h8 i) g }
% ?3 |2 i( ~! c7 h; ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 a* v/ k; k) r& M
{
% s! G) ^. r1 I( ^# g* F$ q* G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: n* I, g; [( u3 ]4 Y4 n if( !pItemElem )
6 D% N- t& |2 K$ h- t: C8 X continue;
8 R9 d' t) t# X- H \4 n2 a if(pItemElem->GetExtra() > 0)( n8 k& j+ \; K- g2 j
continue;- W- M$ e( C2 P" ^
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : j! y( W0 S! b& Y% u, @/ b
continue;( p9 A" ]9 _6 e
if( g_pPlayer->IsUsing( pItemElem ) )6 h3 j3 v2 a l: @
continue;
6 U+ ~: F3 A% u1 Z: b if( pItemElem->IsUndestructable() == TRUE )8 k+ L6 N+ `( X/ m. L
{( v4 r" ~/ |$ N+ b0 _/ Q! ?$ N6 S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 f" W# j; t; F( F9 { continue;
- r6 w3 \8 Y3 A# | g2 m; C }9 Z: p7 H4 [# _
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 [, x/ n- M, N5 }$ C+ L
}1 a& s7 s6 i) U. {1 T
break;' j: l0 |9 |' b& Y8 M
}
+ s" n3 ~0 S8 d& L# U: ? case 1:
9 J1 r- v$ i6 a3 j {
6 P, H( Z; B) b G //整理背包
) m% E s2 z) G; i( L; b- r //////////////////////////////////////////////////////////////////////////
* `7 p; t) C3 ?) I9 o# X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 {5 Y4 u: w ]3 ^% e$ I- L& Q7 z
//////////////////////////////////////////////////////////////////////////& Y, Z/ G+ x. [' p! r) j! M7 l
//////////////////////////////////////////////////////////////////////////
) _# h3 N# s% s9 N! K; h% w CInventorySort* pInvSort = new CInventorySort;& L, S/ K! A& ?6 _
vector <sItem> vItem;
( ?2 G' @ i! F$ l z G1 A vItem.resize(MAX_INVENTORY);//初始化大小) r9 j5 F# S8 m9 d
//////////////////////////////////////////////////////////////////////////
/ c1 r- Q9 u! t9 a/ Y" l# u4 R //填充数据6 \1 s6 v8 C- @9 s
for (int i=0;i<MAX_INVENTORY;i++)
# q3 V3 l0 N- ?6 H6 y {
8 E. a2 s- h' o# m2 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" A- t( w. u" } if (!pItemElem)
! J1 j3 @2 s5 y, l+ i {! B# m2 p$ ~! A) y4 j" j2 V3 f
vItem.dwKind2 = 0xffffffff;
% O% v9 d' H7 R5 J! _ vItem.dwItemId = 0xffffffff;/ Z4 o& i5 R6 D! }; R
vItem.nIndex = i;
+ g8 L7 C' C* r0 g/ w }else {; M6 \. _5 ^/ U' c! J# b7 V; {
ItemProp* pProp = pItemElem->GetProp();: q2 N m6 M- d6 |" B
vItem.dwKind2 = pProp->dwItemKind2;
% q6 j) Y7 w3 {$ u8 f0 G$ I vItem.dwItemId = pItemElem->m_dwItemId;
" K( c; j8 {, K vItem.nIndex = i;
. n. A8 g+ r) c3 v; ^+ ]& @ }
1 z/ M! i6 r" R( J4 O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 Y& x6 F0 I, B1 p }: I6 V+ O1 L2 g$ N& {8 T0 f
//////////////////////////////////////////////////////////////////////////
) ] L+ I2 m- q( ]. x8 h1 N3 e sort(vItem.begin(),vItem.end());//排序& X; c* q5 k* X: g6 F- ~ {
//////////////////////////////////////////////////////////////////////////% n0 E& h, H4 f6 o. y. x" H& D e
//交换
1 J9 F2 Y% J l for (size_t i=0;i<vItem.size();i++)
0 }# g7 _4 @+ X) `- i' } {
& @4 c/ ^! U2 g; u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# Y4 A) e1 d6 {+ e1 f
pInvSort->Add(vItem.nIndex);
3 h# G# M0 q$ ]2 R: C. K }
8 G5 C) L) m @7 d5 M% E T BYTE nDestPos = 0; B u& I+ @* l9 j
for (int i=0;i<MAX_INVENTORY;i++)
' }9 n. x2 j5 L1 u/ X {
$ s% E3 {( B3 n" P7 o! r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ ~) w. o6 g* P% ~3 j1 A4 f if (pItemElem)
/ V6 W8 n+ ^9 E4 k% {; Q+ N8 Q {
, b% Y6 w! k1 J! z. W9 c- A/ k if (IsUsingItem(pItemElem))! W+ v7 g2 S4 u8 Y$ m5 R
{
6 |9 i r+ S( x) k( l //这个位置无法放! {) l0 w3 @ C2 K& F2 b+ V, E
nDestPos++;+ L: k( A+ l% b; J9 C
}
`. h8 |9 W: ?2 X; f: \ }/ }/ J& z0 H$ m- {' A8 O# j0 G9 H
BYTE nSrc = pInvSort->GetItemSrc(i);
( b1 E G3 B% r! ~" X) O- { pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 C8 ~0 F2 P& Q if (pItemElem)1 f6 h% q/ J- ^ R
{. ?8 O7 i. d$ ]9 Q' d. g
if (IsUsingItem(pItemElem))1 h/ |& M7 i9 J) J. A7 U
{8 X% p4 K! s# f0 g0 K; l2 B! a
//这个道具无法移动,跳过9 y S- l; f+ Q* Q
continue;# P# a, w, H* B9 T v
}8 A6 a- n- a4 a9 k( C
}else{
' ^) ?5 q& e# n0 B! Y! O$ q( {! D //空位置 不用动/ T( p2 C+ j* k
continue;
5 R; w: Z0 _- n( v9 y }; D- Z! m6 o3 N, S2 W* C
//////////////////////////////////////////////////////////////////////////
+ ~# g, p' ^) L' S9 ~" `. w0 P& n //开始移动4 X; ]# G6 a4 [! f. `7 X. n6 C
if (nSrc == nDestPos)
8 W5 |) `, Z4 n {
% h' f, g* z) W6 k //原地不动
9 t/ B: g* C* s, ?1 i nDestPos++;
! |/ s4 b5 K" A8 F2 F0 l4 r% c) q continue;' }- o9 i6 `' U3 ~0 Y
}
6 J/ c e1 m" O- @1 Z pInvSort->MoveItem(i,nDestPos);# l9 m6 Z0 n, R# g# _
g_DPlay.SendMoveItem(0,nSrc,nDestPos);- f( k4 j6 {1 ^$ I4 M
Sleep(5);
, h- a5 k* O$ [2 ~0 h //Error("移动 - %d->%d",nSrc,nDestPos);, r, n' `. M8 s( s; k
nDestPos++;1 P1 N* ~) ~& ~3 A S9 X8 ?
}* w* U$ K' F! T. |
//取第一个元素的信息
/ b# P( F+ z3 @ g6 R# }! \7 a /*
' J4 I7 y( d" n. x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! P# B5 }7 J# `* k, z
{
F8 z* s3 }+ k Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ ^: t3 @4 X+ h9 C2 T: z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ Z. y" I% L8 E9 Y
}& I' y% C5 B/ h3 W) c7 x
*/! R9 x7 {/ M f" }9 \6 h1 S
//////////////////////////////////////////////////////////////////////////9 [3 j8 F% }" @5 C& {1 _$ `
break;
0 R6 t! X! ]8 u! U) E } D/ g/ @% ], q* m! \ h2 O. y
}
; Z& `7 h) X/ @# P* D( E}
8 }4 b- P: R1 Bm_wndMenu.SetVisible(FALSE);- J2 o9 g F% K: b9 Q0 y
. T3 Y! j2 K; f! T$ _) a--------------------------------------------------------------------------------------------------------
. ]' R# J# d1 ]+ b* b I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): h. `& a5 a. J
{, X" i+ Z+ U8 S- ^4 c4 D
BaseMouseCursor();6 s( q4 _# k Y& r
}. Q% c- v0 O% V/ n6 M3 \/ f
在其下添加:
; m% o2 _1 O0 T: ^4 m0 [void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ C0 Q. w( h+ I4 K$ ~
{% ^+ M/ s4 t) N. h! |; N3 m
m_wndMenu.DeleteAllMenu();; J4 S4 O+ s l4 Q3 G
m_wndMenu.CreateMenu(this);
" V+ R) N# d, d, r/ z8 d# bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& l7 R* |+ Q7 F# {8 u. O$ j' x+ z, P+ i4 [9 ~
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; s& _ e e" _% B& M5 ?! o{) O: V. Z1 f; W2 X% P
//P以上级别才可以删除所有道具1 A0 s% s& N1 f: C7 a3 F9 f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- x: O8 d9 F/ v3 @1 q* z* a}2 K" z! P# b+ t$ P2 \. `8 ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 J; P% j9 ^# L F, lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 i0 h8 F, \5 g7 q4 w2 G: Tm_wndMenu.SetFocus();
# m1 c1 D" J- l5 m' \% K}5 h$ J' X% G. o5 D6 k' u
------------------------------------------------------------------------------------------------------------1 Y. n, ^* Z, E' Q, z5 r
************************* q+ L9 D( h8 q5 N* C
WndField.h文件
0 I- O n n- `0 L: l*************************; U6 ]' r0 \1 V% k9 z: o( Z
搜索:BOOL m_bReport;4 A8 f0 ^1 A- O& H; Y5 r# Q) B
其后添加:
0 U% d8 o4 M5 ^3 oCWndMenu m_wndMenu;+ K) D! j& `" ?% l8 Y- @
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ r( A, p7 Y1 b' a8 P# M/ C其后添加:- A5 |+ w$ b: J9 Q. D7 j. ], Y1 l
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 e5 |9 Q# b; X6 Y1 S
! h$ c, s& y% k/ w% {
# r# D; l/ m0 a6 k |
|