|
|
源文件中_Interface文件夹下WndField.cpp文件
w6 `, b* W4 F- a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): L/ u% [2 K1 L4 Q$ W! B G
) \+ k$ _: L8 U1 U' z
struct sItem+ d& ]5 _9 ?+ W6 m4 x: w- V
{8 U% K/ k* v6 a& r- L1 P' G
DWORD dwId;' X0 g+ d; q& }+ Q7 n- k/ l8 Z5 G
DWORD dwKind2;
) W, h& A. a% \* kDWORD dwItemId;
8 J# }4 n- d4 f( JBYTE nIndex;* j/ g; L- |0 \0 B+ Y# q4 d
sItem(){
: f" W7 s; V; e j3 Z' j# }, O dwId = dwKind2 = dwItemId = nIndex = 0;
8 D" _4 R+ @# s}4 O/ }/ O, v+ ?, c$ Z$ o; `
bool operator < (const sItem p2)
; Z G$ {' F8 Y, O$ G' _) G. m{$ n! [ ^& z9 R& a/ A
if (dwKind2 == p2.dwKind2)
" _* l" B$ D1 E2 _ {
+ ?' g4 w7 @2 w5 d return dwItemId < p2.dwItemId;
' U0 a7 U0 D) I! b- c }else{/ Q5 [. y' T5 A
return dwKind2 < p2.dwKind2;
P/ i, t' F7 c }! _. D$ h( y( p+ j- Z- w7 v9 O, i
}
. ~" G, b: z& A- `" s1 _) Y};
4 i. G) H; `# T2 @ k! Xclass CInventorySort1 \. O% |) v8 c o- t( I
{& Z# {- _- A% U0 x# P
public:7 s( B% b3 m7 h% K5 o7 j
CInventorySort()) g: g+ O/ @; ]* H m/ d
{
, r% p6 G% ]1 }! j1 g, t m_dwPos = 0;
" q& C( d, i' g% ]6 j! m}9 ^8 w4 G: {" [4 o. h
~CInventorySort(){} P1 w4 @& K, r9 ]' k3 u& F
private:. p( w2 w+ ?# e
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 K, p/ F! S7 {1 O- H. r
DWORD m_dwPos;2 u; R! A4 F/ j
public:, ]2 B9 ?6 g" b9 Z$ S4 h/ W6 B
void Add(BYTE nIndex)
+ |9 K4 g9 S/ f1 E+ v{
( u* D) }' C- J' f if (m_dwPos >= MAX_INVENTORY)
. o7 V% B6 P$ c* X% H1 y& r {
7 M" q5 V9 I0 e, a$ G return;
& n9 D0 W! I( \$ z }; R5 ~" e, @! h
m_Item[m_dwPos].nIndex = nIndex; e7 s" w+ s5 ]& `
m_Item[m_dwPos].dwId = m_dwPos;
1 V u5 E" p4 ] m_dwPos++;* v( Q3 E/ k3 j% t
}' E: P. N% H0 F( w9 l
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 b, ]' F1 i, U! ^+ x{7 \% U+ ~% J' c
for (int i=0;i<MAX_INVENTORY;i++)3 s: k4 n2 t/ @
{
6 U$ L& j% ^ f4 C3 z if (m_Item.dwId == dwId)/ k) G, p0 ^/ |) K
{% i( ?0 j' P3 q0 e, S+ S
return m_Item.nIndex;
$ m" a- S4 k4 h- J }
) z% @- }- X/ j0 m+ u0 g }& v) c( E3 n) S* L) L
return 255;
; R6 M9 T5 p: M* m9 h+ s: @}
9 V- p& J& o/ n+ X; ]; y% h) Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: s6 v2 q" q8 \- ^7 Y% l5 r
{) j1 P, I. P8 v% Z$ k
BYTE nTmp = 0;( S# A F0 g! u8 j w# D0 i
bool bDest = false,bSrc = false;4 |6 n% B: p" J6 d* r
for (int i=0;i<MAX_INVENTORY;i++)4 [% m3 v' C4 u- J! R7 I
{
, D1 R8 o P1 t8 a% d( x/ c& o% o W if (dwSrcId == m_Item.dwId)
* {. e7 W. e9 z2 e0 L5 `: C {- n( `* u6 j2 ]* v
//id相等 则 改变对应的dest和src H$ ~( o% B0 b) ~6 ^+ ?- a$ i
nTmp = m_Item.nIndex;
+ d7 |8 J. Q% x8 g1 w m_Item.nIndex = dest;
2 @1 J7 d3 r4 r }
' n; _1 d5 V+ ?3 N- S0 q8 T }3 z5 ?- a0 S5 P6 P {$ h u
//临时数据保存完毕,交换开始
& z9 |( P& Y3 d( J4 O8 k9 k) m for (int i=0;i<MAX_INVENTORY;i++). a' v; n; s) s$ w3 ?( M* ?
{
8 e. Y% k: B' T/ [: p if (dest == m_Item.nIndex)# G8 C# v$ y) ] N- b5 g
{' c6 h; v5 s1 @6 H* n# y
//id相等 则 改变对应的dest和src
9 `' e- Z: a) U5 M m_Item.nIndex = nTmp;
: n' {3 p& r6 Y$ @% k) x) S }
3 s0 D/ T9 S$ J% b5 O }
7 f. O/ l/ M, s( c: `+ K* @}
8 S' L8 Y Y k! L6 X};9 Q/ c& q! v, G9 z
-------------------------------------------------------------------------" e. n! Q/ v2 p7 q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* L2 Y- I& G% j7 t. U3 g, m搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 J5 [6 M; z! j0 x1 }紧靠其上添加:- I0 i2 a7 G; x* b. Z: ~; G1 z
if( pWndBase == &m_wndMenu )9 ?* s$ K9 U4 B( O9 b
{/ i, V- ?, C7 s/ t' \ r3 `
switch( nID )0 J) J, o6 h- D1 @* K
{
5 S. ^* c2 I U$ B5 S% D, P case 2:* ?" \. r, @9 a- r3 j9 G& }
{
7 G: ~% t% }! N8 g$ t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 Z3 g% ]4 B( ~6 a' a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; p2 ^, T8 b' i. ~3 v( y {/ ] E" B" o/ _( ^
break;+ ^ b4 k" ~1 }/ `/ X
}
# p( a9 M; [" x, P$ u6 Z, y2 S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# \& C1 H' J9 Q$ Q {
1 w0 j. q% v" p6 t/ U5 e3 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 |+ T, u: C8 B5 D. N% M if( !pItemElem )6 N1 |! O% d4 V+ X
continue;, f7 s3 b7 W: K
if(pItemElem->GetExtra() > 0)' U' ^% o7 w! V* y
continue;
, x% n) e$ L% v7 G7 t' W0 d if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 w5 D5 {- B; j5 K! F
continue;0 X0 [0 t6 ?7 R: ^* Y
if( g_pPlayer->IsUsing( pItemElem ) )
* f9 [" f& y0 L6 b2 Q& B4 @. Y continue;
- J. ~( ~9 k3 G% e; { if( pItemElem->IsUndestructable() == TRUE )
7 O" @- I; Y4 `$ X {
) p: R+ L* j) g- T7 a1 q- d g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 S5 u: S; o/ G' o
continue;& x) }' k7 `; L* ]/ c
}* {% V/ P" u( J+ D7 V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" f- q' T. y1 b: n; l( h }
" k9 C0 Z' k9 x/ t break;
/ ]3 U: [3 U' m/ u& k5 i$ m }
$ g& X: D( E. _2 ` case 1:
0 k9 \8 z/ p. T. L( z" j { l, r/ ?5 @+ i* ]# z- [6 W8 C/ @1 y; F
//整理背包
_* W: L' A. W0 F; s% N //////////////////////////////////////////////////////////////////////////6 j4 p9 v' p( v# I7 q: L) t( r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. ]9 k8 _9 I# N6 p* S
//////////////////////////////////////////////////////////////////////////
/ ]9 B' p: R7 l( i //////////////////////////////////////////////////////////////////////////
* A: a' h% V1 [& {/ Z; Q- J CInventorySort* pInvSort = new CInventorySort;
( a- h6 P( D# Z1 l0 C; F vector <sItem> vItem;
6 z2 m3 L$ @' m# a# [ vItem.resize(MAX_INVENTORY);//初始化大小7 c4 d% y; ~' u6 A& `9 W( Q0 V a0 V
//////////////////////////////////////////////////////////////////////////
. [2 n, z& z4 A2 @+ ~- y //填充数据$ O" o1 d( q9 [$ Z) J8 J) Z
for (int i=0;i<MAX_INVENTORY;i++)9 T: M# r2 o4 D
{
/ }4 m- n0 k- `6 T% Z+ p( m# F* A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ ]4 ^% E0 x- z6 K$ x6 }
if (!pItemElem)% U6 m5 p3 p; [+ `% b% K" K
{& U* N6 m K+ e9 D
vItem.dwKind2 = 0xffffffff;
6 ]8 U8 P( S" S8 D3 {5 W vItem.dwItemId = 0xffffffff;3 m! T+ @$ q; v' M5 V
vItem.nIndex = i;' {" }) T* C5 _5 L. V4 V+ B
}else {# x8 _5 @/ m! P7 p- v
ItemProp* pProp = pItemElem->GetProp();
7 G4 j6 M3 U- M$ ? vItem.dwKind2 = pProp->dwItemKind2;
' N: _" {& q9 |& _ vItem.dwItemId = pItemElem->m_dwItemId;
4 \; i" K9 D1 ]" E) ^3 Y. t vItem.nIndex = i;/ G: I# Z$ s9 X# I- P
}
/ b3 Y2 ?5 k+ o @' Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, _' o+ {3 y1 }$ F2 I& Y
}6 P7 L! j2 Z7 d& D# q
//////////////////////////////////////////////////////////////////////////8 v& p4 Z3 k+ r: J; i
sort(vItem.begin(),vItem.end());//排序6 M1 a/ [# b' }2 F$ [7 A
//////////////////////////////////////////////////////////////////////////
4 x K2 S7 N3 q- z //交换# u8 i. r W' d4 x, T! F& e" E
for (size_t i=0;i<vItem.size();i++)
& O: D6 _1 l; m" _ J ]8 q9 N1 \8 t {
1 \- M$ o0 `( x, N* q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; |) e L, R% ~# |, L
pInvSort->Add(vItem.nIndex);
# p/ T" X- K: Z+ e+ p }% n' `% @/ `8 E) t. k
BYTE nDestPos = 0;
' l9 R5 `! I3 g" ] for (int i=0;i<MAX_INVENTORY;i++); |) A0 H: e. T# F. B" S
{
* C; e! R( t" ~( i) g* a/ ^8 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# I x+ B( z: ^) P: f
if (pItemElem), [9 I2 l5 B1 N7 F b6 N3 X6 K
{
- f- ^/ ]" m- g" q$ C if (IsUsingItem(pItemElem))
& a. @; s: u6 ?! H9 y4 o {
& ^- _! d- m- {. g2 A //这个位置无法放
0 C" v$ l( H1 |& O Y nDestPos++;" N. q9 N3 L+ _0 K" ]& d
}
8 g! Q8 N0 T% k! H; K/ q. w0 Z }
) b7 R6 M0 R) d2 W. i- O ?6 } BYTE nSrc = pInvSort->GetItemSrc(i);5 u7 s# c1 _; h) h; p- P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 e7 P' v9 a9 r2 p5 J if (pItemElem)7 R4 l5 x+ s% |9 i! M! C
{3 c! H# u9 j9 @) I' J, x$ w
if (IsUsingItem(pItemElem))& y0 U7 r( x$ m- Y. m' ]
{# m. ^6 u1 z9 L3 A
//这个道具无法移动,跳过
# m" x& a$ @, [2 ?9 i continue;
; @0 k# G8 F* i& W8 w3 P }
3 z7 t3 ?2 R( H }else{
% J( l2 D( `) @; o! d* J, a+ Z8 T9 M& v //空位置 不用动
# ~: o7 P g2 p- m! ^; J/ A, O continue;
2 }, N) u% R9 K2 F6 r' I }" \7 y/ @- Y* [4 D. A& i* ~% m
//////////////////////////////////////////////////////////////////////////5 P# t. {. N F% l# [7 P: k5 c- B
//开始移动
" p" @% J" Y6 i/ M' r3 m7 w* V8 |+ v1 [ if (nSrc == nDestPos)! X$ h. r+ @. l' g
{" S/ O V" a' Z: J5 q# ^: N. l
//原地不动# Y+ r) ^ S7 `' R9 e
nDestPos++;$ _ w/ F) a [* c4 N
continue;# O g- c6 `6 L! \: F
}0 Z. P5 I; R5 Z9 q0 @
pInvSort->MoveItem(i,nDestPos);4 @: F/ |) ]( Y! D w0 B5 v& O
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% c& h4 U0 @ Y; b
Sleep(5); U7 U% q+ M7 [3 N& m9 Q2 Q& F: h; m
//Error("移动 - %d->%d",nSrc,nDestPos);
/ k/ E9 a2 d3 {7 V: j6 ` nDestPos++;2 N; q+ l) v' k Q# x% m
}
: i j! C: S9 p# P: x! |4 A- x7 M5 H4 z //取第一个元素的信息' i4 E9 z8 q! ^2 p
/*
2 j* v) S/ o6 p9 ~$ U# } if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- I2 T' ~# Y [% Q2 ~) N$ h {2 G l- ^' e7 v; b0 _2 ?' s6 U6 ^
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- V" |% ?% s' g# F
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" Z% Y# ^& [) `- `# n+ R& r }
. b7 {7 x+ e" l1 z* `+ b6 h% e */
. S, Q5 i2 ^" B6 X! ~ //////////////////////////////////////////////////////////////////////////
8 G4 F1 j" m$ h" ~! a6 n. v break;
! h, E) {+ Q0 Z# `$ j6 B* b }, u& A3 [8 L; e1 }& v: O5 p
}
' Q& \9 n- h" A% L3 a5 l}
7 p4 Q9 t) p: d( P7 V0 im_wndMenu.SetVisible(FALSE);
0 q; h: l- ^& ]2 l" d! }; q
% m% w# z! L& N5 ?- ^8 p" S) `" D--------------------------------------------------------------------------------------------------------
3 W9 H# p k3 ]* z' }4 z1 B2 t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) S: y9 `! F: C$ H5 l
{# O. X: [ S4 v" ^; |0 l1 ~
BaseMouseCursor();
9 O {* B1 h/ y7 y2 R, e/ z}% J N. }: ~' H+ l
在其下添加:) K* _& |' a$ d
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 U5 X/ s5 p C) t; P
{
) [& r3 Q6 G: J' F! n; _, _m_wndMenu.DeleteAllMenu();
* G! ~" m3 b; Wm_wndMenu.CreateMenu(this);) t/ R* h: Q. X" }
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 Z! t9 p7 c9 P+ V4 b
. l% n" U6 y, o0 b8 t9 Y4 Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 E- A5 g1 L+ t4 _9 i3 C{
2 E: r7 p$ K* \; {! b; Y& E //P以上级别才可以删除所有道具
$ @& g9 b3 Z% g8 f m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" n' q/ t4 {3 _1 s3 N( y
}
& }9 ^ `' I# [* _& j2 `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" ?- w9 F: B( U- V5 Xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 K) N+ `# x# ^1 M, u# _m_wndMenu.SetFocus();
9 \ C$ w2 [, g/ W" H}! \( O p) H, @/ k. u
------------------------------------------------------------------------------------------------------------4 T4 R$ }" ?) ]: I
*************************
# ~$ J) |2 z$ d) cWndField.h文件0 M: `/ a% S' Z4 G2 H% k2 X$ l
*************************7 v! Q. t7 C/ M1 D) o
搜索:BOOL m_bReport;/ k. e, q# V% ?( V* k1 N2 S' b
其后添加:* |) Q m* r6 { A5 C) m
CWndMenu m_wndMenu;
8 ^' J4 t* E0 A) R( s- m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( G2 ~$ i6 c7 g+ ~
其后添加:
7 C0 h7 I3 c* H, _virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 V, s0 _( V% j# p
& U S2 V4 a# \) V- a( T" g
0 I5 {1 `. {' m. {' l } |
|