|
|
源文件中_Interface文件夹下WndField.cpp文件+ m+ U" K* R1 g9 u: ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" N" C* ]8 H" A) c2 n t/ o* z& r. @8 B' E( m F4 I
struct sItem, V5 S- h( }( F* O$ T7 F7 }6 J
{9 D5 R! x+ J# w& s
DWORD dwId;
; @6 |0 a, J" \( Z1 s4 w( oDWORD dwKind2;
5 s3 Y4 G* `. K2 KDWORD dwItemId;
6 ~* I+ A% k( RBYTE nIndex;; ~/ s2 q4 z' `- e3 l0 ^( E
sItem(){% a0 [; H" _0 `, B% Q. G- b
dwId = dwKind2 = dwItemId = nIndex = 0;" ?: i8 u9 D* ?1 @: u
}
: E) k5 m& A/ K2 Z6 dbool operator < (const sItem p2)
/ U7 G+ e* G( e9 L9 V{* s( a! |! `8 o2 L
if (dwKind2 == p2.dwKind2)
, N, s; u, z3 N) X5 ?% f {
7 ~5 t) w7 r, F1 @+ L* c+ j return dwItemId < p2.dwItemId;
8 T# l7 K" Q5 T4 a2 q }else{
6 n- R# b3 j2 [# b return dwKind2 < p2.dwKind2;
) \3 E8 W; O+ y$ f }
z& ]5 L! q# }9 ^7 c, H}
/ C7 x) _9 F2 @* q' Z4 c m};1 `6 W ~+ ?5 a/ ?% O1 C
class CInventorySort
! ?( R+ s' t9 b/ R{
- g4 B, o. d5 u) s& mpublic:
4 S. D; s Y3 n' P# QCInventorySort()' C! }6 T* Q, h* i
{
. {: Y9 g2 g7 t. ^4 W m_dwPos = 0;" t$ {/ e! s) P7 s4 d1 u$ L
}
6 _) g2 @ O) M9 q~CInventorySort(){}- J6 A7 Q! j, v6 p3 H1 u
private:
8 _/ V' H" O6 ?6 s$ @7 Y- TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& i1 C7 [1 p; D- D9 pDWORD m_dwPos;
s! x3 ^5 e5 V7 p9 Spublic:% d6 J B, H% W; b
void Add(BYTE nIndex)
: a _( i; N4 S/ D{
) E7 s' H) D5 A6 E3 N% j if (m_dwPos >= MAX_INVENTORY)# n) E6 T# [& b3 L5 _
{
; [2 y1 Z" H$ o$ d return;
& c' U7 M/ r0 ~# V* |7 N }
$ L, \0 `2 I. O m_Item[m_dwPos].nIndex = nIndex;
$ _' x( f3 l& @; D# B, x0 ~ m_Item[m_dwPos].dwId = m_dwPos;- w/ |: }& ~* b: i% c
m_dwPos++;
% Q) }, C' ^4 k" ^, u7 |}7 ]. v/ p5 y$ k# E' b
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! W4 S7 O' @, G. b
{! h3 q! Y. k. b D% @$ T8 x
for (int i=0;i<MAX_INVENTORY;i++)! f, S$ D. h. A9 z0 c% \
{7 {; E0 ]5 [' w7 Y1 {
if (m_Item.dwId == dwId); N% y, e: L3 x/ t2 Y: @- U3 e( C' I
{1 t3 v) @1 g6 z+ R' [+ e
return m_Item.nIndex;7 z# }. E; Q2 B
}* p9 k. T" Z$ K- Q/ [
}
' w" Z) q0 l6 ~' u! a; L- w: K7 K return 255;4 l; @$ |: |. Q( D: r! V6 f
} C; n$ P5 o" I# l, T* Q1 v( N( l. s5 C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 Y/ ^5 e. P. P3 M% s* t" E! C& a
{
% k" @3 p, q! ?" S4 K0 l BYTE nTmp = 0;, h* x6 e7 c$ ]
bool bDest = false,bSrc = false;1 q" q5 K' {6 \+ u# A0 x! h
for (int i=0;i<MAX_INVENTORY;i++): c# `; H p. \) f2 b
{' l' Z1 b v% U# ^9 `
if (dwSrcId == m_Item.dwId)1 l4 ?) R" N% V
{" j- F; {& p( s% x% L
//id相等 则 改变对应的dest和src
' X, u2 t8 b) s+ q( d- }" R) D nTmp = m_Item.nIndex;" `+ t" E+ b1 f; D# h# @# L! [( o
m_Item.nIndex = dest;
8 ~- ~) L6 t/ e* C5 e' Q) X; @ }
! D4 t3 J- u P2 P6 r: P$ \: Z }
2 i5 f& M: q I, c' {; G //临时数据保存完毕,交换开始, @5 p6 C U. y/ G) g8 S. j
for (int i=0;i<MAX_INVENTORY;i++)
+ p; C% V3 ~/ K; Z4 A {
2 C9 Q* j. R6 O C# Q if (dest == m_Item.nIndex)
+ O; a7 m3 {% g! }0 o+ I {( f; y P! ]% n5 s& y; J# a) g3 j2 z
//id相等 则 改变对应的dest和src. k& s$ |1 H9 B
m_Item.nIndex = nTmp;" O8 O; p+ W1 M6 p5 A$ m& F
}% d% r9 X: p% I
}
0 E5 |4 C- d' L. V3 N. {6 G}* `) a% q1 k& z3 ?5 p
};
6 |2 ?4 h! I3 \6 X( r& Y-------------------------------------------------------------------------! T% G% F! o; f4 u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 s F2 x: ^! d1 E' u0 K: E搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- T5 g2 {" N: g紧靠其上添加:
6 U. D/ \& Y8 a7 i3 F* M3 {if( pWndBase == &m_wndMenu )
. Q: @; F4 I" v7 p' ~7 g{
/ O( |) z1 v% S, Y, K& ^ switch( nID )7 ?" w1 X) V5 j# y+ }
{5 n* k) n, P5 ^ B6 {. @9 M
case 2:
2 y7 X6 d' a0 L+ y& |. r7 Y l3 W {
- H6 Q! q: s, j% K" q: ?$ l( O //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 A+ f% B: S4 e7 w" f4 @) J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) M" P7 u, {; c3 K {
: g( }3 `. ~, U1 A; ?; S; X break;- y/ ~8 |9 [/ d- y7 O% r
}$ u# W3 ~2 u3 N! ~ Q& T0 k% |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! N/ I6 d5 W, l$ U& @
{
! Y3 i. Y$ C# Y6 o& I4 h% @4 R+ } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, f% K Y0 C, a$ I2 b. E
if( !pItemElem )) b1 J; c+ X5 `0 m) f ^& G
continue;) q- o: Q7 _3 n- ~
if(pItemElem->GetExtra() > 0)
/ U, }" @% m6 D+ H; d continue;
8 v; ^' T+ |% G6 v+ o% ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + h: M- R* Y3 |0 k$ o' s- t
continue;; j5 ]5 T3 N- L$ p
if( g_pPlayer->IsUsing( pItemElem ) )
4 b) R+ D- F8 I continue;3 g' E. v2 `/ q
if( pItemElem->IsUndestructable() == TRUE ). u. }. T* a4 K- [. }( Z: c
{4 _- g/ ?' i& Q2 v+ j+ p$ a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; Z$ c! |& L' S# }) P5 F+ d
continue;4 S3 W' ^& n# I) ]( l4 d
}" j5 ]/ D4 c# g9 g7 n: b+ Y5 w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ U) R+ d+ F" u5 I0 ` }" _. e* D; b4 O* c2 Q8 W. Z
break;( ^0 X8 o* e0 Q; ?9 N
}
& q! b5 @1 H; a8 p/ o case 1:
# c9 x7 b) m6 s {( O7 c3 Z! C2 V! S% i2 @3 x
//整理背包
* z6 @! O8 m% {/ }( S //////////////////////////////////////////////////////////////////////////
( n& c1 Z4 X& v: u1 S* i7 N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" M; z* g6 G# \+ h0 w7 \( E
//////////////////////////////////////////////////////////////////////////
- I8 {) F! z4 z //////////////////////////////////////////////////////////////////////////
* H7 {8 Q3 A% D6 V) Z9 A CInventorySort* pInvSort = new CInventorySort;
T0 R5 N* @$ H7 q# y5 @( b vector <sItem> vItem;
2 z/ |6 J: W* C* L# t vItem.resize(MAX_INVENTORY);//初始化大小
3 Q% r) f, x6 } //////////////////////////////////////////////////////////////////////////
% `- p' n5 O" ?. ^ //填充数据( J% p, v, ~" [6 `
for (int i=0;i<MAX_INVENTORY;i++)
* L& p. u) ^4 F { r" ?/ A7 W' [9 Z) l O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% I5 ?$ h m, W' V if (!pItemElem)5 @+ \/ d& o3 ^- Q: q
{
; U4 k9 o8 x# D3 l# B. O vItem.dwKind2 = 0xffffffff;$ y" a( N' D7 J* U2 ^
vItem.dwItemId = 0xffffffff;
' O% W& k/ K a; s+ n vItem.nIndex = i;
" v* m; E% S7 x5 b# k }else {
! X4 K3 G* H6 T' J# R ItemProp* pProp = pItemElem->GetProp();
6 M+ H& M( M2 x9 F# W! K- D vItem.dwKind2 = pProp->dwItemKind2;5 U) z, ^& s* o. M8 h, S+ L/ c% {; u
vItem.dwItemId = pItemElem->m_dwItemId;
% D8 S* b. I1 n3 P( ` x. W vItem.nIndex = i;
1 o1 u. X. g7 ?6 W0 {! l' u }2 u1 X/ u' U6 m& S. Q, \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
o* l2 T+ n7 S" j' t, l }/ s+ R; E' Y3 ^1 C
//////////////////////////////////////////////////////////////////////////2 I' T: \# J4 O' e
sort(vItem.begin(),vItem.end());//排序9 {; v0 \! h: R s8 M0 v
////////////////////////////////////////////////////////////////////////// u/ v5 I9 i; z2 [" o" U
//交换6 e! @. B+ y0 n2 A) T+ r
for (size_t i=0;i<vItem.size();i++)' h7 a* h N# t9 h( d) L& H6 H i
{
0 X* n8 f" ?. X: l7 E% R //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 l5 T$ V& M5 V pInvSort->Add(vItem.nIndex);5 h8 T, m# a8 ^! D3 M4 r6 z
}( D+ ]7 o) \: T& u3 W( }$ Q
BYTE nDestPos = 0;
`# S* v& T0 G% W for (int i=0;i<MAX_INVENTORY;i++)2 |$ v T$ H: p M
{ ^& {5 v W5 G: {. T+ A# b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); u0 f6 j$ k( f+ j2 i, a+ y$ F2 g
if (pItemElem). o3 N* y: b8 o& y, I6 r6 E
{* r4 x I. g9 u/ G8 c2 C. Z& x/ a
if (IsUsingItem(pItemElem)) }/ j" K7 Z$ @/ y& _8 K. o1 q, w" _
{
! w2 V( @6 D7 s ~! R. _ //这个位置无法放: L V% |% E- i$ K3 ]& J
nDestPos++;
5 w2 i9 ?# ]# _ }* M) k( \( ~4 l: t0 K! e0 G
}, s1 P% S- C) Q# J( s
BYTE nSrc = pInvSort->GetItemSrc(i);. n6 O# g/ E7 W( b( g1 p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 W- u" Y+ k& s9 T
if (pItemElem)
5 E" H4 K) d9 o' k {
2 A$ A' ], T; L0 n t; } if (IsUsingItem(pItemElem))
S% F. R# U3 |- G {
$ u( K+ G8 {- Q" }1 r3 t8 o //这个道具无法移动,跳过# `0 x# N; s7 H
continue;
+ {+ ~- j8 k$ g% z. x6 h }
- }* ]* Q3 b2 \& P }else{
" O6 x0 [" `9 r J2 o9 ^, a# i7 H) O //空位置 不用动% B& \3 t+ S, Y; i2 f
continue;
( j9 r5 I' `& H% W }) I+ m f' f# J% x, `3 a' Q
//////////////////////////////////////////////////////////////////////////& z6 r, T9 _: E9 D6 n
//开始移动
3 A1 j+ ?) q1 R0 _& U7 V if (nSrc == nDestPos)
! ]" ]: }0 z$ E7 ^4 _ {
; I7 {+ f$ w2 p //原地不动
) w! N8 u, [: o' c' R/ M nDestPos++;
: R$ W r2 i: j" C: ]6 |0 \$ { continue;
/ H1 c- i! T0 |3 @9 G6 }0 Y& R8 P- ` }
( L% K( B" l4 t4 c, {# _ pInvSort->MoveItem(i,nDestPos);6 {) y" z0 Z8 C% ~7 i: x- X. }$ Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 l* x8 J2 r; @! S/ p6 R) I
Sleep(5);+ Z/ Y5 [3 F! R6 q! ?- o
//Error("移动 - %d->%d",nSrc,nDestPos);
( w- N/ W& A- y, z% e. T nDestPos++;/ S3 o! P& a0 o5 t
}
+ w( ^! d! Q) m" [ //取第一个元素的信息" Y) H) t- q6 h( o; H* Z
/*
: n& O" m G( n/ g4 U if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% N2 G0 p$ e9 Z2 J {
) C5 \2 g. k& O0 _ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# F s7 g% a( d) ?) h8 b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
\. v3 P g- Z. _/ r% D }
Y& Z" i+ i8 q4 B# i4 k7 L */8 {7 V1 C7 j; T* H j1 v& L
//////////////////////////////////////////////////////////////////////////
" m0 }) Y4 c# _9 F1 I% A break;
! I' R- Z. ]) B t2 l$ {+ _ }8 ?( c/ A) L0 G% I4 `1 x7 V q
}
$ |# u0 K+ X4 h9 X' h1 D4 X}& t1 L$ K' [1 _9 f9 B" W
m_wndMenu.SetVisible(FALSE);
# g$ E* }) ?) H! {
9 D1 Z6 Q- ]- M% Q s7 W--------------------------------------------------------------------------------------------------------0 D! G. e, F% G/ {1 {+ r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% G0 D8 q) J9 w2 L; }* k
{1 f8 U2 P: G5 V: W6 A
BaseMouseCursor();0 r7 u5 {+ ^/ I/ }$ f D
}
8 K" ], `$ s; P3 H/ D; U$ }在其下添加:4 B" e4 {2 b0 y) _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; G* \8 X: e0 W4 S{
8 c' U2 V0 k3 X8 F% {m_wndMenu.DeleteAllMenu();) v( J w" A# a z- \: Q6 p
m_wndMenu.CreateMenu(this);. V$ V9 S# R( K/ M. i
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% `7 ]; c. L* d0 `; O0 X# a% ]3 R1 K$ y6 p$ x2 J' `" l z! k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: b" V6 W8 L3 @0 U: t- y, b{" Y+ S2 P3 C% L( S2 M
//P以上级别才可以删除所有道具
9 o, \! o/ I) g6 w& U* c4 Y& G: r7 v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 w- Q; h; Q& j8 `# w1 a/ _. L6 y
}
6 @; Y |* B$ q. o& G. d/ f# ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 X9 K- s# J, s: K, B9 s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 f+ I1 {8 Y9 X* g* X* hm_wndMenu.SetFocus();3 k/ i* W. [2 D
}
e, E C& n6 w! G- ^------------------------------------------------------------------------------------------------------------
0 l) I" W( |- D n*************************
' l6 \" m% q1 h' m4 c u3 ~3 EWndField.h文件0 _. d& J* ]4 ^
*************************/ d: \! a. N$ _8 o/ ^
搜索:BOOL m_bReport;
1 W6 N" R* B4 d [* d其后添加:8 g) U0 V4 b8 P
CWndMenu m_wndMenu;; h6 l. |- G* W+ z W/ n9 X% b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 ^% w7 E& ] \( {+ T. X其后添加:
. S; T3 ^+ l9 @5 ^ tvirtual void OnRButtonUp(UINT nFlags, CPoint point);) _6 l6 Q4 D) F3 L
9 l3 G4 `7 ~) j% |2 @2 q P
$ a; \- H: Y2 u/ R! w |
|