|
|
源文件中_Interface文件夹下WndField.cpp文件) @( T# V" B/ N5 n$ p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 d2 p2 F% B7 k! W3 {- m5 {- A1 v
' J% e, Y' w, t$ P9 gstruct sItem6 P* d& q9 d0 ]- U+ r9 Y" [) m' C# z. l
{
2 u w' Q* H% o* p, l) iDWORD dwId;
* g) L6 b5 S" ]$ rDWORD dwKind2;6 u6 w5 E* ]% \2 n0 R; O- ]0 f
DWORD dwItemId;% Y3 y- O$ Y* t0 {+ _# s/ T% i* l1 o
BYTE nIndex;7 [. Q2 Q' K/ S' b: j% R
sItem(){) q- {- |. L8 G
dwId = dwKind2 = dwItemId = nIndex = 0;5 l: o6 y8 L: c% X- @
}' c0 k9 K! m) M4 j7 ^* S, F8 H
bool operator < (const sItem p2)
g$ P4 R" e Y) j- y( s7 U! U; B{
+ L: T/ ]+ n" B, i5 W( { if (dwKind2 == p2.dwKind2) x4 k/ I' n; b" M1 p
{" k* t! \! n- m, f4 L2 T
return dwItemId < p2.dwItemId;
3 F" Z( \& B0 s0 v5 y N# B! h$ { }else{1 C. T+ [" ]# R" K7 I) N- p
return dwKind2 < p2.dwKind2;
2 T d, O) t- j" ^2 z) w! Q+ O }
% e/ @7 g p |" x}/ Q" O5 H3 _0 y1 D1 n5 m% k+ @
};2 g1 ?9 d9 P- ]3 h' M# v" E$ }
class CInventorySort
7 F( g4 [2 c+ v* A1 l{4 r* T. B' \7 r) V1 j
public:2 S9 v# s- i3 k+ m s. ^
CInventorySort()4 {- A! b$ |! ?( L, e3 x! `
{- z! Q. L! l+ _6 s' L
m_dwPos = 0;
4 r0 [4 t' p# B' V' u" z3 @}( D& c5 z% G1 T4 Q" w: O( I, f
~CInventorySort(){}; v% A8 B, c6 {; c. z. a7 ?3 ]$ k: \3 ?
private:
z, z; B6 ^ EsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. Q6 R+ [7 I, Y g- k
DWORD m_dwPos;& [% R9 t5 ~" F
public:) m `0 L2 c; z& G; J1 V' e
void Add(BYTE nIndex)5 [* v( p2 V& X) O
{
) x# t: M: l8 v( r if (m_dwPos >= MAX_INVENTORY)
; U2 ^, D4 e/ _; O {$ q5 I* Y! L% r" G2 X+ y
return;
4 c" V- K' J8 ?3 S9 h }
' G/ p- K8 V) b7 X m_Item[m_dwPos].nIndex = nIndex;( T0 W1 X5 ^# t2 S! [( w9 \3 n
m_Item[m_dwPos].dwId = m_dwPos;7 |* r( ~% A$ y8 u$ A
m_dwPos++;
* }& L( s1 P# ]}
8 T" a; N4 e0 M" dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: Z0 e9 P# H9 w' z' P+ B6 ^{
# r9 l" L/ A8 u: o: s* i$ h for (int i=0;i<MAX_INVENTORY;i++)
( u; G' y: T# v- t" x9 Q {
' S0 F$ N% N, a8 H9 m4 k* c, D if (m_Item.dwId == dwId)
; k- t" x2 K5 G& K# v {
1 Y! O6 z& y5 {% W- g- h5 G return m_Item.nIndex;
' ?# [ A0 v3 \2 I+ N }
/ }( S& w( D s }
+ a4 L9 G. R2 |& R" I return 255;, C- `5 y1 G. z K; M l
}. _2 k/ [" n0 w1 E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 h# a& u+ X5 V6 [' {9 N
{3 m5 i2 O) J( V0 _/ e* n0 P; L6 G
BYTE nTmp = 0;
+ e# v! v4 R0 Z U% b bool bDest = false,bSrc = false;1 \( u' a) T8 [+ i
for (int i=0;i<MAX_INVENTORY;i++)( z9 ]% f' c# L! n9 g
{. D. K$ L8 l/ A2 ]6 b
if (dwSrcId == m_Item.dwId)
# u7 ^# Q4 O" t {. Z6 u: z. x$ M- W' Q
//id相等 则 改变对应的dest和src/ i( o4 J/ [. X" B- \9 ^- {+ s/ D3 m
nTmp = m_Item.nIndex;
" X' P# S* s2 V$ g0 W4 y2 T* K3 A2 F m_Item.nIndex = dest;
7 V0 X; T) z/ T0 R( q }
( [ V8 t1 p8 m }1 Z4 p( |) ]9 D% t: ^
//临时数据保存完毕,交换开始& ?/ u, {5 N+ _2 T, D7 ]
for (int i=0;i<MAX_INVENTORY;i++): e: b9 r( f* N! l5 t
{
: x* |6 R4 C0 s9 K' k if (dest == m_Item.nIndex)/ i( i$ e! J* h6 a+ f" Y* H. `
{: S7 H7 y/ v* S
//id相等 则 改变对应的dest和src
& \$ h8 }) }6 s2 V( ] m_Item.nIndex = nTmp;
" I) _) c8 M' G& j) z3 T }+ m1 v& T* t5 G$ Y; B
}4 ~* \' e8 F, J5 B, ^3 l
}, w9 x: Y/ c9 p B
};
# S9 [2 O! J& |' O- |: Z-------------------------------------------------------------------------
4 S/ b# j X5 p5 T; W; C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
S1 X" Y& x5 {, H8 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- H: ~+ a/ Y4 u) }+ b4 Z紧靠其上添加:; P1 J9 U, Q+ U
if( pWndBase == &m_wndMenu )2 s+ b8 ? u8 B* o0 a' i
{
. Y3 A% R5 R v7 S7 b. s+ w: j switch( nID )& m: l2 S# b4 G" @
{
' {9 j# w5 n! e" m7 e5 g, ?9 p case 2:6 x7 d! q. j' n- ]9 v6 D
{
2 S- H' l, j! J& I" @3 K //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 S% p+ N) [# c' P; ^' G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 I/ N+ B- S4 ~$ Y" b# s' ~1 P' }6 q
{
+ a% [9 T2 _: h+ K0 U+ n break;
# a/ F l1 n3 A4 c3 J6 p q- ]7 v }8 y: n6 L( G" g o' S# a8 k# k& x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: V, c/ K7 L+ y0 s3 V {) Q8 u& I; d n/ K# m3 s8 ^& \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! M# S- p# T0 N+ z if( !pItemElem )5 M4 O. H4 ~0 H9 M
continue;+ W+ a E% |% |
if(pItemElem->GetExtra() > 0)1 a' k+ s t$ d% e" _. b! [7 x
continue;/ {0 ]' O5 O/ o0 v: }$ Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 k8 V$ x/ J! }: I, C continue;
5 C1 y. t m# ~( |5 h5 @3 T if( g_pPlayer->IsUsing( pItemElem ) )/ ]+ n J/ R/ [ v
continue;
/ B- ?% N( |2 I if( pItemElem->IsUndestructable() == TRUE )* \& S; z; M: s+ x2 }7 G0 ?8 @8 j
{
2 g, Y; ?: R% G+ W! o: m, [ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ e& J9 @4 \% z continue;/ }& H) b+ W( v' k6 F& y9 n
}
" n( y; {( N- c8 c0 V+ v7 H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: t4 }( L3 H) e" L1 _4 L7 I# z }
- J. s- G( ?+ d break;' B* v. J# y: g9 c5 E" v7 Z
}% Q- x, D( ?: m! I
case 1:
/ W4 Q0 O/ @" y5 Z {: O! w1 _0 g1 K" G5 L
//整理背包3 ]4 A# n Q: E
//////////////////////////////////////////////////////////////////////////2 Q0 E8 \; S, {: W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% A# d1 ]$ V6 Q: y2 ~$ C //////////////////////////////////////////////////////////////////////////
. C" r' C- Q( d( Y W U( X //////////////////////////////////////////////////////////////////////////
( v6 T+ G* i( H3 a; P. R7 { CInventorySort* pInvSort = new CInventorySort;! s. `2 L3 ?9 ?# K2 c/ \; b) }" U
vector <sItem> vItem;( `, ` |8 R& L v; f( G- X
vItem.resize(MAX_INVENTORY);//初始化大小
, p3 Y$ E& J- k. B: c; Q" [! Q //////////////////////////////////////////////////////////////////////////
- s( D0 N+ ^, ` //填充数据6 q. [' O1 b( ?0 C) E! I9 m) P" k
for (int i=0;i<MAX_INVENTORY;i++)4 ^, y- V; L0 V# P0 I
{# m7 L2 ]2 c! [4 G$ @/ Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! c/ ]+ n+ l$ _ if (!pItemElem): C$ }/ f- {, ?( C# R# Z7 P
{! g( W$ y8 \( X, K
vItem.dwKind2 = 0xffffffff;" d$ I* f7 L9 \' o& W
vItem.dwItemId = 0xffffffff;
! E$ i$ u7 b7 ]4 y vItem.nIndex = i;4 I% U6 f1 Y. p- s& }9 ]7 q
}else {
! {- |' \& E& ], L ItemProp* pProp = pItemElem->GetProp();) b: o8 Q* g9 \& \& E& F
vItem.dwKind2 = pProp->dwItemKind2;, E( u% H7 v, B+ U8 @2 f
vItem.dwItemId = pItemElem->m_dwItemId;
. L/ U( |/ @- k# l' ?3 Q vItem.nIndex = i;6 s- C8 q- N' G- H- q
}
# \5 y. Q% ?7 C L6 g" z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 V1 A! A, [* U' L# i
}5 P% H) ]+ n/ C: G4 f( Q; K' q" @
//////////////////////////////////////////////////////////////////////////
# `8 F/ a1 Y7 L sort(vItem.begin(),vItem.end());//排序
0 W1 c: ]4 s, }, Z( a, \3 t //////////////////////////////////////////////////////////////////////////
9 Z: }& t& B3 k4 C' s //交换5 {: J4 p, j4 e) H* r# w& c' u, Z
for (size_t i=0;i<vItem.size();i++)& E; h+ O, b0 Z8 q: l
{
' ]% }4 o" D1 P2 l- k) R //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; C9 k# h3 t, Z7 ] pInvSort->Add(vItem.nIndex);
9 I# ]: p, h \* p }
; Q# N0 [+ {2 j BYTE nDestPos = 0;( W/ Z; g/ l% E) V% [+ P& }) x
for (int i=0;i<MAX_INVENTORY;i++)
: n* v. b6 @1 E7 Q& y. E: p- @ {9 f2 d/ q4 b$ H# O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 [% B! c1 G8 m; l) P0 _1 |6 y. f" g if (pItemElem)
, r2 a+ u' `7 [( C- K5 l {* H& L$ _" ~, s" X# Q
if (IsUsingItem(pItemElem)) u7 `6 v+ ~ E: E/ U3 G
{/ X3 D/ N9 i" B5 @ U5 d8 g+ o
//这个位置无法放; o2 H* v# Z2 H: u8 z Q+ G
nDestPos++;# P4 `" k7 l% _/ w1 a! z9 y
}/ o1 s. ], Y) c: x
}# \' t2 C. m5 F$ ?8 d
BYTE nSrc = pInvSort->GetItemSrc(i);" I' r. x% D- G
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- A$ Z6 N* ?. x
if (pItemElem) n0 O: s( L4 y7 _3 K1 M7 ]
{
9 e* g' l( p5 Q0 G+ @( T if (IsUsingItem(pItemElem))
5 k o% t9 j! ^& l {0 U) g, L; G& f' e1 E
//这个道具无法移动,跳过2 s+ a+ m/ w6 U( G
continue;: d, n1 F( k/ R# E3 _' ]* A
}. ~! Y) h% A: m7 s
}else{* W- E2 U' N- _: W3 u+ L
//空位置 不用动
0 b8 y* \/ X$ ] continue;
/ v3 Z6 }: T9 t7 i4 y" E+ s }& A# N) `# x' p) N
//////////////////////////////////////////////////////////////////////////1 w: i1 v# b6 s0 n3 W
//开始移动 X0 J: r# M, ]% p7 s
if (nSrc == nDestPos)
+ @: ]: \ |5 t' ^ R+ N {& S W- q* k3 `" G6 }+ X
//原地不动
6 c. @) j* w% q) [# Z nDestPos++;) E' G T/ ?5 Z9 s
continue;$ x; Y$ Z; u1 ~3 ^
}
5 i) I' i' j i5 U! G( \9 x pInvSort->MoveItem(i,nDestPos);4 @& @7 p' v8 @; S0 j5 p& f; B; [
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 F* ?) Y+ `( ?1 v* ^. m Sleep(5);7 B8 _1 Y$ `* T# J
//Error("移动 - %d->%d",nSrc,nDestPos);
`# U6 ]) |9 n# ~ nDestPos++;
0 F/ ~# K+ Y+ @# y4 d }' f @6 a7 @, l* c# q
//取第一个元素的信息
4 i7 u8 w; k$ R) [) l /*
# n& ~, X- c2 [ T& Q, d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' k5 S. Y! K6 Q+ X- y8 \ {
6 n+ C5 b [' y/ [. h Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' ` k( `. c% V" @5 X ?6 _& `$ v
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: M" Q+ y; f0 ~$ h4 `3 ?
}) s% b. R) }- Z; a
*/ U! U8 J+ R1 K( Z
//////////////////////////////////////////////////////////////////////////
$ T: [* W$ D3 D" F& M- N& u break;
- U1 B5 H& c) |7 M) v* |/ O }
7 f% k7 k( M8 _ }
3 b1 y; a7 ^# U: B* z$ c6 h}
* O* E* z1 D$ F% u' B. |4 l/ Wm_wndMenu.SetVisible(FALSE);
+ _* w4 S6 c) L9 D) f
+ v: l( i/ p: ?- ~1 v; G--------------------------------------------------------------------------------------------------------6 G( g& y1 S O0 k9 i! N7 t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! ?; T# n0 h+ B! g* `6 z8 D7 U' d$ g
{
! j9 a! I. x/ h; _3 t( ]BaseMouseCursor();) U3 Z U0 q- F- V
}
! ~& _1 C" ^7 H2 r8 `: p6 J在其下添加:
! d3 j, J3 `$ K( v, h8 ]: o: vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' r( T' X" b! r) j2 W/ Z( B
{3 Q2 v: X" x) K
m_wndMenu.DeleteAllMenu();3 e8 h3 r9 {6 z: x1 R- Q
m_wndMenu.CreateMenu(this);
3 u+ ]6 R* G8 x! Q) K6 C+ ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 T% C' S" M f1 t2 q* V/ }( m) @% A
8 z$ z' j7 f2 w ^2 J: Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 b3 B9 e/ T0 B0 X: P2 E
{
" g) V8 Y" ^9 B2 n9 _ //P以上级别才可以删除所有道具
# A8 h+ Y8 U2 K2 m; a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 }" {1 _9 g0 p& o; y
}
% M7 d' Q3 P* B* Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ k( u) O8 A3 @' t: pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( n, B* V8 f" }2 v: u+ V
m_wndMenu.SetFocus();
% p5 o- v; |# N/ {% s}+ Q% F% p2 Q1 O# F4 z' a: F6 n
------------------------------------------------------------------------------------------------------------
0 f! L+ g. a1 e, [. z8 h% w*************************6 Q+ V0 {8 ?, p; G R$ E
WndField.h文件
. b/ N7 r6 a H: l. g*************************
M0 t- G" w9 q& @8 ^; m搜索:BOOL m_bReport;) e. m- w8 p& @- I+ v% \/ `
其后添加:
0 t$ t8 c) J5 L9 Z# MCWndMenu m_wndMenu;: S+ ~; L5 L' j" N( ~$ c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. E& H0 ]( H; T. {
其后添加:
8 K, Z! ~" X8 evirtual void OnRButtonUp(UINT nFlags, CPoint point);
/ z6 X: ^6 ~' N
' J& S, [; V r; X/ c6 E
, r) x3 n, l5 P K$ E |
|