|
源文件中_Interface文件夹下WndField.cpp文件
5 E+ ~* ^; i( \4 L& @4 @搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- f: ~2 b# l6 i9 n7 Y
. A! I2 T9 J( G3 p' {. astruct sItem1 O/ g8 u; O9 u9 L" ]+ }% T
{
: ~6 q& }% [9 Q* x$ q, [! t m% wDWORD dwId; T" R+ q2 O: Q
DWORD dwKind2;% c! z; P3 x, X ]: U" N5 [1 x: c
DWORD dwItemId;/ Q- @3 Q4 G4 P# U( @0 C
BYTE nIndex;4 I. [7 _$ X* e4 e, ?6 v+ u
sItem(){8 w- C" J/ y' \7 S# _, y# \; c
dwId = dwKind2 = dwItemId = nIndex = 0;+ s. ~5 b/ L$ B3 D6 x4 h
}5 u1 ~4 K9 f- s- V8 x. [% y8 Y
bool operator < (const sItem p2)
) n- W7 z% C' a# I& D{
- n$ E2 n: Z6 B. v: i. G if (dwKind2 == p2.dwKind2)' H6 V* {: I& c5 }/ s
{
% }: [; }" f# W6 S return dwItemId < p2.dwItemId;
# t$ u& H! ]9 A+ S1 D% m3 T; t }else{
: a2 O8 n1 D, ?/ Y, I return dwKind2 < p2.dwKind2;
/ h0 `! n8 u* |; m* ` }# H* w2 _5 g8 ^5 h2 Z: Y/ k* }3 O
}4 x! X$ n3 {% m: @
};' o, K# i5 a9 C, y6 E/ C
class CInventorySort
9 ?+ K3 N4 f3 C9 n1 H{$ G' p! W! v& O7 W1 A
public:9 o- N& R6 a0 B! k5 W
CInventorySort()
E) d# H8 S- a( h0 C9 O{
6 [. d$ q, _! F0 I! ^4 g m_dwPos = 0;
/ w! }. z% v4 }" o0 w7 U}
; C; n6 h& d) N" I8 Z9 ?/ w6 F~CInventorySort(){}
0 d, h. I% u) s9 q% Tprivate:9 r7 L* \+ M C) m- \
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 A6 q8 q i; w8 V/ M7 J# L( i$ TDWORD m_dwPos;
0 ]/ [) ~/ r3 dpublic:3 _7 @" y' ~& h; g3 o2 Q. j3 h
void Add(BYTE nIndex), y! Z6 ]" M( a4 k; B
{
* c; ]1 I* R+ y( d& ? if (m_dwPos >= MAX_INVENTORY)
0 p w$ O9 D. E" z* m {
5 K5 {. k3 r* |! d! p# J1 G- ] D return;
4 Z5 p/ r t$ g: s9 o }
. R6 v# t! m- v% X m_Item[m_dwPos].nIndex = nIndex;
9 G. ~8 m4 \ l3 Q6 l7 F. ^, P" ^ m_Item[m_dwPos].dwId = m_dwPos;
) y. C2 }! p) \- i" I m_dwPos++;( u$ N' O& _- y; ~* \) p o
}7 K! n% ^6 c* [* n, S/ f& X3 p
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 _4 ?, D; W. V{) E/ O, V! Q! `7 n9 e
for (int i=0;i<MAX_INVENTORY;i++)
" G% G3 X$ c# A$ o+ j {% X1 t: o/ m* I; V& Z! h
if (m_Item.dwId == dwId)
; [- t- r; y9 V- C {4 F3 j( u! c+ T6 [( Q1 o& L
return m_Item.nIndex;# _8 l. C2 ^: `0 @; r. d" ?4 ?
}* D, h: x4 r: t+ d; e
}& `* h5 F x9 e- C6 b
return 255;7 V/ O, C! M ^( S6 t) k* |5 [
}
1 Y5 R9 E* J8 ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* s* _: l2 |: ]' m7 Y{
0 t9 U+ s2 K: |4 X BYTE nTmp = 0;
2 H {: Z7 S8 Y bool bDest = false,bSrc = false;
: F8 g8 Z$ |- X/ I$ f( I for (int i=0;i<MAX_INVENTORY;i++)2 }4 d& p5 ^1 {' T1 o( C
{& k3 f# T$ f, D A* `
if (dwSrcId == m_Item.dwId)
: Y0 y1 z4 z- o2 w {0 {: j& v) Q' s$ g/ s4 Y. C
//id相等 则 改变对应的dest和src" d8 F. p5 _- o; m- q. |" x
nTmp = m_Item.nIndex;/ W( p4 j/ b! G% q7 a# H
m_Item.nIndex = dest;
5 Y4 \0 z, ?; K; F5 W4 m" p F ] }3 @( R3 d: t3 p, P
}' s% }( ~ ~0 T
//临时数据保存完毕,交换开始
( V& L+ C$ \. r0 O6 c4 N for (int i=0;i<MAX_INVENTORY;i++)" Z' j. ~: {& E7 u7 I
{3 ~ X: D" K! \
if (dest == m_Item.nIndex)
3 s$ E6 R+ H' c4 U0 L/ B1 M* f {
1 `( v% o& z& |: j$ K7 G) I) _ //id相等 则 改变对应的dest和src
- }+ s0 a1 W) V+ z" z( U m_Item.nIndex = nTmp;
% R3 m. p. y+ l& f6 N5 Y }5 _% l+ [8 {" T% s4 @. ]
}5 d4 h/ b- N' e) Q9 b
}$ O; q5 W1 s$ q4 D. l: K
};" {/ J$ s% t( m
-------------------------------------------------------------------------( ]# n" T2 S; L! h; f0 M. |2 M* F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* `* ?$ ?5 m" U. t( V# d搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( Q1 a) ?0 D. f
紧靠其上添加:
9 c# D' ~: k' P( r5 \ O2 `8 jif( pWndBase == &m_wndMenu )
3 Q2 U. ^& _' K0 u: J# p{5 c; V2 Z' H1 [- `% |
switch( nID )' Y# Z) e; S9 D
{1 S O$ X/ {! ~2 W
case 2:! j& {: T6 Q' y5 c- i( q
{
" H# T' u; f4 r* Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 {/ b0 r/ q0 X- R if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 A( P: `4 B1 Q
{
) r; {' k5 @1 |" G break;& R* x4 @! g; {: C* _
}
% |3 |3 R, w3 h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), l: X& c& o+ _4 t% i* m
{
. ^8 j+ q6 y# {5 _, t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# N3 J. U* P, W( c! l) b
if( !pItemElem )
- q6 ]4 ]) n! q( w continue;
3 x' z# _7 k: j+ m if(pItemElem->GetExtra() > 0)8 Y' P/ R$ t- x$ H4 m
continue;0 L* Q/ q; {/ Y# v, X4 q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' n# y O& D' J- ^ continue;1 h. c0 U' R; A
if( g_pPlayer->IsUsing( pItemElem ) )
. i0 n! R! a( U3 R$ ~2 Q q: J continue;
& }* V! q* f* B3 w if( pItemElem->IsUndestructable() == TRUE )- w) b# B" C9 U4 b
{+ E& L6 d, w/ g2 K* M5 ~
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ g! E/ {! Z( s: U% [4 U8 \# w
continue;: j0 J: t! E+ k: g# E" m
}3 W; A$ O3 }" ?, c7 \ x0 W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- J7 v. d% ?# J2 l }0 h' b b) t4 q
break;
2 S$ J. B, \! s/ G4 A }" `. C+ i6 J, T7 {- L) e* b- K/ ~
case 1: ~0 F0 y4 }" h8 V
{- t3 |4 l6 ^7 f) o8 K& v
//整理背包: a; }9 G# ?3 c1 `
/////////////////////////////////////////////////////////////////////////// U) m5 b O5 `4 ]$ G$ [0 S! |" f
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 q, o7 [: O9 ?0 B3 P" q1 r7 w V$ E //////////////////////////////////////////////////////////////////////////
. h v7 S) n+ E4 ? //////////////////////////////////////////////////////////////////////////
+ }! @) ` q1 v: q CInventorySort* pInvSort = new CInventorySort;
! v; R% ?& w L' [- x- x vector <sItem> vItem;
$ b+ Z& p$ g7 S; [- G1 |0 H+ X vItem.resize(MAX_INVENTORY);//初始化大小% I+ R' ?: d# t4 ^& n
//////////////////////////////////////////////////////////////////////////+ \4 s+ j4 L% E1 r2 e8 Q5 s
//填充数据
( @' C8 y5 V( [9 b for (int i=0;i<MAX_INVENTORY;i++)
2 m) n; l+ F Y+ z0 m: i {
5 K. u. q$ ?" s P3 c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 \/ u6 A) J7 Z7 j/ `3 q if (!pItemElem)
4 M* t- y, ?+ Z& Y0 x8 q {& A; |4 D- N: u5 O- V5 p3 _, o8 z
vItem.dwKind2 = 0xffffffff;! [' s. H. F: x$ U% k5 @* l. e
vItem.dwItemId = 0xffffffff;2 Q9 j( X% m. B& Q, u0 C1 v8 O
vItem.nIndex = i;% L. ?+ I8 O$ l- p$ {/ X! s2 K2 f
}else {
8 T. F! W( a8 \, z- l ItemProp* pProp = pItemElem->GetProp();& o2 b8 `$ z0 i& ~. [# \
vItem.dwKind2 = pProp->dwItemKind2;3 l# J* Y0 r/ j& l; \$ P* J
vItem.dwItemId = pItemElem->m_dwItemId;
1 t# R, J/ R& O$ ] vItem.nIndex = i;; _ h- ?, f- `9 m
}, j" B! b! I; z; q) @, q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; C3 h; Q' G1 V% _4 o2 Z! D7 X
}1 u$ I5 U/ }$ T, N3 x0 v
//////////////////////////////////////////////////////////////////////////
3 d" ]8 y! n3 p; A9 } sort(vItem.begin(),vItem.end());//排序- w6 A9 x) m6 h1 [( I! @+ B
//////////////////////////////////////////////////////////////////////////
' [/ h7 ^& Y; S0 P6 s+ f //交换
2 p4 G- T$ Y2 X: F7 ?/ Q- d8 Z2 ~/ ] for (size_t i=0;i<vItem.size();i++)
6 E( t6 R. v, v4 ] {
8 C, o& o7 I7 ~2 k/ f } //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' Z/ a6 u4 \7 E! f
pInvSort->Add(vItem.nIndex); U( h. @, ~0 ?3 X) _7 S
}
9 W8 _! y& s1 m/ H; [+ S BYTE nDestPos = 0;
5 l2 l. B; H. R5 c8 y for (int i=0;i<MAX_INVENTORY;i++)
3 B/ Y6 K- e, f, ?, c! s) p) | { p8 n+ |# I- p1 O. \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" @* a, `: E6 y! E4 o
if (pItemElem)7 z5 [ m4 x0 ?' U, `
{5 @1 W7 y7 _, o/ H' N3 o7 `
if (IsUsingItem(pItemElem))
5 G# `5 w6 l3 t+ S" v6 R4 u {
7 J3 L- H2 ?8 f% O" B& t3 b! T //这个位置无法放
+ ^1 g8 A+ E1 }6 l nDestPos++;
+ s q, b4 z; {& a& s5 s2 M T }
* o- m- }+ w8 d/ h9 _/ z }
6 I9 E3 H3 d, V& D) j) F* k+ i5 p% z" v( O BYTE nSrc = pInvSort->GetItemSrc(i);0 y" ~ S% {% g2 P4 y' @
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& T2 q: u0 j9 V' k; ~& D
if (pItemElem)
0 @" H5 i$ C" y# y" y) h2 a {
! U) `8 h3 |9 s, I5 o P if (IsUsingItem(pItemElem))
$ N* m' d0 T/ ^ Z4 r* Q {
( @& {$ b: Y* z4 q) Y; [" S% V //这个道具无法移动,跳过
0 I6 N+ h8 a6 m) _- I continue;
, t. O* {' P- I/ f) p' Z }
/ F$ }% |0 K/ H$ ~# H" l }else{* K) o: W; }- j1 m8 K
//空位置 不用动
* C& t, P6 h# t6 b/ {' x continue; {. K! U; Q1 p5 u. M8 k
}
. F) ?$ J: c7 ? //////////////////////////////////////////////////////////////////////////; z6 l- O) J1 I9 M' Q
//开始移动
. V- j4 ]+ s- ]5 r R( a% q if (nSrc == nDestPos)3 E6 ?4 q& c3 R. n: \( q K
{% U3 @) `, c/ i# S }* @" n
//原地不动5 ~: F( n. o- Y( o4 Y3 i- X& n
nDestPos++;4 {9 ?! r4 P7 i! k0 o
continue;
5 w5 i. \5 K% j, A2 J$ q) \; h" Z }4 P+ b6 u) S/ ?: o2 Y( c7 a$ G4 l8 X
pInvSort->MoveItem(i,nDestPos);
: f1 `" J( J3 W t g_DPlay.SendMoveItem(0,nSrc,nDestPos);& n( J$ x/ N/ }6 u3 |* E
Sleep(5);
3 P8 g; o5 ]) d- i4 _ //Error("移动 - %d->%d",nSrc,nDestPos);
( Z: M3 T6 B1 M G' A/ H% p nDestPos++;
: r, ~& c7 w* r8 Z# R+ s, _0 X }4 [! f$ F( l; J
//取第一个元素的信息+ T5 ~" l. n' Y6 k* r s' j+ {* _2 T
/*6 E m9 y/ P& {! \9 j) R4 s' |( { G
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ k$ S- D, ^8 o
{4 K. p* W n# z4 w) ], X5 h3 H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 z" O& |' F; O
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 V6 p3 {# k- D& m+ O T }3 ^9 k2 x# M$ h' W- P
*/9 T% C" W& N# G' i X
//////////////////////////////////////////////////////////////////////////& ?" [/ f& ?" M8 T' I) ^
break;
' c( m7 x, t3 t }! ~* R" h1 L: R# F
}
, b$ c7 M- o/ @! o, K. x}6 m& G! f' u9 v' r- n' y
m_wndMenu.SetVisible(FALSE);8 F& ]5 r$ D" Z9 a7 I* v' Q
' n' D c. [5 d. m! R, D--------------------------------------------------------------------------------------------------------) p) ?! O" ~. |1 Y8 V; \$ h: |1 {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ s% s- ]9 d! k8 J! h: C# Z
{
. D* \5 d9 t% |3 t H4 |$ YBaseMouseCursor();
3 u% v& w& a! Z9 _& {4 F3 U}/ J- C) x# h8 G& u0 } N
在其下添加:
3 Z4 L% v7 z0 U8 m; K/ J3 z7 f) Xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 F" K1 C7 n# n% V- b* ]7 K
{1 Z/ S* Y& q& `; N. @5 {
m_wndMenu.DeleteAllMenu();5 I- T X( O. s5 \" ^+ l9 |# U8 U
m_wndMenu.CreateMenu(this);
0 @; `# a$ H D" r% V3 q# Y+ \m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, f' L. i5 W [6 ?) S, x. x
& p1 q5 c \; T% ~2 V$ Pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 v9 _6 m/ }% ~2 K{
- c1 X3 R K P' D: k3 K6 z //P以上级别才可以删除所有道具
1 N ?: [9 I) R# w$ i, A# W9 d8 k5 N/ k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 P0 o o' U2 q p. v# w$ f% @. s}5 I) f+ i, E* { W/ o% \7 `1 |/ |
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 k: R, f p9 _6 b5 g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 B2 `" R6 M5 Z T% T( Pm_wndMenu.SetFocus();6 C% @% D$ \: x' R+ \3 R- Y- L6 \/ y
}
2 Q- |: H2 A4 @# M+ S------------------------------------------------------------------------------------------------------------
$ j* L& o7 ^) M8 B- ]$ h( r; a ]) s*************************
2 v0 u: U, U% n$ v8 b- r8 D, JWndField.h文件
9 o7 g6 n& q; a9 ]- Y! U( [) {; n& H9 ^: n*************************% R$ t8 k- _0 [3 @& e! |+ E
搜索:BOOL m_bReport;( K9 k7 [% u: \1 D8 b
其后添加:
5 K; o* [. Y$ G+ b+ [+ wCWndMenu m_wndMenu;
- \2 B* S+ B$ T& W x9 a( O; P" T, e9 Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* F- _ h$ ?% [ y6 t
其后添加:4 |# Y; \; ?( ]0 y9 u6 [' r2 |" r- i
virtual void OnRButtonUp(UINT nFlags, CPoint point);% }* z, x1 q# X# g$ N7 ]9 T0 l! j- q& @
9 F/ j6 W$ I" v( i' T/ J6 F
( f9 b, W, }! J+ c
|
|