|
|
源文件中_Interface文件夹下WndField.cpp文件
) d2 x& B# I7 R, w+ N3 M' w搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( h) ^2 @$ k/ O# \3 _& H& [
, w2 e( L3 o1 ]6 R4 L& lstruct sItem
0 m; l9 C$ s1 v' j, f$ S" b( w# I{
0 a! _- t9 j( p6 R' D# S0 @& CDWORD dwId;
& F* T$ w! Q7 H( }DWORD dwKind2;
2 k1 l2 Z$ V, C! a0 n/ [7 CDWORD dwItemId;; m$ d7 U4 A! v/ a
BYTE nIndex;& a" e- ~; R& c' J3 `! p
sItem(){
. \# P( i0 y3 R# s6 W dwId = dwKind2 = dwItemId = nIndex = 0;/ c' Z( P' p5 q8 Z h; [2 w2 D7 ] a
}
. g* g; R, R/ ebool operator < (const sItem p2). P. ?& A) D! g+ P
{
" `; O P: z; ^4 N0 J if (dwKind2 == p2.dwKind2)
* V% Z6 _) k3 S. F {% e# O4 m0 f/ q! s, e; g/ N
return dwItemId < p2.dwItemId;
7 w$ D1 E& o1 ^- ?3 S }else{/ i* m' H+ T5 v |* `/ S x
return dwKind2 < p2.dwKind2;
: A4 k4 h& q% G3 T: x u) i' R }
6 _ J" R" V! E, B9 D& s/ X}1 t8 n2 X1 p$ i( `
};
. p& h2 ]- \- d- `) Hclass CInventorySort
- D1 E' s F9 G; c& U{
& M- h4 [, `0 I1 M7 Epublic:- Q# ]) c, S, Z+ S" W9 I# i
CInventorySort()
$ y' o# g3 x( G, y3 L* D& ^6 r{; P! v- W2 J+ C2 X! A
m_dwPos = 0;5 M. K/ |1 u3 E% _
}
A/ i$ r9 i0 A& F2 U$ A/ |% E, P~CInventorySort(){}
# \. P E: u+ n1 D* s' k$ Rprivate:
2 Z5 c T- Q. L+ r& D3 xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) z5 N. q0 B: J: |; u" j
DWORD m_dwPos;& V& l3 Q! e' Y1 x+ H# J
public:2 X# c8 x/ j; w
void Add(BYTE nIndex)! b; A! p5 p5 @7 x* u
{' B' p1 y5 D' l
if (m_dwPos >= MAX_INVENTORY)
+ T2 Y5 j% ]5 o8 m; e3 q {
- q9 W# a) a- P' H2 { return;0 n+ g6 B3 z ~8 y8 {2 i1 }+ ^+ ^
}
4 Y+ I$ D4 F' W1 {( E1 V m_Item[m_dwPos].nIndex = nIndex;
* I3 r/ _& m& E) w m_Item[m_dwPos].dwId = m_dwPos;9 B r; `. ]8 g
m_dwPos++;
& o1 p+ @3 C6 ]8 s}( U/ A: N9 ?& t5 M1 d% U: l
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- K: u; i1 G# |
{# a6 s! S8 X- s
for (int i=0;i<MAX_INVENTORY;i++)% {3 W V' ?: C% a" Q7 r
{: {% V1 g+ Y; Q4 q9 R( q: Q3 i
if (m_Item.dwId == dwId)
, M3 D, m' t( Q9 w1 f4 ] {
* i# E, f& n3 i9 |! Y return m_Item.nIndex;1 C) p( o, g+ @2 g# E
}
- G$ H% a- f2 q' k/ F) _& @; Y! F }
% r8 ?8 ]( J; I5 c return 255;
* A/ M; l7 X/ }# r, y0 M}
7 T, g4 \5 @5 J7 X) avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: {8 O- ~6 T0 V7 Z: G. ]
{. _- {& D, m# A8 J. s% r
BYTE nTmp = 0;# z) x9 c% N" d8 [* R$ Z
bool bDest = false,bSrc = false;6 C6 A/ j8 ~( w$ {* {; j: Q
for (int i=0;i<MAX_INVENTORY;i++)8 }, c4 r& J5 ]
{6 j, F: s9 c1 d5 S8 q
if (dwSrcId == m_Item.dwId)
- s+ t. H0 M8 s" P% y {' C8 i0 q2 {- D4 C
//id相等 则 改变对应的dest和src
" M; W9 p3 E" s) N" U6 S nTmp = m_Item.nIndex;- r0 k @# k9 J
m_Item.nIndex = dest;+ N1 u; A* W+ q) j( S( d
} r' g/ i' r: B& j$ ]
}
% [5 d4 `7 z& X1 K0 g7 ]' w( N //临时数据保存完毕,交换开始2 t2 y- ]5 T" H7 g1 \% e
for (int i=0;i<MAX_INVENTORY;i++)3 b, X q# ]$ `( }8 l# N
{- p. _/ F# Y6 _1 v' v
if (dest == m_Item.nIndex)8 [. R) y) O* s& V2 [ d
{+ i3 i5 @3 ~& F( v- g
//id相等 则 改变对应的dest和src# v7 U/ `* J* O- ?8 M
m_Item.nIndex = nTmp;
# t1 a$ Z! ?" f3 V* W }! h2 c/ h6 R) d5 S! I/ H: S3 y* V
}1 s' C( G# Y; s+ X
}
. ~! N% Q& r/ Q8 H};
& n2 D5 j3 ~. u+ {) q-------------------------------------------------------------------------
9 P( u* s5 N& A: v: X& e依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: | P' D5 ^ V5 N0 j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 L2 j" E, P7 t) n+ K紧靠其上添加:
' _9 t) k% Y1 G' T3 O) wif( pWndBase == &m_wndMenu )
- F- }% E4 Q% ]9 Z{2 S5 U( J A3 A6 H. s
switch( nID )# |3 l* C2 H. R! E$ ]) A. |/ w
{" l/ C# J# E/ N0 i' a. s c
case 2:
! z0 A2 I7 i- J) g2 N1 W {- |5 Q7 d3 k7 r) Z# ]5 \
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! T" [( R1 m: v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 m/ I" D- m# z" P7 T! H3 }; b- _ {7 C8 w- U0 C- L0 n
break;. Z+ D5 o; m& [" e% H4 w- {& B' d
}
& Z! D: s: \! f3 |* z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ J. r) X' a7 J$ z+ q5 }; O. p- f {
: g3 Z( Z; v* {1 L: w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ ^- K$ `4 \; |$ V8 L if( !pItemElem ), Y0 D0 ]% s2 m# O0 n: b9 u* i; V( |
continue;1 ~' E! s4 |" u! f4 f D7 O
if(pItemElem->GetExtra() > 0)
: g9 A0 n% H1 ], S& t% R' \' m continue;, w# F+ c8 P% u) k* i) Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / U, V' g7 d) C) i4 k' b; Z1 |/ k5 i
continue;
) E! V9 X4 Q" [! L3 h8 w if( g_pPlayer->IsUsing( pItemElem ) )7 P% A* [- K" |5 y. |
continue;" q# |9 |# q7 d( V6 m0 }& y3 \" b
if( pItemElem->IsUndestructable() == TRUE )
2 Z# p( R! f8 j4 w. \" w; h5 }( P {
5 X' X& {5 L3 F) J6 E g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 {' W% W6 ?1 M% J/ _5 c continue;
8 o" d* Z% ?! D& s- a }$ y' W8 S2 f" [' L: y. J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, l1 r$ Z0 h8 X+ P }
9 J% J( F5 j+ j9 t break;: D! I; h. v& [& r6 v9 B- `% R
}9 {2 i8 Z0 G/ e0 [* y. Q6 W
case 1:
, u. Q$ x( {* e/ f4 g {
' } e" C0 ]! `' y //整理背包! z, {+ [: D- N M1 T: f; n
//////////////////////////////////////////////////////////////////////////* Q$ Y# j/ g+ S9 s
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 F! U2 @: ]9 K% t P
//////////////////////////////////////////////////////////////////////////8 P9 D7 }0 B( K
//////////////////////////////////////////////////////////////////////////
+ Y% R8 E9 Q/ j" P9 B CInventorySort* pInvSort = new CInventorySort;6 V6 s$ j1 s7 E f8 l
vector <sItem> vItem;
5 S* U" Q! F7 o/ Z! Z! | vItem.resize(MAX_INVENTORY);//初始化大小/ q1 _" s3 ` K% W9 Y. h% @7 s# X
/////////////////////////////////////////////////////////////////////////// T1 w2 E! [1 f& v Y
//填充数据
7 \/ u5 F! g2 f* U for (int i=0;i<MAX_INVENTORY;i++)
: [7 n2 O4 r5 H# v* A {
+ ?/ \# P' t9 k; H! n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ q9 v3 X) X; N: n ?
if (!pItemElem)# @3 ~: S4 e& i: M
{# \% D; P- |6 o2 \+ U" ~$ F# T7 W
vItem.dwKind2 = 0xffffffff;
b4 t0 m" o/ Z* v2 j vItem.dwItemId = 0xffffffff;
2 k; D. h$ W2 I* p6 H vItem.nIndex = i;
3 x0 i% w5 }$ k. | }else {3 A8 ] |8 b) j: u, z
ItemProp* pProp = pItemElem->GetProp();
; p) x% c6 j X- k% k5 ? vItem.dwKind2 = pProp->dwItemKind2;
7 f/ ^- A% \8 y0 N. ?& G vItem.dwItemId = pItemElem->m_dwItemId;% v1 x) [! v! p
vItem.nIndex = i;
+ N' h: X5 |4 R) l3 N4 L7 I }$ T i" w& J& a# o, m
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ [+ _ w# X1 _! a2 x8 G; I }! u% G5 u! L1 w3 f
//////////////////////////////////////////////////////////////////////////. q. w# `2 W& [+ M: F' n% o, z y
sort(vItem.begin(),vItem.end());//排序! p1 D; w/ v( s
//////////////////////////////////////////////////////////////////////////
. m( O! v( `& g& s2 r, ~ //交换 i0 T& Z5 a7 N( g2 t
for (size_t i=0;i<vItem.size();i++)
! L( f, v0 \- v: [$ P- x' ? {( R9 l2 N3 V' k( q4 D/ y4 b, _
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 m+ t }6 u/ T pInvSort->Add(vItem.nIndex);1 a4 @$ s7 C |) j
}
) P) @4 k7 c+ ]0 Q" Q5 w, a BYTE nDestPos = 0;0 ?( S( y A7 C- z, A5 z1 f9 X
for (int i=0;i<MAX_INVENTORY;i++)
7 D4 \4 ~# g. g; h {
$ _+ O. [9 D4 q- A% |! h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" o4 a3 P0 o1 o2 b1 V: x) p
if (pItemElem): Q" Q9 @* G& b# }7 N5 M
{
$ m2 N, W- @; `0 L' ` if (IsUsingItem(pItemElem))
; |$ S* ?* ~3 v2 h {# I: }/ L' Y& ~0 ^
//这个位置无法放) Q [2 ]7 P" ?; b
nDestPos++;. i! }; i/ X5 U5 C9 R y5 Z
}
& B, r1 D4 D/ V/ I }& j$ U- g0 H& T8 i( R
BYTE nSrc = pInvSort->GetItemSrc(i);; g) \7 X& [) P5 I
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ \* M7 s1 C/ Z& J% \$ j+ d7 W if (pItemElem)
+ C4 a- s+ z2 i3 w5 e7 a {
+ E' P$ z5 b/ y" K& [( A* r. Q9 q6 i if (IsUsingItem(pItemElem))
9 v8 `, Q" M1 G. x/ X! m {. W8 r2 Q- t8 H6 y" L# V# z7 `
//这个道具无法移动,跳过
( T ]' q( i- K) J4 j, v4 X8 W8 \ continue; [* Z# B2 w5 u1 v1 B
}
+ r4 [8 D( C% V6 R9 a2 V( o; K }else{
1 |6 e, O/ K+ l% g' [ //空位置 不用动0 U) d0 k/ E8 |2 [ U* D9 o" I
continue;
' i$ c3 G" u5 h" _- o# G }2 x N; P, E- i( o" P2 E& C
//////////////////////////////////////////////////////////////////////////
+ c# u: q1 w( \% @, V //开始移动
* H- u' h9 b" \$ H8 _( t if (nSrc == nDestPos)
2 H* D9 n$ N( f: m8 k% @7 R* j {% e O& ~1 G" j9 ?& F1 H/ V
//原地不动
) z' l0 O; r+ _( b$ y& H nDestPos++;
1 Y! t1 @- d" } x ]" g) I8 ]; d/ k7 K continue;
+ \9 w; A6 ]' x$ q( R, ~ }
% m1 }4 H9 Y6 E pInvSort->MoveItem(i,nDestPos);% F9 s& I) }' i( d
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& ] [; \* J) W* t" h c: ?8 h. `: L Sleep(5);/ A4 I8 Z6 v/ z
//Error("移动 - %d->%d",nSrc,nDestPos);
* ~& e5 ]( C% o7 N }" p% o nDestPos++; Y/ [7 B0 O* z7 e& B& |
}
1 S& ?) F: D$ ^4 A //取第一个元素的信息& v9 D" r6 T5 [. \9 V
/*, u# L! Z5 C( Y7 E9 Z% H
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 l2 j5 ^+ `- e0 h' M6 U' I8 L {
; e2 C4 U8 H* ?0 x5 M) x Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( X1 R4 S; W3 Z. N# h- l g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) W& t2 v) A: |" Y9 U
}
/ |7 ~( v- q( @# a */
. X( ] { {. x+ ~- J2 n //////////////////////////////////////////////////////////////////////////6 G" U+ h- h s& n! O
break;/ J% T; z; j. H3 G @
}
j$ t H, x& G$ ]2 I } " T- O& {3 x+ @4 a' |0 A8 I* w; y+ a4 t
}- _+ U1 G8 Q- l0 J
m_wndMenu.SetVisible(FALSE);
" j0 `0 Y4 j5 }$ `# [ L& R6 d1 r a" o6 X$ N) j b3 F3 @. O. W
--------------------------------------------------------------------------------------------------------: t* j, u: D9 {8 Q4 r7 Y7 d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. P. a3 v H9 z1 f8 L2 h{
, a! b }% w0 [& u4 WBaseMouseCursor();
6 [) ^: r O0 s+ } }}, z4 x; V: u* \
在其下添加:% J7 p7 d5 T* P* D- @6 p
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! B" l" F+ \- ]/ I6 y
{
/ q1 r9 f/ V. k8 I" _m_wndMenu.DeleteAllMenu();
* P4 K% X3 n9 K* [+ f0 Z7 d( b1 S8 H( om_wndMenu.CreateMenu(this);8 n L9 u/ i1 E( h6 M6 n
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 q% m% a% ]2 \! p( A
& w9 B% \* S( |! m7 p; pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- q9 C# S1 o' {4 i+ E" j, X{: Z7 [: {) g x6 }# j- h) o$ ]& c; @
//P以上级别才可以删除所有道具
4 ^/ m5 z `# R' A+ g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ Y( I& L( l% R1 X
}
$ {7 o- W4 m, J& E% Y+ f1 dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 x: ~" W3 F% E
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 J3 w6 [" B0 j% r1 t$ ?m_wndMenu.SetFocus();
& V9 }* I; M( M1 Z! u* F}3 u4 v7 l* i# J9 ^) r
------------------------------------------------------------------------------------------------------------" _3 c& n& W9 W- O! x \- O- d% Q
*************************
5 S3 N' j3 m5 E4 Y" R: l. t( iWndField.h文件& w8 {9 G9 e4 O- y0 k! D
*************************5 g/ y) E) K9 l, g# @6 j
搜索:BOOL m_bReport;
2 ^# \5 B* c+ W4 w4 B其后添加:! v3 h* {' l9 b$ U# R) K
CWndMenu m_wndMenu;
I+ z. _# U5 f; L( m E7 J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 F( j; L4 | a, J b其后添加:! n! Y5 P" @ p' D3 F
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 I' b+ y6 V$ j/ y( s
6 N( `4 _6 f) Y! @/ @
4 t: j" u' p5 z9 r
|
|