|
|
源文件中_Interface文件夹下WndField.cpp文件
# a% N: ?; ^8 l+ |' n# Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% T4 L' T' z- q) ] T" C$ S8 U9 ~
" @; z( f9 d9 z V2 `2 f8 Wstruct sItem9 P b2 a1 O2 y9 J& O
{) j. m# ?( \- w, t; f
DWORD dwId;( c0 q4 z9 S5 [- k$ f8 K: I: M
DWORD dwKind2;# c# q0 W4 ^- I* }; i0 h
DWORD dwItemId;
9 Z& Y! D6 ?) o% \) H5 jBYTE nIndex;! I$ a5 u$ k0 U, v3 ?. m
sItem(){+ h. N6 P& P k) V$ g% o
dwId = dwKind2 = dwItemId = nIndex = 0;
: {0 d/ I& G) V}& ?7 V0 ^8 Z8 ^( U$ z( E3 l+ H' k
bool operator < (const sItem p2)
6 U( ^0 {. l$ A# I' `& ^3 y( q! e{3 ^7 Z3 l/ S( U9 s# z( `7 e
if (dwKind2 == p2.dwKind2)
3 H6 \+ y( M0 D h {
" @8 N( V6 F6 ^2 L7 Q4 v return dwItemId < p2.dwItemId;$ ^; J$ j5 P% [/ ^; i# w3 X# z# n
}else{
3 @7 I+ S: n) G+ |& K' R) k return dwKind2 < p2.dwKind2;7 d, Z! Z- h$ K% i: q, }0 j
}
: n3 K' n! U9 J) Y) _}. @0 h4 w! }4 W/ `
};8 R% H+ B* J2 K6 V: Y- J6 P3 l
class CInventorySort1 ]0 G( e {( N' d& Z# L% _
{
+ ?4 K/ f! I" A# Rpublic:
' ^6 o: w- I" j9 ?CInventorySort()
) J+ K7 z }+ Y, m1 L7 Q3 f/ \% c{: g6 n4 G# d5 M$ t- T* |
m_dwPos = 0;
0 B7 a- }* X- c& y7 L; |}
' U( J9 b/ N7 E~CInventorySort(){}* ?$ q* }! _. v f3 P+ X! w
private:( z/ }8 `/ W: l) l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
M- Q c* a3 J+ c* lDWORD m_dwPos;
' {- O$ E9 P5 n& Y5 C1 C* [public:% |# h1 g/ I; Z& H
void Add(BYTE nIndex)6 m" S7 _3 j. C9 n. T" F
{
$ }3 Z$ Z- ], w& J if (m_dwPos >= MAX_INVENTORY)
( [( E; p% s. @0 g {
+ B, q$ ^. f a: y return;+ d$ E+ Y; }# \. u& r4 V5 Q& ?5 o
}
% H$ j4 w; U9 F1 Q4 W* m5 U m_Item[m_dwPos].nIndex = nIndex;) r Y+ r' |; G2 E ^
m_Item[m_dwPos].dwId = m_dwPos;# j& t' x( @- w9 c" _& B8 N
m_dwPos++;( q5 w9 W' C( |& r% G/ |5 t$ m- C
}7 j1 ~6 Y4 j1 H3 f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, }" P! a/ c# J{
. k) ^( r6 \9 p- ~" ~ for (int i=0;i<MAX_INVENTORY;i++)
, [" ^( X9 i1 r: \6 L! I5 Y {2 u0 }* H' [2 W' _$ O
if (m_Item.dwId == dwId)! J, k4 A0 M$ W2 l
{* U' Y/ U# X* p' r- A
return m_Item.nIndex;
% [, W' G9 Y" C) @5 a7 p8 A" j) k }
" ~) z1 [7 ^; h2 k! b }
0 m9 I5 W$ E2 T. M/ Y return 255;
0 o/ f; d+ i. y# e4 s7 G# k}
: p' d+ w0 N3 ]& o# E* nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& e' v) S/ m+ l; ]
{5 z4 e, A* ~* s- a* Y {
BYTE nTmp = 0;5 K! ]' L1 w0 k( V& S
bool bDest = false,bSrc = false; T0 i1 P2 n' r( o# k/ L0 N
for (int i=0;i<MAX_INVENTORY;i++) k! O, Z3 ~: d5 ?2 L: }; l& j& t' \7 Z
{
1 H, g" H* Z/ d) z5 P" l# M if (dwSrcId == m_Item.dwId)
3 t0 C- S& k- I4 Q' `3 Y2 z {
2 I, m7 G; n, u3 X% I! ^+ b7 } //id相等 则 改变对应的dest和src @5 r" g# U( \4 o& G1 b! ^
nTmp = m_Item.nIndex;
$ G9 {$ ~* }) ~) ?: W% s m_Item.nIndex = dest;
, y- Q* w+ ?5 Q7 \' Y }
u8 M' M% h4 j- [0 A2 v& ^ }6 O, Z; J$ P( T6 L) n [2 t. ~
//临时数据保存完毕,交换开始0 A1 K6 ?; J4 \8 `: B9 p
for (int i=0;i<MAX_INVENTORY;i++)+ L5 d: Z p( @! ~9 N) Y
{% }$ i; S/ a$ J
if (dest == m_Item.nIndex)1 v1 T) a4 o4 ?% {& y: m
{: P. {2 S. O+ m: H% [4 a1 X- e1 M2 h
//id相等 则 改变对应的dest和src
9 _, [2 D1 w% e2 E$ a/ r5 `3 Z* N, b m_Item.nIndex = nTmp;8 ~: U: G2 i- S$ v# C
}
1 n3 ^4 }$ V1 H( [8 G, v+ e }
5 O/ `4 X9 n) W$ L}
m/ P4 {4 F. Z2 ?# r1 {: D};( r7 L% v: E, t( K$ j1 D
-------------------------------------------------------------------------# L6 ]6 Y. |, e/ |5 A2 W
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), C0 v1 e" R! H4 u. _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% m" V1 }$ V3 R/ u# [1 N+ Y7 `紧靠其上添加:
6 `% b% F+ `0 M+ U. s& E2 i3 m aif( pWndBase == &m_wndMenu )& L% }5 e' D! @/ A
{1 F x# m' S2 G+ k- U$ Y
switch( nID )
( T# f3 t& ~8 d/ J0 B {
# d0 X8 L: G7 o, c case 2:, H+ R! ~3 _- \1 R
{# l' V% Y& N3 `( j/ G9 t. ^
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% ~2 k5 c2 b" D; ?# S: s! D if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; h: j2 {; k- ~. R {
6 j/ A- q) \8 b! c/ g0 _ break;; S* d7 H4 ]+ K+ U9 c# }
}
; H. a$ A9 {! a3 E+ e for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 N3 i- w5 r7 G" O! z g9 P
{ U7 v5 K4 q1 b4 t" F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% l1 h+ [$ k2 c/ f if( !pItemElem )
+ J' H4 W* [" \% D+ ]7 D7 z continue;
M& I' @9 [; t7 h* w; O8 r* L if(pItemElem->GetExtra() > 0)
* k" P+ ^1 X& ` continue;6 S4 P- G) ^) e3 ^7 A5 I, y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% L# q( r+ H5 v8 S% [3 d continue;' A% k$ ?1 U: o' F g* Y
if( g_pPlayer->IsUsing( pItemElem ) )
" k8 f7 }5 Z* H, K$ p1 A8 g continue;
5 V2 p9 I" p5 f/ e if( pItemElem->IsUndestructable() == TRUE )
4 B2 j" p2 X) ^1 j {" j; h& [9 p; j( n+ R K3 [& `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 B( L5 S- c# ]4 K5 U continue;; F0 V- ]7 u S; U1 `
}
8 N6 M! f# S( t- L+ k: g g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- |3 W9 J/ B# _4 }2 F% n- I9 C- h }! U+ a# W* r. c4 K: q) N
break;
g7 I% P% z/ G; U }
" F _% c5 u7 A% ?( E case 1:& ]+ r- g0 R* C. { ?8 G" g
{
8 Z: L! P# X$ n4 w$ Q4 p# }+ F+ G //整理背包
8 j& e$ q! M7 T: e% i% t# B+ X //////////////////////////////////////////////////////////////////////////
& g! b `- t5 d7 [% Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! r7 m9 u( m, K3 V9 W
//////////////////////////////////////////////////////////////////////////
8 u/ Y! D! x: U3 L Y1 u2 {+ m9 | //////////////////////////////////////////////////////////////////////////
3 d* H I; z6 u$ k CInventorySort* pInvSort = new CInventorySort;+ m$ m" B; e" O. [' @# ]; x
vector <sItem> vItem;
6 Z, h# N8 `0 `/ y |+ c2 | vItem.resize(MAX_INVENTORY);//初始化大小/ D4 e( i1 [' T
//////////////////////////////////////////////////////////////////////////: S" N; i" F( L* G, Q$ [
//填充数据 x6 J- B& _' d: y+ l* c! \$ i" N0 `- t
for (int i=0;i<MAX_INVENTORY;i++)
) j3 }; t" ~( O8 X4 `' N @ {, D& N# O+ K$ w' Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' v7 ~' L% k+ f1 |# R1 r; ?
if (!pItemElem)
, c' {7 }- }. l, `9 ^. _% k, X5 Z7 u {
; @) j+ A! j/ X+ v vItem.dwKind2 = 0xffffffff;; [; u3 ^: a# _2 W0 i3 l
vItem.dwItemId = 0xffffffff;
& _; q$ }: C0 D. n) N( y vItem.nIndex = i;: V) d/ @+ i$ t- A( d9 e+ d
}else {
# y& J2 ~' {' O- q6 r ItemProp* pProp = pItemElem->GetProp();
( i+ E- N" W+ D. j vItem.dwKind2 = pProp->dwItemKind2;
2 |% r/ m" t! R9 t3 J: y: k9 S vItem.dwItemId = pItemElem->m_dwItemId;
' T, ?5 J2 X$ @; C1 z5 x$ U vItem.nIndex = i;/ y9 c% ?8 s4 R0 e0 _0 z- ^3 \6 R
}
% H& D$ ^4 Q7 @2 `' H4 {3 ] //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! k1 l3 t! o/ I3 J8 n% ~6 w }
4 A2 m) U5 [2 Q- `* o, v1 w //////////////////////////////////////////////////////////////////////////% y# [) r% {4 b- o
sort(vItem.begin(),vItem.end());//排序
' p6 K$ `; ~+ g/ `4 a y% n% f //////////////////////////////////////////////////////////////////////////
4 r5 O% g% a3 y //交换
& l+ {6 b. G1 D. H" K, { for (size_t i=0;i<vItem.size();i++)
. A5 T [* ~) U3 N+ ~" u {1 L, l3 [' ^* h9 X0 o3 n
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# I6 _" I l9 v& Y6 r
pInvSort->Add(vItem.nIndex);2 ]( V8 o& }: }8 P& m2 W
}
. }' ^5 f$ F# T; C5 Y" V BYTE nDestPos = 0;. _( Q3 v. J: w3 N8 |
for (int i=0;i<MAX_INVENTORY;i++)
. m6 x8 x4 c' Q+ C5 ]* N% m {
- k7 h4 Z5 l8 J- y; u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" c9 H& K' t# a) K if (pItemElem)3 W3 z" D: ]' i% u' k7 ~- a
{ Y7 X* B3 A, h! E4 P# j- e$ ^8 Q
if (IsUsingItem(pItemElem))
2 k* P9 K5 N: c: M( N( b( a {
0 y7 g8 M/ O8 k; b5 a0 p //这个位置无法放" `& M6 v" I, `8 T. k% J$ g
nDestPos++;
/ J, m& x' j2 i3 U }
& P$ C& N5 [ M6 ?7 w }4 F- E1 i; r& d" e- J" ]
BYTE nSrc = pInvSort->GetItemSrc(i);3 e) _4 `8 N' r( z1 O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ u* h& {- M2 y' O0 g
if (pItemElem)
* x5 x* K& A+ I! o) a4 W6 G {
# V1 t; J$ D6 S4 q if (IsUsingItem(pItemElem))
9 ~, g0 ~$ V$ A9 K! ? {
2 L t4 n R+ u8 V8 [# g p$ H //这个道具无法移动,跳过: x1 q$ a+ p+ n& e
continue;
1 C6 @' _" ]$ M }% W3 U/ B0 W+ J0 z; ^0 f+ s
}else{6 a0 C4 @$ M% n. A/ U
//空位置 不用动
7 d1 G5 ~/ K9 R8 g- a9 {, }* S continue;
; k& W6 e9 s1 U/ O% ^& B+ ] }/ W7 b2 Z# ?; M# n F( X0 z
//////////////////////////////////////////////////////////////////////////
( Z0 M$ |3 a5 [3 f2 a9 v8 l# Q4 C- h //开始移动
; v! I- s( q1 C if (nSrc == nDestPos)
! M {7 R4 U% X {9 p7 @. d/ E; T" X
//原地不动
7 J0 `1 |2 F- T nDestPos++;
, a: y+ A7 c- |6 `# ?$ Q* | continue;
& S: k" B) ]3 @$ {5 J }
1 s" Z& Y2 \! e: D, |- S pInvSort->MoveItem(i,nDestPos);
5 t0 R( k% B* m2 M; q7 _5 f% ? g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ k" j6 o- N' \" W0 Z/ ^3 k, Q/ f Sleep(5);
8 b5 ]* ~& W# d# r- D/ w4 x' f //Error("移动 - %d->%d",nSrc,nDestPos);
3 ~. Y7 C; w/ d x+ v: p nDestPos++;+ h" Z8 X/ e3 {# ^
}! ?+ m2 I% S& h- \
//取第一个元素的信息
" P* f* [9 l1 a7 q+ R! R+ ^ /*
8 F: [8 s4 r7 R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( M4 E- g, v% v
{6 U4 U( Y, b5 G. j# k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 |0 p6 v6 |2 |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
x& {8 T7 N2 n8 J1 {, f5 A }3 V- h( J2 X+ N6 A
*/
/ J% V3 M% c1 A0 m; Q' G7 D$ u$ k //////////////////////////////////////////////////////////////////////////$ M- S, M0 `+ u' @
break;7 E: i) ?9 D9 Y$ d' f/ p% R1 @# e6 \
}
1 R7 s+ ~" |- c0 K9 C1 {7 K } - f+ u9 Q) z" |: d) Q3 ?
}
* @' b2 A# N9 `8 I) im_wndMenu.SetVisible(FALSE);
1 n. C# |0 |/ l) A. w5 {. \& g$ x1 N2 A0 i" V% o0 n
--------------------------------------------------------------------------------------------------------! K7 N! \* q1 u( ~
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ i5 C" S& C% K/ q1 [3 L7 d{- Q# T6 G5 D/ i: S, _ R5 z
BaseMouseCursor();
* d8 J8 z, U9 r, P3 y}3 C% @# m2 M; x$ C. M
在其下添加:( d3 `; ]0 j; \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ p& H8 C, I9 D{$ M( e8 `/ B5 l
m_wndMenu.DeleteAllMenu();
. t" r0 g3 W8 j5 `m_wndMenu.CreateMenu(this);( X. b% n, I, J& o0 g+ B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 P: Q7 K& ^9 ~
& O, B$ t4 c- U5 q: s f
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, ]0 l) e. {3 p: G- ^" ~! {" [{
4 H' w/ \# Y! k: H) k W, K //P以上级别才可以删除所有道具1 l: C0 s% z1 U4 ?* ]1 m N N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! x$ ^! \% `6 \/ p1 g3 c4 c} ]9 c' o& K1 m1 W& m; ?; V9 Q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 \$ Y% t' j9 um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ F" n7 p8 C3 t
m_wndMenu.SetFocus();
+ l2 r* n# b/ e0 ^* \$ u}
) y7 h! q R; ^- h' h------------------------------------------------------------------------------------------------------------/ }# h) x1 ]3 A+ i0 |
*************************
) L# ] D3 ^. O- Q% e( oWndField.h文件4 T7 ]* R6 h! p* U( x$ k; G! |
*************************
7 _5 m" N5 m, |4 C搜索:BOOL m_bReport;, r, m- T ?* ~
其后添加:+ u; Q5 p+ p" \5 L8 I9 Z& K4 j
CWndMenu m_wndMenu;) c9 n. T+ ]! {8 ^* E6 w8 S) ~9 j* S
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 u5 F/ p% s! ~$ p' u其后添加:
" Z/ t, Y1 f+ {/ @virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 C/ O7 @5 h# G7 `) A2 u+ a6 }/ W, h
# I9 O3 f0 v" L0 Q6 r! c7 Y8 j3 N8 K& M8 F+ a1 M+ N
|
|