|
|
源文件中_Interface文件夹下WndField.cpp文件
9 _. U) ]1 v, i" i搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 f y1 E1 E# V# T+ V$ a# t4 T- s; ?4 p& X- g& K" d; Y
struct sItem4 o- z T# e/ l
{
; T9 T" B$ ^; A/ w7 _7 nDWORD dwId;) v- Q1 i( d; e% Y) E" w7 {
DWORD dwKind2;
% @( N4 O4 P# Q& k5 g: vDWORD dwItemId;) l0 D0 i3 k8 g; y. M, u. U0 s
BYTE nIndex;) }' `+ @' [+ F D) ~. r# ?5 w- C" p' i
sItem(){4 s, G( C+ U y9 O
dwId = dwKind2 = dwItemId = nIndex = 0;
' {: x* h8 n) H7 O- q9 k}/ w8 f/ g7 v' z& ^
bool operator < (const sItem p2)
' `* G ]7 N0 V* G7 ~& O{, x; G, Q/ | Y, U8 r6 d
if (dwKind2 == p2.dwKind2)$ Z+ H8 c: y, d! o$ k
{' z% I1 J3 X* G8 P C
return dwItemId < p2.dwItemId;; B8 G% x. S m# b# ?/ ?
}else{
_ m& e3 _$ w8 _ `6 u return dwKind2 < p2.dwKind2;! _( f' e( A: c
}
! @. C2 u- G% B0 S6 q T} n# ~4 x5 {. u0 J+ x" {
};
& z4 M1 ]; Y* s( m! S7 o$ t3 Qclass CInventorySort5 e* F; j; n- x" e1 \
{) z' L# Q+ W x( w7 i
public:' o! F6 ~7 }8 y1 ?- g: u7 g$ o
CInventorySort()* t/ X/ H: S* I: p9 m9 t
{
6 _/ G3 c, m# y3 h! j2 h m_dwPos = 0;
r5 { D( S; z* o1 y# J# t0 d}
6 O% `2 v' V! B6 y3 N! F~CInventorySort(){}
; B- }8 e; Q# B1 vprivate:
' T4 u, P p0 I1 S7 p- tsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 [, \- j: D4 L2 v- V' ~- NDWORD m_dwPos;
6 k/ L# {7 m+ B: lpublic:3 F7 V4 R0 G0 p" N+ ^, P
void Add(BYTE nIndex)+ c) a% V# L9 \6 {3 ~
{4 f( Z8 D0 Z% ^( G* F: g
if (m_dwPos >= MAX_INVENTORY)9 [9 ~0 | r/ l8 ]6 C
{
! p, `/ L8 f+ W* U- p$ T' ` return;8 Q6 r5 K' @8 ?' t7 }* ]- r# j
}& g( O- i2 w. X' S9 `3 g) c* Z& N
m_Item[m_dwPos].nIndex = nIndex;
% M' I. ~+ Z' i! ? m_Item[m_dwPos].dwId = m_dwPos;: [' `. \( x* W+ v' |
m_dwPos++;! v+ n/ M2 q$ J: B+ T
}4 d" j2 V8 x2 Y6 G2 y, w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! p, }7 Z [5 \# l: h* r
{- j3 p' e- K$ B1 a2 S, H9 ?8 E/ \ {; Q
for (int i=0;i<MAX_INVENTORY;i++)9 Y$ c' ?' ~- R4 I$ O5 z5 q
{
' @% Z) T, C( ~# F s0 o3 X1 F( o if (m_Item.dwId == dwId)
2 {$ W4 o/ A3 R% d4 P$ J {( M" h$ W2 r9 T7 ] h( c! S& B
return m_Item.nIndex;0 p9 p) P) h- j- R. `5 y& }! l# P
}: T8 S9 m, R5 G
}
. Q6 y s+ I& R# ~ return 255;
9 P* B2 H' K* l$ J" o}7 a3 a5 a6 ?' ^+ x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: P: [! N: C! ?2 R
{ V! F4 A4 K8 p( r8 w# a% e
BYTE nTmp = 0;
) ]" T/ Z1 _# k1 ^$ K6 j bool bDest = false,bSrc = false;
2 B9 v% O- R4 R8 y$ ? for (int i=0;i<MAX_INVENTORY;i++)
8 _) N4 F) t9 w) K1 k1 n { S: n8 c v* ]( H/ Y8 K5 R8 n
if (dwSrcId == m_Item.dwId)
$ Z5 c* Z6 a. [$ c3 C' G {' B0 T2 i1 y- a4 _/ G( o$ [
//id相等 则 改变对应的dest和src _! h+ a) C2 u" {
nTmp = m_Item.nIndex;, Y# G3 k: q3 T4 h+ V. W
m_Item.nIndex = dest;, I+ D( _* @& ~% X1 L
}
- M; i8 P/ C% `" t3 D9 a }1 Z1 `" G( i/ x: x
//临时数据保存完毕,交换开始! Y! n7 C# T. p% v+ P0 f
for (int i=0;i<MAX_INVENTORY;i++)
5 k# [3 B+ H$ t6 Z" P {
b8 u, D4 S# v3 b if (dest == m_Item.nIndex)' p2 g9 \: W1 S
{3 F5 I; G A9 `6 B
//id相等 则 改变对应的dest和src, I' | T& k/ w( N$ [
m_Item.nIndex = nTmp;
1 I1 T- Y) L3 d1 ` }
) q# X8 r" \( p4 a }! [' q9 l. S5 G8 U9 R Q+ P7 k/ F
}9 j) k% [5 r, P7 e1 J' z: o
}; D4 D- M; v" o& ^ w
-------------------------------------------------------------------------' Q) O: P: X' C. n* R6 \8 K
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 i% c" i4 } ?. D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 e3 a) g+ V* V& O) q
紧靠其上添加:
' `/ G8 E: {9 q* L; tif( pWndBase == &m_wndMenu )5 v# O1 f& i, Q3 p5 [% h
{6 o. {$ p. a" `1 c8 |
switch( nID )! M2 v3 n9 ^/ }: I6 ? o, X0 A/ X4 N
{. R+ z1 b' D7 l# O5 Q* E
case 2:$ U+ y% W" o$ X8 A. k
{0 D, ?/ f" o; f4 u* M( d4 U6 B
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 G$ o+ i9 G0 k8 G7 y! ` if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, d% w& [; G: y {
) Q5 u" O% D z. ~2 ] break;
4 E1 k* i; `' s' [: K0 i } X* A* K( Q8 o2 M2 n) B! B
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' h/ ^ h# P( ?) O2 s. d9 K
{5 s: l! U2 H* { N( h7 f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 U$ F: R6 S! m1 { if( !pItemElem )8 g2 Q; }- A. B$ I5 X! T7 o7 N. C
continue;8 z& U5 W# u- f% q
if(pItemElem->GetExtra() > 0)' o) S9 P: H+ |1 }2 _- h% J' `. O
continue;' v3 y* w% c; k- g
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! {# C! `. }9 T
continue;
3 d) W7 P! a/ X: |2 O; }8 s if( g_pPlayer->IsUsing( pItemElem ) )
, p( Q Y3 G1 ^/ _4 h/ n continue;! ~3 V. a! J4 r3 F" }+ i& c
if( pItemElem->IsUndestructable() == TRUE )8 ]) N+ Q! `* @. X' W, Y
{/ }0 Z6 o' c7 ^8 R6 A
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; t; l! }9 g7 m$ @1 c, {3 X
continue;% ~7 [# r& m2 T- z) H, E& i3 u
}
- o$ q! K7 A, h5 N5 i& Q" ~* c& s g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* j8 n- p8 H( P) t+ n& G1 I }
" ^$ E* C) E/ H2 l0 ? break;# b/ u6 r: X# k
}, B4 o! r' f) s
case 1:
! `) K- D0 c7 ~* p& q+ i2 a9 O) } {7 l8 v [% G3 n. l' n1 h- r% U
//整理背包
/ F" }* S0 g. g7 U //////////////////////////////////////////////////////////////////////////
. F! e: u% K& { //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ H& ?2 s2 c' d7 z1 v+ ^& G //////////////////////////////////////////////////////////////////////////% H. v. k A; x# o/ N, u; Y
//////////////////////////////////////////////////////////////////////////( I8 V8 x( V# f; s; o
CInventorySort* pInvSort = new CInventorySort;
9 o* X0 J( K; M" R3 x2 g vector <sItem> vItem;. D# m# \6 E( K8 Q* A+ K
vItem.resize(MAX_INVENTORY);//初始化大小
" T/ t: O, k6 N$ {- I, k# B. F* s //////////////////////////////////////////////////////////////////////////. ]" r* Z2 o& ~+ i
//填充数据
7 b- }; _" r* h2 U: V- i. K7 s for (int i=0;i<MAX_INVENTORY;i++)7 G$ R7 l" y! H4 S# i
{6 m1 E1 M l4 ^0 A! D3 a+ E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 c" d+ p3 v' p
if (!pItemElem)
, c! {9 R' Z5 q' E& b {
7 u" P! A, B1 s& I vItem.dwKind2 = 0xffffffff;
! l# k$ \- F, H6 P9 I* {- M P, A vItem.dwItemId = 0xffffffff;
2 w7 t5 v `: b, I+ Y vItem.nIndex = i;. N, p1 I2 s! l
}else {1 g0 T8 M' q! \4 {
ItemProp* pProp = pItemElem->GetProp();
: X1 u, h& c: I- C vItem.dwKind2 = pProp->dwItemKind2;* o- D6 h) t4 A+ H8 L
vItem.dwItemId = pItemElem->m_dwItemId;& F6 \' d) m* k# X# N' i* x
vItem.nIndex = i;
; u' Q+ C! t% t6 A }
4 ^0 y( M. Y6 c, s* \4 `; O) ^ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ i! t) K3 m8 O G1 K9 i) z
}
; `) a) O) h8 m/ f //////////////////////////////////////////////////////////////////////////
1 G2 x9 t8 f0 h7 m0 x sort(vItem.begin(),vItem.end());//排序9 a9 l3 x6 M, E1 n" ?0 I
//////////////////////////////////////////////////////////////////////////
: F. F6 h: @9 s4 U, {; q //交换 x4 F+ _) `; I( Z! x5 H' L% P
for (size_t i=0;i<vItem.size();i++)# m& z' _2 D( `5 S9 b& q
{
. s) e' D R1 L. M9 t; ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. E9 J* q( V: o$ e3 S pInvSort->Add(vItem.nIndex);
g1 s! U: Q: P$ Y: |; h3 p. Y }$ t* W4 \3 _3 n5 y
BYTE nDestPos = 0;( j6 ^/ F7 t ]
for (int i=0;i<MAX_INVENTORY;i++)
& D" Q; K. l* h6 a% W {+ F1 l9 ~8 `; |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' g# s- c1 ^: \. r* B: L2 |0 N
if (pItemElem)% W, [2 \% t9 V. e, t# {
{) Q; }% @4 [; N, f
if (IsUsingItem(pItemElem))
' M U% A. C# L% r* V {( H, o$ U, b4 }5 l+ s: V4 E* c
//这个位置无法放/ x- e l( W. `: O5 N: e5 E9 ^
nDestPos++;- h3 ~5 n% y W+ ?) x
}+ ^, ]& f" B* s. A
}9 m3 `. O- O+ \1 F
BYTE nSrc = pInvSort->GetItemSrc(i);
G3 n% d4 N! n; V9 j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: X. F* K4 k! h* l. ]
if (pItemElem)! B1 P$ m/ i5 N* n- w0 w' g& z/ e
{4 w) T1 v0 p0 W/ V' Z' u$ C
if (IsUsingItem(pItemElem))
$ y/ ?6 r3 J; A4 t {" F& r- S* M1 g9 y; j* Y: G e. @
//这个道具无法移动,跳过$ ]4 ~) p: s4 k/ x& b, X
continue;$ q- J K# d+ n+ y
}( M4 y. K5 J) U. {. A9 r% C
}else{+ K, L K+ m4 s2 H
//空位置 不用动
* D* V9 P. ]6 [9 j9 h; _ continue;4 F0 M- J5 P3 G' h2 d9 _* p% O* a
}0 {4 l9 ?* a. y- X# E/ ?9 i' X4 j0 q
//////////////////////////////////////////////////////////////////////////
5 z* T5 z. E1 [+ ?2 V //开始移动
+ |$ D3 @7 L& I) Z& V) V3 u# t2 g if (nSrc == nDestPos)" Q+ B0 I5 S4 m. J* j6 g
{- e! Q" r' x. w
//原地不动
y H+ x3 |- M0 ` p. s& U nDestPos++;
1 |6 i$ q4 }2 y! V G continue;/ }6 C3 A) _1 }! z: x
}2 N. w/ S. f" X/ u0 v7 ]
pInvSort->MoveItem(i,nDestPos);
0 s& E# @) w! u; l g_DPlay.SendMoveItem(0,nSrc,nDestPos);' x7 ]1 d: j/ N. C/ i; O
Sleep(5);/ `& S5 d% w! `' V% z/ \: L
//Error("移动 - %d->%d",nSrc,nDestPos);
0 G9 x" j* v* w$ z* X& x0 K: B5 J* L7 T nDestPos++;
0 G! v3 ]$ u4 v8 ~0 a }
% M3 g' P, Q/ i- y, M- Z) V2 Y- l. e //取第一个元素的信息
* K. u. b" q) { /*) E1 V( N$ h( j5 Q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). M) C. M8 e( D5 S; p8 C
{
) h4 m( F9 ^5 e( N Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% H: v- @+ \8 ~, h1 ^
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' D+ c' x' E; G3 d3 k6 k
}
! ~( \8 L9 p, V9 @ */
6 T2 I! G$ k+ d7 L //////////////////////////////////////////////////////////////////////////
. H0 w4 v. D7 l0 q* ~; G break;
1 g' [. I' S5 V2 |5 q: H }
M9 L, g8 F+ V9 h" @- @& F } ) ^8 |, `$ U$ V9 n0 I( Z! s
}
! m: C( p% [7 L6 w& f$ i- {m_wndMenu.SetVisible(FALSE);& X" \+ f8 S. [& z+ C, d, p
- w# g; P6 _% g7 p8 @2 G7 x1 {--------------------------------------------------------------------------------------------------------
6 A) G4 h5 J) d8 _/ b5 Q1 B* o( y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 q5 |( P4 h' b/ n$ l5 V
{5 M1 Q; N( V1 D
BaseMouseCursor();* a5 R% S) r% Q4 l# m- x: O. J {
}
' L" x; C6 s% o& ^* l I; v; ^3 t在其下添加:
/ I% Q# u" [/ z% wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 G! B! e k8 B5 b+ v# }{& P v& S: j2 K# R/ i9 S6 f5 Z
m_wndMenu.DeleteAllMenu();
" b" O! z7 { \6 cm_wndMenu.CreateMenu(this);
% V, A! ~5 \8 @9 p: wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, b8 d9 }! U8 j# q: |. ^
( S3 K& k. y7 y: _/ u4 R9 Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) s6 I" X' ^& `2 s0 i( C2 R: k) n
{
m% @" a" a) v1 ]6 u1 P0 _) u //P以上级别才可以删除所有道具
, ~; W0 q8 z+ Z) ^; J7 b' I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 e+ f" I' Q5 @6 Y
}/ f; r/ L& l# X+ p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 a! T L2 Z w$ }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& f" N O, |% G: U& e
m_wndMenu.SetFocus();
0 t, |4 b) T3 ?}% c7 b7 B8 m5 I/ B% O% `
------------------------------------------------------------------------------------------------------------) I& K' B! A0 o7 q* ~# }1 L$ e
************************* }/ h/ s; Q9 d! d3 T% x9 O
WndField.h文件
$ k5 |# C! u& D5 s- X4 M6 V' O*************************- I* h$ L, D! O) `/ s
搜索:BOOL m_bReport;
9 _7 o8 M( {) x1 k( T4 C0 _其后添加:
9 [& m" e; g- i1 t `! tCWndMenu m_wndMenu;
) @9 l( o) K+ `+ f1 J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 b5 U# D. g! W( t7 Q
其后添加:" N' p1 a# x1 f) m: l5 o- W
virtual void OnRButtonUp(UINT nFlags, CPoint point);: |" ^, M& c3 Y. `% N
4 g% Z. e8 P/ E( x
& e8 B" y: _' U4 N H |
|