|
|
源文件中_Interface文件夹下WndField.cpp文件
& V6 j7 o0 U4 D; X搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; x0 D6 G" q1 J. Y# c% l$ R4 @2 w+ |( w, t# S
struct sItem
1 o, C$ G" h5 X" `/ {{+ ~& s$ B3 o, n; X! {) E- o
DWORD dwId;
" }3 q2 I R5 E' O$ HDWORD dwKind2;
8 e" H. q( v, V6 EDWORD dwItemId;3 [' n' W: G4 w5 Y: o/ N* o
BYTE nIndex;
5 j% T4 J! {: U: n+ ]. _- ~3 KsItem(){, v& y! O! p& P3 x3 I
dwId = dwKind2 = dwItemId = nIndex = 0;
" x" B8 N6 U- \. g% ~}
+ c/ @2 C# a0 Sbool operator < (const sItem p2)4 E) T( n: s7 [ @4 T0 G; \
{+ _3 t3 `( L9 k/ @7 J
if (dwKind2 == p2.dwKind2)1 L/ }5 ~% K. `& V) c
{
; f4 {$ h" M& D# K2 D: a8 j) x return dwItemId < p2.dwItemId;; }" w6 s% G# a& K E" s/ Z
}else{
! n' e; M; i+ B! o2 G- p' u5 o return dwKind2 < p2.dwKind2;
6 m) @, Y/ E9 m9 E" M+ z) E) S, G }0 w5 P: Z3 }4 W. _
}* R/ Q3 h+ a4 S# B
};8 f5 r- b8 _- S. U: s# L
class CInventorySort% t6 M0 F8 r6 ?8 r3 U( V
{! i; Z9 E5 m: ^3 A/ e
public:
2 J( l. C! e' @5 l: s2 Y1 NCInventorySort()- Q! w) m6 L- k' R- {
{
6 z: h+ T0 E: U$ @# b: A m_dwPos = 0;" G b5 y9 S8 G. o( q! K4 u% P
}
, Q) z3 ~. s7 C+ o! F~CInventorySort(){}
9 V) ^* J3 q; `1 g a# {1 vprivate:
0 @# L* v: w0 h/ f7 MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( @' l, O% h9 f% c& |0 I/ q
DWORD m_dwPos;3 e6 x* l3 Z0 Q* ]
public:0 H4 D0 x5 f) H
void Add(BYTE nIndex)& \2 c% S8 u! b: S% h3 a# C. K+ O
{
- j8 j5 T2 @, M- t; n2 G$ A if (m_dwPos >= MAX_INVENTORY); e, z" a$ k T" W1 M! f
{7 n6 I2 r6 v( m9 S K
return;
) q/ K) a2 _( |$ l }
0 c$ a" P; p. I, S0 ^0 k m_Item[m_dwPos].nIndex = nIndex;7 ?' J: `3 J# }& ?4 ^2 ]4 e
m_Item[m_dwPos].dwId = m_dwPos;
2 y9 C2 Z1 T" d m_dwPos++;$ w) }$ {+ c. H0 Z: @
}
* w5 o9 F/ K2 l/ I4 \; PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) F& k* U+ W) r; [{, w+ u K3 H3 l: ~! D# g5 ^
for (int i=0;i<MAX_INVENTORY;i++)
% p) w: _' y/ g1 I, V3 V {
& s7 w2 ]1 G+ d if (m_Item.dwId == dwId)5 K: a f b+ i9 r- x
{' ~; [ t/ L) g2 T2 L; o, I
return m_Item.nIndex;0 [* N, o9 M0 P7 _; C* h
}
, P; l6 J! V! \2 g- j& Z1 v& S }
% F ]3 [. s) m+ R( u return 255; v+ y- f/ V4 s: C/ E' o2 b
}
! x% }8 z0 K) Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 l% Y6 ?( u9 w& ~4 W) M{; ]. `! M: W% F; p% t2 m; a
BYTE nTmp = 0;4 X; f+ |/ T+ O4 D/ L. u
bool bDest = false,bSrc = false;6 h$ r& k1 y# u l' V8 A
for (int i=0;i<MAX_INVENTORY;i++)
9 i3 p: v( D& f# t1 I- e- u {# d! m! w! \" @! ]* u' }
if (dwSrcId == m_Item.dwId)
4 K6 G7 ~4 e- {% f {
+ |% o- [3 o$ T7 i) B4 D6 h; } //id相等 则 改变对应的dest和src
. `/ [) s ]7 @0 M) u nTmp = m_Item.nIndex;
2 D! E2 w |" L2 S: ^ m_Item.nIndex = dest;) ]& Q7 B7 y% J- w6 b7 @
}- i% O& _% ]5 q( X) F
}
; D7 d s6 v( L0 h7 i: \" Z //临时数据保存完毕,交换开始
6 }; v: I; ^) G, Z! t8 v0 F/ c. B3 h for (int i=0;i<MAX_INVENTORY;i++)
: u8 I. b0 r* C0 D1 Z5 F' t {
3 ]- f3 F4 Q: o if (dest == m_Item.nIndex)
1 @8 Z. x2 g o' a% { {. X! r6 B# f4 M S! d( V
//id相等 则 改变对应的dest和src
2 D0 J" P) e4 `2 Y( r/ H7 ] m_Item.nIndex = nTmp;. O8 @+ {, \% x+ A
} E3 e2 ~6 v5 S. e$ D% H
}
! r5 [; P" J$ k}# t0 l) o% ?9 p: y, x& @
};
5 i: ~3 f* N1 L, t6 P$ w& b! G% o5 h-------------------------------------------------------------------------
) G7 C- C [% \* `5 S依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), y% \# A8 d5 V7 y7 h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, [4 D- O5 d% k; Z) P/ c紧靠其上添加:2 x; v; @: |( q) R# g' G
if( pWndBase == &m_wndMenu )! c& ` C4 v3 ~" g& e. |4 a
{. Z; ]+ \- a! Y
switch( nID )
$ B0 g- g' D$ K, j% E" _7 K. h9 D7 E {
+ w) U) d& w1 E$ y" ^, @ case 2:2 h4 a& }4 c: h* b7 l) M& B
{$ t E2 n1 }0 c t2 l
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 z6 H- V+ ?+ P" B1 |8 k* B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 O6 `: A2 V$ {7 r E0 S {
1 A* W, ]* t; Q% U- q break;( K c, D$ W! `" g; z( O4 T- h0 D# K
}
! d7 A# ]" z( \- P. W7 s: [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 e- I' D/ q* o( s' P9 j {4 Q A- B+ E3 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; Z3 m x1 a0 D9 L if( !pItemElem )9 M8 `4 d+ h4 `0 ^& s, O( P
continue;
7 T- L6 j/ e0 ?# Z3 \ if(pItemElem->GetExtra() > 0)
9 S! L4 R, D3 L/ D4 r9 u [! O continue;
5 W ?5 g5 W; z K. v/ O* Q/ ?1 B if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 u8 C) e# ?' P* g continue;
, m0 I7 t: z9 A7 R" t2 H if( g_pPlayer->IsUsing( pItemElem ) )8 c |5 h" z+ b+ K' b
continue;
8 X- E# [+ J$ ~) a h' k if( pItemElem->IsUndestructable() == TRUE )
" z! V! i% {4 X8 G! j5 B {& ]9 H9 ~7 j0 { ?6 B8 B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 U. s( E5 C: y7 l6 I' K
continue;
% N& i7 f o" f$ z( M }# _8 _* I9 e# _* }6 I3 b
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ ?# E% b/ c/ E, J, f }% x2 P- f$ [( p( e
break;, P; S/ z7 b, Z* y8 A: E( n! E
}' E: Q+ |" X; ~ K; y
case 1:7 s Z! |8 c q" d F! ~
{/ i1 |2 D" G" i/ {0 c9 H* v9 _
//整理背包# Z" s9 y1 r# F" b) ]
//////////////////////////////////////////////////////////////////////////: t- R1 b7 |* f6 \2 P8 V' w
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% F; U1 A4 e! P m3 |! o# L' v
//////////////////////////////////////////////////////////////////////////7 e0 K6 i, S/ y. V. z9 x2 P! ?7 D8 I
//////////////////////////////////////////////////////////////////////////
. R! E/ u: v& G. }4 c2 B9 R. w9 y CInventorySort* pInvSort = new CInventorySort;
$ M& ?8 \) ]2 O' K3 O: F. Q vector <sItem> vItem;
' O9 P! e4 a0 {/ x3 Y vItem.resize(MAX_INVENTORY);//初始化大小
8 o2 T. j; { { //////////////////////////////////////////////////////////////////////////
1 O* M, j( r1 V% Y //填充数据( `" T' h; ~* p4 @5 q( J4 @
for (int i=0;i<MAX_INVENTORY;i++)
8 |) i, ]% X. g; n; f {: r* ?! N$ G! E# A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) g$ p) @6 `& G e4 k if (!pItemElem)
$ Z" d; \$ D0 ~. ^, u4 o {% g9 p" ~" a# a3 J# M9 s+ @
vItem.dwKind2 = 0xffffffff;' U' q. F* I# V8 c
vItem.dwItemId = 0xffffffff;0 K" k" Y; K* P; y4 @5 p) c1 E k
vItem.nIndex = i;% F1 m% j# u/ S, k0 {. t
}else {
# s" k& o# `. y k1 E$ \ ItemProp* pProp = pItemElem->GetProp();& F$ r$ ?2 h! k ?
vItem.dwKind2 = pProp->dwItemKind2;) Z5 v+ x2 D! i4 ? p
vItem.dwItemId = pItemElem->m_dwItemId;
, u; `, A! d( \% }* @' U vItem.nIndex = i;0 ?( r; H0 `" P! A- l' t5 \
}
; J6 A( t9 l" ~ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 q- F5 t+ y' U" ` }: X A0 q9 u( A% F0 ~
//////////////////////////////////////////////////////////////////////////
1 y6 q: T8 R# Y# [ sort(vItem.begin(),vItem.end());//排序
6 |6 f' O! t" k8 L1 x //////////////////////////////////////////////////////////////////////////
: `6 e/ N( ` b0 z% i# ]. } //交换/ ~9 B. Y' J/ j5 y* U( P
for (size_t i=0;i<vItem.size();i++)) D8 l' D& |( c% ?
{ U4 `0 |" S, Z4 z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& Z1 c! J: O3 H* m! k0 F" s( e
pInvSort->Add(vItem.nIndex);
& j7 D6 {& V( ~! `/ F }
( w/ f& }7 \/ m! j$ x BYTE nDestPos = 0;4 A9 F- }2 `7 X/ P7 j0 p3 k
for (int i=0;i<MAX_INVENTORY;i++)
8 {3 C/ O4 T( d {
1 L$ g2 z8 U& `' r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; A8 j z: {) a' }' {$ } if (pItemElem)5 C5 G' q" O; O# h; N7 d% }; @
{
3 x5 b Y m4 T7 ~3 p if (IsUsingItem(pItemElem))1 V4 R) ]& e4 b9 P, E+ H% V
{
4 [# R# l: S' C7 f, `+ a* ` //这个位置无法放
, g& ]" E( g" B nDestPos++;1 b4 F: ?/ H* y0 @7 D
}
0 [$ X( _( L; T, A$ q9 u }
$ _( X+ |" z U: G% U BYTE nSrc = pInvSort->GetItemSrc(i);
" C+ L; K4 n! Q6 K0 q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% @0 a' e7 Z4 r: s1 v0 |8 {7 T if (pItemElem)
$ J8 U3 e# Y9 N& T {
! Q- K9 f5 @7 o; \4 X$ i4 X if (IsUsingItem(pItemElem))
, o! Q" R& p9 T# _* n& y5 M( \ {1 c: ~9 q% G& w D5 @
//这个道具无法移动,跳过
# O6 ?! X9 v, \- n) O' R5 _ continue;
8 ~) w( E: k9 P4 z8 o }
V% J* l# b! V4 m" x }else{) ^% p- B7 Q i3 J; }7 w) q
//空位置 不用动$ y- D/ k$ X6 k9 B! s; d
continue;
" p. x. P( ?1 O( T+ D2 } }) Z- y8 n% \% V- S" Y
//////////////////////////////////////////////////////////////////////////8 s3 |: L4 d, s g
//开始移动$ [5 k! R' }; K: |7 F3 t
if (nSrc == nDestPos)% M. Z- U( c7 \4 e6 U, k: m: @1 l
{% V& D [" T" U+ h2 U* @
//原地不动
8 w$ V; R) i% `3 _ nDestPos++;: C9 \8 I# v& Q& F0 u
continue;
* b' E1 ~. v& f9 W- X9 V8 Y }. B- {& P" X4 q4 p, Q7 q
pInvSort->MoveItem(i,nDestPos);
/ n8 H- p5 P4 _8 \) _- X0 M6 T g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 b; u7 {* f# P7 i
Sleep(5);
- |% b0 ^1 Y. x- W& C. M //Error("移动 - %d->%d",nSrc,nDestPos);: @: n) Z% B- B$ O. m
nDestPos++;, n& j# w9 E: L8 b7 P9 t
}2 k/ @8 D( O9 Y7 f2 [
//取第一个元素的信息
3 q& z" }& w* i* Z+ |; a2 c, S /*
$ O0 w- J. a% S% R8 v if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ n, X2 g: P1 ]) A. d ~$ h
{
1 ?& g( i+ Z; b8 [8 O7 H5 R/ y# p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 x$ U" j" J+ L. ^1 k0 s$ n
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 P+ Z& Y) I- N0 t. }1 u
}
0 }" `3 N* t" f# @- R0 ]/ k7 d" q+ W */* L9 i6 w6 o+ j" Q
//////////////////////////////////////////////////////////////////////////
7 d$ k! J0 L3 v; }5 T' T. c break;
$ }3 b7 ?! }9 Y# q% \7 i# G$ ~ }7 o9 o# s' p! t2 F
}
( \! B7 N# C; s* n8 t% @8 W5 P9 k}$ [9 j% b: s9 q0 k# f l
m_wndMenu.SetVisible(FALSE);' B+ {; L9 w; q: h
7 Q/ j7 K" e, \$ ]! j i$ `--------------------------------------------------------------------------------------------------------9 h" x! d* C, G* j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' U- p- n) X! ?2 T% \1 m{6 l5 @' H7 H w
BaseMouseCursor();
) L. @/ i% f6 q/ S3 y/ `3 n}$ s9 v' B- J$ U4 _4 [ N+ I; p. g a
在其下添加:7 Z! w8 w) ]$ b; L
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ V+ q( c: ^( Q$ K8 c{4 c* H. h( |/ D) C2 C
m_wndMenu.DeleteAllMenu();' B4 g& l L- N
m_wndMenu.CreateMenu(this);
4 [ J y: K6 R7 D: _/ X- e! Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- h3 j9 } A$ ?+ c: W$ t3 m( w {8 z; L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); s: D8 Y5 q& H) y W9 n& ]
{, V* x6 i1 Z- u4 v# V4 Q0 `; a
//P以上级别才可以删除所有道具$ z4 U& Q p- K( D- T
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 U: b( l$ H0 e$ ?% u+ {}, |, `- Y6 I' l5 ~! f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" D, {* ^% F) s8 \. y. m6 M1 vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' b7 n3 P% U( `! B/ ?& Pm_wndMenu.SetFocus();" w1 T P2 T2 U- e/ P; ~- e
}+ j: M; B9 A$ N: f% Y, [0 \
------------------------------------------------------------------------------------------------------------8 ~; A' m% ~$ o) a( k2 B
*************************
2 [ i4 |1 V, D# v" U- c: W' JWndField.h文件4 O% a- k5 s6 t* Q( b
*************************
% H& ]5 ?4 v1 o& c0 e搜索:BOOL m_bReport;
; j- ~) O2 T& w# {' K0 |其后添加:% c. Q) J+ ?% b* Y/ i4 [! g, z+ {
CWndMenu m_wndMenu;; K _4 s& O0 _5 n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% d: A4 T5 U3 Q' b/ \8 H# S
其后添加:% a' {/ o* ]: v+ `
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 z2 m: y5 r! b% a9 A
8 }7 l: B3 _$ @( n0 q4 R) ]9 a; R- W! n0 y# j
|
|