|
|
源文件中_Interface文件夹下WndField.cpp文件' e: t/ g' v' V; T4 |( ^# g, i
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 s$ T; k4 W2 d4 ?0 |, C3 `& @" z. V# b3 j" V
struct sItem
2 [* ~% O; J# P1 v{
& m* u( T% [+ x& O2 x3 L( N$ s# L: s4 kDWORD dwId;
7 N4 ^5 x" X( |4 T' hDWORD dwKind2;
, V1 ~. f* N8 v R+ X4 g% W K _DWORD dwItemId;2 t2 u5 L6 \6 p7 j
BYTE nIndex;0 V. j8 e# r% ^0 R
sItem(){% B' k4 X' }# q1 `! g- B
dwId = dwKind2 = dwItemId = nIndex = 0;% w5 L) G9 t# i/ \0 n; F
}8 U, ~& ^$ K& A
bool operator < (const sItem p2) b$ K. w' @# {) t4 l: M6 Y
{
5 A) x: {- }" x( r, \1 ?) p if (dwKind2 == p2.dwKind2)+ U- g9 ~( W8 U& w6 X1 d5 L1 X/ _+ U
{2 M2 y; _. t, }; |# }0 q8 n N
return dwItemId < p2.dwItemId;5 L- ^; Q1 V5 H% g
}else{- d: c" @& u; e
return dwKind2 < p2.dwKind2;
9 E1 T6 ]7 W" s2 D& N1 i3 a+ m1 k+ f }1 N% i; L0 y1 ]5 ^
}, e' m3 w9 }# \" M3 h
};
( \- |' u. V5 O' w& ]class CInventorySort/ s5 Z6 H! x+ t, C3 q$ O: w4 ?
{
* B7 d: o- N1 k& `4 j3 X. H2 fpublic:( Z9 O/ F- K) ~, |+ z( E
CInventorySort(); I) I$ Z: \ i' b0 a
{" }1 X/ x' L+ R; \/ x
m_dwPos = 0;
6 A, j" @/ z/ ?& ^0 Z! d}
3 N; V, B' f# @3 u. J/ {6 @~CInventorySort(){}
Y, [$ o9 ]! X0 w, R9 E3 ~5 ]private:
6 w, {9 B- e4 R3 d$ p8 vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 F. R+ r$ _* L' h( cDWORD m_dwPos;
/ C; ^3 D, O- x5 lpublic:- l2 `% O4 a5 \: U H
void Add(BYTE nIndex)
* v9 Z, a+ E( ], d: t7 o" `{
4 r# j! b/ v! A! Q/ s, H( E if (m_dwPos >= MAX_INVENTORY)
: A8 \; I+ f- K! ~: ], p, H {
( B7 p! D3 y- s# y return;$ U' ~3 F0 r0 l
}
7 @! W! i6 X ?0 {' U" z m_Item[m_dwPos].nIndex = nIndex;# Q) w6 D* ?: q+ g# i' t
m_Item[m_dwPos].dwId = m_dwPos;
. ~6 Z# K0 H1 n* k( J0 n m_dwPos++;
8 Y8 _& W% u; `& \8 }; D}
! P R& K) Y* {. t5 uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( W$ H0 P4 S3 M: c
{# @+ w/ h/ Y2 [8 W" R
for (int i=0;i<MAX_INVENTORY;i++)
$ R) n; u% x, J) ?* ~) K$ u, u {
3 C. f' h; E/ ~" O if (m_Item.dwId == dwId)
7 ]% R5 U( }6 }- W& @: T {
2 i% D) t8 h& o, T' n return m_Item.nIndex;7 K: b6 D; M/ P7 ^
}
( O$ v0 _9 Z7 I8 h }+ p/ W4 h2 _2 F' B4 P. j5 u
return 255;! | Z# r2 {4 \) W# b
}, x7 u7 g: ^$ F7 G2 y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 @! |6 o) S/ |4 p6 n7 K5 r( G{
$ v3 e s6 K, }/ ]) L& @- | BYTE nTmp = 0;3 H) w0 r( d( \! v2 R, _
bool bDest = false,bSrc = false;
5 I) ~! H t# Z. K8 c K$ a for (int i=0;i<MAX_INVENTORY;i++)) x' E7 G- X% z; s+ @
{
7 v. }7 O( m7 V7 `( ^( e6 ~ if (dwSrcId == m_Item.dwId)9 {1 M0 S/ E& {
{- A) }9 `$ j0 v5 _8 k: }
//id相等 则 改变对应的dest和src6 |! H8 y$ ?3 ]
nTmp = m_Item.nIndex;
& ~$ @/ A" L) \0 a' Z7 J/ @# E Q m_Item.nIndex = dest;
& Y0 w; R; ]- ]; S }
# A) b) C9 l( E! k' e+ f }) Q/ b* g7 Y- B/ {0 {: u
//临时数据保存完毕,交换开始
; L, z$ S/ M4 D, l. {, _/ x for (int i=0;i<MAX_INVENTORY;i++)9 c5 u7 I* N& _; l* J
{0 h, W' X7 m) h* C
if (dest == m_Item.nIndex)- K I( A6 i, u; f: M# c f1 V/ O6 x$ i
{
7 j. ~2 Y0 V1 q5 C //id相等 则 改变对应的dest和src- H3 W; X9 V& m
m_Item.nIndex = nTmp;
) M$ D. C0 y9 V! N. u( y2 L% z }
: m* L5 P' @% T9 K% s8 a1 n7 { h }) r) @. z9 u9 [+ q4 h$ Y f$ L
}& \( t* K( S! ^9 z* v
};
# j+ O9 K1 R7 h- r- E-------------------------------------------------------------------------
- h% P: n( I/ f5 R! ~5 C6 A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 d, {, X4 g. N' m' U1 v# U& u
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( a3 A6 n: }- I9 [紧靠其上添加:
2 q6 [' l$ R( J! Qif( pWndBase == &m_wndMenu )
" ~$ s: W) B7 i+ P/ x4 r{
9 W- `# o- X3 t) ?2 [2 P& w6 w' D switch( nID )
4 v/ e k0 I, p5 ]$ C {+ \1 M( q/ r5 J' ]+ q$ [* f
case 2:& {2 h1 @* P8 `# F
{
% R6 a# _$ Z9 y* F* c+ M //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
g* u/ o' i7 f4 ], S9 v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" L/ D* |& I. D+ m7 i {& t0 I/ E6 Q. r f
break;, X* I* Z# U" e% d
}& K8 ]+ K) K. b, M' A
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( D/ Y/ s( N" J% V! r2 V! M {4 U. n5 d+ b& u' O8 V3 ]0 w) U+ c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) ^+ y& I! [4 R. a/ ]9 z; Y3 n1 o if( !pItemElem )& G. P) F5 x1 u! N l
continue;
" L% u( C) C2 @4 M if(pItemElem->GetExtra() > 0)
! ^, w) r! R. U7 w# c, F continue;
: s d+ ~# q- B( P% C if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ D" K, q1 c9 I& o/ { continue;
' T4 M4 ~- p# ^' R6 R if( g_pPlayer->IsUsing( pItemElem ) )/ |6 |$ e( j2 o# m& o- f
continue;
. S4 K- E6 }' N7 N* c if( pItemElem->IsUndestructable() == TRUE )
5 l" L* `7 [+ b9 ?) U& P& L m/ q; d {) J' K& l8 o( w: Q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! d( h; F6 H. s' u
continue;! k1 b& I; c9 ]. A
}
Y, o) T; b, I$ Y0 o* t g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: S! B7 E; W2 u4 P# T( K7 o; H* X* I
}
# {# D8 t# D* I o break;
( C$ C; D& }- d$ u# T' K }% T% {1 Z* p0 w9 w6 t! ]
case 1:
6 H; Q+ Q* B' w' `/ n4 T; l5 t {
, j" e* X3 z7 F5 H //整理背包& u4 v2 ]% L, \2 o* U, ?
//////////////////////////////////////////////////////////////////////////
) L* {- B# A6 E. ]) V) p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 ], }$ Z& t* G" }% g //////////////////////////////////////////////////////////////////////////$ c- m! o8 ^8 ` c% \+ c- z- Z
//////////////////////////////////////////////////////////////////////////
& M2 l) X; g+ f1 f4 B CInventorySort* pInvSort = new CInventorySort;
" f8 ?: i9 l5 L$ C: K4 [5 f' Q vector <sItem> vItem;
& f' w+ x- j% _. k3 ^" w8 n' P vItem.resize(MAX_INVENTORY);//初始化大小( w' h8 ], O( ]' A% ~% A
//////////////////////////////////////////////////////////////////////////
3 _1 q' Y* h0 R3 B //填充数据6 q4 {0 t- F) f3 ]. F5 N1 l& |
for (int i=0;i<MAX_INVENTORY;i++)
1 c# W. S. J* ?' }: e; |$ h0 { {
+ J. J3 [5 t2 [! S' u* _2 I5 G/ e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 ^4 ^% \5 g+ n- t if (!pItemElem)8 x- w; C9 U/ ?8 C5 V' w
{" L8 W5 O* Z Z+ k* G2 T. \& V
vItem.dwKind2 = 0xffffffff;
& _! {$ @. |" Q1 A5 U/ } vItem.dwItemId = 0xffffffff;
* C" R6 M' q$ C/ \ vItem.nIndex = i;
# t; S! O8 v. n; D }else {- s7 F0 R, P7 z! j* B! Q; g) k6 ^
ItemProp* pProp = pItemElem->GetProp();
8 M7 ^; G9 x) ~+ F! t: ?2 a8 n" e vItem.dwKind2 = pProp->dwItemKind2;, p, |) C7 u# ~' t! s7 u; v
vItem.dwItemId = pItemElem->m_dwItemId;0 U/ Q- p7 x* ?# f
vItem.nIndex = i;* X' P, f/ ?3 C) F- ~
}
" p4 O b1 s! q" x! v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 r. S; d3 B$ t* H; d* }% H
}
: F5 n6 l5 e# l& f0 H //////////////////////////////////////////////////////////////////////////: `7 n% `; h- a: u, v/ H
sort(vItem.begin(),vItem.end());//排序
- {6 x/ e# b! z7 e3 G2 O //////////////////////////////////////////////////////////////////////////7 _7 Q R* r& x. g
//交换; j, |% _* ^& u7 ]2 v
for (size_t i=0;i<vItem.size();i++)2 }* I! \! S0 U! }, y6 }) f, D9 U
{ |1 w% w! t( E" d
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 R& z! V6 k. v0 y8 ]9 X pInvSort->Add(vItem.nIndex);
% Z3 x) z! l+ U7 A6 J: N0 |: v }$ O* Q2 n+ b) U" n5 U& y
BYTE nDestPos = 0;* H, z1 L. G5 U! V
for (int i=0;i<MAX_INVENTORY;i++)1 V: ], b5 H/ J0 x7 S
{0 a1 Q3 E0 B% s- {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* r+ ^ ~/ k$ d" v; {
if (pItemElem)) g l/ c" A8 s1 A% @8 V
{: a4 f. V( P* u$ S
if (IsUsingItem(pItemElem))
0 F% l1 A0 P, M/ d5 Y N1 C5 \ {' j3 z% S( h8 C3 _' T* K* e; Y O
//这个位置无法放' P5 y) k7 _0 G* s' L
nDestPos++;' ?9 l+ H# q) u; p
}
" v& E1 }" ^2 Y }
3 }: ^$ e2 f# y7 u) @3 A0 Z BYTE nSrc = pInvSort->GetItemSrc(i);( \3 q4 y. ]; Q/ X( `& l# u2 L: i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' f( c+ [, d/ B if (pItemElem)5 A+ H \$ Y$ s/ h$ ?
{
# l1 d: g( a9 w, j" ? if (IsUsingItem(pItemElem))# e3 y; b& M5 @6 ?; I2 \5 c$ r9 V
{
' [+ X- J J9 R' G5 _5 t //这个道具无法移动,跳过6 C. P, b/ A4 v, g0 o. ]
continue;$ b9 N/ ~$ j# T- J( t
}7 y, o- W- `8 r
}else{
; F9 j B7 w8 B& o; Q+ }8 _/ S //空位置 不用动
. O$ A* U7 e5 u. {! z0 ], F( E continue;
4 n5 Z1 Q0 _2 L5 I! K* X- l }
- j$ J' G1 W7 k% u9 M4 t0 c. n6 C //////////////////////////////////////////////////////////////////////////
5 l( E+ Y" m ^. Z' O5 A& n //开始移动
+ n5 Q8 E* z8 W if (nSrc == nDestPos)
, `# w8 h. [9 {- a* d1 t, V8 o7 u {
O. v7 `: r; v //原地不动
C; q, D6 X( g6 k; M- F% X! ] nDestPos++;3 O& `, W% M6 R5 ?
continue;6 Q; V' P+ s2 a3 p
}1 }0 u! S7 _# s& p9 v
pInvSort->MoveItem(i,nDestPos);
! f" A n% V. i: S g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# }4 o& T& D* `$ s. i/ V Sleep(5);9 y1 G' _% O. n$ ?( l3 ]! R6 W
//Error("移动 - %d->%d",nSrc,nDestPos);
+ s9 p/ G9 t; n nDestPos++;
" B: K% ~' I0 X* U }* y2 p: @( H2 U# h
//取第一个元素的信息
+ j. s% I8 P9 U /*
' R- K, ]0 {- T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 R5 Q* o, `* C' f8 B {
% @! a6 j) ]7 @3 N; { Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 C" D, i1 V8 F& r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 F% A4 M0 p; d1 s0 Y; H( F- w }
9 Q8 F4 I# u( w0 f */
5 ?) q5 k6 n# U1 [# Z //////////////////////////////////////////////////////////////////////////
/ ?0 H4 I. |+ `! G break;
; [' S# n$ j( s. }% V0 P }
4 I7 l2 Q) c- ^ } 3 Z' m. z& D7 T* c: a
}2 X% y2 l0 Z* W* E; H
m_wndMenu.SetVisible(FALSE);
6 e+ P2 {5 W$ _% s8 O2 D$ r
, ]& B) H3 f9 J. n9 [' a W' e3 l--------------------------------------------------------------------------------------------------------; c7 v! O, `& ^5 n2 d$ g, `
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! J" _+ K5 x! \. z$ `8 d{
3 m; P7 n! f4 g) NBaseMouseCursor();8 B7 s4 i" b4 d G6 M* H. G
}! [9 u8 V% V% `# h* Q; K
在其下添加:4 D+ c9 l5 o8 E# A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 S/ h _9 j5 i+ n) l8 [
{, B9 q) u: N! Q7 Q
m_wndMenu.DeleteAllMenu();3 b; N% L( D+ \: q
m_wndMenu.CreateMenu(this);
5 N# y+ _' E w: y" _! Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) O" p/ P H- ]; r4 n( [& [0 B) b
8 \0 w; x" e) \6 E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. l3 l9 B0 ]! f8 B) h# G9 A# |{$ O* D/ F' g. I* N$ e$ ?/ d1 F
//P以上级别才可以删除所有道具' f+ N+ Y1 K; h j/ q7 S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, [. y2 l1 i# h& B
}% w4 F @/ L& i* |
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. q# t" `$ q9 g+ m7 F$ [+ I
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 P( L8 I% n9 z3 tm_wndMenu.SetFocus();/ l0 L1 Y( a2 }9 p2 c: F
}: R5 A4 K8 |4 C/ B: i
------------------------------------------------------------------------------------------------------------
% X" B4 `& ^8 a. J- p: W9 `) b*************************
8 j, S* k& Z1 I! l8 H9 h3 q* K EWndField.h文件; L2 Q7 B! \4 I# \ K [4 j
*************************- U( c8 T6 @5 t( |2 M- m
搜索:BOOL m_bReport;0 P) B8 ]: Z4 D8 y: Y1 H$ n
其后添加:
$ o1 @9 h6 s+ r& `5 ^CWndMenu m_wndMenu; w, M; j& b' z- G( h
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( Z( B% W& d! w; c' V4 l
其后添加:
1 P6 d6 e Q- \virtual void OnRButtonUp(UINT nFlags, CPoint point);
& K9 \5 z ^* n& a/ k& a1 \
- ^9 V9 M2 A" d; V
1 d" `' V. T1 \: L8 W/ j/ u |
|