|
|
源文件中_Interface文件夹下WndField.cpp文件$ {' m' y" k. Q5 A' C j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 c9 o% I0 Z/ h$ ^2 E5 ^
. b- p/ m- t0 `5 ]9 b6 j- P
struct sItem
- k5 R' R' E/ [0 O# [, J5 _/ J{
3 F! ?! D- j/ s/ kDWORD dwId;7 u8 g4 e5 ^- e0 D9 r
DWORD dwKind2;4 T/ y2 G& D1 A* ]. K7 ?( h& U4 I
DWORD dwItemId;# p+ s' k3 l+ x- [, p# u0 V# C
BYTE nIndex;
6 b# i! w4 `- r2 l; V' y" V6 M, ysItem(){
5 e& j, b- i1 b; ~3 F dwId = dwKind2 = dwItemId = nIndex = 0;
$ R# D- @: W+ C4 ]. `& G$ \+ Y- }}0 t$ l# Z9 j1 ?, @( y
bool operator < (const sItem p2)2 K$ t n7 y$ z9 }: z+ D
{9 y# a1 x, |7 A( I, I6 ~
if (dwKind2 == p2.dwKind2)
% {) u' y0 K! U; p2 f0 M E { \) W% H/ k% o4 f5 i9 n. q
return dwItemId < p2.dwItemId;
6 c9 j e2 `0 N: i5 Q }else{
9 _8 p) g. E0 n- q* z return dwKind2 < p2.dwKind2;
& G$ P6 g5 e5 v- M4 i: o8 s) w }2 d$ M3 @0 ]1 x/ `- \: E% k
}
4 [! a% I( J& Z& [};% v: R/ J' |% w4 L- `
class CInventorySort: g8 I5 o( Y' p' k1 L4 V0 ]4 W
{
' l/ o. w/ I! c: f' gpublic:% w4 v: @% V+ `. s* g
CInventorySort()
% f* P6 I# G, s% |{
& ]$ n, C; w. K4 i" d) O: @" J m_dwPos = 0;
G( o) S0 E7 ?9 U e" Q9 ] x}
5 o4 d$ `; @$ g, M~CInventorySort(){}( g7 K+ o8 S' l* t3 Y) V
private:
, b: y5 @! |4 @9 }$ ^- ^sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: `6 _6 H2 C2 o' I, X2 N
DWORD m_dwPos;
. ^( { g5 P1 h9 f P) Zpublic:9 H8 Z/ L: N& }8 ~. j5 f# O. Z
void Add(BYTE nIndex)* E5 M. a8 I ~
{
1 d) [# i+ @! J! u- }+ P* E" [ if (m_dwPos >= MAX_INVENTORY)% o* s' T& T g% p* Z. d
{
( v+ v: P+ f: o9 ^. E% h& w return;' Y9 `4 T4 k9 k6 w C, x
}
; S b, i& D$ j7 @- i0 _. ` m_Item[m_dwPos].nIndex = nIndex;2 f% Z8 L+ g! Q* k( Z5 t! z
m_Item[m_dwPos].dwId = m_dwPos;- E% g8 p7 G) U7 X5 P
m_dwPos++;
* W4 F4 A" W/ P7 O}+ m) T& o, A& V0 g, Z' p* [" w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. y- Z0 K+ l. p4 d{% C9 S" {4 L$ W+ ^( g
for (int i=0;i<MAX_INVENTORY;i++)2 g Y: G4 I7 s% q
{
K+ v \9 r2 {# o0 {+ l if (m_Item.dwId == dwId)9 E8 \5 P0 u2 _9 p3 B$ A
{
! M$ X8 g3 e( y" Z( a. | return m_Item.nIndex;) F$ r6 T }0 _5 m, h' c
}; s% e2 [+ D! j( \. |$ R
}; S. o+ ~/ I8 |% |5 S
return 255;5 E! e& B3 W- p- N9 W b
}
- G6 `0 |& G! E+ |$ q: S( d9 E+ dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, @/ u7 x0 O `5 {1 D& {; D{
0 | c R& t# |6 |# j- J- m3 G1 E2 V BYTE nTmp = 0;
" c+ d$ d' ]9 O/ Z O bool bDest = false,bSrc = false;9 Y; g6 Z6 y1 w, G2 ~3 i
for (int i=0;i<MAX_INVENTORY;i++)
2 K0 Z9 I d0 f0 E9 L {
8 \: g; ?5 K, J: x% C( l9 R if (dwSrcId == m_Item.dwId)
" k1 g7 m/ E; ]. T2 m3 d2 I& L; [% c {9 x6 o) N* l3 v8 x
//id相等 则 改变对应的dest和src
8 i6 G1 ]+ |9 Q nTmp = m_Item.nIndex;
% k4 Y9 @' X$ k8 X$ O7 l m_Item.nIndex = dest;6 X. ]' g/ Y k) B1 i3 |
}+ |( j6 V+ K& O% X
}* b$ k6 g, e' z8 N3 S& P% o
//临时数据保存完毕,交换开始3 G+ g9 T& {+ S+ |0 d3 G
for (int i=0;i<MAX_INVENTORY;i++)
- l4 {2 i' p- ^0 H3 l8 } {
4 y7 C6 e+ d% w( l" j- y if (dest == m_Item.nIndex)
$ b" L0 B: X& W8 i1 X8 ? {
, v# e+ `) `# [" c7 `+ f- z5 A //id相等 则 改变对应的dest和src
( i. p* P ~8 g; x( n8 V0 j m_Item.nIndex = nTmp;
8 r; e* }+ i( ]( U }: \& l. _7 N7 D# p8 V
}
. W1 r* L3 e, g) ?/ }. I* f}! |4 c7 a1 l" U' E- u7 n+ Y
};
- `) j5 X3 {$ v9 r3 ]3 \-------------------------------------------------------------------------
% e1 Y7 N0 Z8 l/ ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 G2 t% J( `& N# w+ {+ ~% P) t6 n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( A$ p3 d8 n2 B6 I0 Q2 B1 T2 A紧靠其上添加:
8 v+ z2 l6 N; p& I" vif( pWndBase == &m_wndMenu )
5 h+ Z4 _' S9 U" B% E{
4 N( |; o2 h0 |2 a- L2 @ switch( nID )
2 q2 u7 `3 M) o: \ {
, r$ N$ C5 K0 w3 x1 ~" ` n" x* d2 j case 2:
9 \! p' x A& Z- `! x5 } {
) S2 ~3 M8 d3 G4 {4 R, A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ @) [4 S* W8 [) Z, T4 _. }! @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) h% R" I7 L/ l, i& |% ~ {
9 m; p2 _& P& u: Z+ z break;4 K! F% x& R+ n0 U3 i! M
}
0 N. Y4 ` k7 ^4 J: [, m0 Y% d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! {- g; a3 l( t, t4 L
{) Y: N2 e! r. ]9 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 ~( ?: a0 p. f9 g7 c- x3 I if( !pItemElem )
' X3 z" a8 ^8 j) I continue;
8 [) B4 P7 @- o* A if(pItemElem->GetExtra() > 0)0 H4 W/ q; P9 ]! \0 F2 U8 P4 v
continue;
( Z; ]* i+ e# c4 y4 x$ s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 m- i) L& }( ]& o
continue;
, Z8 y6 C( t6 d% k# B6 N/ N if( g_pPlayer->IsUsing( pItemElem ) )9 `8 \( R7 v8 E! R% L5 |
continue;
% g$ T) ?" O0 c# M3 }$ _# M8 | if( pItemElem->IsUndestructable() == TRUE )
) x- ]: r$ V3 h7 H0 h {0 X7 p6 V# `% P# R* F! f
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# z! U, f9 p6 {' G1 T continue; A/ u4 N7 m) ?% e
}
1 Q' g B3 \% `+ b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! T5 ]' J( P# i( C }
% J& I* n5 l' |" e break;
. v* M/ I9 P, V5 s8 ~2 {7 q }9 H0 } L; ?* I! {' U% K" Q
case 1:
# v+ J4 U1 f# L6 R2 D/ e/ c- H. ]! n {
3 N: S- D1 n" l# P% T( x0 j7 e //整理背包
( P% v" ~, w N7 ~+ c; E. N0 t b //////////////////////////////////////////////////////////////////////////: A0 _* F" l/ h+ c" v) l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 k; M; {- f; U7 j$ g$ _; g i* { //////////////////////////////////////////////////////////////////////////4 S& ^3 e+ t% m2 B9 K
//////////////////////////////////////////////////////////////////////////
# X) z4 d$ {2 m9 `% M) w( W3 u! _ CInventorySort* pInvSort = new CInventorySort;
8 s6 H+ D! X* U vector <sItem> vItem;
* `$ l- m- L5 h2 T4 Y( W vItem.resize(MAX_INVENTORY);//初始化大小
$ _. w ^! u: u7 R4 o) M& R //////////////////////////////////////////////////////////////////////////2 Z9 p3 h; o* [5 V! z1 D
//填充数据* d- V3 ]+ W* K1 F" u& ?
for (int i=0;i<MAX_INVENTORY;i++)5 A; v6 s$ x9 [$ M/ n
{
% M, c) }7 I% d7 r8 ?/ h9 a; d+ ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& m) S6 w6 W: O4 u, N if (!pItemElem)
( I8 B0 R F( w( {4 [ {$ g% Q5 n" @8 U( C8 m8 T
vItem.dwKind2 = 0xffffffff;
; o0 i( c( @8 ]4 X, K+ m vItem.dwItemId = 0xffffffff;
5 J5 d/ _7 E; }+ f vItem.nIndex = i;
+ V2 X7 p3 N) L3 b" r- U }else {
" Y- j# ]3 e0 C# R7 D ItemProp* pProp = pItemElem->GetProp();/ Y# S; p/ c2 B1 I$ I
vItem.dwKind2 = pProp->dwItemKind2;
" l- A6 a, @5 D) A% K; Q1 ^& O: p vItem.dwItemId = pItemElem->m_dwItemId;6 C7 p2 j0 Y' e0 u8 L. v/ I* F3 x7 [; r
vItem.nIndex = i;
% Y& f9 U) ?" e7 x5 ^ }
+ H+ n# T6 b) R! }; @% n1 q2 Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" h) s& W! f9 G) R5 Q" N }, F, Z( T9 G. J" u' ]
//////////////////////////////////////////////////////////////////////////9 z, b7 O0 Y5 D1 Q
sort(vItem.begin(),vItem.end());//排序 N' u5 |; j; m3 y7 r3 ^$ q
//////////////////////////////////////////////////////////////////////////
+ T) @. a- R: L) a M/ u //交换
& U& \' n" ^8 }. E+ s for (size_t i=0;i<vItem.size();i++)9 X/ g6 G: R/ S5 b Q* n% V
{7 z) s! m" O% e4 ?" ~
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* X& q0 a8 E( ?7 e V/ w pInvSort->Add(vItem.nIndex);
# H) X% a" M; p4 L7 @ }
* b) I' K0 U2 J/ R+ I m BYTE nDestPos = 0;! T: R3 Y) p; ~( i
for (int i=0;i<MAX_INVENTORY;i++)
) {5 w1 {4 P6 g+ q7 p {/ h7 E5 q1 y# h: H( c- J0 v3 O$ [6 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 e' @9 Y4 E; i2 ~& } if (pItemElem)
" O v0 g8 b$ ]+ w+ u6 U {
5 n |/ R% M& y" w# s' N! |2 C' \ if (IsUsingItem(pItemElem))- H1 @& T5 k, p1 m$ E8 b
{8 I8 N$ b. {" r( _# [; [1 x. I
//这个位置无法放
) M+ O |; J7 [9 e% J nDestPos++;- Q0 V3 {: {$ p& T6 a3 L
}) X) g! K; Y+ `# U- ~3 F! [
}% e! p( Q& A6 l* b
BYTE nSrc = pInvSort->GetItemSrc(i);/ c/ `: g2 P4 Y) a" _! y6 I
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, A: g1 v0 Y- H+ Y; l: v
if (pItemElem)
; Y. t9 O2 p0 ^; M! S# a9 f {
, C" b$ _6 @+ q& y4 i if (IsUsingItem(pItemElem))
4 S: n& S5 s2 ` {# S/ u; g+ J, c: p1 |1 ~4 @7 N
//这个道具无法移动,跳过; z* f$ E% G( C
continue;
; `7 R/ T% D7 W }
/ ?( P- L7 ^6 u- K }else{
o4 h C9 q; y; l$ H' y) j //空位置 不用动
! ]) o2 h6 Z+ E% o2 h% | continue;7 Y" O5 T/ _2 ?5 s: e
}
5 W) b& E, z9 s) ~3 |; y+ | //////////////////////////////////////////////////////////////////////////3 h4 n/ b" z8 R- `8 b
//开始移动
& x9 A1 s1 Q& U+ f1 Y1 [" Y if (nSrc == nDestPos)
' J+ v6 T8 t+ P) W7 ? {
3 ^: d2 M! j! e3 a+ A* O# C //原地不动2 Y# F1 s+ W, r- N5 B7 e) P
nDestPos++;8 Q: T3 f8 o$ M0 H% ]' @
continue;
. } ]" R" I/ P3 ?1 Z4 x) X }& J- X4 [' ^/ Q7 n5 D. G4 ~! Q
pInvSort->MoveItem(i,nDestPos);/ U4 Z4 w% I4 A$ v4 k( S/ V
g_DPlay.SendMoveItem(0,nSrc,nDestPos);, @+ ]6 n7 y @+ U" @) Z) x
Sleep(5);2 B7 t' j% Y& ~) g
//Error("移动 - %d->%d",nSrc,nDestPos);& f ?% E0 t( a) e8 i
nDestPos++;. B5 p: `+ z% A
}
' T; [& q) ]% T) C //取第一个元素的信息! v y9 y( J8 p. X; n$ T9 ~
/*. }/ ?* c& Y4 r# i) V% t
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' S/ R! e# V1 w& t h8 p {- v* M0 |. H8 W( r2 d5 _. @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! T( W! G0 B9 U g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- {6 m: [4 n0 l6 _1 Y }+ y. T" G3 l+ G K: R2 o
*/
$ s$ ]( |' g, l( C6 X' N& B //////////////////////////////////////////////////////////////////////////
; L4 n1 U6 H9 K; @7 I. N0 \4 a9 y break;: R, X o. g; U- o6 i0 f
}
( w/ J* x/ Z: l0 z/ d$ T8 J }
4 S/ N' Y+ W# t}
! J9 D1 E* m; I! V4 c: {m_wndMenu.SetVisible(FALSE);* ]* O+ f- Z- x, k3 X& l
, M( n2 F7 J1 M6 P* n' ?--------------------------------------------------------------------------------------------------------
& k2 o) @! N: j- M搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" x( }1 ~+ |: D% w+ |{+ o+ u3 B$ W0 `0 w
BaseMouseCursor();
4 ~2 ]' b" ]0 P( a}3 z* x& t0 d5 }2 _9 M
在其下添加:
6 u- S7 c. A) ^% f! q- s$ dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: q7 A0 Q5 [% P; C' V# y' }{
: V* w, I% ]( om_wndMenu.DeleteAllMenu();; h- m6 { N" n+ T7 o7 [5 d
m_wndMenu.CreateMenu(this);7 L- ]3 P ^% b0 \) @( L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% [6 D5 `0 O( o5 q) C
( j+ d+ J1 B. f; Z* C/ b! ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 m$ i5 e$ N1 L+ H2 O) ]0 l+ z5 s. f{9 X2 l4 u s- N: v( }( r, m
//P以上级别才可以删除所有道具9 f- g, [$ f% _' y+ \$ t, k) n
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( N, X- S) k4 M9 u# d
}
8 S, I# S( p' y5 G6 Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- d, w" v8 `) ^m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) V/ h7 t& M6 q# g( W- Z) o1 I+ e
m_wndMenu.SetFocus();- |- j' q0 X" O
}: e( ^) F$ m! m4 T; f `# [
------------------------------------------------------------------------------------------------------------# ` v* Y- P+ i! ?
*************************' O' U2 r& C" f
WndField.h文件$ s9 A, t8 X D) m: C7 H' J
*************************
- e! M0 y- Z6 p1 ~# ?搜索:BOOL m_bReport;
N, A1 c7 C/ C: F1 ^/ \4 L其后添加:1 u8 g, A5 q8 w3 T6 a- p/ y
CWndMenu m_wndMenu;" w3 l/ o6 E$ J: T& F8 g) \7 M( w5 ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& A4 A, F w' H7 u; r& J, T! ?8 X其后添加:
( C2 P+ ]0 _, h! l- qvirtual void OnRButtonUp(UINT nFlags, CPoint point);1 p( [: L7 B( B7 K4 R5 f
6 m( S1 D0 D, V0 ^3 e' ]
9 H# A& K7 @( I& V. ] |
|