|
|
源文件中_Interface文件夹下WndField.cpp文件
1 ?4 g' s6 o& T6 r# S' F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ j7 W @. `2 S/ W: P3 k6 k8 Q8 g6 d- Y
struct sItem3 o" n; p! B: U1 j, B( l
{
8 {% `% ]5 }& `, BDWORD dwId;( A5 ?5 E, u2 ^3 {: H
DWORD dwKind2;
5 D, U B7 T) Z1 T1 {# ^ W( e+ d9 k; ZDWORD dwItemId;* x2 \6 Z9 v4 c% a, b
BYTE nIndex;
: S) {1 `( }8 o$ Q" xsItem(){2 M! z; h, |, U, \5 d5 ^
dwId = dwKind2 = dwItemId = nIndex = 0;5 z! b( \$ Z* `' l. r0 L5 J; j! b
}7 c: r0 M0 f& ^' k/ d8 z6 k
bool operator < (const sItem p2)6 t1 T3 I W! a+ J
{
# v& r b o$ I, _ if (dwKind2 == p2.dwKind2)
: S) }0 p: B) X0 ?9 V( @. J s {
V. ~: [, [$ O% R. p8 m return dwItemId < p2.dwItemId;
4 d- k0 J$ j8 \( \* i8 e: l) m }else{
9 l. v( `8 T/ t3 w return dwKind2 < p2.dwKind2;
* {/ N+ M4 R# F, ~3 w8 L. @ }
+ G* S- p7 y' d5 X) k6 S}
" Y* W. V6 K4 E; d$ R};- { }4 U4 S) b4 K4 h
class CInventorySort
4 ~* N, k, ]9 | ?- \% \{8 O' z0 }" a3 T G5 s4 D6 u
public:" z" M* q6 U q
CInventorySort()
& }' |% w9 @! r1 \' d: U& `/ ^{
# j B- q( H- ^) C+ |4 J m_dwPos = 0;
3 L E% K: ?! ^; I}" M" ]% }. D: \2 N
~CInventorySort(){}' D, E- c# T$ l' E
private:
9 Y$ ?& y- @$ u- `* AsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& {' }4 J; j- BDWORD m_dwPos;5 T! |1 r$ r8 R" F, u& X( D; y1 U5 ]
public:
% T- L+ L# X# @) i: v! Z' Qvoid Add(BYTE nIndex)1 M/ K/ I$ F4 y
{: }# ~: H6 ^2 p
if (m_dwPos >= MAX_INVENTORY)
- _* i8 z' K9 ]* O* Z* t. ^4 H {0 i2 T d2 {, [
return;
2 i+ F' ]2 K5 }2 i. i1 Q }, j2 E! t5 T/ ?1 b3 c
m_Item[m_dwPos].nIndex = nIndex;
% c0 l7 s0 a+ C) ~$ u# ~ m_Item[m_dwPos].dwId = m_dwPos;8 e$ a/ S/ [; L3 S- Q% @8 L
m_dwPos++;- @2 g A' y4 W, D
}
) u, P8 z' l& e# ~; ^$ j5 E) [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: x2 M/ j9 t1 d{
2 n4 `6 x, v* T for (int i=0;i<MAX_INVENTORY;i++)& ?% w3 E5 C' l% J0 |6 L: P9 f( N. T
{) L$ @* M8 ~# U. C' f0 w& e' Q) r
if (m_Item.dwId == dwId)
# f, S( o* Z- K) A {
) ~$ i# x j) ` return m_Item.nIndex;
6 D2 R/ C1 p! V" t }
1 u. c2 R% J7 x5 E }0 q$ d6 y9 v4 P8 }/ w5 g0 z
return 255;
7 J5 C4 e/ _) l: k+ }}% b1 b$ s2 m& H3 R
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- s/ G0 F/ R, I2 Z
{
9 H' ?) h+ n! I2 _* }8 D BYTE nTmp = 0;# Y: N) e8 D1 [ ^/ W+ {
bool bDest = false,bSrc = false;
# D# M" t! k: O' X! { for (int i=0;i<MAX_INVENTORY;i++). G! m$ C- t0 t
{
3 C4 _; i& k$ d& i if (dwSrcId == m_Item.dwId)% J1 d- {2 Q5 U/ g
{
! R2 K h1 G2 q) s" ^ //id相等 则 改变对应的dest和src
5 N# m6 a7 m4 e" s3 b nTmp = m_Item.nIndex;$ P3 x9 k1 H. D% V( f M( o4 g* o
m_Item.nIndex = dest;
& d. Q+ s* G6 E }
3 D5 {6 S" C) ?* h& Y* T# p }/ w: n# V4 b! Z+ `6 ^" L! |5 b5 c
//临时数据保存完毕,交换开始
5 G# f3 ]0 D! ~% n/ P& r x for (int i=0;i<MAX_INVENTORY;i++)
$ i: @* C% k7 K {
% K/ k$ E$ o) b- F( J; I if (dest == m_Item.nIndex)& q$ R0 J! @1 e* {; r
{
5 b T1 X$ ~" |4 q' e$ F //id相等 则 改变对应的dest和src4 \ f. p: S+ p2 B
m_Item.nIndex = nTmp;
8 Y7 }! {5 c3 F/ W* u# e4 o }
4 a7 x- M U' e }
8 d2 O& z" f. I0 s) H}1 ~* {4 s$ a, _2 z ~* E. X. O( K
};8 j' j; ~0 H7 u/ u1 d6 H
-------------------------------------------------------------------------' I: Z2 \4 }: h5 x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' B {. t- Q$ C! W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: s7 N2 ^% e. t紧靠其上添加:
. R7 H! o6 M- ?( Q" uif( pWndBase == &m_wndMenu )- ^' ?& ]$ L# r1 p" T; W5 X
{
/ W& I1 o( A" Q0 J! c switch( nID )
5 C: l: \6 W' @& y2 W8 X& J { s4 c5 n) S! [0 M1 v
case 2:
- |/ d4 \( G5 q U {1 a3 q* V# C j* ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
S- o% M, O+ f3 k- N if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 ^" `" l5 R, f2 K {
* z" L! z; S9 X. g5 Q0 M break;
8 S9 w5 b3 v( {0 J% ` }
! i/ r1 o0 a2 t# Z, Z9 g2 N0 a# Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 x: C3 b0 h Q6 [2 l* v$ @4 k9 v
{( j8 [; o3 O4 q! p( `* {) F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; r# {* f. P( a( ~7 ~! e. ?
if( !pItemElem )
3 J3 _- f8 b1 T. g continue;+ B- F# q- ~! U, a
if(pItemElem->GetExtra() > 0)
* [0 v" j1 u4 K5 V continue;) v0 f3 K- m" v% D
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% G) b, a5 q# {* V# I7 P continue;
% d- m/ G! P9 u, Q if( g_pPlayer->IsUsing( pItemElem ) )% O# M& a& b u+ V1 w
continue;
( |3 H6 ?: s3 H if( pItemElem->IsUndestructable() == TRUE )5 }' M8 ~1 p& D' ]
{
% e& K- @9 j' u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 ]+ u6 g! r& b# U, k% D6 W: W continue;
, w8 `; l6 E& N! H }3 j7 q0 t& u5 H& ]/ z6 @" }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ y0 n6 T5 h9 I* L& C4 `0 F# |
}
, M( D2 x7 S/ _& } break;
7 W9 O" Y% }4 Y* J) Z }1 e- C( \: ?& Q; x1 T, g8 R
case 1:
& l# h, b: I: a+ U# s {
! x6 o2 Z I4 f! b //整理背包9 s9 {7 K- x) s# y5 |! i
//////////////////////////////////////////////////////////////////////////+ T+ I" f n; Y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 V4 X3 R5 i; B% r- e
//////////////////////////////////////////////////////////////////////////2 \2 F9 @, b+ E0 {: z# ~# |; z2 t
//////////////////////////////////////////////////////////////////////////
+ p z0 I/ Y$ I( i CInventorySort* pInvSort = new CInventorySort;
& y6 m0 _; {; g+ v6 [ vector <sItem> vItem;
3 ?/ g3 q* s W8 ]$ |1 H5 k, c vItem.resize(MAX_INVENTORY);//初始化大小% e: @* N) E" _9 \. y- J8 J4 g: Z* f
//////////////////////////////////////////////////////////////////////////
# M1 L; X& H6 E6 B! X/ A //填充数据
) F' I& ]) S( k* |: H. c7 N; } for (int i=0;i<MAX_INVENTORY;i++), g3 C: M3 h0 O; S
{
5 s' k) i+ ~8 q% J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. w9 W, G( O4 f) k, ^7 _- [# y7 T
if (!pItemElem)
" X9 ^. B. c! T# M {
$ p) @# P2 j; A& v vItem.dwKind2 = 0xffffffff;# V* Z" Z" I& W0 L1 o
vItem.dwItemId = 0xffffffff;
4 b* n$ v# T+ [! k vItem.nIndex = i;. u# K' Z7 V! j+ ]3 {2 W
}else {- k# O" x* Q- I
ItemProp* pProp = pItemElem->GetProp();
. U' T! U6 q. o. Z; p5 G- K vItem.dwKind2 = pProp->dwItemKind2;
2 Q# P$ m2 m) {* S& l! | vItem.dwItemId = pItemElem->m_dwItemId;4 a/ m( p1 }7 g( r% i: i
vItem.nIndex = i;
1 Z% M# G3 j6 [5 H }
# `7 B" I. w( H* u //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 d2 f3 u6 J9 M( L
}) b' p( x6 r" H' y1 W- X7 ^2 U
//////////////////////////////////////////////////////////////////////////
4 S0 f. I0 J4 X8 ` sort(vItem.begin(),vItem.end());//排序" ~) S# r1 _4 c, S- F
//////////////////////////////////////////////////////////////////////////
) O1 k2 s# N* r3 D$ H //交换
3 e! b4 p5 L+ N$ i3 S! { for (size_t i=0;i<vItem.size();i++)2 N* B" f( N. \: v* h" V
{( c' F; {0 x( j$ h
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( ^* n8 q) Z3 r. B2 x
pInvSort->Add(vItem.nIndex);
1 B8 K) u( u: [! [3 Z [ }
! Z0 [9 ~) B9 t4 G9 e/ u' _ BYTE nDestPos = 0;3 }) k3 a, h% n& x2 K5 D6 F
for (int i=0;i<MAX_INVENTORY;i++)
0 d6 I9 Q% b8 I2 ]7 g+ Y6 t {
n; l" l2 L, b* c% _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 v3 M% J I* t# c* |0 W: Q if (pItemElem)3 Q* }& w( j+ R
{: i: V! X3 D, s1 B' a8 f0 D& ~' K/ f
if (IsUsingItem(pItemElem))" }; ?3 _' z# w6 w8 [5 |6 O
{/ d% ?4 J3 J- D/ w/ G- J2 D
//这个位置无法放9 E# S3 x6 W+ P& }, h
nDestPos++;9 f W2 n0 p( ~
}8 U7 O3 {5 Q* f& ~
}
6 t7 [ b: ]0 v% F6 U4 n BYTE nSrc = pInvSort->GetItemSrc(i);
- E8 @2 K7 p4 T0 a pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 k* q6 H9 w( y1 q5 F2 P" D if (pItemElem)* z5 }6 F* y Q5 d6 [) G
{
) n5 Z0 L( d- O3 w/ V if (IsUsingItem(pItemElem))
% m# q9 c( c* d( O4 V( X {8 G5 f6 I3 K! v% b/ w# i7 L2 A8 \
//这个道具无法移动,跳过
( S) W# O x% Y continue;' Q+ M# `$ `$ Y; w) n. b% b
}) c4 }* v1 o6 V: Y! r% |
}else{
6 U) i$ C2 r" ^8 [( {6 D' L8 V //空位置 不用动
# G% O p9 {1 g1 X continue;+ A1 x. A' M# ~
}
5 Y. } J# Q1 H0 a8 o+ D3 H //////////////////////////////////////////////////////////////////////////
+ C( N; O* g( z" [1 @& X' a //开始移动
2 I0 ~/ R4 i9 R& b A if (nSrc == nDestPos)
) t& B! |9 X; W) v* E! T1 L8 a {, H8 Z" I1 G' B* S* {
//原地不动
+ `( O9 Q0 u; d- v0 _0 u0 A nDestPos++;
4 o( ~; z6 r. ?2 q0 {1 F) r' ^ continue;
1 u; n( b1 x( G+ N }9 c+ q# }1 V3 ^7 Q
pInvSort->MoveItem(i,nDestPos);
: i m( j* A1 \9 X2 y g_DPlay.SendMoveItem(0,nSrc,nDestPos);, F# l5 d; [! Z7 r, M# n" q% y
Sleep(5);( b; z( d, |) v% g- N( n2 R
//Error("移动 - %d->%d",nSrc,nDestPos);
% [7 O0 E! V; I# U# y6 X nDestPos++;
) T7 r5 [# w0 N }
) T V( V. O* S4 v //取第一个元素的信息
" P# }( l) C$ J9 K) e /*
% T, q2 G T- U" r* |* T0 N3 Q if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), {- M1 A8 e/ @
{
: X# x* d8 S- k# J! ~ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. k) j e) Q f! X4 E( B( B% d; X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! }2 }5 a% \' ~6 D1 P- @! e4 n
}
/ z$ D6 c* n8 v5 ^' r2 x: ?/ b6 M: b */7 j y$ h! I8 h
//////////////////////////////////////////////////////////////////////////
5 w( o$ T1 Q, {7 V L break;1 @' {6 Q! P5 J# B; r. l
}/ I: P+ z! G* k7 g
}
" N4 B9 l+ s1 w9 z% A9 M}
5 {& `6 r9 |7 X" ]0 Q% L, [m_wndMenu.SetVisible(FALSE);0 i. l" f) Q4 O% o6 D
) C% H( U& K2 d6 I9 `: v. z
--------------------------------------------------------------------------------------------------------
: Z" J% n( }, e( w- v5 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 x/ B$ |, _/ J/ l) d3 V/ P6 O{5 O* F; F8 ?0 w' ]6 P/ F5 S/ V. k
BaseMouseCursor();, k& w; [+ d3 v, Q& g# x2 S
}
i2 m; l6 G) _, a# E2 k4 z+ v在其下添加:
' t) k' Q# w" j+ c2 ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 ]8 f% m% e5 C. f& B
{4 ^4 v% K* a2 E) e8 |
m_wndMenu.DeleteAllMenu();
4 m+ G Q3 s2 ~- N6 a9 b3 ?m_wndMenu.CreateMenu(this);
3 e. U" p) }1 S$ V9 ^& W5 Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
r3 }% s! C+ l9 I( b* S; A5 Z! b+ h$ i& V1 a0 i" z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# ]. r3 k7 `- k" l$ c
{' x2 D$ D) l: a) `& k) r
//P以上级别才可以删除所有道具
* _. e m, ~" ?1 s" X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 n+ ~+ R6 B& d# u# v$ T$ U9 @
}
. S' L+ {. b9 }. {/ P0 Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: M' ~3 |1 x* g x; v! Rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" s& j6 P! T: E% h; x0 ]m_wndMenu.SetFocus();
) ~. { O( y5 H0 T. f3 H}! t d+ r& x( o. Q7 q* V" n
------------------------------------------------------------------------------------------------------------
; V( b( o7 G8 q3 e1 J*************************
c9 e5 Z. e! w& j ^$ L* B: ^WndField.h文件! ^+ J) A5 m9 ^+ W3 ?7 h8 |7 u
*************************% O Q0 h; I# l) n5 T7 [, [
搜索:BOOL m_bReport;
# t" r1 k! |; D8 Y: e3 `. K其后添加:
8 N p( {, M4 o. B R2 m2 A; g1 \9 vCWndMenu m_wndMenu;: g# a" f8 j+ v$ \' N
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 M7 }; Z0 H, q% S% o% I
其后添加:! ?4 f( u8 l# I5 l+ @6 D
virtual void OnRButtonUp(UINT nFlags, CPoint point);" C5 K* w0 S* T4 s; y" B2 |
% ]& @ _3 b' d. l
+ o% x. e- I1 t |
|