|
|
源文件中_Interface文件夹下WndField.cpp文件
' r7 n2 ~+ Y9 a" r0 v$ a7 K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ T4 V0 f0 S- f7 n/ L4 O+ O
# e; E3 r9 a) Z7 D" Z7 qstruct sItem
8 N1 V/ A$ x, K, t; t5 N1 q{( |1 r7 A, H+ K
DWORD dwId;
/ u$ g6 t1 a) zDWORD dwKind2;2 S+ s: p1 w- W2 k9 j/ G! c8 ?2 W
DWORD dwItemId;
5 n' t& L# ~; X$ H* `& i$ kBYTE nIndex;
- @! r4 G n. E5 B+ n9 ]9 dsItem(){2 s- d$ c) m K$ b c
dwId = dwKind2 = dwItemId = nIndex = 0;
! A. A+ z) X3 @- x! Q& v6 W}5 {* F, b V! G( k
bool operator < (const sItem p2)$ Y g0 O) l: J! r3 Q# S
{- P0 A5 c7 g/ k H
if (dwKind2 == p2.dwKind2)5 ^6 G. \( p# I; V6 d
{
% E4 w( u- z! J return dwItemId < p2.dwItemId;7 A1 G2 E1 Z: {+ O- X
}else{
: {8 k' z, ^6 O' m% B2 \6 m return dwKind2 < p2.dwKind2;
: G8 L* R4 @6 N T$ R }$ ]9 K2 O, z- V
}
' F& E8 p8 j: o. c};% _8 _5 j! X6 A% S8 X( j7 ^* R# ^
class CInventorySort
% F% @4 }' g5 ~$ ^9 O{
5 V2 a) p K n* {public:
) a( K6 ~7 d" B9 u8 x" UCInventorySort()8 |; j" E r* z( N6 k$ {
{/ ?( K9 l; }! [
m_dwPos = 0;$ ^) H: C" f+ m
}* b, k+ M3 u$ X8 X* W; e7 ]6 `
~CInventorySort(){}9 @* {0 O0 W6 k; L/ q! B3 q
private:' Y) m7 r9 B$ q. e1 N( t
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) U! {' }4 g4 O5 |
DWORD m_dwPos;
* R+ [ |) F3 R. Q1 |7 }9 |public:9 z, M: h1 P G3 m: N; r
void Add(BYTE nIndex)
8 X% p) V: e e7 e: S/ Z/ v{
. `6 y r9 i7 _9 j* u8 o6 Y5 @; x# I if (m_dwPos >= MAX_INVENTORY)
$ }( O5 B# L$ J: }! f) I% v" J' R {
9 i0 a. q' s5 ? return;
( k0 V- _* j6 j6 _1 j# { }
* P6 I4 s C) o$ U m_Item[m_dwPos].nIndex = nIndex;& [( H" ~) X2 m0 `* D$ x
m_Item[m_dwPos].dwId = m_dwPos;
! ^+ l. y( ?! h/ ^' \6 [" ~. Z m_dwPos++;' s7 l% M! g; S' P& E
}
; S& R4 X% {- Y4 q* Q/ D. eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; L* b$ G" e. P2 r1 v
{4 y! Z7 P# y2 }/ y2 `) I! K
for (int i=0;i<MAX_INVENTORY;i++) x# ]5 k# s9 d' L4 g) _
{
# r2 i9 ~8 a% t$ d if (m_Item.dwId == dwId)3 [: g3 P2 y9 O) ]" k$ `8 w
{
/ _4 S/ L5 q8 t: A9 Q return m_Item.nIndex;
9 z6 u: p2 E: W$ @ }
8 B/ J/ x# S8 H% ?2 @2 G }9 [% T2 f8 N/ V' G" R% D1 E3 c
return 255;
9 @; }5 G, O J3 J: K& y9 n}
9 k8 D) c M b( c0 ^4 L" y! qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ \, W Z/ i1 x# B; m; z/ Q
{3 l- `& w9 `5 U$ Q$ r" }
BYTE nTmp = 0;
( U( Y7 b6 ^5 i/ v( D bool bDest = false,bSrc = false;
: g6 w( R+ I+ Y; r# n2 @2 ~ for (int i=0;i<MAX_INVENTORY;i++) {. G' e+ ], j# y5 J
{
" Q- K1 H" z3 B if (dwSrcId == m_Item.dwId), r7 l' ^+ r) L6 _1 n( {+ h7 r' `
{! t2 L: E6 {/ @4 A
//id相等 则 改变对应的dest和src3 o" D: ?, _( ~. r# I% H8 k
nTmp = m_Item.nIndex;9 @# i. z! r, z: h
m_Item.nIndex = dest;) H* F8 T$ c2 M) S0 n
}2 |; F+ m& W8 z$ ~; z( K
}# f4 ?+ U! x7 X3 w0 d2 X) V7 f$ q
//临时数据保存完毕,交换开始, p7 W1 H- ~4 \; [7 A' n$ m% O/ p
for (int i=0;i<MAX_INVENTORY;i++)
6 h' H) h0 R; E1 @; L {: U" n/ y, Y0 n
if (dest == m_Item.nIndex)
* c5 M4 q! @" k {
1 u N5 G7 o6 b) ^ //id相等 则 改变对应的dest和src
0 i6 b3 G; Y6 [2 W7 ^' @# j m_Item.nIndex = nTmp;" W& Z4 N' L4 q4 l$ `% _
}/ M. B7 I1 V; g) y" [5 H
}
2 t( p/ o$ Z0 D5 Y2 D8 D5 H8 ]}# x) y- _, p8 x1 _
};: @" Z" S& Q. J+ r; r
-------------------------------------------------------------------------
9 c" B# T3 @! g! j8 [6 K8 \. U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ T4 c6 J4 b$ S- O0 i0 s( L9 l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 ]+ i5 J* l! O3 n6 T. Q( H7 A$ J紧靠其上添加:
" [" S7 L2 ~8 e6 mif( pWndBase == &m_wndMenu )( M0 [3 o4 t V0 S3 n' |6 F/ y4 f1 ]
{* z' W/ I W% N5 y& H
switch( nID )
/ {$ G' E4 I4 O {3 C. e( w" i) M. _0 H8 a
case 2:
0 G* f1 S& V3 C) Z* \; X. n8 T3 h {
0 Z+ s; W# N. N# @- C5 H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- W- F% @# }6 u) I5 r2 u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); E, G5 L8 [% K, F6 x- x
{( P. c- ]; p3 F( V. u1 ^9 v' k
break;0 |& x" p F! P; s
}5 ]4 C2 L1 H! u/ X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( E. K( l" Z3 M3 n( r0 [1 M
{8 v* h; v! j3 W( W8 |' J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
l# I; b) b0 s1 l, J2 G8 r8 S# { if( !pItemElem )1 W* |$ I2 S2 |3 u
continue;0 F6 x3 Z% P U5 G( K
if(pItemElem->GetExtra() > 0)0 G. {$ e% ~! i3 Q: n7 l5 @
continue;" h" J% U+ u l; u$ d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' y: C" a3 S" G, S' m continue;. f( _2 H0 T6 J+ ?
if( g_pPlayer->IsUsing( pItemElem ) )
* @+ S- k T% o" R continue;
7 M- Q5 i* H! ]# B- e if( pItemElem->IsUndestructable() == TRUE )* v6 ~+ o/ b, ^: ]2 M7 ?, ]
{
3 n! [, `& R3 U" z: g1 ~. J, m g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
h) m/ I9 R, e8 M4 T continue;
( D1 U- C5 C5 A) _3 ? }
/ K6 U: f5 ^2 b" `2 N( m g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 {3 F2 T9 m% d) Q; C6 l, ] }* v" J0 _4 d% J( s
break;
& K5 K# P9 l! m0 A' | }
) E8 Y3 r( c: b' u: l1 }. u case 1:
) Z9 O3 [; [* P( X: e8 x; W0 E {' _8 x2 r9 U9 r
//整理背包
+ n3 p) I7 q) ^( s# |9 e0 y //////////////////////////////////////////////////////////////////////////) `5 A+ f1 F) q5 |2 V+ M$ U1 H
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; E0 C: C' r' p: h W! L/ O. i
//////////////////////////////////////////////////////////////////////////
; [' c9 g/ E4 O5 A2 q' J //////////////////////////////////////////////////////////////////////////
! o) t9 i' K3 n7 G0 f& P CInventorySort* pInvSort = new CInventorySort;' S1 o# n: s, h5 d, [$ e
vector <sItem> vItem;
; ^( A, y- ?* H/ I1 [8 g5 K: J9 V vItem.resize(MAX_INVENTORY);//初始化大小3 g; n: _2 Y8 P" @
//////////////////////////////////////////////////////////////////////////, }7 h- v0 ^, { m
//填充数据
+ t2 X0 D8 Q+ X) D' y( m for (int i=0;i<MAX_INVENTORY;i++)' d4 ^+ g, J: d. V
{1 I8 @! E& L* y+ R- V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# Y, m; U6 ? Z* t, d/ _. I
if (!pItemElem), p6 V r; `' \& e/ Y1 M8 t
{
' y1 F7 }! K& D- I vItem.dwKind2 = 0xffffffff;
9 B$ L- g0 z9 ~8 l6 [; A# V* G vItem.dwItemId = 0xffffffff;. g! w* q4 V% A3 ~2 j. X
vItem.nIndex = i;
+ w+ F( ^ v/ \ h1 D+ @. o }else {) O' z/ X1 z2 d% v2 M. O1 \ V/ l
ItemProp* pProp = pItemElem->GetProp();
}% d; V4 d$ x) U0 R+ c6 j vItem.dwKind2 = pProp->dwItemKind2;7 y8 p& \+ E6 X5 V& ~8 h8 c$ s+ s3 F
vItem.dwItemId = pItemElem->m_dwItemId;
! m- u$ ^1 e* n Z' y vItem.nIndex = i;
6 Y9 V; W& ?& `) N9 S% o v }2 A; H' r, ~1 ~" X1 {# V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, F4 b2 _% Q# V# G
}5 ] I$ ]: j) d" F
//////////////////////////////////////////////////////////////////////////
* \/ u# M" i( f sort(vItem.begin(),vItem.end());//排序4 ]! k" Q5 \$ J' q* Z
//////////////////////////////////////////////////////////////////////////* V2 \0 T& Z/ u9 K2 l8 U9 u: |
//交换 C& T& r6 T8 D/ u& \- s) v( l
for (size_t i=0;i<vItem.size();i++)- q5 i% l& G9 \* y$ _( Y+ {7 I- t
{7 _1 @" O) l+ G/ i- s7 g- r4 W8 b
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 m9 i# W) e* O; g, i4 K
pInvSort->Add(vItem.nIndex);
; m! `& i# q" D }
) U& J7 X% Z8 ?- c' W3 S! A BYTE nDestPos = 0;! {* ^ D# h3 M7 ? ~9 ?
for (int i=0;i<MAX_INVENTORY;i++)
& h9 @- L1 `% s* Y- c) x {. [/ ]& f" s8 S$ q; X% R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ [+ j; [* f8 s0 S2 } if (pItemElem)
M! f. ?: C( r# X {4 }4 s4 T E& V2 q: [3 c6 {+ s: D
if (IsUsingItem(pItemElem))
- j" X: o% }6 Y* s) z+ K% x {6 j! u" I' B4 }' m$ E, l- p
//这个位置无法放
5 \9 T( h) P/ L& s- T! ]( P nDestPos++;
) H6 V8 G+ i' H }* V! R0 T( s+ M
}
' _" u, H- G" ]9 s) f BYTE nSrc = pInvSort->GetItemSrc(i);, T$ r" Q+ f5 }% B
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( }4 i. m' q. d7 B. B: x( l7 l if (pItemElem)5 H+ w$ o* F/ D) I
{
0 I+ Y1 M. ]% p/ }2 [( w if (IsUsingItem(pItemElem))
; L6 Q5 s: f% @; a# R2 u: ^+ o0 I" O, H! x {
2 o5 g0 s, a6 t# k3 H3 P& p2 R //这个道具无法移动,跳过
9 m, y+ z0 b$ f1 I continue;
9 O6 l( `, Y+ Z1 N, I* J1 N }
6 r& J1 ]/ |6 L& q2 C- E: d3 [; w }else{
l0 D0 g! {. P1 G$ R- P0 L' Z6 B //空位置 不用动
3 Y& y$ k* O6 {" A9 _+ b continue;& y" v* t: A8 D6 j% s
}
6 w8 [2 S1 ~% S8 y3 \$ l //////////////////////////////////////////////////////////////////////////
$ D* r5 W- V& D- N; ~* c //开始移动
! y: v6 d3 W5 y4 J if (nSrc == nDestPos)& m. t4 @9 z4 L' M1 X8 T" J1 G$ L
{. A7 ?2 R- K6 f, @0 L- X
//原地不动
; g' ^9 z+ \; b: c6 l nDestPos++;3 s* B9 a O& {& s& L+ U4 B
continue;
6 e. Q5 e( J0 Q2 S. d$ a }
7 x) V& M2 F% `1 d5 {6 I, X pInvSort->MoveItem(i,nDestPos);( \+ O1 }( V; U
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- w8 A8 e( u Z9 S Sleep(5);2 ]! a: j* V& ~9 m5 |! P7 K
//Error("移动 - %d->%d",nSrc,nDestPos);$ f4 a+ ]; k2 a7 X
nDestPos++;
. @) t9 m! f5 Z }! G2 X5 R5 w& W0 Q: A
//取第一个元素的信息! Y* V: H* J2 E( T
/*
- r9 G- U3 ^6 W/ f0 i if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): s, o" i- d! I0 ?+ r. ~$ x
{
( ~4 A9 x5 b" u- F% o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 g' Q0 A8 @0 A1 D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 g" b; x" ~! H. M0 Z- @: a }
) ]8 T) |' u# T6 G% e- y8 i */ Q; A0 t9 X/ r" T+ [2 L3 Q
//////////////////////////////////////////////////////////////////////////
, S6 L. I2 z- p break;/ o. Y, S9 l; i9 }
}
. {2 ?. O6 s# k2 Y k }
3 b8 ~( U; E$ m5 O( V! T}
& H& U, u( V3 s0 G" H" wm_wndMenu.SetVisible(FALSE);4 R# R/ y5 k, Y9 B7 Q0 F4 }: `. J
9 l+ t, {7 k/ s. v& i' d% p# h
--------------------------------------------------------------------------------------------------------" {( w' \" R$ }8 |/ ~8 a6 G6 e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 M; q% l& i" V2 b# R% D{+ r r. `! S# r/ Z, d" w' q( B
BaseMouseCursor();0 T9 i: l w8 s; M4 I6 m9 Q& K
}
) S9 f! `, {4 v6 x在其下添加:
0 ` f! Q3 R2 }: u S h& Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" ]5 f& R( H& B) ?/ Q. R6 t9 n6 |{. N- O, O4 k. o" Y2 Q% |2 W( \4 H8 ?
m_wndMenu.DeleteAllMenu();" T# A6 k4 N+ {+ Q6 q( u
m_wndMenu.CreateMenu(this);$ q" C1 g! `; J0 s; j6 j; M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* v1 p9 d' R9 u5 Q0 C
5 m- X. A5 v# F7 V6 ]% H. x t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). h: B; p2 b; l
{% p4 Y: |6 Z: T5 D' O3 U; a' f
//P以上级别才可以删除所有道具
7 K5 y4 o/ Z+ `2 h: B m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ x) J3 m( h. R7 r
}0 m: `; ~0 C2 {7 E, c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, B# u! N/ D& {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% ?; o9 J, f) |7 |
m_wndMenu.SetFocus();- L& t+ T i5 Z( [' w: h: {
}
( [: f' C; H. v; W2 u------------------------------------------------------------------------------------------------------------( {- c# K0 ?$ ~" F8 R
*************************
" ^. W7 d, D$ v& n) LWndField.h文件& Z+ b) M% T3 X
*************************9 f Z. v9 g' A( B: p
搜索:BOOL m_bReport;' C0 i3 ~# j/ a6 {
其后添加:, _" X8 k. r6 V6 `
CWndMenu m_wndMenu;) S4 s/ e V7 y" k, S$ l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
t* W4 v& _/ I0 _) l5 l8 j+ Z其后添加:
F; I) @/ J; w W8 Y1 Nvirtual void OnRButtonUp(UINT nFlags, CPoint point);1 C+ X9 F" T* Z7 C3 S1 X, e
+ X Y0 \8 M! \
+ W7 t! k [+ g |
|