|
|
源文件中_Interface文件夹下WndField.cpp文件
' d1 p4 S( C) U6 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 r/ K" I7 P7 J2 F# _( C$ u" J1 g: C( q
4 @* I! v) \8 T. P" Gstruct sItem
( Z: j. r) V$ [- N) ^2 Y{: |! Y7 s8 s+ F
DWORD dwId;2 r+ i: J+ m9 M' ^2 d" ?
DWORD dwKind2;
$ K$ x; ]* D& C$ F# ?& eDWORD dwItemId;. W4 \7 A' r( C# n
BYTE nIndex;
7 y6 U& U f# F0 J* _sItem(){ s% w5 Z5 T4 X" w) J7 [
dwId = dwKind2 = dwItemId = nIndex = 0;! l* q2 r6 {7 }! ^! M$ j
}
$ I1 m Z$ z, c) Dbool operator < (const sItem p2)" q: n4 f2 y. Q5 e1 u7 H- y
{) A; g/ N* A0 u$ ]4 W
if (dwKind2 == p2.dwKind2)6 v5 J$ @/ z: a5 F2 [* O
{
6 }- J( r) p! D! G! W- c j return dwItemId < p2.dwItemId;, V4 I' O6 L. A
}else{
3 v* F( R, u0 Z return dwKind2 < p2.dwKind2;3 n+ @. c+ U' r3 j
}
$ A4 ]" ~& |, W}( S- M* K) C0 M& {& Y
};7 X+ x1 i- [3 n( @) Q/ F# ^
class CInventorySort3 E7 T1 [( {0 J v, A# J. }
{7 q* \4 l7 {3 ]
public:
" l5 Y* N5 G+ U" }+ o2 {6 @2 tCInventorySort()6 d5 Y' n# k, m% d! }
{9 P+ Q* @: i$ H8 k2 s
m_dwPos = 0;) X# y# O6 ?+ Z
}, p/ o1 o* a4 @; w
~CInventorySort(){}4 N5 V' r; d# N9 S
private:! s8 H7 m' C) i0 d% L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; ]9 e ~& u* B3 P) K$ |3 S
DWORD m_dwPos;
- V0 s8 N3 n; h1 \/ B) rpublic:
: I$ S+ J1 Q# H, X; [8 G' M, s1 Mvoid Add(BYTE nIndex)
' X% M% Q$ a) C; F: ~{
( H! a0 z- }; a# t if (m_dwPos >= MAX_INVENTORY)
, k% N4 _- F- ]0 H% u; m5 E! I {- G7 ?9 R6 o- x* q6 m1 M
return;- L: M: W& {% V( g9 [
}, y/ S: A7 Q% M; N$ G/ y
m_Item[m_dwPos].nIndex = nIndex;
6 J: H E# k, R' l4 O: x( \ m_Item[m_dwPos].dwId = m_dwPos;
; O, q5 H$ \- E; [( o! F m_dwPos++;! w5 j# |+ F* A" D# B0 c7 u
}$ s4 X, u% {( w3 @8 s8 R6 D9 F: Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; Q" y1 e; g( N3 t5 w6 ]2 C
{
, a6 a/ a I& I0 O1 G for (int i=0;i<MAX_INVENTORY;i++)
g+ t. f2 [4 V" A% f" l5 ?' F; U/ S {/ p k2 F7 }) b4 [2 ^; Y
if (m_Item.dwId == dwId)) p7 [* T H5 ~. w
{
- P6 V: {* b4 W( T return m_Item.nIndex;
: @5 h5 C' F0 H1 U5 w }1 G7 y6 n/ U8 e/ T8 h K
}
+ |: ?. ^* ^) Q0 D, }# @2 i return 255;
$ O A' U" |+ l}
& h9 a, {* o7 ^9 B% f" ]4 d5 ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& T- @9 Q1 j1 \0 |
{; v8 J; v/ Q* ? x
BYTE nTmp = 0;
& g# E. @% |4 c* U3 V( [ bool bDest = false,bSrc = false;
8 p. \, x9 ?! Q' a: P for (int i=0;i<MAX_INVENTORY;i++)
: P2 u( e9 l4 B0 w3 Q6 `6 M; F. s {* q$ R. H+ c. n3 ]- _
if (dwSrcId == m_Item.dwId)
" F! A1 s! ]2 m {4 x2 C( S7 A- V o% ]5 ^
//id相等 则 改变对应的dest和src$ a3 m4 f) h( `4 b2 _
nTmp = m_Item.nIndex;
- ^* Q- \* w! l6 g0 k- ? m_Item.nIndex = dest;6 s, K- P" ?- B. G/ M( h
}; B+ X) ]8 ]) V8 o
}/ s$ X) b* {* D9 l
//临时数据保存完毕,交换开始
+ G, u" w0 D4 q! @' B: V2 {! ` for (int i=0;i<MAX_INVENTORY;i++), Z. f! ^' n3 `0 d8 r# Q
{
: g3 k) u- f; q7 o1 r6 J if (dest == m_Item.nIndex)
4 k2 f! Y7 c- G$ n& L% \! ~ {3 w! y* o/ m, x" m, q
//id相等 则 改变对应的dest和src5 t4 _" e% K5 z/ _$ P
m_Item.nIndex = nTmp;
: U% W O9 V$ v }6 x) I! @8 B/ q& Q$ d1 w E+ M: A
}
& `# n, l) l; m+ h# l3 K6 I}
. X: c7 e; @; a5 \};
. ?) x7 Z3 e$ Y+ B- ^/ q# D1 }* X0 \, T-------------------------------------------------------------------------, \7 O. J/ [# E: L/ x, N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 N/ U) _9 Q0 l7 `
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ B3 M! M( W# i) t, B; o紧靠其上添加:
5 y5 x0 \$ i4 C9 P% y) hif( pWndBase == &m_wndMenu )( I7 L/ m5 `1 Z
{
/ j8 V& q& I4 o. h1 Y% T switch( nID )& u8 ^; f8 z S% \( p% [* z; N5 ^( e
{* M1 |5 \, h. j8 u/ T0 R
case 2:
! S* k9 \7 ]* K/ l" h {' `/ G4 c# q H5 @3 O. c# }. B& ]
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- i7 l. P( L/ e5 P; e if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' H! H! p" w; Q% Q, A! V" }8 q3 U {
4 s3 e1 u7 Q5 Q7 } break;
; h. J' t/ |0 U% L( u1 r; _0 t }
! a7 V' x+ \: k$ y( Z: ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% f- Q) m& V8 k& b7 {1 A& f {9 z+ Y/ W4 R; z: y: h9 Y% D. u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 ^' V$ V* _7 ^; p1 c0 y
if( !pItemElem )9 f* f" _7 N% e- \7 o3 J
continue;
+ @8 U" V7 D$ h7 N+ I if(pItemElem->GetExtra() > 0)& i; F. C% q% ~% z! n
continue;' L$ T: f; @2 F; m6 Z! N+ c% Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + }) K8 \1 C, z4 y3 C3 S0 N) z
continue;
' t1 o% X+ k/ r! O) k* \ if( g_pPlayer->IsUsing( pItemElem ) )7 _3 d6 a# F: k R$ {; @
continue;
" e$ j: B, s0 S2 [% ^. P if( pItemElem->IsUndestructable() == TRUE )2 s/ |0 O4 ]4 v) s/ D
{ w# \2 l- S1 O/ s9 K! v! D: |# z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" l+ N) f( u a# H- L1 J continue;
+ U0 u$ c5 ^; L+ I4 G6 I }8 H. h8 [. f* I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; R, P; H' T9 _) L: Q }0 ^( _, j7 G2 X" D$ ^
break;
# \) E/ R, u7 A }6 s/ J, H* I* V4 E g. d
case 1:
]3 M# v R: a" [1 W {- }9 K( M% ~6 M; G
//整理背包, J. e1 q7 c, Z/ t5 z& C% O
//////////////////////////////////////////////////////////////////////////6 }+ a6 ^' S w- n5 i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* ^8 H2 ]; Y* w) }
//////////////////////////////////////////////////////////////////////////
3 W) }5 s; J5 N: Y0 j //////////////////////////////////////////////////////////////////////////: G1 b1 r; x& l( B) I" V- U
CInventorySort* pInvSort = new CInventorySort;
! h% K- l2 W, K9 a5 o vector <sItem> vItem;
0 D2 O- P3 P( k8 v: F8 V vItem.resize(MAX_INVENTORY);//初始化大小7 l3 |; G1 e# ]! {5 }3 `
//////////////////////////////////////////////////////////////////////////! C* e! z; s/ Q& N' \4 u
//填充数据
0 h5 h/ a9 R; |) x# Y' H for (int i=0;i<MAX_INVENTORY;i++)
3 p% S0 Y' c+ ~2 [7 W9 d. W {3 {7 b" o3 J! ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" v( `! h% J' Y% p if (!pItemElem)5 g# s9 Z/ }2 [
{
6 {. p: \" W0 j: K: s" b vItem.dwKind2 = 0xffffffff;
, K& D8 Y" `7 |! ]5 `/ M: C vItem.dwItemId = 0xffffffff;
0 b M9 ]9 Y5 |( h vItem.nIndex = i;4 O6 Z+ e" R3 G( `
}else {
1 `' o# X+ i6 F% ]/ x ItemProp* pProp = pItemElem->GetProp();
1 a0 X% ]: ^* k! @8 a* x6 R vItem.dwKind2 = pProp->dwItemKind2;
, ]! _9 u) y" Y& j5 b; { vItem.dwItemId = pItemElem->m_dwItemId;
* b, c) a0 _% ^2 m8 T vItem.nIndex = i;
6 l7 e8 j0 D9 | }& R5 [& e2 O. L& [' W) ~
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ y7 L2 v9 D2 i4 l: f' b }
4 o0 g* x0 A8 K //////////////////////////////////////////////////////////////////////////
) P W$ ~* m# P6 o( A8 y/ S6 f7 | sort(vItem.begin(),vItem.end());//排序. p/ B/ A- `6 L. r+ ^' H' A/ b* S
//////////////////////////////////////////////////////////////////////////
" V) S: p/ u, l1 \ @0 [ //交换+ E9 ~4 F, ?% o: m; {1 ?- a8 y
for (size_t i=0;i<vItem.size();i++)8 h: \* H9 k4 a+ G1 E
{
4 H. u3 Q. _$ B) N, ]! _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( }6 h% L2 P' g& C, @% f2 k' O
pInvSort->Add(vItem.nIndex);( a- U4 k o: u- |$ Y* e; h
}0 b& B1 Y4 [ K7 l8 `5 _
BYTE nDestPos = 0;# n) Z6 H$ ] A
for (int i=0;i<MAX_INVENTORY;i++)
! ?2 s7 }* A) g2 f( S {
- \- ?9 K- W1 S- P& F! A, S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 @$ {9 K* y9 C if (pItemElem)
/ q& l2 N3 U7 v* x% I( ]( p* t% j {( u5 v* } N$ r( k
if (IsUsingItem(pItemElem))
5 c5 j, q$ R. e7 q0 G. R W/ j+ l% T {
g0 f0 k$ T; \) U" r //这个位置无法放
7 D0 J1 X2 Q9 Q( @$ a& O nDestPos++;
' m4 f# F8 `9 K- Y6 L }2 V$ J( g; x, T5 Q: x
}+ M% @% O+ W3 M5 Y2 F( l
BYTE nSrc = pInvSort->GetItemSrc(i);
, N0 c+ ]) {9 ^ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. W8 q" F) k- K, F if (pItemElem)9 ?+ Z V0 ` Y8 Y ~8 h2 `
{
, }: {: ?8 ~: v6 l* V# q if (IsUsingItem(pItemElem))
2 k! I$ y, |$ m# b7 G! F {+ U( _7 a" p5 \
//这个道具无法移动,跳过: i/ p! w/ t! z: i: s% r" V$ N
continue;
0 e$ I$ [9 H" ~0 T. O }
* T; [ \3 G2 g* Y' m6 j1 q7 n) P! Z }else{
b9 r% y6 t7 a f //空位置 不用动
. L1 P- d' V$ l+ g- ]. L+ Z continue;
- [+ i- m2 @* l6 x }
! m* D$ k( u2 S4 \/ N7 h //////////////////////////////////////////////////////////////////////////" e1 @+ f: r- b% Y1 q( P% U3 {
//开始移动0 {: k- Q5 y0 @& ~: Y- O* V- N
if (nSrc == nDestPos)6 p- a+ [5 f/ ~
{9 g& q5 ]0 b/ i7 k
//原地不动2 ]: [- M F9 j- Q. i9 r
nDestPos++;
9 g- c2 g3 ~; a" A' C- g k continue;
5 |1 w( j7 C, D- a5 v% \! R# a }; U7 z8 F4 F8 O2 [0 N# F+ F$ \
pInvSort->MoveItem(i,nDestPos);
" j4 H# g' l- I" W2 d1 H( ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);, V5 s+ ~6 R1 p" H' }
Sleep(5);
. | ~9 l3 }( ]2 } //Error("移动 - %d->%d",nSrc,nDestPos);: H( b0 w% g( W7 I
nDestPos++; G+ e7 Q+ @3 \# t4 y
}
2 v( a3 q @( K4 P9 r3 k& r //取第一个元素的信息8 k3 K& d$ ^* N+ l E
/*$ i+ w& `. b! j4 O9 B# D
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ A4 D# B9 l Z2 P2 l
{
7 S# ^3 P: K7 B& I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 E% G F8 g; k6 |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) ]$ \" u( Z4 L+ S2 h1 T
}) ~" r# m% ~% H. S$ l3 ~0 S2 V
*/
# f% D8 N* i# ^8 ?3 L# V //////////////////////////////////////////////////////////////////////////
3 A: l) i" T& X# K( s4 d break;
% ]0 q. X: b* k r9 G }5 |8 v/ x$ d, h% l* u8 [3 ]( P2 K
} ' W" W; L4 f5 d, C
}) ?" ?8 o2 J# `0 K- E E2 c
m_wndMenu.SetVisible(FALSE);
3 S: T3 J2 f5 d; ^
1 L, O5 D/ N5 z, R' y; \: q--------------------------------------------------------------------------------------------------------
# F* R0 K. S" f. R; y3 M' t& r7 {8 P: h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- K% m3 z K* O
{
8 u0 N9 d/ K- S6 Z5 R( ZBaseMouseCursor();
3 W+ j6 M# ^& ~* c m- c) y}5 k7 P; ~5 S0 U2 ^8 G3 r5 _9 o5 G
在其下添加:, t1 W* s1 s4 T4 Z/ ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 n$ L- U+ r. g( q3 t* O# Y s
{ \! e% L0 y- _+ _4 f$ u1 M" e$ U9 ]
m_wndMenu.DeleteAllMenu();
9 I8 E5 r+ y& l& G5 J( Am_wndMenu.CreateMenu(this);
& G# E1 [4 w6 e1 v+ C; I/ hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" y- t7 y+ J" ]
, ^1 z' ?- X7 A6 F3 }1 jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& u. D* q2 n& P2 W{
5 Q" J2 G& d/ N O. J- @" L //P以上级别才可以删除所有道具
7 M. l& `5 g- T z- O m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. L" B6 Y M) U. H! U}
5 h( v/ \6 ?& q4 _2 F! L8 mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 L: t3 M- U! i5 L1 x6 |
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ D( V$ R& f0 L4 x( w M' j# K
m_wndMenu.SetFocus();
9 Y& l9 }) k( E8 ]$ K, c; z! Q5 _9 D! I}
. l/ I$ B5 o# D------------------------------------------------------------------------------------------------------------
; P4 c' c& `: u% X0 k- O) G*************************
4 W% V5 q) _- m. B6 V4 FWndField.h文件. X+ P0 z; v+ y
*************************
2 T3 Y* z/ w7 n: N% E搜索:BOOL m_bReport;8 b% K \2 Z7 g0 k) B$ R: G
其后添加:
! D" Y& ~; L$ N/ Y* O" t. ^7 l# WCWndMenu m_wndMenu;: _$ a" x- X% q" J
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' [9 W- Q# a1 j: a0 t( {; t( z% u( n其后添加:
# w4 E' D$ N) p$ X7 \% y/ M: Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);# i& x; ^& ?7 J( W& L
# @7 W; o! W5 A1 Z5 B+ y5 I8 d
) f" G3 ^& K8 P' f) d
|
|