|
|
源文件中_Interface文件夹下WndField.cpp文件& M; h; L# `4 ?1 k" s! c7 f G( g# c( Z/ W
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* ]2 v; Z. z- D, Q6 ]: ?
6 p/ Y/ T1 w. I, @ b1 n) F8 z& `
struct sItem
6 e/ ?: V2 s( ]3 v, [6 v( e{# {$ j9 d! l: Y0 X4 S
DWORD dwId;
. J3 y; E0 |" y' X9 s6 n ~. dDWORD dwKind2;$ _& [+ P# x( v1 {' r& I) }! c o
DWORD dwItemId;
) E) p W. o( c' ]& _& JBYTE nIndex;
5 _2 S# v8 e$ Q [/ r! ~0 {sItem(){& P8 S0 {( O; }. c& ?
dwId = dwKind2 = dwItemId = nIndex = 0;) T5 E% A% G' j+ D
}
( p1 p! X7 h* F, e2 `bool operator < (const sItem p2)4 [6 l* y1 u7 B$ V5 ?
{; g7 ^: @4 w. A! M( c+ S% `
if (dwKind2 == p2.dwKind2)& Z/ i* L3 d G5 O. Z6 d
{1 O" p- j% Q% x8 O' }: D
return dwItemId < p2.dwItemId;% _5 H0 N5 z3 c- u
}else{
! x4 }: P, y+ n return dwKind2 < p2.dwKind2;& x2 d( f! L" N
}
% j' _& y$ g/ _) o) w$ m5 S; N5 g}
. O. }$ z5 r" E" l& c2 X: d7 Q};
* S4 s6 \" M; Q4 i0 B! Aclass CInventorySort
/ E" }+ v: f, _) c$ L{" u4 U* t4 K$ v
public:
{. Q! c* b2 Z( `" ^9 S' zCInventorySort()
# c7 q- W2 Q/ G4 i+ i, x+ U{. W0 B: x0 I5 ]- g1 `% c. r3 |
m_dwPos = 0;* }8 D- d& `# n7 ?5 D% \
}
5 q% x" U: g% r* ?+ \3 P1 u~CInventorySort(){}
3 b& q8 a8 Q# ^! s0 dprivate:
$ `1 @8 S3 L e: qsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 F. d- ^, ]" ~, v% ?( Y7 i: WDWORD m_dwPos;
1 T- D! h( _3 I; t) jpublic:9 g1 y% Y+ v A
void Add(BYTE nIndex)
& S( _" g1 O& Q# U! N{
! K) {; D* _7 ^3 a$ C4 h( m if (m_dwPos >= MAX_INVENTORY)4 k" l' G6 N. E5 B. f! w2 P5 g1 H
{
8 G0 l0 P, Y% s; U# B return;( Z5 Z# z' _$ C r/ d4 q: L
}
( v# C! B1 i9 K& j2 v- |' S1 M m_Item[m_dwPos].nIndex = nIndex;
# b& M2 V* n$ H3 N m_Item[m_dwPos].dwId = m_dwPos;
: p/ c$ S3 l' s- J) J m_dwPos++;: {# |6 F1 W. K/ ~4 E
}. `* S" o8 F& x( @) q m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
N2 v9 B/ V$ H# Y{7 e" x; A5 R% D7 P) z* r
for (int i=0;i<MAX_INVENTORY;i++)2 @- I) E' ^+ ^4 z: Z
{9 h; ]) d/ J5 \) i- \
if (m_Item.dwId == dwId)7 h% j& I( V9 F; j
{$ v, b8 a% y- I9 W
return m_Item.nIndex;) R' g9 |/ b8 Q( u2 E, j& u
}
( V! l. x7 e8 W" i7 y4 r }
' Q: Z2 |5 g* |& A: G; D2 w$ k return 255;
" _) k. n3 S7 p( t2 W# v}5 ~. P0 Q- C M/ ?, S& k7 E; K, t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
]( u; k0 {) m# a# R( y; _: x{" ]% B6 ?% }% ?. e( ~2 i1 H7 s
BYTE nTmp = 0;
2 S; ]( i Y0 h& a; J bool bDest = false,bSrc = false;
2 B* D/ B& s1 q for (int i=0;i<MAX_INVENTORY;i++)
; M$ h) W# j q( @/ Y Q' ?: y: { {( j% }3 M& ]# @: d& w# L: f
if (dwSrcId == m_Item.dwId)9 K! x/ i& @9 s' a% V* u
{3 W- t9 x$ @2 U P0 |( G% g
//id相等 则 改变对应的dest和src
% n8 z o" t9 I3 j5 `9 c: i6 X nTmp = m_Item.nIndex;- ^6 X: }- i+ }! z
m_Item.nIndex = dest;/ A! R7 v& `3 N+ o5 p8 J# e
}
( V1 t! T. H; \ G }3 H3 X4 ?9 g2 z1 V5 ?
//临时数据保存完毕,交换开始
* G, W4 \5 u. n. ~& ], A for (int i=0;i<MAX_INVENTORY;i++)
( P! @1 J/ Y7 i9 p( Y, O {
0 d6 m7 X/ Q& E& C1 R3 Z if (dest == m_Item.nIndex)
& V6 f" b8 M6 B: ?# T- o% d {
9 T* ? l/ z6 b3 r8 z; Y1 { //id相等 则 改变对应的dest和src, o3 e, F0 g7 E2 r
m_Item.nIndex = nTmp;( d/ ~$ l5 ]9 G- j- U7 c+ D7 f
}
" h3 I+ N6 Q5 g5 _* k }$ ]. f! l- p* b/ U5 j; c, F
}: r+ j8 c6 |5 q
};
0 @; z3 ]# R' t+ @1 T( G-------------------------------------------------------------------------7 I2 \7 V# J% F5 D C1 _% E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' D# _, Y$ E" s. P" i( X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ k2 I, O! |6 v( i# y
紧靠其上添加:: D) w& Z; p8 W6 S k, ?; i) A; h
if( pWndBase == &m_wndMenu )9 n* ], `+ c9 {( V( `
{
7 ]8 g) n: d7 c, ]9 L- B+ E" e switch( nID )! D+ ~5 s" v; d+ ^) j
{
% h w# Y' M* h6 _" R. E case 2:. Z+ v9 O e0 o9 U9 ?, e) p
{
* u/ z9 Q: A6 v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" p4 K, }! Q3 ?5 Q: X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 Y0 i& r* h6 B& M. t {1 U4 T6 r! ~7 }/ G
break;9 k u/ T+ Q) D' i' v, N9 L9 D7 E
}8 q. Y8 Z* F$ V. E" ?4 |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' |7 H/ {- ?) e# d, ]: u {! I, V' @; \$ g5 G7 h) f6 f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" z) w& h: `" U! K if( !pItemElem )( }/ ?# q- Q, s& S* L; t1 F
continue;" a) L* d; d& r9 y( G+ f9 X% q- A
if(pItemElem->GetExtra() > 0)
" t5 [8 D8 |6 ^7 R- l continue;; V2 u8 V2 A5 e" l! x
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 u2 C, G3 n( N5 j continue;5 F* ^( X, i; M5 e
if( g_pPlayer->IsUsing( pItemElem ) )
3 v9 Y0 ]4 H; o% s$ b. ~2 {5 _ continue;1 I: u5 L! t7 ]- T' {0 V
if( pItemElem->IsUndestructable() == TRUE )
. t- X2 K5 R: @1 T5 F {
; ?2 n m0 M2 j+ {" H& ~" T g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 f- j+ Z4 K, ]: d
continue;
7 @5 m; X% }9 K3 v" w8 v% R }
0 R9 l) |& T+ b- \) d. R8 [. f2 G% [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% F) ~9 H8 q& d% D T: v }6 Y/ m% D; Q3 _% j# L
break;6 h9 f1 \, x* C/ S( N9 `
}
8 v1 D- B' m/ J+ j case 1:# D6 ]1 O8 x6 D( m9 W6 U' F
{" |# r m& t( t# p8 x4 U/ X0 p6 w
//整理背包
0 I4 [7 Z" p- E% `/ f2 @1 W$ n //////////////////////////////////////////////////////////////////////////
; l# v0 B* \4 L6 |: w' ]7 i //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ ]/ N! k0 i* W4 p! `; B //////////////////////////////////////////////////////////////////////////+ w, }% q! b ^( F9 O f
//////////////////////////////////////////////////////////////////////////" D. {5 _" Q% ?. C2 O0 O
CInventorySort* pInvSort = new CInventorySort;
; B& b) [) m7 l6 \% m vector <sItem> vItem;
3 }- x, t7 p0 k2 e2 ^2 _% T" c" u vItem.resize(MAX_INVENTORY);//初始化大小
5 i0 G% _/ l0 i4 c: x& c1 X" ^ //////////////////////////////////////////////////////////////////////////
, y9 ?$ h* {4 {& ~' g" F //填充数据
6 X' S' W( X! a2 C5 U; G for (int i=0;i<MAX_INVENTORY;i++)
( Q1 F1 l" Y8 f, K) E' d9 Z# k {4 X0 r" S9 l: _: _; ~. U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& U p% Y8 N$ n8 L8 c8 p& o/ R if (!pItemElem)
, I2 ~- {* H" W2 k0 _# ] {
/ e' X) h5 Y. o1 _ vItem.dwKind2 = 0xffffffff;
, r1 K) f* J9 j( D# j- m vItem.dwItemId = 0xffffffff;7 z& [( l; y4 @; H* X6 t
vItem.nIndex = i;
/ c2 U6 b" n5 B* D2 B' A. L }else {
% e: u$ K' c* u' I* L. K4 V7 n ItemProp* pProp = pItemElem->GetProp();# e* V! t) r! ^! J m3 p4 W" F) |
vItem.dwKind2 = pProp->dwItemKind2;
" U; N! K/ T# K: z vItem.dwItemId = pItemElem->m_dwItemId;
1 _$ W! t3 Y) |- z; n vItem.nIndex = i;. T" q% H E( |4 v* H
}
+ ?! h. ~8 E, L! U. n/ e //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& F3 q3 J% I+ k, d4 C& B
}
: S) o- X1 F/ J: [/ T! v7 W4 X, y //////////////////////////////////////////////////////////////////////////8 L7 j) l6 w. @
sort(vItem.begin(),vItem.end());//排序4 C' f1 L0 Z' r; p+ ^
//////////////////////////////////////////////////////////////////////////! W8 Y( K. n6 _& x
//交换
( a3 M* ?4 q6 l" n for (size_t i=0;i<vItem.size();i++)5 u3 p1 ^2 }* V& u9 O
{; v* K0 w* X8 n2 H1 B6 r- y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ N- |2 E6 |, @ pInvSort->Add(vItem.nIndex);
) A `3 }' g J* l& y2 x9 n }3 J- x' k, N5 ]& K" B3 `5 _# r
BYTE nDestPos = 0;
% M8 F" M/ }5 b) w for (int i=0;i<MAX_INVENTORY;i++)! g. C1 B" N6 H7 H$ j
{
. I/ V4 {" w* n( e. n3 O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- b/ Q/ t; Q" ~" g9 f
if (pItemElem)% a9 `, v, B' C' d! |- y
{& C: k4 X& J6 R
if (IsUsingItem(pItemElem))1 E8 p% N$ p5 p2 d& N5 b8 z' i
{& g, C% B& l0 s/ k
//这个位置无法放) V% s4 {& W( _. p; E9 c) |
nDestPos++;
; m5 B O% d& r, d% c4 N }
2 o1 L5 O: w1 U J* M }
# \; X# {+ U3 O& `1 _2 ~, R4 F BYTE nSrc = pInvSort->GetItemSrc(i);
, [. O0 Z1 t0 u. y. x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ {0 K8 Y# H( g9 [# A3 S6 ?* K! a5 t
if (pItemElem)
* T( ?. O- b" j; _5 g P+ h: { {8 L. ]$ D# q; W( y( l
if (IsUsingItem(pItemElem))
8 j3 g, {4 x( s {
3 g6 i# A/ }- ~# L& d1 _, X R" w //这个道具无法移动,跳过) p3 s' l9 H! e! q+ V2 W
continue;* f4 `! m. D' e5 J
}' P0 F0 H9 c! R% R8 {
}else{! W. y% U# e, J
//空位置 不用动
* P7 k O7 c# h* x1 ^ continue;2 i5 p/ W" ]/ O7 J- l% V2 L
}
6 F, L3 Z3 o: [ //////////////////////////////////////////////////////////////////////////. Y+ `) r. E C; x: {
//开始移动
$ z8 N# k9 C$ t2 X2 o1 _, n if (nSrc == nDestPos)
) s. P; z4 Z, c/ S1 B {
. v2 x1 G' H b# P% c2 g2 E1 n4 f //原地不动* b4 Z1 F/ Q# d+ t
nDestPos++;6 p2 O# O* U% Y& o- i
continue;
+ [+ X# u! k* B. I, \ }$ N: `2 `3 V7 a# K' x" P. ~# H1 f
pInvSort->MoveItem(i,nDestPos);
$ V3 Q: C: c' S% R) @) @; E, f g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; C" d* M! a7 K+ |; F3 s. [ Sleep(5);
! f( [5 n) P# P# s/ F# S. E //Error("移动 - %d->%d",nSrc,nDestPos);
, W) y5 n6 I, Z2 } nDestPos++;' r" z: T! T9 l: M' H4 B; o
} ~ F, Q6 s9 { W- k
//取第一个元素的信息
6 A, }7 @# V5 |1 k5 f( e( D* B /*4 x( I/ k$ B; N e$ ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), G& z. O3 y$ `! E9 l
{
; _9 `! a/ R4 I9 q6 i N Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ C( I$ H' ~5 f" l9 \1 u! X g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' J$ s5 }4 {% {7 | }
5 g1 t& R: P& H: u v */
8 {) }8 e/ u1 N //////////////////////////////////////////////////////////////////////////
) ~3 B8 h( `' h break;
" _4 p% v3 k& j: n4 s; O }+ A7 e3 v( ?9 h( W
} & X: r! f' [# p/ @7 j
}, o/ f/ z8 ]6 \8 o, @& s3 J8 M! X- N
m_wndMenu.SetVisible(FALSE);
0 N7 }4 }/ E2 N" c( ^$ Q
/ a1 c6 J: j7 I. j1 T--------------------------------------------------------------------------------------------------------; l5 B6 R2 L" g5 |6 `/ @7 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# x |5 P. k9 @- @1 A' s& d
{
- Z2 A$ L! W0 u# d. QBaseMouseCursor();! Y' u, W. e7 B+ _# }( J
}; J; f8 {1 g8 R2 ]: x- ]
在其下添加:
" _0 o! L! U( {1 bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ j- |! V5 O1 ^+ m3 ~{
1 a0 t7 \; ]5 R& F# x1 k( _m_wndMenu.DeleteAllMenu();
6 n( f& {2 `: v" i: Q* I+ fm_wndMenu.CreateMenu(this);; W8 d0 I3 Z. N+ g) i
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 N5 z6 h( D6 V; H
, y- ~, r! K0 V0 P3 n
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# }% U- N5 A, a6 I5 O* v
{
8 H8 a: d4 c1 x! U //P以上级别才可以删除所有道具
, Z1 g# D6 H3 c* Z3 v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# g% |4 h, n5 `: n& y/ _
}+ Z' q- v0 l8 l, q. Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& o8 r& O6 R% ]0 R% N2 i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ G& o/ X! h& C+ q
m_wndMenu.SetFocus();
' I4 T7 }- x% \* i) L}
' a X4 L" a2 Z! l------------------------------------------------------------------------------------------------------------
2 K% s1 P; M! ]: y) U*************************% J% F o9 a2 L( i
WndField.h文件8 @$ K5 I( W+ f U8 o% k
*************************8 q8 s2 M0 Z/ [5 g: L$ H% z4 Q
搜索:BOOL m_bReport;
, ^& Y$ s! M* L) y其后添加:
* D1 g! g" J* m$ x( ?: r+ Q+ V. pCWndMenu m_wndMenu;1 x) `1 m' a2 n& S: C
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* J) b; i' v/ s1 ]" [其后添加:$ B* W) ?$ m( y" J7 r" ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 \( u! B/ q$ B: \1 V8 s2 T4 ]% e' w3 @. v# \- f
# N2 \& E" x7 T: |1 j
|
|