|
|
源文件中_Interface文件夹下WndField.cpp文件* ^( D% u) b& `; u, q# L. z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) O4 z4 {( e6 g, L% e. u) I3 F% @; ^& e* @3 }* E$ z2 R# z9 g9 a: ]
struct sItem
2 G: m0 [9 e4 _+ h: r3 Y* _{0 a W/ o' U) R* z0 [6 V4 `- K) `
DWORD dwId;
1 i) B2 t7 g% A6 hDWORD dwKind2;
4 w! ?" q" @( F# X" r' d4 WDWORD dwItemId;
) g* ^' h& d: T* WBYTE nIndex;5 \ c' ^. t2 N: D+ X7 w
sItem(){8 @9 k2 x/ d$ `# z0 ~/ A X$ Q( Y
dwId = dwKind2 = dwItemId = nIndex = 0;: V9 E3 F- Y, Z
}8 g$ k, v' S% A
bool operator < (const sItem p2)2 a' a7 }5 O$ c( _& v( `: U) @4 u' }
{
8 X S' Z) S4 m% v if (dwKind2 == p2.dwKind2)5 g- A8 b2 a; C
{
/ {+ ?8 n4 o: N# _8 e: h return dwItemId < p2.dwItemId;4 K+ M: [2 P+ k& S& O
}else{9 S+ J% T9 y8 @8 W E i! Y
return dwKind2 < p2.dwKind2;, j- I5 y1 [8 ^2 v5 Y! l
}- H/ q. P) s u" |4 U" g) l
}
& }2 K6 ?$ P* v% G \8 K};
4 n) r8 }7 q" n4 y6 Jclass CInventorySort% R6 g1 C* }) r% t% \. ?
{; D$ O/ X. \, q, Q
public:
( o% K- S/ v+ Y! N0 Z2 OCInventorySort()
3 R- m+ K& \9 e) |. P, Y{
1 ]* {# F0 a. C m_dwPos = 0;( V7 k6 d3 u% W4 q; C# }% D5 d
}
( [1 X9 m- U0 c! B; D~CInventorySort(){}) B1 G) z: p) W" ?1 e, i
private:" X, I/ G/ e" l, \0 a* E6 [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* O& ^+ f+ {; j5 I/ |DWORD m_dwPos;
+ `9 v) @* w! E0 a; `public:( g; P% e+ I0 G( N! w' G: q Z$ C
void Add(BYTE nIndex)! J# g2 p6 @2 F# A3 [3 n0 Q- w
{8 T( z9 Z: C9 _2 B: Q1 X+ ^
if (m_dwPos >= MAX_INVENTORY)
- i# @3 B+ f# y) C. B5 }3 _0 p {) ~1 l1 v2 H" B7 X Q3 S" w
return;9 w, V: Q u- `. M; C; v. m$ i% N
}4 ^! l% ~- l6 k7 q! C1 T( |: L
m_Item[m_dwPos].nIndex = nIndex;
: p5 Y4 g8 w; B" E( h0 y m_Item[m_dwPos].dwId = m_dwPos;
) W- {% z6 H" V- D9 M( I m_dwPos++;
( q# R7 I2 w( u0 J}
( P5 _/ n* Y* |6 z& _8 ^ P% jBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 Q6 [6 f' W* T! G- B
{
% s* l* g0 k$ {% }4 y" \ for (int i=0;i<MAX_INVENTORY;i++)6 h, U, m& Y) Z+ z
{) d$ b0 u) c1 ?: z! `6 R( }
if (m_Item.dwId == dwId)* h6 |+ p1 J$ ?$ K% ?3 T. S: _. |4 w) |3 O
{
1 g0 o' c! a5 w, H! m D+ Z9 X return m_Item.nIndex;
, g4 |2 p5 @" `! K) f0 E- M9 D }
/ B, a; p" a9 U* s7 ^4 Z3 T) u- B7 A }: |2 a. h% e1 T# j ^
return 255;% f6 D* \, ^; A2 `6 x1 E
}
/ H J0 f" d' wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% v) c* o3 T! k
{) @8 \! x f! z+ P: k+ n9 l& v
BYTE nTmp = 0;
: {2 @! l! y, y( M S! ]% ^" @ bool bDest = false,bSrc = false;
2 @, y, H9 O7 S. D: {( ] for (int i=0;i<MAX_INVENTORY;i++)
# q7 n# P( R! Q {: E! f: B$ \" P* }
if (dwSrcId == m_Item.dwId)
, ^. T: F9 q3 f- j) Q {
" g7 I! S# D9 r- s0 C5 u( c" P //id相等 则 改变对应的dest和src
3 O3 W# \4 p' n2 x nTmp = m_Item.nIndex;
p- ]5 l5 P6 P" H( ~; T! Z m_Item.nIndex = dest; U( B( K& f/ c
}
8 n4 }7 @ Z, X( w. } }
4 B' Q, B( j, {8 d' L7 v //临时数据保存完毕,交换开始5 i: \; ]0 A+ C+ ?7 m5 w
for (int i=0;i<MAX_INVENTORY;i++)
0 o! O* j6 `1 m4 Q- z! f {* Y# _ z% L8 G/ U* @
if (dest == m_Item.nIndex)
7 S: `7 ]5 D4 z- q& @ {, e* v' R0 Y* q8 z& Y
//id相等 则 改变对应的dest和src
# l- n# f$ \/ F m_Item.nIndex = nTmp;8 s2 N& }" o/ o9 f. I) l1 G' [
}
; B% U) I+ m. Z: f }" g. F, O9 x. E! v
}
9 r: w0 ]2 s+ I% S0 k};
0 q' F& y! o( R: T: K' l; q2 {-------------------------------------------------------------------------5 v) r$ g. J3 E2 ` W% e1 U
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% R C9 d1 e- {* M* v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" x3 C5 k. }; _( B9 T
紧靠其上添加:
/ w$ d" s% B* a' n. Z9 T% Z9 c0 cif( pWndBase == &m_wndMenu )7 R) @6 k6 L5 G; D: q. A) ]
{
9 K* M, M& s$ G: w. E- Q( G- q& _ switch( nID )1 \0 M' L1 @6 V! V: n( X) m1 A
{
; G1 E; ]8 g3 |0 Q: {; Z4 v case 2:
: e! C }6 `( u& O$ l {
; W: y- w: m. m& K# J5 b' D //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 u8 c2 ?; k! Y7 U# a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 q+ V) N& j# A9 ~ {
* H, D( g6 e- l# ? I9 h break;
0 _& t, h7 v$ X. i1 C# V }
0 j# |$ E% _# u K5 v for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 e$ K3 _+ L/ C8 ^* R; I: z {1 O5 L' V, O+ v! n" I+ g4 @7 @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. i$ S$ N3 o& G* |# s
if( !pItemElem ), q8 Z2 O6 V3 g
continue;+ S' m/ m* X4 N. c" a3 m/ r {+ B
if(pItemElem->GetExtra() > 0)
- y/ N4 O0 U/ Y P! c continue;/ B. F3 Q8 } F, P
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- i1 i( `4 E# x2 y continue;
, N3 \7 h; z" I$ e, ^ if( g_pPlayer->IsUsing( pItemElem ) )
1 S ?3 {; o' E/ z5 G! W continue;" N2 R$ ~+ J* {8 f0 m0 C( n3 y- @
if( pItemElem->IsUndestructable() == TRUE )
) D: C! Q6 F. S {
9 C5 L C. Z( T6 _: Z( ] g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! k! |/ T& y M% ?; W% s! @' S& W& ? continue;5 ^3 V9 Z' V9 {+ {9 j) s
}0 ?" Y7 G6 q3 X4 n( }- b
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! G( ?. f, X( E; t4 a: O7 u }! K; M& w7 a: G4 X2 V5 ^2 t8 U
break;
: F0 {$ E M6 Y' [ }4 B ^. L8 j! w) B7 f: z
case 1:3 C9 k! y1 A5 p; ?
{+ w" v, N& M. Y
//整理背包
7 ~ Y, i3 G& E1 T% B+ y, {1 b //////////////////////////////////////////////////////////////////////////
4 k5 y8 A+ g/ t; x' b" W5 x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 k8 u5 ?! Z3 R# [! I9 H- b //////////////////////////////////////////////////////////////////////////: i+ x9 k, I1 d' C+ [
//////////////////////////////////////////////////////////////////////////
3 v1 T6 N1 b2 _# B# k% w3 b CInventorySort* pInvSort = new CInventorySort;
6 ~$ X6 s7 L1 g* v vector <sItem> vItem;" s' Y: k J" s8 @. Z: t
vItem.resize(MAX_INVENTORY);//初始化大小+ ?: P! K% T# ~
//////////////////////////////////////////////////////////////////////////
5 s T! \% y$ e+ o/ x3 ` //填充数据
! A4 i5 } t5 v for (int i=0;i<MAX_INVENTORY;i++)% n+ |% d" Y1 b8 Q3 I. b
{
( W9 @2 z) C8 C) l) O7 _7 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 v, G0 Q. ^4 z) i3 F/ R& }& I F5 e
if (!pItemElem)
* d# ^* n7 k X- a {
# q: l% R3 d! S" r I vItem.dwKind2 = 0xffffffff;7 {8 D* W8 o3 f ]
vItem.dwItemId = 0xffffffff;1 \$ r3 u, n: z! o
vItem.nIndex = i;
# f6 l5 J& o# d4 Y. l }else {, |* I4 v/ Z( L
ItemProp* pProp = pItemElem->GetProp();
7 P! E% }- ?" O$ d* D7 a' u5 ~9 U vItem.dwKind2 = pProp->dwItemKind2;0 r, H* F3 B2 E9 |% X. |& Q* e
vItem.dwItemId = pItemElem->m_dwItemId;$ k5 E' t" F" U, D' y1 m
vItem.nIndex = i;
6 y0 a4 ?( c$ `! Q# M }$ Z) O3 I) _8 |' `$ P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ @) l" u7 b$ U9 R* R. G
}% z4 F+ }9 u' q4 W& {: t5 X: ^& c$ o
//////////////////////////////////////////////////////////////////////////. q1 u% j) M0 ?# a+ z* Z
sort(vItem.begin(),vItem.end());//排序* O, U! y5 _6 F0 [ o L
//////////////////////////////////////////////////////////////////////////+ @, ?1 B' C$ h' ]6 q& Q! q
//交换
2 A O- X. F; R" J7 y* x! { for (size_t i=0;i<vItem.size();i++)( Q0 C, V1 O f- q
{" a7 H, K- y" d( y4 z& _; l$ q* N$ s6 Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 f" O2 a4 c2 E+ ^& R2 z" M! [6 a
pInvSort->Add(vItem.nIndex);
/ K$ I( ]/ S# C: t }) P& D( p7 t \9 l0 Z
BYTE nDestPos = 0;( O8 n3 g* U( {. ?9 v& ]
for (int i=0;i<MAX_INVENTORY;i++)/ B5 I. a- W5 C7 g; y
{7 f/ J$ z, P4 X2 A) Z) o+ q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 K5 \ @& u2 i; n8 w; N9 _ if (pItemElem)/ w/ C/ Z, I2 ?( |% C- }4 q
{
" a4 S" p& K R: Z9 F5 ]6 Z: | if (IsUsingItem(pItemElem))
# p, c8 s( J% Q# a0 J& F! k {
/ r+ {4 Q" B1 c6 V- b //这个位置无法放
/ b5 ?5 R" |" s nDestPos++;5 }# R( G- f, C2 |# j% D
}% a8 q) f$ D; x5 ?) c
}: q1 }3 d( g. T+ V. Q3 B4 b
BYTE nSrc = pInvSort->GetItemSrc(i);3 |1 K2 |, ^) u
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 g/ F5 [! Z9 h
if (pItemElem)
+ l7 H! z( D) Z9 @3 {6 K$ H* c {
! `6 ^+ u9 w6 ~3 g4 V; J# Y if (IsUsingItem(pItemElem))
. P! j- o: O- b4 s {* R+ i# T) }4 ~* A5 y5 i3 {/ a
//这个道具无法移动,跳过7 W) I, ~/ X4 g) w0 H
continue;
+ Y6 z8 j, b( g- U0 N( L( Q3 C }- t) X1 y9 |- [4 `
}else{
( g" o* v! c; W7 b% s //空位置 不用动
9 s8 K$ o0 h5 w; ]# ] continue;
( w5 u9 w: ?& z }) d3 u( C% R. U8 Q# d+ y( f: E
//////////////////////////////////////////////////////////////////////////
# t7 @3 B5 |( U/ h4 L: b3 M //开始移动
! j( i3 P% T7 h2 L" Q2 t if (nSrc == nDestPos)
( e/ e; c8 |% _+ Q/ b {
, W4 W% F9 S A/ O+ j* L, K) v, m$ V //原地不动2 e6 @9 B$ N& l9 t- ^) Q: [
nDestPos++; a+ v7 M4 R8 h0 K4 Y- q
continue;
, H: C, Q/ D% C( ]1 Z( N) Y4 m* C6 @: w }
( P P; F& s" K8 \' [, ` pInvSort->MoveItem(i,nDestPos);
4 M+ `7 {. c% t g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# V* L* c3 P5 a, X! k0 d% W7 ^ Sleep(5);* a G/ i% \( \! b& G
//Error("移动 - %d->%d",nSrc,nDestPos);
! C# _$ ]% @" c4 T+ q5 I1 ]3 s nDestPos++;$ @$ V F7 Z- c& \, h
}* w; r! e& z8 |# ?5 h
//取第一个元素的信息
( ?& d" }3 V( v" w /*) q9 n# ~1 N! C1 m9 Z! H
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ ?4 c6 a2 ~5 ]% X) ^2 H) J$ x {6 p% f0 U( c4 [8 g& `5 n% q1 \$ d# N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, O' K, q$ I- r* k1 c2 f2 D: V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) {' _* v( r* K x0 X }+ r D( y; R. T& s7 y d( L
*/
$ Y0 a# V* t1 M/ S' k //////////////////////////////////////////////////////////////////////////
; X4 ~+ x/ i! U1 u/ C1 g9 k; _ break;
9 }4 v& J% t! [* {1 r& O2 y8 m }4 e8 ^/ v! f; D& x0 r
}
6 K2 m* b" P1 {+ [. C6 \1 F} Y& e7 O+ Z2 P9 \! D/ {
m_wndMenu.SetVisible(FALSE);
/ ~2 ~+ V( o+ {. X# g* d' M
3 B/ B2 E1 p$ S- z( _( I--------------------------------------------------------------------------------------------------------% @ {# V6 u: S) ^3 D4 E- Z9 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* N+ _8 W3 t5 f
{9 E0 O9 m4 ?+ U6 c3 @: V8 E
BaseMouseCursor();* E4 ]2 Q& o! ?* M* W4 @3 M8 {
}: [) j1 ~2 p: ?4 n
在其下添加:
% t: Z5 ~8 A5 Z9 f1 W6 c% i; T8 \1 vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& j' R+ h$ E' f* I7 o
{
. t( Q P1 u, I0 R$ Sm_wndMenu.DeleteAllMenu();
7 \) q" N2 @0 J! n( m/ gm_wndMenu.CreateMenu(this);
7 j, |' x: `' @$ m0 `. Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' r( q: x! P7 r+ p9 Y4 [
; ^+ ^% ^" C- ?$ Z; cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' K- k3 r9 ]0 u. M4 m4 G
{5 O9 o4 P& G2 P
//P以上级别才可以删除所有道具: s# z8 v2 B) i
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ s; }! z+ S6 p3 v. S0 L/ Z* t* q/ m3 G}2 C) q: I! g- Y0 G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 A& P) o& L2 W1 M6 J& X1 w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: d2 ^3 _+ [' B
m_wndMenu.SetFocus();( H" _$ K0 q: Y
}
+ Y+ w# l) v4 ]+ t------------------------------------------------------------------------------------------------------------
( n3 f6 ]* {3 w: M- t/ r*************************/ ^+ [8 q9 \8 o4 @ z
WndField.h文件2 y$ |0 R! d: @( F, d! z
*************************
) |3 l" t: X! a/ ?搜索:BOOL m_bReport;
# ?0 Q, \/ i" [% q3 y% {/ @其后添加:
* @) U; b4 @* K) A8 HCWndMenu m_wndMenu;
4 p# C' B" }2 E) q1 [& d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 g- t* n7 f/ r" j4 O! G- k, y
其后添加:* o+ i8 O$ X% G% @ v( o) r
virtual void OnRButtonUp(UINT nFlags, CPoint point);
+ ]$ U) y9 @- Z) _9 Y" }- P }8 w
, c7 ?- G; ~8 `9 V) v' A( ]5 V) f! A$ h( Y
|
|