|
|
源文件中_Interface文件夹下WndField.cpp文件- v4 K4 C# f% c/ B: e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 {7 C( ?5 r ^+ q" {
' \" K7 P6 o, x# F+ D; i& H8 r
struct sItem3 ]* X3 `( P2 Z/ s( }3 Q7 e
{
; G/ M) x$ \8 ?" T/ X4 h- O! rDWORD dwId;
0 O# Z- m7 b dDWORD dwKind2;' j# Y& Y- H! {% y) |( U
DWORD dwItemId;
/ @. ?2 a# j& |BYTE nIndex;
; j0 D$ U8 T2 K, }* b- \sItem(){/ V% i( a9 V/ m
dwId = dwKind2 = dwItemId = nIndex = 0;* _7 S1 \8 Q- k1 [- a
}
: u6 m1 { K* Z' t. `* F, Tbool operator < (const sItem p2)9 S9 t# l7 S4 c" O& o
{# J3 Z4 l% K; a* i/ c7 C
if (dwKind2 == p2.dwKind2)% X/ R3 _, g8 h; J
{! r- I# [6 d- j! E) M Q6 D, f' x
return dwItemId < p2.dwItemId;0 i; @$ g6 q: z+ a( W
}else{
3 D- y7 z6 B1 P- q return dwKind2 < p2.dwKind2;
0 b% h$ ^6 Q" s" G }( F& j( D- q; z* Y6 ~
}/ z2 N7 h2 O. q) v, A5 K
};9 g, x2 u9 h9 H2 r& v p* T
class CInventorySort
b/ {! r1 c* ~) m{
9 g7 p* l9 u7 \, N- Spublic:
1 m- ~; K, l2 ~( A& r" hCInventorySort()
; P: J+ \1 D' T$ |{
4 n7 g8 ]) u: K4 r& S m_dwPos = 0;( Q. r3 e& g E. y) C7 z/ D$ H
}
$ }+ I! I& P& R8 s) I! T~CInventorySort(){}
# s: z4 \# l0 M# H/ m) T6 Tprivate:5 T; I) h. r# R4 ~* `9 V4 v3 I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. K$ S3 ]. e1 T! t# x- X; l
DWORD m_dwPos;+ E& z% @! m& k; v5 i3 h
public:
' \' o' R9 h7 W& C0 [6 E+ ^" Nvoid Add(BYTE nIndex)
5 V/ v! d# M6 K{
( c) x0 W7 r- u% h if (m_dwPos >= MAX_INVENTORY)5 P% q7 M( f, P5 j7 b
{
. A0 I/ m! B( [# h- D: [- x2 D) k1 L/ e return;/ C$ p( C' q8 ]5 U- `0 u" @
}
6 V+ s' Q8 Y- A3 b+ f4 ]8 l" [. a m_Item[m_dwPos].nIndex = nIndex;
5 e% T, E( @ m. k& }2 F6 n m_Item[m_dwPos].dwId = m_dwPos;
# @: p; t! H5 z0 g m_dwPos++;
) Z& i2 k. ?6 Y0 F}
. s! D* y0 x4 h6 g' w5 R9 V. H) XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" b) [4 W0 C" n% ~
{4 T5 a: u7 V7 n* H: `
for (int i=0;i<MAX_INVENTORY;i++)
! q+ M0 P* B* o {/ N3 c" f" R; V% a
if (m_Item.dwId == dwId)9 g8 H) B3 Y9 ~& Z
{* w: [0 q3 u* Q- y+ [) H' P9 a/ |
return m_Item.nIndex;
+ ?" |* L, V0 F; X! J }! I3 T, ^, E `: {3 F* v+ j
}
: L% B8 ~1 Q! U return 255;
5 ~. G* t$ ~& Q0 a9 V}1 s* C% G! R& ]2 v# T; @0 T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# S2 m2 }8 [" y+ r8 |* Q7 |{
% B# v9 m( v k1 g4 m BYTE nTmp = 0;) I1 _& k, Q \8 q: B
bool bDest = false,bSrc = false;
9 T# u% k1 Q' i( x for (int i=0;i<MAX_INVENTORY;i++)2 J. o8 u' W* b% n! l$ w$ p
{
# F/ N, y% h% m if (dwSrcId == m_Item.dwId)2 ^3 z {" x7 c8 a! w; P4 Q" i
{$ w5 V N+ @; D8 V( Y% Q" g
//id相等 则 改变对应的dest和src+ D5 O+ d9 W8 u. C+ {/ L) {9 y3 S/ U
nTmp = m_Item.nIndex;* h1 n% v2 i7 h$ J7 m. O
m_Item.nIndex = dest;
0 b- }0 n2 o c }
+ }1 q {9 L# x0 m1 E }
) h4 m/ I! e& e# K M //临时数据保存完毕,交换开始% O( s: {/ K; y4 d, B
for (int i=0;i<MAX_INVENTORY;i++)
z# H$ R- Y" i, O {. S+ z" ?$ X3 c* A7 d- ]
if (dest == m_Item.nIndex)3 q& U2 ~! J2 j4 \* Z4 X6 b
{( a. v" O& o S) v/ p0 S
//id相等 则 改变对应的dest和src
9 t+ X7 [2 a" }. R: Y* f m_Item.nIndex = nTmp;
# _* [# Y# j7 {, B& | }
& C1 n( ?/ I5 Z9 Q2 \ }$ U: S( ~. N2 e
}
% `1 c- c0 y: }3 P8 P};6 k. ?- e! J* [$ e- _
-------------------------------------------------------------------------
6 V. M% b& S1 M5 X/ e' k( X9 `依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 Q- u M1 ?* e5 o6 t; d搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% H9 U9 x1 F! v; t* X/ v7 ? T
紧靠其上添加:8 m' N# X6 h* L
if( pWndBase == &m_wndMenu )
' n$ |3 D. b: H) S2 w" F( M, l" p{
7 q4 }8 d6 b1 ?) D switch( nID )
$ j! @7 S9 b' u {) j" J3 X7 }$ B
case 2:
1 a7 f2 Q" X$ l0 W5 g/ v {* u6 y" R9 g7 ?! }
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: M6 f2 F0 i) J5 ]: M. V. [, @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: q/ _. A: D/ h3 t5 S/ j' k {+ T9 N9 ^" u2 g5 B
break;
7 U( z" S/ x+ ^" V }: V' S, i& d$ l1 m
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 T/ c: |5 G. J" h) M% }
{% d. I2 s \* j- a6 d K8 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. Y: N3 o6 A5 Y3 Y if( !pItemElem )2 _3 h6 R$ Q+ ?* b" i9 Z3 v
continue;7 ^: Z& b7 {5 }; G2 B8 C- }6 h
if(pItemElem->GetExtra() > 0)
4 k2 k1 n) Z$ @' A continue;
0 e0 t! X1 Q E if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 t& @" }0 o* T. c: \' w* t continue;+ W B9 _1 ^& X9 D
if( g_pPlayer->IsUsing( pItemElem ) ) M8 n3 J1 i) J
continue;
$ I1 S( b9 `. s4 x7 @7 _ _ if( pItemElem->IsUndestructable() == TRUE )4 C8 x2 H \# n; f' \. M5 K( X0 y
{0 W Z0 a. s: L# }. i+ I2 ~1 g
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ E7 Z( j8 g8 \5 d" ]& m
continue;9 L4 g$ g" u6 V/ F: Y7 {
}3 h! K) u1 @! N; s# _: c9 }2 b( s
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ M2 @! P& d. {, b: k& m+ Y
}( j# D( E1 K+ M$ ?' Y% V* Y y
break;
& ^" _6 E8 T! n7 p J8 K9 Z }
, Y3 L, p0 Y2 `- Q7 |0 r1 |' f case 1:+ r" s: P4 ]2 A8 m$ r
{2 f% B; b$ i; m
//整理背包1 G6 [, G0 r$ [6 Z S2 q0 W/ u" S
//////////////////////////////////////////////////////////////////////////1 s& I. h' _! ?; [+ T6 C
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- |$ g" q( {# @. r: m: G
//////////////////////////////////////////////////////////////////////////
: o, y& T' K0 F3 }5 b9 q% h% { //////////////////////////////////////////////////////////////////////////
8 u2 {4 F. q3 f CInventorySort* pInvSort = new CInventorySort;+ c/ ]" m P' v. g# M$ U9 h
vector <sItem> vItem;
' ]# N1 P" F5 D& O& c vItem.resize(MAX_INVENTORY);//初始化大小
i/ |& }. L9 [5 }5 Y' b3 w //////////////////////////////////////////////////////////////////////////# K. O+ l* j- {/ i! f6 F
//填充数据
3 U- ~* f9 Y! E; r% |! @" P. y for (int i=0;i<MAX_INVENTORY;i++)
' x9 A ]- p0 B( P! X {
1 p+ H' e5 x( w* T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- B8 L) v! p( y, m. X
if (!pItemElem)$ @- C- l- {9 d ?0 B$ s! z
{
5 w, i' B. p5 n' u vItem.dwKind2 = 0xffffffff;
, b: o: i; N+ t9 w vItem.dwItemId = 0xffffffff;
( N* ?& G* I% C' M X, R vItem.nIndex = i;) C2 P( J& t1 k
}else {
7 Z6 \" n5 s8 o' D/ m ItemProp* pProp = pItemElem->GetProp();( b0 p7 {7 p6 R+ y/ p5 K
vItem.dwKind2 = pProp->dwItemKind2;
) }8 N* g4 Q3 d5 z! m vItem.dwItemId = pItemElem->m_dwItemId;: H( |( T6 h' B3 w5 M% d0 k
vItem.nIndex = i;' g2 E" H; G. \: }% }
}& U* ^8 {) P& O0 m$ T7 L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' y+ @; n& I W& U7 [ }
7 ^5 k; z9 D5 S5 [3 p //////////////////////////////////////////////////////////////////////////
; A$ B; x3 `" G# [6 x Z4 n sort(vItem.begin(),vItem.end());//排序5 t% r. e# R' O* m3 j2 o' T: H
//////////////////////////////////////////////////////////////////////////
" f/ D2 e- p& ?2 B8 H //交换
4 a/ C* I1 _8 l1 F T for (size_t i=0;i<vItem.size();i++)6 l+ E& r& V4 ^5 {0 _
{
( H7 O0 p8 k0 o9 @! `: E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ i8 z8 P" S! a$ f' M9 y; r3 |) g pInvSort->Add(vItem.nIndex);2 d3 G7 s, F6 s* D8 q" S) ^
}
! ~% v; z7 @+ m! i% F BYTE nDestPos = 0;
" y5 C( C! ?6 ^7 T& Y" j) v7 B for (int i=0;i<MAX_INVENTORY;i++)* Z2 z$ H* ]* ?
{
% }# K$ L$ E: f3 a# h6 g# }! F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ W9 a5 Q3 j! _, t! d' m) _
if (pItemElem)
1 z3 I3 q2 [' _7 W( L( l a {
+ s* c! x; D/ E0 n* P if (IsUsingItem(pItemElem))
; c5 ~& p4 E$ ?/ U { T- E2 g+ [- A. P# C% b
//这个位置无法放0 t2 W4 H8 K7 n+ \
nDestPos++;, A# m D p/ v; P. O+ U% w, H
}
; [ S4 k5 F) z }9 y: n. P7 K: [
BYTE nSrc = pInvSort->GetItemSrc(i);
1 W5 p* y0 i3 R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 B, }( t4 s) L3 r; R
if (pItemElem)3 s! g& ~- Y. ~: p! x
{9 \2 i" `$ p2 ~) ~# k
if (IsUsingItem(pItemElem)); |. @1 i, r; C: [! z2 Y9 l( s
{+ W1 @; `5 R/ S9 P2 G8 u! x- b$ X' V
//这个道具无法移动,跳过
, E4 I+ u# {3 m q+ u7 x/ v continue;
( C2 }; v( f# ^: N5 U& m; z }% ^) p/ s# ^; S6 o% T3 j5 \9 o* U
}else{# _" K+ M+ n U$ V4 E
//空位置 不用动* E: s7 {* F v' n$ @0 t& T& }
continue;
- s' }; J9 T. e. e; L- C }
# R1 y& _+ R% D8 o //////////////////////////////////////////////////////////////////////////5 u6 _: L; C" J( l0 N7 c
//开始移动
8 P/ p. |% F, l; E if (nSrc == nDestPos)+ H" e! P: Z2 q" {
{
1 ?: v D/ M* T' a: }$ M% A //原地不动
G- H/ }+ M7 f1 B ]9 ` nDestPos++;
, S/ ?$ x# B) Q# n continue;- w, W5 e( W* c) [1 a
}
& ]% m. x$ R9 I* b5 s% w1 L pInvSort->MoveItem(i,nDestPos);
% f% u) |$ @# k* c* ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, ~ S$ R. \8 F Sleep(5);. `9 S$ B# q; B# m0 [% V
//Error("移动 - %d->%d",nSrc,nDestPos);
. |6 m% `( f" e% g nDestPos++;8 b, E m0 _$ q' }
}$ \& {* x7 O2 \4 b$ y0 r# J/ a" F
//取第一个元素的信息
6 _1 I0 }/ B$ E- C/ S5 n: l, c /*, W9 u, x% z: ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 e9 v# W5 G7 w* c9 ? {
( d; H9 D& x: E9 O8 {$ v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 ^; X& M$ u6 K( h2 j* m6 l9 c g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 m; T$ d. C& } }
! T, d( Y9 k* O+ p+ f9 `# C1 [* z */
" c6 o8 n" \1 K //////////////////////////////////////////////////////////////////////////
2 i6 N& R* _ \$ i! J% ^ break;2 q: z c+ w$ Z" q
}
; C) m8 H* x3 y3 p/ A$ [0 J } . Y; t) D: H) N' a# Z: z
}! r8 S" a- I4 N: ]. n' E9 G
m_wndMenu.SetVisible(FALSE);
) d* |* ^4 p4 D
& z7 E) w) A' q6 J1 V) h6 a P--------------------------------------------------------------------------------------------------------% j9 B$ S3 Y- \. W, Y8 P/ B2 F: P
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) l- M1 Q" o5 L. C) t1 n/ y{5 S( p6 A1 T0 p, E' f
BaseMouseCursor();6 i' x1 y& O( k7 X# H) b
}
- t" L: d: z! c. u+ E( h在其下添加:
: a( N, ~! f2 f7 ^: Dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' @. G" y7 o# A
{
5 P# j) B: X- Tm_wndMenu.DeleteAllMenu();
& Z# P; V8 S' }$ j5 Fm_wndMenu.CreateMenu(this);
3 j2 v- F9 L% t. P$ p9 u- R, E W" r8 xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
e; q2 S" g# d6 O" k
I3 ^5 X3 Y- |) o& r- s% `if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 Y( o$ J0 o3 \. x2 y6 k
{
/ A+ `: i6 `7 A; ^! | //P以上级别才可以删除所有道具
; Q- z" O9 V, X+ I* q- H- m m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 r2 S4 w5 |+ a0 @
}! |7 z @* |3 y$ p6 g
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ i7 A' p, _: n/ _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 A5 }# o; `- w8 j( a
m_wndMenu.SetFocus();
3 `- x7 e2 h5 P: X, m}& j& ?) d0 P5 {. B- S c
------------------------------------------------------------------------------------------------------------& {! i5 a: o3 v+ Z. R3 B& k/ A
*************************. i; z2 N) G- e
WndField.h文件! B5 U. d! a' z; _. ~5 H6 o% w
*************************' ?" t$ I$ k0 J# K# h7 Q4 X6 B
搜索:BOOL m_bReport;! v {/ U& q/ ?/ @+ M! w; _% X
其后添加:
& D; M1 B4 h+ P( U5 K' rCWndMenu m_wndMenu;) h+ W6 G: f- A& \2 F+ O2 B$ v
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 q# \& a/ ?" T
其后添加:
, @9 j) B: U* u1 ^/ mvirtual void OnRButtonUp(UINT nFlags, CPoint point);+ y" l) q ?9 e* c, @# z
3 }% b/ }: m7 {+ P2 S
; q5 U6 R1 H, Q& h) ]3 G6 }5 T |
|