|
|
源文件中_Interface文件夹下WndField.cpp文件
- _' r" R E/ j' \7 n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! B1 \) O1 i, N+ Q: z
" G. `" {! H$ a7 _% L+ R/ i; i
struct sItem! I. D$ ~: q5 W/ R$ y
{4 d0 u+ K+ @6 X D4 \0 }
DWORD dwId;
; N& O; P2 K0 @9 u: B) P2 IDWORD dwKind2;+ L r2 E# p" S8 j6 H1 v% k
DWORD dwItemId;
5 c- ]5 Y0 M3 pBYTE nIndex;
2 N, l/ C* P' |" {0 D2 msItem(){
- U9 E0 M1 ]3 l. ` dwId = dwKind2 = dwItemId = nIndex = 0;
" L. g0 ~! i3 F3 v/ V}
% d) N4 q2 ]' F3 p! _5 ^4 _1 Hbool operator < (const sItem p2)
8 W- f! N9 _7 J# v7 u4 y8 F3 Q; }{: T/ V8 q j- J% h
if (dwKind2 == p2.dwKind2)) X. A* P. Q: k2 N
{; N, P" H8 T/ W/ {% y
return dwItemId < p2.dwItemId;
2 I$ O; w" g7 F% i# e }else{' W' f* W5 e# O$ Y( e |( M( E
return dwKind2 < p2.dwKind2;) U! r2 |+ V) q* z f
}
6 c7 Z q2 C* `7 q* |, o4 g6 Q}
. @# p( J2 h6 U5 s( i9 k};
" x% w4 Y2 Z& i. e* u) o% Bclass CInventorySort
: p1 @3 R. n P3 p% k: z4 I{8 T1 l7 z$ T1 y! x4 I' b
public:' |- B2 [0 T# }& ]
CInventorySort()/ W2 R* @" |9 ]- K4 o/ a h5 f, z' X
{
. p: y& n" v3 W0 } m_dwPos = 0;
% E' q3 m+ V! p2 a3 _( |}0 i+ [1 Y9 r7 s: X
~CInventorySort(){}
4 ?; }+ ?& Z+ x$ b8 J2 c, V$ ~1 Dprivate:. S4 N0 J) _6 c/ x( m* d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; H9 r! Z0 h6 H. b* UDWORD m_dwPos;$ M1 e- b3 b" n( B! Z
public:
' P W/ u$ Q, N8 h+ \void Add(BYTE nIndex)1 Y2 |. E) ^. V) i( ]5 ^
{
2 g7 Z: r, p; g! y if (m_dwPos >= MAX_INVENTORY)9 x! z! b: y* V( S. j) M
{$ s' C C, q" n# P
return;( l. A! y5 B0 ?5 q: X m* Z3 |4 R
}
8 L% A8 N1 A& g6 n' D m_Item[m_dwPos].nIndex = nIndex;9 H# ]; s: J! q- h
m_Item[m_dwPos].dwId = m_dwPos;6 j" t7 L' K8 Z+ j
m_dwPos++;
* M" U! D" K" U/ p6 w}0 H; e! q/ ^. |. t* m: `/ h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 g+ A& j" r* A! x0 w/ g
{. U( \7 ^9 d9 \3 e: ~
for (int i=0;i<MAX_INVENTORY;i++), h8 D! y X! ]* }6 H. ]! Z
{* s8 o- I! i4 j; `6 V; K7 {& p& o
if (m_Item.dwId == dwId)
/ z4 M$ z- U# h! r3 i {' ]& S. D- s9 [# F* F: W; g2 Q
return m_Item.nIndex;
1 ?5 J+ s" Z- g }
! J7 a; f# o) y% Q4 t. @ }
6 a+ Y7 G, p Y2 U l return 255;4 N) n1 N' S$ Z( X$ \0 X& D& i
}
# X$ i1 N( S5 U) J2 T) @+ nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. r9 I+ ]6 M% A: d& V* i. k$ x
{
3 O6 I% U6 M. N( U BYTE nTmp = 0;
( P+ U1 j2 B2 k. r$ |! j5 M0 O bool bDest = false,bSrc = false;9 L5 C# j% b4 J, Q7 Q* w
for (int i=0;i<MAX_INVENTORY;i++)
/ t! O i3 U+ @* t/ i4 k {2 r, A6 m: I, ?. w1 l1 J% i1 S
if (dwSrcId == m_Item.dwId)
- S1 }/ l; O3 { {
2 B$ {6 l* q2 R4 W/ H //id相等 则 改变对应的dest和src
" A% F7 |- }7 [! S2 Y1 s* \( h nTmp = m_Item.nIndex;
8 N% ~6 a/ Y7 Q6 e8 f m_Item.nIndex = dest;1 D# n8 v: |4 n/ N
}
& |* Y4 ~6 R+ V1 v2 K6 P7 v1 S }
; ?0 V( N1 H8 y- _/ a! b+ ^. _( W1 a //临时数据保存完毕,交换开始 @% e; f( ?1 h0 z; H
for (int i=0;i<MAX_INVENTORY;i++)% |2 ~$ ~2 X0 d
{+ s2 j. j' N, S& @) J7 S% l
if (dest == m_Item.nIndex)
% N( |% T, [, Z7 | {0 _/ c; U/ Z% }) q% s; ]
//id相等 则 改变对应的dest和src
/ k( K/ U U5 X m_Item.nIndex = nTmp;( {6 C9 ~6 p# u' M- z
}) a6 S% U) q# ~" Q5 Q& l
}
+ [/ B" w; {# N B6 P. D+ F# n0 |}
( d# q: |0 \" i5 q* u. N0 x! }};8 d9 @' c) `9 L1 D
-------------------------------------------------------------------------' `7 A* W! V4 o1 w2 C3 B* }6 T! T
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 A' O) x1 G' K& C& Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; m6 j4 B- }( ]
紧靠其上添加:
- s# i/ X2 `+ y+ S" N4 Tif( pWndBase == &m_wndMenu )
8 z! O& Q- D& `) L& c' H, e; C$ M{8 i# u& \! `/ |7 R
switch( nID )# V+ D9 v5 S/ E& a5 ~+ @9 x
{
8 x. b- w c8 A: S: |& Y: W case 2:2 j4 }4 d$ w! V* c/ [0 b' p4 t
{1 X6 C. Q q/ k. n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 M D; u: G% I9 x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 O' H$ a/ `; N9 b& r& Z! Z/ \ {
5 Z; m7 y2 l. t& k6 R break;
0 W1 Z& N, C. p- |% V }* Z+ O: n7 ]5 Z5 ~0 v- }, y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 s: Z5 h; j( J+ j
{
" {4 W. l6 W, C; ~ \; e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; y1 X" C& \5 D
if( !pItemElem )( e. q" D; ^5 h
continue;
/ |9 ^8 U3 u: w8 f4 z+ V if(pItemElem->GetExtra() > 0)4 t8 ] S X# _/ k: \7 B
continue;' \# ]3 }9 k+ c! u, u1 K ]& i
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& H* m" x% w" j* ]5 h' u1 Q! L continue;" M( q: k" k+ Q
if( g_pPlayer->IsUsing( pItemElem ) )
J& U [# t$ R2 H$ {( L) M' h continue;/ I9 f7 {0 [6 E$ |# A5 s9 J
if( pItemElem->IsUndestructable() == TRUE )/ Y+ h6 Z+ H1 _/ Y, {# Z) m3 C
{7 U- ]$ X7 h( c$ J# Y, N8 k4 k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& d% q% ^! x7 x( C% i continue;& s: l9 [- W2 q+ z4 h$ @2 |1 S
}! S! _& @# |# D! B. g5 o" F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& f8 D# \9 I5 {5 _6 c4 l }! j, i4 F3 q8 j, c
break;
+ F5 J* `3 g" P }
; J0 i$ D5 ~3 |* J+ c' d case 1:
B3 n) b+ [7 `: p) x5 F {% h1 H& Z& }' s; d
//整理背包- N {8 P* O5 v0 p& I& j
//////////////////////////////////////////////////////////////////////////+ i. t$ Y: S) e" M8 {2 o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 ^2 I2 W( Z, p; _/ P //////////////////////////////////////////////////////////////////////////
) c7 X7 _- E" ~# B+ h& a9 R //////////////////////////////////////////////////////////////////////////! g( S* b8 m, O) U. v# z* D
CInventorySort* pInvSort = new CInventorySort;1 j" Z; m" u+ F9 s
vector <sItem> vItem;) b b3 ^7 W% J
vItem.resize(MAX_INVENTORY);//初始化大小
, L- `9 A' f% I: v% N1 m9 d //////////////////////////////////////////////////////////////////////////" o0 ]8 I# N$ D1 J0 d" G% S
//填充数据4 E+ i7 [. t" d- [/ I
for (int i=0;i<MAX_INVENTORY;i++)4 C" C; }( U$ B& c0 v; L
{6 `7 L' R) D, m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* u/ m* @+ ^- C" |" s+ D if (!pItemElem)2 W0 q9 i* `3 i! ]7 p
{) G9 k3 Q# \! Q
vItem.dwKind2 = 0xffffffff;7 ?' ~( }$ l1 v
vItem.dwItemId = 0xffffffff;
C- N- x" l- K7 x+ U, y" V vItem.nIndex = i;
7 l2 j3 d. A# a% R: Q) E }else {
% ]* ~+ ^! ^% `# r: A1 I t ItemProp* pProp = pItemElem->GetProp();' E2 |# x3 p, {
vItem.dwKind2 = pProp->dwItemKind2;; t: r q8 g- X0 Y
vItem.dwItemId = pItemElem->m_dwItemId;
. t) t: Z* w3 a8 F6 X2 X+ J9 _7 F+ S9 @ vItem.nIndex = i;& o) q) G0 H: q& ?% P! c( ? n" G+ J
} z( \! |0 L& S6 u: Z: p0 C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" A: E: d$ l2 \ } Y; c _2 a2 r! a1 L/ _: |
//////////////////////////////////////////////////////////////////////////4 Z) }5 }3 H3 r
sort(vItem.begin(),vItem.end());//排序0 G5 {( a. @: c: K5 ^5 b
//////////////////////////////////////////////////////////////////////////3 {6 W j2 J8 t0 t7 M
//交换
) x, n4 o1 C/ K" ] for (size_t i=0;i<vItem.size();i++)
. O! @9 s4 z0 t- {5 f- y7 x4 s' ? {
, H$ h/ Y$ M7 o" O% m- d5 O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, u" c7 B+ E2 j# w" Q3 a pInvSort->Add(vItem.nIndex);: d3 H: y S- s' ^
}
5 M" d; \! }6 e0 l) e/ ^( C BYTE nDestPos = 0;/ G L, F4 e) z8 Q
for (int i=0;i<MAX_INVENTORY;i++)4 x! T2 z) E6 ^* F
{2 t% B3 q8 F" n! q, b4 l U7 P5 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 H. N6 E# E% i' u" x. F# a if (pItemElem)
( M4 f4 j, w2 C# P9 S/ ~ {9 u+ t7 K, J- B1 O2 J9 R
if (IsUsingItem(pItemElem))
3 t' F# P4 Q! x( {4 a4 H7 ^, j1 | {' z9 _$ s4 Z8 s; y! W( D
//这个位置无法放
, r( W" i- O4 H) x9 L nDestPos++;
1 p, O+ G9 q" Y5 X }
) j! H8 _3 g$ w \3 E) Z9 p) s }* z/ c& e: X S, L
BYTE nSrc = pInvSort->GetItemSrc(i);
. G; Y! Y3 @& @% [7 g% r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); A# f/ K6 y5 W+ T2 W( c0 w
if (pItemElem)% K/ a. r9 \# X
{
( Q9 ?$ W% E; R6 {5 J if (IsUsingItem(pItemElem)), j3 C \8 d+ E1 d2 d3 {7 X: E
{5 c/ `, ]$ O# Q8 `+ J* I' @
//这个道具无法移动,跳过
0 O5 v) n8 v2 ]- u. X S8 a6 l continue;- {8 J; e! H/ y* F- @4 b
}
! R+ P1 R) V# e/ } }else{
- p; R3 G' T, C5 D; j' W u //空位置 不用动
# ^1 o% U9 u1 Y) U2 r- J# u4 [$ n continue;4 @. `$ t9 j$ T$ y, U7 y% d/ T
}7 N0 Z! l$ R; X% z
//////////////////////////////////////////////////////////////////////////
; B. r' A1 B6 D //开始移动7 U. M9 w; d" |! G8 ?) r/ w/ p
if (nSrc == nDestPos)+ m2 [! P% B, e
{
! {& U* F; _2 r! ?# k' y# u4 _ //原地不动+ d0 ~! D# A! C. f& ~7 [' ~
nDestPos++;' t( w3 A$ {& f ?- h
continue;
+ R! \& c/ f$ C) p' b! \ }
6 S& W; Y( ?% [% v& H pInvSort->MoveItem(i,nDestPos);
& O, ?1 S) P1 F* ?7 n g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ T6 P. l, `5 f1 g1 i1 i Sleep(5);
2 s* u! O8 k1 d/ ^" j //Error("移动 - %d->%d",nSrc,nDestPos);& F1 i* l+ k) x8 t
nDestPos++;
/ ?" o# b/ P6 h5 a }- X7 m! A2 b3 G; d {. N
//取第一个元素的信息! O, {; ]3 I; r5 a' O
/*+ B: F w) Y7 ~& r) ?
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( L+ ?+ x& d6 g9 F* b& R$ }
{$ C- N0 Y3 L: K3 r: A3 Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- r, {$ u7 ~: ]* A$ |+ r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) K" O) B' b- R$ }( `( c5 f
}
' y8 {2 f; n# m! P$ F */; ~# Y/ v8 s. D9 D1 H
//////////////////////////////////////////////////////////////////////////0 V" n( l. o R7 j0 n& v& M# Z4 @
break;* B* t$ q2 D. F4 A6 T
}
( ~" q7 D* f. m& @ }
6 S4 F: X' g2 d& S8 t6 I4 Z}: u7 M" f' _, r1 ^ o6 w
m_wndMenu.SetVisible(FALSE);
, b5 Y! I/ M" w0 F# k1 l' G7 B% r2 C2 h; L- _8 J
--------------------------------------------------------------------------------------------------------5 c7 D! Y: l: w' _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); [6 d7 y U% [; Y$ _
{
) c \) l. {8 O, kBaseMouseCursor();
1 O3 e( U C* ~% z1 ]- g' y}
2 D/ D& v* v# h. v在其下添加:
# K' V; H# w" _5 E* ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): p1 m, U; @6 ^! g/ g. s
{2 Z/ M+ r9 Y( ^' E1 y8 F
m_wndMenu.DeleteAllMenu();: H% ], d: A- \5 z
m_wndMenu.CreateMenu(this);
0 m/ v) e( x3 c# `/ Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ C w% I6 X. [1 _' o# s( _
! h0 b! x- v7 A5 j0 }$ Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- Y( @5 ?: N* n5 B: b1 F
{1 B0 y" V" T. x9 t% W2 |
//P以上级别才可以删除所有道具
. K7 s' o/ E+ _- C# E5 B m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( g' o1 B3 Q. z1 g}
0 ^" P4 e' O4 R! Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; B9 s4 L4 P: P& _- f+ r( Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* K; i+ @0 K1 C# `$ O1 i$ Xm_wndMenu.SetFocus();& |0 y! B6 H8 |5 B
}
: l) G6 r2 j2 f- }( G------------------------------------------------------------------------------------------------------------
9 @. i% h9 [& G! G$ r$ v+ y+ {*************************
3 j d" @1 `2 D& w/ P6 z# h% ]/ ]WndField.h文件8 l$ j1 W( T* t1 w; T5 W
*************************; U+ o# n* |7 p
搜索:BOOL m_bReport;" a* A8 m0 t+ P/ h+ J
其后添加:
: H' Q; a2 \% k! P5 ~0 k! ^CWndMenu m_wndMenu;
6 C1 p- }. d' D/ w2 g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 _8 X8 s$ f8 w! r: X7 G- d其后添加:
& `/ [, z; R2 L* H$ x; F; hvirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 X# P3 @7 U3 ^; W$ x3 K
9 ^3 k9 x& C6 X2 g8 O9 U( }! }+ m# n
+ q9 K: M# ^5 f( A/ r |
|