|
|
源文件中_Interface文件夹下WndField.cpp文件
1 [ S. Z& }6 F' S @搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 g0 E) a+ R8 d- X0 ~5 z5 }
% ^6 R4 R7 r: t6 c6 Ustruct sItem- ]2 I! {6 v$ O2 T* G3 g! k, G
{0 C, j: Z9 H' J5 k
DWORD dwId;
! ^2 S* P& n4 G' O: @ CDWORD dwKind2;% l& U2 _6 p7 F! W
DWORD dwItemId;
+ Q# Q, W( j- HBYTE nIndex;
1 ]/ t, W9 R- F2 }/ NsItem(){3 n3 X- o# C5 }6 r* F' V7 \
dwId = dwKind2 = dwItemId = nIndex = 0;
0 X0 ?: c, E9 U9 O5 n4 `}5 S! L" O" r4 r
bool operator < (const sItem p2)
" A5 Z/ P" h% g$ q{
+ k/ n! u- c) {3 T7 U if (dwKind2 == p2.dwKind2)
: |2 U6 d+ c% m {) n! _" C4 C# a+ b% ?. o
return dwItemId < p2.dwItemId;
( ^, y, M' w! \+ @, t. X! B' O }else{ w1 d$ E; j* S- I& Y3 a
return dwKind2 < p2.dwKind2;
% G8 e- ]( V- X1 e }
0 S) v, `7 }0 A) O9 K2 J}( X$ e( y4 W- G1 i9 M( @5 d
};$ i5 J% q" A3 F( [
class CInventorySort
# ~; j# h4 X/ y% A. V0 k6 j{$ X6 `- U' `: g
public:
9 _( f3 v; @1 r0 o+ yCInventorySort()9 R( p5 W% X/ r( D
{
9 p) } ?3 j/ S) _; U m_dwPos = 0;' R9 E5 R: D% { k9 `: }; f) y
}
7 M6 P4 x; _7 N; m9 g- B~CInventorySort(){}2 j' r; T5 R- \9 r" c# g! _" N
private:4 m, u' [- ^" m7 e0 c! {& F* k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 g- C( c5 t1 F0 U2 v; _" FDWORD m_dwPos;
) ]. r. z8 `2 H/ |9 Fpublic:
8 j3 p" j, | v9 kvoid Add(BYTE nIndex)2 f6 u) b0 y8 K8 l1 H6 C
{( b6 {7 @7 p! @
if (m_dwPos >= MAX_INVENTORY)/ f1 b# ~) X6 d! _! z- ]% m3 ]
{6 N( R- D8 b' I7 N. m1 ]$ b
return;, l, n. S1 W9 D) I% J
}) h; D1 m) B* Q5 F; c
m_Item[m_dwPos].nIndex = nIndex;
! s* s- d( a' t5 `; q m_Item[m_dwPos].dwId = m_dwPos;
+ y4 e7 K) g. a* S& R3 [0 o8 J { m_dwPos++;
' G" ~+ l( v- J( k) J* T E}
6 S- s2 f% L: Y0 N# VBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( {9 X1 z6 c- H) r: x. `0 T3 h
{
! c$ t1 } x( e! Z4 g# |7 i for (int i=0;i<MAX_INVENTORY;i++)
/ y6 J. r! S, Y( ^$ S1 v0 O+ s" K {
5 s0 R( J( x- H- @8 Q if (m_Item.dwId == dwId)
* z0 A: d3 j7 a" z% s. w {( \, i* P. g7 F) o
return m_Item.nIndex;% M/ r5 ]+ e) m' o+ k0 P) I7 M
}
: L+ k. J! R: b, u }
* f8 p' K- g2 j3 A2 t: ~ return 255;
$ j5 L0 }8 I. r% p+ D# o' f}
6 {( R# x2 Y0 ~* Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' Q# m9 y+ ^9 M{
' d: T+ U9 S! V9 t% h6 I2 @. S BYTE nTmp = 0;( j6 r: f- p- E7 V& P& b1 G
bool bDest = false,bSrc = false;
( C/ a! K1 M, S. e+ K for (int i=0;i<MAX_INVENTORY;i++)
# j& m* o$ O* c6 {6 @ {
" g8 ^- _2 g1 c* R# { if (dwSrcId == m_Item.dwId)
6 x' b- G2 J7 t9 Z k {
/ R9 l0 g$ }% j7 [ //id相等 则 改变对应的dest和src
+ u; }2 f" k4 X( b& e nTmp = m_Item.nIndex;
9 }( x- j% t8 b& ~' S7 y m_Item.nIndex = dest;
- ]4 ~9 O: Q2 W o }
5 g- O9 N& i* E* L }# a5 |! R5 Q+ \
//临时数据保存完毕,交换开始4 j6 r9 {, s' V/ z7 ?
for (int i=0;i<MAX_INVENTORY;i++)) `3 y" P! U; M0 y% J
{
2 s0 N! j R3 }& o if (dest == m_Item.nIndex)6 ]. K0 x2 S* m C
{
9 m2 E. |0 C1 m Y/ t p/ J: t* ~ //id相等 则 改变对应的dest和src$ {! M: C$ d4 l( l
m_Item.nIndex = nTmp;
! [- t% L4 d2 w& i }5 n( ?- j4 B! ]: }! y
}- g& W: m& J! y7 V: U ^
}
( z' S8 F/ X, p/ ^/ \# `8 T};
5 Q2 h! R4 [# W2 H- G" B1 _-------------------------------------------------------------------------
% {; L* ~& ^2 q$ g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& V1 V9 H, Z# |, A9 ~0 b; c1 ~
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 i( a9 E) W/ r; ]# [& W5 a: X紧靠其上添加:
5 |, e6 V* l* Z" k6 L: K+ wif( pWndBase == &m_wndMenu )1 w- S+ g+ f( H" j+ Y# l) v
{: ^1 `4 f# N7 D; M: F% C
switch( nID )4 _: e: F( {! _! j9 y4 b6 ?
{; B6 A3 `: T g# O6 P. ^ [
case 2:
. ]. v4 w3 K# C: r2 t {9 T. v! @- G& C3 [" o% j
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 D9 P6 L$ ^! w+ Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! \; s0 L- K% D3 O- p6 b
{
, c: p+ v& L) L6 a break;$ C& X% q8 V$ U. t+ i
}
* t( f& E- I2 n! F for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. U% A) h# O% g3 t) Z3 S# D5 Y A' ] {" m/ n. m8 h" l# p( W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* C: b! C, C( r
if( !pItemElem )
; L& _ u$ A% l) z: `0 W( ^ continue;, D: z+ Z# O* u2 t7 U
if(pItemElem->GetExtra() > 0)
. R8 y: s$ N; b& N3 o continue;, G+ S2 L' [2 K8 X. D0 I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; h9 B9 T4 X# l/ H1 n" n continue;9 _" Q' j+ Z, }# D
if( g_pPlayer->IsUsing( pItemElem ) )- D; g1 ^+ c, M( g' Y! A- k
continue;; B+ e& M+ _# V( a( u$ `
if( pItemElem->IsUndestructable() == TRUE )5 N: P# b, {$ M8 W
{4 U- z$ c( S' Q, z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 O* B+ V( i4 O continue;
9 M1 q `: g# W& Y8 v0 E }
- ~! p F! Y1 N3 W3 c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 g* B' V4 ~6 j2 v: k
}
) y I' _; D5 }" ^0 z break;3 p* e) z- E% ?- @% q) Y
}+ w$ ?' _( u) F, }
case 1:* z2 D1 m+ k1 _ S* E) P. ^# Z0 U
{! y5 Z! x2 u! ~: F
//整理背包0 T- `: Y% ~+ a [
//////////////////////////////////////////////////////////////////////////
. Z* {8 p# N" U //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 G( F: R) j* E* e, |9 N' f3 _ //////////////////////////////////////////////////////////////////////////4 l# U" j9 ~4 r& B
//////////////////////////////////////////////////////////////////////////1 d8 m+ _5 Q1 D/ A
CInventorySort* pInvSort = new CInventorySort;
7 `0 u8 I p6 P: o' h4 c, s vector <sItem> vItem;' f5 z6 G: Y+ O2 b5 b' ?' o
vItem.resize(MAX_INVENTORY);//初始化大小
+ A/ m1 d$ _8 ]6 R3 ~: [; D* P //////////////////////////////////////////////////////////////////////////
3 Y2 S* ~( Q% @$ n! b: y) {3 Y //填充数据
0 B$ ~+ ~; j6 X0 U7 R for (int i=0;i<MAX_INVENTORY;i++)7 A, k% G6 F; @) [0 {
{
! Z* V; z9 j, z% _3 G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! Z$ |0 u) M7 F" s' k: V" p$ N
if (!pItemElem)
9 u( K& t: E$ f3 N {% t9 A( X, _6 _# E0 I* z6 E5 e
vItem.dwKind2 = 0xffffffff;3 R: N# W( m7 o3 n z% q5 n
vItem.dwItemId = 0xffffffff;, c1 X( _. X" J
vItem.nIndex = i;
- g6 n# d( B$ N1 z2 w* F }else {- A! _+ E5 f9 |: x6 k. S! q
ItemProp* pProp = pItemElem->GetProp();& y6 E6 T) B+ D5 T% c
vItem.dwKind2 = pProp->dwItemKind2;: H7 [+ K: a! H9 P
vItem.dwItemId = pItemElem->m_dwItemId;4 J! [* q& Z6 A1 T/ r2 K+ e
vItem.nIndex = i;7 I; n- Z% V9 H0 `3 l% M
}
; _; J! s$ Z, q0 ^& k; I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ ~) B2 m8 _! c1 y( e; e* e( d }
. P6 l( T( H* v //////////////////////////////////////////////////////////////////////////
4 O* q+ w0 h0 S) R& w/ A( c sort(vItem.begin(),vItem.end());//排序4 E; o4 O7 X) ^) I
//////////////////////////////////////////////////////////////////////////0 M- T& \8 H* o2 T$ k C2 g- o
//交换; V9 m& {9 n8 `! n
for (size_t i=0;i<vItem.size();i++)8 y# R; {% c h7 A) _0 Z
{" O: U# u' M# }' @
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" K& h1 {/ u) R, D$ V! f
pInvSort->Add(vItem.nIndex);( ~2 A0 X3 q6 `6 R
}' F% O8 v/ C# w8 h% u7 N& H
BYTE nDestPos = 0;
2 c* G. o7 h) J8 R* B for (int i=0;i<MAX_INVENTORY;i++)
- J8 C" F0 y/ _9 c3 ~; U6 Y) g {8 `% G8 {* K2 w5 J8 d5 _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! g* y: g% L1 P6 m5 \
if (pItemElem)! c5 c; n& b6 X& n; M
{
$ K1 c* Z. v" W* D7 ]& _! A! X if (IsUsingItem(pItemElem))2 f& c4 @2 y U z6 W2 L3 W
{* S( H; B, m1 R0 e7 y
//这个位置无法放* P5 _, I3 L! o& x1 b
nDestPos++;) `7 ~8 a1 a3 G
}+ f: m; u+ i5 J( r# W# b! U
}
) Z; U' x$ S6 a0 N3 V+ s( d BYTE nSrc = pInvSort->GetItemSrc(i);* K2 X! J* N3 h4 `( M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; V- Z. m9 u5 J; L3 O, P9 b; r1 p
if (pItemElem); i3 e' F7 o" ~1 ~8 ]
{
: e5 }6 \" o! v, I! O7 T; g1 D if (IsUsingItem(pItemElem))
- r8 l2 G/ G: O7 e {
) T& ^$ p7 v' p. g5 C //这个道具无法移动,跳过
. S$ Q* W! z3 S. X' b continue;9 R2 e8 d& N- G1 i# r* T/ x
}
- ]( @$ x, z4 G5 n3 K1 g }else{8 C+ m+ a( Z6 j4 Z+ l1 A
//空位置 不用动
; N- a( O- @3 k continue;
, o4 w1 c! O) @ }7 l; d }' F5 K2 _# ~. A6 {1 N" ~
//////////////////////////////////////////////////////////////////////////- `$ U, i& H3 `5 v, A/ o
//开始移动, \0 K7 X" w- r% s8 ^
if (nSrc == nDestPos)
- @' {% B D: t6 O2 H1 l {
4 |" u4 ^# o" M) k1 R$ w //原地不动
. |: i7 N3 ~! @0 ]3 s: ]) V0 M nDestPos++;: Z5 Y% s* F: G/ j+ G0 p* ^" E) o
continue;; {( M* r. h( v
}
1 u5 q5 L( n( O6 D! o pInvSort->MoveItem(i,nDestPos);$ B) M6 A& N) x7 ]
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# m: r. B0 G: @$ ~' ~9 u Sleep(5);
; O% @3 O7 r) }) \: q/ N- s //Error("移动 - %d->%d",nSrc,nDestPos);
+ s2 [$ @8 l, `9 l) M nDestPos++;4 T- s+ d, _3 Z) m; B8 V+ ~) i
}
* h7 l+ [5 \2 S6 z K) ? //取第一个元素的信息: A4 }; t2 p/ \3 X
/*1 {5 b" k, ^6 ?- q* y9 ]
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ O: f0 Y! Q* \% o$ p' ?/ Q {4 h8 j* I* O* a: K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& K) @# n" L3 ^+ Y! z2 D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 T( g! }4 U' F
}& z) ]9 x8 ]( [: a4 e
*/
' y$ [. h6 U1 ^& ?1 U6 B; F" [ //////////////////////////////////////////////////////////////////////////3 C) g% d9 [4 I3 ]8 `3 \
break;) j( j+ w R0 ~3 ?% E- Z8 f2 x
}8 S6 R8 Z) h) L2 e( a7 w, f' J
} : [2 w. P, d0 G' Z% S6 F$ V
}7 @+ f' y2 A$ n0 Z) f
m_wndMenu.SetVisible(FALSE);
/ _8 I$ {+ e; @/ {( o5 a5 e, W# Y
--------------------------------------------------------------------------------------------------------
) s5 S* L/ K. I& o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 a; `, H( K" B$ b) F{0 P# U9 U+ n0 S; g7 R. n% l
BaseMouseCursor();* I0 Z9 m- Q0 ]7 ?, b) n" e
}: y" d8 \# }" ^% _8 }/ J
在其下添加:
& @7 u' u$ G. z1 l2 |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# I" J, F& d' n% l2 X) K8 _{
& D) Q$ ^8 N2 Q, ]2 R4 Lm_wndMenu.DeleteAllMenu();
! J0 V% p0 ?( j5 U+ Km_wndMenu.CreateMenu(this);
% g2 \$ C0 G1 W2 E$ Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 n$ H2 N; O6 O% T- {) h$ C
! D4 V. K3 Q( |/ r9 V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 ^3 H' |# K+ @& Z. ]4 i{
0 B: P# ?* p8 X& {3 n //P以上级别才可以删除所有道具
P: _& W2 |# w* |# W; \ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 s3 {' z* z# ]% k1 J: d}
! g- D( Z/ u0 M' D. F* B# dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. V: `" i' n1 fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( W- V3 _, ?- X" Y j! y: p+ a
m_wndMenu.SetFocus();$ i: l* [ @6 `, m e$ H4 W
}
9 ^% H! y7 X) N0 t2 j6 S- {------------------------------------------------------------------------------------------------------------
; R; _' z, V. b*************************0 r7 F( t: p; L% v& c1 P6 l6 w/ e
WndField.h文件$ @" h6 [" ~' _ D3 H
************************* W5 |7 T7 @" Y; o$ q
搜索:BOOL m_bReport;
! g: J6 _) l& Z4 p其后添加:
' C- m( K1 Y; E* g4 H' HCWndMenu m_wndMenu;
1 e; P4 \# }$ J& ~, o8 k) ?5 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; @4 `( W& Y0 }% o5 I/ ^
其后添加:
9 ~1 [6 f* S4 X5 z/ Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);. Q# |' L" a2 D+ X) k# B. N$ k
; g1 w3 _5 |0 S5 | y( H' j- Y2 P5 `
8 F# U J: A8 } |
|