|
|
源文件中_Interface文件夹下WndField.cpp文件
! e' n1 p9 b2 c1 L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 R5 ]) u& n! r3 O8 V
* o# o1 y2 l' t8 sstruct sItem% J8 y' c5 b. k1 ^+ S
{
3 c! n4 g: N, s, N* ~% C; o6 d( nDWORD dwId;
* H: N% h* C0 ]! h; LDWORD dwKind2;
1 X4 I& n* f3 U. J3 A* hDWORD dwItemId;
3 A, Z* w1 v# vBYTE nIndex;9 H ^$ j5 P9 Y3 Y
sItem(){+ O N% Y4 p! [- d% ~; ?; J0 ~
dwId = dwKind2 = dwItemId = nIndex = 0;9 b2 F# P4 O7 a$ @
}: k- ^. T; A/ |# X4 G) o" B x
bool operator < (const sItem p2)
, @4 w/ b0 t- P9 g* I{4 _) F. w' l" ^& V- N" b
if (dwKind2 == p2.dwKind2)
5 |7 a" P# E+ x6 s. M/ l {4 h% s9 `6 Q8 u; o
return dwItemId < p2.dwItemId;
5 e* m! L3 {+ z7 Y5 c }else{* M% ]! ~5 [# n1 t! K
return dwKind2 < p2.dwKind2;, ?1 m+ q: H( X# p
}) s) ]. z1 S# m: Z6 a* c1 t
}
3 w! @* V0 |; M% {& j3 U};
' c. d( z$ h8 A/ k$ `! V% {- Xclass CInventorySort
I; I7 b# U! L, Q0 b* T0 `! p{
! B1 P! c- V& f2 i8 |; \. dpublic:
* ?6 ?' I2 e* _' D) W' @) `+ ?CInventorySort()3 I, w M8 j, S: J% U3 w
{
2 y3 M, ?8 V+ J8 I( d m_dwPos = 0;( E( l' W# ?1 T& J( ^
}0 A; s Y! I4 ], P$ Z% j
~CInventorySort(){}
( i! L1 \# b* f6 c" R3 Kprivate:% A1 }0 ^7 e1 m1 z0 v8 ?6 ?
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( H+ K) c1 {1 s4 u' k0 {1 j! J$ x
DWORD m_dwPos;
2 ]4 T6 R* F$ P! y4 Qpublic:
" G3 Y! I& X! ?9 U4 L2 ?void Add(BYTE nIndex)6 ?8 Y" ^% N$ {8 K$ v' A X
{
% G0 S k7 E% C6 G0 r if (m_dwPos >= MAX_INVENTORY)
( Q. D0 `4 h( F. A {
, q0 [0 q- T; d: W" d return;" _+ D, t* d! R8 z' ?- v
}
' @6 R. ?+ r% U9 ?1 l$ k m_Item[m_dwPos].nIndex = nIndex;5 L) A# R+ _2 f% ^7 d
m_Item[m_dwPos].dwId = m_dwPos;
! C0 u9 v/ [- m+ ^ m_dwPos++;
6 J8 p, m6 S& o! a' v}
$ g/ \( c* Q, p% z# H4 f9 m9 I1 XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 Z0 T( {& d5 `{& f3 Q: B# a3 L! V
for (int i=0;i<MAX_INVENTORY;i++)
& J/ }/ {/ e5 ^- K; _8 u" b {
9 b- D- c: @% w6 |) H( n if (m_Item.dwId == dwId)
; y6 s! ^7 F. j {
$ A- U: v" K5 ?. S; D& T return m_Item.nIndex;) w7 W8 A- ]* p( N- L
}9 T8 z$ j7 I5 m8 }% K: V- e6 o1 q
}& }7 S# w5 V, i4 [& m' S
return 255;. F$ h0 P+ L1 c: E2 s
}
7 P% j- h6 }7 M& I: [0 j* I. W: K& Bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# G) g' P ^% Q _. U8 ]
{
& }" ?. v9 v' O8 d BYTE nTmp = 0;
Z5 H6 ^- A- r" j: a! ] ^5 T/ v* j bool bDest = false,bSrc = false;
; I T4 U7 Y; T4 h1 A/ y2 k for (int i=0;i<MAX_INVENTORY;i++): u& z% O: C* t. F) d% Y
{
; l# J8 m3 p# E if (dwSrcId == m_Item.dwId)4 |8 U$ _; E6 E: X
{
5 T) \. I* F" u' [ //id相等 则 改变对应的dest和src
4 \( e9 e: U- w! f/ ~ nTmp = m_Item.nIndex;: S- l2 l7 B; `6 ^$ y
m_Item.nIndex = dest;9 v. o6 y9 r" @7 q! ~* e
}
+ K$ f- O4 U. o6 K }% }" f6 }& s# L" ~4 z2 c# [
//临时数据保存完毕,交换开始5 u# s2 B+ Z, x
for (int i=0;i<MAX_INVENTORY;i++)
9 o0 z. `* k' _5 p" x {% u2 c9 B: c! d0 e# Q% w9 S7 H
if (dest == m_Item.nIndex)5 x8 e( _6 A8 b) ~/ M
{; g ^' K# i# Q! {
//id相等 则 改变对应的dest和src
: f; Q8 P( ? h& _7 U m_Item.nIndex = nTmp;
. m* c' U, S2 t$ N5 _ P }6 P4 u' _3 j N
}/ L7 \; G, E7 S8 e: G
}: c, f3 J! B1 `; S% O, {+ X* p
};
. c/ S& k6 X4 T+ z! Q-------------------------------------------------------------------------
5 ?4 k3 U0 [8 c' n, |依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) h# g' K8 @2 C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ d8 W2 {6 |+ r- }& g: r紧靠其上添加:% d" k" P" n2 Q4 Z$ t$ ]: P2 h
if( pWndBase == &m_wndMenu )% \2 Q% d s5 d6 X7 K
{' ~ p9 T [/ Q* r- U5 W
switch( nID )& \: d; T# V$ X/ F
{4 {$ t2 m6 \& F. Y& \
case 2:
/ a/ k4 Y' e+ [9 Y; L+ [ {+ B1 n L! V5 ] P) d; P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' I7 }3 E i' g$ l+ u% i. g# Q" n4 W3 P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ Q2 J' ^$ C4 R! @1 P
{$ J/ a. q: f( U W
break;
' G4 G2 m# D+ y# G7 i, d U }
6 ]3 ~6 }" `% D" d! L+ | for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ `) O7 K, [0 E5 d, j
{
' w4 x7 [# x! M: B$ z; J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, v2 C( {1 d6 Q. \# @1 T$ z3 m$ _ if( !pItemElem ): \+ ~5 I0 o; G# I
continue;
- k8 {4 ]) g1 w8 Y% G* b7 Q) Y if(pItemElem->GetExtra() > 0)% Z6 q: }* [8 U* ]
continue; N3 {% m" S' F5 _- R" Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # A9 ^+ G, q( e+ `: u
continue;
2 ^' o' w; q& y! h+ J" t if( g_pPlayer->IsUsing( pItemElem ) )
: ~' O( J" N1 _5 e& Y continue;' O4 I1 U! H6 \! J% r4 P& d
if( pItemElem->IsUndestructable() == TRUE )
) P, z& d: c8 P4 h/ q2 t {
% I: X0 h1 a* f g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- z- j8 s& ~, {! I continue;
' I, |1 f0 q- _& @: u }/ @ `) m9 K# a0 d, t3 Q4 e: o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* ]5 d+ }4 P- H }
1 Y' F" q7 u3 A# R break;
4 v4 ]2 q, ?! n! T/ q }3 D. [" ?- K4 K# e f5 O4 P" M S
case 1:5 ^' y' w1 H7 U. H6 `2 N. Z
{) u( y# }) A" ^/ c2 M% A: }* ^
//整理背包. T& [$ Z/ u r/ k0 [2 Z
//////////////////////////////////////////////////////////////////////////! S. G8 [3 J3 k7 O; t& q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ n: q6 M1 b& h P8 j //////////////////////////////////////////////////////////////////////////" A) m! B' E+ W+ @: n# T: N# v
//////////////////////////////////////////////////////////////////////////- ]6 s p& o& e" }& }; D
CInventorySort* pInvSort = new CInventorySort;$ O; Q) O' t9 N2 p) V1 d8 z
vector <sItem> vItem;
( p9 @5 q0 }: A' a vItem.resize(MAX_INVENTORY);//初始化大小9 R* x4 o8 J9 ]4 K7 D% Q
//////////////////////////////////////////////////////////////////////////
; m j s5 R& L7 } //填充数据
& n: j2 p1 v1 e( Q for (int i=0;i<MAX_INVENTORY;i++)
% h# ~; b) d/ x+ \, } {, l5 V q1 o3 I+ e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- b1 `9 l" v/ N( ?/ l8 z
if (!pItemElem)1 @& r& C6 j3 x. o$ s! I- n& ~
{
5 q8 U7 A# z+ C vItem.dwKind2 = 0xffffffff;( s- E9 v5 X) {2 K
vItem.dwItemId = 0xffffffff;
E/ X' E. @: ^/ b6 [ M vItem.nIndex = i;
2 e) ~7 N; r) `9 a }else {
( x1 V1 x9 S6 ^" o ItemProp* pProp = pItemElem->GetProp();$ B2 T, T+ v9 p/ _# d
vItem.dwKind2 = pProp->dwItemKind2;. O, @& ^: H1 |9 Y7 n' l" d3 \
vItem.dwItemId = pItemElem->m_dwItemId;2 A! [! n- G- h7 ?
vItem.nIndex = i;+ q' S: k! b: _0 t$ P: G9 F
}
4 m4 Y1 q3 k7 ~) f) z& z+ P1 O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 S: F1 ]9 z$ h5 D- b3 u% m
}' o9 P7 Z4 `( ? k
//////////////////////////////////////////////////////////////////////////
$ k% n v0 m' z$ [; ~ @8 Y/ R8 s6 {& C' e sort(vItem.begin(),vItem.end());//排序
4 K( y+ D4 |9 Z2 J- y ?6 r2 ]) V //////////////////////////////////////////////////////////////////////////
, w( Q# u4 m3 R, y# I5 h //交换+ L1 W9 P6 U& m3 V. d
for (size_t i=0;i<vItem.size();i++)' d1 n& ]0 k) h4 V. s+ G
{
' R4 D, `9 V. W* B5 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 m% e9 j" d+ M4 A: l
pInvSort->Add(vItem.nIndex);
5 z; l# ~, _# x9 V; i. @$ R }
- G) _1 k7 R, e, Q BYTE nDestPos = 0;
" I+ u" i2 R& O8 q' v r, I for (int i=0;i<MAX_INVENTORY;i++)
! F: h2 G* ^: q7 _5 g8 _7 S2 F {
" f- W' |0 C9 v3 M) b/ ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. e0 k9 `1 K% M/ M if (pItemElem)
# [8 J M i4 ~4 G* f/ N {% B& P( B. j/ Y3 w$ @
if (IsUsingItem(pItemElem))
) H5 H3 k" A/ ]' ?% R {
* {6 x/ v% Z; u4 h+ r. t( f8 Q //这个位置无法放" P$ L; l: T6 t- `
nDestPos++;2 q2 A7 n, r* K* @3 P
}( ~: _ M$ V z3 p
}8 a' B7 `; q+ F- d
BYTE nSrc = pInvSort->GetItemSrc(i);
9 y; d$ O" V" O* v# }7 D2 w* i1 g pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 x* L3 P- z2 _4 T' ?6 U+ J( t if (pItemElem)
1 I. X$ L4 `' |6 G3 i {
/ s9 `) ]# F; y) t1 k' m if (IsUsingItem(pItemElem))
/ r9 Q. t6 c7 H+ A7 g& p {# l+ }. A1 g2 D3 N
//这个道具无法移动,跳过8 Z1 ~* W; _/ v) x( ^
continue;( H5 c6 u- ], k7 c, F
}
0 h! G7 z( C: V/ D- d }else{
% w0 w$ @+ [2 ]( C6 ^: W1 Y" A //空位置 不用动
6 k$ k8 X4 q# I0 g" p6 m7 I continue;
1 c' D, W. B1 x7 G }
3 u. L1 `- ?. H9 k8 w3 c% z //////////////////////////////////////////////////////////////////////////3 Z# K" K5 v# c8 N4 g5 w5 ^
//开始移动% B8 w6 Y w) `
if (nSrc == nDestPos)4 l# \; x7 }8 \5 a( T
{6 d; v$ F% A3 U) `/ J+ q8 V
//原地不动
8 j9 e. B/ Q4 o( h nDestPos++;/ _' h7 ]1 a/ m: ?$ W$ o+ t
continue;; j& v- M/ G5 J7 T( Y d' w
}. X& c- _3 g8 u2 B
pInvSort->MoveItem(i,nDestPos);
6 R$ e$ z2 R9 N- P# ^: `/ }4 r g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 y6 M, s6 L8 _% L/ ~
Sleep(5);& K5 }* p8 ]0 ^1 Q
//Error("移动 - %d->%d",nSrc,nDestPos);
% U$ H O c* H( S$ a, h nDestPos++;
! d$ r0 a: Z4 t; J }/ ^, h! E$ |# x
//取第一个元素的信息
. f3 d* {) E. {3 O% r9 {8 d /*! z9 t0 {5 x, c7 v. l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" k* u+ ~8 c/ w, X7 P- r- ~0 B$ i# O
{$ q9 |3 v, R$ n S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* v/ Y4 l+ r8 R4 P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% x5 V W J6 J/ }5 j }* [% B" s# s) g' Y# b
*/
8 n- z9 K+ ~3 W5 C5 V0 Z' n7 \) @ //////////////////////////////////////////////////////////////////////////7 x, j7 e, x6 S3 e! b2 |
break;
" a0 a3 W" g" e9 |* C }
" W E$ ]! Y* O& c% C3 Z: B } 1 i% X/ t8 g/ `# f$ C3 k
}* q# Z2 U0 U5 U% R) H3 e
m_wndMenu.SetVisible(FALSE);
) L) B0 M7 g0 e) j0 a' R1 `: ^+ Q
3 B% w i+ y# J/ e% [--------------------------------------------------------------------------------------------------------
$ f$ {% b* F7 z/ v* R9 {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( b* p9 \& r3 m: H5 U, m( R
{
0 z7 X0 o/ {2 o( ]BaseMouseCursor();
/ A2 N2 H, V3 J! d}
0 T" z/ X* @9 C在其下添加:
# T: Q* U# D8 S: g+ U8 ], Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 S! l0 ?2 Q1 O3 [9 B& H2 a8 q3 t0 q{& t" [+ F+ Z4 O0 k$ K
m_wndMenu.DeleteAllMenu();$ R) f$ P0 F: D8 j: U& g
m_wndMenu.CreateMenu(this);
, y: _- Q2 F D! J5 u& am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 f! H+ V+ u4 A( |0 z, P+ X
+ @' F/ h+ g3 R1 [- Y u7 \% sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 i7 T1 l; n0 q6 A. G6 \- z: N
{/ T- S1 M) c' i4 P1 j% f
//P以上级别才可以删除所有道具
: ]; p3 K& [8 d# K; Y1 \# X3 Q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# V( w6 E2 r5 L; D}
% ]: f5 s' n1 K+ a9 A+ Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 a/ n, C+ s$ e+ m$ E; r8 Sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ m0 ~. U( W+ d) ?) am_wndMenu.SetFocus();
" E0 K* Z/ u; v& m}% i3 V9 @/ ^0 o" j
------------------------------------------------------------------------------------------------------------
& b" O ~+ x z*************************8 x9 K* c' C$ a V
WndField.h文件
6 M8 d( k4 A( I+ ?5 b* y( V; f*************************
8 Z5 ]) l. N' K! ]0 {搜索:BOOL m_bReport;, L" f5 Z* Z- m, v
其后添加:
9 \$ @* O/ t" A3 PCWndMenu m_wndMenu;
4 v7 E; F& [9 Q9 c3 G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 j/ B+ X% W& o3 Q- a( z其后添加:
( c( O$ S( G; H b: Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);
+ N* ~. k6 l% M7 V
" s6 u, s3 [3 [4 X! l' U0 ^4 ]& |0 c! y5 ^ `" ~) }3 {
|
|