|
|
源文件中_Interface文件夹下WndField.cpp文件0 o6 [" c4 B9 f% c( h8 P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- b7 n1 p# d4 N: [8 \7 `/ j6 {, ]' R% F, x( X' G3 `
struct sItem: ^7 f X8 y' J, ~/ I! x
{+ v( I3 X! n" T1 i9 j
DWORD dwId;
0 v7 p1 O( k9 jDWORD dwKind2;
! I* D6 N/ P) |2 j/ PDWORD dwItemId;
. h& P. W- l S/ A" P6 d6 SBYTE nIndex;( z- E% L9 B* p: v' L
sItem(){1 h/ M8 m& z; v6 J0 f( |9 s) l4 z
dwId = dwKind2 = dwItemId = nIndex = 0;' ^% ]2 ?4 ]' A3 Z) O9 {4 z1 E
}4 D2 n3 b- D7 {0 d
bool operator < (const sItem p2)
. H' Q* J- D* D0 M/ b, [$ a{5 A6 r6 h- F8 _2 }( h( _: {1 T. m+ X
if (dwKind2 == p2.dwKind2)
0 k9 ~( B0 X* P( |5 \2 z% C( } {5 O3 F) b+ m& O' G6 G/ K3 N
return dwItemId < p2.dwItemId;
% T( ?, L; ]7 {" y9 f; r+ P }else{) i7 S% N( n) k; U! |6 t; V% U
return dwKind2 < p2.dwKind2;
% W! X2 y# \; o }, w5 i2 c4 G; z: D
}
4 x g; K/ e! }- Q, r `$ \) d, M};1 O8 C( i" I" S: T! e9 i: l
class CInventorySort
f3 D; b' j9 b{" h7 b0 N" g c: V1 x$ w; h' N: L" r
public:
+ i' L# ^4 |6 b* w5 p/ x8 g3 p& r$ WCInventorySort()- V! V% ] {; g0 D* n
{; c8 g0 a' Z( h8 I
m_dwPos = 0;
! U& J/ n( ]$ r/ _+ i# ~7 {4 f}+ Z2 N V6 J( \) B
~CInventorySort(){}
$ ?9 _" z1 A+ t2 K! u$ }private:4 ` i2 m+ e5 V- j+ u* p1 f; I8 f& D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# R" k7 h/ g, w# n6 u; A' M
DWORD m_dwPos;+ x, K/ y, r$ k( f7 }
public:: v3 v! B% Q/ Q0 G& z# \" }$ H. a3 u
void Add(BYTE nIndex). [7 ?! V0 F% e9 f0 X' O
{% x9 o" o7 ~+ t6 ]
if (m_dwPos >= MAX_INVENTORY); H/ ?; q2 k# C1 U( S& C
{# N' ?9 Y( R9 C, N
return;" h; c; C5 v1 s, `1 A+ R
}5 S; L0 C" H, c1 B+ ~. w
m_Item[m_dwPos].nIndex = nIndex;- m [7 H3 D! i7 I/ S
m_Item[m_dwPos].dwId = m_dwPos;
0 U) w$ A) _: I# C m_dwPos++;- ~$ j+ a; x6 n5 Z
}
( ]+ g' D; I8 C" y$ l* y2 FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 U3 [7 Y( v; A- q
{1 w, {$ C+ J1 y, s) J
for (int i=0;i<MAX_INVENTORY;i++)' h) T9 U- X4 w' r' L* @
{
, n8 f* Y' O+ i! z if (m_Item.dwId == dwId)1 h! k/ d- N( U: ]+ S8 s# H; r
{
' T2 r5 H( z' j+ C7 {4 P return m_Item.nIndex;
1 g! l0 \. A% b: a. M7 H }
" @1 F z K$ } }/ O: Z" w; b/ W6 O- k/ A/ ~
return 255;
" B! X+ u3 t8 R3 [. c}
( L3 |9 v5 l, H- m$ zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 Z* @, y# T4 J{8 B P* ?, s) a8 ]. W
BYTE nTmp = 0;7 {% x' d, Q& w5 O
bool bDest = false,bSrc = false;1 u" E& x8 B0 V, h
for (int i=0;i<MAX_INVENTORY;i++)7 b& l' n) G( U: s# {( E1 w% w3 Y
{
! |, Y* P [3 v: E: X6 q if (dwSrcId == m_Item.dwId)& N5 h |' h% k" @* m) E- { Z
{
7 ^. e8 |: p/ K& B/ n" p' s //id相等 则 改变对应的dest和src
* f( V, w5 O9 l7 Z% g( T* E' c nTmp = m_Item.nIndex;
: R& k% a1 P/ F3 M( Z7 V m_Item.nIndex = dest;. n. u! ]4 n% Q8 {0 }) O
}
% k" x/ z# |* e, U, o }
# g/ |3 o- t O! `) e //临时数据保存完毕,交换开始2 G% v3 B. C j' y: Z
for (int i=0;i<MAX_INVENTORY;i++)- j) Q8 t4 {, ^7 Z* {! |0 ]7 [
{# p2 q- c% B/ Z4 F
if (dest == m_Item.nIndex)! G. I) {) u1 s% [
{
. E7 A8 w& M) Y. |0 @5 w //id相等 则 改变对应的dest和src
" x1 j! |1 K0 L8 l# N m_Item.nIndex = nTmp;
6 y8 N ?* `' X* J8 k h( j* G* F }
' }# {+ J& N9 _4 |, y& h/ s7 N4 [ }1 ~- Y: h: r( `' e( A- |
}
4 ?; V) b9 B. l! Y9 F};
8 k- D: ^* I. p Y X-------------------------------------------------------------------------; C8 ?$ A* u* B" ]7 ^6 k
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, {5 q& Z$ Q. a7 A$ x7 i, F$ _; |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- h& t: n: a. V* A! u3 n紧靠其上添加:3 M" f1 E; s, ~6 S- H5 Q/ k) m
if( pWndBase == &m_wndMenu )
, c0 |- V/ e; O& \% k) R{
& b0 @% | C) N4 q+ \; P switch( nID )
: t6 s+ S. I# ]) n9 `' E {
) b5 |% c: b# @5 d% {0 x* \: p case 2:
1 r. f6 y% t% {! I* Q6 r/ F {, T+ I r! U7 l8 z1 Y3 A
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& n& _5 j: U- f9 z$ B. y8 q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 R5 B- D' a' s6 F {
j$ z6 m) f. T9 d& {# }9 Q break;
, V$ o! \- w' K( F }
$ |4 K, K! N5 S( R3 h9 Z; `5 h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' p# o# e0 b4 `
{/ F6 z+ I; G( _! b- U; v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ x* m# e8 I' k- \5 V if( !pItemElem )4 x; y7 L, A' R
continue;
0 |- a6 ~! f! W3 z9 N, a: X" q if(pItemElem->GetExtra() > 0)
0 \8 S3 k2 \* u) ]8 ~& i continue;
( v, K8 ?: |* K4 B6 f% \5 A if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! \; N+ T/ n u* \0 S* Y( A, e continue;
( p' y" L! A- C1 g7 {1 A if( g_pPlayer->IsUsing( pItemElem ) )& u4 F0 @4 `2 {9 |
continue;
Q2 x+ V9 V2 R) V9 T if( pItemElem->IsUndestructable() == TRUE )
" o7 Q% }- z$ h8 n9 e% v {, J+ W. r/ Z# a% i- Q2 j5 S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, F7 z2 v4 ?: K- b8 _ continue;
: T* ]9 ]# a" s8 I# } }8 g2 b+ W: M9 D5 Z. \" j
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 s9 L) l/ V! z1 G. H* `4 ~( s) T }6 m, D$ l' _3 B2 a0 z- q2 c& b
break;( O7 \! [. }6 R- n- P6 \
}0 r! ^" Q) q) ^' ]
case 1:! h X: M9 l7 K; L' _) z' r
{
; k N4 V7 a3 [; k8 t7 s //整理背包
8 x& m! ]. c, {# N ////////////////////////////////////////////////////////////////////////// H% S" m% h1 Y: [6 w8 i3 I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& u3 J* g8 P0 Z7 y) P) w; M
//////////////////////////////////////////////////////////////////////////4 E1 x, O0 x+ n; F3 k0 ?
//////////////////////////////////////////////////////////////////////////
9 ^- z) Y5 _& J( K9 o& B& p3 N CInventorySort* pInvSort = new CInventorySort;
; k6 a9 m! g$ L+ H1 g vector <sItem> vItem;
6 [- A5 T7 \$ [ vItem.resize(MAX_INVENTORY);//初始化大小
* n8 Q* }: q: k, v$ X0 O; ? //////////////////////////////////////////////////////////////////////////
; e- k! W- q* v) g //填充数据% A9 e. K3 D3 h1 p
for (int i=0;i<MAX_INVENTORY;i++): o2 d7 K# _" o, s& Q
{
0 q3 Q5 u8 U2 k. r, ]6 U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: b" M; r. K0 a( t/ o' g) o if (!pItemElem)2 c4 x0 M/ w/ M8 Y
{' ~" a3 O3 l5 E
vItem.dwKind2 = 0xffffffff;
( U6 a, {0 }: {& c7 f5 c vItem.dwItemId = 0xffffffff;" i. F/ [6 N" @6 M
vItem.nIndex = i;
0 f3 z$ |7 i X x$ s& k1 U }else {. T4 J) D j0 G) Z8 g1 d$ o
ItemProp* pProp = pItemElem->GetProp();
! N$ p1 T- i% v vItem.dwKind2 = pProp->dwItemKind2;
6 A% w" M( @9 C3 O) w! ` vItem.dwItemId = pItemElem->m_dwItemId;! ^1 J7 ?: @) b6 l
vItem.nIndex = i;
v' z" Z1 _& F/ S+ K4 H) b }# D/ w9 n- f/ Q4 M6 c
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; e$ G" W* K4 ?
}
0 q7 d& X" C. X8 H9 L4 X //////////////////////////////////////////////////////////////////////////4 Z1 R. u+ g w# o6 n: k6 W/ m
sort(vItem.begin(),vItem.end());//排序7 ~! X" ]; b* X- c$ I
//////////////////////////////////////////////////////////////////////////# S6 I f2 W* m! S( L
//交换
: K8 D, B$ c, X) G6 c for (size_t i=0;i<vItem.size();i++)4 V- \+ P \- T& b& I5 [ i
{; L( ~! f; F j! u- B6 C* r: q6 ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( |) ~4 U" Z) _$ F pInvSort->Add(vItem.nIndex);
, B& t: V4 u7 T: h; R/ @0 c- P }# p8 G. R2 {4 J% K8 n+ |* S. V
BYTE nDestPos = 0;
" Q+ [8 G$ o" r. ^ for (int i=0;i<MAX_INVENTORY;i++)/ R( e# ?' e; M# v
{6 t* Z% b0 ]+ Z' E/ Y: G1 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: S. R! j) [9 a1 n* T
if (pItemElem)
7 M, |, X6 ]* ~. B {% m* A; i1 Y- b+ l1 {8 }2 U2 k# H
if (IsUsingItem(pItemElem))& s5 y$ i. ?: v* \& Z* d" M
{/ a- w" i) R0 I; C% f
//这个位置无法放( P. t( O% z5 L$ R
nDestPos++;
& i8 U- t( g; h, j8 Z }- F. Y+ ^! Q X, [5 E
}4 }! U7 Q% @$ T! a
BYTE nSrc = pInvSort->GetItemSrc(i);! N$ A0 \7 V! F% B( J- c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. y" S' Z- U& v$ m6 ]& Q& D& Y
if (pItemElem)
2 X. S1 s, k5 U+ C3 p8 t {9 ?/ Q- F( o2 Y0 N
if (IsUsingItem(pItemElem))& {7 v2 \( Q u3 W- B
{
+ m0 {1 F p* q. R! M //这个道具无法移动,跳过
7 a! P5 z' Y' e) [7 b3 L9 D continue;9 X- ]8 h$ X7 s7 _1 l3 `7 ^
}5 T/ g: ]; U! ~$ L' n4 S
}else{& T. h! L0 ~3 A( q# G) |
//空位置 不用动
9 S6 J" h0 Z4 ~/ d continue;' ^7 |: G3 l! F8 {; U
}
: ~! a$ G& Q* g9 U+ T //////////////////////////////////////////////////////////////////////////
, ^- X* O) ~ Z3 B, q //开始移动
. m3 J* W' m% r7 ` X/ Z" z if (nSrc == nDestPos)* ]& D1 K6 n1 B1 U$ L
{: i% o0 e$ ~2 W6 I* a* g) Y: u4 ^
//原地不动+ ]3 K0 \/ H0 B7 U
nDestPos++;& ]" c8 B* H; f& t0 I
continue;
" Z6 ~" c2 `1 j5 t; } }
: q3 e! `$ f' w2 e5 ~7 A pInvSort->MoveItem(i,nDestPos);
+ N8 X) m3 d- D+ p. J g_DPlay.SendMoveItem(0,nSrc,nDestPos);, ^4 q) c) T0 m( d) H# P% I
Sleep(5);/ w- s- L/ a- w( K" v2 Q
//Error("移动 - %d->%d",nSrc,nDestPos);
* D+ e* o3 p, x$ O2 R nDestPos++;
0 a* t& O# o1 D& C/ z, n }
2 e& z: q; j( u: E) i# P P //取第一个元素的信息& H- I Y3 h! N/ z
/*+ B/ _% M0 S3 x" \5 F2 k
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ J/ \9 D$ g g) R! ^; w3 f8 m
{
- Z8 |/ }* [' j3 Z' i. M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 F+ O3 U# A8 A
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, S4 F) u; o# \; n) l# \
}% s* A& _7 {7 g( ?
*/7 w% _) r6 O- a! t3 P
//////////////////////////////////////////////////////////////////////////5 q, ]: ]. n8 x! G$ R
break;
; c n0 O$ V' o: s6 R% e* D6 i }1 a5 X4 |( B9 r5 K% q
} 5 H# I: Y7 W' g& _, t
}) E U: u' I |- X
m_wndMenu.SetVisible(FALSE);
4 @" d6 e2 M! f$ \6 x% Q6 K3 c3 x/ Z5 r5 b3 C2 t8 G' @8 `
--------------------------------------------------------------------------------------------------------
; y* B: a: H; f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* U% i9 ^5 \% B7 K
{$ f) v! e$ h" j/ B
BaseMouseCursor();
) J z* l3 G4 a- P+ K2 q}& }- Y' A1 t R2 z$ ~0 f4 ^
在其下添加:; n& X, H* ?2 m0 S( _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 n' v# ~- r5 {$ B! c: D{
+ z8 ~- \4 g& ^9 I! r8 r+ im_wndMenu.DeleteAllMenu();5 s! |! E% J, T3 p7 L: B5 M4 b% ~
m_wndMenu.CreateMenu(this);! |/ J- p) {3 ?4 C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* n% g% d4 g8 i# T' H6 E
/ f a$ q4 \- ~1 t/ ^* Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ \; P- } c& P6 k! d( L
{
$ q! o% r# N5 t3 e //P以上级别才可以删除所有道具% l+ Q0 Y p" e1 _! @; M8 d, Y$ h
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
w/ i( R# l6 ~0 t, C* W/ e}
7 p W8 j& E. ^- F- |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 V7 F4 V, M6 y/ K. J. ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 G8 x2 d% x1 J" p' L! y' vm_wndMenu.SetFocus();( {5 x- V4 m. w
}: g8 ]; q8 w1 N# g
------------------------------------------------------------------------------------------------------------
5 e- B" y3 b6 U+ Z# C3 d( L% v+ r*************************
1 ^% _) L( c% D3 s B' v# [WndField.h文件
$ ]9 `7 l/ x& J. u*************************8 ?; X' i9 g% E% [
搜索:BOOL m_bReport;
. _. T: s$ W, l7 ^, N, |3 @: Z其后添加:3 [8 {7 W4 I# B9 }% w
CWndMenu m_wndMenu;$ z+ t _1 F8 K/ v3 B" A0 S2 ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& t$ V _5 V+ ^% H3 d3 W. ], c2 ]+ h9 M
其后添加:* W, }1 |3 r0 \6 g
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 d i) x; `: h& U+ ?1 Y! ~9 q4 P
) T- ^' @# Q' D# z1 l) b8 O1 }; S3 u7 H1 O7 J, `! U! L
|
|