|
|
源文件中_Interface文件夹下WndField.cpp文件
+ G" \# u! t. H& u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' k5 c. ]8 \. w; p/ h. A- U( {# e/ s9 |
struct sItem
0 k# s1 ?3 S1 u! d7 g, _. ~{; o8 w% p# R( X# I
DWORD dwId;8 N2 ~+ W4 n9 y; _: V
DWORD dwKind2;
+ ?& {7 P0 {3 v2 P" ?* \) t V6 uDWORD dwItemId;
* _3 p1 A7 \4 yBYTE nIndex;
! r! J* j9 d# o# U. ~$ A" ^sItem(){
: j/ A" U4 X4 G; j# V* a# D% i$ R dwId = dwKind2 = dwItemId = nIndex = 0;
2 h( M# w# x% q- F}/ f8 p$ N U* v! u' h, G. g5 U
bool operator < (const sItem p2)
/ V, \5 ?% Q" O; l{) v7 h! d+ r/ _0 Y" M- Y3 q
if (dwKind2 == p2.dwKind2)
3 @" p* E+ E& i$ R; N1 M9 a! a" k% c, l {
# @9 H, l8 G9 g, l. ? return dwItemId < p2.dwItemId;- q& D" f" T P* G+ Y% [8 |3 C
}else{
: z3 W3 @0 Y8 }0 }1 p# k/ n* N return dwKind2 < p2.dwKind2;7 C" u" V$ U) h1 _! {7 J, c
}
; X" C' O" W( `}
" K& K. Z) _* F4 b};& X; c0 l9 B, g
class CInventorySort4 t( D( s0 V7 \/ d( A4 {
{
1 d: c' @* c- R3 h0 j4 {public:1 C3 q5 F6 c7 M) t7 o' |
CInventorySort()1 b0 ^6 h) u6 @) c% j' o* y" [
{5 X" g0 k0 |9 P- Z6 Q# T6 a2 R: B
m_dwPos = 0;
* H6 U" Z e+ i6 u}
/ r2 Q( ^3 y+ M~CInventorySort(){}
! @1 y2 ]4 p0 Sprivate:
- n6 ~6 k8 O( `2 x9 A& xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ g: i/ S! J3 ~8 J% F vDWORD m_dwPos; `4 D" Y h2 E2 y5 i- v! C( y
public:
3 M6 I0 M' z# c6 yvoid Add(BYTE nIndex)3 G6 w0 @; s, B
{
$ ]: _" I% j- f; \5 x if (m_dwPos >= MAX_INVENTORY)
o6 c; W6 y4 P. d {
3 W- \5 [% m e return;
$ W9 p Z S m0 D4 L# E) m X }8 d0 _2 S0 P0 a0 g$ d
m_Item[m_dwPos].nIndex = nIndex;2 g) R$ X# X4 [7 y) S3 Z/ M3 w T( O' H
m_Item[m_dwPos].dwId = m_dwPos;
& i- K. Y1 ?+ A/ ^7 v: @4 E m_dwPos++;/ J4 ?; D* @4 k+ z
}
& u0 A6 z8 W; M2 T6 m. Y. _0 \# `$ PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 a# w6 F% S& H$ ]{" G4 ]$ |) k$ P9 q4 W N
for (int i=0;i<MAX_INVENTORY;i++)
# s( ~2 E! N) r6 U! i, l1 a( Z. B {
2 x2 F S! I! i# v/ _0 h4 o% {" E( e if (m_Item.dwId == dwId)
, F" Y8 J* }8 ]7 u {! k: E% F0 ?4 O4 f
return m_Item.nIndex;
g0 F& ? k, [& f; e, I/ h; I- Z }; ^2 J* c* y4 t
}
% [. v3 v5 m- w+ Z u return 255;
2 M! V+ |7 U: W {}
! ^$ I' c( Z5 K3 Jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- ?9 {, m- q* x+ h- i{' k" X) B: m! x; i- j8 |% x# f
BYTE nTmp = 0;
& U+ W# x L" [% f bool bDest = false,bSrc = false;% o; ?) _6 g" v; F3 o0 e- C
for (int i=0;i<MAX_INVENTORY;i++)
& Q4 B7 p& y9 {* F0 n" U: J# s. v0 [ {
0 E$ _. E: t r if (dwSrcId == m_Item.dwId)0 O7 {: M a% n* R2 c u
{! u0 P; I+ i$ o( q
//id相等 则 改变对应的dest和src
; Y- h; z/ O. c: n0 _8 h6 z nTmp = m_Item.nIndex;6 E# ?! u/ Q3 ~
m_Item.nIndex = dest;& B6 c0 z$ E1 Z& Z8 }
}
( ~! p1 U4 u& H8 c }" b; B2 {- C- o* v+ m
//临时数据保存完毕,交换开始2 N( ]. u0 M/ h
for (int i=0;i<MAX_INVENTORY;i++)
% y2 r( J9 p7 d7 |2 L6 I. P5 D {
7 O. i" t! Y. T6 |& _! d7 w if (dest == m_Item.nIndex)3 D& `" E9 j; y& S
{
* |1 M% k" _" Q9 Y" o, q, Y6 w( T1 f //id相等 则 改变对应的dest和src) J; `* B6 n$ V+ K+ i: s
m_Item.nIndex = nTmp;
4 P) e# b9 e* ]" L }- K* j" j* c4 F# f% |0 Z# M
}+ B+ J0 b2 [! r @/ j
}
# u4 e" |2 i. B: R! C' a};
5 q: j I; u+ }; J. j9 b; B* J2 _-------------------------------------------------------------------------
- h3 {- L C& K5 a, M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' z& m8 b8 r$ `/ h: Q9 |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); X2 y7 l0 d+ f- i3 V5 e
紧靠其上添加:
( Z' j( l _. D" Dif( pWndBase == &m_wndMenu )) T5 V/ C0 W# H& y8 y% b0 i! f" O
{
7 u; ~( p7 D5 V6 @1 c switch( nID )
8 R3 M N' B& @$ ]% w, [8 A {1 m. c5 @+ f' P ], y4 o1 G
case 2:
3 a+ [& S+ f% @; x f' v {
7 _/ G* j9 H, r8 I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 H; L# b- s, S3 A8 I2 D2 A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), v5 h+ U; \- _
{
0 c' p( ^; p4 o3 {5 N: @( o6 Y( j break;2 Y, ~: e ~" |- V% U6 |0 a9 g
}
& D% z, y3 P: d5 e6 p% T& a for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* f0 ]3 X, O! T {
5 t n$ L9 u" i: d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( n) Q& J, x5 r if( !pItemElem )2 O+ j* h1 q8 M8 Q1 {
continue;" ]! J2 ?9 R2 M9 F, m
if(pItemElem->GetExtra() > 0)9 S" n& O# D) J4 r9 s5 d d7 O
continue;2 w1 J& Q7 N$ t, u; F2 B3 C- v( u
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
F6 I o' Y# E U0 i continue;
8 M Q1 n. ~/ A; M; i if( g_pPlayer->IsUsing( pItemElem ) )
& ~( N" s% [6 ]7 }; g continue;
2 n$ y7 X- \9 K% x if( pItemElem->IsUndestructable() == TRUE )
/ ?% q6 F3 k* _' O1 q, k {
- A5 b' b& A q% [% J% J. g7 Y m g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, @% q; D4 O/ |/ k continue;8 D: Z- V) a& C' Q F, [
}
, J% x# J, |$ S, G- @/ }/ Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ X6 i8 I6 K* \. f) A2 i. K
}0 d- |7 E7 c' s' A
break;3 j) A. g: `- J% N' e
}
- j6 N% @% r# Q6 H) @$ G1 } case 1:' A- d; d k5 a$ ~1 c7 d& U
{% ?- C' y. V9 n8 n6 i% Q
//整理背包
2 p5 r( W) [+ f( `! @/ { ////////////////////////////////////////////////////////////////////////// ]: ]: @3 J# D! q+ Y X
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* K% n: e) P& f9 j2 n' v; Y //////////////////////////////////////////////////////////////////////////
# e# J; Y& i. g& R7 R) E; x1 z% O) A ////////////////////////////////////////////////////////////////////////// R+ Q+ S c8 M4 A* |+ S8 G1 _
CInventorySort* pInvSort = new CInventorySort;
/ _/ V `$ D ]: t) P! O/ S" b vector <sItem> vItem;/ O2 T- X/ J' {2 h: C4 f. [
vItem.resize(MAX_INVENTORY);//初始化大小
' Z2 x0 W9 p- \ //////////////////////////////////////////////////////////////////////////
; a, i/ J! ^3 u9 J2 p& [ //填充数据' w' x, j: q% I% t
for (int i=0;i<MAX_INVENTORY;i++)
! t0 D: B/ w! Q8 v {
; ?9 H/ R0 o2 B6 y7 [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ V" Q- c9 p% M$ z9 V% v
if (!pItemElem)
2 U5 z$ G8 Y! m% l7 S {
, o1 Q6 b3 L) V' z& p vItem.dwKind2 = 0xffffffff;' n7 A# A6 F7 S
vItem.dwItemId = 0xffffffff;% K2 U( h1 ^$ ?
vItem.nIndex = i;+ b: b1 l5 U5 ~
}else {
3 u3 C0 P: ?6 f4 F2 y& d0 P ItemProp* pProp = pItemElem->GetProp();
5 r& D; K# U/ ^ `/ v j9 v vItem.dwKind2 = pProp->dwItemKind2;
( u( ]2 w) t: l8 G6 @1 B2 |' @ vItem.dwItemId = pItemElem->m_dwItemId;. q0 D( A- M8 P; j4 `$ r# I8 O0 P
vItem.nIndex = i;
! V5 Q! W, {+ E1 x* b( Q; ?! A }
' u3 s, v8 x g //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; s" k+ K- {: S: T0 q3 E
}
1 m' z5 U2 J, O2 M1 p //////////////////////////////////////////////////////////////////////////$ W8 b. m" p$ K6 t
sort(vItem.begin(),vItem.end());//排序
9 j' F/ a! c O& b# ~6 S //////////////////////////////////////////////////////////////////////////# ]( }; z! _% F. ^, a2 I
//交换
! [2 \, O, L9 p for (size_t i=0;i<vItem.size();i++)
) F5 ]3 N9 G- ^0 W# u* s' H {
$ d% H! U% W& X" P //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 Y" o* _7 Y i pInvSort->Add(vItem.nIndex);
& t# d* Q0 {5 Y- P* I- n/ Z }
& [5 o( [1 s& [2 N1 N BYTE nDestPos = 0;. |; R0 A/ \8 l8 ^8 ]9 {
for (int i=0;i<MAX_INVENTORY;i++)4 e4 z# I" a$ T6 P n
{0 I7 F, ^8 \6 s# f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 @( a5 A) y7 @/ p y% M if (pItemElem)
$ Y/ s" G# e5 l2 G- U {
: f1 r3 J* g/ v9 F+ h( O if (IsUsingItem(pItemElem))
9 ^; L8 \0 _( X0 q' |' J" k {
$ `4 F; P- n2 v% U: `0 L //这个位置无法放& m, l+ d0 b7 j5 l
nDestPos++;* l. G- M5 p y
}
" V/ G4 r% h# }' K$ W }8 [7 F% g( w2 Z' I* l
BYTE nSrc = pInvSort->GetItemSrc(i);
: Z2 q: ^# E2 V/ a7 i: O( W pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( z1 Z& B5 q2 U' }# |$ P6 A6 w7 H& G! O if (pItemElem)
; b$ z. r, a6 R! \6 \3 }2 w# u {
; ?( D7 k9 ?9 Y, s$ m if (IsUsingItem(pItemElem))( w, h+ U2 j% z0 P$ ?; ~
{# Z8 ^. a6 K) {4 T8 u' I# B
//这个道具无法移动,跳过1 ]) \9 I/ P9 A% S& X4 b7 {. _/ K
continue;
2 x4 @3 ] R: y: F) w }
, d. J$ b/ f! R `0 j }else{ e$ n% b8 o1 ]
//空位置 不用动
, S) ^; L( _5 i2 y+ w+ g1 ^ continue;
8 U1 L" Y8 m# ~8 E }1 I6 w' ]" a! G# k: ]6 G4 j
//////////////////////////////////////////////////////////////////////////
) l% a+ n9 _% d3 c3 @ //开始移动
; T0 B3 m8 @4 h1 ~0 @! N if (nSrc == nDestPos)
& K, P8 H- @7 ]9 c. P# g {
: E3 E' q- C- K+ _$ b0 d //原地不动% O( D; h. Q% C# `+ y* G# G
nDestPos++;+ o8 x' N3 p! ]4 @: P. S( m
continue;' p3 D: U$ Y' H4 s n4 k' A
}
& m0 t6 H! m: c5 Q! F! z" [- a pInvSort->MoveItem(i,nDestPos);+ {+ i$ }7 W, m6 a. {, T8 c
g_DPlay.SendMoveItem(0,nSrc,nDestPos); t) e- X0 t: }: D/ W
Sleep(5);% N" e! n2 ]7 X) _5 |. ?. c9 Y. N
//Error("移动 - %d->%d",nSrc,nDestPos); j3 `, M' o# d' M- `
nDestPos++;, v$ P/ X" ~ v" M- P/ ~4 f
}8 U4 f. e: e' v) c
//取第一个元素的信息' g2 P ?/ z" x
/*) ]) d6 C3 W# U) C
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 @- W1 F( } r6 u+ p {
9 v. o$ n+ Q) b1 C% m4 l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( p6 m; `7 L ]( \3 o- W0 q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ H7 b% |; b( `9 \2 P6 ~# {' H
}. `2 I$ d3 v; R) P2 W) k
*/
! ?) O# w) t6 _( R0 M" \- ? //////////////////////////////////////////////////////////////////////////
: M$ ]7 x( @2 @6 h' a D# W break;# D3 u$ u& o1 `; {; Z2 C- s0 @
}* E% h7 l' G( K9 V* Q( H! u: V3 G
} , |) I: C1 S& h' w, y, O& @
}
- I1 \) g+ O; N$ M9 cm_wndMenu.SetVisible(FALSE);" t+ E- H. G: w
" G1 s$ F# X# n* ^ L% C- D--------------------------------------------------------------------------------------------------------# x+ z( Z; g C# g5 s6 k) {1 j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 j. A4 q& O! V5 M
{, ^3 ^! Q0 h4 s4 C
BaseMouseCursor();; \4 u6 ]0 Q3 Y* J
}" z' o% S K! v$ ?8 ^, _( d! Y
在其下添加:$ u* B6 r2 z! j$ D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), C& h) y: R# j/ g3 U8 H) w
{
, F, f8 N! ?- Q# ym_wndMenu.DeleteAllMenu();
7 s2 i0 M- V; p3 Um_wndMenu.CreateMenu(this);& [8 t; X) T D2 S2 h: q5 m6 ^
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: y+ l I1 d2 \" g
' j: h! I1 d& L% w- j9 B& lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 u G! E8 @6 e8 m. M
{
9 U3 v" c4 u0 Y% U //P以上级别才可以删除所有道具
) _ S& s! }$ U d' ? m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! Y0 I% ~3 D' h7 t; f
}
4 F2 U* j6 p2 }. I: q. z5 \m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% Q- v9 H' g4 ]% y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- I7 u9 n; b+ g( v; z: |1 q
m_wndMenu.SetFocus();4 n9 Q8 d4 `2 Q) Q, D0 p
}( v/ t3 K: U8 i
------------------------------------------------------------------------------------------------------------5 f Y1 t% U) f: c' V: m5 v
*************************& h1 i) ~" e* k0 u
WndField.h文件% o, R# ^. ~9 s7 a. a" j) U/ g
*************************, ?: V( {, o$ R& n
搜索:BOOL m_bReport;
" q$ G0 D( [/ c8 s/ N6 w: [其后添加:
- X4 G" `" O6 E, z5 O( O* B/ VCWndMenu m_wndMenu;
. B6 P4 |% M# L( w- g- ?+ _5 O搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 ^ ]# c i$ ]其后添加:1 _! Z5 a( E: x: I9 k. R# b! ?
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 C( X6 Y" Q# m6 [! q9 o- x
+ }+ i( F$ B, h) W% K# n
; S( A E' ?- J( G" A r1 R |
|