|
|
源文件中_Interface文件夹下WndField.cpp文件8 ^9 m! {3 M/ j7 T) \4 V; n8 K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, Z5 m7 m& ~$ M0 B- [. U- l4 X7 ?" B D. t) W' d: t( B' y: A% K
struct sItem2 j' I& f% `+ J3 [+ P5 U
{2 I# K7 K' c" _, G/ V. s
DWORD dwId;$ F1 c/ Z$ d [' A- B! Y% Q+ X
DWORD dwKind2;
' [3 j3 Y2 }& c2 j0 Y' L f& GDWORD dwItemId;
: v% g! T8 w; F, U' L9 F* \/ sBYTE nIndex;
5 m+ z, v0 ~& }& }; {1 psItem(){
7 A* y2 m) w) M! b8 t- k7 Y dwId = dwKind2 = dwItemId = nIndex = 0;8 u# d* b+ u" q/ a0 Z
} |/ O( k7 H6 B
bool operator < (const sItem p2)
) E! I4 O4 N) u; i" x: v) i+ r{# c0 L# k( j6 {; r i
if (dwKind2 == p2.dwKind2)
4 E3 ]0 q( q1 P3 O& ^ {
) J$ @+ x5 F3 J return dwItemId < p2.dwItemId;) N. A3 x% B9 T: ?
}else{
. \1 C. A; J { return dwKind2 < p2.dwKind2;0 R- R/ j8 v8 A
}
* T0 W1 u+ C6 V9 g% H" g7 V% I}
, g/ a5 J" `* ~ ~% i0 I$ Q};. l2 b( h3 L" U) A5 |1 A
class CInventorySort
% u3 {* q; E. j$ E# ^7 I{$ k( K% k/ Q# ^, }6 Y1 x
public:
! F8 V* E" T6 O+ {/ ]2 gCInventorySort()0 B4 s ], O+ m. e' h: V, D
{) r3 B. L/ V$ d' r3 ]
m_dwPos = 0;+ i5 p( l5 y+ T
}
- o' X' P9 B+ H) _~CInventorySort(){}" z( s1 I7 J) R" G0 `7 p9 [& }& v; k
private:
4 k0 Y4 ?* B& r Y1 ?1 Y, \sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" {- A2 J) _4 QDWORD m_dwPos;
) L, n$ K* f: ` k, d/ W$ l g+ F) [3 Ypublic:
8 _5 v6 T; }9 N; J1 Nvoid Add(BYTE nIndex)
- Z. w% z- n. B{
n7 t* r/ v: K( |7 R if (m_dwPos >= MAX_INVENTORY)
' H4 \9 d: S0 U) r$ ^- V, _ {
7 {9 N2 L- F. |, D6 o return;
; y) H ~1 u5 d- C4 F/ W }
7 U* F6 g, a6 c8 a m_Item[m_dwPos].nIndex = nIndex;
' }$ V8 p0 M4 S5 r2 v0 p m_Item[m_dwPos].dwId = m_dwPos;, O+ e Y8 X7 D$ B. D9 z1 d
m_dwPos++;" a7 R6 J; \+ e% r
}
/ C+ o0 q& H1 u, Q; y; UBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 Z+ ]1 [; J' I- N$ j
{
. M/ A- {4 U3 o for (int i=0;i<MAX_INVENTORY;i++)6 z1 J/ A5 V, M" C; S6 r4 M- C& o
{
5 Y! s% c, D3 r4 _2 h if (m_Item.dwId == dwId)
. A7 ~& ^4 ]" Z# u2 e {; V' s/ K( p9 k
return m_Item.nIndex;
* q! B" z8 K1 C h R+ V }
B9 b' C% \, O) Y2 M. T, j }9 R" ?: u" j3 O5 N3 c: ?
return 255;
2 D# _. t$ i( Z5 X: Y: H7 k}
" E5 N; d) c5 r0 Q9 S/ ]3 ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ A) ~$ e& y; V{& L& i4 p: N1 z+ \! W
BYTE nTmp = 0;$ M$ A# V: S8 J+ F4 b
bool bDest = false,bSrc = false;
; k* u' q6 Y* H/ G+ p% \( p for (int i=0;i<MAX_INVENTORY;i++)
% b/ O$ I: Q3 ]9 x, U7 L {7 e1 P% y0 Y V! E
if (dwSrcId == m_Item.dwId)$ Q+ ^1 }* f0 r6 |# q
{3 m$ i" I C* x1 e w
//id相等 则 改变对应的dest和src' F$ T! g% X: `3 m7 v
nTmp = m_Item.nIndex;
. p( I7 x, P/ B$ i% z( [, o m_Item.nIndex = dest;7 S/ Z H- R7 Y7 C n
}; n" F' F) t/ W8 ]- w7 N+ z8 l
}0 S* V/ H' e& G/ F
//临时数据保存完毕,交换开始" v: l$ {5 Z4 x9 B" z0 k
for (int i=0;i<MAX_INVENTORY;i++)1 R2 p% F" ~$ F
{
0 B3 p/ S3 g* O7 S1 p- v. d if (dest == m_Item.nIndex)$ F/ _/ T+ L0 D# M( U) ?0 l0 I0 v0 I
{
7 |9 }3 J/ |5 R //id相等 则 改变对应的dest和src
' Z, J1 G3 E }+ ^$ t9 U m_Item.nIndex = nTmp;
/ m- k6 h$ E9 V& L7 F7 N- I* c }
2 k& }" l5 S% k }
3 I: P% \* h8 ?}- Z; T! `8 d7 [0 Z
};
7 p6 f8 w/ q7 @- U$ `: ~-------------------------------------------------------------------------4 Z4 ^3 w" U: q- f( H7 D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ b, X1 M3 C- Z5 ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ f q. U2 }" e! Y. u. v i紧靠其上添加:2 h- B7 G5 @8 Z+ ]6 B
if( pWndBase == &m_wndMenu )
" |9 j- Q. Q3 u" ~& @9 \0 P5 @8 ?/ @{) P( T* M% d# t+ j& e
switch( nID )' P W$ [9 o5 M; b
{# U" p3 q# s( j) }
case 2:
7 I; }# {" B" I, V7 K {
h. q) h1 O/ j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 Z' ]. U9 y# T/ H+ d$ ~& G' \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); [1 m0 P% I1 i
{4 @1 q- r" B9 c* I
break;
; l8 Y* q+ ^- Y; v4 d6 c" O }
6 p( s9 x' r+ J7 |) X$ z1 C( ^ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' T1 t7 V, V0 h8 }1 o' @
{
' c1 v( i- d# i0 b% D1 V5 S) K4 m/ e$ e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ ?6 Y3 H$ I: G
if( !pItemElem )7 ]) }, V2 D8 u
continue;
- d& {; T! R9 o9 K5 g2 I if(pItemElem->GetExtra() > 0)
8 W; D& V7 l. ^: C# [+ S5 q continue;8 r7 @" i+ `- S" w# ~
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% j5 X" f7 \8 k1 S6 q7 O continue;/ x+ n% A* t1 J, v; L; V+ K( v9 ~
if( g_pPlayer->IsUsing( pItemElem ) )
# Z4 t: |' O7 t continue;
2 a& d' G) x( T if( pItemElem->IsUndestructable() == TRUE )9 ~+ M, G, _6 p# n6 X
{
c* Y+ n6 j0 R. n g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& ^. Q2 H, R! ~/ z- p2 X
continue;
& C/ d; A* r0 D- G }3 `' Y. H; j1 ^. x1 ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# C7 A% k. p" d3 R7 @" l% P0 } }+ p+ m, r2 D* ~- ~
break;
" P5 }8 C" |8 I m }' F% w& W$ F" k! `
case 1:
; A# V6 B. O2 N {: i2 h1 v" r8 N0 _3 y5 o( j/ C
//整理背包- o3 S1 V5 b6 ~5 x( Q& U; f! a0 r9 M
/////////////////////////////////////////////////////////////////////////// M* Y4 Q- W. _# G3 j8 C
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ U, u/ ` B* Z* {- n6 L //////////////////////////////////////////////////////////////////////////" ~% d8 q# i9 G, w# |! u
//////////////////////////////////////////////////////////////////////////! P+ @7 L3 P; O* ?/ V" t1 G: U
CInventorySort* pInvSort = new CInventorySort;2 L* r7 c; p' Y- _
vector <sItem> vItem;$ n6 b* ?$ k) r7 ?
vItem.resize(MAX_INVENTORY);//初始化大小
; e3 @; |, L2 y2 b! ]- h* ~5 O. b //////////////////////////////////////////////////////////////////////////
. B: p2 D: z x$ E4 C. g1 _ //填充数据
! T) [$ w* [, P F, N' c4 P+ \# f for (int i=0;i<MAX_INVENTORY;i++)
% _ h | V4 v5 `' x, F" g6 A5 [ {
1 \. r7 N9 | ~: R; Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ D2 O, \3 v) u8 l& Y4 a$ [
if (!pItemElem)" x+ y4 ?4 l5 A/ M) {
{ ~' D# ?/ B6 x4 K+ L9 g
vItem.dwKind2 = 0xffffffff;
5 F. z7 k9 V9 G5 @+ d' E vItem.dwItemId = 0xffffffff;. j; t2 i$ k; {) X5 k! v8 y
vItem.nIndex = i;
9 ]! _8 j1 _( w6 E$ L' i2 C }else {
+ D$ X, Z6 N" E% H# ^) K ItemProp* pProp = pItemElem->GetProp();
" ~ D- H5 u+ m+ s. W* ]# Q- z vItem.dwKind2 = pProp->dwItemKind2;6 h( w" x4 b2 v4 ?- {9 m# c
vItem.dwItemId = pItemElem->m_dwItemId;& a7 k O/ x# b) G% x
vItem.nIndex = i;
9 x, |/ U; q5 j# J- X. B0 l }! A0 v2 r" _' ^0 J4 c
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& V" h' x) X: ]+ I }; h# X2 [2 _- g& |! \% @7 T
//////////////////////////////////////////////////////////////////////////
0 i/ Y5 o3 } P: o sort(vItem.begin(),vItem.end());//排序
; i1 Z2 N' g9 @! r7 {! y //////////////////////////////////////////////////////////////////////////) u3 }, h- Z+ \) D7 I6 o
//交换
0 N$ }+ O2 j5 a# z6 ?" R" _ for (size_t i=0;i<vItem.size();i++)
% ~/ Q4 M1 b, z N {
9 i4 t' ]- O9 V+ f. I" n( O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 F: B) D$ _- s- p9 {1 ^, r pInvSort->Add(vItem.nIndex); }; P2 {$ \7 `; t& ~
}; F/ W+ e. p# e9 l" s
BYTE nDestPos = 0;2 |: C& @* y3 C) @8 B3 \+ z6 K
for (int i=0;i<MAX_INVENTORY;i++)
4 r4 P" ]! R+ {& e5 Q6 G {/ E' F L8 b5 }& I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 S- P& U+ p/ Y. B I; c; y; Y
if (pItemElem)
9 [; [" W/ o, R$ c- F, z, a {- Y) A) ^' b: ~6 D
if (IsUsingItem(pItemElem))6 h/ U. O# R* n" s
{
+ j2 w c5 I9 C9 [ //这个位置无法放
% \- X& {( ]$ G. f- E nDestPos++;
. z* D- q. a, j9 ^! s9 b }8 K2 f0 M! W# N# N( Z; F
}
" n& r/ R* V# p& _: D$ ? BYTE nSrc = pInvSort->GetItemSrc(i);+ Q# g8 U' j6 e) [+ E& j
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* @% D/ V8 L. ?+ t2 c, q if (pItemElem)
: ?& |9 j5 F/ o1 T# A {
9 P5 {- a' Z% t- K4 s if (IsUsingItem(pItemElem))
( o( F' d+ n$ @: J l { o6 t0 s6 C I) i% l" O8 |
//这个道具无法移动,跳过
* K# \- b6 f$ ], B continue;1 i8 h0 A, G/ o/ {4 W
}
* Y i j+ K9 s0 C% z2 \ }else{8 T; w F d" @) u
//空位置 不用动
7 R! i/ t- I, _, Y continue;4 t& F3 ~6 Q I& a
}; R. r* W( U2 I
//////////////////////////////////////////////////////////////////////////
7 b4 b) M7 X, g& l, f( ~ //开始移动
. O4 q& u; G2 M: V0 p if (nSrc == nDestPos)
% D- {. c/ K) ?; V) O {
! m, U; t$ C/ [" i4 O8 z/ f //原地不动0 P3 B. M$ ]$ z+ u# K& M
nDestPos++;9 K& N- T# T( x. q7 X1 t
continue;7 G7 w! a& }8 y+ d5 l
}
1 X: C ^& R; y( e pInvSort->MoveItem(i,nDestPos);
1 C" h1 Q0 x6 X. y0 y: B g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# i" r+ G1 E6 l1 {' n Sleep(5);
- |2 D) o. p) o- X5 R2 o7 M //Error("移动 - %d->%d",nSrc,nDestPos);0 q5 ?3 H2 Z" s& x0 d! e" ^
nDestPos++;
$ ~' b0 Z. D1 g7 K1 o }8 M l z) H1 _( ]: s$ L$ m2 ?' w. D
//取第一个元素的信息
6 x F2 g# G3 ?! P4 V1 f* ?$ n, o+ V2 k /*
6 L p# l; K& p9 S if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 F# L3 i% n0 P& D$ w; R
{
$ O1 \0 p( u) I, c Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. a! H5 ]* N" z5 M' S" i0 @
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); v* ?% |/ o& j, V% b
}: ~: d7 v/ W* O$ S
*/
$ D% n- j& a/ `; t6 `) h4 C6 I //////////////////////////////////////////////////////////////////////////$ q/ E2 u+ f3 ]8 j1 u' `2 s
break;
o( C6 |9 p' u5 _) k" I' O, F( ?6 t5 v }
1 S% C2 X, e, N' u }
2 p) @! w7 t5 T/ {} G: B) u6 G3 B8 k
m_wndMenu.SetVisible(FALSE);' \/ M3 c% ^, [9 p
/ X5 }9 L0 x7 I" S9 e
--------------------------------------------------------------------------------------------------------2 i3 a1 J3 v# V( `7 T1 b8 C( m s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& d9 p C. M& y2 Z0 Z- M
{: g" ?. t6 C0 [- D" w
BaseMouseCursor();
$ }1 p2 V9 |- x; r}7 X q0 e1 F4 R' j6 K% `
在其下添加:7 _& ?- T* l1 e/ }& K4 i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 `8 X; F/ P) {* V5 G
{
! t9 u! H5 h& `: N0 Pm_wndMenu.DeleteAllMenu();
7 T5 T3 k2 D, M7 Rm_wndMenu.CreateMenu(this);
) I! b5 B! P* @; ^7 Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) f4 t, L6 u, C
9 B' Q4 ]2 V8 Z2 Z4 ]& d5 Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ z5 n- W; q) P, J+ ^) Z5 [& G
{
5 P: c; g& T1 ^$ V' ~9 c //P以上级别才可以删除所有道具
* Q. y1 T H1 p) V m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); R) _8 O5 Z1 k
}
% U) P: w2 P! u5 S! |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, ~4 Y6 Z& r N2 [6 V' H) Im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; j S3 j ^1 G
m_wndMenu.SetFocus();
. Y% C k6 u4 z! K( t2 W% F}! a% q& |. | Z. |; }
------------------------------------------------------------------------------------------------------------
) S% B% @/ a! L5 }! V" b! C*************************
+ o4 t) @' ?2 E, B& {WndField.h文件+ [& {* U/ A+ Y
*************************7 P6 _( |" I* P+ v0 y% k
搜索:BOOL m_bReport;
3 Q. ]# h/ s# y2 P3 ~# [' j$ p其后添加:
" G6 h0 Z+ U2 E( uCWndMenu m_wndMenu;2 l* H9 @/ J- O* v9 j
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 f7 g3 ]9 L& w; L/ v其后添加:! X/ ]4 Z. t6 @) U
virtual void OnRButtonUp(UINT nFlags, CPoint point);
\, Z. Z8 f5 |! ~
' ^& J6 u3 @% C4 z0 y; |( q2 i# X6 e) a3 M
|
|