|
|
源文件中_Interface文件夹下WndField.cpp文件
! ^& J6 X7 ?" m搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; r. d8 ^9 q) j: g9 ]
p* e# x* ~; i( j% e7 E8 ?struct sItem) r7 B/ F9 \ O: N7 Y
{* S4 U! f; \ M( h: L' A' o, k* M
DWORD dwId;
8 `( |8 c& N* a$ W3 f/ RDWORD dwKind2;
, ^9 H6 h/ O9 }! [" Q% v' c/ TDWORD dwItemId;7 |+ L+ t8 E2 w$ T
BYTE nIndex;+ y" ~1 A! t+ o" H& \0 c
sItem(){) D# P P1 C! @: I
dwId = dwKind2 = dwItemId = nIndex = 0;5 p' g7 @8 b6 c5 C1 h: c" X
}% x- J1 {+ J) i8 [
bool operator < (const sItem p2)
l! b& a! e" h, r. f{7 Z: h- P) k( b8 E0 U7 d
if (dwKind2 == p2.dwKind2)/ U( O# d/ N+ k9 v6 V
{5 t3 O o2 \' ~) B1 Y; l6 H! ^
return dwItemId < p2.dwItemId;# F/ y: p7 q, Q T
}else{
) O* Y% `8 i' W: O( |4 W return dwKind2 < p2.dwKind2;8 S- X- M+ f0 n# t7 U% P& g' G
}
I' Y- t" A* r8 B+ c5 H}+ q0 N9 N) o6 M7 H& z7 V- |* H9 q; s
};
$ w7 @2 ?! n- I, u; ?- E5 G1 a4 wclass CInventorySort$ I# c. b) [: Y" E- l
{" L4 }( a2 B) {9 V2 h* r& j
public:/ |# `+ P/ f/ _. L+ O
CInventorySort()
y3 ?% G$ z" f; o( {{
/ R6 n+ i5 X! r+ J' S8 f- h m_dwPos = 0;
; d( P! k" d8 [( O}* K6 t5 T& ?" Z* l9 m! I6 Y
~CInventorySort(){}
$ G, {: {4 _0 {5 t1 p2 _& ?+ [private:% H& B& p, t9 F; j# H4 E
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ V& I, H, Y$ T8 K3 dDWORD m_dwPos;
4 n h9 e$ J, ~% s# K0 Tpublic:4 L) X/ e: Q& G" s6 c# d
void Add(BYTE nIndex); {% f% m' v- z7 o5 j( a
{( j6 w6 N9 Z+ ]" N2 Z
if (m_dwPos >= MAX_INVENTORY)% i* o% {) Z! k1 l
{: ^9 N. ]3 Q7 U+ g2 R2 h; b9 P( y
return;
- n5 f8 F: a+ y3 O- j' n }
& Z) g8 p( p& d5 I m_Item[m_dwPos].nIndex = nIndex;0 q5 Z2 F. C; I
m_Item[m_dwPos].dwId = m_dwPos;
' k9 I1 J0 S! E0 C# a- d m_dwPos++;) D- I3 i* l% j7 P2 a# l/ g$ S
}2 u! P9 l9 \" I, y! X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 J) n- I& d1 A% X: Y
{
4 R, j4 a; ], ?/ O- a for (int i=0;i<MAX_INVENTORY;i++)
* S0 J) l& R+ z4 G$ ~ {) O& q3 [ h4 y+ H$ e
if (m_Item.dwId == dwId)
# @& j( j: P2 Z) v$ m4 A {
( v; s' G E( W9 z- E return m_Item.nIndex;* Y1 I; l! q6 X
}6 g9 T! ^" |0 w6 W: k5 K. q
}+ t' m7 M$ [) j4 T( F+ F
return 255; c+ ~" d# w3 ^/ A I# b% M
}) b6 }2 D- r. g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, _5 g, t6 P, O$ A7 _{+ {0 A! y- n n: h. Q
BYTE nTmp = 0;' P9 Q+ d6 W" H( O5 y4 B% W
bool bDest = false,bSrc = false;
' d; v* t. ^' {2 i+ Z3 ~ for (int i=0;i<MAX_INVENTORY;i++)
# X" }9 v6 A' F3 e; g7 O {
. [; R: V L2 W6 _ if (dwSrcId == m_Item.dwId)7 ?) j( G7 c! Y' u* r* l
{
+ _1 O$ m/ A2 k1 T7 e9 i. q //id相等 则 改变对应的dest和src! l4 g# d9 ?. E# ^& v* x
nTmp = m_Item.nIndex;. P, @. f) V; l( b( S$ c0 I
m_Item.nIndex = dest;4 J/ \( z% j* {& s& F+ X& J. U
}
7 ~1 z2 g& v; D9 X8 |$ | }6 Q2 B6 {" d3 U. X L% C6 j
//临时数据保存完毕,交换开始, h2 d0 q' ?' G7 Z# M
for (int i=0;i<MAX_INVENTORY;i++)
s- v( Z# i3 b' w1 J- Z# @ {
6 F1 o: Z. U7 n0 I: }0 p8 N( A' M if (dest == m_Item.nIndex)! e% E0 r" X, B- s% o- p4 ^7 t$ u
{
8 Q9 E% n+ p, b8 U //id相等 则 改变对应的dest和src0 K2 A& l# X- u6 [! C* q
m_Item.nIndex = nTmp;
% D1 |: M9 A z& v) r, J8 L }
J9 t* Y; u4 G4 l7 G }/ i3 T- S1 [2 A
}
# W3 e6 U( Q! t- I! \ Z};% \% Z, `( k1 i# \; e" q
-------------------------------------------------------------------------. l9 }0 w6 r! U, d0 \: a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ o) ?; X" L7 R5 t. x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 J6 Y) u" M" ]4 c
紧靠其上添加:
n4 a0 m2 \& pif( pWndBase == &m_wndMenu )2 a. |$ k( ^% N9 B1 o% P2 E1 Q
{
( {: F2 S0 a! _( l! `" x switch( nID )2 N0 b$ Q7 I8 _8 W+ b2 q
{7 I" R* Z: g* { Q& n# _2 Z
case 2:
; M- W+ i& E1 a% M {
f/ d P* t- G& ^ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 Y0 P" e9 p, H# y* N/ R1 L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 U* M5 X/ \: W- x( P% ?
{
& D1 p% E. [& U+ [# V break;7 l4 O! W/ C: z4 ]4 x6 K: S, f
}* h" ~) V& [1 C) L% Y0 m
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ I" h9 e7 t- K' ?" J9 M3 ] {
6 j: t& |5 B4 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 C5 u" [, `' [
if( !pItemElem )7 W/ B; ^& N. u2 g9 G
continue;7 X- M. P; j3 x2 C) ]& _
if(pItemElem->GetExtra() > 0)% D3 }9 D P0 B( q3 X+ `
continue;4 B3 G) T! d/ d1 K" ]& [2 z- t
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 k( _/ S' W; P& ] continue;
) R; ]+ v; m% e" X' V5 r" w* g6 o if( g_pPlayer->IsUsing( pItemElem ) )$ w8 c. E2 x: Z( l
continue;9 i+ |& u5 s' V( @; q/ }
if( pItemElem->IsUndestructable() == TRUE )
% T6 J3 ^! D |" U7 k4 a. ? {
+ D. Y E& @5 G+ {( }7 q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' Z/ {! q. a- P3 t# |
continue;+ W6 M, {" H0 l6 ]" [/ d8 F3 n
}! N0 D E' {( I: e3 c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! H) k2 O) r6 m) Q# v9 X9 a5 T7 \& K
}
3 J7 H8 V; I+ B) k8 y break;8 v3 \4 L! H( V$ ~: y R/ O: i
}
1 ^7 G$ [! `! D9 G case 1:
7 p& K8 |2 j2 i2 ~( z# K+ ` {; V8 y( o' h( g; K/ m
//整理背包# |& N% X0 j& k5 r y4 z
//////////////////////////////////////////////////////////////////////////
8 k3 K$ _' p$ z0 o) X* `' s& w; j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 \( u P9 `: f //////////////////////////////////////////////////////////////////////////
' c0 X. t" o7 h; A" I //////////////////////////////////////////////////////////////////////////
8 f( Z$ G* a1 Q. K P; T CInventorySort* pInvSort = new CInventorySort;
6 X, A7 e* R& \6 p0 O' Y. B1 p vector <sItem> vItem;/ K d" O D/ X+ f
vItem.resize(MAX_INVENTORY);//初始化大小
2 {5 S, K& l. M3 W; L /////////////////////////////////////////////////////////////////////////// X2 G: Q2 Q5 x/ G' j
//填充数据8 V5 ?9 L/ V& s* J( \. F# \
for (int i=0;i<MAX_INVENTORY;i++)& v1 ~4 }9 {4 l2 R8 d
{8 R- Z+ c6 @% R+ o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, w, d8 U! a% [ if (!pItemElem); j. }& R( n E$ L- J& P
{
9 `7 B. t: y5 g' }- U# l0 U vItem.dwKind2 = 0xffffffff;
1 v% y; |) R+ r! o4 v) F vItem.dwItemId = 0xffffffff;, p% ^( d5 d/ T, ^
vItem.nIndex = i;
9 P; n/ n8 r( K6 _! q }else {9 a; @7 p" }. x6 j% t
ItemProp* pProp = pItemElem->GetProp();
( `4 f9 e; w1 p! b/ A vItem.dwKind2 = pProp->dwItemKind2;
) v4 |1 Y* K5 {* m6 I8 N vItem.dwItemId = pItemElem->m_dwItemId;& w; k& f! E0 f$ y2 i8 G+ F; G2 r
vItem.nIndex = i;6 F2 ^0 M- y: e1 V' N1 @
}6 [7 N4 E. [1 ^. ]- ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" | T! n: F0 X/ t
}; G V, l; j2 p) {4 R& e0 o
//////////////////////////////////////////////////////////////////////////4 z: m) \3 A2 B) C. O/ }
sort(vItem.begin(),vItem.end());//排序
; n7 v' \! \9 g: `. F, a+ _ //////////////////////////////////////////////////////////////////////////9 n4 r# I V4 o2 q3 t
//交换
' v1 O2 P: U% t& @2 l Y8 I for (size_t i=0;i<vItem.size();i++)
* Q) t2 p8 W, j6 ~$ | {
6 |' ?$ f( h4 Z# y) y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 t) p( n( _$ O6 c" r& H1 S3 A pInvSort->Add(vItem.nIndex);
. ~+ F9 `& ]7 X5 S: E) ^# [ }
9 u8 {2 q5 ~- C8 ~+ _* T2 I BYTE nDestPos = 0; H5 i* [: z0 \* c. E- c
for (int i=0;i<MAX_INVENTORY;i++)0 ~$ a" h1 |: y1 Q! Z
{
5 N* s1 R, D% t) |) S9 V8 }4 y# P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; v, l& W& @- a( a* _1 U# m# } if (pItemElem)
* a/ \3 z- x5 ~; H/ S6 A; s {/ X9 a f# m2 [. ?/ q" r# ^/ X
if (IsUsingItem(pItemElem))
0 } z- ~( G+ O% B( z$ { {# U# j8 d6 P# B3 x2 `: d* O( [
//这个位置无法放; p# Q S4 l+ `, ^, Q
nDestPos++;' l0 J- x7 N6 t( Z
}2 V; i8 {" v( Z5 x3 C
} j1 |0 v" L \+ q8 D/ ~1 x, u
BYTE nSrc = pInvSort->GetItemSrc(i);
! Y7 m) c. T& [# B, F/ } pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 A7 F: B3 Z7 k if (pItemElem)' T; g$ ?7 {4 e/ w6 D, }! J' Q
{! Z' ~! p/ G% e1 h4 S" r
if (IsUsingItem(pItemElem))7 S9 ^: z( g& \- }
{1 g8 m% N7 X5 S K: ]& x7 t. |
//这个道具无法移动,跳过
) Y0 ~* X: j3 U# F6 r# Y continue;
\/ T r7 u2 M: i% H' i }
, ?# `* h6 l7 \. h3 c1 N; ~5 B }else{7 U/ |" `7 R y f+ l' [3 T/ ^
//空位置 不用动' J+ K8 s$ S3 u7 H
continue;
" s; g. \4 L. W$ a7 ^ }
3 z/ S* R0 G8 Z6 H& T3 v+ _ //////////////////////////////////////////////////////////////////////////7 n8 z) |0 _" @$ C2 A
//开始移动3 ~& R/ G+ N# ]) h' _7 g
if (nSrc == nDestPos)
D" D6 ^" D- l H9 ^" P$ A0 S {' f4 c) Y4 n$ z' e: y- [
//原地不动( [5 {4 o4 Q" `- T" f8 q# W m) ^
nDestPos++;
: X) s2 s* u! R$ W continue;8 u2 e1 i: r1 O; K/ }( ^1 S
}
9 F+ Z: m! N8 y3 e& M7 G6 s8 o pInvSort->MoveItem(i,nDestPos);
8 n- I/ j+ b; O& h g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& ^: L7 f8 P! l0 E o; W Sleep(5);5 _. d/ c* d7 I6 A4 B# }
//Error("移动 - %d->%d",nSrc,nDestPos);
; Q- I4 }8 q" O( w; U9 O. Q; f nDestPos++;
' N+ ~( n6 r2 B; I. h# m' X4 n$ d }
; _" V7 L: q# [8 M //取第一个元素的信息4 C) @% o+ @9 B- Q% G
/*7 s7 U6 r( U D& }0 ?3 g2 {) ^9 ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 d1 X: o3 t8 K' x; B( p
{8 ?) k/ D+ H5 n0 Q6 x# x% X
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' H3 c/ \2 o+ n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! [7 z% [/ N/ G
}+ j& y4 x/ Z7 a d, B
*/0 s$ I1 Y% y) M! s
//////////////////////////////////////////////////////////////////////////
9 Z: P) Y3 C: z' N5 \ break;7 I! D; O- t( V7 t
}
0 L2 w# ?0 G. ? r5 D! Z1 m& b" q } ! b e0 G R3 p; \' T4 R# x3 W
}- {5 Y& ^9 C* v1 ^$ O( ~; a: P4 [
m_wndMenu.SetVisible(FALSE);' a! ]8 p# @+ w: i
# T- w ]; A# v/ M& @% L
--------------------------------------------------------------------------------------------------------9 l! t2 E, m+ a1 o. S/ }8 U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 p# C* }# v- n. i4 t0 Z{4 i- u5 f' v2 B& {6 K0 q7 i0 q
BaseMouseCursor();" |9 }1 |( A6 n9 h: o, A
}: q; W9 A" e, Y
在其下添加:
( Y4 _6 W* r, J9 Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 t5 d, X1 [ @2 b) o; C{
! g! @% T9 c u9 I& \# h$ ~m_wndMenu.DeleteAllMenu();6 ~* b, U" ]; Z4 l9 ^3 E, w
m_wndMenu.CreateMenu(this);
: ]3 G! |( A9 X& K) Z5 D Ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 T: B3 z2 m7 }- \; V2 V
. [4 l* L1 C$ W, I6 g8 uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ Y7 C4 p1 f. C+ q n' A3 |. f7 D
{. n3 B% J! R. e5 I4 t. ~. @1 Z
//P以上级别才可以删除所有道具
" b3 M. p" P: T+ Q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 D1 e* K4 i- f8 ]% N; J9 F
}+ X8 M% H+ z$ c5 U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. w% O. X& a' ~1 j' A; Im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ i- T5 Z) w7 O: P; F! d
m_wndMenu.SetFocus();
( S% ~. R0 H! X$ j$ ?, ]}
9 U- {% D* }, X6 m; ^; v------------------------------------------------------------------------------------------------------------
: \' _4 W1 m6 r*************************. E2 N( }2 a3 y
WndField.h文件
]% {; m$ n9 x$ H! `/ Q f: {; s*************************
' _6 H3 U# d: Z9 y& c7 x搜索:BOOL m_bReport;* b1 @6 q; V: }6 [5 c: T; I! G
其后添加:
, Q) k9 S! b7 J. YCWndMenu m_wndMenu;" a/ b& Z- f; D- l( o
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 o9 S9 n' ~( j! u! v0 w
其后添加:2 s$ H$ L3 U% O" A- I( [' F
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 a* y3 j6 T! m) a Y9 q
' W9 ?! g. |" P
! s1 r3 V6 O' ^: l) w$ k6 _ |
|