|
|
源文件中_Interface文件夹下WndField.cpp文件
) G% M+ F+ L/ ?7 q0 M3 E搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! T$ h9 L! V* n9 k# p" q
9 F* l- ?- v1 J5 Astruct sItem
/ @7 R4 j" r9 \* l M, ?{% f& A4 y- G6 O b7 A
DWORD dwId;
0 d/ Q: o# M" `* g TDWORD dwKind2;
5 N1 C0 J1 o3 O# H, n8 ODWORD dwItemId;
8 X5 {* w6 h% `4 b( r9 M4 QBYTE nIndex;
6 e- J8 _& r0 ]$ H+ {7 V. [sItem(){
3 K& B2 y/ n) o, T; i; ?4 B# ]9 l/ D dwId = dwKind2 = dwItemId = nIndex = 0;2 y" p) B7 H3 P7 E! }* a
}& R+ m# f4 g# H1 `6 V% l, X" r
bool operator < (const sItem p2)/ [+ l N5 }2 z7 V- b
{
( _. F9 A' [3 b if (dwKind2 == p2.dwKind2)- n9 ~7 E1 }; D* ]
{
+ W- _4 P4 o3 Q& T return dwItemId < p2.dwItemId;: f5 k( ?$ j- h9 F3 S6 j2 d
}else{: Q" W8 b5 A# _9 t' l
return dwKind2 < p2.dwKind2;
* q4 l# ]/ \5 r4 L }3 d; n Z. }; ]9 d& N8 h, L
}
3 O! b: I4 W$ f7 b/ b, m6 H J X};( x8 t7 R; y0 d- v
class CInventorySort$ e, R3 \& \. m$ G9 u# `7 E" ?$ q
{$ W h( _! M3 [& R- x3 @
public:/ r, S* H& \- ~" T5 U7 G
CInventorySort()1 ?0 ?' K: N1 X* ]5 G
{
% m5 ]1 s: u* I! L/ t, L+ _" [ m_dwPos = 0;
" |9 M& t, q- k! C" k}
$ n2 P ^! ^$ S7 U~CInventorySort(){}$ T4 l& D& M' Y& X( i u3 h
private:1 A! `# z% q2 Z" t
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 T( K$ \. M7 X- S* |- f, rDWORD m_dwPos;7 k U6 n [3 l
public:1 y0 u! b' C$ t
void Add(BYTE nIndex)
( A$ J6 F' K9 X8 E{
: H, U1 Y' r9 R: ^' B/ W, } if (m_dwPos >= MAX_INVENTORY)
; V+ {) L" p" t4 M+ y {
; B i& x' k z; l6 x return;
2 H1 n9 z- ?6 m, x J9 A }
, ?; n# O/ Y$ g2 f0 q) y8 F m_Item[m_dwPos].nIndex = nIndex;
2 E5 o: s9 y$ C# j$ v9 C m_Item[m_dwPos].dwId = m_dwPos;
4 f5 Z3 e* p: @* E1 B m_dwPos++;
, K" O3 s. O/ R! m5 B}/ k% F ]# s, _1 |- M$ f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 M% i& t1 ~/ a! t- [{
- ^% r+ C# w! I1 i. |8 F# @ for (int i=0;i<MAX_INVENTORY;i++)
$ Z" H8 d& C2 q$ L% d {
2 b) F# V- o+ _% o% {' ] if (m_Item.dwId == dwId)8 p1 ~( Y6 f9 }8 ^" U7 h& l; Q! @
{
& g2 H- n* M+ v" l+ M/ H. ?2 Q return m_Item.nIndex;
D" A T4 M* K+ G4 x) n2 F }
* a/ Q; L: |( \& c' A' } }
$ F9 ~8 J ]! R return 255;' f H% F/ t9 X5 [! M- a! n' ?2 A. I
}: {) v+ i1 @7 f' ^. @6 ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& k" j( Z5 ]* }3 o H; H3 A9 K# E
{& Q3 X" }' W5 y4 K2 _( ]0 _$ Y
BYTE nTmp = 0;
1 q) w6 d; _# {. p/ U/ M' @ bool bDest = false,bSrc = false;( I) c8 ]4 Y' u+ a7 T3 ^6 t& G
for (int i=0;i<MAX_INVENTORY;i++)7 K2 P: K" U g* o7 Y, w# I
{1 M0 b- Y4 `) u( l2 B
if (dwSrcId == m_Item.dwId)' g* j3 i% \; z
{8 g0 t3 X; y% y8 Y
//id相等 则 改变对应的dest和src
! t9 ]0 i5 S0 y) }# Q- x nTmp = m_Item.nIndex;
- ^8 B1 b9 T+ Y" p( R2 r; ~* ` m_Item.nIndex = dest;: F8 L1 ~* X2 X9 V a
}- }/ {6 b& R$ j5 Z0 b, O5 i
}! m3 D1 U3 i9 r# U
//临时数据保存完毕,交换开始
/ c# n+ E( F$ G& U" b) l4 f9 \/ V for (int i=0;i<MAX_INVENTORY;i++) k P# s5 v3 E6 ~6 Y$ m: E
{
% o* f4 ~; r) Z6 R+ _! q( O if (dest == m_Item.nIndex)+ i) B5 t0 ]; F
{
2 u' S! y' I$ g3 Q. [$ O //id相等 则 改变对应的dest和src
5 R1 V, b, h6 @/ V) }3 d( l( @ m_Item.nIndex = nTmp;
2 Q7 Z. K: K! \5 {; B: z } U& S+ R+ N1 A3 j8 G1 R! x8 t
}( K4 Q9 ^1 p2 k
}, D- o) D& ~6 O, L7 c _
};
# _+ _' r8 c* ?4 f* S-------------------------------------------------------------------------
& N8 K" P' z, i7 Y. U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 ]5 A* E+ F: t6 Q/ ]5 W# m搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 S+ \ w% {% f/ A5 c' w+ d D- H紧靠其上添加:9 L1 u3 I5 \" b2 @# }
if( pWndBase == &m_wndMenu )
1 }5 U6 w* Q4 S7 ^% y6 F9 E{+ J1 x3 X: i: q! j4 E7 f
switch( nID )
( `# l3 P. @4 j( p4 o( @$ y3 F% ~ {$ k) B i0 F& k M; c; f
case 2:
; q( R/ u! a, I {- G- H# J) j& d+ v1 u8 G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ f. J( h0 [6 W% Q9 w: D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 w# ]9 t6 q- g, o$ z+ ^
{
5 c8 J2 \) U" ]# E/ f& q1 T break;
1 Y( ?$ N3 A+ ] ~$ y }. s' y) b0 m' t6 C" {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): g/ H5 P: h) C, k; k. \
{' `/ i L x, s& |% f& `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, a/ R2 _4 z) |# h9 W* ?9 `" X
if( !pItemElem )+ j! ^# l- t" Z G3 b! V
continue;0 m: J) @7 ^% s3 A5 y
if(pItemElem->GetExtra() > 0)
$ r- b+ w( O' D0 b3 q continue;
8 R: E1 }4 Q) e& q* E }: M+ l+ Q- f. r7 X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: h% v0 a9 }. R continue;+ r7 h5 Z% J3 D8 J- p. i
if( g_pPlayer->IsUsing( pItemElem ) )' T% L; L" b/ M7 J* k
continue;- f$ y2 @, t3 \0 h; `
if( pItemElem->IsUndestructable() == TRUE )0 C8 {. W; |2 G7 F. T
{9 |$ L0 y" N0 T, s6 `2 K7 N- ]7 s
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 q7 G& }, l, {* m) L6 J1 ` r0 v continue;
& U+ `4 g4 S' x: X( t- b5 W- n }$ q9 ?9 R4 V# R" @& V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# L# R6 g8 p+ X
}( ?+ ] [, n `8 L
break;* o; F- j; P0 w+ N1 G" P& G' J
}4 _, u5 @/ E. J9 j
case 1:
, m C" w6 P' v6 y( o8 C {& ^4 C( k( _; s" h/ v w
//整理背包4 l7 K( ?; ~0 f4 E
//////////////////////////////////////////////////////////////////////////0 n' R! n2 C7 I8 x$ T
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ V$ ~. n4 G, J0 v# Y
//////////////////////////////////////////////////////////////////////////
; {6 m& f) `% q0 x6 a4 C //////////////////////////////////////////////////////////////////////////
9 z" k# L% g; K' g8 X CInventorySort* pInvSort = new CInventorySort;9 i$ R# p ^$ q
vector <sItem> vItem;, E7 Q+ m( V6 {/ N2 v. W( g$ P
vItem.resize(MAX_INVENTORY);//初始化大小
8 b' K& P/ Z, n$ X1 z* J //////////////////////////////////////////////////////////////////////////
9 d" X1 ~. U$ D* ?4 F5 b7 \8 a //填充数据
9 r7 M* a0 v( \& V+ ^ for (int i=0;i<MAX_INVENTORY;i++)- j R, h" D# m; \4 @7 g; D
{& t% H3 w5 y' {& f n: x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- H* J9 G+ p& Z5 B
if (!pItemElem)5 L$ |0 v5 D6 t8 l' K: h
{
4 H. [! _/ X6 s* P2 f vItem.dwKind2 = 0xffffffff;, k2 @" O, Y! W. E" H
vItem.dwItemId = 0xffffffff;
( ^, ?4 N* I, X( I @# S" B vItem.nIndex = i;* M: o. G( ^% N7 Q$ W4 b; y& W( P
}else {3 i& p# U9 H' w
ItemProp* pProp = pItemElem->GetProp();
. Z6 T4 q& l/ Z8 M) l& _ vItem.dwKind2 = pProp->dwItemKind2;
# [# ~2 z) \- }9 G2 \* A$ ]8 Z7 t vItem.dwItemId = pItemElem->m_dwItemId;7 ~; z2 _( @0 H# f! p* I( {" c9 o
vItem.nIndex = i;# C% d( |. k: b: A. m
}
/ y& i+ J0 x6 G+ ]# M0 I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* k, d+ v! Q/ ?5 q4 {. j( {$ F. }& ?
}# A0 r% u. D( i! b" W
//////////////////////////////////////////////////////////////////////////- A) o# i" w! E0 ]! Q
sort(vItem.begin(),vItem.end());//排序
. {7 e0 i8 g! ^- s% c //////////////////////////////////////////////////////////////////////////
3 B; M% p, D. Q# y, \1 p //交换# u/ q' A3 Z: x; y) _
for (size_t i=0;i<vItem.size();i++)
% s3 r5 k* [' `- u+ Y+ W1 T {
) S# E) S" y/ T# w& d6 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 t8 z+ [0 b/ c& M! X' |
pInvSort->Add(vItem.nIndex);
% Q9 Y: k: I/ f2 u7 L7 t }
! R5 ~( j9 X( I6 V BYTE nDestPos = 0;
0 l2 w! l, S! u9 @6 v, { for (int i=0;i<MAX_INVENTORY;i++)
5 y1 f n) m. g- V% B& m$ r {& ` B/ @+ I+ l# h& h2 K+ l) W" H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, { }+ }/ I2 q- z. @
if (pItemElem)
9 ]2 n5 h5 f/ {) z2 } {
/ p/ M0 E& Y/ B$ h5 ` if (IsUsingItem(pItemElem))
) U: X2 w8 Y s) n1 T: B2 `1 h {( e" y1 Q6 o3 ]; T8 I/ `6 T
//这个位置无法放* h4 O/ S3 F( l, O# }' n
nDestPos++;' C2 U2 [! f) R) B% e& a7 L& q0 n: {
}$ x m3 V4 `. t6 @
}
/ w& }& ]) E, N BYTE nSrc = pInvSort->GetItemSrc(i);9 `3 B+ v; S7 W5 C8 b- k
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! N4 |. p& E3 E. ?( P# H if (pItemElem)
M0 ], C' a$ r9 o& e {
" {8 [: }* _; }; W. V M$ I5 K0 X5 n6 G if (IsUsingItem(pItemElem))) P8 Y6 I! R' S: w9 T
{: V! R6 N5 R5 a, n7 {5 s1 I
//这个道具无法移动,跳过2 n& x1 t0 R7 A& ]% T3 l" u
continue;
% [7 A6 z6 h% S4 |6 N, @ }
; A3 F8 p6 _' Y% Q8 J }else{
# l/ P$ g1 O$ T% D( L3 W5 R$ R //空位置 不用动
: {, }( z( Z) r2 L% I5 m3 j4 p continue;
& v7 f' |1 e9 h# _/ ] }& ^! c+ q4 y8 a; Y
//////////////////////////////////////////////////////////////////////////1 v& h: V J( K8 R# p9 ]
//开始移动
5 L3 B) K: @$ n8 m# J if (nSrc == nDestPos)- u0 ^) b7 @& ?% j, ^1 W7 N
{* i7 P" ^* G G9 V# d
//原地不动0 T/ M3 D# V% O0 K8 S
nDestPos++;
7 U$ F4 Z; I: m9 e; U' b5 h- h. y7 r continue;9 P7 s8 n4 H* B- h4 M
}& O: J8 K) w9 v) K+ f, ?
pInvSort->MoveItem(i,nDestPos);
4 r4 w6 [1 k. h/ S# J g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 M( [( J0 W* U, S, V% s
Sleep(5);, A; I) h8 u6 y/ q# `/ _. F3 m% }
//Error("移动 - %d->%d",nSrc,nDestPos); H. v: a2 h; _3 F/ u, q
nDestPos++;
" x1 r" _! _# P* u0 R# o }
1 i/ {7 t' |5 X% d) m% y8 Z& Y6 f' { //取第一个元素的信息8 I+ \8 w9 @* T# q3 K- B* a' O* _
/*! i+ |5 b7 B4 u
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% B; H+ g6 o5 }- Z: v* D/ u! Y7 } {( ~% H; z8 ^3 d# i6 H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! }1 W; t, ?6 a, ?! A3 m% f* e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 y: g" _+ l- c( i( u
}* T2 a! A( h6 y* A* B1 ^
*/: t5 {0 i+ X, T) E h
//////////////////////////////////////////////////////////////////////////, p. l9 ?% c1 |4 S4 d* t4 ?
break;) w `3 o2 U7 O! \" [' i
}* `0 x- T$ I( t
} % t% O) Z8 o2 W& W, G
}$ A1 \& W/ a3 A# U! U, k8 t
m_wndMenu.SetVisible(FALSE);% O% J6 q, b0 x* A& R3 |! p- ]
: Q6 Q+ v& b/ G--------------------------------------------------------------------------------------------------------$ L" b# x: ~& K5 O$ ?. y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 p2 K r x5 k
{2 m) {6 g- x% H# o7 X
BaseMouseCursor();) `) Z) J( _1 H: p
}% n/ B, F/ Y; ]( a! @: N
在其下添加:/ Q6 k4 U8 U7 R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- {+ Z. {2 o* q" R3 d
{. L$ @$ {) @( K, j( b+ `4 |$ U
m_wndMenu.DeleteAllMenu();
: z7 N$ O6 Q# n! y* {9 hm_wndMenu.CreateMenu(this);
- s9 P( J+ A V0 v Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" ^5 O1 o X- S$ N+ m# {) T, K/ U' m* o: |5 Y) B
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); o4 t* H4 l9 ~0 U; n
{
0 S& z* b* w# c+ O% i- R/ S! T4 [ //P以上级别才可以删除所有道具0 L( s P( |) V$ o
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; z* c- ^& y5 ?1 B% V
}
3 T7 k3 k, n& cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 W4 d8 Y" u) o4 p3 E; Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! @ P, P8 C; I8 N. c& D+ }
m_wndMenu.SetFocus();2 S8 f# j D, ]% A# K5 n+ e
}
- i# k1 b4 I" T, C------------------------------------------------------------------------------------------------------------
0 z# H0 }. {3 h5 n" ^/ z0 k*************************4 @) q D% t& y/ l8 X$ w
WndField.h文件; E' W/ N. Z8 Q5 |) q0 |
*************************% R! K+ h! C# q6 Y' Q" X u6 S
搜索:BOOL m_bReport;# a! s' n% I& s& ?/ q% l: {0 W
其后添加:
4 |% R; K2 M7 U" ?6 x2 HCWndMenu m_wndMenu;
4 B# ~2 g; O! b/ L$ z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 K& N1 _* i; z2 W* e
其后添加:1 _! k8 u& g; b ^/ w1 V
virtual void OnRButtonUp(UINT nFlags, CPoint point);
% e% o' R* T7 P7 O5 ~# t: H9 \. n/ ? k' q8 X, T: x& o7 O: a L
. A4 K) x! u$ I- C$ [ |
|