|
|
源文件中_Interface文件夹下WndField.cpp文件
6 ~; T. j% v! L9 j3 _, X/ A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" F) M: d! T: M# w& ~8 X6 M
/ R8 R4 _+ O* F6 J8 z8 Y3 n
struct sItem
. q. H3 A8 v6 H& u{
+ _1 g' I# s) D! b2 oDWORD dwId;
2 T2 E9 S% p3 M8 M7 l8 b5 ^. KDWORD dwKind2;
* a9 O4 H4 o% N2 DDWORD dwItemId;
, z5 h4 D) x' sBYTE nIndex;, ?! t; ?' j7 o
sItem(){: \9 F7 |- ^" _2 j, a
dwId = dwKind2 = dwItemId = nIndex = 0;
0 K* S1 x' e- E}
7 l' s) w& ?" Y4 o) }bool operator < (const sItem p2)6 D( {' E& N2 B1 i- c! i
{8 d+ Q6 }* ]* {& y5 I% z) [1 M
if (dwKind2 == p2.dwKind2)
- v' j* t* b9 a3 o: i {' p5 T h4 S0 v1 r: U4 @' m& c
return dwItemId < p2.dwItemId;8 M- i9 a# {! R7 n+ k6 q- U" V
}else{3 R8 {- Y4 b% _4 [' `
return dwKind2 < p2.dwKind2;, z* f' C$ j; m6 D! O M
}
" w# Z) i S0 u; I f}/ n. J* u( ]. N" I/ n2 \
};. W/ d( } n- K- E" j
class CInventorySort W4 \& S% r6 ]! D& l( ^) X
{: P1 z( }1 s4 Q( J" G) ~% H( _+ q# w
public:# p! U, o0 g: D P
CInventorySort()& g& S% J5 S* J
{# Z# B' h# x. y4 u! l. W3 ]
m_dwPos = 0;7 K8 ~5 A P' t+ K0 R- D3 n3 U0 x
}
& s9 P9 `/ b: X+ ~6 m" h~CInventorySort(){}
9 K+ X( K. M- e- ] t) H' H0 f- |private:
# |1 r$ F- z) r9 R0 {: f4 [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 F K- d7 F" x* G9 m3 r$ jDWORD m_dwPos;% R5 P& O) n# w& N; @: _
public:
& z& e0 U7 |2 z$ xvoid Add(BYTE nIndex)) x" W, w# y# ]! ^( c& s$ q0 F3 s
{4 w* l: X- W% @2 v) a
if (m_dwPos >= MAX_INVENTORY)' i4 \* i" E9 }, I" S* c# r* y/ L
{- \! M3 S- G/ H+ A3 \! O
return; A( ~# f9 L9 R
}, C! H+ h4 K0 c& q9 m+ n
m_Item[m_dwPos].nIndex = nIndex;
5 p- E4 ~: ~0 Q" t4 u m_Item[m_dwPos].dwId = m_dwPos;$ y$ E% u, m1 b
m_dwPos++;& E, o9 \' X. V! q9 o( ~% H
}7 x4 W: `; b1 C* [1 H7 t5 z& C
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% M& c3 B& x/ L$ J2 A1 M5 Z
{, W) z- L" i- o" L! C- x; i, {4 [* B
for (int i=0;i<MAX_INVENTORY;i++)
* d0 T, p; P# ^& l0 z' e/ J {
O$ }% Q, V2 \ if (m_Item.dwId == dwId)
4 T& n5 l6 n1 x' F {
2 v _! d0 E, C' X/ P return m_Item.nIndex;2 X' d" V$ P9 n" {8 G d* s& Q+ N1 y
}
( ]. k- o* u. i% `+ Q1 j4 d }8 Q! K9 M* s) Y: p' A
return 255; C. |( ?' N3 S( N9 N
}
8 j7 q, q1 ?, N" F. }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 }3 t& Z0 ?2 k( N5 w( q7 c{
9 Q: ?) X+ [6 k3 q4 B% q BYTE nTmp = 0;
5 O8 O1 r2 [% @" M/ s: Q) ~5 m! l bool bDest = false,bSrc = false;! ^$ i' H2 O8 { J# V
for (int i=0;i<MAX_INVENTORY;i++)$ [6 f7 D* |2 ]
{
; N, P3 @; c5 d" W% R if (dwSrcId == m_Item.dwId)
" J0 m" t) k% r3 z' F" G+ M4 y {
! a! w! Z) ? ~ J //id相等 则 改变对应的dest和src: c, ~! {5 |% X' t$ N' _0 o, E. Q
nTmp = m_Item.nIndex;
! B+ W' N9 A4 h3 \ m_Item.nIndex = dest;
; Y B! R' J" \; o! t% i) d7 L% v }
+ }" w' z# p6 M( ]0 j. n# ?7 b: C }8 ^/ S" ^6 N+ [- Q! `8 |
//临时数据保存完毕,交换开始' d3 ?. H+ L( _, }* k! `/ Z5 y
for (int i=0;i<MAX_INVENTORY;i++)% s6 x. n" N S
{
/ }* M/ J9 s9 a% h6 h0 f if (dest == m_Item.nIndex)
$ S& _4 e, [. @ {; ^8 c$ J: I2 j w1 h1 c- v" v
//id相等 则 改变对应的dest和src9 m" {3 G4 w9 n5 b
m_Item.nIndex = nTmp;
% V, u; E. E. h! x& K# F% o }# y: _# ^& T9 g+ u
}' q# q2 ~% c8 j7 M: u
}
% _' V- n2 {9 r) W$ G" m};
# f0 W4 H" W# ]/ R4 I7 p-------------------------------------------------------------------------
! _4 F4 k; H0 s) k9 h1 y! N依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: c, T* e) J! N/ ]5 a2 O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 A/ {: {* w9 \- ~$ ^ l6 [% U
紧靠其上添加:
& W) E1 E3 |5 n. S1 ~% ~if( pWndBase == &m_wndMenu )% y$ B0 }* |2 G" ~ |
{
9 n2 z# C3 n+ E switch( nID ); c# @- R v! \: p! ~! |
{( B9 Q5 Q% Z6 \- h" e- f% G/ p
case 2:
# R. \( J) u) g( p; X2 [ {3 `- |: e' L! {: a* N1 T2 W5 t
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ H" J8 u/ i" q% o A
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 J d/ `5 f6 F {& ]* m6 r+ R) o* o3 W1 {
break;' ]9 v* R- |" t% W8 G: Q, M, R% c
}
+ K6 \) z+ l1 K$ w' D( S+ Q- y' H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 N5 K1 r' d- U# P) u* X5 B
{
( ^6 n5 B; N" u4 `$ G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 c, R4 d9 B/ q$ \5 ]# D7 V; q if( !pItemElem ), t8 e; f( \' ]$ _
continue;# f) A- W& y' I5 [7 r1 p
if(pItemElem->GetExtra() > 0)
, P+ L$ H9 v+ R9 {3 ]* i continue;5 }/ z0 n+ `2 |; U* g4 _% i$ A" Y6 V
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) k2 [& H1 E, o5 a1 o! K, v continue;
$ B3 X( l7 h) v/ F8 v if( g_pPlayer->IsUsing( pItemElem ) )" Y$ h& D& R; S
continue;8 c A" j# U! I# p) M
if( pItemElem->IsUndestructable() == TRUE )
8 J. D. C( R$ K% [* Q {5 X0 Y' j$ ?/ p d' ]+ |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ E; I& s! r' f
continue;9 D' A) y1 }" p0 [4 D4 F: L
}
, T. U; q+ N% j g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); q% O( h) A! [
}
- z) U% I+ h4 \% ?+ c5 Y) m break;0 [( q* ^9 `: I8 |8 ]+ e& y1 M
}
, g6 {# S5 m8 g case 1:; Q9 G2 r( Z5 P- L
{" @$ s4 |# T* N" n
//整理背包9 s1 E$ }4 ^" z3 ~# r) |; E
//////////////////////////////////////////////////////////////////////////. q2 K6 N( V* W, ^* v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% T; q3 t8 ~+ s //////////////////////////////////////////////////////////////////////////7 }! T [0 d, K; f4 r6 ^
//////////////////////////////////////////////////////////////////////////9 \/ }% x, i( N4 t4 z
CInventorySort* pInvSort = new CInventorySort;
& c4 V$ c* ?1 ] vector <sItem> vItem;7 @- w% P7 f& | C
vItem.resize(MAX_INVENTORY);//初始化大小! v0 w6 y! C! ]7 T' \
//////////////////////////////////////////////////////////////////////////) [2 X3 ]2 y8 f# r; P, |
//填充数据
" t$ m; t# z" t. [+ Z, z1 [ for (int i=0;i<MAX_INVENTORY;i++)* F8 @( K! z9 b% D t4 p# c& @
{0 k; J) b; x, `( A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- X9 u; ^$ h9 u; C- Z if (!pItemElem)
* l# V- t' r- q) L! e7 _! Y {. r3 T8 _: }/ W1 C D# C
vItem.dwKind2 = 0xffffffff;
0 d# P+ J' `: f. ?2 Z- t vItem.dwItemId = 0xffffffff;
9 E" u% }! \: n9 I9 o" i vItem.nIndex = i;1 I6 A" {. |% T. g n3 a
}else {
* D$ @9 k/ P8 o5 w/ }8 s ItemProp* pProp = pItemElem->GetProp();
8 g2 B/ ^/ a, [6 w vItem.dwKind2 = pProp->dwItemKind2;: x5 s$ [7 h8 t! G9 q0 j
vItem.dwItemId = pItemElem->m_dwItemId;
0 v# \6 _) T, R1 W vItem.nIndex = i;
2 u9 [ z& l5 ]- b5 ` }% x* j- M) C/ U- i0 u! c* Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 @0 E" J% i* w5 W
}) f; F* H& k9 D: s2 j$ l
//////////////////////////////////////////////////////////////////////////
+ T3 @; } h8 ^* I0 U" l sort(vItem.begin(),vItem.end());//排序( ]- f' a x9 E/ V: g
//////////////////////////////////////////////////////////////////////////
0 c1 C7 M% I' Q* o) m' t; | //交换$ E5 M+ G* U! Z" w7 a4 n
for (size_t i=0;i<vItem.size();i++)
6 ~% T* i# [5 J# ?3 Q8 e {
$ j! B! H8 p6 h/ Q% c- U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% v! R9 V# Q" L$ [% X7 o( w
pInvSort->Add(vItem.nIndex);# o9 p( G E3 b2 S# d$ K
}
' M# B' Z0 D& Q, n7 v3 s! B BYTE nDestPos = 0;
& j/ L& _+ g7 w+ t: b: ` for (int i=0;i<MAX_INVENTORY;i++)
% _- B4 E0 X( n! K% U3 T& C {
# ~2 l* i% g! }8 u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& N% p6 f& g& P# \- J
if (pItemElem) }& d F! C: v4 m
{0 `1 ] x1 s+ M( l- R6 i3 k4 v/ F) r" E L
if (IsUsingItem(pItemElem))
$ C `0 [ A6 |0 e& \ {8 \4 @ J' Y! T% a# a+ y0 R% X
//这个位置无法放' P0 U" w8 U6 E# S0 d% o
nDestPos++;
% q1 k) N N( l7 _ }
; L. }: a! f. {2 B" ]" L) e3 s }
3 f9 b: x# `$ ^" }6 R. Y5 v BYTE nSrc = pInvSort->GetItemSrc(i);
" K1 p8 c6 f6 \5 w1 O# i% d4 r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; J, k( B! \) i8 n5 |* A9 s if (pItemElem)
9 I0 k0 f9 S5 E+ |2 u6 z {
. g" M9 @" ]; g! W4 a' k if (IsUsingItem(pItemElem))( s! P1 O8 E. _" [9 D
{
- J# j; {, P4 {0 `# `# n- t% u //这个道具无法移动,跳过
5 g: R5 z: r% @5 z continue;# l, ]( y3 ~! c5 n
}9 z1 y; _: u4 ]
}else{, r8 E& ?' P9 p8 S4 c
//空位置 不用动
( Q7 n0 o. H% l+ c continue;
; V8 T( G" v& z! j" k9 h }
+ T1 G7 i3 Q% c4 A& \ //////////////////////////////////////////////////////////////////////////
Z0 H& G1 `' [+ P) ~( b9 f* [ //开始移动( ]; d* w& x1 A- p J; g
if (nSrc == nDestPos): c! S z% q4 `7 Z1 i
{
% a4 \: i7 [) {) ?$ y //原地不动6 o5 a# R2 x- ^# q( e
nDestPos++;, Z$ o$ t8 Y) t
continue;
- x' B3 x8 i8 R$ n$ Y1 O }
. Q( D0 p9 ^# q9 ? pInvSort->MoveItem(i,nDestPos);
: s/ F& ~' y! Q. Q: y g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 F0 q" T/ o1 h! O
Sleep(5);
' l( B. c2 P6 r* L# k //Error("移动 - %d->%d",nSrc,nDestPos);
: c; R$ c. M, s, l; @ nDestPos++;
: g) ?+ Q/ s, L( J7 V5 Q- h) j }
3 x4 j; _. b# Z7 |6 F //取第一个元素的信息
5 Y/ s4 o, r* G /*
9 C& w6 Q, y: K2 p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) j& n/ x( b1 o) [6 ]
{+ _$ x$ z( F1 F. \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 g/ N. ~4 Q D' @" T g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); h0 D+ ^" v! R/ |& c
}$ l5 e6 o- F+ o0 C" y
*/
7 t/ d1 [$ O$ {, D( M- d/ y& [ //////////////////////////////////////////////////////////////////////////
# Y# p O: W% V9 d- j break;
3 H$ F1 S( ~2 X$ p; [- X }* E0 O% {3 f7 m+ W9 \$ M) o
}
$ I( {, {( W' j}
' @+ c2 E% z) u6 [' Rm_wndMenu.SetVisible(FALSE);& E; ~0 Y4 o R- e1 b0 o k+ O
! N- A F4 U/ b/ v; O5 l" E5 O& i--------------------------------------------------------------------------------------------------------
8 k6 `4 J8 T9 e4 _搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ h. s8 U# I( {% J9 Q8 f0 D
{
4 d3 x* V, {& N/ N0 Q$ ]" cBaseMouseCursor();* b2 U6 b# K$ P1 d9 H" c
}+ X" j6 d: J$ x U2 l. X
在其下添加:
& s8 d) S% D1 t9 Q1 z& Dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" c4 d3 z: ?! b! S7 _# V; r
{- A! G( i/ R4 _( Z1 c( }/ P2 _
m_wndMenu.DeleteAllMenu();
, T6 J5 W4 {: a' Q4 Mm_wndMenu.CreateMenu(this);1 z) @8 J5 R8 j& b& r- A
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% y8 q/ W$ `+ v5 r. u) i( F! A/ H
+ `- N |2 l: qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& Z: E8 m0 W# l3 c* E$ W
{
+ W7 y/ f# S; n8 U //P以上级别才可以删除所有道具0 B/ w0 i) s6 F$ ~8 o# z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ V; h: H; ]" b0 T( r
}
# h3 r1 z; K1 ?+ W7 w5 q _3 em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 P3 B/ M `6 R! }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 H5 L" m3 n7 r1 ~6 A) J- Hm_wndMenu.SetFocus();
% X/ A& Z- S1 _5 @}
& f9 x' C$ w8 @7 d4 i0 z, l2 Q" L------------------------------------------------------------------------------------------------------------
7 w* r3 Y+ k1 {5 e* i*************************
J" t$ I' X) SWndField.h文件
: F1 X* e" N( Q*************************
& D c8 m- Q* a% Z" z7 V搜索:BOOL m_bReport;
& g- v% h+ I7 t5 F( {0 J1 D其后添加:
4 l9 j; J5 I) k. mCWndMenu m_wndMenu;8 b: I7 w! E) Y9 z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 O- u( n! c6 I$ {. ?+ J其后添加:* p/ V- k7 F5 \
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; I1 |9 }/ P! b6 _' d& J9 n& P; ]6 _4 p( o
3 ?3 C- f+ I, V7 w+ C* v6 m
|
|