|
|
源文件中_Interface文件夹下WndField.cpp文件
- Z$ P4 f! i6 M, T& v; |1 L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ n5 O' R8 h) ]% Y6 G( j- T$ z
; F2 }1 t5 K; q `6 jstruct sItem$ A. i8 n/ [& m! {2 `
{ d) q2 i! Z2 P% }
DWORD dwId;8 k6 K L& Q7 c6 ]7 a, y; Y: Q9 a9 r
DWORD dwKind2;
, e& V# f9 w9 r" j2 u' vDWORD dwItemId;
- \; r- L1 X0 U+ K0 `( ?2 DBYTE nIndex;
8 E# c$ b8 Y2 vsItem(){
) P; |: `# K$ P& G' n. { dwId = dwKind2 = dwItemId = nIndex = 0;
3 Q5 A! _! u7 j0 @! d}( F6 \: ?( Z& D
bool operator < (const sItem p2)
* F2 z9 o6 X3 O0 C2 I ?{( Y. c. `/ {5 q0 |/ Q, h
if (dwKind2 == p2.dwKind2)
4 n6 S; G% N! Y, }& e9 Q, X# P {- _$ b2 g' R; p; j$ |- G1 @
return dwItemId < p2.dwItemId;
8 D. s8 n$ N4 O% i8 A9 U }else{! V, S `+ D4 X8 j6 H' d& W' e [- o
return dwKind2 < p2.dwKind2;
2 ?( f2 P# D; z2 T( s }7 |1 L" `5 E5 `
}! {2 ^ V( s( ?$ b. o! {2 I
};
2 b c0 i& u5 T( i0 {7 Y& Sclass CInventorySort
% x. ~5 T* Z4 p# m/ l2 G. Z/ A{
* l' i4 J& D1 }4 j3 q$ [/ \+ o2 Gpublic:
! k) o- ]* z# E" |# a! @CInventorySort(). d5 _: e0 |0 `2 }7 {( j. _) l7 U
{( h9 T9 f! ? i9 l0 F5 F
m_dwPos = 0;
3 D" ~! i( v; E- p+ D}% L! i" F3 d6 B. V( T
~CInventorySort(){}
M5 T) c2 X" Pprivate:
0 F5 \/ ~3 J0 @6 t3 v( RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ Q! [' f* z+ t0 y: z( B- P
DWORD m_dwPos;
. m$ ~4 Z9 ^& p6 h2 |public:
+ m8 {5 r/ }4 Zvoid Add(BYTE nIndex); E# k- ], g* k9 m" ]* {8 T. |/ X
{+ e3 v& _4 s# C8 ~) A/ _# j6 h7 m
if (m_dwPos >= MAX_INVENTORY)8 B* r! Q' Q5 _/ N+ q( q
{5 v# W! s9 y# b5 a
return;& U: s; S* p% y1 M; F
}
! v5 J% ^) G: {) d# P- e( l m_Item[m_dwPos].nIndex = nIndex;
- U1 a5 r# V( a+ O' |) j m_Item[m_dwPos].dwId = m_dwPos;
7 L) @" d4 b3 N' _$ C& s m_dwPos++;8 q' w# `- ]3 a: F# G
}
( Q+ K/ Z1 v; w/ A6 C+ u& r. p( K. wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# r/ G' l& O9 N) ?& p. a
{
, v1 A1 K' s+ K- v2 }3 H for (int i=0;i<MAX_INVENTORY;i++)
) l! H' W6 b, j0 ?9 u7 {* T/ {) {* W {
- y/ f) t c* I9 w, t if (m_Item.dwId == dwId)
0 [. X) ~! e* X% | {, S$ C: r4 s3 R
return m_Item.nIndex;) o9 N& x& \. p& O: p2 J3 E
}3 M/ U2 F1 Y# \1 \5 o6 U% F0 c* G/ n
}
$ ? D. b" m9 A5 b return 255;0 q1 ]7 m+ `* j: ~
}
5 l- Z6 Z E, xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) }; {/ U4 |3 V9 C{
/ A3 S3 q2 d$ }; W& ^ BYTE nTmp = 0;6 D6 \8 l0 j5 H0 m. e
bool bDest = false,bSrc = false;+ f! l5 n! ]3 {' Z0 h4 [& C( Z$ H
for (int i=0;i<MAX_INVENTORY;i++)
+ B3 x1 `# V$ g {
4 b' K" x# F: _$ m9 B if (dwSrcId == m_Item.dwId)' l% V4 i u# w2 g0 u! `0 c, q6 G
{
) }+ \% G% }/ Y! o. G //id相等 则 改变对应的dest和src
3 g$ `6 W% ]' h5 b5 t; U nTmp = m_Item.nIndex;
- H8 k* A. i6 N7 R1 w g- r m_Item.nIndex = dest;
( _( |5 t# T* Z2 M. A }. i7 _( Q& _6 Y
}
+ M$ W% G3 Q6 e$ g8 h8 S) f //临时数据保存完毕,交换开始/ h4 U0 d+ J* M) D J" N
for (int i=0;i<MAX_INVENTORY;i++)
. ?9 F) w" ]( z1 }3 E) F {, k( X" N: e: p' L
if (dest == m_Item.nIndex)
3 |+ V+ G! N: c* ? {8 L5 Q( y2 \' \$ m
//id相等 则 改变对应的dest和src
1 E8 b7 g* C. l. v m_Item.nIndex = nTmp;* \) I+ J" S! l5 U& p) o9 c9 S) U; X
}
b: g1 Z& @# H* t& F }3 X" P2 B: a/ ], L; y
}( m. c8 S4 A& E( d, B
};
* j# M7 }: X/ a' C-------------------------------------------------------------------------* j+ ]! \4 ~# P1 }+ s
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- h: J0 M' C1 Z+ @/ f
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ J& d/ s* |6 h0 t$ J紧靠其上添加:3 _" w1 f& I/ w8 X7 f8 r/ P
if( pWndBase == &m_wndMenu )
8 [- Y: M) }& J{% S8 C) P0 g% n9 N# D! h7 P
switch( nID )- H+ k5 Y" ]& ]4 `4 g0 o
{: }6 ~. }% T5 T- }( t; Q
case 2:
$ K! P+ h- B- X {
! ?9 @( e$ C+ _/ ]4 b, R3 \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 j, v- Y% y/ R; _$ P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 }0 \! r" n1 }3 H {
0 \* f4 ]+ X2 n; i3 B3 [+ p5 } break;
# R* k8 Y( N9 ^' l }" \9 Q) }" b- E6 a6 B& g
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! _- Y* O' K4 j) ] {' r5 o7 P/ V' V7 U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 ^, A4 @" y5 g7 [
if( !pItemElem )9 F1 m" T5 r- c+ E. h( ?0 f3 ~ I
continue;- \& H/ F4 ]' t
if(pItemElem->GetExtra() > 0)1 ^, F) p! M* G/ O
continue;% t ^" d5 I/ {- I/ E
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- D" O5 f; t3 ^) o continue;
: u, S! O( d( w0 | if( g_pPlayer->IsUsing( pItemElem ) )! |4 s+ Y, x K( C2 E2 E% m$ o
continue;
" p2 ]+ V/ g' b# y9 u/ s5 O if( pItemElem->IsUndestructable() == TRUE )+ q, R% S2 w" i! ^& L
{7 w7 p. G- P- N" B0 v2 k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 o( L& j2 ]- X, I" q
continue;
! I7 k& E6 a+ d0 T& ^6 I }+ t) j3 i2 O9 [% p8 |7 @+ i" ]' f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ g+ [& J8 F3 K8 M3 V; ?" k% K' | }! H5 \3 j) [, n+ B5 V S" @
break;
( ?" s8 _# L. n+ A }' q- _' c7 m$ N2 {$ P6 U
case 1:
, P3 d; p) W. \: h" U {
; O$ y1 p. J' `$ u$ q //整理背包7 h. m% D0 e/ Y( m) e8 N+ @
//////////////////////////////////////////////////////////////////////////
5 A' n3 y0 o U1 Y& {' z0 C //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" D% L, m( g) X. A) W //////////////////////////////////////////////////////////////////////////9 ?5 a; _5 ?( o! F; k: y3 L
//////////////////////////////////////////////////////////////////////////0 G9 Z1 e s* x
CInventorySort* pInvSort = new CInventorySort;
4 e1 G7 f8 \3 v vector <sItem> vItem;& o$ }* A( a* J4 n. q
vItem.resize(MAX_INVENTORY);//初始化大小! z' t$ g2 b; S8 h0 ^
//////////////////////////////////////////////////////////////////////////9 W9 h* g' p4 A
//填充数据+ U4 W8 k( N/ ^- i- q
for (int i=0;i<MAX_INVENTORY;i++); z, E2 Z) X% w: x: ~) ~, B
{
1 g. b: \2 Z) f5 k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; z+ ^/ H" ]4 F6 {: V& T5 z
if (!pItemElem)
1 V5 D: p6 l# t {
, y& h" i) ^% Q' ]0 H" F+ J vItem.dwKind2 = 0xffffffff;
; l* Z0 h/ V7 _ vItem.dwItemId = 0xffffffff;
& Q, M2 s/ e* W! M9 d9 Q1 u$ Q vItem.nIndex = i;
0 }0 B, s- T+ c' x- n8 O- i2 E }else {- `" _, c( j. Z8 ?4 k2 k
ItemProp* pProp = pItemElem->GetProp();/ D+ F: R& M7 c4 u! n6 ~. d
vItem.dwKind2 = pProp->dwItemKind2;* d# n) S. i5 ~" H
vItem.dwItemId = pItemElem->m_dwItemId;
( z' X) f; \% ^ vItem.nIndex = i;
0 `& x% m( r7 D5 G1 @ }: G6 g2 a1 d% e1 x
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
}6 h, {7 B R8 p" K }( f, A9 b' I8 x+ G; A& J. q
//////////////////////////////////////////////////////////////////////////* \2 @4 n( h. O
sort(vItem.begin(),vItem.end());//排序
, H1 V+ t/ H. K //////////////////////////////////////////////////////////////////////////4 _! W( @8 f- j! z$ l% ~ K
//交换7 Y- u( s1 i% p! L
for (size_t i=0;i<vItem.size();i++)
: W! t/ L4 Q' m# U$ A! t: C1 I4 v2 [ {! e! M) {& r: @3 A
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- }* d3 i7 l+ W- A pInvSort->Add(vItem.nIndex);
/ @/ \ m7 s: o8 A }
# A4 C+ }" }5 t; x BYTE nDestPos = 0;/ l1 Q6 d+ P1 f3 R" {3 u2 w
for (int i=0;i<MAX_INVENTORY;i++)
5 V. h: D) [* j% X; l2 y6 a, u {8 j5 W( n7 f. f: }, d( `) t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. z, s8 s8 B/ x if (pItemElem)
j. B. Q4 J1 L {9 |0 o2 F. W8 K1 z
if (IsUsingItem(pItemElem))9 G! d8 [$ O' P$ c+ Z
{
2 k0 {1 |0 H, u# [* C3 u; L //这个位置无法放( E8 o: l; a& @
nDestPos++;5 Y! G. r% p6 y3 b: X3 M L
}
8 e: S( V4 v6 @: e }
1 C# d2 w2 R6 @+ @ BYTE nSrc = pInvSort->GetItemSrc(i);
- n( Z5 E% m$ a2 D( ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- U5 x5 x2 t7 x' Z5 U% J1 E if (pItemElem)8 v- U9 f7 {' N( D: [3 S! |/ a
{$ ^; J8 @2 I U; H; `" I) P; z7 x
if (IsUsingItem(pItemElem))
$ M7 Z% s% ^ `5 {/ m {! c: Q2 u3 I4 E/ q; z
//这个道具无法移动,跳过* t1 P e9 O: R4 o3 _% }8 @4 ^
continue;
( t e! s0 V2 L7 I- ~ }
( |/ `' ^3 d# }8 P: G/ u }else{
5 |* e; R* M$ V, c8 ` //空位置 不用动& N7 @9 D5 T& p* I1 L4 j+ Q+ o
continue;
; c, p9 V9 `1 ^7 K }
: ]: G! {; r- V, T$ ^; } r. V //////////////////////////////////////////////////////////////////////////2 t5 w$ N! Y8 A5 o- T6 U+ {3 J
//开始移动
& w+ I1 {6 D5 o" B if (nSrc == nDestPos)& G9 _1 g! _/ F% }$ W$ f" v) D
{
% \7 B3 s x H //原地不动
n1 |4 `4 y' E: g' t nDestPos++;" y2 c8 M4 q5 d! J) n5 j u
continue;$ W/ T" o- D2 J; `5 ~
}
8 f% S6 B# s* B4 Z; I pInvSort->MoveItem(i,nDestPos);. g+ M" d& w! {7 M
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! V/ S' W2 ?3 c) }2 H0 w
Sleep(5);
6 S `( n3 v* h' r. V //Error("移动 - %d->%d",nSrc,nDestPos);; t% d8 s" J% G( h1 c
nDestPos++;
1 ?% V" _9 a |6 a* } }
7 e! q$ L% e5 j/ {' o0 M //取第一个元素的信息: Z. u. R \7 |
/* y# c. x. e7 U% G, X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), t5 d$ \+ F, J- o4 @
{
, R; p4 f, G0 P! j Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* M% J7 K, r, h/ {
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ s3 b) `! ^% l5 S
}
" D4 }( M% M; ]% d0 W1 q" F */+ Y: R9 o Y ]/ K
//////////////////////////////////////////////////////////////////////////
6 L+ D4 z6 ], Y, b" S* d break;3 v8 i2 e3 B( \" J0 F! b4 t! u
}
1 _( x0 B4 Z o5 C# @7 J4 q! F } 2 w) G$ [: c' W) m, g
}
' N' v6 H V% R. }: W' y( Im_wndMenu.SetVisible(FALSE);; B0 I: p# Y; s9 w. z' `* ]
2 j/ h$ H& _$ R* X3 j
--------------------------------------------------------------------------------------------------------9 z; [- k; I3 ~/ z, ]
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 c( P+ E4 t# E; O! Q1 R
{ e* [: A' W3 M& W! F$ c: ?; p4 B
BaseMouseCursor();
" C$ S; o/ \; [9 j* s$ n9 ]}; l2 \5 m6 { G& V
在其下添加:# Z) L, h1 v8 ?; R; L3 C5 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). g; q% ]% a! r c$ _. A
{
2 N6 V* p! T7 j( |# X- T, Fm_wndMenu.DeleteAllMenu();
. o8 S4 j# D5 x6 \m_wndMenu.CreateMenu(this);
5 Z6 j9 M2 `8 h0 rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 Q9 c: V9 \! r ~
! e; Y c3 e7 a# iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: [- v& t* g! w1 w{9 e& {7 e1 q) l; J
//P以上级别才可以删除所有道具$ B/ C* @0 Z8 F/ O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 q0 `4 y, N. z, {
}
: o+ E; b# r; U/ Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) W# {% ~2 B) W, W5 A _" G( o- Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 G# z J) X- z, F5 X, Gm_wndMenu.SetFocus();! c' ?5 r9 B, l, e2 z' |- n+ P
}* h6 R& L8 ]- ?6 h# T2 Y, S I7 d; Q" p
------------------------------------------------------------------------------------------------------------. \8 @* Z8 X9 ~9 f/ ]. |
*************************6 c4 Y8 P7 T" m5 d, @# X! R* v& [
WndField.h文件; I) [3 S( e, `7 S
*************************
) Z; h/ r6 k* E" `搜索:BOOL m_bReport;$ w* X, I6 }; Q# W2 y
其后添加:6 S3 o0 g: \3 R4 y! ~- f/ g7 T
CWndMenu m_wndMenu;8 J5 F/ s+ h/ ?. C$ y% G7 B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ V7 }/ R% C& Y- |. [$ n其后添加:
$ }' T# W0 p3 G" M. G. [/ t( Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- i- p& a# W9 U9 |6 T/ S* ?) }# k) b/ ~4 F- p C) t! a
, j" J1 l1 M4 g
|
|