|
源文件中_Interface文件夹下WndField.cpp文件9 Q' F# f4 V! u$ K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 L. y1 l2 c+ t7 u$ A6 T2 K( [7 Z/ A
struct sItem f3 N0 Z3 l. C' i" K
{
& _7 v# @7 B+ pDWORD dwId;
' ~. ~0 N$ y1 j! c+ S. a! x+ ]% ODWORD dwKind2;8 m; p0 D- U3 n6 [" p
DWORD dwItemId;. j. ?, V+ q4 E5 h) I. z0 ^- ?, [4 w4 H
BYTE nIndex;
) b$ u6 c/ U2 O7 lsItem(){
- ?1 N: G8 D+ K9 v dwId = dwKind2 = dwItemId = nIndex = 0;
6 @2 X6 {* c0 T3 Q( E' c}# \; R* [) n$ T2 c: y
bool operator < (const sItem p2)4 C5 s' h a8 h1 D. i |, o
{
0 f! K/ s2 |8 J- r) d( h4 g( p if (dwKind2 == p2.dwKind2)8 y: ^4 R0 K- I5 R; X. A
{
. z2 g* Q% p% Y* z, n1 e( L return dwItemId < p2.dwItemId;
8 v6 R7 e2 Y8 M2 V* V }else{0 d0 ~, T8 a$ E; b1 ~
return dwKind2 < p2.dwKind2;( E# q( f, ]8 S" Y, t7 O4 X
}
' e3 Z9 H' U/ z8 n% Z+ E x, q}# T6 i4 h" t9 {3 }* ]$ w1 }
}; `+ q: }, ]- C7 I: G5 s) X4 v
class CInventorySort
. _3 X5 w _8 N0 i) I{7 }0 p* w( A7 t2 g
public:$ i" c$ n9 ^6 Q' t, e, C) Y: B5 d8 `
CInventorySort()+ m& N! I. j$ g" F( q2 W
{2 K. [0 B% K7 y4 @9 ^( M
m_dwPos = 0;
- a2 ]5 y: l+ }" X% P* S G}
?, O4 U4 N% M( S D~CInventorySort(){}4 q4 r2 N6 J5 ?# X& q H7 O
private:
9 d+ L, U- `( F& ?0 N9 g, ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- ~1 ?; A/ n1 Y4 W7 m8 R8 f+ \DWORD m_dwPos;+ E0 f! P- U% u" O
public:9 U6 P4 Q: v4 {3 l
void Add(BYTE nIndex)
: |' X- R: w* u) \8 i$ D8 Q5 m{ V- \' v$ b" k
if (m_dwPos >= MAX_INVENTORY)1 R: J; p! t# @) `* T
{
e0 U+ k" n! A2 _ return;4 y' G% g1 m! ^7 A
}; \" g" K2 c e; K. }& C# H: x- J
m_Item[m_dwPos].nIndex = nIndex;
1 l; V/ P9 B1 m! @) q m_Item[m_dwPos].dwId = m_dwPos;
% F" Y8 C! x* p6 e( f' W m_dwPos++;* E$ ]' o5 e; k1 t' U5 u5 |
}- T5 D9 @% c! |- z. I6 A G
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! n% @5 i' ]6 ~) A# ]8 g1 O
{
8 A. Y" K. k( a! I! p for (int i=0;i<MAX_INVENTORY;i++)
3 \& l6 W/ ?0 {3 c: V G {
1 C( N, \: ?, Z6 l$ J! } if (m_Item.dwId == dwId)
' C5 f! K) J: P- p+ h- x5 i% d {1 o9 V, ~" \7 Z0 A/ t; c' H
return m_Item.nIndex;0 s4 ^# I& L0 e) Q8 H4 G
}
4 T( j" o' @/ ^' ^$ e }
8 f6 q, C3 \! A! @" `2 { return 255;
% q' e' i D( I6 |}
9 F) ?% i- I( W [9 ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 E. H5 {$ ^- B/ z# F( ?{
- x6 ]5 g7 B# I0 i7 x5 c BYTE nTmp = 0;+ F9 w6 A% K6 ]/ n9 R8 C
bool bDest = false,bSrc = false;$ J3 ^0 N' O. a6 S; P5 a7 U
for (int i=0;i<MAX_INVENTORY;i++)1 ^8 a; C2 r2 M1 u
{
/ \: P$ [! x) f3 G. j$ F. N if (dwSrcId == m_Item.dwId)
5 y. M: Y2 X0 b, i$ u+ P( l: a) N { A0 Z1 b' L# V2 {5 T
//id相等 则 改变对应的dest和src M! L5 a! |; I1 o* Q( d
nTmp = m_Item.nIndex;
7 g i; I9 d& R8 E3 z7 F" w m_Item.nIndex = dest;
' j, H- }2 X" }/ e3 o; B }
# N5 G8 E, f% C0 { } y% f3 @& }+ v& O0 a
//临时数据保存完毕,交换开始7 k' w% l0 r) o( E. F- s: `
for (int i=0;i<MAX_INVENTORY;i++)0 V/ a; @$ G& Y; M7 O1 u; d
{8 |- c6 F, e5 G/ X" {4 {
if (dest == m_Item.nIndex)
' h8 m3 O* s$ |7 L. O {8 m. Y; M& \% r+ E M/ g/ |
//id相等 则 改变对应的dest和src
+ P0 B, h+ G, B! @$ _, Y8 t" F m_Item.nIndex = nTmp;
0 ~5 h+ B& k5 q- e O, j }: J7 k" p5 v; G4 j5 Z
}* O# W6 o3 t& q. b5 |7 l# N
}2 e( P, n2 }! y3 f! Y+ x8 n; a( t
};
4 s! y# u, H2 D6 _ Z% q2 x-------------------------------------------------------------------------
q& K9 M9 l% Z9 q8 u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! p2 h+ s5 j7 ~" K, U+ {/ M
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. ^6 X0 o0 d8 h7 |" H紧靠其上添加:
1 V/ {; A, V. a$ I/ D/ Q+ J) Vif( pWndBase == &m_wndMenu )
" I( W. y" g7 b2 A$ f{( `. y, P# C' `1 v" P, a& A' y
switch( nID )
% k" t8 L: s4 K {
* S& ^) I1 V; T D" M case 2:+ D+ N4 @$ ^8 }7 l4 U: Z' F
{; o$ \5 W: L2 J4 o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 ? w% Z( ?/ |/ |/ l* R1 h
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): G* C: w) }: J }" j6 u* K# t6 j
{
9 B* O( t3 g: p break;
( Q* g- j' a. A6 x i }
& L9 g1 C Z# i; s5 @ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) X u# [+ E; o2 c( W6 k' K- q
{9 ^5 Y$ d0 P4 X6 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! _0 s3 j4 w' N* x" B! A& J
if( !pItemElem )# v. [9 b4 Z! m; Y+ E
continue;
; M9 b4 m1 _/ M if(pItemElem->GetExtra() > 0). N% I1 v+ E- Q0 j
continue;
, T! w4 p$ K3 o0 P/ n9 y* b if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 o0 p- Y, `+ N/ ~) e
continue;& H- I. ~ y b$ E# e8 f
if( g_pPlayer->IsUsing( pItemElem ) )
: Y+ H$ ], L( t1 J! u continue;
$ [' e! }8 u: g& Y' c if( pItemElem->IsUndestructable() == TRUE )% ?1 i- s5 J1 ~- `8 I; P
{
" f% W, U2 L) A4 ]. Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! c& |' c: K4 Y: z t8 O
continue;' l( v( I2 h1 T) ^2 S
}1 Y% s5 l, E, ^( i
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! d0 |! w5 u2 |. ? }, A# ~7 ]/ f N- A
break;
! R. [/ U1 z2 I3 S: H% }5 c }
* ]3 A, W; @* o* ~2 E case 1:% [* A- V- b D1 I+ Z
{
( D* r$ N+ m9 W; n //整理背包
. m. Z/ D3 M: d //////////////////////////////////////////////////////////////////////////
6 f8 _6 P2 h) a5 B; V6 P( F* Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( z8 G" a3 W5 P# u
//////////////////////////////////////////////////////////////////////////
1 S' D8 z# E; b7 f( H- k& e' y //////////////////////////////////////////////////////////////////////////
/ e1 O7 ~/ ^6 a) z* _/ G" o5 O; e j CInventorySort* pInvSort = new CInventorySort;
6 j- @ X7 f- J* e vector <sItem> vItem;; K8 E9 o$ ^$ C/ U8 l9 Z
vItem.resize(MAX_INVENTORY);//初始化大小, v/ S) j2 {6 b) A. |9 u9 u2 u
//////////////////////////////////////////////////////////////////////////
- o# [% e3 y2 t4 { //填充数据
1 y8 T7 }6 ?. Y for (int i=0;i<MAX_INVENTORY;i++)
8 S" v/ L8 z3 w) s2 K a0 W1 V {
' T$ W+ G) u( I/ w! X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 B6 D, b6 D/ W% S" c( L# `# [ if (!pItemElem)
) T* I9 e9 C/ S! `$ c {. p B; e( R! D1 Q) |! \
vItem.dwKind2 = 0xffffffff;
1 M d1 z3 o4 x" L6 e vItem.dwItemId = 0xffffffff;
' k) r- I. c$ ]4 R0 e vItem.nIndex = i;! W: f1 a. }; i; j' _
}else {
- U0 W7 U# f' b ItemProp* pProp = pItemElem->GetProp();
$ o7 S( `/ K' E6 ^4 s7 _& l' y5 a vItem.dwKind2 = pProp->dwItemKind2; K* t2 `: t# _; t
vItem.dwItemId = pItemElem->m_dwItemId;
8 m& y* J/ d1 v7 z vItem.nIndex = i;
, j5 y, r- Z0 D6 C0 s) z! o% \0 v% g }
: ^. z1 [+ P- e1 z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& Q; w% a2 V; n
}! |: g/ [3 I' @: ^* o8 l/ T
//////////////////////////////////////////////////////////////////////////
_$ q4 |* E5 J# @" a# G! m sort(vItem.begin(),vItem.end());//排序
" Q8 H" r( o! n; s! u" C# m //////////////////////////////////////////////////////////////////////////
- m0 {' J+ B$ b; O+ v, b //交换% C" M1 s4 T9 J: ]# g3 O
for (size_t i=0;i<vItem.size();i++)# M, t8 V, z& R, I2 r: f" h2 @- H+ p
{3 M' b6 x/ X9 ?, W( `, C
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 A" T3 n& M( c0 |# C9 Q! L pInvSort->Add(vItem.nIndex);" Z4 ~; o$ d3 g8 H' @* c
}% E0 t5 z6 {* h! }8 x; o6 U# y4 Q) [
BYTE nDestPos = 0;4 ]! ?4 c+ r/ q+ @( t
for (int i=0;i<MAX_INVENTORY;i++)" x+ f0 k7 \7 o. ~" l e+ o# K" ?
{& q4 b4 W- F! I) W5 g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ C3 q3 f% ?* v7 q$ U6 { if (pItemElem)
- R, c+ W( Z m( S0 t e! w# ^ e {
& T) D' H+ J# \4 C. D if (IsUsingItem(pItemElem))) w3 }( W$ V! Z2 X
{
q; j6 J! `% r //这个位置无法放/ s! b! m& o+ f# O( a6 A3 h
nDestPos++;
+ ?! [0 ?8 o* z; {% n7 g2 F5 R- g }9 F J% l* B ^* B$ y
}
" H7 e4 x4 Y1 W7 ^( O g& I- u BYTE nSrc = pInvSort->GetItemSrc(i);* E$ O4 s8 ]5 T- s2 m/ J
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& [; Q3 G4 h7 M1 f
if (pItemElem)
`+ X- Q6 `" h5 w7 E0 c {9 V" \7 K' t4 _
if (IsUsingItem(pItemElem))4 D! b( |' z8 i/ I
{
}3 w" i1 @% c; F- Y //这个道具无法移动,跳过
$ L q- O' @5 B! { continue;9 I4 L- X9 x; h8 q
}/ r+ P, `3 L4 ~) j$ y6 t6 |! Y
}else{
" Q, S1 C& s1 y- ? //空位置 不用动
7 N7 ^0 b. o/ y6 _ continue;
3 H- ]8 q) r/ ~& \1 r. V% O }7 T' H/ L; n D/ }' s9 z) y
//////////////////////////////////////////////////////////////////////////
8 W& Y- i* t' a8 W, J //开始移动7 B1 Y* z! p- L8 I
if (nSrc == nDestPos)
: ]' a' ?& F( Z {8 [# M/ Y* g) D; ^* k
//原地不动7 C$ ]# r) y. W/ Z& V
nDestPos++;! w; {+ ^# ?* y8 v! G( g0 N
continue;8 Q* @2 W& r! z A% X
}
7 g+ @: Q" F7 R# H# o3 T! x pInvSort->MoveItem(i,nDestPos);
/ e$ T, i+ {) B. e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' F7 R: H% E) H Sleep(5);
; }3 S! w K4 d! L+ t0 ? //Error("移动 - %d->%d",nSrc,nDestPos);- h. z) F1 n6 C9 Q! L0 F
nDestPos++;
+ G4 g7 i d* ?. X7 _ }1 [7 h, t% o) m0 i
//取第一个元素的信息
9 }6 Y: C& w& f! s /*3 L9 x1 I) G4 }3 R! o0 [) g
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- P4 e/ P1 l" ?/ l. i) ]8 G
{7 D0 k8 |, @ ^! t# x+ z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' v8 I! E' \0 I! t3 c7 N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 c# n. L2 Y c% f& g: y9 G }4 B: B+ F6 T. N4 W! S
*/% G7 U/ R( I. x. l9 n6 f2 i
//////////////////////////////////////////////////////////////////////////
u E' U, B" _2 C6 K6 E break;+ i& b6 b* e3 J& [) x
}. r0 b& f: S* ?8 T- |4 G
} 3 V4 Z2 @& }/ T7 u: Y* S' n5 I
}
! N: q. e% I4 n% Y3 |m_wndMenu.SetVisible(FALSE);
. f( Y9 G( |! a1 l
8 T, o. y2 U5 R--------------------------------------------------------------------------------------------------------
: G; [% ?1 |1 F% m9 Z搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- Q: a9 l0 `% Q- @& d8 R{
7 o. e1 }- m8 Q, T WBaseMouseCursor();. h5 P& @; K+ q8 e/ e
}1 S% V9 v! o+ r8 I6 i
在其下添加:# Q1 B' l8 T! `
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ K& J& i8 |2 z6 o* v* e
{
7 L" b6 i6 @7 |* K9 z, G2 Zm_wndMenu.DeleteAllMenu();
, E" I5 u2 @; S( Q1 C/ v+ [9 N) Y. qm_wndMenu.CreateMenu(this);
_3 Y; n- u) tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# d4 }2 u+ ^( H$ F! ?( l
. ^4 A+ d- a9 g! m q: yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); b3 m G3 d B k* z2 Z0 Y
{
9 Q( `& p, ~. T8 n/ p% E. U ~: s //P以上级别才可以删除所有道具+ K3 c7 n% F' p" k' m4 Z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 f3 O) T9 U" h4 V5 S
}
; A1 \; w, ~7 o% y# C/ Y1 D* km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( H5 y$ [/ K2 ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 d' Z# z t/ ^9 h Q/ mm_wndMenu.SetFocus(); F2 `$ k% ?; a. B+ C
}
4 f+ a: L0 q8 q, l# P' A------------------------------------------------------------------------------------------------------------
! Y* `& L0 |9 x% G*************************
* u6 o5 ^4 n8 q; v3 dWndField.h文件7 R9 ~' z$ u- z2 \; Y4 v
*************************3 {( z& H+ X; x
搜索:BOOL m_bReport;
5 r$ U7 J( n- ]1 m: _其后添加:# @/ s( U3 F& Y( D) q
CWndMenu m_wndMenu;
' _4 w% r t6 V" ?9 f3 D搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# }+ S6 O; a: C1 {其后添加:1 _. j. v: Y3 Z& ?3 p. f
virtual void OnRButtonUp(UINT nFlags, CPoint point);5 b2 h) ]& d. U" k# r. B) }! t
7 F1 X& k, K+ `% q6 |) x5 Z( j$ u; `; V& f* m F! ]6 k2 h
|
|