|
|
源文件中_Interface文件夹下WndField.cpp文件
8 F, P5 ~5 L$ B, w6 C2 D" u7 P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: l% @) D9 C! d' p
! G5 F$ b3 I. E- ~" Bstruct sItem( o& T7 m% I+ w4 Z1 C# \- } B. b1 H) P
{
1 K: w5 ?) S( M% C4 nDWORD dwId; I \1 m( l- f( c% N
DWORD dwKind2;
6 q8 S$ N8 U# a; vDWORD dwItemId;
' K& j8 j. w8 l, k# LBYTE nIndex;
! {) Y3 @1 x7 EsItem(){' x" k1 G+ E1 |. [" m5 Y
dwId = dwKind2 = dwItemId = nIndex = 0;
7 K9 Y' a/ x- R2 U) D3 W0 E, R- m. @- a}2 A1 f) @4 I6 k4 w
bool operator < (const sItem p2)3 r( L! V3 t( Q
{ [6 w+ }/ ~- `8 ?4 l' C
if (dwKind2 == p2.dwKind2)% `' [; T! W, w. d2 N$ @8 x# J
{. ]8 F% z7 ?. Q* [! a4 V- t
return dwItemId < p2.dwItemId;
7 R; G1 a9 b1 t" p" C4 x }else{. Z k3 K4 K' O" L2 b5 c& x
return dwKind2 < p2.dwKind2;
) a# o% G& K- c! Q }; Y: D- f0 _# Y# t; B0 W2 F
}
6 t$ d4 F; W5 Z};
f) P" M; W3 b. H0 C, Sclass CInventorySort
4 W9 g A, t3 X: s; K3 G0 }3 L{$ ]9 `8 I+ n( f, e t) W
public:
* M# E. E) P5 @; P4 w% `9 u) Y- ]CInventorySort()8 @0 c# Y) L" X s3 T& ?7 M0 _
{3 ?8 p" R6 n# Z5 ]( W
m_dwPos = 0;$ W$ }. u6 D9 N+ K
}5 H( D2 H9 t2 u7 I9 k
~CInventorySort(){}1 j4 m2 M' t9 J7 u
private:: b( C X2 M( i5 X5 i3 s
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ Q1 E6 B5 v* S. z& k
DWORD m_dwPos;. r& O) m; e, z7 W
public:
% u. A8 W0 H- D' Avoid Add(BYTE nIndex)
# ?4 I% ]3 S! @{$ C5 i7 i" n/ Z; Y+ ]" X( `: _
if (m_dwPos >= MAX_INVENTORY)! A& L# C% o. \* j9 W* X( H/ ]
{' A, e$ Q6 d! z/ M |( ^
return;' } H/ w3 p7 a/ x) L: q
}
9 W5 w- {- p7 {! X+ }$ g& R m_Item[m_dwPos].nIndex = nIndex;4 c$ D5 o0 t, C' _" U& _
m_Item[m_dwPos].dwId = m_dwPos;
7 a4 H- [5 E Q4 v2 f/ \' z, X m_dwPos++;
0 [' N i8 \2 H8 O}
6 _5 |5 u6 K) j" X& b- E& _BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% m# o& l, D j: D0 W+ ^{
# L: l1 ]2 O' m7 s% Q" R* w for (int i=0;i<MAX_INVENTORY;i++)
^ Z+ j- _ N$ o {
) J1 o) L0 J9 e5 { if (m_Item.dwId == dwId)! K4 ~3 e! Q6 W2 N3 R" L
{
4 J" R1 b1 a" @# o; b$ A return m_Item.nIndex;) C$ |4 O7 D# X$ g2 u5 Z, z6 T: B; {& z
}
" l' D( H' `' E }1 } ?$ Y, ~$ l4 C Q' n9 i8 X
return 255;$ G7 x1 b6 ]+ @4 {+ d
}
7 \& u# L: S* V& ^$ evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& P8 O' g% J$ J+ A
{
$ F# x6 @& {! a! `+ V9 T/ | BYTE nTmp = 0;
3 a" b ?7 z* O4 w6 k bool bDest = false,bSrc = false;
% p; r2 m4 o* k d3 s7 A( u for (int i=0;i<MAX_INVENTORY;i++)& v5 j6 x+ `6 X! p' ]0 N
{; Q8 v& N9 ?8 v1 @9 ^
if (dwSrcId == m_Item.dwId)
+ S4 D9 W5 x7 k* T% X8 @ {+ e. w* O m. y+ i7 b4 ~% d
//id相等 则 改变对应的dest和src
8 m" P& U" s: Y, t3 L( R" x nTmp = m_Item.nIndex;7 D$ l/ @2 m- T& W
m_Item.nIndex = dest;. s. l ~, s; Y8 r, S+ |
}
( z5 B7 k( \/ ^ }: m: r: V6 O$ }$ Y0 S# ^/ U) O9 f7 F6 e
//临时数据保存完毕,交换开始+ e. L9 S: Q0 E {1 s
for (int i=0;i<MAX_INVENTORY;i++)9 b1 n/ V; A% Z2 G$ B( ]& z
{+ A& Z( L# V; S. W( |
if (dest == m_Item.nIndex)
7 y3 Q: E N( P, v- G: z {& [% D) D8 l: `* z' h" D/ h9 K
//id相等 则 改变对应的dest和src
; F- D- @4 W- a% D& j m_Item.nIndex = nTmp;
5 E, Q& R( ]6 y9 v: `1 G' _ }
; @ J3 O( G! E: Y }
0 F! |) u2 W6 `}+ _3 [+ F$ r; _
};* `: F4 F* b( k9 D
-------------------------------------------------------------------------# a( h8 V3 D& v4 i+ ?# I. n) l' |1 F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). I, n) n2 s* R% l) K: z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) K5 c3 j% }; R! b% b3 Q0 }$ N# Y紧靠其上添加:6 R4 I5 `2 P' L6 U% J4 F& \2 F
if( pWndBase == &m_wndMenu )$ |0 y" R: r# m, y& O* \) x5 X
{
9 T5 \ x) L* b8 ^# Y9 a switch( nID )0 U& i2 o9 ^5 O
{+ `* O7 X8 x8 y7 E& n9 i+ m& a
case 2:
% L* |$ W# b" g# A X7 K3 x) A {
4 Q6 t2 w+ c' f9 i- \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- i! }2 P) r, W6 e/ E if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 C$ f7 O; V9 a' u" O2 _6 T {
0 B. B( q! o1 c m break;
' Z/ A3 Q: Z: x1 U }
9 Y4 p. |& F$ J' m: X for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" R8 v' U: G+ a' S/ } {2 f4 v. E. u! @- Z* _6 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' H+ ?* t. p' U4 c7 }+ u
if( !pItemElem )
8 j4 w u' s) { continue;6 f$ V& Q1 l( k( b( Z
if(pItemElem->GetExtra() > 0)) E: g0 p( k. o# G- X0 w
continue;3 U* a4 p0 _8 u( q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . C- E8 g' C! @$ H6 @" A2 Y
continue;
% l3 z% w2 [% Y& M. D& O if( g_pPlayer->IsUsing( pItemElem ) )7 Q2 _6 |1 i3 `% z, R8 X
continue;; j# `/ w( O* z, {9 R5 U
if( pItemElem->IsUndestructable() == TRUE )% n/ F' s7 V. [1 }1 w! n
{
/ \9 \/ L3 K; i8 o g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, j9 i% T U, f; ~6 T8 J+ X! e3 H. a
continue;8 j! ?) t+ @- q* h% {8 q' M. _5 \
}5 E: H! P6 D" o$ y4 s
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 q4 |4 V) Q1 X$ {2 f5 a3 g
}
: G& o0 _7 p5 L. O7 ~' n; c break;
; o6 J" z% m7 y- j! g } \1 H, q9 M8 ~6 E6 M& J
case 1:9 o, d: E/ }0 F) ]
{
# e/ S- P7 R+ `, X/ P! S //整理背包0 h) O* y9 ^: w. L
//////////////////////////////////////////////////////////////////////////
# t" t& K8 i( E+ p1 Y9 G, J. I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. S: _3 }* T+ f/ U
//////////////////////////////////////////////////////////////////////////
; ^& H0 v0 z0 a5 d6 B' h7 p //////////////////////////////////////////////////////////////////////////
; o1 [: O' ?; S CInventorySort* pInvSort = new CInventorySort;3 L, ~; ^! v0 c2 O- \+ J0 e) u
vector <sItem> vItem;
* h w/ o3 u" R2 ]7 y% d vItem.resize(MAX_INVENTORY);//初始化大小
+ s* `0 B8 ^! G. O //////////////////////////////////////////////////////////////////////////
% J# t; Y! G: T1 b6 D2 b //填充数据
' o6 R7 K% Z) y for (int i=0;i<MAX_INVENTORY;i++)
2 V& S# k2 [+ V1 {2 w8 z {
3 U$ {* B1 D" \/ w& F7 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& a: n" P( U9 R6 W* a
if (!pItemElem)7 V5 e4 ]( a B# n- j; V4 E
{, p& C% V* o3 i) Z2 P
vItem.dwKind2 = 0xffffffff;
3 n, k5 G: q( K" I4 i6 k vItem.dwItemId = 0xffffffff;/ _2 [2 Y# u( t
vItem.nIndex = i;$ l, ]6 O! w. x' s/ m. c5 s8 U2 P
}else {
/ M; Q" f/ m, ~% Y: B ItemProp* pProp = pItemElem->GetProp();$ I$ ]& K1 G: D
vItem.dwKind2 = pProp->dwItemKind2;* L4 R, ?+ [% u
vItem.dwItemId = pItemElem->m_dwItemId;5 H2 l! f r- B- H2 O
vItem.nIndex = i;
# R# S. o3 M8 n; s5 ` }1 m; `/ z5 z \4 T r% D! Q3 L. r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. Y# A% |/ |- V
}, F- Y; z+ v6 I: @
//////////////////////////////////////////////////////////////////////////
4 ^# O( z8 _ F sort(vItem.begin(),vItem.end());//排序
0 t: S9 O- e a4 e/ |+ z //////////////////////////////////////////////////////////////////////////5 E8 p8 ]* h; L: r$ L
//交换4 d' E( V6 B1 q# y# s# s
for (size_t i=0;i<vItem.size();i++)2 s& _6 o+ H/ |3 L$ o( p K, B
{2 K! [. y4 I. l! W' p2 E
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 ]+ `" x2 p' H: w: U8 N pInvSort->Add(vItem.nIndex);2 y! G- V* b ~1 X* I/ x
}
! ?0 M s) H$ S BYTE nDestPos = 0;
2 s) c4 C2 `4 N4 {: r" d for (int i=0;i<MAX_INVENTORY;i++)
! q4 T% y9 D9 h( I0 J {
6 V3 B% l& ^; g; s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; c4 t" ^9 c8 m$ V# B4 \
if (pItemElem), Z* ]' C; P% S) b# n
{; h. R+ p/ j9 K
if (IsUsingItem(pItemElem))
4 e, }% t$ x! }3 g+ ]; o {% M+ A( |! u. u5 E; c( O
//这个位置无法放
% v) J+ P) N0 G( i0 M W nDestPos++;7 l# u4 n/ L' q* {8 t
}
3 c) u- V- |( y& r9 S+ v+ K0 T2 A }" y _3 N1 ?$ q# F! r
BYTE nSrc = pInvSort->GetItemSrc(i);
2 K- C. S8 d* C% N* w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 `* Y- t E: {9 b- H& }
if (pItemElem)
f0 h, h$ R- x9 R1 d) \7 B {
" K6 s- Q0 V b5 k/ W2 O1 u if (IsUsingItem(pItemElem))
1 `" \( I9 f0 h2 ?1 \ {
. K% w0 _3 a* E, [ //这个道具无法移动,跳过, t1 P0 L8 }% i1 m2 a1 W y3 S1 ?
continue;
$ Q" U( ?+ Y3 A/ } }
* ]. B6 | L! |4 H }else{# q4 ]/ b5 [4 O4 \* o, W6 ^; W
//空位置 不用动5 W" q9 X" i! m; A) i/ l
continue;
! P1 U. y N; m' {, l6 S: A }8 ~4 {; o1 F0 [( r/ M( X
//////////////////////////////////////////////////////////////////////////
( Q# f% t, P0 o! U //开始移动
. {# ]6 Z& n( L% K; D, p if (nSrc == nDestPos)" O c" X4 Y% v V7 v) L7 F4 N
{
( a) j! L3 \2 p+ l' ], X* U# A0 u/ _ //原地不动5 g* e: y, p8 Y) C2 a
nDestPos++;. A% P4 j/ o- \* t" [1 G1 q
continue;0 A0 D8 q. z4 z2 d
}
2 k. l6 y6 ^3 |- H# o pInvSort->MoveItem(i,nDestPos);* b0 E) K# y0 s" E
g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 u' J A$ ]4 i9 h( l1 V# }9 n
Sleep(5);% N9 r8 t, o+ m9 I; |' s
//Error("移动 - %d->%d",nSrc,nDestPos);
5 _: h3 q- [7 A8 m1 G: i, ] nDestPos++;
) p. G* u x4 q4 g+ C% E; Z8 O }7 x X+ O1 i( {6 Z8 Y7 R2 b: u
//取第一个元素的信息
y6 @2 G$ x% \7 M1 Y /*8 X! e5 y y$ I; u2 T# t
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 ~( x2 o4 q) R {! `* C1 x- j- [) d" o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 _, p- Q0 k D9 r! q/ A
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- y$ L) V0 g9 ~ d2 L5 N
}- N# J; [; c0 L
*/
) ~' j: t8 N1 N, Y7 m2 K+ | //////////////////////////////////////////////////////////////////////////* _/ E# F7 n1 @9 z' w j
break;7 b: d) @3 ~$ V* b- S" l
}
0 F9 X- \) P! m% S2 c- j% l+ G2 i }
/ |: M! X8 y! W8 @}
P; K+ J& d9 B( Y! tm_wndMenu.SetVisible(FALSE);0 f+ E4 {/ J% ~& R
7 Z8 F0 `8 v! w4 O--------------------------------------------------------------------------------------------------------* O2 Q% a. W* \$ U- q9 }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), C3 \# X2 H+ p
{
2 H. |$ ~; t2 E! W( MBaseMouseCursor();
/ ?: c$ m. p' M' d! i' p3 W6 ]1 f}
) o5 K% \; r+ N* T: K4 R在其下添加:
, {: Q* ~) \& w- ]+ R. {0 ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& C4 s7 H* [2 o( R7 u4 i/ w& Y: [{
& q3 P& O: X3 C x# n! [ Qm_wndMenu.DeleteAllMenu();' o2 s* |0 M0 Q: P I) z$ Q. f
m_wndMenu.CreateMenu(this);
' [. _+ p. T9 R2 Ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 X% G! A* r' M0 }. }" U0 r' Q7 a. I" Q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 a. ?4 X. {. h E) t" N5 f" Q{
" ]$ R! c% w2 T; y# ~ //P以上级别才可以删除所有道具
/ h" Q/ t: @5 j5 y! e; b9 F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 D. p6 E2 Y3 u9 ^, x; T}
* F! i0 A2 V4 j% h um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* F: F$ D, q- W# L
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 X0 k" X1 @- e# f1 g; im_wndMenu.SetFocus();, f p6 ~( i( n Y8 c% U
}9 M# v( F: Y( {, \
------------------------------------------------------------------------------------------------------------
6 c% w# Q4 {5 E9 @# f) z% L*************************: G% `1 \/ t( {4 Q" Q3 p
WndField.h文件
+ j6 U( W7 ]& Z. f; k4 L% W" \7 h*************************
6 k* N0 k) Q) V, f5 a搜索:BOOL m_bReport;
* e- a1 P8 {6 a. G& H其后添加:
5 q' V3 r0 A. o( H+ ICWndMenu m_wndMenu;+ u8 z" ]$ d4 Y, }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( O" T9 d# M t2 ]5 b- M: d1 o
其后添加:# H0 q/ b9 c+ _! V
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* k/ I2 {9 f4 d \
2 ~5 E5 w5 |! i: n% Q7 X; A- s( z* S' G& m! S
|
|