|
|
源文件中_Interface文件夹下WndField.cpp文件; ? q7 j2 ~# d4 k/ J1 r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 h& X: U2 t. X6 q9 W1 v4 m
% b% Y! I5 n) @* v6 cstruct sItem
- ]; |: t6 G7 R0 h- L5 n{
1 |4 e$ s- Q6 sDWORD dwId;
: F/ K( v3 }% k+ R1 bDWORD dwKind2;; B9 D3 W7 g. G) E4 @6 X
DWORD dwItemId;: E/ F2 i5 `; ?7 h' \
BYTE nIndex;9 M& P6 H& } p, P& W" |1 _
sItem(){1 h; F+ b5 l8 k7 \: @
dwId = dwKind2 = dwItemId = nIndex = 0;
3 ~4 u& i" z2 o; o! A8 Q7 k( x}
J$ ^; \- E4 y5 x% x3 Vbool operator < (const sItem p2)% Y# z/ m/ Q1 _3 Z5 o
{
3 Z d1 Q& Z* b/ t if (dwKind2 == p2.dwKind2)2 E, s0 Y# j9 r& {0 g" O
{
/ X/ _& Y4 l& {. n: t return dwItemId < p2.dwItemId;4 T: a& e, u u# l$ |! ~* V
}else{
& s& ]: ?: W# H/ i return dwKind2 < p2.dwKind2;
1 ?% T) a& D! o/ V }
3 A/ P" k* u: z+ v) G5 M. c6 Q( P}( ]4 t: ]8 h4 r/ J3 ^
};$ }: T5 x) L0 N1 `
class CInventorySort& m1 ^0 q# ?# e, H8 {
{1 H' T, L0 G# j& A C! L- z4 C
public:/ K" Y# T% y- h6 `; m+ C0 r9 z
CInventorySort()) O6 G. m3 f, e9 v
{
1 N$ Z0 a9 n% c1 b7 x! b& Y* s! j7 ]8 K m_dwPos = 0;
: \0 A- r/ n/ O9 E0 l: i0 I* E}
$ W/ v% ]: C# P~CInventorySort(){}) c5 e' F1 y8 p, o' @
private:
, h7 M% x' P5 _- M( U9 b# |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ V u1 {! k1 m& g& j# J7 h& G. |DWORD m_dwPos;, \% {' w0 B! Y; @, D
public:" F+ R( c+ o$ ?5 d, {0 F+ G
void Add(BYTE nIndex)- a; }1 R3 j$ D8 h/ g
{" }# [+ p! |+ ]
if (m_dwPos >= MAX_INVENTORY)7 B/ Q4 L( V/ `0 X0 e, \
{" y/ D& R% G( Z& s
return;
G. A0 B3 Y- V' O5 q }
. j" M4 J& d' R- j, C$ A m_Item[m_dwPos].nIndex = nIndex;
$ ?+ G9 n9 J% | m_Item[m_dwPos].dwId = m_dwPos;+ n/ _) O+ p9 ]" a( r: w5 K, X
m_dwPos++;
, T; ~ s& C$ D7 W4 ]}
' h/ [6 b+ T. l8 KBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 t+ p9 T( x2 J% t$ E' |8 x
{
3 x* d, f; Z ^- t. @ for (int i=0;i<MAX_INVENTORY;i++)
, b0 a5 d/ I7 f% c, q {; y6 F3 u/ D" |( Z
if (m_Item.dwId == dwId)# A: z+ x1 a: j3 s8 y6 `3 \) N
{5 ?/ b) \" ` ]5 @* q: J9 s6 @
return m_Item.nIndex;
, K1 s% R4 m6 V9 E: M+ J }4 }: w$ y0 @8 k
}
8 T- P0 B8 y9 b& b, g3 u1 |" H return 255;
1 I% G# Z9 M; O; V! |* ~1 @}& e6 _" v3 K& k. h. `+ _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" D5 ]' k* v' a" s* c6 X{
# q) H( s( q' X( Z; p7 B# U BYTE nTmp = 0;
, A: e" ^: _, k bool bDest = false,bSrc = false;8 }$ |2 z$ ^9 o7 w7 L
for (int i=0;i<MAX_INVENTORY;i++): F+ p, R. X7 v
{
" a Y7 f" m# I if (dwSrcId == m_Item.dwId)
9 F4 | W9 {4 T+ K# x+ y; [ {/ I/ V; l- r3 W$ |
//id相等 则 改变对应的dest和src
4 y$ {- A% F0 c6 [3 z nTmp = m_Item.nIndex;# C! d% f1 F& T' p. X+ _
m_Item.nIndex = dest;" S0 j1 s7 j" E S. y
}- B! A6 ^0 Y& L
}
8 c$ a+ B, C* ~, A //临时数据保存完毕,交换开始, z' _( P: P2 ?0 p9 M! p
for (int i=0;i<MAX_INVENTORY;i++)
% e9 s7 |; t+ W" S+ j& t! @5 [ { D4 G& t% n, ~
if (dest == m_Item.nIndex)2 |: u8 |: w I- A4 c
{
7 T8 @8 U2 h+ \5 X5 |1 [3 q) v: G //id相等 则 改变对应的dest和src
* o' S7 R9 u8 ^6 F' H m_Item.nIndex = nTmp;4 r* _' Z1 j$ \1 k @1 T6 e. u
}3 A$ {) p& f* g1 ]
}" W$ o- y f) [
}
4 Q2 X8 P6 R0 E8 v};
S6 q0 e0 @$ |0 [3 N+ S-------------------------------------------------------------------------5 r1 M; z$ _2 G% z5 w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 O# h% R" Y% G1 z! P2 ]2 e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* U/ n* |) _3 n) q
紧靠其上添加:) X3 ^! ~4 o7 k9 a
if( pWndBase == &m_wndMenu )- ^% C. S. h L4 y* D' }
{
2 S4 I7 W5 i6 O' }, \" C8 ]' C switch( nID )
$ [ s, v' k3 T2 ]/ T {5 b, N% o( q" a
case 2:
" ~: f$ n9 W" h" ^. k( ], M- M2 f0 S {! Q# }& n) s1 i5 m! f4 x4 p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 ^* _& B# V1 a4 J3 L6 B
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 I5 j/ p0 {; A9 {3 ^
{
5 \$ d4 A% B& ^; D break;$ s( [/ C/ T) [4 W" j
}. o- w2 T/ {; w4 G
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; w Y& G: A, k1 p! W) d5 k' r* l {% H3 D2 y& A6 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" a0 R! H. k& E: ~# |6 x6 ?9 i if( !pItemElem )) i1 `, g) J$ a
continue;
8 l6 I2 v2 F1 ?4 {9 P" G6 i if(pItemElem->GetExtra() > 0)
( W" t5 `4 K5 |8 V n5 j$ }, I continue;
, a" j# T7 m, F if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 }$ l: z1 G* }% w continue;
* T+ h' [; Q) r7 ] if( g_pPlayer->IsUsing( pItemElem ) )
! e- v ]1 J+ F/ }: ` continue;
0 V# m! |/ q# x2 w! e if( pItemElem->IsUndestructable() == TRUE )# E& E2 ^! w. |
{- m4 i' {8 e' l% o0 F2 U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" n; R+ Y8 ?/ _1 r" U$ k7 W
continue;, u) K! z; A1 C+ M5 R4 y/ J) t
}* c( p1 f- R1 h, x' @; O
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 v* P! Y* Y3 V }
8 P' @# U5 x- [ Z8 M) s8 o break;
: w: l. F$ A0 j' X }: h. o, S& [* M5 @% i( t, C
case 1:
" s0 E7 T S1 J7 X {
. b1 J9 U* d, P* T! D //整理背包
& f1 t6 K/ X, `7 G //////////////////////////////////////////////////////////////////////////8 Z9 n; {+ R" m7 R. v: W" |+ v. V
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* h% P4 R8 X4 X) i# l! K
//////////////////////////////////////////////////////////////////////////, Z" x9 Q2 b8 U- n
//////////////////////////////////////////////////////////////////////////" |5 F7 |, H# n/ r$ y2 z
CInventorySort* pInvSort = new CInventorySort;
. o# ]! g5 e& _! I vector <sItem> vItem;
6 v' g' H7 f. U0 K; _. }5 z8 m7 v vItem.resize(MAX_INVENTORY);//初始化大小
* [, \+ O) Q5 j0 k! \8 b //////////////////////////////////////////////////////////////////////////9 t7 F: T! a9 Y. C
//填充数据7 \! \" F& [* | E
for (int i=0;i<MAX_INVENTORY;i++)/ E. g: M2 L3 q. b0 E
{
+ x$ T: X6 S& j. R: W) d9 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ k: c' @" M4 t- n1 ?! ^) n if (!pItemElem)
0 Z R- B& |* }" }( f! \! L+ {0 O2 k6 o {
. e8 J# h0 s6 V vItem.dwKind2 = 0xffffffff;1 Q8 h, V! B( d, O' y6 m( n" V
vItem.dwItemId = 0xffffffff;
7 ~& |! x7 U- x+ a vItem.nIndex = i;3 H6 ?6 l/ y b' n
}else {$ d+ A0 \2 R2 K- |- n
ItemProp* pProp = pItemElem->GetProp();
9 T) \. W3 i* {8 w' J vItem.dwKind2 = pProp->dwItemKind2;
- H X5 v# ~5 ]0 C2 C. B vItem.dwItemId = pItemElem->m_dwItemId;# D% h6 N/ n2 j0 G* h. r& b
vItem.nIndex = i;
) M0 F; i4 u( i }$ J$ Q. L# M4 u' e5 ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 \2 f# E+ V' _5 H A
}
1 V; g9 E8 a" _; j9 z, I$ h /////////////////////////////////////////////////////////////////////////// H6 m- j* {0 u$ G7 q2 u
sort(vItem.begin(),vItem.end());//排序% a B0 }* S+ I+ f
//////////////////////////////////////////////////////////////////////////
4 h* W+ A4 z# X( Z0 \ //交换
( u* f/ w% i, z" F% K! _ for (size_t i=0;i<vItem.size();i++)
8 f1 R* R5 I: X# i/ P+ a; G {
7 i& C' y; |9 d) I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, s6 s+ [; V7 w pInvSort->Add(vItem.nIndex);3 z! X* O* o1 }5 d, M
}' o% s: b% }* F) _0 P2 q* E$ i2 l* v
BYTE nDestPos = 0;
: q' W! s2 ^3 \* \8 T( ^. H for (int i=0;i<MAX_INVENTORY;i++) s( Q5 U4 G& a% P4 o2 r' i: W% y
{
, j! W# Y. u5 l1 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& z2 C/ P( N0 s, S$ N, f
if (pItemElem)! v+ `- h) V' ^% @
{2 e+ d" a8 J6 u- G% c
if (IsUsingItem(pItemElem))- \0 M; F, I- ]. n/ Q
{
+ C; M9 `1 q/ H) R, m8 W //这个位置无法放0 \' j+ M4 {$ p4 r/ o: V5 H9 X
nDestPos++;
$ i: ~, g; r1 `4 ] }' U. B4 g0 q" F# ]1 C& x
}
" ^$ M8 i( K9 s! j$ |$ U9 k BYTE nSrc = pInvSort->GetItemSrc(i);
2 y2 k1 p ^* c; r* n, T2 _: X9 s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& h8 i i# _+ k2 T0 \
if (pItemElem), |" X3 R7 L4 N0 `( Z
{: x- H. U- D. O a
if (IsUsingItem(pItemElem))
4 ]0 U, f- k. X2 t, `9 K {
. Z& u3 |7 {% s, J //这个道具无法移动,跳过& x& ~2 B `, A4 A4 G
continue;7 r& n% F1 ~$ B: e
}, H2 B/ J# F/ @
}else{. m6 t# ~! [* L X8 B
//空位置 不用动
5 h0 D+ k7 h8 g4 V# w9 Q! } continue;8 @# z7 Y, K3 X9 ]6 ^) z
}7 @: r% l4 ` N. h$ G
//////////////////////////////////////////////////////////////////////////
7 {) P, L/ Z3 K! e //开始移动
8 t0 ~! A) U4 a- M* }9 w if (nSrc == nDestPos)+ r5 {! v, ] f$ y3 K, @6 m
{
% [, f- G/ c0 _+ X7 J1 P/ W. E //原地不动% K- M6 z3 w" H/ a5 q& \% V
nDestPos++;
1 o: f2 p9 j% W6 N# r continue;4 s) S! P; d8 t* s
}
3 p8 P* n% ]' y4 ] pInvSort->MoveItem(i,nDestPos);+ T. ~8 V9 w9 m A5 `: J$ P9 |5 f6 e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 C% I0 r* ]% Y% ?
Sleep(5);5 ^4 x" ?5 _7 y6 m9 V
//Error("移动 - %d->%d",nSrc,nDestPos);: D% i( V) {0 S" I5 J
nDestPos++;, ?1 N' E* h: @7 T
} V& ^& w- n$ B& ~) I2 b% i, o
//取第一个元素的信息
( h# M- ^; W7 C* y. e: _- {. {4 T: { /*7 c, w) D$ r Z1 m1 l" |& ]: x
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): r4 S# S, i4 z6 |
{
: e" y9 K' K/ o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ `' q/ E( ^+ K( f
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ t+ M/ G' N; f7 ?% W7 L9 `4 V/ o! G }/ C H; A: y; g
*/' N" Y# d7 _& O! j1 _8 n6 q) s. v
//////////////////////////////////////////////////////////////////////////+ I9 k2 Y$ r9 m4 Z- } z
break;
5 d- {" \9 [9 [9 H8 ?8 [2 L6 s, n$ }9 T }
& ?0 m7 e P9 Y7 n; \" l }
9 Z/ A9 J! P9 K) B$ O}6 U- a f! x4 t1 h
m_wndMenu.SetVisible(FALSE);' v) H9 p& P. | `
$ R) [4 u8 X1 `$ a. k--------------------------------------------------------------------------------------------------------2 H$ G8 c' D' a8 q. `$ Q0 }$ r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* J5 V+ Y# d) C d1 m{
+ M5 S) q4 F' ]4 [$ cBaseMouseCursor();
& u" G ]2 f6 h2 z& g: o, }# P} s0 X8 e. ]% P5 ^' e* g0 q
在其下添加:
l5 a9 b# Q0 G+ T, Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. O$ a! ], K; F& e K+ U* r{
3 N# D2 [. W" n% n# \9 [m_wndMenu.DeleteAllMenu();! L( t% Q$ m' u# [
m_wndMenu.CreateMenu(this);
% ?) A" H+ m; Y/ F: f9 X( g! @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ C# J& M# i( R. v* ]/ c4 h2 ]$ [5 B* ^1 q7 Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- S. [9 P' S# J8 t) c
{
& f* b2 g) m }' C% t9 ] //P以上级别才可以删除所有道具$ X B- V# D; `7 v
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 T2 `# A+ M; m$ d" q8 y* I
}
# ~- `+ R3 f+ j* H5 `0 c8 Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ I% R& b0 q$ V1 b: n7 o, Y/ r
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 F! O w! N" _) e5 _2 X7 im_wndMenu.SetFocus();
# d( x, U6 J* D7 \, r+ @}* E/ u l* n; ?9 \) t4 \6 c
------------------------------------------------------------------------------------------------------------# A4 J- m# t0 s6 h0 @! M+ p# R
*************************
, k: U, ^; N5 {WndField.h文件- X( `; |, L7 z0 y" x+ I# L
*************************, A _, a5 y! |6 w1 P+ J! c
搜索:BOOL m_bReport;5 u/ H, f: G$ r) |4 e7 }
其后添加:
" W1 M% g+ o: `9 a5 |CWndMenu m_wndMenu;5 D( q3 g* P2 G) V: O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ V; D, K! V+ _! F3 F其后添加:/ a/ r, o U% R: t4 C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) R& Z9 w9 n( K0 N9 E- H
' ~+ v! A7 {' X' s4 h2 u: c- F# P% C8 [- Q* z
|
|