|
|
源文件中_Interface文件夹下WndField.cpp文件
7 @+ |! ^% z; v% K( p& s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 X9 x6 J* Y. i5 d
r& F. f" ?4 kstruct sItem
; z9 Z& a- i: D( F{
$ i' g. m7 {7 H8 MDWORD dwId;; j, D, i: q2 O6 r1 m* r
DWORD dwKind2;9 l }1 {- `- c( }
DWORD dwItemId;
3 `5 X# y$ l( `) y. N8 tBYTE nIndex;0 C: a3 P3 u* X
sItem(){ A# c( Y9 g. _- _# V* B. H5 G
dwId = dwKind2 = dwItemId = nIndex = 0;: @6 N1 Z. B- r" j
}& N0 `3 J( S; n0 }
bool operator < (const sItem p2)3 g6 H. |: e4 F$ p
{( D: K& B; g, C8 v9 f' m
if (dwKind2 == p2.dwKind2)
- |9 p6 A+ n. [7 y- n/ d {
6 y, {3 W- r' Q a& K. l' x# a; v return dwItemId < p2.dwItemId;
, J1 p+ x1 i) c) l% s }else{! Q% S; @$ @% P A4 ~9 p2 F3 x% E
return dwKind2 < p2.dwKind2;7 J# `" F" K0 p
}
# G8 O. D2 ^7 x: [}
9 z4 O# e8 N# q* \* g};
G7 b1 p+ z4 |2 d: Vclass CInventorySort8 W# v; c& F. l
{ ?7 m$ [; Y5 T+ [0 A% m" I3 s# w) q
public:
8 _" p1 u5 o) ~1 {/ P6 [1 hCInventorySort(): L, n1 s! q5 {) Z7 ~1 E0 t! f
{. E5 C# T6 G3 W6 A! {, Y6 x. j" E7 B
m_dwPos = 0;
5 I$ w/ w# s- K# m}
o, n' T( s% v! w& m~CInventorySort(){}
; Y7 J9 k1 L1 @% e( n0 Kprivate:
. }% H8 [1 u. c& r5 H3 IsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 T) ~! i3 p" ~4 c* F% w
DWORD m_dwPos;
3 q D7 t. m. k' \* i- t6 h' Rpublic:. U$ k) z: n0 B# w
void Add(BYTE nIndex) r, Y( r+ j4 o& s! y
{
0 `( B! t( y; H4 u6 J% A: G if (m_dwPos >= MAX_INVENTORY): m* \! ~, o6 u V
{/ Q0 y- A& f! H
return;- ]* g q9 n; b$ V6 q; {7 ]
}
6 S6 C4 b' q. i; |/ o# U m_Item[m_dwPos].nIndex = nIndex;6 y, t( E; g5 Z( g- J& p2 b3 U
m_Item[m_dwPos].dwId = m_dwPos;' r( {+ E/ S( y+ X; W2 [5 m) V: A
m_dwPos++;/ w8 R, r E8 u* m' k, K# G
}
! j/ t/ {) P' p- B, g" x. sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' U: H$ }! w9 N) {' ~" v9 B{
/ Y* e& Z) X# b0 h9 u/ e for (int i=0;i<MAX_INVENTORY;i++)+ o! n8 l# N( \' g6 Y1 _( N
{# G8 e4 q4 N0 Y3 ?' |( Y
if (m_Item.dwId == dwId)
4 |4 S" O# k) V1 G# I& [6 I/ p2 E {
) ?( l5 Y6 z7 c return m_Item.nIndex;/ J' i6 P' o$ F) W2 a: D. q5 |
} }3 q3 J2 P' N& u
}, j/ `+ ~2 Z. |4 G" Y$ A, M; ]
return 255;
8 R) |: C+ w" o1 W8 O}0 k0 s8 Y! o# t5 }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 F& P D; D1 C{
5 X) G7 T* n8 U; T BYTE nTmp = 0;% z3 |1 q: ^" g! G! T$ ?2 y5 ]
bool bDest = false,bSrc = false;
. |4 x2 {4 g$ U for (int i=0;i<MAX_INVENTORY;i++)
( b. N! g- `/ |9 p {7 l) G8 c* x: [( l
if (dwSrcId == m_Item.dwId)+ M' f3 \, I( w3 S$ n
{
/ h6 v" U& L% O: I //id相等 则 改变对应的dest和src( R4 p5 E m" z/ g1 X
nTmp = m_Item.nIndex;9 N$ U4 H2 L0 D8 W$ b9 T
m_Item.nIndex = dest;' P; C; G k/ X2 b& M0 J
}5 g) [% k4 Y L& }6 M$ W8 b
}9 q% H5 s5 M: l7 |* y6 T0 s
//临时数据保存完毕,交换开始; N+ G2 i; B ^8 o" R+ k
for (int i=0;i<MAX_INVENTORY;i++)
$ V& t# B# }( {: f& I1 C k5 n% Z1 g& ? {
+ D: p+ Z- a# G' g( B7 X& e if (dest == m_Item.nIndex); V" p7 E# K+ R3 h8 F. E5 g( {; Y M; b7 y/ v
{
) y. |- F# \( l( s! q //id相等 则 改变对应的dest和src
$ J+ q$ e- h& S# S m_Item.nIndex = nTmp;6 D% m# o$ J1 E6 h
}
8 l( [8 W# ~2 l2 C) H' G }
7 j9 }+ G/ C6 L1 {6 i9 T5 ^4 |}1 p8 [" F7 Q$ i# ^( A' ?$ f% O. E: j4 ?
};& J/ ?/ d+ q9 W$ B( m% R
-------------------------------------------------------------------------7 U$ `0 r) y: p" @* C
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 c; P9 c6 [8 o0 _8 @% w
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 G' w/ w a Q. {- L) b紧靠其上添加:
0 b0 {$ H/ B0 l1 }if( pWndBase == &m_wndMenu )8 \3 R$ j4 { s( V
{
5 a7 `9 y$ W* s1 h switch( nID )
: @, [8 {9 ^& w {
5 y q; o5 Y5 b% g7 I4 s case 2:8 Z" Q/ g3 [9 L# W) y# ~' w! I8 Q
{) c2 u' D# Z8 U- w0 [
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 P+ Z. @, Q5 G$ p) ^3 b if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 Y9 e9 B7 u. p J! y/ J0 ]9 b) ` {
6 i- g& a& i3 l% ^! [- ^6 B5 O break;! S l! m2 o6 R+ i! i3 N1 r8 P) r, @: }
}
, e* t1 q5 k d% Z% y& Z# Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 P& P9 q" r1 U' w; s: S {+ x7 w6 R# s) g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 s0 q9 g$ g# ^' x! v; X1 S if( !pItemElem ): w2 [: M, t7 F* }. G$ s: D
continue;
: F6 K; H& I4 p if(pItemElem->GetExtra() > 0)) V1 D* N# k/ G( O. s
continue;0 ^, j8 L9 a8 x2 z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " V8 N' r; L! k# z9 \1 `
continue;8 |% P3 A$ z/ {. k* u. R; k: `) o
if( g_pPlayer->IsUsing( pItemElem ) )
- |1 E [+ L+ q% R8 _- A6 H8 p continue;
( f3 s8 ^' K+ i/ g2 v* I if( pItemElem->IsUndestructable() == TRUE )
7 ?0 o0 l0 c& {& y: n) S, Q: j8 k8 B1 B {
+ y* f+ `! j1 @6 V8 } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# o2 {: h9 @1 G3 j9 Z0 H continue;, t: v( K- v& |
}
/ p; }/ M+ Z3 Q* j, y; y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" T2 g6 x2 P6 i; V5 r2 E; ~
}3 d7 T/ s( z8 D% Z
break;/ g9 c6 q! o" o: U: r) M* I
}
. \2 X% K' _; o$ h( ] case 1:
+ e* e; l' f* I( V& u/ Q {# Q% S A: ?0 p
//整理背包
+ U8 e# h- P8 |( I //////////////////////////////////////////////////////////////////////////+ u9 G7 t0 y- C; D$ n
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 {0 b# c3 m8 S. v //////////////////////////////////////////////////////////////////////////
/ t8 S' e/ {% Z& m2 C //////////////////////////////////////////////////////////////////////////% e+ U% d" f3 N0 z& U% [2 e
CInventorySort* pInvSort = new CInventorySort;
+ v' C4 O6 B: s0 X x vector <sItem> vItem;
, r) a1 }/ ~2 R: p+ y, o vItem.resize(MAX_INVENTORY);//初始化大小
! E- `2 P6 Y2 b7 ]5 Z. q //////////////////////////////////////////////////////////////////////////0 ]1 ?/ f- B2 H" ^( T
//填充数据
$ v3 W" a$ b% N; R* ~ k' ?2 b for (int i=0;i<MAX_INVENTORY;i++)
0 ^3 a% I1 Y3 c* Z {, W* X! }" _$ {& r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 e/ y3 {/ ^1 t# l( L( J
if (!pItemElem)
/ W2 K# @4 [& b# b {
9 W. f5 Y. S) q% ^0 g. R# o vItem.dwKind2 = 0xffffffff;
, E; i, u. c7 @& @8 N9 N vItem.dwItemId = 0xffffffff;
& C9 g T- T* S p: Y1 i h- @0 a vItem.nIndex = i;
6 t) q1 B$ }- n) D2 I' X* v7 Z }else {, ?# I, z( `# d' E* N7 f
ItemProp* pProp = pItemElem->GetProp();
0 ~ W5 q) X: c$ D, w vItem.dwKind2 = pProp->dwItemKind2;# h* }& F3 g5 a+ d4 n
vItem.dwItemId = pItemElem->m_dwItemId;7 m( x3 [: i1 s6 i) ~/ y. Z5 b6 a( w* |
vItem.nIndex = i;
A: B4 L) u2 a8 X* t }
+ ^: _0 q2 A- s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) x/ B- o- `' @8 r+ U2 ~8 |9 t# f }1 ^' y& F: U4 ~# x
//////////////////////////////////////////////////////////////////////////
; w1 p/ u2 x, z8 ]( q! g6 U: b- ? sort(vItem.begin(),vItem.end());//排序
$ w# V1 s* V4 V( k2 z$ H$ I+ y //////////////////////////////////////////////////////////////////////////- m6 W2 ~# G. ?/ x8 V
//交换
7 d* c: d' D) ` for (size_t i=0;i<vItem.size();i++)# F8 E3 S. f& g" j; \: ]( L) G! b
{
% c$ R1 S5 R# L! L \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; L2 S4 n6 F+ O9 m pInvSort->Add(vItem.nIndex);+ g) L! ?3 e& A' M
}" }* f$ ]$ W; b9 o9 b9 H; `
BYTE nDestPos = 0;
: Y$ j* S, a# m! l9 n: M for (int i=0;i<MAX_INVENTORY;i++)
0 y0 N4 A& n* O$ ~' ^2 [ {' X9 ~" Q7 k# b; X9 V4 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 R4 X" I/ L0 E$ u* c$ n
if (pItemElem)/ a+ d- |4 s4 @' a6 x
{
! F* t" l7 G5 I" ~1 S1 L3 e0 n( P3 ]4 D5 \ if (IsUsingItem(pItemElem))
6 x; f: L+ h' O& Q8 ` {
" _4 c+ e9 h4 n8 Y: J //这个位置无法放9 z1 D4 x. ?7 Z/ T
nDestPos++;
. T- C b+ L" |' O& I }
* N8 D% C% H: i3 x }
7 _* Z" s' B1 y" S( h4 f2 { BYTE nSrc = pInvSort->GetItemSrc(i); u9 W- y. J1 E8 n# w$ S
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! s$ s& [4 N3 ~2 b- n" I if (pItemElem)
9 x0 U0 K+ c, \; ]% ] {
' b0 J$ P( \5 i& G0 S if (IsUsingItem(pItemElem))6 J+ B( t, D0 y. G/ S4 H
{& d6 s) |$ k/ s" u0 C1 X% t v, `& f2 L
//这个道具无法移动,跳过
0 W4 ^; ]1 d/ E* _" h* @& X) V% i. U continue;
5 }' \8 n6 d/ _ }2 Y, E* e: q5 @4 o8 `& U
}else{8 L- y3 K2 e% ?3 } m/ z
//空位置 不用动
: b' a% ]0 l& S$ N% o! I$ y" ^( w continue;( Z0 g5 \; c4 M- d) j; Q; q
}, J- m: n" b9 \/ K
//////////////////////////////////////////////////////////////////////////
/ O- q; H0 C" t5 \2 X) d+ {$ Y9 x //开始移动
( C+ G) z( Q0 }% q+ O5 U+ X$ k. c1 I if (nSrc == nDestPos)7 O+ c( A. B3 W9 F* t: R
{5 k* E" v. E* Y3 V3 b
//原地不动7 O% u, d1 F! E) W
nDestPos++;
6 U& X8 L, T$ {; S/ p$ P9 A continue;
* m0 S: T9 E N2 A }
, H7 O2 u+ ^% w2 F2 u7 B pInvSort->MoveItem(i,nDestPos);" D1 s4 }* d* H8 t" t( ?
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
o7 d" Q" D: v+ b) R* Q: ` Sleep(5);" ^# u# U3 t+ e- D- F( ~0 T
//Error("移动 - %d->%d",nSrc,nDestPos);
% v: [! @$ l. @$ ~4 Y' r nDestPos++;5 _* e! n! l0 ~. R8 J
}5 X. }' A4 \; ^* |: {
//取第一个元素的信息
- k9 G# _% [- A* R- Y /*% r, x3 I/ I( E- d' z) i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 u7 x1 I4 y, N& E* S# b9 F
{
9 s& E% m& Z, \# ` Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 d5 d8 U( Z/ ~/ i( z/ i g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 l3 o5 y& o3 K8 P9 I, U6 `9 j6 k }! Q' O$ k) P- t( U; B
*/9 `- I# \1 ?+ u1 c1 U4 h5 i
//////////////////////////////////////////////////////////////////////////& y4 o6 r! W% [) W
break;. F# e8 k# k6 ?7 g3 \: v0 V7 g
}; W9 h# x5 o# ]& m* J# u
} . X5 J7 O! y4 w# B& i6 t
}
$ O7 W6 j. B1 }m_wndMenu.SetVisible(FALSE);
5 h. o' I K0 Z0 y/ l
* U! L1 C- b$ U4 ? S--------------------------------------------------------------------------------------------------------; Z+ C8 Z; m, \, N* y# z- r; `2 Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), t) I4 t2 L+ f9 P; w
{7 U( M' h3 ?& B) U5 k, g
BaseMouseCursor();
( r+ r$ \+ {( @}
2 Q( s2 P+ S1 j6 [8 E在其下添加:
0 N2 e$ S5 a! l' }! v' Uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 m' k2 \2 o+ c w% U3 o% }/ O
{
( |3 \% d9 o4 A/ e) z# K1 fm_wndMenu.DeleteAllMenu();. `9 ?" p C8 Q; e8 C7 [/ L
m_wndMenu.CreateMenu(this);
. H$ ~' `, I5 l: W" ?5 Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# L8 K. l5 s' ~6 `7 O0 b! G# N
0 p- \0 w( Z5 N9 bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 z& m- h" @4 h5 k% ]
{2 V4 B Z- P2 m, m4 _# P9 M
//P以上级别才可以删除所有道具
- T' g% w$ V9 L1 M- j. S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& c0 w$ m9 f/ p# i8 d0 w* A$ u}
: @# Q# f- U8 Z" {" Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 b2 Q. Q7 Z) U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( j+ h1 T! }* w( g0 y- S+ p0 @9 mm_wndMenu.SetFocus();
' d" Z3 Y2 L# c5 M- ?' c' ^# u; }) h}
( V9 O( ~7 t# c( x& N; s( Y------------------------------------------------------------------------------------------------------------
+ H1 c. P+ B) X/ G*************************5 Y2 d6 q. h/ f5 K' x. D
WndField.h文件1 ]: M8 w5 O3 G! P# \) q) W# ~) R
*************************. b3 K" u. l3 y" c
搜索:BOOL m_bReport;
( n9 Y1 ]1 G* F5 n& m其后添加:
3 ?' o/ z* E1 w; GCWndMenu m_wndMenu;" F/ x* ~. T$ ~# b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 d6 V2 F# W/ g8 i" g$ n* g x其后添加:
1 {" M- H0 j7 R; p$ h8 nvirtual void OnRButtonUp(UINT nFlags, CPoint point);4 J2 D8 R+ p7 J" y3 m9 X
( t5 v3 H) T. `( x4 l% b" r$ L5 L& B/ W3 i* a
|
|