|
|
源文件中_Interface文件夹下WndField.cpp文件' d f. I' R8 h4 ^6 y6 p% I
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) R: s7 ^) @6 u3 D9 A5 u$ M! Y) Z
$ C* R2 Y g$ }/ ~/ Q; estruct sItem+ D/ O/ J/ ~) c9 G* N0 i: q' a
{. i5 W: f! `/ b, }# A6 L
DWORD dwId;
' q3 r& ]6 {4 }) n- t* T' |DWORD dwKind2;" G8 d2 w* v' V0 _! D4 Q
DWORD dwItemId;
% A* B6 K% ^3 G+ |" q4 WBYTE nIndex;5 A5 k3 H; W1 ^
sItem(){ U4 ~9 m* l4 a9 M2 E3 A
dwId = dwKind2 = dwItemId = nIndex = 0;
' T4 g5 P* U" C& n}
8 r' {# u/ i0 {# f+ ubool operator < (const sItem p2)
% c$ q& u2 `( p, L{1 k" f: a7 `( h* N4 E
if (dwKind2 == p2.dwKind2)
6 X. ]9 E: c/ M. W: {# M( ? {
! b1 K# q6 c0 ]6 F7 f1 ~- P* W return dwItemId < p2.dwItemId;
/ I d/ `5 R2 G. f5 |3 X8 k/ M }else{
- Z3 }/ e; d) W! L8 s& U2 B return dwKind2 < p2.dwKind2;) ^) m" h; J! ?3 q" a h
}+ k- r1 n: _7 S; A2 p( H& ~
}* d8 W* k" @( {3 h1 F0 A6 ~
};% h$ O/ K) M2 _* w
class CInventorySort
; s' |! }4 }5 E3 o0 `7 O8 L S7 {" E! k{
. _3 a( q1 }" r* E1 [9 Y7 cpublic:
1 _9 g% N: ^( Z1 f: H; E3 Z! ZCInventorySort()
' T7 ~3 [2 n, w; R$ h( \{# @3 R: A& b; b2 E8 J! G
m_dwPos = 0;
+ y( T& P; O2 s( x' d) Q. }/ N}3 L9 D9 f. _ a
~CInventorySort(){}
0 f2 M0 D8 L" K: v Y6 V& \. `6 Cprivate:+ _0 p4 D$ \1 R+ H7 G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" j1 y( V/ j2 s% ^DWORD m_dwPos;
5 \$ Z( X; H1 B5 \public:
( T8 r9 z4 c/ V- h( _void Add(BYTE nIndex)7 [. J# f: T( R& A
{& W& Z" N% a& U( i! z
if (m_dwPos >= MAX_INVENTORY)1 U6 O" h( b8 F8 @
{
2 u7 l) U6 E8 n4 J return;
- _+ P; M9 d/ w& T5 W }
9 J; M+ ]. F- T m_Item[m_dwPos].nIndex = nIndex;, I" \/ S+ R! ?
m_Item[m_dwPos].dwId = m_dwPos;% X5 d1 A- ?5 J$ P2 g% M4 k' c$ e3 z( U
m_dwPos++;
; D+ `* {+ T/ Z F4 K9 d}% @, F7 H6 D! L+ p6 F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" ^3 {% E' p/ b. H+ s7 ~{
. z `& S& q* [+ E9 H. @' H, r for (int i=0;i<MAX_INVENTORY;i++)5 E1 x- e7 O! |- R
{+ T8 e) F) u( O3 x& Y9 y
if (m_Item.dwId == dwId)+ l" p2 \$ S% m! r! N7 E
{
- [; i8 p5 J5 M/ b% u return m_Item.nIndex;6 G( K/ x9 @0 {
}
6 j9 ]! d3 }% {1 L- ~ }
; b9 I, |) F( f. _5 {+ W3 c return 255;8 t1 m' @( \/ A9 F7 i" s
}
, w! b# h' l8 W" `- m( T9 Z% avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, t% l# F/ k8 k5 Q{+ a* [& _3 d2 R& V5 A
BYTE nTmp = 0;
. F. D# S( O* d, E% d bool bDest = false,bSrc = false;
4 n* w$ O! ?' y0 u. l for (int i=0;i<MAX_INVENTORY;i++)
8 z+ e& z& d1 X: j" ?, @1 o {
% P# Z# v! |2 { if (dwSrcId == m_Item.dwId)
- B. M6 M- P0 B! W v- K {1 S4 z' C8 F: x- S% m! g `% P+ z
//id相等 则 改变对应的dest和src
5 {' M/ ?% K# d0 ]1 F nTmp = m_Item.nIndex;
6 b3 O J% U! \+ @8 @8 {& Z1 x m_Item.nIndex = dest;
5 |% w; A* ?& S# n# L }
+ t& m' w4 W6 t3 Y }
2 R% U+ N" A B3 G5 O //临时数据保存完毕,交换开始
3 D3 T6 V/ K5 f. ] for (int i=0;i<MAX_INVENTORY;i++)
r U/ i7 H1 w3 c4 U- H: A4 B {
4 j8 ?1 D' l: X4 q$ ~( J: W if (dest == m_Item.nIndex)
) U8 k( a; t1 @& G {
$ f: R1 J1 _) U //id相等 则 改变对应的dest和src
1 D* p; r6 @1 k4 q/ T0 m m_Item.nIndex = nTmp;
- H% v5 ~: l2 P# Q; t: B }9 q& [3 Q1 p6 w/ H% V
}8 b- t# V# E; P- N+ j
}+ }% `3 }& }6 N8 Y. `& h$ o; ? ~/ u
};
. Y' M1 m3 _6 Y0 T& ]8 X) b-------------------------------------------------------------------------5 \4 j# \. I' x! J! f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 Y" M- o, t* |9 d, r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" N+ D3 I" B+ h( ?& ]
紧靠其上添加:
& s/ l: \" A' p! k: ?) rif( pWndBase == &m_wndMenu )% S8 s% `, P+ v4 ?
{9 i& b( R( v# b/ V4 J
switch( nID )6 D f1 H6 Q) |' h# o- e; F
{* |4 b& g' U3 z+ I8 }' [
case 2:
* @" Y3 o6 _2 S8 l9 C; F0 v, h i {5 q H' ~$ T. Z- q( C* K( t
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- {3 D+ q& [) h/ b7 D$ `
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% u: q, ~; _! [, Q) ^
{
* S& A7 M w e2 k' [ V: W4 V break;
7 q. r& R, z% A }# C0 I1 r- v3 a
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): H. b* {, l( I8 V9 R0 N% i
{
0 C: Y! b2 E6 P/ O V' B( a6 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- L) i& \- K: `! c/ a if( !pItemElem )
' g; [% z0 m7 Q0 M continue;
% G1 M4 h+ J y1 I/ s if(pItemElem->GetExtra() > 0)
& { m3 H+ o0 L+ j- P K continue;
" l3 U! p+ P: r8 {. i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# `3 r7 ^0 T+ z: }0 E continue;/ r, O: S; H0 A
if( g_pPlayer->IsUsing( pItemElem ) )+ D5 U& W# t( z6 t7 j* s1 ^8 a
continue;+ ^3 Q$ L z7 V F
if( pItemElem->IsUndestructable() == TRUE )
0 X4 @" C) b6 | {
8 { z5 w' F2 H- f8 u2 B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
^! L4 p# b# v7 I1 r4 h: @ continue;
2 Q6 \; f w+ }8 n S: c Z! K: x! N M }4 E4 a6 C9 h, q+ x% h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% L+ f1 [$ u( p% F I
}5 Z- \" `% q6 j9 P
break;- `' |, z9 I* {# s9 ~; q
}
1 ^2 ]: u1 D3 i9 X% s case 1:$ M% X' u& s2 V' i! v2 R( n6 ]+ G( ]
{
. n/ C( V0 O7 Q" q% t //整理背包) [ l _. Z: ~& h9 d, Q1 k
//////////////////////////////////////////////////////////////////////////7 Z4 B6 c* Z! i2 V, H+ I* k
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 v. o/ R# ]0 G1 p
//////////////////////////////////////////////////////////////////////////
1 k7 D0 g* S4 W: Q+ W! r1 V //////////////////////////////////////////////////////////////////////////
1 ~- A6 `7 B0 J, v7 H CInventorySort* pInvSort = new CInventorySort;! Z3 M4 }" ~& U$ [) y* k
vector <sItem> vItem;! f6 e! g# U4 X: G
vItem.resize(MAX_INVENTORY);//初始化大小 ~3 a' Q0 @# `2 }. X0 Q
//////////////////////////////////////////////////////////////////////////
3 E8 h# Q- K: X //填充数据- M* I% q! h! z- c$ v, U- ?- f4 o
for (int i=0;i<MAX_INVENTORY;i++)
1 M" w7 A) x6 N% E+ U, Z {3 d- ]3 M) P9 P4 P/ [. O: ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; l Z6 l. M, z6 g if (!pItemElem)
# a* c6 v* Q+ \7 f1 }( N1 T" c {
$ v% h3 W$ J, Y$ g! K u; p vItem.dwKind2 = 0xffffffff;3 I# A' \/ I1 h/ l' |
vItem.dwItemId = 0xffffffff;9 ?. q2 F* U7 M
vItem.nIndex = i;7 V0 l! U" J$ I- _$ L, ~' j6 Y
}else {
! ]+ s5 B4 U5 } ItemProp* pProp = pItemElem->GetProp();3 K4 B0 }' l8 j
vItem.dwKind2 = pProp->dwItemKind2;
5 v" F4 z' N* c a vItem.dwItemId = pItemElem->m_dwItemId;/ ]# N1 w! M8 A' v# m: ^
vItem.nIndex = i;
$ @; [& Z D9 Z( F/ k7 s1 o' z* p }: I7 U! a- z# r5 J- P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 a: L% f3 K$ g% Q" _ }: ~0 A# |5 K& Z( n7 F: S
//////////////////////////////////////////////////////////////////////////' W1 F/ Q* s: I5 ^% G
sort(vItem.begin(),vItem.end());//排序: C7 ^: I( e8 m+ t
//////////////////////////////////////////////////////////////////////////; h, R9 r: P, Y2 _
//交换9 }# q2 t' T' b; O5 [
for (size_t i=0;i<vItem.size();i++)
" ?6 x/ Z' ]# h {8 W# B! v3 g5 B. K" c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 e3 I5 z) y& d8 ?: s+ w8 N8 R6 \
pInvSort->Add(vItem.nIndex);
) K9 U) `* h9 ` |/ Q- L& \ }4 s# A- Q# Z: i# T A
BYTE nDestPos = 0;
3 C0 [% f* I1 W4 R for (int i=0;i<MAX_INVENTORY;i++)6 j; Z. b1 H* L" `* V6 y
{+ K" N7 Q! s; d8 G& m: V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; g- V( s( a' V. S if (pItemElem). w k g- H! b/ f- m. \1 U- v
{' ^% X, u' k) M; Q- j
if (IsUsingItem(pItemElem))
$ q& y! c* j! @7 ?! f {
3 D" O/ `* W+ x" N" H& [ //这个位置无法放
) e3 I! F5 h/ f nDestPos++;
! g2 T8 m. r; V/ { C4 v" `9 k0 Y: \ }$ K+ P$ p; E+ a
}0 V' {1 s; L+ J/ P- X* s; u
BYTE nSrc = pInvSort->GetItemSrc(i);
; {& f% P) U& V9 q: n. u2 A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" E& f" b# t1 \- @5 x
if (pItemElem)
( o J- f8 y) G$ h" f {
; k) O( { A2 k' c- T1 h4 e' Z' b/ E* _ if (IsUsingItem(pItemElem))
$ I* P8 O) ^' i8 a {
4 \- i- a* c) m/ Q //这个道具无法移动,跳过# M" ?8 Y% X& J6 v
continue;
6 x D& U& `; j, P: Q6 W [: u }9 u; H" k6 i2 l
}else{1 M% U4 m4 ]5 O( C* i' z1 d
//空位置 不用动
& t$ z J8 G5 a5 }5 W. y+ H. o continue;
" v R# t6 L. b }$ _8 f! m z+ u# s4 ` A
//////////////////////////////////////////////////////////////////////////
# z$ ^4 D: c) l( K7 B7 T- d" V$ W //开始移动' T. F* n- [, n: T5 [9 q
if (nSrc == nDestPos)
% k8 B4 J8 L8 Z7 E# I8 [ {
& Y, y0 Y( V0 l W6 N& o; u: ^( w //原地不动
& [: }% X/ e) K R( r! Y nDestPos++;
* \% N% \" u5 W4 V f% H continue;
k5 {" q. G+ B }
+ b# ^* c9 }. m pInvSort->MoveItem(i,nDestPos);
1 y3 S$ y3 v/ N+ Y- w- \9 s9 z g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 H2 F y& G% i4 h( w) m+ q
Sleep(5);
) q' d; Z; T4 ?( ~. p/ i) q //Error("移动 - %d->%d",nSrc,nDestPos);1 m* {% k W4 N% m b' n P
nDestPos++;) i8 c* \" d( T' D
}! w; X( W" X& `# Q5 Q9 Z. Y! o
//取第一个元素的信息5 O% D1 R' _( K) J! S& h( L
/*$ |7 G$ A3 [: V% A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 ~3 z n' n3 K" e {
) }' T) a& @5 ?! B+ _: ] q ^0 S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: a( A9 y Z+ G! S4 g9 ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 @9 ?( V' k- |0 Y, h
}- G+ _$ s; ?. R
*/
. k( y5 p' L% J/ S# `$ s //////////////////////////////////////////////////////////////////////////
3 n$ O" u/ [$ [! l: f/ e; M break;( N" N* V) W! w! v' C1 {$ X# d
}: R( x2 U* l# d; T; g# E
} * G3 }8 l- ~8 U% s! W; l5 l+ k) ]
}
, w- N" |3 p0 x6 } X" ~m_wndMenu.SetVisible(FALSE);
4 U- T* X" M* m% @- Z; |" M
v1 r# \7 T4 K# |/ a% M-------------------------------------------------------------------------------------------------------- W* `0 `' x$ i/ \$ r) d2 c( M" f) O: V
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 y, h, _* Y( R9 q% g1 U
{
' G* @+ u q4 ]BaseMouseCursor();3 a& m: Y3 ~, E
}* |/ Y" `. C% I1 `6 L' C8 D( r
在其下添加:: L/ F1 W9 V0 r8 }2 c* B, c$ G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: @- E- {6 O2 ?# ^{
; T2 z, m! [+ ^( lm_wndMenu.DeleteAllMenu();% u6 Y. S% M. N" b
m_wndMenu.CreateMenu(this);
% q Y+ P k, N7 T0 Y1 H+ K! im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% k& K5 H$ H; o6 |4 V" O* I; B: x
9 C) v: e4 K5 G' r0 K/ J" Pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' j6 E" H" H6 q9 A# r' I# H
{" @, h1 X, M4 S
//P以上级别才可以删除所有道具9 ^2 B; i) `) m7 p9 ] Y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& x$ j) }0 C' C/ r8 j
}
- g& z' i7 S- K* y5 Y4 qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: L$ ]' t" |2 s q$ Sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ g, ~! C0 w; `7 W" s/ J F7 H" _m_wndMenu.SetFocus();9 b# E" d! ?/ A& ~5 n* _ m! J
}
& K. W$ E6 ~. H------------------------------------------------------------------------------------------------------------- _* _8 g' K2 S4 g u9 t
*************************
, ?% i7 T% W! ]; P6 ^WndField.h文件3 a( s7 w% [9 U/ k
*************************
1 x5 Q. j3 r$ |( w搜索:BOOL m_bReport; c- c: U! R) ?/ t6 B% j+ g
其后添加:( D( {5 ~) h9 j) C! G; F. h
CWndMenu m_wndMenu;, A) w" Q+ d: L- P B$ F3 B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# X3 s' h2 b! ]4 V其后添加:
: a" a1 G# w/ V. R; h+ y% Y' e- `! L0 Hvirtual void OnRButtonUp(UINT nFlags, CPoint point);. Q0 g0 {+ d& Q
P$ ^ V( l; s. E
% X0 o& I8 \9 T) a
|
|