|
|
源文件中_Interface文件夹下WndField.cpp文件
% v1 ^- c! M! N0 ^* }0 T1 F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 o" u0 y8 X, g' Z
+ N, |2 n8 ]% E+ Pstruct sItem% ]! O0 p/ |6 o" l$ v: @+ ~
{
f) b/ k A; ~' N/ i: c% rDWORD dwId;6 a: W3 q3 W+ n5 E
DWORD dwKind2; @* L0 z" d" I- Z! i4 |1 R% n
DWORD dwItemId;& Y: u( `% t$ Z4 N: c
BYTE nIndex;
" t% q7 o( r/ L0 y( L( ~sItem(){
+ E2 Q: |. @( s8 P# N dwId = dwKind2 = dwItemId = nIndex = 0;
2 Y* m& }7 @+ v6 T}
% H6 F) h! t) T6 ybool operator < (const sItem p2)
, R1 N4 D/ ^7 V8 U{
; e& f/ ], u4 p& i4 N if (dwKind2 == p2.dwKind2)
! i7 ^( ]$ v: x7 a9 I5 m& S {
4 D% L. g1 j, |( r3 ? x. X return dwItemId < p2.dwItemId;4 s$ w e6 P) e" G# R2 i; O
}else{9 o3 U# @8 z# z3 o# x& l' r9 T" d
return dwKind2 < p2.dwKind2;* {; [9 C: U! [7 W3 b: I
}) I* c" j8 k1 H7 x; G }
}
; O) q6 S4 S, A# F S};1 W3 i. ]7 T" k
class CInventorySort- n3 P# \+ w; g \
{
0 I8 E# A% m: Ppublic:
. b- Y/ j$ ?7 ]& }+ q. W" Z+ RCInventorySort(); |. w( B' e& Q9 t; P
{
6 L- o! p, U5 c9 F' J m_dwPos = 0;
4 M! \/ Q8 U( {2 G}
/ U0 T1 B9 H* Z* ?- }~CInventorySort(){}
* W) l; H2 O% g% Y1 mprivate:7 I. H/ v7 O) n' V5 J
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" ~) G, U5 [8 E6 I2 jDWORD m_dwPos;: ]8 x, i+ {' \4 }, k) h& ?
public:
O! G: _5 x( p9 A4 Yvoid Add(BYTE nIndex)3 m' x2 M( B$ s! r
{- V4 E+ N. g& f) P2 N7 g
if (m_dwPos >= MAX_INVENTORY)( v8 X0 i) r6 D' ]
{
/ [$ m% x, v0 Q! f/ d+ |: v# K) e6 B return;- O, I# K. {. J4 N; p9 d- p
}
$ R2 ?+ z# [7 y: B/ G0 X m_Item[m_dwPos].nIndex = nIndex;
; ?" V% F+ R5 J+ b. K m_Item[m_dwPos].dwId = m_dwPos;
! O' ]: D. {" F/ V m_dwPos++;
4 X" M6 U0 X- g' [- P0 m0 B7 M8 ~& j}0 i M1 }' t8 u; C8 q3 m# I5 c
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; o1 S) ]9 h* O' F# _
{( B; Q4 F9 O. ^
for (int i=0;i<MAX_INVENTORY;i++)
' c; i; Y, F$ @' r4 w {/ \0 |) [5 A2 J( f
if (m_Item.dwId == dwId)
1 |$ ^7 z( \- [$ X% D$ D {
4 K0 U/ P" G4 n1 q7 [9 V return m_Item.nIndex;
6 s: N' q# m4 @ }
/ }: }* ^2 {3 A: Y: c$ _1 v6 r; w }+ P: ~, A/ z3 G4 r/ z( N, i- w
return 255;. d2 U4 M4 X2 I6 g$ U" `, A/ Q5 B
}
1 z. P& H5 @7 _, x# L1 [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 L7 g9 |# E$ ^8 @: z& ^
{" T$ o2 y8 G4 P% f0 x' b1 _0 a
BYTE nTmp = 0;
) y9 B" T* _( @+ { bool bDest = false,bSrc = false;" I1 V. Y3 \8 l8 j, v& N" i0 M
for (int i=0;i<MAX_INVENTORY;i++)+ A3 o! c% z2 m; m" T& ]
{! ?8 X0 M7 `: H1 u7 F8 [
if (dwSrcId == m_Item.dwId)
0 U# g- N6 @$ g, n8 u& K6 ~4 w {
/ M% U* L2 u" y% @9 q/ e: J //id相等 则 改变对应的dest和src
! Q G' U9 A9 j0 x nTmp = m_Item.nIndex;
- q7 c9 ^" n% z s Q, x* z m_Item.nIndex = dest;
W& B! T' L6 X- I } c& w3 N0 ?$ g. s+ R! k
}
/ a" z, b! Q& e6 v: W //临时数据保存完毕,交换开始* M+ e6 O; i3 X) k- p
for (int i=0;i<MAX_INVENTORY;i++)% e6 s& L& v* j! n! c6 `& O
{
9 [4 ]$ e4 M+ a1 p/ C if (dest == m_Item.nIndex)$ z' m! {0 b2 g' ], h3 i. b
{
1 j- B! C2 S9 c& \1 G( @ //id相等 则 改变对应的dest和src7 Q! R, `+ m7 h+ d( [) q
m_Item.nIndex = nTmp;
9 E# k0 }8 T- b9 x! D/ N, M }
; G- k( l |' g/ r- S0 [ }. [, X- [6 g$ i: x
}& @2 [6 A4 Z4 z d2 G; N' r
};
5 u, M; k* y! m- Z0 W- y2 u-------------------------------------------------------------------------
( _* Q0 _1 D/ x6 d2 w8 Q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- c# R7 d& t" e/ v8 i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 |7 g* P, P% q+ d" D q
紧靠其上添加:" }, W; ?3 D5 `' P! X& v8 r( K. y3 g
if( pWndBase == &m_wndMenu )
* ]3 b6 G0 N! i. x* c. l{1 l7 P m5 @ F& h3 x
switch( nID )
3 L! c5 \- L# i9 i6 T {
$ i4 P# f% o7 t' H" P! s case 2:
" C$ N+ @, [3 X {
0 c/ ^: f% p( ]! ]* o" P/ o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 {0 T) ?+ e9 z2 c3 X9 f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% a$ R( W3 Z# W, {1 n3 ]) c {+ ^! @9 W' X* V, R/ V$ j
break;
/ Z$ X) r/ H6 [, V }) {0 W2 P0 V% r- j* n
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) z% O! K, ]. q
{
2 b+ J6 F& ? }$ z" ?' U8 T3 f0 \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. c0 B. S/ r( ?* n if( !pItemElem )
4 m/ u8 n" j3 J7 {4 ^ continue;" L' @% x9 A0 u& X+ S; L, \! \/ ~
if(pItemElem->GetExtra() > 0)% I& u1 \8 y. D/ e
continue;
6 Z( Q* K1 n. e( n' a1 { if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' l3 w4 m9 p% G } a continue;
* k4 D2 O: v4 B- w" | H( z if( g_pPlayer->IsUsing( pItemElem ) )- Q5 ^. v0 j( L5 P
continue;
" b, |! Q6 y1 e& q; h if( pItemElem->IsUndestructable() == TRUE )
4 A6 S! n7 _6 V' [/ I# ? {
- {# K3 p# e! W7 A g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, o) B2 U7 C g" K" e: t( Q" K
continue;
" K3 ^( Y1 T8 K5 L& D Y }' _7 {- L, t" J/ |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
w# e9 }- ?, `9 J3 B$ J1 Z }
( T7 \$ Y8 B; p break;7 a1 i$ J3 i6 h$ ^
}: L4 j0 X6 m" o" p# x
case 1:
& }* R( }0 ?4 O0 w. d {/ Q! {& L+ `/ r
//整理背包
0 {7 D( V9 M) v% W //////////////////////////////////////////////////////////////////////////
]' f/ ^4 A% v7 h) M7 p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 Z% {) J$ H: L- U) K2 ]
/////////////////////////////////////////////////////////////////////////// Y; w6 y8 q; l4 y
//////////////////////////////////////////////////////////////////////////
; J9 Z2 y3 Q5 G$ D5 ?; [ CInventorySort* pInvSort = new CInventorySort;
) ~7 H. o D5 u; A1 Q/ t vector <sItem> vItem;6 f4 ^0 l. C( t3 z7 ~7 Y
vItem.resize(MAX_INVENTORY);//初始化大小2 M/ Z; P Q K1 b0 ^, c
//////////////////////////////////////////////////////////////////////////' O3 t; W) _+ W$ H- D/ s
//填充数据) N1 h9 u8 m" {3 P4 K7 @8 E
for (int i=0;i<MAX_INVENTORY;i++)
: h3 d' a* W! c. l7 u7 t! `7 \+ N {
) E! Z3 p5 b" e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& g. T. ^. n- B: M& o, O
if (!pItemElem)
1 i+ _$ v# T9 n& X {
, r( E: h, C0 u7 _/ g vItem.dwKind2 = 0xffffffff;. F3 L, |1 ]( Z
vItem.dwItemId = 0xffffffff; h$ v S! h" y8 Z A! f, L' @, z
vItem.nIndex = i;
) n6 J2 h; Z w6 M& M; ~ }else {
- G5 p Z0 X" f! y7 w& O! E! L9 a& z ItemProp* pProp = pItemElem->GetProp();. p7 s7 _6 P/ t" \+ }/ t
vItem.dwKind2 = pProp->dwItemKind2;
2 H" K/ T% U7 z vItem.dwItemId = pItemElem->m_dwItemId;
" t" C) T9 v* y# l4 }: g vItem.nIndex = i;
* p9 h$ y/ P( D/ I* V' o( R }# \$ v& B# ^0 y; A% p1 d$ Y5 g4 g d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. \: g9 \2 |9 p* T; n }
+ P* \4 A/ ^/ h! Y, M( G! @ //////////////////////////////////////////////////////////////////////////
9 ?8 f2 g) R- H! M& S; E sort(vItem.begin(),vItem.end());//排序- }3 \5 j ?& c' M I
//////////////////////////////////////////////////////////////////////////& _3 _4 p1 B. y9 T
//交换0 m( z1 W$ }; L( @
for (size_t i=0;i<vItem.size();i++)7 B* k% [6 ~; {$ b* w3 q
{/ g' H3 X* k0 ^6 A
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 g/ a P5 k7 G' A' _( e8 m
pInvSort->Add(vItem.nIndex);
. H$ N& w) y1 m' P& ~! p( d) l" D }
7 d7 q- l5 Y4 [7 s a BYTE nDestPos = 0;, @ e# N4 G9 s; L' ~1 n
for (int i=0;i<MAX_INVENTORY;i++)
8 J; k0 K8 }9 }( l7 P6 z {8 a0 M. c* u* i7 x4 R2 k5 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. f! O8 @8 k. n+ k
if (pItemElem)
V, a4 X3 }2 E# t+ u/ z4 W) ? {
- u- O/ [( o$ P# w* U if (IsUsingItem(pItemElem))3 b" }0 r* g0 p: I
{
! v5 ?6 d4 G9 y: n6 |2 c //这个位置无法放( t- n5 K: _+ X: t+ f+ }+ r8 p* T) p d
nDestPos++;, d: J' |- w) \' u6 o
}
0 m9 N( [4 ^ u9 J& e8 l2 S }5 N# p3 X; [! U& Q$ T* q
BYTE nSrc = pInvSort->GetItemSrc(i);
$ B- Q. ~+ L+ l: t w+ U" A. ] pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& K* c9 e6 ~8 v( ~& {) B if (pItemElem)
+ w" x, ^! U3 l3 t {
% h3 \4 x- I8 F) T! X" X if (IsUsingItem(pItemElem))
( g! |; h! a$ K* n5 t; O {0 y2 R! n8 {- ]& F, H
//这个道具无法移动,跳过
; v% ~' k4 Q' l s/ q! ]. n' H continue;
8 r' X8 m1 I) m; I# [8 @ }; D f# g, i% W: ]8 G
}else{4 A `8 D; d# u8 v5 j
//空位置 不用动
5 Q1 g! w; M7 Y* d& @ continue;# p( G. J4 c8 ^: }- y) d
}
8 q* W1 [3 N& d //////////////////////////////////////////////////////////////////////////. c9 @+ C$ ] |, Z! z. L+ ^
//开始移动
$ v; u7 o5 u# K W* [9 g" e if (nSrc == nDestPos)
0 d0 d, H( `6 V4 s0 v8 M: c* ` {
" C5 l Y" {1 I g! _ //原地不动# D6 f& o! V9 d/ {
nDestPos++;
* |1 s6 w3 i, P: o8 S9 J continue;5 Q4 {5 e+ Y5 }$ Y3 Y
}- A: E2 |& [/ N6 J! y7 ~
pInvSort->MoveItem(i,nDestPos);
8 G, q' q m) y4 e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 k8 c9 w! M) j; D" e Sleep(5);( G0 _; a* A+ F4 ]/ ]! B& G
//Error("移动 - %d->%d",nSrc,nDestPos);
2 {0 H# y& }0 t, S! m+ e5 n nDestPos++;+ ]) E/ `) R. G3 `( ~! _
}
1 a( H& x* b$ _0 D: }3 k! L //取第一个元素的信息
* B0 a- Y; c) ~, a /*3 |5 P: ?" E9 p5 A( W C
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' G2 ]3 X1 t* n, \ B& w$ Y7 n {
% b* e) P, P- | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 X+ b. K- ~, Q6 ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- }1 M$ ?8 Z& H1 j) t }
& K/ v1 v N( p" w; O6 ^% T w */. F7 ^" q2 d2 s% r
//////////////////////////////////////////////////////////////////////////
+ C/ h M3 c1 o- q break;* o- s( N! @7 n6 o
}
; s- Q+ S1 w8 R# w2 R( J } 5 X0 ?9 h5 ]5 G& u0 x& C* u# u
}
% E# N! E2 N( S- r$ {6 dm_wndMenu.SetVisible(FALSE);
. W: l( y/ Y1 {1 D" R; m% M Z
% y0 X( F, A5 e8 X- w2 j% a- s4 y--------------------------------------------------------------------------------------------------------
, E$ Q( m! T* {6 ?+ Y5 X7 }) \. N4 S搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( ^1 n7 Z2 R* P8 Y0 F2 X
{. ~, T7 |- l) z. Q$ O
BaseMouseCursor();
& m0 q! W% y: v0 ?* j}
. {* ]3 x6 w5 c- G( M. I在其下添加:
0 {5 n8 a/ \- I& V. T$ x, Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 m0 I) K; v! k& A7 A. Q{$ U. q& l+ T0 k4 h k z4 W
m_wndMenu.DeleteAllMenu();
( M+ S! K/ N! C7 t/ gm_wndMenu.CreateMenu(this);
3 A0 I: x- V& R7 ?/ p0 D& Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, C' q: [! E, s8 |
* {" f# H4 {: W1 V$ Q( W! Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& l2 d; Q& N+ f$ a2 B* n; E" K{
8 _5 j3 n( \- x. t3 d //P以上级别才可以删除所有道具1 K) h0 D9 h/ p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' I0 v# x- X( [1 T; h' I
}
4 g9 e6 c+ y1 Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- z2 K" A- z8 g" }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 P$ K* ?1 T% i; |2 `
m_wndMenu.SetFocus();, ?9 k* Q5 j( Y2 V
}
, Y# t+ y& p8 h& C0 V1 k------------------------------------------------------------------------------------------------------------
8 a4 ~6 K# V/ d9 h: T9 L*************************( j; k6 N$ ?3 {' T$ B
WndField.h文件
" x; b7 Z3 Z+ R4 e# Q" \*************************
; I0 _9 ^4 `" V; d搜索:BOOL m_bReport;2 E/ j& D9 l6 u1 i- Y+ s* K
其后添加:9 |8 F8 x7 z1 X5 d: L9 G
CWndMenu m_wndMenu;& [8 g' `6 u2 c9 x. `
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) Z% b# ~ Y, I其后添加:
8 ^0 u# M- u4 ^; Jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 n% s% K% g5 g5 R
+ n5 a* F* {; S) O. w, E3 n- Z& `( @$ B
|
|