|
|
源文件中_Interface文件夹下WndField.cpp文件0 Z! Y; Y2 Y/ F- c* I) \3 t
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% Y1 z: \5 h& j3 }2 h9 }+ S; A* i6 k @& b0 i" g
struct sItem
2 f# P. K) h) O# M2 M{
2 e E. g( _7 c. d! ? `DWORD dwId;
. Z5 Z0 W! Q6 X9 F$ T( Z- tDWORD dwKind2;0 s: L0 x' F+ V: o @# q
DWORD dwItemId;
5 X! r* p, F8 x7 Z* k0 y9 YBYTE nIndex;( ^. Q+ V& h/ |: ?. E/ S. d
sItem(){
$ o. f/ w+ R) j9 R; [1 v dwId = dwKind2 = dwItemId = nIndex = 0;
, a/ ]. D- d4 n& Z6 l}
" g L2 ~) C3 a% z/ ~7 D' ?0 U4 abool operator < (const sItem p2)0 V) \5 P4 ?( P* r; w# R
{. N$ l; K( c$ N! C" H
if (dwKind2 == p2.dwKind2)+ R5 Z- q- U3 S4 c+ h+ v8 E
{
* R( @7 r, Q' c; v3 Z& l8 r) B, j9 O return dwItemId < p2.dwItemId;
2 y/ v/ ?$ A( r! K/ t+ y" F }else{1 S% m2 F O' y7 r8 I; b
return dwKind2 < p2.dwKind2;
1 _; X+ S" {* q# n0 C }
. P7 |+ ?" R9 @5 D/ u. f}
3 l2 ]! o: ?1 U3 V' A9 n}; [: `9 L6 A% q8 O1 ]9 o
class CInventorySort
1 u" I h! Y1 [0 o{$ S: w8 M7 d4 H- s( A0 N
public:" A/ o$ H; s* }* L1 k- |
CInventorySort()
* U3 C D* i( h8 }{# s' l/ e* V, D! S$ g- f* T1 r% Z
m_dwPos = 0;( q/ K9 W! h( w4 `; i; A2 U# e4 j
}
$ x( Y- D: e: {2 d) e3 M$ G~CInventorySort(){} D% x% e* g. w
private:
: B! I2 l* N" ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 b' p+ f% b1 \7 u) BDWORD m_dwPos;* t1 T* |' Y" B+ `
public:9 l* c" J. v' c9 X/ T ?$ h
void Add(BYTE nIndex)
9 x: l; d# c% H! {7 V# ?+ n0 M! \{' H- {4 ^1 Z* K% I' `
if (m_dwPos >= MAX_INVENTORY)
7 [2 g7 Z }6 ?9 K; ` {
/ t# g, u3 E+ b return;) u0 [+ g* n2 N' O
}
% ^! O" X- _, G m_Item[m_dwPos].nIndex = nIndex;
6 o8 w* M: l( R( r% j5 @9 c m_Item[m_dwPos].dwId = m_dwPos;
H5 K0 h/ t7 l! `5 F+ ` m_dwPos++;9 D% L" j8 |3 i/ k8 L4 x! G' W- L3 Y
}( Q! o$ z0 c' X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% d- Q8 W2 `" N% m r1 g& n
{
. L5 l, w6 t0 K9 K5 K for (int i=0;i<MAX_INVENTORY;i++)
% x; V( u- m- `# T4 J; } {& o6 U+ {( A7 C' R/ M
if (m_Item.dwId == dwId)
# t9 W- y) U2 w8 C" m- O {
" n1 I# p. h' w9 a& d( f return m_Item.nIndex;
! s- @ l, t) ]' T/ K" n- d2 e' P }
3 J4 @" l0 ?8 i7 n( G% L6 c }, r Y: o7 y1 v/ q- J4 ?
return 255; N2 V' L2 w6 U- O; v- q
}
% g/ y3 l- ]! s3 s! P" bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; Z+ o/ m8 E8 y) A& R
{& s, q8 T1 y; T1 k5 P
BYTE nTmp = 0;
% v( `4 ^3 r9 |1 i+ K- P6 A bool bDest = false,bSrc = false;
7 L3 t: T6 }" j) K' h& t for (int i=0;i<MAX_INVENTORY;i++)2 i# J4 V' X% n+ A
{" |) x& K1 Y! Y/ ^
if (dwSrcId == m_Item.dwId)
0 c) R# B. Z% D9 `+ k8 {2 q {& ?- J$ S O" H) _" z; B ?1 p4 `2 q" O
//id相等 则 改变对应的dest和src
4 X; Z, \! w# u4 ]/ S/ t nTmp = m_Item.nIndex;
6 k) r6 W$ S+ {/ a% ? m_Item.nIndex = dest;
) I; \$ y! @" f5 P5 B0 \" y }
# \5 L! C) Y3 b! N! }* W; k5 a1 O }: j' h1 T: G" \0 H8 f( J! j( X
//临时数据保存完毕,交换开始
5 C; ^ A. {# r: `9 M6 g K9 t( } for (int i=0;i<MAX_INVENTORY;i++)4 B" R; y* x0 W0 y
{) X' b; Q! G' F. x
if (dest == m_Item.nIndex) k1 ]3 y) ]% ~8 X* o* \' G7 b
{" W$ g: z/ x. O, @# Q
//id相等 则 改变对应的dest和src6 n6 K8 J, y: G9 Z; o
m_Item.nIndex = nTmp;
8 Q1 H/ B/ F' J }6 f7 ]( V" L& l) K
}6 {/ e- u. S6 ~% {/ M, ^
}
" i: D5 ]6 T" f7 f3 T};
$ g" `# S* ^6 Y-------------------------------------------------------------------------* d! _1 ?1 G% R6 I+ m# M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* A% m* m8 `, ]0 R+ q! c4 l
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 ^0 J9 I+ j4 X( v
紧靠其上添加:4 X6 a& s6 r/ \1 K! |- r; }) I b
if( pWndBase == &m_wndMenu )) w3 n* T! Q) Q' b
{
; M% P e. G3 l1 c9 | switch( nID )* B1 @5 Z& A5 ]' \
{
. n* g2 b* _/ h5 l! @8 m/ z+ @ case 2:- G3 c8 w# @+ p
{% k2 n. K4 K |# B! o: J
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( D3 V% N! {+ p% t6 M8 F/ K
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 e- h* X* O H5 \: O/ F n {9 Z' j* I# N, n7 X# C0 v
break;
/ R: y5 y! L, Q4 W }
9 ]3 Q w) M7 O- c( S' q: E; n' ]- c for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 O1 V" l: M: z4 A- l {0 A" S6 x9 I8 l% ]9 J! w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ u) q' m# ]8 S [/ X# v& c if( !pItemElem ): O' e3 Q* u* c' ^- a
continue;; y- l+ D$ K0 Z" n# ?
if(pItemElem->GetExtra() > 0)
9 \- Q9 c! r8 B7 z continue;3 o2 M9 K4 K! E, f9 W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ y9 d& T) Y" k' C2 R o4 l continue;
6 q/ z5 S' c! U if( g_pPlayer->IsUsing( pItemElem ) )
* O' ~! ^ C5 n0 k continue;
# K- l5 G' f/ _3 z if( pItemElem->IsUndestructable() == TRUE )1 e+ C- ]9 _* {- w: t6 s }
{5 w2 k1 x# E; z, d/ M, o0 ~+ {0 H
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 f2 s& e* c/ W/ s continue;
/ J/ A2 c. {& F- G. W, e+ N }
8 B( I* V# s" j# S" v. Q, N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) [" e0 H$ T; X, g& ~7 C
}
. q H, L7 [4 H, L% ?( e0 g break;
/ {* ~( ?1 |' c- _8 {1 z }- A1 |3 c* Z3 B" p1 H# E& l3 m
case 1:" b; E3 {! T1 H- M/ w
{* Z- ]7 `% ]3 _+ ?# {' I
//整理背包
" F1 h4 O: g; h+ W, V //////////////////////////////////////////////////////////////////////////4 A7 _2 C/ [: L$ j* S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 \4 k$ w4 |/ t4 o6 T1 V //////////////////////////////////////////////////////////////////////////+ X8 `" V/ k5 Z5 Q
//////////////////////////////////////////////////////////////////////////
% ?1 J- d, h' {: g/ p CInventorySort* pInvSort = new CInventorySort;6 H6 x _, Y0 j: `# |
vector <sItem> vItem;( Y3 S' w6 L2 A+ o: f
vItem.resize(MAX_INVENTORY);//初始化大小
9 Z i7 o( m! w. F6 {% Q0 y //////////////////////////////////////////////////////////////////////////* z0 T6 Q B) S w) M
//填充数据4 x: b- | x" ?% f! S1 \. C. L: {
for (int i=0;i<MAX_INVENTORY;i++)
; `4 C" D2 Q7 O) Q3 W4 ~( I {
9 o' [ o. G; w7 I$ O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ u6 U9 D! y; }1 V6 G
if (!pItemElem)
3 ~) a( @1 |/ Q9 R' a# P: K {
6 j0 R# y, f; K; b vItem.dwKind2 = 0xffffffff;
' y8 z4 s' `2 O( S vItem.dwItemId = 0xffffffff;7 [; b% v! P1 _1 Q% i4 Y
vItem.nIndex = i;: W! W: `5 ~. M# u
}else {
0 k$ j$ W1 T# U3 ]" c6 Q: ~, G ItemProp* pProp = pItemElem->GetProp();
' q) J2 s6 ]- Q5 C* C% ` vItem.dwKind2 = pProp->dwItemKind2;
% p6 C% M. b( t3 q vItem.dwItemId = pItemElem->m_dwItemId;2 x5 `3 F, o/ p+ H3 |3 N; f
vItem.nIndex = i;
5 }6 w! e7 |. H b1 @: L/ J3 u3 i6 a: t }. C X$ L5 u8 P1 f: N2 s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# \. c7 a0 W/ I7 r0 g6 y }! ^- A/ a; U9 B; k5 d$ B" |
//////////////////////////////////////////////////////////////////////////
. V4 A' W; p b* Z) D: R* Y* V sort(vItem.begin(),vItem.end());//排序
4 F7 K6 {3 ^. l6 N //////////////////////////////////////////////////////////////////////////; \+ d6 n- \$ ^. _- ^
//交换2 u5 u. L) n |: d
for (size_t i=0;i<vItem.size();i++)
3 }1 F- u; s9 c+ L- k, K+ [6 m {7 M' R4 b) P4 O
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( v4 m0 d4 I% P" O( C) P; H
pInvSort->Add(vItem.nIndex);8 s4 }6 u6 [- f4 W
}! V; ]1 P6 q y5 L$ ^& x) n
BYTE nDestPos = 0;
; g8 P% w$ Q Q; E/ Q) z for (int i=0;i<MAX_INVENTORY;i++): o5 j8 U& N {, _
{& G9 J2 V6 C* V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) K% V# { R& I. j! s7 M if (pItemElem)8 C& y/ i# B- D# u+ j) c+ L, ~
{
: p5 e$ V$ T8 k" w% I5 t* U if (IsUsingItem(pItemElem))
) L5 c. [. P8 K3 D/ C {
+ j, f9 k1 L8 L! L$ H$ ]4 j //这个位置无法放! \+ L3 G7 v, Q$ T
nDestPos++;
' Y4 w7 Y0 V, J" s7 T: e }
3 r9 w: b* k+ T2 D+ a }' Q! U) u3 J5 H: D6 D" B
BYTE nSrc = pInvSort->GetItemSrc(i);
6 L( L7 a; W% W$ O7 s/ |. A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 M2 C' s I) a+ v if (pItemElem)( u" `" Y* G# }
{
* n) E6 l: M9 ~2 }$ H$ l8 [ if (IsUsingItem(pItemElem))
j, ~2 L) ]& i/ R) M% c0 Q# b {2 e: d" ?! U5 I# h- X' }3 l
//这个道具无法移动,跳过
% a S. k$ ?2 P4 t continue;
, _1 c0 z% [0 b# Q b6 o }
" X3 r! i$ _& `* M }else{3 k3 z3 b. D! Y- _
//空位置 不用动7 j) t+ Y( h) B1 j1 c2 ^# w
continue;
d2 I& A7 N8 j8 G2 v7 m# X }
* _# k1 d8 v; O; j$ P+ d //////////////////////////////////////////////////////////////////////////
5 P% ~ ^# n3 a* y' F //开始移动: c3 c0 e$ Z: V# k/ I, y+ y
if (nSrc == nDestPos)
5 F1 E/ r1 F4 ^8 M5 T. Q* S5 B { [. ?0 [4 r+ O: y
//原地不动" H% X8 T1 L- K6 {
nDestPos++;
9 @9 z4 q, Z* G- C continue;3 H2 a5 z( S( S* l$ E
}6 R; ~+ ]9 s w; b! H
pInvSort->MoveItem(i,nDestPos);, a9 ?. b( ^4 {0 L2 J
g_DPlay.SendMoveItem(0,nSrc,nDestPos);' l' k1 |- ` R$ |! v; S% ^
Sleep(5);# D0 l) R& E2 p/ [$ y9 K5 z% v
//Error("移动 - %d->%d",nSrc,nDestPos);
4 S3 S) _0 g U, } N4 u% f) l nDestPos++;3 V$ _* f) U1 ?
}
5 N7 k! X9 x3 Q# N# g# L6 C //取第一个元素的信息
$ E, C: t9 x) n$ _6 w! N /*
' E, j9 G8 I; r' o& n if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& z% H) o0 h: K' A: [7 M1 { v
{& Q+ Y1 Q- k3 b# t
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 P0 L- |2 V& ]% u- K, ^
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
g- ~9 T- `) [ }9 K; Q" ]% {1 Z
*/
9 `4 z5 h( d% S2 u- G //////////////////////////////////////////////////////////////////////////7 c3 F% w$ P, p! P4 \2 J% C: j1 }2 i
break;
' N# s0 C0 y* A. P/ x }: [6 [, p$ z. w9 p
} + j$ T! E+ b+ G. m- n( B9 P8 f
}8 z8 Z+ ^9 t- `& A6 f
m_wndMenu.SetVisible(FALSE);
9 I `8 A# J& a5 L; }, X g0 I+ J5 S1 E5 G7 q" d0 ]( k
--------------------------------------------------------------------------------------------------------
) l- C8 o; A7 p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' t% L% z$ F I% l
{
' E# s! o) A. W, `. E0 R& Q QBaseMouseCursor();
! i: F8 n4 W* w$ T}
) ]4 j9 J) z8 r' O0 Z' X在其下添加:, M: w7 q6 \& |+ o+ Z, g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) H. Z' p0 @ i
{
; F$ d! z) g5 P( om_wndMenu.DeleteAllMenu();
3 J3 a7 G( _9 j9 nm_wndMenu.CreateMenu(this);
! x3 I& r' H' G1 u9 b$ \ lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 J B( X* S; \) J
$ v# p# {% M# H7 dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 f0 o& m2 G6 A; V& C{
) ?, ?8 s& j" `2 [5 \& a //P以上级别才可以删除所有道具0 T# f, f4 h+ ?8 f+ V9 m1 F$ k% R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; f+ x- _/ ^1 l: R
}
0 N4 j! D& b: B/ T6 I! B# Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& r6 S- T3 l1 s8 c( G: B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" o2 b& ]$ F3 Y; T" n. X/ [m_wndMenu.SetFocus();" T D) K; P6 z
}
, m; c( J* C0 _" y1 `# g1 v------------------------------------------------------------------------------------------------------------! q* z. v7 K6 g- @; M
*************************
& \% N$ E- C+ Y2 x$ v% xWndField.h文件; ]) R& L+ E: w: p" s
*************************
+ ?1 o. F* `: s0 i1 f搜索:BOOL m_bReport;
9 @6 J4 ?: R" n" z6 p其后添加:5 q/ q# N: R( C% T$ |$ c9 G
CWndMenu m_wndMenu;2 O3 o5 M! N% p4 U" j
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 M5 w3 C4 l3 y* }: c' {
其后添加: P' v6 p- t; E' r
virtual void OnRButtonUp(UINT nFlags, CPoint point);: X$ |- C; Y# d- g0 f/ u" S
# a/ N |1 N; y1 C; M, ?2 W/ v8 E8 v8 ^+ M) N. C$ B! Y( b5 q& E
|
|