|
|
源文件中_Interface文件夹下WndField.cpp文件# B. B* X! Y j7 r) T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 X0 c/ Q [* a( M" U9 i# u; D# m) M* X/ _8 p/ w8 e- i
struct sItem
9 l1 b$ f" r6 p( {{+ k: U$ y; r7 w V5 C6 f1 ?
DWORD dwId;, y7 t) ?8 H, w4 W5 t0 k3 e* F
DWORD dwKind2;
: f+ C |2 m( r S$ @DWORD dwItemId;
; P* \2 Z8 r4 E1 bBYTE nIndex;
% T0 p+ c1 D! CsItem(){
# @& W6 u# I( \5 ?" ]- I: M0 J dwId = dwKind2 = dwItemId = nIndex = 0;/ s n& v* @2 @0 |
}8 O E" ^# b5 j1 U# D$ o
bool operator < (const sItem p2)* V: e( z. U _. Y8 V
{
1 u% ]- q; V6 v& Q! b if (dwKind2 == p2.dwKind2)- H" N$ v x3 t
{
, P" y! C: {, u' }1 u X2 p0 l+ m$ R return dwItemId < p2.dwItemId;
: ?2 x) x. T7 ? }else{) J0 N' D1 ^7 c) J% u
return dwKind2 < p2.dwKind2;
( m1 R+ R: |( [" z) u }
2 `! C5 t \0 m5 b! B! f2 A}4 v& B2 c( L3 [) f* {2 r0 R
};2 v$ }0 }2 C+ w2 M" c
class CInventorySort
7 M) H+ H8 S, O) N{
) j; Q3 u) P7 v1 P: `* Npublic:
" o9 b- P% Z/ YCInventorySort()
Z }+ q$ c# ]: Y7 k{0 g! o$ C$ Y' f4 b
m_dwPos = 0;" S& S6 C2 Q9 t3 @/ n! U& N t( e
}- D0 H/ j4 g) j, x) e6 B
~CInventorySort(){}8 w, b1 b) b* v" @6 I. i8 K
private:0 Y- M- X4 }$ A, C- {+ T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 R" h8 e3 {8 |7 t( C$ J
DWORD m_dwPos;5 c3 \; {* v5 q0 @
public:
7 s; H3 i4 G# k2 X: ~void Add(BYTE nIndex)
; H; S6 B( f& \8 T; Z. O{- w V3 a M0 e/ d0 |
if (m_dwPos >= MAX_INVENTORY)- k, \8 e/ M7 [9 l; |
{
# I2 Y Y' w3 |" z% Z return;
8 S$ k# D. Y3 u4 N }
- V& n: X) E$ t) Q m_Item[m_dwPos].nIndex = nIndex;# F- h6 x' q f) U
m_Item[m_dwPos].dwId = m_dwPos;
0 o% N" x: @) b0 P8 w4 V+ n6 k- y m_dwPos++;
3 t% y* U; x% l! C2 R+ L}
) E) Y* P) K+ f1 U8 r( q hBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
X- F) u% C) F{* C0 B1 Z/ p8 @$ B" T
for (int i=0;i<MAX_INVENTORY;i++)& f5 J, _. T- Y, j( v' H$ e
{" v7 {" J3 ^1 l/ q7 \0 }
if (m_Item.dwId == dwId)
2 j0 k" N- F& Q% b% h& \ {" A6 p5 g3 ]3 x1 k& B" {
return m_Item.nIndex;
2 [* P4 d$ L$ p7 b7 e, N7 Z/ | }2 @) G$ j# X- V
}
% k+ S$ {/ q2 `+ B% Q" ]% Y return 255;
, u" L9 k0 \4 t$ P$ ^: y m}* z7 e3 D, Q" f8 x" {( i
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ C5 U4 S, @% J/ t* X% E
{
! K5 ^: z6 f3 p, G BYTE nTmp = 0;
2 g# P0 H1 d' N4 P5 p bool bDest = false,bSrc = false; H, v5 S7 n( v' G( i1 K8 F
for (int i=0;i<MAX_INVENTORY;i++)1 p/ {5 R0 V( a7 c/ K
{) m9 o; y' N5 u
if (dwSrcId == m_Item.dwId)
# _7 o* H' g6 h: B5 I- `+ w {0 r4 G9 {6 L; o1 C
//id相等 则 改变对应的dest和src' \# q3 L* {1 k
nTmp = m_Item.nIndex;
) C5 ]5 p2 b8 R. A/ U! r4 L m_Item.nIndex = dest;+ s9 g6 h2 W! q+ A& S K
}9 U5 {, K, E# s9 ]7 [
}, i0 N, K* i# ^9 ~* X9 @+ \. l
//临时数据保存完毕,交换开始$ S r- Y) e" K* u" X5 n
for (int i=0;i<MAX_INVENTORY;i++)
. J; X* j8 y" J7 ^ {3 e# h2 X K$ K. r/ m, D2 }3 z) C
if (dest == m_Item.nIndex)
3 b: \6 y( ~# j6 O$ a m8 { {! {: m' \1 H( X) I4 `- }7 h5 d) Q
//id相等 则 改变对应的dest和src4 H" H2 ^3 f+ F. D$ p8 z% y; N
m_Item.nIndex = nTmp;0 {; b1 K% g \! |) p- N" [/ m
}
; o j# {9 _5 r! r- i }
9 l( y% d# f$ f g}
; f% O8 T- X, r4 t};! y. S$ s7 B# i% {' T
-------------------------------------------------------------------------7 d' B* Q9 F: @7 l& c
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, S4 V) a/ t3 P6 F2 F$ k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( ? H: X7 F" g紧靠其上添加:
+ H) e5 ~) D, X; Jif( pWndBase == &m_wndMenu )
& u" \4 h9 x" l* r5 R{2 w3 C r; e- G: I ]
switch( nID ): ~5 g# u6 U3 I9 B2 q5 n6 E
{
/ g! @- U- i& x# a case 2:2 ]# T& Q6 w: n6 ^& t5 _8 \
{8 H8 T3 b3 n1 P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 m0 J$ o7 }% F% f* E) K" q1 K
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ v! O3 ^0 q8 C% p4 F5 E
{6 M; `) n" z7 J' K0 i' O' E
break;
2 y' v2 }1 W+ a }% \; H% S# V3 H5 q. C& I |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( O3 R" x, P. F1 o {6 j. k# X* U8 g- v8 J q. g8 Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 K# f+ \# q P8 l$ Y0 X; ?" p if( !pItemElem )
+ T4 {7 U: }! P7 l% L. | continue;
5 s# C, A, i$ \0 j8 b; _8 k if(pItemElem->GetExtra() > 0)+ h- Z+ h, S% D8 }/ h5 x3 d
continue;% z6 y2 [7 @6 Q4 N/ y- Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
v r% R7 i( P/ F+ _; p b continue;3 A& l# C# k. @, W7 K6 e& @8 j9 J; m
if( g_pPlayer->IsUsing( pItemElem ) )
, |9 @9 N1 Q+ [' M* ? continue;/ K7 U- s) z( x# ?* Z; {5 w9 \
if( pItemElem->IsUndestructable() == TRUE ): Y' G$ x. o: p/ z2 M
{3 m) s) K E, d* r6 [8 E
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 ?1 F5 {; E1 ^$ [
continue;4 S% p2 d1 _) s, H- D7 s
}* @/ ^7 }: A" G! V/ v0 d
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); Z: A0 H$ T; T* L7 C
}
( d3 F* Q7 E* r break;8 o8 D4 N1 L& j! e& I
}. o1 [+ O$ B- o% ^
case 1:2 m: W% I" N9 |
{) m: B: p9 x/ h! J+ D
//整理背包; o. t2 V: {$ ~7 L; V
//////////////////////////////////////////////////////////////////////////$ o3 I( O1 v* k0 J
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 o& {" C. _# _7 C
//////////////////////////////////////////////////////////////////////////
* B. H9 K' }" ]3 u" c B I* P //////////////////////////////////////////////////////////////////////////
~" n! J) [2 O* j2 M CInventorySort* pInvSort = new CInventorySort;* b& z6 b( S$ y: i( F8 \* z2 U1 H2 x
vector <sItem> vItem;
. R* t: X% q- z6 ?3 h) |# q vItem.resize(MAX_INVENTORY);//初始化大小2 j) O2 s! ?" m; b+ e
//////////////////////////////////////////////////////////////////////////
' G) p" ~8 ]8 Q/ @. p //填充数据" y5 |1 O$ L3 N- |0 E H y* Z
for (int i=0;i<MAX_INVENTORY;i++)$ H3 Z* x" t$ O, M- e+ y
{
* ]) S; O+ h( R8 O+ E0 W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# D' U. s! C# ^ if (!pItemElem)
2 f; G. G) O5 @; O$ y' M7 I {& O3 a( W$ z& I d V: \: A
vItem.dwKind2 = 0xffffffff;
0 m* n9 z# ~3 h: v: D0 L) g vItem.dwItemId = 0xffffffff;
0 `1 \" m( e( g: f$ } vItem.nIndex = i;# V: a& P( R- S4 o8 a! p
}else {# ?3 {3 N7 ^( @0 h4 c' b" `' x) L
ItemProp* pProp = pItemElem->GetProp(); j% p# s; t3 J) K
vItem.dwKind2 = pProp->dwItemKind2;
) w8 L$ C( s. Q. l0 W+ D vItem.dwItemId = pItemElem->m_dwItemId;7 H5 I( ]" i. c8 ]
vItem.nIndex = i;1 c0 |+ e! B+ v/ f+ e d6 J9 ]
}! ]; i/ E P3 ]- ]" \7 ~, O: H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 J- y' F. U+ t/ K# O }
, l0 V3 B5 J+ m$ [# E //////////////////////////////////////////////////////////////////////////9 `$ W f# J7 E( ^) ^
sort(vItem.begin(),vItem.end());//排序
3 ?$ V" ^' ~3 O* I //////////////////////////////////////////////////////////////////////////% f4 N! |# p- _; z3 n
//交换
. A3 L* _2 ~; U- z for (size_t i=0;i<vItem.size();i++)
# `7 \! O8 u9 t5 l {4 k4 L& M8 T+ g4 r4 q7 J$ i6 @# o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. J! p; ] c9 `( X2 e+ F) f$ \
pInvSort->Add(vItem.nIndex);. e/ [1 w5 d- p: t4 S( {1 g
}
! F* _! b- ?/ x+ c4 w4 a BYTE nDestPos = 0;
% G! `3 h5 t9 \7 ?0 e" G1 k for (int i=0;i<MAX_INVENTORY;i++)1 A/ T( b. W% i/ G
{3 F3 R8 B9 w; N. Z) Y% Z: W, G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 f$ C7 G3 m. S- i* j" b if (pItemElem)
) l T# h- c3 J9 n {
" _' }# }: H" e7 R& A2 h9 L if (IsUsingItem(pItemElem))
# T; e, u) H( s {
! ?" G K ^" w' M //这个位置无法放
2 m; t/ z+ [. z; S9 }* } nDestPos++;
! t" t9 Q2 R, T1 Y" q* x. b } T& `( K; A6 V5 {/ k' D5 ^3 K/ J! r
}) f; `; {$ r1 Z$ F
BYTE nSrc = pInvSort->GetItemSrc(i);" D0 F x6 e' Y1 I/ s5 c$ Z' I; z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
G) Q h" \+ f5 F* ~ if (pItemElem)
9 B" O6 e1 s* { {. a3 s+ o6 i1 ?+ }/ {3 {
if (IsUsingItem(pItemElem))
0 D' B9 |4 Z. C' U2 D2 Y& C {; B4 B; w/ P, T% ^4 K) D( k
//这个道具无法移动,跳过
# @: Y" d* H/ Z) ` continue;
) _1 _' x0 n8 k$ s }, [; c; W6 z/ \* \8 [! Q
}else{0 g; e- N* e, A% C
//空位置 不用动
% q5 M( @: s8 @- l continue;7 [9 U% K0 n) `& N6 K+ U, x
}5 v6 F0 L( T k: Q; e/ h' r
//////////////////////////////////////////////////////////////////////////& C( y/ r8 K# T0 [' T% A& j, |8 h
//开始移动
* D0 U5 t+ y3 @. y$ Q- o if (nSrc == nDestPos). P$ ]; J: R; D3 v3 i
{
) w% j2 X* l, d8 B/ U //原地不动
8 {: X7 q/ P7 U3 A/ e& g5 r nDestPos++;, l$ f5 G2 o Q0 L. I" ^% Q
continue;
6 G7 \; w3 k$ z! b }
% \, R4 g/ }7 i: `% h b pInvSort->MoveItem(i,nDestPos);6 w. T" j) G/ M) c5 k" w' C" y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ x. j6 S5 U6 r2 P$ D- D Sleep(5);
) [6 r4 \' F& |7 }1 t$ K //Error("移动 - %d->%d",nSrc,nDestPos);; d" }" \+ G" w6 [! H, \' g
nDestPos++;
' H3 o/ f5 h2 M+ h( G7 y) o }
! ?, _+ V; J* t1 n4 x M6 ` //取第一个元素的信息; J8 p' W& X* u: Q* P' p8 t3 Z3 [
/*/ {$ q" O6 ~6 W( g
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 k. C s* e, n% x8 p" n* O" U, f {0 p5 `( b8 o5 \! }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 w% X, D: F; ~* ~+ v. D2 e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# }- o8 q- k: S6 Z, n) R9 x }- E! K' \5 L6 x/ _
*/9 e" k1 h' g3 N2 {1 ?
//////////////////////////////////////////////////////////////////////////
: K& @! u' [8 q, N" k) Z/ ~ break; S; @* h+ g3 B6 [ V& }* h8 }
}: G# w1 ?: U- l7 ^6 \
} ) U \" J' F# e5 z+ }' }9 ]
}, k# t* y' n6 T4 \3 L# V
m_wndMenu.SetVisible(FALSE);$ W% o- x8 {9 i
' k9 J/ W% u/ p! ^--------------------------------------------------------------------------------------------------------
' ~9 w; }) ^! ?" _0 C; F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 }( m6 ~) z" m' I9 t' F
{9 {: [3 [1 X3 A
BaseMouseCursor();
3 O5 h4 V9 m* a5 Z @/ `( C: H}
, ~% v0 ]/ P" i6 C. X0 @在其下添加:
, `* G4 K. q# V2 M/ `8 |6 s$ Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( `9 J2 L/ z$ S4 Q
{. C. f9 l$ `4 i) W
m_wndMenu.DeleteAllMenu();
: P. `2 E# A$ p1 h5 ~m_wndMenu.CreateMenu(this);
?8 n( A W& ]( M5 P( cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" n' | \& ^- \8 y
/ C6 ]* o$ V# P
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 @* O3 V% E) X% f$ m1 w& }4 f
{
. W" k. Z, j: X* I, H) Y) D- @ //P以上级别才可以删除所有道具' [# y! i! @9 O9 ^ `+ @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( G1 D0 a3 @4 `* u Y" E% E' X}" r# ~0 p) T! K+ X2 X$ G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 T8 ^+ X F/ c# S2 ^' ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) h& Y% N, z2 T* a6 Jm_wndMenu.SetFocus(); S1 j" P) {: b
}3 K* O$ {4 M- \8 ^- _+ w0 \& ~
------------------------------------------------------------------------------------------------------------
$ H) z0 m2 L; Z5 E* [: ] ]; m, D" r*************************$ ]9 U) s- V" u T# Z7 C* i- ~7 S
WndField.h文件% R7 j: ~; L% s; h, u' s6 r
*************************
, h6 e8 u/ V6 B# m! \* _7 n搜索:BOOL m_bReport;
' L8 r' q1 g# e其后添加:
# u. q; R8 G/ |1 C% ZCWndMenu m_wndMenu; w, {; ]( ~7 T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. d0 N& b: F6 N: B
其后添加:
9 g% \# P s- X7 T$ Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);" _! n# |6 f# d& J( w
# g [3 A( f& H! ^9 l9 Q# L7 U' W& X
* f! B* ]* ^, ]/ s
|
|