|
|
源文件中_Interface文件夹下WndField.cpp文件* `& B1 g* x: m) T: G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ Y4 S) J5 ]3 E$ }8 K3 g- a2 i
, Y7 `/ Y4 b& J4 K! M
struct sItem* H, J; a C6 ^: u
{
/ @1 c1 g" |9 y2 e. u& R) h, p7 _DWORD dwId;
' `2 X4 j3 x$ C; p8 b/ ]' n9 PDWORD dwKind2;+ j. r2 z0 b3 H- B) J* c" X/ _
DWORD dwItemId;" U' N. B, U$ f% A
BYTE nIndex;
. f( ?! T/ m6 w, a0 Q$ bsItem(){
+ h8 n/ E% R( g# E dwId = dwKind2 = dwItemId = nIndex = 0;/ z M3 J( ~: d8 w
}
B; e; N9 u8 z& sbool operator < (const sItem p2)
: ~- h$ e7 r* z. o; m{
2 T! i P1 ]( s( g$ A2 s- D if (dwKind2 == p2.dwKind2)
9 B) ^. Y. d7 E- n9 i- B+ `/ u" ~ {& t4 j$ q1 N$ s7 Q2 S
return dwItemId < p2.dwItemId;* d( p/ o9 r7 B& F/ o
}else{: F. u. H4 F& ^, f E+ A* X
return dwKind2 < p2.dwKind2;. ]0 W2 Y# W" h& M" c" i6 r- B
}
" m, y* ^' o3 S$ u}
4 @5 a" d L% L, a g};
( x/ T8 \2 L4 a, v+ e3 cclass CInventorySort) C/ a" x; `( g& }2 d
{
1 e* d8 `3 z) }7 z; fpublic: c e+ l3 z4 Z, x5 I
CInventorySort()# _6 {% n2 i. s' m$ L e
{: N* `/ Y/ }* @6 R: f
m_dwPos = 0;7 }) i# |3 G* l @9 D) x" O
}" H4 |; ^8 B& G2 J2 N$ ~7 U6 B% Y
~CInventorySort(){}" ~+ T1 a5 h" {
private:2 H5 U& y& M' x# N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
K/ |* ~9 x1 g1 \4 W( X/ F2 e; HDWORD m_dwPos;
0 O) g& W: r) `! Mpublic:
* [: I0 c3 X; X3 l/ {+ V: \5 \void Add(BYTE nIndex)
! q5 k$ S5 H+ \* S3 X{6 T! i3 @+ m$ D4 o& c6 G
if (m_dwPos >= MAX_INVENTORY)
! G8 L3 \- O' d, [' n$ ]4 K {
5 H7 K3 _) f5 B' K( K1 X return;
- L$ h2 W1 x w3 H }
2 h0 o* F* n8 p m_Item[m_dwPos].nIndex = nIndex;! g5 C9 |% U) y t$ V' H0 ?
m_Item[m_dwPos].dwId = m_dwPos;$ s3 a; z0 }6 v. l' Z" B V5 Q$ {
m_dwPos++;
7 e3 K' b# e; t+ D, ^}
' D: |; Y2 _; S3 ?( m3 ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 C) e/ ?8 {; b1 v) H( E$ k5 J
{% X% Y/ t0 r1 `, P1 T# U& r
for (int i=0;i<MAX_INVENTORY;i++)
1 b( T2 B+ i0 _& _4 c8 n8 h. K {6 C2 K' V. b9 V) C: o
if (m_Item.dwId == dwId)8 h6 E. `/ z% J% z* t" w0 P1 ?
{
3 ]! Q( s1 t4 ~) ] return m_Item.nIndex;
i5 v% g6 _0 }9 m* R9 D }
" [6 L9 a% z6 M: A4 ` }" l3 J! ^) R9 U- S9 p
return 255;
7 z* K6 j& O6 N1 ?; l}6 Z: }3 @7 z( h- I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 a" T# R* Y& E
{
, d* Q; k2 n$ U0 z) D( f* Z. S+ } BYTE nTmp = 0;
% b/ g) a0 M! H, `5 @+ m2 D bool bDest = false,bSrc = false;% g& N+ U5 Y$ A$ i3 k
for (int i=0;i<MAX_INVENTORY;i++)) m. `6 t' y+ F. B* a9 M
{2 i" u- J% T7 b$ h2 Q0 y9 b
if (dwSrcId == m_Item.dwId)
# v' I( n; ?. h. W5 W: ^; E, g' K$ S {
3 o. Z F4 _( i9 a4 G: k //id相等 则 改变对应的dest和src
6 ~$ c$ I+ q& ~7 R9 D nTmp = m_Item.nIndex;
9 d2 P6 G- H5 `" q0 g m_Item.nIndex = dest;
1 a0 H8 S% y# T# n0 c( F }; {! i* j- F( K7 R& c
}
! }% `, f9 L: ]/ R0 k' i6 Y //临时数据保存完毕,交换开始
$ G9 J: N6 U) @& `5 w for (int i=0;i<MAX_INVENTORY;i++)$ m' t, D L% S, k, \# T# |
{
* K& w( P w7 T0 m" a2 p6 a- _ if (dest == m_Item.nIndex)
* K. O( q7 Q9 U {
- G2 a, r5 W2 W) P //id相等 则 改变对应的dest和src! F6 y- i5 k4 B; G" Q
m_Item.nIndex = nTmp; X/ r8 t2 H+ _+ K: C: n
}
* Y. R6 m3 _* W1 d }: U" K. t! c3 h0 J
}
) L0 ]- v3 d [* O# x* R9 W, r: D};" Y, k( i5 S: N5 Q9 D
-------------------------------------------------------------------------
* }: [$ }/ h7 \9 g5 b; S, j: Q: O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' J9 M. j- G0 m9 ?
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 Z9 k! {' e0 @; q; [* f& n紧靠其上添加:
6 F! |+ l8 A }' U3 S; [6 h8 Tif( pWndBase == &m_wndMenu )1 g( K3 w7 B* p, e6 K) b
{9 J% i- l) e: S2 R+ y R
switch( nID )
+ ]% l; |; E, @ {
; p a. ?, C2 J& V% ~8 S. d2 b case 2:& Q Y+ G& G* ~, ^+ S
{
" p( Y9 S! _. P; l6 H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* u J* K$ h4 M. q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! s1 C+ i6 E7 y @! @
{' Q' w/ x7 R2 |
break;5 `. M; F, ?# y* a$ t* ~: ^1 o
}/ s. s7 P3 \2 b Q+ }( {- J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 O7 t% k& [8 h+ |2 s/ L. n4 U+ ^* p, H
{
& `: _( X+ Y; L, S/ i9 Z6 j( ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 d$ W" B. ~8 V6 _
if( !pItemElem )
- O5 s4 N0 y* h continue;2 p% b# q; k' j
if(pItemElem->GetExtra() > 0)
) B$ o0 m5 E$ Y continue;) N# F9 a7 H% \$ q, r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 {* y0 H/ u) M8 N2 w continue;
$ G( C8 q7 N9 M& W: N1 s. Q if( g_pPlayer->IsUsing( pItemElem ) )
) c4 G: k, H+ r: j: I2 x2 G continue;6 y, v. e+ K- S, k& i; } L! Q; ?# {
if( pItemElem->IsUndestructable() == TRUE )$ O0 N7 A- ]+ Q3 b; W/ _
{1 B% X1 E$ N1 E2 u9 `$ o2 k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ i( ^% i7 _) F$ ]6 v, B continue;& o J0 c* L2 U; G* n6 x
}+ R3 `; S) t# @: {: z+ ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" O% C% x1 N9 [; {& x }- {- G) P1 L- `6 c# C+ s. A- |% U
break; k0 S0 \9 J' v) a
}
& q2 }& s( L- y/ }9 H4 G$ L case 1:/ S. u( t9 }% _, u# i7 G
{
9 P3 R! D- l7 l. ^) O/ d' a //整理背包
) p7 j2 G1 d, j4 u# b //////////////////////////////////////////////////////////////////////////
# x3 x& j. P/ j! Z9 E( Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 z1 f4 b: v- p( k n: \
//////////////////////////////////////////////////////////////////////////
: c2 s$ [7 _: N! S+ C5 q$ c //////////////////////////////////////////////////////////////////////////
" o) I" k9 A( _ CInventorySort* pInvSort = new CInventorySort;0 D: r- R, u! Q; n6 F7 E
vector <sItem> vItem;
* c/ R6 L9 M K, _ vItem.resize(MAX_INVENTORY);//初始化大小* ?8 t/ S/ ?! e/ w! u$ C
//////////////////////////////////////////////////////////////////////////4 L/ H0 |- L: _
//填充数据8 @! c% T/ d9 i6 _8 a9 ?" G: }& q
for (int i=0;i<MAX_INVENTORY;i++)
: B( K; ? R" ?% l5 h6 ?- M/ V* K { a! c7 {% Q; G8 }3 E. I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! c8 B" B( T# e) x5 i: c5 S if (!pItemElem)
+ U& [1 _1 z3 j+ i* D; B# {- n { c- I/ D( e. W& }
vItem.dwKind2 = 0xffffffff;7 D7 G8 P9 h; Q& d* N) |
vItem.dwItemId = 0xffffffff;! u+ n' U8 I/ @: Y
vItem.nIndex = i;
3 x3 B8 _& a# a& Q }else {. Y: k$ f5 l1 Q- Z$ ?5 a1 J
ItemProp* pProp = pItemElem->GetProp();
1 v# q: y0 l, A# h J9 B vItem.dwKind2 = pProp->dwItemKind2;. Q: y3 q, B; V8 Q% j/ G
vItem.dwItemId = pItemElem->m_dwItemId;
/ { Z% r0 i, C' g3 ~ vItem.nIndex = i;( s8 c3 M' P' v+ {. p1 O9 O
}
1 m7 H( m; G7 u0 V //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) I2 K7 w' ?: s }
+ }; R% X) z: C8 ^ //////////////////////////////////////////////////////////////////////////
3 s" k) C4 K8 `, A* u. K sort(vItem.begin(),vItem.end());//排序
! F8 A# Y$ ?& _+ ?1 c5 {( \% ^9 E //////////////////////////////////////////////////////////////////////////. E. Q1 C9 \- f; m5 Q! s
//交换
4 g( x( Q4 S, y* Z& Y! g/ h4 t for (size_t i=0;i<vItem.size();i++)* E: ?0 b/ ~ e& f1 D
{
/ S p/ o! B" e8 o0 k! x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* y* c d0 ^4 ~+ M
pInvSort->Add(vItem.nIndex);* I' t5 t( U: y7 Q
}4 h5 F* w" B V, c9 F0 {
BYTE nDestPos = 0;& D# l2 i0 ]! l1 e
for (int i=0;i<MAX_INVENTORY;i++)! T g* y+ k: [
{
8 [" N; l8 S/ A* X4 r+ A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 @/ F/ Y2 V+ y3 A: x+ ~ a if (pItemElem)
0 Q$ r ^6 w o% C/ H) a5 F {
3 t- o! o5 I* |+ R1 o9 ]3 d if (IsUsingItem(pItemElem))
: F- V; R8 v2 Q0 S+ i/ d# \ {
# `6 {$ m. {9 n" ^3 K* q0 w3 F //这个位置无法放
: R8 E6 H" w: [; O6 S- O nDestPos++;
* o9 j: Q# o* Z L l4 z) d }7 ]* [4 Q) C8 ], L4 Z1 Y7 b
}
# n& `4 N7 E) T7 h6 x BYTE nSrc = pInvSort->GetItemSrc(i);
4 c; m* u+ s& \: ~* F pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: l8 r P4 C' i u if (pItemElem): x0 @- Z9 K: n' q& F; T5 ^
{
" {9 r7 N0 v- u' g- r$ N if (IsUsingItem(pItemElem))
; s# Z+ r0 H. S: [$ n1 w( W {
0 W8 w6 M; B' }7 q0 Y3 I, Q/ t //这个道具无法移动,跳过7 g) W( t2 }) y0 y
continue;* |: ?! e: ?: {+ J: K: K: U
}
, a2 e% R% x0 e' G7 i }else{; R& u$ K9 J* {! Z$ f% }, f4 ]& |
//空位置 不用动
$ t2 p! W$ c/ g+ ^3 N continue;0 d7 z% b g( F. L$ s8 l6 Q+ b
}
& {7 ^. [ f, e& q: S/ p+ [6 J //////////////////////////////////////////////////////////////////////////
5 f' K+ T# p& w9 P& i //开始移动+ J7 A1 O/ L5 E; e( Y2 V+ y
if (nSrc == nDestPos)
& T% W9 b! D4 u& {% i) l6 b- J {
; y& g, r, ]$ ~ //原地不动5 M# f5 }0 ?+ O( t4 x5 {
nDestPos++;
; @! ~2 e. L: [3 E6 E# u! ^ continue;* F0 n8 O' B1 z3 H* H( d) R9 Y& ?" \
}( C: m2 h) C8 r$ L0 l, U' |
pInvSort->MoveItem(i,nDestPos);1 \( A: T) H& J6 n; E
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! L; O. h0 N) g* ?. q Sleep(5);
2 Q$ Q( e2 Y+ h5 n. S. a5 m //Error("移动 - %d->%d",nSrc,nDestPos);2 v# p& F" C- `- A- F
nDestPos++;
7 |% c2 G c. L$ {# s. C5 R; g0 K }
+ p9 [+ r: P- ~" \( ] //取第一个元素的信息
2 g a3 y. X8 X) C6 k4 ? /*
& G% p5 h7 _% z7 D% O if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 ~) V$ X' A' [2 n1 z' X4 p
{
) D! H( S: A4 |+ a Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% {* S- ]7 L* T& @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ R" Y- |0 ~* E( s
}
. p9 k4 i |) a+ l" E8 d& s( y; { */" N# ]4 h9 `5 q3 X. }! n/ o
//////////////////////////////////////////////////////////////////////////0 G4 Q/ L" E: b7 c: \8 m
break;- y2 V0 X, \0 U
}& c0 \+ _4 Q* H& `* N& {
} 4 A H2 ~0 y B: j1 {+ M
}
$ c" M& O( `6 j" A3 H; ^& r2 }m_wndMenu.SetVisible(FALSE);. d% o) e* k" w& C
; s& n$ w/ V5 _4 D. L& o--------------------------------------------------------------------------------------------------------
+ f: F- _2 C* F9 c2 b, u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ F5 O8 d% }- N$ z7 V/ S7 b{
; L, {( {- L. YBaseMouseCursor();
2 P# d1 x' W' D: @. `}
2 c2 W9 t v" [% v在其下添加:
* s. O* Z" I4 |, O0 j( q" _/ mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 L( ?) o0 p ^6 r6 a# L
{
3 J4 h# Y( B* J0 l$ g0 D9 Am_wndMenu.DeleteAllMenu();
+ X/ M7 J2 w' f4 w$ v( O9 \8 [m_wndMenu.CreateMenu(this);) h0 g* m8 ^1 [% R: j9 J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" Q% c5 c5 m6 I) j
/ B ~% X7 G' b$ ^ l* `$ n/ U; b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 S, b5 E- m1 u3 q6 E5 K+ T{# \7 ?: \7 H' n2 {! [' r/ M) V
//P以上级别才可以删除所有道具9 r: |$ n: X) _( c" u6 Z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 o; i& R1 `: m- t
}
) a: P# V4 W- Q8 {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 v- t; h9 i8 \9 ]; ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: E& l) q* K6 t) a- C3 {
m_wndMenu.SetFocus();) Y6 e& [$ B3 S( Y4 }
}7 c& B) I+ Z( t/ m
------------------------------------------------------------------------------------------------------------
/ f5 t: x1 a3 t ?9 X*************************! ]6 n5 {& D3 q4 A9 @( O
WndField.h文件
/ A! O# R! f( u/ o: h9 ^4 `*************************
; L; i2 f1 A5 |7 Q搜索:BOOL m_bReport;
3 W N/ h* ^2 K2 n3 L其后添加: l' _/ G4 ?! n# X1 M0 v2 B% v* d
CWndMenu m_wndMenu;5 i/ u e4 q& { |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, ~( w! o3 M5 H% I) j$ h
其后添加:
% d/ }+ l6 [8 A% ], T" e. i1 s+ H4 ivirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 l. ~1 I$ ?% R3 Q$ d
! A( S: Y3 g3 l2 R( d0 J$ B0 y3 j/ A- I9 e I0 q! K
|
|