|
|
源文件中_Interface文件夹下WndField.cpp文件
3 I9 X) g* w8 }" F( D; e$ z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& A7 @2 E1 [! O- p5 c6 }( F( y+ V- i3 q' u# H/ v
struct sItem
" ?9 l* x3 Q* _' A, l/ [{
, h& Q1 g- |" y5 J9 e+ JDWORD dwId;
' |* A( }" \5 \7 s+ }/ @* [" y# G% wDWORD dwKind2;- G/ J+ O' _5 D; N
DWORD dwItemId;+ N5 l% _8 j7 h) ]& q/ F
BYTE nIndex; J; b, o/ s P
sItem(){
% g) S( m" ^) j5 O. O# v dwId = dwKind2 = dwItemId = nIndex = 0;
# Y1 Z2 p/ y) x" G3 h}
# }3 x" p2 O) |: H# r+ x2 Xbool operator < (const sItem p2)) h& |$ {* Z% k X c
{: Y x6 u; r' w6 t# Y
if (dwKind2 == p2.dwKind2)- ]- C `* x: \* v; o4 G
{! `5 k4 [1 a6 i1 ]! S& }/ O
return dwItemId < p2.dwItemId;
8 Q0 ]$ |/ C# N0 S) [ }else{
$ g; i# G1 f3 ?; w2 K( v7 ] return dwKind2 < p2.dwKind2;
8 ^, f0 a; N1 C }
, |/ I9 {6 T1 r" H* g1 \! N}
) x' v. Y) ?+ J};$ }/ f: z/ h" b
class CInventorySort
0 s3 P$ \' F* G" t5 ]2 I) F1 ?{ A3 y; _8 l7 X8 P
public:
! ^3 u& L7 j$ \# mCInventorySort()1 ^% s4 z W: P' y
{
% @! ~* Z" D& o" X, f4 { m_dwPos = 0;5 w/ `" n; o6 k
}
! B4 y* M+ ?; D8 K) Z2 _~CInventorySort(){}
9 K; M( ~1 Z, \+ ^- I1 \private: \% j+ F0 h. X( j. j% ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- t; G/ w& m1 R1 V8 ]$ PDWORD m_dwPos;6 a6 |6 n2 R+ `$ T7 p
public:( d5 y/ e1 I7 e* _
void Add(BYTE nIndex)# u2 N5 z \# S% W7 d' @2 l
{
; q& x3 @1 c8 d' N( T9 I if (m_dwPos >= MAX_INVENTORY)
4 F( z/ |* H0 P3 J' P7 Y9 _ {
) j. O) m7 K, ^2 u, n' i6 P return;
+ b, ?; r- ]/ o }" k3 b5 w5 O5 [; o0 J# N, I+ s
m_Item[m_dwPos].nIndex = nIndex;9 m8 g8 P& g$ b9 m5 l3 _9 T
m_Item[m_dwPos].dwId = m_dwPos;' Q. I- t; ], }8 t
m_dwPos++;/ u% x* L, o; n2 J$ k
}/ w4 A, E6 i# Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* `* [ x. ?, n: R8 K5 r{% p& R8 ~$ W. A
for (int i=0;i<MAX_INVENTORY;i++)
5 p# H1 |; k3 `( O {+ T0 s% Y( a% ?9 t f# ~, e
if (m_Item.dwId == dwId)
( A2 N9 N' P9 U) M$ ~4 B* @ {+ e5 O0 _1 g' G( L
return m_Item.nIndex;
5 S W. K, m* V7 ?# q% J" e7 J/ e8 a }
0 K8 \9 Q1 ^2 A }2 R% l) e4 S9 I, P: k0 }" o
return 255;- g; i F8 X. |7 ~
}* a8 n/ C; e2 t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 Z+ i! K, [& ~3 p1 C) q! K{
; R$ |9 [2 O4 n | W BYTE nTmp = 0;
3 {! f3 ~- L! r# | bool bDest = false,bSrc = false;
: |! c* V) D; `7 W for (int i=0;i<MAX_INVENTORY;i++)
% Q7 s' ?. W1 F2 e {
2 v$ a {! T I" v# v if (dwSrcId == m_Item.dwId)0 F6 l# B9 z' S+ j) G4 k
{, V; N0 z: B3 ?: `
//id相等 则 改变对应的dest和src' V4 g7 H7 g! D6 e5 ~
nTmp = m_Item.nIndex;
5 l6 c% m4 i2 n9 M; |: s& X2 f; N* j m_Item.nIndex = dest;6 w5 A1 X) }- g0 c
}
& c9 Y% M' C& S! d8 I }# Y& H/ x4 l; m2 E7 H# T: i* K l
//临时数据保存完毕,交换开始
6 a0 r& E$ g/ N, t; A for (int i=0;i<MAX_INVENTORY;i++)
# @; ]$ r% n; y9 f d' e- g {& B; p, Y8 A H2 _- E
if (dest == m_Item.nIndex)
4 o7 u% }" t+ t; }4 M {
8 h" } r# D- X //id相等 则 改变对应的dest和src; z; Q, F- P3 X, P! {
m_Item.nIndex = nTmp;
0 b/ W ~$ M4 J4 i0 G F. @ }& }% T% k: e' v$ ]1 u
}
- [7 Q$ E7 b. [* l9 Z# B}9 R) B2 e7 l/ V
};
) F; H4 X* w [: K$ [-------------------------------------------------------------------------
6 L- h, z/ {0 `( x$ v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- Q& K( a( Q, l4 Q; L5 P0 s& }9 ?搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 \- N1 G4 J2 }( `! i8 L7 f# }
紧靠其上添加:. h" Q2 @9 s, z) e6 S r4 K% n# y
if( pWndBase == &m_wndMenu )( y, y) ?8 `4 c9 P. Y8 T
{2 R: M) t7 y7 C8 q' V
switch( nID )
3 b# d9 n: S1 S {
: d' _* }! _4 b3 j" w) g+ q, Q case 2:5 P- K) ^! T4 ?; u) E
{
; G0 {4 Q0 _8 a; \5 R" Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 M1 I7 k( ]- _ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ b0 c0 x8 ?4 ~- R8 ]
{6 Z/ h* W/ _6 X4 q
break;8 O& z+ C7 m/ I' \5 ^
}' F* T9 l! L- U5 e6 w+ @8 |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 _) }0 D# W2 x4 o
{' M, r& q! F4 ~* z4 [( v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 @4 b; K5 I4 p( _, H if( !pItemElem )
) }8 ?( j2 F$ V$ h* F6 e/ a continue;
h( P* z% P4 e' y3 W# | if(pItemElem->GetExtra() > 0)0 k% K4 @6 l" Z, ^; ?6 Z+ G
continue;
' G+ s$ _7 \% l' C if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. z* ?: Q9 Z+ t S continue;. }1 B2 \5 F4 }2 S/ }( y6 ^
if( g_pPlayer->IsUsing( pItemElem ) )8 n8 e7 @9 s0 {/ g( n
continue;1 [( U, S% N; ?1 ~: N
if( pItemElem->IsUndestructable() == TRUE )8 I' J. ~: O* n( m. @' h i0 R: P
{. i- R* N* k) Y q- h& c2 J9 r
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! `* A) L, b2 Q1 ~' m. @ continue;
2 C m1 Z6 g- T' `. ] }
+ x/ c$ g" _: m! f4 u g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
f8 M, |: b4 f }, ]! V8 U! d( r
break;
; u) `( w7 `& x: B' ]2 d4 P: y }
* A( @. H+ G2 U% q( _ case 1:
2 t* @& r7 m. O4 Y# ^8 ~) r {
8 C) M* S. _7 f, Y+ f3 p //整理背包/ Z8 S7 I9 I9 M1 a$ l
//////////////////////////////////////////////////////////////////////////0 F( S: a4 k0 j) T% p; c1 J2 T( _8 I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 c3 ~( j( e: o, C3 B //////////////////////////////////////////////////////////////////////////
4 Q, y0 w9 ~7 x3 M/ m/ t6 N; ~ //////////////////////////////////////////////////////////////////////////- T2 U+ ^( B8 z) c8 N1 S
CInventorySort* pInvSort = new CInventorySort;( X$ b: s9 R' Y o1 Y$ ^ w; W
vector <sItem> vItem;
$ P3 x! x4 h+ N- I vItem.resize(MAX_INVENTORY);//初始化大小
0 v: S k! a: Y* f" O+ L9 A/ \ //////////////////////////////////////////////////////////////////////////
- F" A- v( \1 b2 a5 Y //填充数据5 [- t# }9 t* r* [' v l8 v5 D, A# Z
for (int i=0;i<MAX_INVENTORY;i++)$ u- `5 F& e' r! K
{
! r8 V% ?. z) [5 n: Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, {4 w& W0 W& C1 n
if (!pItemElem)4 B8 p; P5 Z2 s, K) ~+ ?, ~
{
6 c: T' I" w2 O+ w vItem.dwKind2 = 0xffffffff;
4 n2 N' d& V5 [- F8 ^% f vItem.dwItemId = 0xffffffff;
( E% z9 I: j0 W9 l: x3 \; T# u vItem.nIndex = i;
! g5 g# R' I6 O: n5 J9 U }else {
; L1 x! X9 t, J5 \$ L! l9 N# b ItemProp* pProp = pItemElem->GetProp();7 |9 F0 s' O9 q. ^" E* u
vItem.dwKind2 = pProp->dwItemKind2; c5 y7 q4 b9 v* z: W
vItem.dwItemId = pItemElem->m_dwItemId;" Y: U2 _8 u" w: A e
vItem.nIndex = i;
7 W' U: U9 a& x( Y, l6 r8 Z) ^. c }
, V" [ a3 v3 L: F, q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" \: g6 T" q. p* J0 K& t1 N }; P: L6 D; \. N& {# i2 v
//////////////////////////////////////////////////////////////////////////! f0 ]7 f( \ L- t7 e7 }5 R
sort(vItem.begin(),vItem.end());//排序
; y8 o' F5 q _9 l //////////////////////////////////////////////////////////////////////////* S$ S4 w; `; b" @& ^
//交换
$ r% o8 E8 R1 j4 }' V for (size_t i=0;i<vItem.size();i++)
/ x8 n4 {: ^$ i; Z5 E {
2 J0 s! K/ V2 C& D* d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* K8 [! T6 {5 @! ^ F ]
pInvSort->Add(vItem.nIndex);
+ `1 o7 V: q& y }
' N* N% D$ v% y m* C BYTE nDestPos = 0;
( a4 c- c p- z for (int i=0;i<MAX_INVENTORY;i++)/ e& i% w @# W
{9 r2 [8 @5 `' ^4 ^# G% y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' G6 h. ^# [/ L2 j, F
if (pItemElem)
% m/ `4 q5 a5 Y* o, Y {
3 C/ D. Y4 j" L) d- b if (IsUsingItem(pItemElem))
: r. \4 |* X4 @6 y! v5 h {7 D7 b' ?- z, X: R% F
//这个位置无法放
, u$ g7 }5 I9 ~ E+ k. `' ^8 ~ nDestPos++;" v9 F' N0 \) n
}* |2 N9 x$ g; h0 t4 D
}
2 Z1 z0 `' q4 x- J) i3 ?3 N BYTE nSrc = pInvSort->GetItemSrc(i);
! v" M$ J& O/ ~ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% n. E& V$ H! h6 O0 o# p if (pItemElem)
$ f5 G- z- V* c% \ t {/ `# t& s' r* t0 x* }% @
if (IsUsingItem(pItemElem))
) J! h' ]5 a$ m3 Z S7 ` {
# Q: D J8 |# J6 }/ g( R //这个道具无法移动,跳过5 S* d, h: g/ T9 ?3 X6 H
continue;
7 ^6 W9 u, P0 ~; b* }, X. G8 a0 B$ X }" T/ u) _! \' j+ f* o3 u% W
}else{
5 K) A4 f' ]- h, u6 B& w, } //空位置 不用动% v3 `3 d' q/ z/ Q
continue;3 V/ k( S2 Z% K( q7 M: b
}$ U5 W7 L O0 y& E! |; o
//////////////////////////////////////////////////////////////////////////3 U" P: T3 L3 j, J# Y1 j8 {
//开始移动) d0 c) S$ p0 `, F, z1 @
if (nSrc == nDestPos)
7 G' ?2 [& x+ g" c {
: e. ~" n$ N* w+ d3 { //原地不动
L. m3 T. a- A3 h nDestPos++;' ]# g) |! I& h$ p0 q3 O
continue;9 }% |! t) T: E, h- P
}( L8 ^$ F7 c* S' u- ^
pInvSort->MoveItem(i,nDestPos);
8 b9 E* z4 N6 s, k g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 t! l2 q" H7 o) Q) e' i. W7 u
Sleep(5);( H9 z# x2 m/ |9 A/ [& S
//Error("移动 - %d->%d",nSrc,nDestPos);- }% X: y6 @' a% |- D m( V
nDestPos++;
) O+ \5 C: R* A9 |- K* g n% x }5 w' ^, U$ ~' s" s
//取第一个元素的信息
/ O9 x9 z3 ]$ [" k) s& \; U /*( B7 p( ^9 l( T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 ]# Y% V3 d' f9 j {
6 u1 q* u1 ^, t$ \: m8 ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! {& S7 S- A& n* k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 y: n6 L& u3 J3 C, I
}
% }& s/ r5 P2 x0 m" B& c. g1 z7 x */
( _& q; Y8 T0 p6 z* m4 Y* b //////////////////////////////////////////////////////////////////////////. N/ n. c, b7 ]9 n' q
break;8 q3 @/ f: s: \* U2 R; o# @
}
0 B! d7 g; J3 `; {6 E# S' X } * D1 T; C2 L( S/ U' F# N
}
" q1 V8 g& D w& a' e1 i0 a+ Rm_wndMenu.SetVisible(FALSE);
& f* g. G) l+ b: X$ f; P( R1 K/ N" [ L0 f/ J) _; x6 }) b; B
--------------------------------------------------------------------------------------------------------
C* {9 w+ `* {8 u* n" c搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% t) K' @1 ` Y) l
{- i; m+ L) B4 W7 `* ?
BaseMouseCursor();
7 Y$ ]: m% u2 g: R$ m2 M8 p}
; X+ X$ ]/ o/ K) i2 `在其下添加:% y/ _* A' x& v8 f) y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! i$ j0 v5 X$ w
{
. g* o/ o* k6 \# lm_wndMenu.DeleteAllMenu();, Z; p6 m7 b6 t7 m$ b: J8 x5 x
m_wndMenu.CreateMenu(this);- P( R5 \8 K+ }
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 L3 m4 M$ [: @1 m" ?
5 K7 i( g$ k/ W* L: Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ R- b1 v7 P3 d/ y+ X{0 h* u1 |: x" N& p$ E8 @" _
//P以上级别才可以删除所有道具
# O+ @: I. R2 }) j! A; A m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" e6 M: Q, a) @2 B& Y$ O+ H}: Y% ^5 m& |; P# |- M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. ?$ @7 t% W2 l, f" U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( {$ F, [) F- X8 f, um_wndMenu.SetFocus();
% ~) @ E; Q3 M! M6 c- j2 j: }}
! K; S5 y, [& x& }% Z------------------------------------------------------------------------------------------------------------, F. K+ \$ \9 ~' N8 Q$ l$ r. d
*************************
9 d& w% t2 A( r* s0 d, h& GWndField.h文件
$ f+ G& R* t" {' `, h*************************+ l# z/ N0 a8 w& j0 p; |
搜索:BOOL m_bReport;
0 ?1 Y Y' l( W* y" w. N其后添加:
" Q# g8 @4 o! k% e4 A8 YCWndMenu m_wndMenu;) ]9 F/ {. U4 n( f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! V& T# n! j! B其后添加:
2 w: h' ?0 U7 s' y X7 qvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 \4 _3 s/ O' U) v; V; N _
/ i8 v( Q) F! L. z7 F# {" k3 x# }: N: N! x& r' A: s, a
|
|