|
|
源文件中_Interface文件夹下WndField.cpp文件
; V3 `7 L3 b9 g1 d# t搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 f7 y# l q+ h: m' ]( z+ T3 P8 ^4 A- ?* w% C
struct sItem
r9 ?" T" `/ J/ L0 G{0 o+ k! y8 V: M1 ?1 Q" I) k2 L
DWORD dwId;" N" M' E, \, ~1 ~! W6 t
DWORD dwKind2;
6 S. J& \* f7 o+ vDWORD dwItemId;
2 _ y2 y0 z M4 R: QBYTE nIndex;
7 A& V7 F1 Q* ^3 y3 Y% n2 U* i. NsItem(){+ T5 U3 |( p( t( H/ Y% w0 N ~
dwId = dwKind2 = dwItemId = nIndex = 0;1 `" D- L8 b& a, @- ?8 O( m: v6 C
}7 R* U1 Y( \; z! x: i! m9 w1 C
bool operator < (const sItem p2)2 s" h5 ?0 T' r" W9 c1 p
{
. q. U. u1 M8 y if (dwKind2 == p2.dwKind2)7 J. N7 y) n% O0 e3 W
{
) t" u( v! y) }0 R: q' X& G6 m, Y7 ~0 t- [ return dwItemId < p2.dwItemId;
) H- X, P7 d8 ^3 ?( H }else{
& z! i6 e: i0 N( S# Y6 x6 y return dwKind2 < p2.dwKind2;
5 D2 y% {: |, l& Y }
. J9 y- \. M% \, e}& h' O, z5 J0 z. N, b3 p
};/ D5 M! F# Y4 o. K
class CInventorySort9 P5 i. K0 I9 j8 Q" O3 X+ ^- Q
{! _" @+ E. h0 {5 r, o% E
public:0 e1 i& L" }& L5 C( X# v
CInventorySort()
, E7 ^. v/ d4 t7 J( A; _{2 G) K$ A* c# q3 M5 K- A
m_dwPos = 0;
* i8 d" H& v* L5 Q. v! {" B7 X}6 \; X" K7 S1 V0 N
~CInventorySort(){}6 [7 B4 c' R- h( M+ w% }6 w
private:
: P$ ^' I% e7 P' q# U0 Q+ JsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 g- I ~4 G, mDWORD m_dwPos;
5 o$ w# S4 \: b* x% |. }# zpublic:1 B1 H3 \/ y n% `7 Y: ?
void Add(BYTE nIndex)
5 `1 H" t& w; F3 J{
' C* g! O' ^* j% M& Y3 ]- q if (m_dwPos >= MAX_INVENTORY)5 j$ @$ n$ S0 u3 C* H* u
{. i" r* w3 z8 r; F
return;; |( A2 m! _, I4 L1 ]7 M! Q
}* O2 I' w4 E; S5 ~& X8 y
m_Item[m_dwPos].nIndex = nIndex;& X) O+ P; A! s% }$ k$ r
m_Item[m_dwPos].dwId = m_dwPos;' @" N2 X+ P- N, C" _2 K ?' F; O
m_dwPos++;
8 z" V$ P& S' Y* v7 ?}
% Z6 q; y! j2 o% Q4 h8 kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( m& n! z4 H; T& F6 |$ l1 D{3 I4 c7 ?: y) g
for (int i=0;i<MAX_INVENTORY;i++)4 K8 X% v i+ W( N; C- j. }3 W
{# J2 m$ s7 W6 j- d, d, ]
if (m_Item.dwId == dwId), z" r( s+ x% X
{$ r6 o; s& O; B! [1 Z' \- a2 g
return m_Item.nIndex;
& n' I* h) A# \: ]' X7 }- @2 O }& `( b* X! b! {! N- J. D; C
}
. s3 _ w2 c4 X7 ^6 F9 _' x return 255;
: ~' B; [+ ^7 o& z; }}
8 O9 ?8 y# c. Q- `$ n @void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% E# Y9 V5 ^0 C( u{
2 ?$ x, @, u' ~ BYTE nTmp = 0;/ b+ }0 e# e0 R, k
bool bDest = false,bSrc = false;
, ]. p- j% r1 R) d9 h for (int i=0;i<MAX_INVENTORY;i++)
) u% Y, o a1 S9 p {
3 H! D& z2 j% [ S5 o F$ x if (dwSrcId == m_Item.dwId)/ y+ h# Z+ `( i% p
{
# \; e4 z3 \, ?7 q ^( F //id相等 则 改变对应的dest和src! \+ u9 ], H0 h: A- k4 N% I' N+ i
nTmp = m_Item.nIndex;
9 s$ Z- Q3 q- E& b6 H* s m_Item.nIndex = dest;0 A4 x* A! O8 N2 v- E1 U2 m
}9 h0 l! D8 ]% T
}( a1 q7 H& N6 z* a5 A9 R ~: }4 {
//临时数据保存完毕,交换开始
' o5 L: b6 V7 B/ f( y for (int i=0;i<MAX_INVENTORY;i++)
$ e& J% p' Z R7 b, a0 E& A9 j) Z {$ D0 n8 V' b! T& J; x0 V2 S
if (dest == m_Item.nIndex): E- t& Z! F+ s$ t* U0 \
{
7 R$ h( j0 y+ A8 P" G //id相等 则 改变对应的dest和src
8 e8 t# C' y7 a m_Item.nIndex = nTmp;
2 N, q0 Z' M3 C3 E4 M }# X5 @. `5 Z; L I
}1 B4 K0 Q2 x* g- h
}
7 }1 q! @2 f5 \, V};" d" e3 I% _5 _) Z4 u
-------------------------------------------------------------------------
9 C& O+ I. `( Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ z5 B/ A! b' a! H. j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! X( ~: T) |3 R; {; \% a! A8 f+ |! z
紧靠其上添加:
: f3 z) h7 e T* |0 sif( pWndBase == &m_wndMenu )
4 y' O& r1 ~3 e, P{& f/ u+ q* Y+ [- o! Y) y
switch( nID )$ }2 s. K8 n0 Q1 H$ Q& Y
{5 O9 A# e8 F/ F: c; s \! }7 y) _
case 2:- h8 M& g9 o( x
{
3 ?3 \+ Y# q- U. A- L9 g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ n$ M1 U% T& V& W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! F; I' I# s; F/ c {+ t6 x W) ?( ?. ^
break;/ ~% @6 |9 d. p8 ]6 Q7 p
}
/ Q; L% G1 }( L% l0 d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ k9 L. D: d I* @! D {( W8 `# T# A2 L5 d% `8 ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ T9 [# X! N' \
if( !pItemElem )& B% ~7 S. i% w( k6 a% m4 \
continue;
. R5 W( P& I* {5 }* s' m5 J if(pItemElem->GetExtra() > 0)
e! L3 R' o& f4 U: C: z- Z/ Q continue;
8 X5 j+ A+ `6 P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 W! m+ w4 k+ L! h continue;/ `* l" Y$ r- b/ _. O
if( g_pPlayer->IsUsing( pItemElem ) )
. a. s, b; k1 L' B C continue; G3 ?! [- y4 w
if( pItemElem->IsUndestructable() == TRUE )- Q9 Q3 q0 {" y) s1 B
{
6 G) ]! s+ x8 s' e9 P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 B0 q' p8 X2 Z+ g continue;
2 \* g5 ~' ?, r; G5 j( T8 U! H' R }
1 x8 }8 a e2 W% r; n W: L g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( ~4 a0 B5 [3 h+ w, E
}
( p. M# ^1 P/ C) |5 e break;
0 L) z9 ~, o# Y/ r1 e* L6 o }, q: o4 @- d3 u, _: z
case 1:
! W0 U3 q f$ g3 g) ~; J) u {5 P' ?( g+ X, b' @9 e. {& X
//整理背包8 i0 a( ~( d m
//////////////////////////////////////////////////////////////////////////
" m8 o' r; c5 s5 } //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 N' H' f+ O* G( d7 b+ V9 v8 T //////////////////////////////////////////////////////////////////////////
% \/ D0 k/ L9 C" u //////////////////////////////////////////////////////////////////////////
) x+ V, _! ?0 k2 W CInventorySort* pInvSort = new CInventorySort;: A. {* J1 Q7 E+ g4 j
vector <sItem> vItem;
7 u3 a) n4 v8 n& r. n vItem.resize(MAX_INVENTORY);//初始化大小
0 y2 Y& F$ B* a1 _( L //////////////////////////////////////////////////////////////////////////0 b" z6 w" K' `: F: a
//填充数据
# V4 \9 S# W' s) N& {5 ~ for (int i=0;i<MAX_INVENTORY;i++)
# j2 h3 ]$ p6 l9 J% C2 H {4 x& S; l1 k' J, Z& B5 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 W$ e2 n5 c& s% I3 {6 n if (!pItemElem)
4 |% R& c; ], Y {
8 A0 A3 q! N$ m$ R$ k vItem.dwKind2 = 0xffffffff;: l/ ^5 `2 h) u9 [. W* d9 K
vItem.dwItemId = 0xffffffff;
; Q+ U/ p# z4 K3 s4 ` vItem.nIndex = i;( A: Q& l& S) x% H: Y* N' H
}else {
' n" a# x7 l: A ItemProp* pProp = pItemElem->GetProp();
# O% {+ d" c8 A( \ vItem.dwKind2 = pProp->dwItemKind2;
6 D3 V( V5 R1 v& @ vItem.dwItemId = pItemElem->m_dwItemId;
+ @+ N1 S. t' a7 j4 x! U& ^ vItem.nIndex = i;7 b6 b4 S: Y* [' q, W
}
9 w; Z9 n; _& [5 [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! {; j8 B8 R# _2 ?/ n }
0 `* [+ U( I7 u; {- P3 v8 s //////////////////////////////////////////////////////////////////////////3 Y8 u, ]. u4 N7 |2 q/ W
sort(vItem.begin(),vItem.end());//排序4 d2 T9 N3 ?1 i! H _
//////////////////////////////////////////////////////////////////////////
* E5 r( ]$ B( H. D //交换
( l' ?4 @- D, s for (size_t i=0;i<vItem.size();i++)
2 j/ g; Z3 }' b7 j* R$ {2 W {" {( W3 P4 s1 z! I$ x7 f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& M9 I3 D3 |* X4 R2 K! B% ^+ V4 T2 p( N pInvSort->Add(vItem.nIndex);2 @$ P; W2 l" M' b$ V+ @
}' ^9 T5 H; o) D* b/ j3 t
BYTE nDestPos = 0;0 V6 x5 X3 ]) C5 I- r* c% m( o- `" w4 ?, H7 b
for (int i=0;i<MAX_INVENTORY;i++)4 h) W. ~4 U Z5 J
{
4 t* J6 d9 I- H4 y6 @' q3 T" U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ c2 [2 N) V. n6 m
if (pItemElem)
. q1 w, g7 u' `% y {6 _( t) `" R! _. q _
if (IsUsingItem(pItemElem))% b. [: g) C/ i% {
{
" T0 ^. N2 U8 O3 T; f" K' k9 | //这个位置无法放
/ R" `+ _- v! _$ d nDestPos++;
1 p) z0 A* Q8 ^/ p: w8 p }
. e0 f3 N5 n' u$ _1 Q7 H }
0 B4 P) `3 r, x; j BYTE nSrc = pInvSort->GetItemSrc(i);
" Z4 E/ s, s0 J1 r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); Q! K$ \4 Q. L: H
if (pItemElem)+ t3 X# o1 m" k. P; |4 L% k2 C
{# d+ Y: p/ l# P$ g" d# p
if (IsUsingItem(pItemElem))8 v" c4 b" y" A
{- r% X! b. Z4 a
//这个道具无法移动,跳过
! c- M6 u: x* f2 ^, ` continue;2 N1 b* ~5 o9 I1 L( }# }/ T
}' \" f! Y6 Q) I
}else{
) e. X6 N. p! R; P. E //空位置 不用动
+ W+ o; r7 g" O* U+ ?/ X2 g% E continue;
( C) j) e: V" ~ }
! m- U1 W) B: e( D. G //////////////////////////////////////////////////////////////////////////
" L& A; _5 S1 W y# p2 ] //开始移动1 a. M x4 |& p B1 _/ @! q* N4 P
if (nSrc == nDestPos)3 E; i: H1 m d% I7 M1 H3 G" z
{7 `* L: @9 C% c2 P" g1 l
//原地不动) y8 D7 H, N7 B# Z( Z! h
nDestPos++;
; }( r3 ~. e" F; D' { continue;
4 n/ Y9 J4 c' G V9 ^ }
0 E- O- |7 J- C. S pInvSort->MoveItem(i,nDestPos);
( e9 p( Z& t5 x g_DPlay.SendMoveItem(0,nSrc,nDestPos);# s+ J# @% @& S
Sleep(5);5 z& h6 n6 T# q1 j! s
//Error("移动 - %d->%d",nSrc,nDestPos);
, p% J6 d6 K( c2 \- r* c* [% E nDestPos++;
8 A! { X' c' m/ u$ a7 `1 k8 M3 j }, x' }, A3 X: m
//取第一个元素的信息: y+ _* S8 v4 h+ q5 p0 c3 X5 ^
/*3 `* V; p- ~. Q5 X+ X4 G ?2 M2 _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); z8 F, y. c3 h' @, j# _) n% c
{
/ k$ |7 f( y+ n6 Q! {0 W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' G* s; }) X* B. l g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ e# w3 H2 v7 Z- B }8 U: j; E7 s2 d$ Y, C
*/
% X; C8 P9 i }% J //////////////////////////////////////////////////////////////////////////
- b' G3 C9 O; o6 Z" g- H break;5 P1 p+ b" j9 L+ U9 A
} N" |5 h1 V# N+ e, R9 D
} 3 S3 V" G5 z! {7 q. l& R
}
( e- k9 l& j8 v! m2 ^5 g" H5 A4 Lm_wndMenu.SetVisible(FALSE);8 i* u# U& c' w9 m3 y. b% y
5 q( \6 g# }: n$ g--------------------------------------------------------------------------------------------------------) z: q9 H% a8 O* q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 o: B/ @% w) ]
{
: u, t/ t# F( J6 YBaseMouseCursor();
6 Q T- G0 x6 l, @7 }8 C6 y. i}
' v/ T: U- O* w2 n0 q* |在其下添加:" E3 x. `) O- C- E1 G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
U* S; m' I7 N7 U. h' D{
; L+ t1 M+ Y: S# Z7 |8 A3 Z$ Mm_wndMenu.DeleteAllMenu();
! q$ h- N: [* W) {/ K; em_wndMenu.CreateMenu(this);
" K/ c% ?: ?' [: K2 N9 n# T- Om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( W7 N- [* D, ?+ A
8 Q6 F1 v, A' G2 w# ~) Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); `# U% m. l& i
{) R3 |4 i3 |" @" C) l/ A
//P以上级别才可以删除所有道具
, ^/ H, V& h p7 ]" h9 ^+ C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 k& Z1 g( I& R4 \8 P: G
}. s2 Z& h9 h; I5 U0 C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! C K4 H4 D( C; Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 |+ s+ h0 e2 Q+ |8 f" K" y6 Pm_wndMenu.SetFocus();
6 ?" G; [1 [' I+ j}
6 ~; s! h( n, I$ c# O------------------------------------------------------------------------------------------------------------
: } c6 o- I/ G7 b v*************************% {6 ` |' i. f i4 X% N
WndField.h文件
$ C% t. O. E5 [0 C" I0 H, E*************************
( H3 K2 ~6 h" g" ]搜索:BOOL m_bReport;
2 n8 V) l# F+ L m* a其后添加:
1 j% k* V4 m1 e/ X" c% lCWndMenu m_wndMenu;
7 f7 _/ ]: t- ^$ Q# }/ v5 |7 f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' [4 D+ x' ?: h其后添加:
0 Z% H9 ?3 R" [. j# l2 j% _virtual void OnRButtonUp(UINT nFlags, CPoint point);4 S2 n2 `$ ^* {% H. h+ T& h P
4 S2 Y" Q4 c8 |# f7 f7 y* e
, H/ v8 L! G1 ?/ A
|
|