|
|
源文件中_Interface文件夹下WndField.cpp文件
4 d. L$ T, A1 B. A, R4 T2 |搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 i% A$ L5 g1 V& Z% o3 U/ C# z; H% a, k0 ^0 w6 w" t4 o2 P
struct sItem
- O; s& N- a: N3 P% e7 x$ X" d{
% C6 |- Y) e7 u/ J0 eDWORD dwId;6 j& C9 u$ t8 x
DWORD dwKind2;
- W" P0 Z' p/ M0 aDWORD dwItemId;! u; i- O5 n, e# C8 i- A
BYTE nIndex;
R8 W8 H$ r: s" f; |sItem(){2 K+ f6 G) i4 c( Z8 l
dwId = dwKind2 = dwItemId = nIndex = 0;, U& b" ]" N [( D. q" U
}2 c4 M/ _0 Z# r5 O
bool operator < (const sItem p2), l1 E3 [7 k& B7 \1 a9 J
{5 i# }3 b" u! b; r* ]6 l
if (dwKind2 == p2.dwKind2)5 A. h" h$ a! A+ k8 Q
{3 n2 T1 f: P( y" m1 W$ `
return dwItemId < p2.dwItemId;
# i* b: W4 l1 C! Z& [ }else{
8 Y% k3 @+ h* ~: U- t1 H5 p% U return dwKind2 < p2.dwKind2;
% a; \# X; E1 Z% |0 {1 @ }7 Q6 `( q$ z1 o' t- M2 X, g; F
}
' Q k4 Q ]7 c% Y2 s) J}; x! i% v X, n" Z% z6 L6 |. u$ d
class CInventorySort2 n7 G! C/ } R) ?! ]: z; W1 d
{. u, n' R' B, j' M8 C
public:, ]5 t$ E! T. v% L& r' t5 ]
CInventorySort()
' U8 M' o3 H o( X/ h" e{6 S7 J* X7 N9 G5 D* ]' p$ T7 M
m_dwPos = 0;
2 f9 s; m2 o; {; v}
; G# _: t0 e9 g6 g~CInventorySort(){}
0 I7 m5 I& {: ` F2 F* _! _private:
6 O8 \' U) t# `* h9 D# vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 w% g1 S6 c5 t) \DWORD m_dwPos;
* _) q- G# m6 E6 T( |1 }public:7 H- W2 N" @$ {. K2 h" @7 y
void Add(BYTE nIndex)
: O) Z6 h0 W, Y6 c- a" m; O{ h3 ^8 N$ O: c
if (m_dwPos >= MAX_INVENTORY)9 F: w' [- n* j9 b1 N: G/ t
{2 g) a7 ^2 N. B; ?( A
return;
( r- Y D% F; c }. Y; ?# z5 a3 G" w! z0 t* B& Z1 R
m_Item[m_dwPos].nIndex = nIndex;1 m' r2 g) {- Y) T4 g/ |3 r1 F
m_Item[m_dwPos].dwId = m_dwPos;
' Z0 b: Y2 O$ F" j m_dwPos++;
& ^ {' g3 V# `}
$ d, D5 f' M$ l. @% G( G! ]; Y! UBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& Q" m: l0 Z6 o. }- Z; g" H$ x
{
' U! W+ Y/ c1 T& y1 R7 H: i8 U for (int i=0;i<MAX_INVENTORY;i++)
+ ^, ?+ m7 n( _: y4 m# ~* q {/ L- r$ F4 u+ n) l5 W- E4 W* _
if (m_Item.dwId == dwId)5 p( y4 O. s7 x+ C& F X
{# c! q$ s& J p% z
return m_Item.nIndex;
, f/ H3 a b4 I$ W/ S$ a } i3 r6 }: B D
}; m: {4 l f/ \% d
return 255;3 x- H6 V! z. p+ _4 F$ W; `2 M
}
' e) B6 `8 h( f) v7 h) [% S! zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) z3 o0 f/ @; S7 `- W
{. D4 f: Y) R( \6 E: _5 q. f1 p
BYTE nTmp = 0;/ n' y% t* `2 u( [% r1 S
bool bDest = false,bSrc = false;
6 l. @1 [7 J+ Z+ { for (int i=0;i<MAX_INVENTORY;i++)
3 @. b4 x+ l5 j: a0 K) O, q {
, G) ?# ~- P- k% Z; Q if (dwSrcId == m_Item.dwId)& i% M7 t- n1 o3 g
{3 h( m% C) O* Y% s! s
//id相等 则 改变对应的dest和src7 R5 O9 D3 ]. H z" [
nTmp = m_Item.nIndex;4 b% t/ ^1 f+ P0 Q, R9 A
m_Item.nIndex = dest;
( d& @7 B6 A) X. u) ~ } b% f% z% s& G: Y
}
2 @- L+ o6 |' y* P( c& G //临时数据保存完毕,交换开始- \4 l/ `9 y+ S+ @, o, G4 @ ?# ^% p
for (int i=0;i<MAX_INVENTORY;i++)" N" e# A, m9 Z1 l8 \3 l
{
: k L& i* Q( A! t if (dest == m_Item.nIndex)1 C3 f) ^ P! D! i
{, D5 n8 i5 K& x8 X$ z
//id相等 则 改变对应的dest和src
) V) M1 X9 A; G, t m_Item.nIndex = nTmp;
+ h: |5 n- e: ~' l* n# h! W, A }
8 [; a2 {, y3 e. Q }
% b+ v4 e7 I3 H( P}# v4 z4 {. c1 G& C
};
0 Q/ p3 ^# l! n! ~( _5 n. T" }-------------------------------------------------------------------------
% S H$ B2 ^; T& Z% d' b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ m: X' e" {/ t, A( C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 P7 z+ j4 j/ s- R9 [
紧靠其上添加:. y& ~4 |7 ?' Y9 B' V) C
if( pWndBase == &m_wndMenu )
8 k4 I4 w: Q( u' ]{
8 S% p5 y7 O1 z1 o; [ switch( nID )2 Q$ `/ T! Y$ P0 Z
{& u6 O' t& f) h( j$ P+ v& i: Y
case 2:8 C9 b9 z( u( F$ T: K. o" N, z
{
; g5 b0 g4 S+ e5 O& S. n8 [ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 i" p6 p( ~( R
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ z" z+ R/ d2 G( C" h# g
{
' @) t. \8 ?5 _1 r) d" J3 R6 ] break;
: H. a% H/ b& t! B) h# v, j }
1 ?! P- Q! e! [, G7 E5 V" A; T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 o- e O2 A" X# a& P$ f, f {0 Z# S* F A' I8 }& i- M5 {$ F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 k9 d, Z$ y, x2 F if( !pItemElem )
; z( a7 D& _+ T( u continue;
+ k! P$ w1 T+ E( P* Q if(pItemElem->GetExtra() > 0)3 A# x+ ?$ ]# y5 ^5 ]
continue;7 I) e' {! i4 t" `1 D$ t( ]& O
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 b; ?. n! w0 U# Z+ ^; h$ k ]" l continue;
D/ L8 a& w8 u$ h if( g_pPlayer->IsUsing( pItemElem ) ). M) n& p$ c. u6 g0 x% e* t; ~& E
continue;
; }, Z: b! K4 _, n |5 m/ g/ p if( pItemElem->IsUndestructable() == TRUE )
) ^ f" S- u: G: a O. v! ` {$ C+ i0 [2 j+ b" @- p, o
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 `- G8 n o& a" V$ C( a continue;) l3 w$ A5 r/ N9 s2 K
}
, D- m, l9 n6 l9 \ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 j0 E2 |! v" c( o, I! U U! L
}
+ v; ]& }: V2 N5 ~5 N: f break;
6 i: Z* l/ N" k; ` w7 U% J$ C }; R+ w& `3 |2 ~+ s. D
case 1:' r' t; U0 K4 k. h. W2 k
{; c, _4 o& p( |0 }
//整理背包2 B b* _, K) K5 ~ r' n( q
//////////////////////////////////////////////////////////////////////////
' r- j- s6 ~+ J/ F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, m/ ]( p" J K4 r( @- h //////////////////////////////////////////////////////////////////////////. l7 F5 a3 g0 j" q
//////////////////////////////////////////////////////////////////////////
- S6 ^/ b$ I2 y# X2 v+ g CInventorySort* pInvSort = new CInventorySort;% Q9 _% E7 o5 c' \ g5 N
vector <sItem> vItem;
; s0 j+ e2 g& K* w vItem.resize(MAX_INVENTORY);//初始化大小! w% I' [$ ^8 I% Y' X {4 a% x
//////////////////////////////////////////////////////////////////////////# I" d7 O; u1 ?
//填充数据
/ [6 T- Y# y7 s4 L for (int i=0;i<MAX_INVENTORY;i++)3 \9 g3 z3 w, E& _$ K& R6 i1 _* X
{% G2 I& C' ~0 J2 v' S, S- g; t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 U7 D% s( R% O1 n" }( f1 E* e) B2 d
if (!pItemElem)
7 ^2 g# J& B4 X8 ~* I9 w {: c8 i0 |& `9 F: ?
vItem.dwKind2 = 0xffffffff;
( |0 n: i% A% `, h" h' {% M' c vItem.dwItemId = 0xffffffff;
2 _! P: w' S* u0 C2 Y vItem.nIndex = i;
# T$ ?, j9 I8 x9 Y+ M' M$ z }else {2 O/ x* O# {7 j8 P- v5 A7 o: S
ItemProp* pProp = pItemElem->GetProp();4 B n3 o. W) A* @
vItem.dwKind2 = pProp->dwItemKind2;. H- s- I7 Z5 _( i- j, N) C2 j4 t4 Y
vItem.dwItemId = pItemElem->m_dwItemId;4 a. v) J% o$ e3 l4 K1 |6 V
vItem.nIndex = i;, k7 R, B& Z( u
}
- X: g8 y3 l; h5 S6 u t0 S1 ~ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* v9 L0 G) P; e8 m3 m f. Y8 g }
+ m" H' d) M0 _+ C+ K! D4 K V0 K) @ //////////////////////////////////////////////////////////////////////////
6 ` o( @4 V8 h( w' ?. D6 [ sort(vItem.begin(),vItem.end());//排序. {0 b2 B' t, P" M
//////////////////////////////////////////////////////////////////////////7 m2 O; \2 F8 I
//交换
; b+ ]) L# d9 a) @0 r6 C for (size_t i=0;i<vItem.size();i++)& p5 j' `8 H% ~2 L5 n
{
# `* ?' v" p: i4 l b$ Y0 T o //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 n# f2 p$ m3 d
pInvSort->Add(vItem.nIndex);7 M2 a4 U& t; D% P3 J
}4 z: T2 G$ M! a
BYTE nDestPos = 0;& D6 w2 C/ ]2 G5 g2 H {6 f( j
for (int i=0;i<MAX_INVENTORY;i++)$ ?2 G* E/ [) v
{
# s/ a9 _* O! Y! V( k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* q# n, y' ~6 ]+ t8 E9 p, G if (pItemElem)
4 t! f* h( ~$ m: Z- q* D1 w8 \ {, N7 ^1 V- u) A
if (IsUsingItem(pItemElem))
3 g/ k/ Q' {8 i; w {
: W7 y/ i3 R' H" [+ u$ f //这个位置无法放
3 r: B) E$ z0 f1 v4 e5 D nDestPos++;$ D! T8 g1 l* l3 M. K6 B
}! [5 v1 ^6 v) Z8 K, c& Q
}
- w. G6 J) Z5 N' S BYTE nSrc = pInvSort->GetItemSrc(i);) l7 d! p7 ]- M& a0 S2 ?/ u/ R) I
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 @( P* w" q2 r: _1 _2 m if (pItemElem)
, C; Y/ C* g1 n! J {, |' J! z$ ]5 ]! R! N, ]4 N
if (IsUsingItem(pItemElem))8 W; K5 e1 r5 \8 X
{7 e, }: J8 `! B5 W% Q
//这个道具无法移动,跳过
4 z0 l6 X- l$ o, t4 M6 e continue;
7 [3 C3 U, {* D! E( o( z }- {1 [/ _- Y$ v1 d0 a n
}else{8 k1 _1 h# M1 d: j3 a* n2 u/ }& n
//空位置 不用动
2 H, J3 W% Y3 a8 ~9 C3 D2 b continue;
0 S" l/ K4 w5 s2 I/ v/ a0 M5 J }; l& G/ O1 m) m/ ^# L+ z
//////////////////////////////////////////////////////////////////////////
5 S( M, k% h7 e% g: u6 {3 { //开始移动
9 A& }& c% C1 B if (nSrc == nDestPos)" T( d4 W. Z- K0 {3 V
{1 Z& d" p: N" {
//原地不动
; ?( z* k2 W3 a& e" q nDestPos++;
4 W/ V1 X! W5 [ continue;
4 `2 c1 S8 H+ j5 T }# o3 I7 _# o" |
pInvSort->MoveItem(i,nDestPos);
. u. p5 I- Z8 h" s* s g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 R$ L5 f& g* l; o, `! { Sleep(5);
& N% l: `( E. {9 |6 d# F //Error("移动 - %d->%d",nSrc,nDestPos);' K' h% e' F& Z' a3 J# h
nDestPos++;
3 U. t4 ^$ Y! z2 D! a) X% a }0 s( ~+ A$ ^( l0 M0 k3 h. u {% d
//取第一个元素的信息& q4 v2 A& W7 Y$ `1 y1 I2 M4 L
/*
2 F* h2 M- j1 K, ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 Y) F D6 Z! L m: \7 U" t {
8 `/ O) s% u, @4 Z3 L4 \' q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ ~' X" a# q' i7 Z, {/ F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 ~! ?5 v" v8 {6 w }- o4 a2 I4 k' j$ ?1 u/ }: ^+ u
*/
0 m% [- _3 N- s' Z4 F$ d& K //////////////////////////////////////////////////////////////////////////2 ?2 O$ y N# t5 V
break;
3 j! y9 h+ A% K' y }# ] x" H; \% G+ U
}
5 V( |- a+ X/ ^4 Q}
% F( ^. H( z0 k: Zm_wndMenu.SetVisible(FALSE);
! B8 T; v2 M* K* x. |6 q4 {+ [
4 w# G! [2 R! ]8 C6 R! B% z--------------------------------------------------------------------------------------------------------
: ?3 H: ]5 A, q) S/ c% D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 |) P! v9 h' W6 W: g' w; E) K{
8 |3 M+ o- G5 O" ~, tBaseMouseCursor();9 i+ F g9 \8 T
}
- E) ~: E, W# ]1 [6 O; x7 M0 c在其下添加:8 y( G; v+ F' A- N* J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 b; k3 V% ]8 F5 t. V{% Y4 q1 e3 C' M
m_wndMenu.DeleteAllMenu();! D2 W/ h) m/ p+ A
m_wndMenu.CreateMenu(this); L. c. M8 @9 w. [+ [# V* V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
M* e! |8 q8 F7 ?3 p, _5 P
2 c$ N9 R `0 m w9 w h( z: s3 a) hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 B% S& ~2 _( W( u
{
. R) y, W8 A& B9 ^0 Q& G //P以上级别才可以删除所有道具 ?7 u0 p+ ]1 W; R, C/ H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ b; D! t, A1 ]6 \8 Y}
$ O# f" W/ C" R' z4 o5 f1 [8 v# H- lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 Y3 ?7 d6 {5 C9 B9 ]/ wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
T3 ^; M2 o" {1 U! [m_wndMenu.SetFocus();
9 d ]$ v! ]! S# [* C$ i% K}
; ?5 q1 ~) k ]" Q------------------------------------------------------------------------------------------------------------
, [2 X* M' S) Q" u! ^, _ |! [7 Q*************************
* P0 m, z" {! X. @4 CWndField.h文件# }; Q( }2 j+ a, h6 Y' o3 G- R* t
*************************5 ^ K+ B8 y3 `4 P
搜索:BOOL m_bReport;
1 P4 W0 @: l6 u D' U" m- |其后添加:8 s( F+ W3 ^7 G' `
CWndMenu m_wndMenu;! a( y9 Y/ S1 c" ?9 ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' }% i2 _& K+ x0 y
其后添加:( M$ ? N: k( d
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 ]% I1 L7 }) \9 ?" s% e3 @' j0 \0 k8 b8 e7 [3 X$ q3 h8 A0 Y
+ k1 M' T4 i) e+ ]2 c8 ?- U |
|