|
|
源文件中_Interface文件夹下WndField.cpp文件
. N$ {* M: |, D& D$ q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 Q8 t* j5 l8 p @. _+ I; l/ c
% X' A5 \2 @# I* a2 L' o
struct sItem) |* `5 J% ]' G, D
{, {5 v" B3 l) N* `# S m4 @
DWORD dwId;$ H4 Y! r: E7 D6 ?3 M* c. ^# d# |
DWORD dwKind2;
+ D( k5 ]- u# _DWORD dwItemId;+ g% e1 C L" p3 r
BYTE nIndex;% x( q" y) b/ a- C; [
sItem(){
8 H! O. Y5 c0 k3 n8 I2 ^ dwId = dwKind2 = dwItemId = nIndex = 0;
+ p; V$ o' o2 m}
$ P' X3 w' |+ r2 o. j9 Tbool operator < (const sItem p2): T0 e9 Y' S7 r' g+ [
{8 O, @2 M6 _$ \- a
if (dwKind2 == p2.dwKind2)& Z0 A1 N. X" ?/ F: w* {0 F
{
[6 m- Q, z i# g8 o+ B return dwItemId < p2.dwItemId; X# ^% X$ X5 u( t/ [+ O
}else{
4 w& h) s$ \+ b# T0 ^ c7 P return dwKind2 < p2.dwKind2;4 p/ v" y) `8 J" A6 @3 T }
}
+ b; {! B, c4 T( V6 r ?}; [6 _, @) R. E. x; {7 I( y
};
* L# q' q, U S8 mclass CInventorySort
; @! v t4 \- J{
* J* ]; f2 s9 }$ q6 qpublic:* S6 a3 T. F/ @* V
CInventorySort()$ N" |% h1 F% C
{
, h" q( G% F; b! c m_dwPos = 0;
- V7 Q# m! S% J' F1 ?}
: t- Z# ?* z {8 i~CInventorySort(){}
$ _6 L" t( r* W2 ~- Vprivate:
. u% {( x1 m' _( h$ J+ M! B" osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 s! h* _$ v% q! k. g% B
DWORD m_dwPos;7 b! a- j9 i( H X$ N
public:
6 P! F/ B9 T2 s. J' m8 Bvoid Add(BYTE nIndex)+ m3 J6 h& I0 ~
{! p4 _7 r! t) M$ _0 M9 }, K
if (m_dwPos >= MAX_INVENTORY)
/ u% ^. j1 e; f& H6 R6 y& f {
0 c$ ^( @ _1 M7 Z+ o return;
2 E; _8 A. K- e }7 ~% ]6 ]; T# H" q3 y+ I! A
m_Item[m_dwPos].nIndex = nIndex;: o( G- u$ _, ]1 ^2 I. A2 F
m_Item[m_dwPos].dwId = m_dwPos;% w8 F! A) X# G2 P+ y+ r W
m_dwPos++;6 m; s! s5 L( K2 m: w8 j7 H
}1 U4 S( E" M8 u0 ~4 G H
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ W: m/ n l5 \/ G8 I$ q5 X
{
: H- \+ y9 z: b- }! S! ]( C: m! ~, ^ for (int i=0;i<MAX_INVENTORY;i++)
% M2 c% _, ?6 J8 ~# O" I7 Z {; e9 r3 \5 C8 ~- M l6 c0 a
if (m_Item.dwId == dwId)
8 v* E) n* L& ]% x+ Y {
3 `- j- N4 i& z! R1 |5 g$ }, ~8 J return m_Item.nIndex;% d, R) ?6 O. u2 Q3 P- C+ }
}
6 F& L: K' h# M: m7 `" F1 y1 D% W0 m* C) R }
8 G$ `( R- |( w$ V: d+ m return 255;
- z J6 g: ? Z4 T" s- K2 A. S G}9 n4 {3 r R2 \9 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: B& Q/ O/ L- l$ N o1 f
{. G: L h0 i* a& ~# s+ m; y9 c) }
BYTE nTmp = 0;
+ ~3 J0 j5 |) e8 d: g' g bool bDest = false,bSrc = false;
: }& Q! o, G: L+ k+ b o: c for (int i=0;i<MAX_INVENTORY;i++)! N0 _5 |* d0 ~+ n
{$ _6 F* _' w9 ^- M: z$ c
if (dwSrcId == m_Item.dwId)9 K' [9 m! _$ ]
{
4 \) u8 g9 ?" R //id相等 则 改变对应的dest和src
( `& x7 w1 z W nTmp = m_Item.nIndex;
3 Z* R% s9 ^# b) ?. d' X5 D m_Item.nIndex = dest;7 m& z9 \2 F, d
}* K4 B, G8 t; \. A, Q3 P" X& z5 F
}
6 N8 {) d, E+ k# E% Q! b5 Z //临时数据保存完毕,交换开始
& Q/ l$ Y5 O( x( U0 a0 i for (int i=0;i<MAX_INVENTORY;i++)1 N f" q7 X0 X
{2 q( p' }5 V R- @0 `$ N
if (dest == m_Item.nIndex)0 }7 l5 w7 Y0 x @
{5 ]' J3 B' i1 i# K+ T
//id相等 则 改变对应的dest和src
9 s) \2 S9 S# C( a4 V0 p+ Y m_Item.nIndex = nTmp;
& x; U1 f2 e% f6 u4 }( Y* A4 [ }( y5 {# H1 S1 A4 R9 ~
}
: L5 |# g, [6 g: J1 Y! P}# H; C( @+ _) A! a( b$ ^0 P
};
! t0 y, l- k4 h8 \-------------------------------------------------------------------------( L$ `7 b6 w+ k9 \+ u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) ~2 a) {, f' ~% x% L- ^* I4 R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& y+ e# k, g) Q$ Y9 F) V e" L紧靠其上添加:) x" b9 H9 y5 Q2 c; j
if( pWndBase == &m_wndMenu )
, n6 _2 o; C3 I{
5 o/ a4 K3 a, R3 P# p9 k, D switch( nID )& L2 U0 v0 h( X: ]) ]
{
: f4 U- C9 Y; \4 i5 D( X case 2:
. k$ V9 l v) {7 o {
; @9 C( }/ C* V% B$ H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# K) E1 m- p3 M, y% ^" @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% z4 v& i9 j; F) K; h {
/ W. p+ W/ E4 b( _: P0 c+ _! d4 ? break;3 z9 T4 }/ ]. D0 f/ }. A- |
}/ t- p1 m L! \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 c3 R& A- C" p4 I1 Q% p& P
{
3 R# Q/ e2 \( [0 d* Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 @9 P* L$ q, `3 C if( !pItemElem )
; W% M! ^( d8 X6 A1 @& V3 g continue;: d" L/ S. A0 a8 y5 T
if(pItemElem->GetExtra() > 0)
9 m% |1 s0 u3 f2 V: f continue;
& g, Y& a5 @+ k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 H* Z! n0 D, L& f+ D, O9 r1 v
continue;8 X6 z) O) u9 j0 P' b C1 Z
if( g_pPlayer->IsUsing( pItemElem ) ); t$ \' ]+ O3 L5 ^
continue;
- W7 G: u% {, W8 H+ A1 f if( pItemElem->IsUndestructable() == TRUE )# Q5 A+ Y% C* n" M- O# v
{; r4 U2 b/ N: O: e2 N" `' V1 m
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% {4 K/ b% ~5 B
continue;0 U+ q# M; r. n
}
9 |3 U% c* n7 M8 F! ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- h' _: m3 ]% a9 g& Z }, q/ T; H2 j6 y7 y7 u( c7 n( W: h
break;7 N$ Q) N* D* ]
}' t7 B( A# ~6 q; S' ^) @
case 1:
. B) k! D! M% X! n& K- n$ T! \" p a* B/ w {
9 g1 r7 H/ }8 v //整理背包9 X5 P8 S; |: p3 a+ p7 w
//////////////////////////////////////////////////////////////////////////
0 v: g! f4 ?) t2 e( n' d# J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- B; h" T& K1 ~ //////////////////////////////////////////////////////////////////////////, S c0 ^7 {( J$ P8 K
//////////////////////////////////////////////////////////////////////////
7 y/ X5 f% W9 l CInventorySort* pInvSort = new CInventorySort;+ Y, }8 W# d: U+ O; p
vector <sItem> vItem;+ V8 J5 o+ E+ U5 }7 n
vItem.resize(MAX_INVENTORY);//初始化大小
7 H1 F9 }- c6 M3 X, P1 C; V: {4 K //////////////////////////////////////////////////////////////////////////
3 \/ k0 S- h3 x! c! P# U //填充数据
. \- e# }2 j1 @ for (int i=0;i<MAX_INVENTORY;i++) T% |6 X' D. ]# W
{5 U) f/ j ]* E* }; I3 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 X( Q( P4 p4 J0 M if (!pItemElem)
+ e; T+ V4 R7 q, G" f+ J0 V( P {
; G9 ~; `) T5 m7 f- E vItem.dwKind2 = 0xffffffff;1 G9 ?9 Y5 A2 n; L, t7 i% w1 m: I
vItem.dwItemId = 0xffffffff;
V% {! s) c# A% J9 t: I7 G& ^ vItem.nIndex = i;
& d. T* R7 k4 y, s8 b }else {/ J% B9 B; i1 Z! o- n( [
ItemProp* pProp = pItemElem->GetProp();) w5 ^4 Q' j9 N5 f+ U
vItem.dwKind2 = pProp->dwItemKind2;: O; Y& B* J l8 G( {
vItem.dwItemId = pItemElem->m_dwItemId;* i5 \4 U# X2 X3 i; m, R4 k
vItem.nIndex = i;
3 X/ v$ s( C* y3 n }$ Y, N! O. ]5 K! I* Q5 X& Y9 c
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& _) k* H2 x) Y* H0 [! `! v2 V/ F# Q$ C- Y }* e7 w" H# ]+ H
//////////////////////////////////////////////////////////////////////////: W) L1 u- O, s3 U4 G! o
sort(vItem.begin(),vItem.end());//排序& r) h5 n# R' q+ `, E
//////////////////////////////////////////////////////////////////////////
% r' @% O( ^$ B4 l! I1 |4 M, b$ _5 ?0 m: [ //交换
- l! N( Y: j( |, b; f for (size_t i=0;i<vItem.size();i++)
# x5 w3 Z+ [( t9 w0 P/ u3 q' k: d0 | {3 V7 ~" k! A% h: _! z6 ]9 \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! A6 G4 r6 A4 A! N0 x; R2 e pInvSort->Add(vItem.nIndex);6 C K# ]# K: E6 Y- V2 w
}
0 |4 a: A; D- B$ W$ B- f BYTE nDestPos = 0; [- x# P7 D* N# ^ g
for (int i=0;i<MAX_INVENTORY;i++)! q! r1 R0 W, ]: j( s f' v
{
7 h5 G* G3 j) }; }# l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, n! z& h1 R3 I, W/ ?' j
if (pItemElem)- w/ @# a; i8 @9 Q
{4 c5 o4 K' W: t/ \1 Q2 b
if (IsUsingItem(pItemElem))! Z& q( }) N0 {: W# L& k
{
* `4 n9 Z4 j# M7 f- R. K //这个位置无法放
/ v( |6 d5 E6 B( t4 _ nDestPos++;2 q5 s: X0 N9 C; g, v2 Q0 P9 e
}
6 y; \/ {1 l, {; s: W) s }4 L; \. o M0 [7 s; [& {4 I: Z9 a
BYTE nSrc = pInvSort->GetItemSrc(i);
' t) Q& B( N* n1 b' Z" S4 | pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; t5 ~: o6 H5 \; p. L( C! _ l
if (pItemElem)- Y% I2 h3 v8 I$ _9 H2 `
{
( |/ J" }; Y( Q5 M; i if (IsUsingItem(pItemElem)). A/ H) u6 Q, m% R
{) O$ k5 o/ n9 w+ C: w& ^* f1 M- W
//这个道具无法移动,跳过
- t3 c5 j) |. t) J( s2 g8 g continue;2 [; {$ w8 I( s* a$ J
}$ V A) R( ~% M
}else{& z2 n/ ]; _* X5 R. q
//空位置 不用动
1 P7 z. A }3 Y continue;
7 B a; o: l% u( D& ~ }" F4 O$ u p% ]0 ^* b% O
//////////////////////////////////////////////////////////////////////////& t" @' g8 o, r! c- [* a A
//开始移动
4 t; O8 u# f+ w! z) ] if (nSrc == nDestPos)
9 c, o6 q1 i0 d" D {
/ {, r/ ` h& \; L //原地不动
* N( e, i* Z7 Q' ] nDestPos++;
+ w9 x2 L3 T3 M' f! a* W$ p% ^9 N continue;
# A" ]: y; I" I2 R! v }, j4 f* n' @' v) p$ T" B
pInvSort->MoveItem(i,nDestPos);
4 }# a& Z7 q; n1 \8 j, T( M g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 i$ P9 C; c0 d; D5 M B, l! y
Sleep(5);' b! _: `/ J: D0 `
//Error("移动 - %d->%d",nSrc,nDestPos);
" A+ m4 }! W; ~1 y# | nDestPos++;
4 w3 I4 T! X% L4 I7 u' `9 X }+ o( \# O1 ^1 _2 G" B% A
//取第一个元素的信息
0 k$ R( Z( m# X( o6 P: {2 c /*
4 b/ J, m) i& e" k7 G: V if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), K, `1 g# o" ?3 D
{) Y" a i( A3 T; b
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ ~0 j. l1 L& M' v* I3 c g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 i2 l4 M4 C3 ~; d4 F; s7 V
} t5 z5 Z( n$ `$ k# v+ g
*/
1 X/ |- e6 {) s /////////////////////////////////////////////////////////////////////////// I7 I6 B6 Z- u3 [& U
break;
+ a2 x+ R* C/ V }$ O* H! o! U) P2 p3 N$ {
}
5 ?2 y) _- ^3 R& ?9 x0 n. r}* V! [) M. O3 S
m_wndMenu.SetVisible(FALSE);6 W+ U! |" Q4 o3 Q' M
& G$ m* @) K5 i6 _
--------------------------------------------------------------------------------------------------------
$ \- \1 ?$ u* S* x" K. H' G搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), V5 [* t- ]$ `8 V! J9 g( d
{- K5 B3 k) r' j/ J4 S% y8 ^3 f
BaseMouseCursor();1 v( t+ j5 y9 `" M% y9 U
}
Q7 n, R6 D9 `+ p0 q在其下添加:
! y8 ~$ X# C% O8 R6 K5 p- yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ M* E- T) F5 h1 i3 Z) ~; r: \{8 \3 a5 D W& Q
m_wndMenu.DeleteAllMenu();' n |- {# g! @ M, |
m_wndMenu.CreateMenu(this);
V0 l E. R5 g. Ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); H0 Y( G& r9 C$ L
: D9 Y8 C; i0 u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 Z2 `/ o6 Y% @0 i% X8 Q. A{6 Y, F, J6 z7 p& G: @+ F' H
//P以上级别才可以删除所有道具
8 r6 F3 d9 b8 R `" `" \3 ] m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 J& R8 t6 j* c6 V% k}8 Y7 @( w9 \: p1 b4 Z. N
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 M2 x: I3 }1 s' k/ ~# Z Rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: ^ H- i: h+ I& ], k, O5 Em_wndMenu.SetFocus();
8 b6 D% K4 v2 T# y% p2 \* O- Y4 |}
9 O7 v" ?! `$ ~/ Z- O------------------------------------------------------------------------------------------------------------
2 ?* Q7 _9 u* c2 n*************************; T" U/ g3 e- W6 d# W8 `( Y
WndField.h文件. e* Z S2 v R: j) s( U$ \: A
*************************; P. I- W$ H+ P& \7 Y( b
搜索:BOOL m_bReport;/ n5 ^1 ]+ |1 `+ C0 v1 _
其后添加:( V- P& h4 C% m+ i7 R& O \
CWndMenu m_wndMenu;, w' T6 ?& O/ F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ V7 W' d& j4 N, \9 m
其后添加:
$ X' X- \7 O7 O: u! b. G% Qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* _& d" E. c1 W4 z, V2 N; ^7 |5 E ?" i5 A. A
- t9 X/ q- ?) k2 i! e
|
|