|
|
源文件中_Interface文件夹下WndField.cpp文件3 _ z' \9 r8 w4 W. u% w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 m2 d* v; h7 S& w% t* M+ E
" n$ R. c" I- Z% c1 Sstruct sItem3 ~0 z. z) O7 q( c9 _
{. I. ?" V. M5 m2 M; ]/ C
DWORD dwId;
5 ^. L8 T: r5 }! HDWORD dwKind2;
4 M9 O% U# P5 O: H' z6 q- {DWORD dwItemId;
6 _1 f" i# N' d% ?BYTE nIndex;
+ {5 m) } q$ c+ f; R( w* c( wsItem(){
- o2 M8 a4 \5 {# z& f dwId = dwKind2 = dwItemId = nIndex = 0;% D' [$ f" L% Q
}
$ V5 T0 q- O/ l$ G7 O5 Lbool operator < (const sItem p2)
9 v9 N) `% u6 v4 Y) k% w# E{
# V, G8 o$ P' i# j0 K8 i if (dwKind2 == p2.dwKind2)% y e/ H9 F. t: d' J; b4 Z& }
{+ \' `! e* I# e, W" V$ X
return dwItemId < p2.dwItemId;/ @, j0 Q1 m2 t, L; Y
}else{
$ M4 {) C3 ~% S4 O* ~) e2 M return dwKind2 < p2.dwKind2;
( J6 G$ Q+ ?, G& _% u5 Y! h) t; l2 z }
1 x: P" c" K$ q. ~# Q4 W}/ A/ V9 U) i( T2 g9 B X
};
% k0 i! O9 v$ Z: y, A; D" e1 nclass CInventorySort4 R) Y, @2 b5 D* w5 E
{/ w9 n. t( ~+ [: N7 q
public:6 i8 o1 e i1 U
CInventorySort()6 q; Y g7 E; V5 q7 X [' t
{, I/ @' y' a" Y# U, k
m_dwPos = 0;: j/ B6 c; Y: L! e
}
9 A9 K- u( [0 z2 g# I! [/ n~CInventorySort(){}
) x7 O8 |+ ]1 w0 aprivate:
: ?2 Y, r: N6 a% F. x5 l1 @sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 F+ t/ J# y" e" n& \DWORD m_dwPos;/ o2 x/ m% Z# V% p1 f2 C9 ]
public:7 n1 ~; e6 y+ I: @% o- F( I
void Add(BYTE nIndex)
$ }$ e& r" y8 o6 x: M. Y/ _, o" x{
1 K5 j; z0 _5 J9 G/ S6 w if (m_dwPos >= MAX_INVENTORY): Z1 l' o8 t+ b3 Q# l
{6 a( V- x3 ^2 D
return;
0 e& h0 U1 T+ Y6 Y; C% ^$ F }
) ~7 j2 m4 @& v1 C m_Item[m_dwPos].nIndex = nIndex;
m- U2 J4 Z" d m_Item[m_dwPos].dwId = m_dwPos;
9 k* H. ^2 U; m4 c0 y! Y m_dwPos++;1 p/ L, P8 v4 L" P9 u
}( l8 I/ ]: L6 B8 W+ f- Y/ K
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; b' P3 x3 W; v& @ S' q{/ c$ D( U6 Z! @) U. h+ u! N9 o
for (int i=0;i<MAX_INVENTORY;i++)
, u; Q0 p% T% G+ i: K q+ h" h {) k. S, V+ k: r
if (m_Item.dwId == dwId)0 j) l* f [/ l. g8 r: F- _+ |
{- f. K* ~+ q# y/ f2 |3 t
return m_Item.nIndex;- l" _; Q5 @9 V8 P1 I, G3 S
}4 k! x; `9 B- W
}
. ?+ ^* B p) |% m: }& t8 C% { return 255;! U- G+ g! o0 ]7 ~ v
}
! R! }% b& a: e1 f) _void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, P2 F% d8 M. B# d
{2 {% r2 D3 X0 r& p
BYTE nTmp = 0;
: z9 ^1 l4 I2 q0 F; o- I9 q2 s) |. ] bool bDest = false,bSrc = false;5 J5 \' H7 V# W$ p5 d: }! W6 H
for (int i=0;i<MAX_INVENTORY;i++)( C: F& O6 {% m5 O; {7 z$ W
{; Q1 G& U6 u5 s9 V6 f
if (dwSrcId == m_Item.dwId), |6 H/ k$ e# V8 |9 @9 Y8 D) v, z
{
9 I N. F, u( `# a+ [6 x* H //id相等 则 改变对应的dest和src
* M4 e( P0 n, t+ u nTmp = m_Item.nIndex;
) I* |+ }+ U1 r" \8 C m_Item.nIndex = dest;
; h1 r& s& U2 o, p0 y* _$ n* L }: L& z+ I( l7 w$ F5 a7 ?
}, |3 E4 W) B. T9 ]4 r( U. P6 W
//临时数据保存完毕,交换开始. `0 j% G9 Q7 n, A4 r$ j& f+ W# F
for (int i=0;i<MAX_INVENTORY;i++)
, P6 z* W+ e7 X2 C" ? {
1 S" i! E. o' _! U3 t/ P if (dest == m_Item.nIndex)
K E$ Q2 v& P2 y5 x {
1 I- j L$ z6 B& {. V' T //id相等 则 改变对应的dest和src
; b) O0 r8 }' |& W/ L m_Item.nIndex = nTmp;
3 N% d' d; N; g2 M! e. g+ ? }
' {1 K4 I1 ` u% `/ Q }" n3 p, M, K4 p- c
}
. J! c" T; K0 B1 o( d# ^$ @7 Q};' R. @, N8 W8 h: z1 s+ E! e# w
-------------------------------------------------------------------------
# k' j+ O/ r& C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 ] Z* p5 K5 C; G! f, @4 q! a% B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' b6 N. i; `: Z9 |
紧靠其上添加:. B' }5 z" M, O3 L4 P
if( pWndBase == &m_wndMenu )
- o/ o( ~' o* ~. J5 p3 |1 O( q{: P3 K; S' N3 P+ e+ u) t# Y! s
switch( nID )( ~6 C1 L3 e, t( o
{
* Y' A) \( D& I5 Q i case 2:
- l/ ~9 O% }- e9 Y$ ~' \# y+ {, _ {
+ ]7 D7 v1 `$ F# i. Z3 A' ?& | //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 L; d9 L1 d. z/ C- l" Y# j) w
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 P; k. K" D \# ?0 O0 F" h; M
{
& T* k! U8 P- c7 W break;" z3 S# _( ?# ~$ q( E! i
}
5 `/ s7 X2 B5 n/ ~! S2 u9 J for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 D& n$ A! R7 i" m {
( S6 X" M T% o+ [! S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 u0 F: f d7 b7 I7 W5 B
if( !pItemElem )
" h. l: A. |8 h3 |2 p! d7 O: e continue;
Z+ j, c! Y5 D- _4 C7 y if(pItemElem->GetExtra() > 0)/ v: D1 W* K, q; O1 ~
continue;& t8 [% O ^% K, R: f$ \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) C9 r4 i$ y- R& G9 M0 r- r1 T
continue;
% |3 M$ A, x" t+ F# a! h if( g_pPlayer->IsUsing( pItemElem ) ), [1 r8 }/ f ^" y I `
continue;
9 X# `- L, r6 P* V5 O1 {/ H6 J if( pItemElem->IsUndestructable() == TRUE )
# H1 O( |; ~5 ]9 r6 u" q {9 Q9 |8 W3 X% I6 V7 Q; b
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 T" z) T1 _, g6 \( e8 M9 {& {# l
continue;4 k$ c8 p q0 ~! U+ N
}
' K& w% z# D, f4 X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: a+ R- W+ F" X1 X
}
6 f2 U0 H5 @4 t break;
6 r- Y$ O. y) p; |1 K$ R/ f }
5 Z, j2 t8 z* X! F case 1:* V3 {, u- m- S# U
{
" F2 a$ C4 P& Q# c- x //整理背包
9 l' P8 t7 @0 r* S //////////////////////////////////////////////////////////////////////////6 a$ W/ z6 s& k+ n
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 @3 o, j, E0 D7 T% v1 A9 p$ r3 @* D
//////////////////////////////////////////////////////////////////////////8 l7 \& w. h; d/ F6 \
//////////////////////////////////////////////////////////////////////////7 u: R+ J" S/ @( @, e4 x7 u6 h6 }
CInventorySort* pInvSort = new CInventorySort;. g3 k( P+ T" H; K$ h1 n# w4 z+ G
vector <sItem> vItem;
$ L8 d* n/ ]6 K0 x( V$ X vItem.resize(MAX_INVENTORY);//初始化大小3 u0 h, R3 ?3 S+ e; T1 s1 R$ h( T
//////////////////////////////////////////////////////////////////////////5 D4 l" b) x0 A. Z. v; H6 T5 G
//填充数据
& `; G& C4 X2 F for (int i=0;i<MAX_INVENTORY;i++); m, {, r% z. u4 d
{1 _) Y4 I5 F3 P6 Q8 g, g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# m' K. J8 m2 Q% _+ t3 g
if (!pItemElem)
* B v) v- P! K' |, F) |7 `# {) K3 c+ n {0 I0 m' Q! Y4 z6 b% [: J$ w
vItem.dwKind2 = 0xffffffff;
A! A. q( V4 {9 Q vItem.dwItemId = 0xffffffff;, l) g6 G0 p1 S; B: ^! G k4 i
vItem.nIndex = i;
) T2 x6 F4 l/ x6 ^ }else {
! M0 U- R- s4 j; n ItemProp* pProp = pItemElem->GetProp();/ D) \' x# K" H! {* _. k' t
vItem.dwKind2 = pProp->dwItemKind2; X, J. A" [1 `- y- Q: K& s% l
vItem.dwItemId = pItemElem->m_dwItemId;
7 R& D$ `' v2 _; V) f/ A vItem.nIndex = i;
G- F+ t g, b! k }
+ C/ h9 ?3 G Z k7 P //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 |9 z, l" X3 }! i+ N% y7 Q
}
! L# h+ ^7 B+ X! D //////////////////////////////////////////////////////////////////////////
1 M1 Y! K3 J; C" ^+ X9 w sort(vItem.begin(),vItem.end());//排序0 J5 M: s, u& N( A9 L
//////////////////////////////////////////////////////////////////////////' c6 X- x5 q& r* Q/ _. p! W; Z
//交换3 D* ~" a4 |1 y6 h4 {9 J% i; c: G6 P
for (size_t i=0;i<vItem.size();i++)
3 v- P1 o1 q/ L% {1 N% i4 m2 D {4 R3 H) G7 N# s! V; v; Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# @; g: ?- K2 r! v# n) S0 r
pInvSort->Add(vItem.nIndex);
) f3 _3 q" J0 t9 { }
" z/ d! @2 [5 ]; [. e5 ~' t BYTE nDestPos = 0;
j8 \, w5 |* z/ p0 `, b" m for (int i=0;i<MAX_INVENTORY;i++)
; k' v4 {% C# h/ n9 o& T3 w {
0 _- \: t' g+ w4 p7 Q( g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: r S5 x, y1 p2 Y if (pItemElem)8 o& A6 L5 a4 Q
{. g) F9 }1 e* M) R$ `8 W
if (IsUsingItem(pItemElem))& c1 I0 a. ^* `7 m" V, W
{
& I% N9 @4 d0 }& q& r% I //这个位置无法放
* y4 q5 e9 N$ X nDestPos++;
! Q% k+ r& V# _, I: E' K }
! ~/ ]. v' m+ e& u8 c }
, j+ T; ?. S, {! j \ BYTE nSrc = pInvSort->GetItemSrc(i);" b+ B% Z; ]2 j
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 G3 Z9 j# m$ P' Q- a# ]
if (pItemElem)9 E5 x- P8 ~7 N4 V& L& N1 [
{
% n) V5 a8 |+ L/ U9 H* \ if (IsUsingItem(pItemElem))
, K6 k! G7 I g% `/ } {; H+ w2 \. w; g& {( ~5 O
//这个道具无法移动,跳过5 T- V2 f5 F4 |
continue;
& K" f3 o1 s% X }
0 R5 T6 A; Y+ u& R' L5 `5 u }else{
% b1 p2 u: V+ A- C; u5 J //空位置 不用动2 G' d0 ?7 p1 Q: d: O5 I
continue;
2 m0 Y1 C% K$ p4 } }0 t! ?6 h0 e/ U6 ` M5 ]$ R
//////////////////////////////////////////////////////////////////////////
6 o+ l6 P5 p' E# Y- _) Q g3 W# n G //开始移动
, W; k! @, i& j1 L+ [9 v$ I if (nSrc == nDestPos)
4 { ]' A9 _' M# o2 E {/ _: [0 p. K! u
//原地不动
, U) f' C2 C4 g" H3 J* C2 C$ a nDestPos++; Q5 w' K" p/ P! J
continue;. K8 h4 [4 u) X
}
7 |+ O! H& _2 f) j6 z pInvSort->MoveItem(i,nDestPos);
' b5 c& }2 J) G k5 N z g_DPlay.SendMoveItem(0,nSrc,nDestPos);! o4 `! K3 [# z- o# u) Q1 D$ U
Sleep(5);
0 c0 P. x- d; M9 `( a0 z, z //Error("移动 - %d->%d",nSrc,nDestPos);
$ O u5 U/ I j; y nDestPos++;, J7 P! B. `2 d' X A0 H6 k$ s
}% M0 o/ b% j! q! l& F$ y% V9 g2 z
//取第一个元素的信息
9 G9 |" S# c* V' K /*
4 ]$ Q& S. {9 R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 @7 Q& u8 i7 | g u9 M+ B
{
6 I( b2 ^- Z$ A' @/ P; b5 B; S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 [, j- O7 e8 d g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, f p' E+ p. @8 j! |
}
* H f5 b& L) ^/ D3 K */. m$ \& @% s6 r$ ?6 ~% t# a
//////////////////////////////////////////////////////////////////////////
& |1 H, X) h5 d4 }7 W/ ^& s; ~ break;& N) U9 f2 J0 ?& v: p- H
}. k! I% @- w6 \
} 1 \# n2 u) X% _
}
8 D& ^2 L& L% b Tm_wndMenu.SetVisible(FALSE);
. ^: V+ K, \" w% P$ \. u7 w5 [" x1 ~5 L/ \+ Z
--------------------------------------------------------------------------------------------------------. j, V( Z2 \- ~- ~) f5 d0 b. C
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); s3 [* l' |+ O% s3 n
{1 _3 e. L9 k* f) \$ S/ o
BaseMouseCursor();
1 `* z% O0 j: @! {}
( ^) L- C2 y7 L在其下添加:1 W4 N) z2 ^, p4 q. Z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- P- T4 H( u( X" m5 x{
; j" ^5 n6 P2 E7 A! qm_wndMenu.DeleteAllMenu();
; w$ L0 g! ~* W l* y% y) g6 ^m_wndMenu.CreateMenu(this);, ~& r$ }6 u, ?( d. V* v
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# S: z% o3 V! ~# t
4 o3 w8 m/ G; X9 @/ qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ S3 y! ?5 S6 N{! _7 R. {+ J+ H
//P以上级别才可以删除所有道具
# d, t- t) x* A4 g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% p2 f1 Y4 T% E' X' D}
9 T& I1 e! ~2 }% Q; D( p: |- T W5 s' Gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. _- V: ^1 g& [5 i+ h7 zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( K W4 q5 F, X0 C) c9 T" v
m_wndMenu.SetFocus();
0 \! e# y. r- V6 b( j}
* j& S5 Q- `4 O; O' k------------------------------------------------------------------------------------------------------------
. S$ h( ] n4 C+ J- e9 A& `2 Y' f4 X*************************0 d8 I* C( \" Z' ~
WndField.h文件
& o! ?+ o0 m3 J% R+ w*************************' V( E6 N' k& `% l ~, s
搜索:BOOL m_bReport;, i+ S2 Q- x+ F3 X( X
其后添加:* f5 ?, M, p6 T. o& H6 _8 g
CWndMenu m_wndMenu;
! `) q/ ]$ y8 X7 s! ~) B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, O2 O! ]) t* | Y8 { r- R
其后添加:. h# _1 S0 t$ i+ a
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 [" r# k' u) w1 T3 X
# W( @" e% B! W9 \: _- J7 C3 \3 J5 v! K' ]3 |7 H
|
|