|
|
源文件中_Interface文件夹下WndField.cpp文件
7 H0 }, |0 i: z) e1 W( N Y% A5 X7 q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 d# \. s6 _3 J+ D$ h0 |9 x0 l: Z3 j0 j0 P7 H' _& R
struct sItem
5 {% o" T) } K8 `" D{
7 U2 ~8 e$ l1 |0 qDWORD dwId;' _2 m0 P" A4 @; u- P+ u3 } ?% p% r
DWORD dwKind2;
2 y' O' B! N2 d: hDWORD dwItemId;- b- N# @ G/ {5 x W" o7 n& b% o3 [
BYTE nIndex;
/ h* Z" Q# `7 m( ]! GsItem(){5 I, I' i' |6 Y
dwId = dwKind2 = dwItemId = nIndex = 0;
, C: k9 p0 j/ H! v: Z8 K}* ?( Y! c: H4 p7 }4 M
bool operator < (const sItem p2)& S# _. I! \( |8 H6 E. j# Q
{
2 P4 j& V2 I" Y6 V% I: u- g2 ~7 P6 V if (dwKind2 == p2.dwKind2)
+ a5 G! O( r% K; P5 ? a! b {) w4 K. q- J$ _0 r1 K3 e
return dwItemId < p2.dwItemId;1 |" T. Q) D5 |* W E0 v; L! p4 I) j
}else{
& l2 p! {% y6 v7 H1 U7 _" x0 ]- w' B' ] return dwKind2 < p2.dwKind2;
2 u2 _% n' L ?1 G }/ S0 ~4 S. ~$ v; B
}: m1 k0 f& I6 q2 F( `
};. Z# U x" i$ y
class CInventorySort
. a* R5 k6 a, `6 z- u- i& H$ r) r- J( ?{
$ n8 {( u2 |8 |: N; P; g; Qpublic:; V* q% H" P5 |6 P$ ~
CInventorySort()
# O5 j/ x- ~7 X! o2 Z{: c6 a% i% e+ ]3 c6 a' U
m_dwPos = 0;
( |% }" N, V, H' X4 A7 V}" J1 q5 c; _- }* w8 ?3 \( t8 N4 x
~CInventorySort(){}" [' Z" j* u: v5 k% M
private:* T1 d$ S' M8 S& ^/ X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( `! b5 d/ k, ]
DWORD m_dwPos;6 ?" Y ^/ \3 Q1 a0 K9 l
public:
% W6 j. D0 ~! l8 F1 q! X0 `8 svoid Add(BYTE nIndex)' r ?) K2 Q- x$ H% ?
{2 H: H# w' i/ ^* X$ {
if (m_dwPos >= MAX_INVENTORY). v4 E4 B/ M# U+ H7 [' S
{4 a) t* H, }2 v
return;
' h/ G; P' q9 Z0 f }* j: a/ `. |2 Q% `, n2 N5 x& y
m_Item[m_dwPos].nIndex = nIndex;$ j/ M z) F8 o
m_Item[m_dwPos].dwId = m_dwPos;9 F, t/ c6 \7 d1 r b
m_dwPos++;- _7 D& P( t+ i: E! L. J
}% d0 d2 X( @- M: [5 P
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- |! H0 l; h/ _9 S) y{2 [* q/ A& F4 ~, C) j& Y
for (int i=0;i<MAX_INVENTORY;i++)
' _, j4 E& L9 U4 ?& a2 _+ `% ?- j {
( A- _* E0 L' O0 F& O if (m_Item.dwId == dwId)3 e7 |: z: \7 m. n- b: E8 a
{
! B6 a7 A1 t7 I1 S return m_Item.nIndex;* t* L9 A4 Z; g
}, @( F3 T. g8 M3 k& {' t) N/ Q
}6 j1 `9 }) Q, W
return 255;# b$ i" d- B" E8 i5 n$ U! t
}2 S% `. O+ f- S( |3 v5 I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ H5 [- J2 |5 J2 U( d' c8 A+ h
{
) o" M9 E5 X0 d$ h! U" r, A$ ~$ ? BYTE nTmp = 0;
# \+ u" d" B3 | bool bDest = false,bSrc = false;
7 S, ^5 R$ U% | for (int i=0;i<MAX_INVENTORY;i++)
% e) Y, n0 t, V, d5 |& @ {
$ X3 l; Z+ W p T- { if (dwSrcId == m_Item.dwId)8 k( K. A5 B3 @; K2 s
{1 t4 C! F, h, X: c7 t3 b- U. T0 ]9 t
//id相等 则 改变对应的dest和src4 }; X; m! q9 X$ c8 [% _
nTmp = m_Item.nIndex;
`& g0 N1 j2 z, U+ x9 b- t m_Item.nIndex = dest;
* W2 t! ^8 ~1 {; ^/ B }7 ^4 {, S+ e3 l- d' v3 B
}
0 }. n/ m3 |! X# h! i //临时数据保存完毕,交换开始
$ u- x! D8 f3 W& `9 G6 I% l for (int i=0;i<MAX_INVENTORY;i++)
$ U2 @, H9 d+ z' p, n- i {2 Y% b6 _' A: a% P
if (dest == m_Item.nIndex). \" X+ b P( o/ o& t8 G
{5 g" s( Q. A0 [. A+ g
//id相等 则 改变对应的dest和src
: u1 W- f5 p6 ~2 Z, M, I m_Item.nIndex = nTmp; F/ R% @0 ]5 I# C8 G _* l
}. l" Z' L: P" v) b6 g9 w {$ v
}3 c6 q1 Q8 B, k/ b) j
}
_; G. r0 ~, s+ J: M0 k& a) X, F; j};. J g- o- l+ F& ~
-------------------------------------------------------------------------
8 B( z2 Z+ k; E9 H依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): ]2 q" l- W/ S+ K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( S6 P( P4 y' u$ h2 n+ Z- O. R
紧靠其上添加:& y( J; i6 Q: s& r0 N" ~2 g/ g/ r
if( pWndBase == &m_wndMenu ). [2 a5 F3 G) O% ]" e
{7 k3 v+ J6 @1 p a9 H" m. o
switch( nID )
. L" f- k& h' B4 m+ T# P {
7 D/ y8 m6 O' c: P' B- s& m case 2:! ?, m8 u I) t9 e$ f! h1 H7 \
{! F( B& P+ H( F) ^/ Q* e
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ h- e, f( s8 }! U% A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 ]6 e. L7 h- Q2 q Y4 x5 R
{
% ]! P) ~7 P: A* m( L. j7 _ break;" c: f: l( O' y! K7 _
}# H; R% ]/ @+ B& a8 s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 ?6 k6 r+ x' L) R {
; c0 e7 l R5 h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* @: w9 n! O5 ]
if( !pItemElem )6 c0 ~- F. x9 v8 X4 Q5 }
continue;" E0 B3 l; T# E% _4 p* Y
if(pItemElem->GetExtra() > 0)* Q: U6 t* s0 d2 b# n0 c7 ?% s
continue;" c+ |( r+ G6 I$ |. W. n X! n
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ _9 [. {5 }! o% s* k' R: S continue;
( V+ j0 D( e& ]0 ` if( g_pPlayer->IsUsing( pItemElem ) )
6 I' J3 |* Q2 b; _) @7 M" t continue;
8 p1 c( L! M% A5 {2 K* w if( pItemElem->IsUndestructable() == TRUE ). A7 _" r s, w' I7 s* N
{8 J& W: A( l1 y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 t% z/ j) y) o5 |" c continue;
2 G3 |8 P) a6 v0 d, ~ F; o }# i3 ^; t* Q4 w g" w# P3 k& y# s
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 k5 C& W" p; D! d }
% f# r# ]! u: Z. f, D break;7 y9 B( U! Q& {3 S+ o" e
}
: s! p4 l! b5 I- ?, s' Q$ U case 1:
% H J& h. o& _0 k; H8 j5 l3 | {$ \+ n! A8 h9 S
//整理背包
@4 S- X+ N6 f( o3 z& q" } //////////////////////////////////////////////////////////////////////////6 V3 z1 X. [: P: s
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* E8 t4 u/ F1 f; u. L& L% n //////////////////////////////////////////////////////////////////////////3 U7 H3 m! Y$ Z, Z
//////////////////////////////////////////////////////////////////////////" l1 U" [/ E0 H* Z
CInventorySort* pInvSort = new CInventorySort;; o) U% A+ W/ o: {3 y5 V
vector <sItem> vItem;
9 A4 J+ T6 v# O0 G- T vItem.resize(MAX_INVENTORY);//初始化大小+ B& S# T4 V: Y2 C
//////////////////////////////////////////////////////////////////////////8 _% T0 Y3 p H/ ?1 L
//填充数据1 |' Y5 \$ u1 ]) g7 ]: w# b6 t
for (int i=0;i<MAX_INVENTORY;i++)5 G d+ }+ _$ T# ~4 F, t
{
. l, A1 `6 [+ f- s5 B4 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. H) N2 w( C. s
if (!pItemElem)3 F: y# z& X: O% I5 a
{
_5 Y( q2 Q8 P% w) @8 V) n6 P$ E vItem.dwKind2 = 0xffffffff;
' G a& j1 g1 M+ R7 f2 b ]. _ vItem.dwItemId = 0xffffffff;
8 k* y( J; T) U% ~7 v" _8 Z g vItem.nIndex = i;
4 W* Q; U, U7 N }else {3 }1 |$ A! T# S6 I
ItemProp* pProp = pItemElem->GetProp();
9 B9 P) f% e8 ^% s& T M vItem.dwKind2 = pProp->dwItemKind2;- {# {, V/ R$ U
vItem.dwItemId = pItemElem->m_dwItemId;( ^/ E$ G$ Y- A" @3 ?' R/ M$ L
vItem.nIndex = i;" b, Z/ h& ~9 L, k% ^
}
2 ], Z. S( }* h( T. U. i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ x4 f) a6 |: J% y; X }4 N' Q& h- G V7 I X+ y
//////////////////////////////////////////////////////////////////////////
# _4 {9 }6 ^- _: f! X& Q& U! r8 [2 ~ sort(vItem.begin(),vItem.end());//排序
& `; _/ l8 h1 K) Q, i //////////////////////////////////////////////////////////////////////////! Q( Z; Q) B N0 ~" \- C' {
//交换8 X ~, g4 k5 U3 y& I
for (size_t i=0;i<vItem.size();i++)
" O0 P( l% h1 w% {" p {5 l6 X! o' b* m9 _. W& @7 ?
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" ^7 ?! F' U; e) I3 x
pInvSort->Add(vItem.nIndex);
% G' @" D2 \3 U5 k! p& ~ }
; n% |. ]$ u/ ~$ _- M BYTE nDestPos = 0;
+ N8 S2 J( m8 T; A for (int i=0;i<MAX_INVENTORY;i++)
/ k9 U+ W3 x& \& |( Y! G {' B7 d! ?; K: E8 e4 a$ ~7 @7 \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! N# V$ k: F3 I
if (pItemElem)
) V0 {2 ~+ e3 ^4 S7 s {
. c8 X6 x- `( A4 }/ Z5 c if (IsUsingItem(pItemElem))
( K6 U8 {" U b0 _" y {
6 [: R" B: ]/ }/ f' u& [, ~! j0 V //这个位置无法放
& T' j- f6 S; |0 y. } nDestPos++;
7 t+ L: P& G* d9 l! t }
0 S4 W: p! h I! e4 U; O6 G- u0 h }
|+ N! I& t" d4 K# y2 D BYTE nSrc = pInvSort->GetItemSrc(i);* m5 |0 q! h. Q: v/ n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 w9 Z9 {2 D6 n4 o% M if (pItemElem)
( O6 S: v2 H/ E1 ~1 F9 _( M {
6 v' x9 l. r8 V$ `( G if (IsUsingItem(pItemElem))
* y+ H6 P) Y, A4 Y0 M {
! a. b: K [; D9 Z0 ^) y, H //这个道具无法移动,跳过
+ X% I; v2 o) w$ \8 f continue;$ H' z2 {' r; ]5 j4 h3 ?' Y
}; z L5 `" s% c
}else{8 a+ w. k" _ |4 h) T$ C) [
//空位置 不用动
( Y; u- k. T: s continue;
/ t: L0 C+ T+ X" y" I }2 z- R) K2 d7 @/ n4 A7 X7 O& v
//////////////////////////////////////////////////////////////////////////- v- U" c3 f4 q% z3 X
//开始移动
5 Z% a9 Y) Y$ a8 @% D if (nSrc == nDestPos)* M& p7 S4 E G, b4 k
{
0 F5 G% R1 @$ v4 p) C //原地不动
5 ]$ K8 @9 V9 p# A- g0 N+ q3 A nDestPos++;( B$ ], Z, H3 K, M: d2 ^
continue;
' s0 k+ U3 i' I7 m) R' O }; M0 }& V* k+ O* m* U2 w
pInvSort->MoveItem(i,nDestPos);
( x' ?/ M# N) r! T, M) Q g_DPlay.SendMoveItem(0,nSrc,nDestPos);
\4 p2 q1 q5 C5 ?/ h/ A' I Sleep(5);
$ @8 V# A5 a. {# _4 ] //Error("移动 - %d->%d",nSrc,nDestPos);
1 N, F3 `' Y& s; c% j% k0 }) o8 W nDestPos++;
]! F6 v" C: T. L8 n; c' a w/ Q }& s! g) k/ @4 E G% F
//取第一个元素的信息2 u/ `" ]( n& u* f3 E
/*9 V. V2 Q' f& |
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): [- m5 p( G3 _4 l0 R! I7 B
{: N2 H4 o. c% R# m/ a! _. ]
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& A7 \% W# a z4 j% a g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" `: K8 r W$ K3 r( _+ T2 R4 K2 M }. e2 ?% F0 e( u* J9 k) M
*/5 |7 L- o6 o5 V' m' ]& m& m
//////////////////////////////////////////////////////////////////////////' h8 Y" E9 I4 V# ]$ s! |2 E8 h; z
break;
9 A6 r* x9 ?$ g }
8 {0 K. |7 R( u; {" _6 k- m } + d8 q) X, }3 O& a% W7 a1 U' c" i
}
0 r1 a& q' v) f0 z/ Y' Rm_wndMenu.SetVisible(FALSE);
. j/ D/ L) U) [+ `8 T7 v. G
" ~' |7 b. l3 e6 d2 p! U--------------------------------------------------------------------------------------------------------( L/ j* e% Z9 i6 k; k1 G( F0 |$ { Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' o# w- f6 ?2 d: Q; T
{1 E! H2 z Y( I _8 C4 F$ a
BaseMouseCursor();( D; W+ ^3 u+ S5 R
}) Q8 C- @8 d8 P D
在其下添加:
+ _9 b1 q9 W: D( j% n) m+ ~0 R0 svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 t3 _: i1 ~0 Q0 R{: q) l3 O9 o; n. ]% l
m_wndMenu.DeleteAllMenu();# s9 |& e9 ` i
m_wndMenu.CreateMenu(this);, {+ |- a: D' w! b* J2 O+ O, E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* r; Q1 G. _6 W! A) `0 b4 m: M! G3 i6 @" }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 ]2 K5 \6 y; c; C% f3 G{
, n, A/ c7 u: ^0 J //P以上级别才可以删除所有道具
( s8 Z3 R5 {% {) S' d2 H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% f9 |, ?2 g. V: y3 z
}, u0 \0 H9 }& v0 ^; b0 |) ?' s5 _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! O" M) q2 {& m, t, h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; F3 z7 S) G( T" N; \1 Pm_wndMenu.SetFocus();
* ^3 V# K5 M. H- \, v}
0 q) K4 X! P+ E0 N------------------------------------------------------------------------------------------------------------2 w+ a+ y: u, b- o; ]3 U- r" _
*************************
; J4 V9 x- R8 T% ~- g9 @) p0 IWndField.h文件. [8 o) ^7 f5 e( J
*************************
. [( v5 Y* `! b2 n G搜索:BOOL m_bReport;! M# t. w/ P0 C0 n* x: _
其后添加:
) f! O& R8 i* V6 s7 _. nCWndMenu m_wndMenu;
# e9 A: }$ }7 q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& f( H* a6 a) ?+ D其后添加:
: q. T3 p0 ]$ ^: D0 \- y2 pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
S- u6 {* n) @
. g& }$ f( o$ E2 K% O3 r; c$ W0 k6 c" U" R7 n' @% d! L- F
|
|