|
|
源文件中_Interface文件夹下WndField.cpp文件+ C$ Z1 m0 j5 T. |( a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& H, A1 L; ~, P' N( K! j
1 k. P, v! J! O6 }) `! J
struct sItem4 H Y0 x# O' ^: W) \; F
{. d0 L5 h4 j& e3 m& t
DWORD dwId;5 T4 J# p- l8 x2 h, s$ j% U& }
DWORD dwKind2;
c: T# [( F$ Y4 ~7 }! [1 ]DWORD dwItemId;
1 ?3 T e. X0 N. jBYTE nIndex;6 ~1 F2 `+ j0 R, Q$ |! `
sItem(){6 ?( X# D+ O9 z
dwId = dwKind2 = dwItemId = nIndex = 0;
& B5 w3 N$ i9 W. _0 Z' Z) g}, ]3 o/ t/ _. m
bool operator < (const sItem p2)
7 [9 c; g0 B' N+ g5 a{ ?, D# t9 {. M, m
if (dwKind2 == p2.dwKind2)$ S% v9 t5 s3 s& ~: N4 O
{
8 p2 Y1 q% Z" V& _ return dwItemId < p2.dwItemId;
! [5 B% I. K/ r }else{
# Z3 v' l( l, b, U" A4 M. x. b& F return dwKind2 < p2.dwKind2;8 A: {/ X0 x# D! Z% b i" h; V
}
( L$ `% \+ i1 L: G4 v# C}. Z8 J4 B! ?, K8 B
};
2 c8 z" J+ t$ y1 t& N7 B' e* M% nclass CInventorySort4 P' h7 ?0 Z% v, v7 T; `
{
/ g Z3 U U* P/ \: S* j+ Bpublic: h" F& b7 Q& V% ]) Y- l% ^ E- ]- s
CInventorySort()
8 x( {4 ~# p* P1 l9 o# p/ {{& Z+ ^- d2 r4 |( f7 l9 j" b9 ]* r
m_dwPos = 0;9 w& C- ^" Z% x( @" u/ |% Q) o) j
}# q9 k+ b* G! K9 t5 R
~CInventorySort(){}+ a6 {* F6 H, b0 b5 V
private:! X' e. U {* ~
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ Q, X5 l- S( u& s" XDWORD m_dwPos;
- o: l* c, M' A- ]. W- c: vpublic:
1 T- s' O F- wvoid Add(BYTE nIndex)
3 a4 a) H2 U' L$ c! g/ b8 R{+ f: L1 Q6 x: W2 v9 D2 w
if (m_dwPos >= MAX_INVENTORY)! m$ c; t' o' @
{0 {* x+ Q5 Q* O6 M- k2 E
return;
: e- y A2 ~7 A+ Z }/ Q z+ D* l1 T
m_Item[m_dwPos].nIndex = nIndex;8 K# H( H, a' \5 P. _/ H6 k
m_Item[m_dwPos].dwId = m_dwPos;' }( X5 O& R2 M- j# p
m_dwPos++;$ m5 s6 q- g( C* e- z- U$ C# x
}* i1 M! ]) @" Q: a% P8 X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" L, o( ?& q3 x i1 h' u9 O3 t7 `{6 g1 P2 M, o& o$ n2 I- c
for (int i=0;i<MAX_INVENTORY;i++)$ M) r, f" n& v2 ~, z( h6 @3 C
{
4 B1 f H4 V& F' G4 k if (m_Item.dwId == dwId)
. x) g' m8 f& L& m% \ {2 m2 X' a l' U0 f7 q
return m_Item.nIndex;
- |5 N; Z' |. j }
( H' a) P" f$ [) h }$ g0 L5 ^1 m7 J b3 H# B4 b" g
return 255;% ~$ {. @3 G$ r3 x, y! R
}3 A2 W$ |0 I0 @
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; j6 M. [4 R, c! A1 f{5 F: {! w: n' t$ C
BYTE nTmp = 0;1 i! j" Q- ]. ~3 X+ w1 D6 @
bool bDest = false,bSrc = false;( J& g, L/ s" C: w4 a. o" @9 ?+ Q
for (int i=0;i<MAX_INVENTORY;i++), @/ E# Y& F% [5 h7 z+ z. g
{- x" j! [) F; H) [; K
if (dwSrcId == m_Item.dwId)& P1 U! x2 }+ b
{
/ {5 u, l$ r/ } //id相等 则 改变对应的dest和src& z" U) Z8 ~- c. E% ~; D: n: l
nTmp = m_Item.nIndex;
6 w9 C9 c) @$ V" C3 K8 D7 e m_Item.nIndex = dest;5 i& J! I9 @4 ~- t
}" u% J/ f# |% t4 B2 z# j! v
}
+ I ?" {/ s/ N5 f& R! G/ d: B //临时数据保存完毕,交换开始9 L; m- O& q6 J+ `2 G; M( {
for (int i=0;i<MAX_INVENTORY;i++)6 m2 e+ k7 Q) J- {6 R# |( M! K
{2 z+ N& t% e7 Y+ Y/ {% r! U; J! h9 Y7 p
if (dest == m_Item.nIndex)% R( }3 W' s: l2 O- p8 q
{# x5 v8 E. h" e0 q
//id相等 则 改变对应的dest和src& I3 P9 `; c6 b+ r1 J% C) y$ Q
m_Item.nIndex = nTmp;1 G: R& @6 q+ W. s* c. D
}2 b0 e6 ^0 l ^0 p7 D+ I
}
7 M% t7 w! J- y9 }) k' l}- l0 a; f k( x& h- U( C# i
};
" w4 S, G# i- {( z( B. s$ U* r-------------------------------------------------------------------------
% J0 g! }3 A1 s7 R6 k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 |+ }" \7 C0 G& q3 Y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ }4 C/ M/ Y- i$ m# P
紧靠其上添加:
" j6 u. |3 p5 y+ }9 K- X V/ pif( pWndBase == &m_wndMenu )
, c( b: i; x' H$ G& C{% {1 O, t3 S. \
switch( nID )- d# K) A" L k
{
4 B& V* Z' ]3 m; c case 2:! z; P1 x) M8 b5 h5 S0 G
{$ ~+ B+ X" _1 Z" i0 W- ]: p% I# S
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; \( d; m8 u. j6 J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 K% A% V4 Y& q6 c i8 U
{
6 b. v& H$ z( Q& F- W2 F' {% O break;8 D$ s! q! s/ ~5 Q' }1 e/ R
}8 ?" a! O' H& } o2 _/ p$ t$ T
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ W5 B6 p" E6 B ]- R
{$ n' U6 [" r" o, @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 b( v# D/ y( o3 n" i/ G& R" c5 s, R- @% E if( !pItemElem )
8 y4 P! E! a( @& p# ^. ?. ? continue;/ h, N9 B9 U4 a! {/ t* W4 m
if(pItemElem->GetExtra() > 0)
, v( ] s" q8 ^( q/ X9 h0 U continue;
7 N! N7 [& _+ i. i& `3 ?. ~ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; Y7 [ R, t- N& _" G
continue;+ K5 q8 ]5 V6 ~$ _
if( g_pPlayer->IsUsing( pItemElem ) ) R% r+ i* u% w
continue;
/ E' }7 F% I9 \2 j5 s w1 R if( pItemElem->IsUndestructable() == TRUE )8 e7 `# x* e1 W Q% c2 {6 w' y
{
; x5 U7 B" V; R6 ]0 n" c g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( s3 D3 `' R j" J
continue;
F; l: ^! T5 b: z }$ p4 M+ W& ]) E' }- X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. u( T# Q) i( j, d8 E }" \1 D9 \) E6 b7 P
break;
) ~6 c! U8 o. E' E }6 O3 p! m3 y% Q6 C; z
case 1:
: }+ C7 A& I9 p+ A+ o% W {8 Y; h9 f- Z3 b. X& ^( `. N
//整理背包( T; r/ r0 [4 ], |9 y$ Q! l; D
//////////////////////////////////////////////////////////////////////////
4 P) F3 ~+ o# W( z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( q& u. o0 H, p
//////////////////////////////////////////////////////////////////////////" X3 D' b% B2 Z0 B
//////////////////////////////////////////////////////////////////////////
2 c3 q" I" j8 t! k CInventorySort* pInvSort = new CInventorySort;
6 S: P) c( M& V% h vector <sItem> vItem;4 A; H5 q; B+ N" Z: o7 Q8 J
vItem.resize(MAX_INVENTORY);//初始化大小
+ K+ x0 q ^ ]0 M8 t8 I //////////////////////////////////////////////////////////////////////////
& ~2 |4 d; z" b$ g //填充数据$ g" c$ }* z, |2 X# G) J9 M
for (int i=0;i<MAX_INVENTORY;i++), T0 t9 [; r+ N* N( z: H
{
# h4 z$ J1 Y! B; V& v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" {$ k' Y$ U+ D" J/ n
if (!pItemElem)
$ x1 t7 y+ T; V+ h; J: {+ B0 z {. ^3 c; P x- O' E; R- S: Y9 V( R, h$ q
vItem.dwKind2 = 0xffffffff;4 \. j* e5 W4 V8 q/ r% O
vItem.dwItemId = 0xffffffff;+ ?5 |; y- {0 y9 `6 ?( ~# q
vItem.nIndex = i;
/ j! e* A+ r0 D }else {
) V+ V8 C6 K' i4 C- J" b ItemProp* pProp = pItemElem->GetProp();7 E+ N4 ?+ p& f8 e' ~
vItem.dwKind2 = pProp->dwItemKind2;$ D; I4 u/ @( H
vItem.dwItemId = pItemElem->m_dwItemId;5 o- M' g) U. ]
vItem.nIndex = i;0 R8 q# t s8 K
}
% _$ `8 f) g4 h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); _' x, L' `7 ^
}
' [% A# j) Y$ l+ X. E" O //////////////////////////////////////////////////////////////////////////
! S1 `# e. ?7 V) z; o sort(vItem.begin(),vItem.end());//排序
" `' m: ]" Y/ h2 A; p* `' `, p //////////////////////////////////////////////////////////////////////////& z2 D+ A; h2 z8 D/ c
//交换
$ F* }# Y, g- U3 a+ }7 w+ l for (size_t i=0;i<vItem.size();i++)
8 K2 b+ f; l0 { {: E+ N- ~. B& D2 j8 k, d
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" b/ N* ~% p U7 T5 y/ i
pInvSort->Add(vItem.nIndex);
6 U+ I5 z3 `! Y- m G" i5 l# A }
, e8 S. o& T- z/ G+ K1 s BYTE nDestPos = 0;4 W) |; r+ k* |# j
for (int i=0;i<MAX_INVENTORY;i++)4 c) F2 H5 u0 I2 o" O
{
/ ^% c& t4 |+ z5 h4 ?7 u# [; [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 n, F0 X! h( m2 D o1 _ if (pItemElem)
7 |, h9 e' P8 d {
6 g; m! u8 j' D7 ^8 W if (IsUsingItem(pItemElem))5 y0 _1 |# m5 ?
{: R5 ]! g6 u* z6 e7 k! t) p
//这个位置无法放
7 D+ T9 O& V4 H/ z nDestPos++;$ c. D9 E% F/ m( N7 w
}
3 {3 q+ L5 c$ h }
& [4 c0 B# |2 r8 ^1 K/ ~8 P% W" G BYTE nSrc = pInvSort->GetItemSrc(i);
+ i- G/ o9 o; M7 U' i$ |8 G pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) ~' K8 B) L5 d$ z. k8 W3 `
if (pItemElem)
" t( i! k/ v: O% }2 ~4 T- X {8 c! t" h, {: s& _6 N/ R
if (IsUsingItem(pItemElem))! U1 Z0 z4 Y8 d8 R4 T
{0 a2 N/ u) e0 j* ?' ?
//这个道具无法移动,跳过. e8 I& ^: N: t9 C# e" \' g
continue;
2 A3 N& \4 @9 H3 h5 ]% \5 y; n }
6 h. r$ M4 a$ S* I }else{
2 _& D+ D8 d- q6 ^ //空位置 不用动
5 P9 x5 y8 R$ r+ S @) H5 Z continue;8 c. e- E3 \' h( X& s9 L
}
6 ?' ?5 I2 h: s7 L; x //////////////////////////////////////////////////////////////////////////
3 l- e1 T! h! \! ?1 B1 H //开始移动
/ b# z; v* P3 t% k7 l if (nSrc == nDestPos)
2 x/ R' v8 T; W# L- A0 }" A8 j3 f: v {
! H- t5 r4 L: X$ ~ //原地不动& q: ?/ c$ z7 j; v( N) t8 k; {7 F
nDestPos++;0 q8 |( N' P" [
continue;1 Z J3 _% E H. \$ ~! {
}
1 z: d( j" ]) V/ {% t- d pInvSort->MoveItem(i,nDestPos);
5 A9 Y% T G0 Z# p. E* L1 g g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% i) U2 _: Q" I! ~$ x$ B" T Sleep(5);
) P/ U# {1 S; }# n //Error("移动 - %d->%d",nSrc,nDestPos);
) b n4 E& d9 W0 b nDestPos++;
) ]4 J2 c; R( Q: Y" I, Z }. _; U: z2 u# i* l
//取第一个元素的信息 T% W& O( G& }+ t. P. j
/*6 |1 Z- c4 a+ X: b, [8 @
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
x$ `' u, p: ~, o$ s1 F* X6 h {
; M; c! F+ D( ~7 I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' m I' p. q0 B0 S4 ^ t& p' o g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* z) o2 R* i/ z9 P5 l# `5 O }: o$ \8 [9 H7 B" F7 R8 ]: p6 E* W
*/0 N1 P% H) {' n- z9 K2 d3 j
//////////////////////////////////////////////////////////////////////////; Z _; K- s4 J* ~# A4 @7 q
break;
0 M! ?2 |" P+ P8 s } B5 [. V8 @: W' G S
}
, n! z/ c/ b3 A8 W5 C, z( }}# n6 w; \# b/ H- i0 c8 {- t" ~5 G
m_wndMenu.SetVisible(FALSE);, d4 ?. M% T k6 W4 `7 ^
/ j2 k2 a' k/ f$ K( Z
--------------------------------------------------------------------------------------------------------/ a% O+ l2 A$ R) F" @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), h s9 W% U0 P4 F
{# D' K' z) v1 |( o7 B) Y! p9 F# |
BaseMouseCursor();
' P0 D, w% E. Y a; R2 M}( V7 h: L- E: W. \" _* f, \
在其下添加:
0 c9 d( B7 S7 t* N- \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 o) G* e+ M4 D: `
{! f1 M: B/ K- L& y5 y
m_wndMenu.DeleteAllMenu();. e( `0 D! V* c2 B8 |9 \
m_wndMenu.CreateMenu(this);
/ p: x$ y7 m2 p! }8 J( im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. w+ h( @( A- ~' j w( k7 S9 @4 X K) a0 s# t1 M! }( w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" w9 G( o0 C+ z" E8 A2 Q8 C" U/ s{! W) r" M! R. H( _& V- ]% m2 m
//P以上级别才可以删除所有道具
( E8 l' a: m. N4 J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 y0 {1 T3 Z6 W1 ]& G @
}
4 _! b0 v+ a3 A5 h E. b! j* im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- G: Y6 l6 v, Z- a: zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 x) w: v) q$ A; `* a: U3 T
m_wndMenu.SetFocus();: e4 y9 p' m! G& |
}
' E1 t4 k* w E( O3 E0 f3 S------------------------------------------------------------------------------------------------------------; Q8 j' S1 X6 z1 U& g
*************************
! H8 Q# x* w- V: V8 TWndField.h文件8 S3 d! O4 E* K0 m( E
*************************
{- z& _9 t! @& a8 k9 k搜索:BOOL m_bReport;
1 k" r4 y) |' E; ~其后添加:
, g, j: e+ S3 M% R* k, TCWndMenu m_wndMenu;
6 G7 _! @# s1 ?; K5 ~搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% P0 a6 g I A! e8 e
其后添加:
+ ^; o. k% Q2 l9 P& W$ x) Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);7 C' {! x) c( t. u; {
! R- _( S- f. n: m& V. M: ^( N8 ^
+ \7 R. M- ]( R5 I |
|