|
|
源文件中_Interface文件夹下WndField.cpp文件+ `; g. U4 K. ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& Z7 M# ?- {% y2 @# e7 Q" S# h9 ]+ P1 E4 c! T) B! N- q6 k+ }
struct sItem
: _3 s* w5 C3 y; n{4 i$ f$ l: A: k0 ]* Z0 q
DWORD dwId; P' R! B; ?1 Q/ j& C
DWORD dwKind2;% s( K# {& [; o. M2 }" D/ L7 X
DWORD dwItemId;
- d! H7 V% V, G8 g6 T% KBYTE nIndex;
( k/ N+ F& m. X4 ?. P0 ?3 LsItem(){
$ t: i$ J" ~% J/ E1 x dwId = dwKind2 = dwItemId = nIndex = 0;
: w7 W; L. L: K4 c2 U; Y}
% \! }- e* |, q; Mbool operator < (const sItem p2)4 E: [4 u5 l2 V' T
{- B: _0 h% P8 V) j, k" ^# u
if (dwKind2 == p2.dwKind2)+ I9 o$ o9 ?% g g$ f% n
{
$ @* O1 `7 b# \ return dwItemId < p2.dwItemId;
. @7 b4 r! `0 N) Z* P& {6 W6 A+ e; ` }else{
8 N" ~( T7 `' N. m# F! d return dwKind2 < p2.dwKind2;( |5 f# f4 {* W" ~. z- E
}
1 a5 |0 X6 |8 L4 ^+ N7 M2 [}
+ A5 Y; [! V4 ^' ~& w};" h q9 H, Q M3 c$ o# ~
class CInventorySort
+ y' q+ B' P0 r: u: K{
, n* a0 h- z/ `7 g( K% d0 }public:4 x, S, Q; Y! u. u/ K4 |
CInventorySort()
: q6 s5 t$ ]7 ^% @, o* p{
3 F2 d5 K* t8 y1 k2 D3 ^ m_dwPos = 0;
, L8 M# E# D6 {}
' P* K8 W A1 R( p~CInventorySort(){}7 |$ n/ e; p. V2 X" m5 k; M$ N% r6 B: ]
private:! [- x1 d1 W" Z, M
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 W3 O7 d' S4 W- u rDWORD m_dwPos;* L1 ]* C9 V/ u3 s' j/ p
public:
) R0 C% p# X+ T7 v# J" V5 N/ b* qvoid Add(BYTE nIndex)4 Q2 m* J7 q: I0 _) L
{: s4 d( e8 X4 H. `/ B5 t/ @' O
if (m_dwPos >= MAX_INVENTORY)7 A& E. i- g, F/ W, ~
{
! }" A2 Q8 `5 K a5 | return;8 i8 w6 v u% x, S' p, o* L
}" Z+ ~5 Q5 }: F& J3 _% F; J
m_Item[m_dwPos].nIndex = nIndex;
0 c3 U" a; c. x9 B m_Item[m_dwPos].dwId = m_dwPos;7 f' F) [( L" p$ e( J9 h) l
m_dwPos++;: r& Y) U. c/ x1 {. G
}! |0 f- E5 l* L$ b6 Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 n) P$ _- F# m' ^+ X3 m
{8 ]+ b* x2 {& V c1 @% k
for (int i=0;i<MAX_INVENTORY;i++)$ C, x$ N# V* ?- v- B/ j
{/ Z/ M5 ~# J7 h
if (m_Item.dwId == dwId)
: J: V4 p/ B U$ ]' ?6 P, r {
/ O8 f3 y4 ]% v6 J3 B return m_Item.nIndex;3 w2 F) @ C% w( p( w; c
}: Q/ M5 R2 W1 j7 d
}1 M: T r$ E: O. B; v
return 255;( j, O5 K! s2 j3 e
}
" i. G2 E5 M3 T; t+ v8 X! kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: g# R+ _3 F2 h; q, }- b# E# w$ N{* r, M6 s, `, C+ T
BYTE nTmp = 0;6 X, I1 w4 T6 `4 p- s1 n x" x) u
bool bDest = false,bSrc = false;
# g3 u6 b, a# R6 I7 j/ T2 U for (int i=0;i<MAX_INVENTORY;i++)
5 x1 C1 u3 I4 O: R {) R; @% h" j: a( l
if (dwSrcId == m_Item.dwId)
& [+ `3 ] b0 E {9 E: K6 P y9 e4 R
//id相等 则 改变对应的dest和src
2 H( a2 h1 A$ F3 B. P7 u. v* p. a nTmp = m_Item.nIndex;
9 l. ~8 R" D! w) Y, B# W. l m_Item.nIndex = dest;$ h8 ?+ M9 r) X I
}
" b- w3 q/ j/ _' n h8 w2 x }% \5 V, Q5 b3 r" a% {# r
//临时数据保存完毕,交换开始
/ }4 }9 Z! d, R' R8 \ for (int i=0;i<MAX_INVENTORY;i++)# t g, K: C6 @7 n0 @5 U
{7 _) `4 @6 F+ D
if (dest == m_Item.nIndex)
0 Q7 n, F1 {( A* P4 g8 V8 d {& _" S. s2 R w- ]0 j7 P7 O$ Z) l
//id相等 则 改变对应的dest和src
6 T9 w0 ?9 p! j& {7 v) a m_Item.nIndex = nTmp; Q+ P7 J& s7 X9 j; Y* m
}
c& N# W( E7 s: A }; Y& a" {; w& Z" g; j- @& }
}) _/ P- F, K* {, m0 x# \* j7 U
};3 r! J/ i3 U: [' n4 Y' a1 d0 q
-------------------------------------------------------------------------
& Q# R/ ^2 |* f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ i1 N6 S6 m! A; k7 w$ Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ y/ s5 u& \4 O& C紧靠其上添加:" Z5 u! i3 x9 i2 _. Y- {
if( pWndBase == &m_wndMenu )
' ~! I. C2 U6 R, Q* i3 u9 t @{/ k: J" C2 I! E1 ^
switch( nID )) n3 L, q L" k- Q; B: x6 k0 Q
{
7 |7 j+ \: S$ \$ J% v8 D1 q# F case 2:* e# L: E. {+ J0 m i7 ^, r5 z5 v6 Q
{; Z2 k/ p/ |+ g0 Z+ Q: P3 b- C7 v
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 D: T8 V2 Q. |: T if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* J4 L" P/ z1 T4 T3 Q+ i
{
$ @( }) u( I c4 A) Q0 d break;9 ?- j" _& x2 j5 t. j1 G
}- p' y& r5 T+ {$ ]
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) @" V) c; p. X* j& k {
( V6 \: {/ |" | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 B- o, S( I4 R) W; m if( !pItemElem )
+ V5 C' Y3 g( [5 e5 N0 g3 S continue;! `! h# G+ x8 j8 z2 [
if(pItemElem->GetExtra() > 0)9 A9 [6 A3 [- c. y2 J% T
continue;3 Q. v1 z9 x1 ~: m, ]
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 S4 C: }' `4 r0 ?( b continue;9 S/ C4 c4 B# ~. b4 ?# B- z% \; ~4 d1 B
if( g_pPlayer->IsUsing( pItemElem ) )
/ A; l1 e3 Y. ~$ p continue;% g5 N, P y' ^$ Z! b
if( pItemElem->IsUndestructable() == TRUE )
) k" `2 k. \) U# |6 B7 i* W: _! Y: w {
: }' ~" k: @4 J- }# i, H# k" d g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; n1 a% r7 \2 y8 w/ x3 }
continue;) v- l. \- z& q* w
}6 A% z& I# V9 e1 F& I; ?! Y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; ^/ y! o, h3 k, `$ Z- c }( w3 k5 ^* K. A2 _) }2 @1 A7 S0 Y. h! _
break;* W1 b; E4 B& {: K% R$ b Z
}
9 I8 g1 h2 b/ ~ case 1:
# A9 t& A2 ]) I6 S: [ {
; h4 ?: J, g8 D% F3 c/ E$ w/ |: z //整理背包; V6 G6 [0 @, O0 p) J: I
//////////////////////////////////////////////////////////////////////////
! n5 ]6 Q2 @2 _; R" V1 h //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% ^5 N: Q1 J) F% P8 {7 @3 S, L+ d //////////////////////////////////////////////////////////////////////////6 k9 M& E. J2 Q; a4 Q
//////////////////////////////////////////////////////////////////////////
) k7 e0 L* k0 {9 ~4 J CInventorySort* pInvSort = new CInventorySort;
r+ P8 s+ I/ q vector <sItem> vItem;% |. |# B( s, L
vItem.resize(MAX_INVENTORY);//初始化大小4 K4 m) [7 a; P+ K9 Q
//////////////////////////////////////////////////////////////////////////! G6 c6 i. K- n4 O7 A, ~9 ]+ m* J
//填充数据# D8 ~3 K O% I0 D- O! L
for (int i=0;i<MAX_INVENTORY;i++)- I4 c+ z# j z/ e3 Z* |+ B; j6 q
{) V! y0 R) H# }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* y0 x4 Y' y: a6 K6 k0 X( d if (!pItemElem): J$ I0 a* _* M$ Z4 g+ `4 q
{
$ d/ B0 @. z! x& M0 e* U3 | vItem.dwKind2 = 0xffffffff;5 i% J) H# D/ x2 x1 \$ |; z7 {
vItem.dwItemId = 0xffffffff;. W* H& ?7 D3 ?
vItem.nIndex = i;
. _- R' z. Q+ [# } }else {5 v1 {9 Z& z! _! T
ItemProp* pProp = pItemElem->GetProp();) u8 a4 N L/ p
vItem.dwKind2 = pProp->dwItemKind2;
# W- h7 c4 M0 h" E/ W$ Q vItem.dwItemId = pItemElem->m_dwItemId;: S: s4 \. h1 i" a
vItem.nIndex = i;/ o1 Y, G& ]' G$ a+ v& |8 p
}
) u3 ~# F; W- `. o. }0 U //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 U3 N1 r- |2 k }
8 x. n& m4 |" ]9 q2 ^: p) u7 H+ } //////////////////////////////////////////////////////////////////////////+ P- s) C8 M' p' U8 v$ R! M
sort(vItem.begin(),vItem.end());//排序! a% F! T8 b7 b' ^
//////////////////////////////////////////////////////////////////////////
' `' u. R2 _5 Q1 x //交换
! w. @ B# T2 r6 o" l; P: K for (size_t i=0;i<vItem.size();i++)9 F( P- B2 S* A b8 I/ U0 m
{( X! K5 B* T" S8 z6 m$ A, x3 s
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 A5 x+ E0 u( k$ Y2 v pInvSort->Add(vItem.nIndex);
3 ^) y" ^( Z& w" ^: c } Q: B% W' K# M+ P/ B9 }
BYTE nDestPos = 0;
6 S5 Z, h, G/ [' @ g8 _+ L. ? for (int i=0;i<MAX_INVENTORY;i++), i/ d& O; k4 D) S% p. b0 d! w
{
* W1 r F' T. h0 @7 f( ]9 a6 |) b8 d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# X$ d. A) [# y if (pItemElem)
+ ^. x4 r' ?$ [/ K6 G7 |) B {
' h; h) z& f: t8 H3 { h if (IsUsingItem(pItemElem))1 B) m" `7 |3 A4 C; ]5 _
{
; n( N1 E6 o$ g/ v2 T5 J //这个位置无法放6 `: \, I; P9 t# {
nDestPos++;
& M6 H [6 L- s: ^8 ?& U }
0 |/ _! P: l# n( W }
4 D' J' Z. G/ d- b4 b# U BYTE nSrc = pInvSort->GetItemSrc(i);$ u, G* E. ~, e! y& \; k- e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); C A( R& r) T
if (pItemElem)( v* f8 n" t6 D' G2 F
{
- O3 Z/ G0 I) M' C% C) e* U if (IsUsingItem(pItemElem))$ e7 T1 [6 D/ L/ V& ?
{
+ f! T5 n- ^2 r. `( d //这个道具无法移动,跳过* C/ h g: l/ h/ A5 ^5 q
continue;
8 G5 d/ n$ y; p3 @ f }+ @# h3 |2 ?3 Y
}else{( e; T/ f6 P9 S5 [
//空位置 不用动
" u( f$ {& @, l- l" }- m1 P continue;5 W _* t+ {! b b
} f9 D9 Z8 B' Z0 K1 q' r5 g$ \
//////////////////////////////////////////////////////////////////////////. J5 K! V# J' q8 x
//开始移动# O5 ?3 y5 T* n. O
if (nSrc == nDestPos)( _8 X4 ?6 [0 Q8 z7 }
{/ o) O" w" W+ ~1 N
//原地不动- y! q, r7 m$ S1 _
nDestPos++;
( V7 v/ \! q% t continue;
$ D' f2 T4 V0 T( v }8 `, q: L! D% `4 `0 t# s+ V
pInvSort->MoveItem(i,nDestPos);7 K$ }, ~, U: @
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ [" N) N6 u! Y) l, q
Sleep(5);
% I' e4 n( Z- l1 K- B% E //Error("移动 - %d->%d",nSrc,nDestPos);
4 A9 n4 C z+ x& c nDestPos++;
( E% W& O. {' X2 @6 _$ U2 Q }) V9 B5 [! r4 m. p
//取第一个元素的信息
! l1 T; p D( Z8 t& }! b' d- L, U$ B /*
y: T+ g2 j- ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' ~2 X0 P2 P0 u$ R1 z2 `: N {
; B* \. K' d/ `3 e8 ^ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: @; D+ E5 A/ f" h) {
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 F4 E; X- W/ ]' e
}/ F5 E& _% B9 ]* ?# a" x; n
*/( I, ]1 M: ~% `) U, S6 N# q% g
//////////////////////////////////////////////////////////////////////////3 k) [" }5 a) e1 `
break;( k) r5 _* N8 g5 j& F2 `
}" ~! E' r& Q+ V7 @- q9 V9 a
}
/ A3 Q6 y L5 Z& Z; ]3 q4 @5 t( z}8 P9 s2 F& F% L( u* [
m_wndMenu.SetVisible(FALSE);+ M u7 U8 d! b* }+ @0 q
3 @ q; v" z$ W/ u9 j
--------------------------------------------------------------------------------------------------------
/ H2 [% A9 ~9 y* j7 w: T: [* {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), R8 `# C5 f4 f" ]/ n& z1 _
{
! d. U% M$ L1 \/ o9 }BaseMouseCursor();
7 N, u. z5 ?9 i}) K7 t; i2 q9 o' ~. _3 @
在其下添加:
1 _ |/ z- L5 d8 E! ~' M7 Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): _+ L' X+ w9 l* O6 y5 \* T5 [
{
, f* q0 K3 M8 y; k6 m: Z( ^& l/ Wm_wndMenu.DeleteAllMenu();
s3 T0 {; L+ |m_wndMenu.CreateMenu(this);) n6 _9 E# N, |. W
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 N: N$ r* d( d& C7 X- v
: p2 L2 Z: l& Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% {, J1 U2 `; Q' u7 j. v V
{9 U) h; W% ^& O' I) f: O+ E
//P以上级别才可以删除所有道具
6 ^' v7 N; M0 e9 Z, e4 E8 u m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! {7 `% Y0 |, U c
}
0 J0 S7 D, B W. ^1 H" p* Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
?' M! l. x. F: o9 E" g8 H% `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 G/ L8 p3 n2 t) L5 g3 ~
m_wndMenu.SetFocus();
4 p/ s% x6 {* M+ h}
) B* A% n) j1 h; M; }------------------------------------------------------------------------------------------------------------
- x" S6 H1 B/ @6 f8 M: U*************************
* l X3 z' s f" ~( `WndField.h文件, t. ~! X! g! a5 A/ U D
*************************/ s2 Q! Q2 C8 k0 t; N- p2 E, Z6 Y
搜索:BOOL m_bReport;% T/ ]3 H! o% d# Q/ g% Z# c
其后添加:
& j J4 R1 m) c9 E0 n6 ?CWndMenu m_wndMenu;
n9 f' b1 L' g% ]* i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 S# X7 J( b3 O5 ~. C& E
其后添加:
3 A. z, b8 i% K$ }virtual void OnRButtonUp(UINT nFlags, CPoint point);+ Z3 k* o0 n! Z I
4 ~3 c0 \/ P, M3 N
( o: b" d) A1 U. d+ H% W |
|