|
|
源文件中_Interface文件夹下WndField.cpp文件
0 ^( q& y- C- G' R O8 E/ P* F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* b$ d% P/ H( _& N$ L
/ G- | K7 H+ ?( V( |+ W3 Fstruct sItem; g- J u" w H; o$ b* O, N
{
v+ ? A; o0 T$ lDWORD dwId;7 D! S' ^! K5 u/ o3 r
DWORD dwKind2;
/ p* c& J) B$ z% m! H! i$ ~DWORD dwItemId;; J6 L# _* l4 O$ _. Z$ Y
BYTE nIndex;
/ U b8 e6 [5 z7 c# AsItem(){) j$ z% Z7 L: h" H
dwId = dwKind2 = dwItemId = nIndex = 0;' ^2 D J( ]3 `7 _6 g
}
' u2 n5 t7 G/ E4 q. O( a9 J: |+ U2 Tbool operator < (const sItem p2)
6 |/ u0 Y8 m, e* f{
" s5 ^1 }0 d3 Q' `% N1 L! p if (dwKind2 == p2.dwKind2)
3 ~& v) l8 n3 c( h' n; R {
! i5 y) Q$ p( _9 _3 l" T) p) b return dwItemId < p2.dwItemId;
$ o3 W q' }- ?5 z# _! a2 @; c }else{ Z# ^$ \4 ~* M& j
return dwKind2 < p2.dwKind2;
( O+ |* X( Q7 n# t' l, Y% ~, Q }4 w" y1 A; m4 j6 b; H2 g9 K
}: R' f1 L1 r4 ~+ p" P( e; S7 l
};/ c- a4 T1 N$ n$ G T, a! \
class CInventorySort
0 E8 L+ G5 L" C: x* y{% G5 Y1 k/ e& q4 b
public:4 J4 W7 \$ D8 n8 e0 v& C& ^
CInventorySort()
( F" v* Y, C; X g. ^- L7 \{" z4 O+ ~4 K! J0 `- I' |- e/ C
m_dwPos = 0;8 K; t2 e, ^1 ?' E* M. s
}( H8 P2 r1 ]* e8 r" S4 a$ C
~CInventorySort(){}% Z, @6 ?( d2 [9 W& a
private:
# G( z$ ~6 J5 d6 B1 BsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( ^* ?; G$ c$ b X' o
DWORD m_dwPos;6 h1 l% u* w8 @5 i+ h" B1 R
public:: J" s2 v7 G7 @' }' c6 F
void Add(BYTE nIndex)
5 c7 V0 c9 ]. r{+ |, h8 t: m6 q. Y' l; y
if (m_dwPos >= MAX_INVENTORY)% a, B" S% E& D$ p5 {
{/ P C& e5 e8 S( h) A
return;8 I, s8 Y2 s6 h+ T5 U0 Q* v+ L: w* {
}
% @' T3 v& D# R- s5 i! F m_Item[m_dwPos].nIndex = nIndex;2 g- V! k# [% B2 R0 l7 C& o
m_Item[m_dwPos].dwId = m_dwPos;, s/ P$ R6 J( A% l2 ?
m_dwPos++;& ?4 ~* [3 v6 U5 t- T6 ?2 Q
}1 h# E9 C O- T! { y4 ^
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
a1 x7 J; R) q, D4 b* P{. L7 t3 y+ h$ n" o5 x* Q
for (int i=0;i<MAX_INVENTORY;i++)
9 w: f! e: m; X; E7 [2 z, K7 C, c {
! P3 M' N) l H2 _7 f0 _ if (m_Item.dwId == dwId)( V' {; I' @( v! g2 k
{
7 D. Z! N4 i. `1 q3 u, S+ c0 p4 A return m_Item.nIndex;0 d0 Z+ K/ `5 s" g1 b* o! y: ~# y
}, w: J3 m9 A# V% P2 \
}, V' Q. F# B* U) J) _ j! Q1 B
return 255;: g9 W7 F+ N* l" H8 l! t
}/ L$ m0 q" S8 |: _4 A# q% K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ s, {" R3 {4 }: A{
& ?: F0 f9 `: v' n9 G BYTE nTmp = 0;. E, h1 k% J1 i# e
bool bDest = false,bSrc = false;* X" L& x# \+ S2 k5 U# L
for (int i=0;i<MAX_INVENTORY;i++)
5 I1 V2 k4 C, ?2 T- E: y {) u! s$ ?! A& N8 @* \6 L
if (dwSrcId == m_Item.dwId)- C6 O$ b$ F) C8 {0 k o& H6 H% C
{
6 ~: }. V' {9 q6 Z. E# t //id相等 则 改变对应的dest和src. {5 h5 Y8 o1 h3 n( i: G3 `
nTmp = m_Item.nIndex;9 `* M' P0 }# A6 y! i# F. l6 j
m_Item.nIndex = dest;
0 h$ s3 _0 e6 f( j" p7 @ }
# F3 c" ?" n' d ] }- ^1 P+ o* |' I+ A* _2 y
//临时数据保存完毕,交换开始4 M; s6 ], t# u: e0 k& c: w
for (int i=0;i<MAX_INVENTORY;i++)
% ]: D6 x7 k1 i7 M& r" [$ }7 V7 y) @ {
" I4 t/ d8 d9 k& {8 A, t if (dest == m_Item.nIndex)* a! P- Z a; F# @! ^
{
: E- G7 X+ F( A6 g7 o0 {! Q //id相等 则 改变对应的dest和src7 e ^) M( x- n2 m# S3 f
m_Item.nIndex = nTmp;
) {" Y/ O" l1 ~1 H7 ^7 h' E }3 E0 m7 N; V" f }) N4 S0 m0 H
}4 F# N# i* E" O$ c/ o9 x
}
G4 H' x0 V5 K4 E6 _) T};3 J# H% G4 b# s4 a' B+ \
-------------------------------------------------------------------------
( O. B5 l# w- P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) S4 W4 R! o2 z; I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 ]9 [9 y5 C% L! @* e紧靠其上添加:
0 c9 \4 ~% p3 I8 Y7 T3 g- I T' F2 dif( pWndBase == &m_wndMenu )
5 \4 }( V6 [& h- N6 I{, \9 L# c0 }9 k% R5 K7 h2 ]: X
switch( nID )
6 F# {1 @" x3 n. R9 @ {6 m: o D6 N4 I! `$ y: P P, x& N ~
case 2:
8 P; \% K* Z, d" L ^ l {6 \* c( |7 X/ z& g v1 ^
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 c* U, T* T M4 k: p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ R/ _) A9 d% _ {
# ^& m* R N) M) d break;
( f" x1 g8 h$ l: [/ M. M }8 t' \7 C6 l/ t p: }
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 A3 q% @6 i# J J8 q* C8 S( ]- s {
8 p2 @ z% q0 S+ `, r# p' D! A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, e4 ?: p* C. u a- P* g if( !pItemElem )! v( v9 o7 R& ~0 [% o; a- E
continue;; f8 S5 d7 H5 r1 r* v$ p
if(pItemElem->GetExtra() > 0)
9 z+ s5 Z7 }& V& |2 l: E continue;2 k7 t3 N4 e P/ |
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 Q/ _9 p7 s ]9 _( s
continue;( t. Y0 m3 T- A5 I1 s1 @4 A
if( g_pPlayer->IsUsing( pItemElem ) )* t: O @, {, o9 D3 I
continue;
/ a; v0 r) i- U: U if( pItemElem->IsUndestructable() == TRUE )9 U/ C" v* z& s8 [ r
{
' Y$ C x6 m3 f# ?5 v g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; [' U# S0 T" }) C. P9 n5 ?
continue;2 E; {; y) _* D ?& y
}& G$ S g6 H$ m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- W, t, `' R$ R/ h* [/ n9 W$ u/ R1 _
}
" D& v3 }5 k3 Y" l7 O9 X6 W break;2 _' o# N: g0 V1 O- K0 `0 E
}9 b; Q! d- V( }/ {$ V
case 1:% ^* H3 ^9 K& {* R
{
# W* q* ~( G* W //整理背包
$ ]- J& w x1 o" t g9 e* E //////////////////////////////////////////////////////////////////////////7 t' [( r, [' V
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! {7 P' |( {: v! K$ m* [
//////////////////////////////////////////////////////////////////////////# L( M, F8 Y6 [' `# ?
/////////////////////////////////////////////////////////////////////////// h; n& F3 r& Q5 z* O5 |
CInventorySort* pInvSort = new CInventorySort;/ B7 V. q6 n( A* B# m# J
vector <sItem> vItem;
/ K: I6 ^" ~7 f9 P# H1 O; K vItem.resize(MAX_INVENTORY);//初始化大小8 E+ M* y4 R7 A9 x% ?5 J
//////////////////////////////////////////////////////////////////////////7 l! g$ C. D4 z( z$ C/ ^$ C+ X8 h7 `
//填充数据
2 W9 r2 W- {# w2 Q for (int i=0;i<MAX_INVENTORY;i++)" E& d/ n, f. _ B; s' ]* [
{
: j8 n: w/ u' | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 z" q7 y7 j5 ?6 v* u+ ]
if (!pItemElem)# D: d$ Q, B! h5 ?: o
{3 E1 z8 L. b- W) m# b1 Q( k
vItem.dwKind2 = 0xffffffff;0 a. i% o- ?: K5 `/ W
vItem.dwItemId = 0xffffffff;2 v* ?8 \; X! M% n* n! u
vItem.nIndex = i;
3 k; e* Z$ f8 B }else {
: I4 f$ b: R2 O% { ItemProp* pProp = pItemElem->GetProp();
6 `* k3 F5 r- j9 f. T9 W, e vItem.dwKind2 = pProp->dwItemKind2;* I! g8 n5 Z3 i% S0 X% f
vItem.dwItemId = pItemElem->m_dwItemId;
, U! z1 V7 F, c' p/ }* l, L) } vItem.nIndex = i;
* d! D, U1 i4 q }
9 s$ n' P8 j$ U; A# ] //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: E* d5 I9 i1 N6 f$ P
}* L1 Y; O3 y5 k1 |2 z" j
//////////////////////////////////////////////////////////////////////////
: C) g% M3 k' w+ {0 {" { sort(vItem.begin(),vItem.end());//排序/ E/ W l S3 G# V: {5 m& \2 H$ H
//////////////////////////////////////////////////////////////////////////: V; v+ w2 z2 z0 r& A8 q" j. m5 x
//交换" \% h5 [: z+ E
for (size_t i=0;i<vItem.size();i++), F5 e7 K- {7 J3 h. [& v8 a
{# y) e9 r H! Q8 U" B1 k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 h& d' q' ^9 R; u pInvSort->Add(vItem.nIndex);
! @+ W5 E( I9 v' s* o2 ~9 |5 ] }
2 S- m5 i- R$ g# k3 N7 j# _ BYTE nDestPos = 0;2 E! |9 U5 r% ^/ x2 x
for (int i=0;i<MAX_INVENTORY;i++)
: S9 g& I2 K* e' N# V {9 s) V8 y+ e+ T! |9 m. x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. e. D, L) a M9 m( l. H6 X- [
if (pItemElem)
/ c2 X3 z0 L, }) G* G$ V, O {
* M& |2 Z+ M1 ]! S/ v$ @) w if (IsUsingItem(pItemElem)): G ]: L7 k" N v8 j# S
{( I% z4 ~, ~5 {
//这个位置无法放! ~1 v, f, w1 c6 \* H9 l/ G/ Y
nDestPos++;& M2 z: A5 N) ~5 ?1 w. o
}
4 u$ V6 I/ [# g6 q: l L }, t2 h2 l; M2 x! H: S# x$ f) V
BYTE nSrc = pInvSort->GetItemSrc(i);
* B; f- l- O$ w5 A& @ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- X( `: O/ h8 R8 s: ~
if (pItemElem)4 n4 O1 S4 C% D0 ]6 j
{
! ?& z# h2 w) f" s7 a3 }4 { if (IsUsingItem(pItemElem))! Z8 K. ?7 e1 M0 F- ~8 v
{
) b" B! i! Z# X) j* K //这个道具无法移动,跳过
6 u* u( d& Z( E- e continue;, E- t4 [! u% ^) p
}) ?! W; g/ g4 T$ G: M3 Y. ?/ g
}else{
: Q" F6 y* J/ t4 } //空位置 不用动
, T; h6 s) T: I* g continue;3 {) u) Y' U$ F- t
}
( B8 v T: m% O; H //////////////////////////////////////////////////////////////////////////% F: J* e* H0 o6 b
//开始移动
' a+ S% e' X% H! T/ F8 _# Z if (nSrc == nDestPos)
0 k% y* [* `) j* J {
: E, n/ l* [1 ^7 U //原地不动
4 H$ w) H7 `% A0 i0 Y, _ nDestPos++;
1 g" C- H) L8 D, a9 g2 k9 r continue;: t7 T, c! z6 p: I% B% L1 F
}0 H# O0 U1 |! w1 e* s& x: j
pInvSort->MoveItem(i,nDestPos);& ~' b) A" _' y' B1 w5 o% G! ~
g_DPlay.SendMoveItem(0,nSrc,nDestPos);" m. P* F. m( q" W5 x$ \3 b3 i
Sleep(5);
3 A: I: }2 L1 |. w4 u //Error("移动 - %d->%d",nSrc,nDestPos);
0 F* K& A3 R! w2 @4 @ nDestPos++;
S! O r. i! n4 w }
) `; @3 H2 I; _) h a //取第一个元素的信息6 }* r h6 n' s: Q! m
/*
: S7 T2 W' D# b* _. }2 ~ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ n- t5 V3 ~/ W G+ N {9 q" `" I2 F! q7 W( ]# `$ f; Z, |
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- y+ r. Q5 }) y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 n0 {3 G# H% D, g; C! c
}% y+ m. I! o. f( W( P
*/
9 Z1 k0 \6 D' V //////////////////////////////////////////////////////////////////////////
- k' ^" G7 s/ O4 s: Y' k+ Z break;$ F0 d ?0 ?9 o
}9 N% ?$ O, w7 ~ `# H
} 5 l3 H$ y* i6 d- q, h" L% k+ l" E
}
& D. o" W4 w; k" O: M, r, V6 Ym_wndMenu.SetVisible(FALSE);
I8 a) A. _- C ~2 u4 {9 C/ l; E$ c1 T& O( N) X
--------------------------------------------------------------------------------------------------------
7 s5 n" A; T# `! H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% S, c% X- L, @7 G2 d& Q
{
2 R2 B- m% D4 I. g6 K6 ]& e: n0 [BaseMouseCursor();
5 B7 G. ?; G G1 q7 @# Y4 F7 T+ g}
+ ] W3 l3 R }在其下添加:4 t7 r+ e/ u. M2 I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 f# L& d& T! i8 ?6 f
{; C& p c9 [9 h! ^# T
m_wndMenu.DeleteAllMenu();. J4 Z$ V# m S
m_wndMenu.CreateMenu(this);
. y7 x5 D w! D3 p3 ?+ t2 [# G: Um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. M5 z. e- l; V B/ W( b$ ]# C( N& y7 z* v- y& d
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 v; t1 b/ k! t" @! e{
/ d4 [8 t& [3 j) M; j //P以上级别才可以删除所有道具: q4 P5 \% J/ |+ u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 m5 c6 G* I) \* }+ f( Z! I% D; f
}* p; W) k- k; r9 `( f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ j2 A: I: P8 P/ ^/ n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. [7 j) I i c
m_wndMenu.SetFocus();; J& p3 @) k2 Y$ ~( l& h
}
9 { D5 H, a, K1 J3 g6 v( |------------------------------------------------------------------------------------------------------------
+ r! Y. \8 J+ w& M6 f*************************
* K* D% ~7 p$ @3 t1 lWndField.h文件
( _3 z; R! j' d( \! l" g$ [. l*************************( D4 {- i- N7 Q& ^& N' u$ B- o: L
搜索:BOOL m_bReport;1 l* B a8 e1 M& u: x
其后添加:
: x8 J* V$ i- t$ j3 _1 f4 I$ uCWndMenu m_wndMenu;
) h! b% f6 C2 J; D( U; ?! t搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 l' J- B0 J% K1 I+ Q其后添加:
n/ n1 P! E R# ^virtual void OnRButtonUp(UINT nFlags, CPoint point); {2 Q+ C! h8 R1 @! _! u
m8 w# e0 m, k
8 q4 c5 G( x, b$ l" b
|
|