|
|
源文件中_Interface文件夹下WndField.cpp文件
4 m; z- Z o. T3 i7 |搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# `3 ?: i. {+ r+ q
% c: g3 k4 t& t/ n7 kstruct sItem
9 \- d' c, V @2 y! l3 c{( S6 r( g; F6 P" L7 G
DWORD dwId;! ~, j% j+ @+ k4 o! z8 S/ q% k7 ?6 w
DWORD dwKind2;
$ S/ I: p6 P; Q+ H" p( ]DWORD dwItemId;/ t9 H( q6 x6 W9 Y
BYTE nIndex;
/ y" z+ {0 j5 lsItem(){
' f7 ^ o1 V: {! v+ J2 a dwId = dwKind2 = dwItemId = nIndex = 0;9 o3 K# S" S& u
}
/ ~5 V- ^9 x0 P, Y( Y* Ebool operator < (const sItem p2)
: u# G# w6 n9 u7 U; j/ _{
8 Y) _% h- E' h. B, l& L8 m if (dwKind2 == p2.dwKind2); {9 g* J3 ~8 `* J: J$ u
{6 ^+ ^% U" X2 V% c- ~" d. m
return dwItemId < p2.dwItemId;/ Y n- w' ?2 i
}else{
- R P$ j7 r3 E7 y5 O return dwKind2 < p2.dwKind2;
' a0 G- ^; {- Q3 V$ x# L }
, a7 w( G H( ]+ f2 N}$ D; s6 D0 A# B* O1 v# G: ^! a; U
};) j/ d0 N" {0 D- f- G" g
class CInventorySort
# t$ u5 F# J, ~{
) v6 m! k6 F, J$ c: p! l; }public:0 O! {) d& X8 u+ R0 J/ [/ M
CInventorySort()' Z5 R6 e! _& C; v" o2 b& C
{# n* k: J0 a5 u' Y, j
m_dwPos = 0;
- p' r7 ?* K; N# ~; t}
3 Y0 v+ G* y% C~CInventorySort(){}- H2 h; ~; d# [( R) y0 v7 ]' g( \
private:6 X) }1 |) w- `# A8 a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 O" B7 w/ z1 _) C$ Z& k$ Z4 N sDWORD m_dwPos;
" N, I( T/ t5 Q4 Y, C2 C8 gpublic:" ~5 O7 `* j4 T% O* `2 c3 k
void Add(BYTE nIndex)
$ ~& h8 T* }% @) @5 \% m$ K( E{- _$ q0 z& W" y0 T
if (m_dwPos >= MAX_INVENTORY)* D: D4 l! w, k0 Q# j" g/ X- k" }, i& F
{
; n$ z6 u( K9 T/ t4 j( u+ p, A% z return;
. g( M1 h$ @" x; ? }! u( {) O) J; d/ i3 r* y8 o( K
m_Item[m_dwPos].nIndex = nIndex;2 _5 n U( ^2 A( a
m_Item[m_dwPos].dwId = m_dwPos;
A( l3 Z' w& X4 D m_dwPos++;, F+ s* R! \/ A; q: S' }0 ]
}9 e* I3 M, O& q5 O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 C P% Z/ l7 I; _ D' ^4 O
{9 j7 j* i, ~* P8 Y$ f
for (int i=0;i<MAX_INVENTORY;i++) ], |& r) [! a1 w# k! n) a$ E
{! ]# d5 I) ?+ I, W. ]
if (m_Item.dwId == dwId)4 l+ c9 q% r2 p# c5 x$ h1 r, ?
{
% W" H4 P: G/ ]6 `% c* } return m_Item.nIndex;
3 G8 G& c" R& A" }! L } o2 Y) k2 y8 J. A' o; g
}
7 G. B1 N5 T1 {! @ return 255;/ ?6 W5 o1 g! [5 }7 g
}: i) W& C) H2 b1 a6 t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! _6 [* ~- z& A3 g; g+ w{/ ?8 G! c/ @$ h; @
BYTE nTmp = 0;% m9 b" O% f; a% e2 I, T
bool bDest = false,bSrc = false;3 R3 r% i! t3 E3 |3 ]9 U
for (int i=0;i<MAX_INVENTORY;i++)
: i( H" I% J+ |% p% S$ | {
+ C9 v1 d: _6 X! b3 M* E, t if (dwSrcId == m_Item.dwId)
4 [# e/ l: C& p, c {* C5 F1 s- }8 u1 |1 ^. E2 D6 ^$ D' E
//id相等 则 改变对应的dest和src/ c" p4 [" H- u+ v
nTmp = m_Item.nIndex;
# p4 g7 s8 q/ z" E6 {4 p m_Item.nIndex = dest;
4 s3 ]3 S5 {! O# i" x/ i. [, E# W }
2 O6 O" {# ^! {2 ~ }! c) i1 e( K' E# _/ [. ]/ e
//临时数据保存完毕,交换开始
, D& a# Q. i& m4 M9 T5 X' o for (int i=0;i<MAX_INVENTORY;i++)
! P# M9 T, g. ] {
+ w6 f* R: x, w! I5 w& n if (dest == m_Item.nIndex) p+ x9 K/ j: E2 Y. ~
{! N. c, C: u6 i# o5 e+ r
//id相等 则 改变对应的dest和src1 N z/ w& m, r5 Y5 ]8 b0 \
m_Item.nIndex = nTmp;
! ^4 X; f/ R) S) r/ ]1 X" O }. k4 k+ l8 {/ d+ U! {7 T; X
}
2 C$ }$ M! l+ ?) |$ T2 c}5 G2 @9 q% v5 B) k; K8 F
};" j7 D5 ?8 p7 Y& l$ t5 w/ l7 r
-------------------------------------------------------------------------6 z- q7 S, E6 Q4 c8 G w% j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% u0 o8 y8 P& t$ S' v/ E% A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* m# j* P3 V7 h& L5 H# r紧靠其上添加:$ \9 c: c8 \) a: q( y
if( pWndBase == &m_wndMenu )
" j3 d& V% R5 C{$ F2 m3 |! \( J
switch( nID )
* U3 e4 [3 q% }/ n. c {
& e. p {9 X" k# W5 B case 2:) _% O6 [; O1 N3 t. ?
{
4 r U7 }+ E/ v9 ^8 n; c //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 T/ _) C3 p: u0 ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% W& e" `: V& U/ X! N8 A4 A
{
" e7 u! R- J# A break;2 e3 K \2 [4 q
}
3 M" b: Z+ L$ D5 f, l for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 {/ i) M: N, ~& A8 s- K3 P {
, p3 r; } C( q" o9 I$ T; l& Q( O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 k7 C' p0 |8 k2 W: Y5 O$ e' r
if( !pItemElem )
/ k- R& \' m- q: b9 m& U; S continue;& [) R8 O8 @5 p3 E" v2 z
if(pItemElem->GetExtra() > 0)
2 m. Z/ b2 J9 q- D0 ~8 d$ m% a continue;; }6 h. M$ g+ G. O1 u# n
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 h: ^& U: Q e5 N+ u3 y; ^! n continue;: B- d$ T- X$ s: M$ j* u" Q
if( g_pPlayer->IsUsing( pItemElem ) )
4 ]; ^! V, e8 I5 u1 D continue;
" c0 g. M! S0 i if( pItemElem->IsUndestructable() == TRUE )2 @- s; R, B m1 y3 z
{8 B, K! w8 B6 m6 ]
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" q* Y# b' b: D9 b! S7 i) K( o continue;( i4 M' Z7 V# b% i# N3 S
}/ x7 Y% k; e+ K4 W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( m" I( g8 Y, v8 j1 L5 i* X$ u }' P$ m( |: _; f
break;
C. p c, G3 [5 p }. c- x U! S- Y/ ~4 c# A/ {
case 1:$ T5 n" F" q% p3 y' \
{8 |% S+ d0 }# {* ]- W% U4 k
//整理背包
2 @& R- H$ a. H% A3 o7 N- X( B* { //////////////////////////////////////////////////////////////////////////
& B% l1 k/ b. l$ K0 E+ j$ k( X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: D. a# n2 s5 J$ Q/ }' I0 R
//////////////////////////////////////////////////////////////////////////
- w/ H6 Q" u4 j/ N) a# j //////////////////////////////////////////////////////////////////////////2 c3 |& {! L" [
CInventorySort* pInvSort = new CInventorySort;
@# o+ V5 ?, J8 S! _ vector <sItem> vItem;* t$ j' ?( E& a% a" J; w
vItem.resize(MAX_INVENTORY);//初始化大小+ h" w% C; P* i
//////////////////////////////////////////////////////////////////////////
0 i y) @( d# }9 C; F, ?; }8 y //填充数据
7 E% S+ O2 Z$ }: \8 i6 e for (int i=0;i<MAX_INVENTORY;i++)
) e% G% m7 I5 Z {) e( d# Q- p: d9 i7 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
n6 |, i7 C' e9 M! X! V" Q if (!pItemElem)
+ X5 w% H0 z- O2 R2 D& Y {- c0 F) p6 W3 U; a( J% H1 ?* f
vItem.dwKind2 = 0xffffffff;) z, t2 ]) q) K& T1 l, f
vItem.dwItemId = 0xffffffff;
! d1 g3 H& q$ u4 q; z6 ~6 @ vItem.nIndex = i;
2 u# V- V2 o' s2 n0 Q; ? }else {1 `. }" U" L; C' e% M' B- _8 }# |
ItemProp* pProp = pItemElem->GetProp();$ m( l# \/ x$ {# w* p% j
vItem.dwKind2 = pProp->dwItemKind2;. t1 _6 h; g8 T- Y1 f) G
vItem.dwItemId = pItemElem->m_dwItemId;7 I# F& i8 j- n# A7 n) k& j
vItem.nIndex = i;# M/ _; ], e/ E+ v h$ c
}5 o9 P1 C! F4 V+ r8 m
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ o- M* s/ V3 K& X6 C }
9 T! P0 o, J0 X$ c: V$ J8 c" i //////////////////////////////////////////////////////////////////////////9 n& r' \ t: M" V. h! g* k' s
sort(vItem.begin(),vItem.end());//排序8 D! g9 ~" i; b! A- x9 t9 i0 D! `
//////////////////////////////////////////////////////////////////////////
/ _! C1 H- H8 L& H# n //交换
' W+ ]3 c0 J, k7 J for (size_t i=0;i<vItem.size();i++)) Z6 X; J, l( q9 q0 b
{3 m1 ?" @: Q4 ], _; e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- w B5 {4 R. w; P pInvSort->Add(vItem.nIndex);8 ~/ d" _4 b6 h5 F7 ]. w6 j
}7 O8 i! N3 u1 W
BYTE nDestPos = 0;2 e/ b) @5 M5 l
for (int i=0;i<MAX_INVENTORY;i++)
: D2 h: c+ ~# [3 s1 D9 F {( E% l5 ^4 u% E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( j8 d2 ?" V( O5 W J- u" E2 I9 Q if (pItemElem)
# Y5 E6 |6 _# E& {& V { j! h( H0 [8 |# i$ J# H
if (IsUsingItem(pItemElem))0 N, c. t1 R# ^+ R
{
4 s+ Z. F* \: n# ^0 p* @$ P //这个位置无法放
4 A. ~5 Y# p% X0 y8 H nDestPos++;% _8 m* {0 g" z$ N7 b; n2 T
}! r/ r) w, A! o* Q) J0 ]
}
' V6 ~; X5 O6 E! t BYTE nSrc = pInvSort->GetItemSrc(i);
- V% [5 @3 a- ` pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' u( N3 `7 m3 u if (pItemElem)
( l$ S* J* Q: K8 k" [ {
- W% X$ q4 c# q$ E# n# Q if (IsUsingItem(pItemElem))
6 {. p G! _5 U2 W {, r+ V$ }5 Q/ p, v
//这个道具无法移动,跳过
C- m! I- z. M# a& n0 z continue;
' p& s1 x; u/ w& h6 W7 T }& i! ~& r" I/ f
}else{
9 N# j. ?0 x0 e: ^4 B- T) A //空位置 不用动% y. s) A9 b) l# u
continue;' N0 Z2 J& C( G; Y; q+ f5 m
}+ U1 W9 H" ?& y H
//////////////////////////////////////////////////////////////////////////3 k5 ]5 P% `7 e& q. h v/ M
//开始移动# U( k' Z6 G7 E' A& K
if (nSrc == nDestPos)
9 h M& |2 f' J6 N2 Q. E {4 \# K6 U7 C7 V5 ^5 R, L
//原地不动3 a5 L8 ]2 _2 o0 w) a' R( Q
nDestPos++;, f: t0 u8 U& U) Z/ c
continue;
) T' O9 B7 W C/ B B }
. g$ d1 l" W8 x4 d* q pInvSort->MoveItem(i,nDestPos);
8 X j& F" ^- X# T' ^! c$ X2 t g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! P9 @9 B/ g. L0 q% o Sleep(5);- x, x6 t( \6 D) P0 D' D0 l" @
//Error("移动 - %d->%d",nSrc,nDestPos);! M% K, A8 P, ~% _( K O0 T
nDestPos++;
j) W- b. S. g) [, U" w7 H }
2 L! ?- f8 b B$ Q, ?4 s //取第一个元素的信息8 B: c, V/ s$ M4 o
/*$ y# i* G9 [* C s0 J
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 O/ p8 Z; D) ? M {9 F! z3 J# @1 Q7 l' X9 n
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# f; `6 R O7 P) K: C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 X5 ~4 Z G' Z' E
}3 U5 R# d: C6 q5 }; D" x
*/6 u# R3 S: X. i; U7 |+ d# Q
/////////////////////////////////////////////////////////////////////////// |# } Y6 M2 C- c
break;# S) Y* n8 Q- C- \6 N/ n) E
}- {3 W' B2 A) ?0 w, x/ G! z
} 9 P/ F$ k4 |( u$ a
}
, e2 F$ m4 M3 }" G- V1 Hm_wndMenu.SetVisible(FALSE);/ ~7 m5 K8 P% A; z. N
1 _- J( i \2 x8 t& ^$ [) K--------------------------------------------------------------------------------------------------------
3 v) m, @2 R/ M: k5 n2 g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) [4 J3 N: I$ U. s+ _- W9 t8 O5 g$ _, @
{4 M' x. j. n0 ~, ?( I0 C6 U
BaseMouseCursor(); C5 P( z- @( C) I6 K
}. I! S! M4 u4 R2 p5 O
在其下添加:* n7 r! w- s- A" T+ D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 ^) x, j& X+ W4 P, }: }2 u- R. b* _{' Z/ l* Y# J& C) S0 L6 R
m_wndMenu.DeleteAllMenu();5 N8 m& j3 \# B# ]" r. D. u
m_wndMenu.CreateMenu(this);
' e' G2 t" X' G3 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) t4 d- c( G4 P: ?( t3 S5 v" [
! c- u& |" d, \3 o; jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 B7 t! _9 o+ E! M; r) A# i1 [{3 A0 A" J5 I" \0 ]
//P以上级别才可以删除所有道具
' H1 A# a; x! x) J$ [ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) _; N' g- W' A# T
}# g; n7 g) e" l& d$ @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# j" O0 R6 T2 y, X
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 k2 n, e- r( R( {. X
m_wndMenu.SetFocus();
9 z0 |0 A# q/ k% _% F& d; p4 V, |}5 S- O/ O3 Y Z; P
------------------------------------------------------------------------------------------------------------
?9 U+ Z0 x) K9 B4 Y4 H*************************: ]1 p* O" L3 l7 K6 O
WndField.h文件9 `3 J5 v7 u# p4 `8 @) O
*************************
5 ~2 g) K+ O" x% i搜索:BOOL m_bReport;
' r, x* _5 [+ a其后添加:
6 s0 a d/ K) qCWndMenu m_wndMenu;
" G3 |+ [; Q* a0 M* g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( Q7 _2 `4 v; k' ^' g, s其后添加:5 e$ d, v; K2 r4 W8 Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 J4 O \1 ^5 c2 G8 i' v5 t8 f' ?: P; b7 X9 e
, W: y9 m" x( e
|
|