|
源文件中_Interface文件夹下WndField.cpp文件
, n$ F6 w# [+ E: A: n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! w5 K# G% X. L/ k
0 Z9 z4 N# F/ S9 U
struct sItem4 z% O1 H# b4 o, u/ r
{3 G, G5 R* Q# I& ?5 b s( l+ ]
DWORD dwId;8 E* t& N7 W+ B
DWORD dwKind2;
, K1 l6 i7 D- Q' yDWORD dwItemId; X) c5 h' \4 M# o: G8 e2 _0 u
BYTE nIndex;% |5 M6 S+ g" ^3 s8 N- z
sItem(){
4 E' D4 P+ e9 M& O; Z dwId = dwKind2 = dwItemId = nIndex = 0;
" z8 s4 k2 P! q- x% [, A: ~2 z4 |}
3 R0 ^$ F; s! f6 {8 m- ~bool operator < (const sItem p2)5 c" H7 O9 b) Y4 J6 Y2 l8 M) S
{
' o: _- A* M* u4 L. z. N, u1 E if (dwKind2 == p2.dwKind2)
. b \6 {5 g1 p/ p% T) ~ {6 R4 k4 z- Z1 b8 ^0 V
return dwItemId < p2.dwItemId;
! R& M" ^: D4 D/ R }else{ `$ j, X- B4 W! D4 `! M
return dwKind2 < p2.dwKind2;& T, T1 _! ?% z( R9 d, x
}
- g: H& U; V2 ]' a3 ^) I: \/ _}2 J3 U2 g4 e3 ~% K' A+ v) y
};9 {: I( ^1 z2 z* S6 t, S2 B
class CInventorySort
+ w0 r+ H* F$ L: a: S{" K# i' _9 N$ ^
public:
8 R4 b0 ~& O! qCInventorySort()
( t' m' Z: P( ] Z4 N{
" E' J! B* q- k" H, s; `% X m_dwPos = 0;# d8 s- v" Q! G: A" r
}
" G+ Z* N0 z8 O! Q& ~" z3 m* h~CInventorySort(){}
- H2 n0 k, {) @: R8 o* {private:4 `" ~0 _. u6 D- m) G/ ?7 [3 p7 e1 Q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 \( p4 @1 S dDWORD m_dwPos;8 |5 [4 o# T' a m
public:! a5 u7 t2 W& r9 A
void Add(BYTE nIndex)
% H" D' ]& g5 s+ n% { W4 L{3 Q: v3 C9 o. x* E P9 d! d
if (m_dwPos >= MAX_INVENTORY)* ]* E0 V9 U. q3 x ?
{1 a0 b$ d3 E; m. Z3 e
return;
& K9 \1 R- m6 w0 \$ O$ q }# Z, K- @: T4 ]/ d
m_Item[m_dwPos].nIndex = nIndex;- e6 G. Z/ D( |2 i7 t, Q
m_Item[m_dwPos].dwId = m_dwPos;7 f5 `, i2 Z7 G' f- d ]
m_dwPos++;( H& r$ Z8 O- z# W' R( s9 f
}
& y8 ^" R8 s" aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& q8 `; E3 d, E; e: w
{* X) b; [% j& y& D
for (int i=0;i<MAX_INVENTORY;i++)
$ ]) v2 V* H- C* R3 L {
- i( N4 _( {, U. |' p z- z) L if (m_Item.dwId == dwId)4 K1 h* i: F R' e5 N0 R
{
0 s" Z9 g0 X( l return m_Item.nIndex;- p9 j/ C( K# S2 ~* d* j
}
% J4 H. E, J9 k+ N" r' s }
, r" u$ l% h2 o) E* x- W return 255;
' z/ F" h! v5 T+ X! i}
" f0 B0 r6 b4 }* \8 tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 o8 D) P/ w6 J1 V% m8 T
{- g% Z6 |- ]% s6 t: v9 e
BYTE nTmp = 0;0 R+ @( m' y' q+ e2 w9 e2 s* ~
bool bDest = false,bSrc = false;3 \7 T& C; K B1 F' p' d
for (int i=0;i<MAX_INVENTORY;i++)
2 Z7 f8 h8 M) z { r+ |4 d( q; _& @% ^
if (dwSrcId == m_Item.dwId)# j6 D2 M$ l8 t
{+ O8 p1 a; R* z
//id相等 则 改变对应的dest和src+ Q) l2 V( H: D5 r- d
nTmp = m_Item.nIndex;
: a# R, t5 ~; q' V4 X% U m_Item.nIndex = dest;) C5 X0 i! h3 m) z& v: D4 b: z5 |! [
}8 I0 t7 A$ d9 q& K% B3 ?+ l! A
}+ N G4 J8 e D4 I9 m
//临时数据保存完毕,交换开始
: T. p7 M! c0 C9 }+ ]6 i# ~$ n for (int i=0;i<MAX_INVENTORY;i++) \, \4 _$ x' e$ J5 ]% G, \
{
& B' `2 K9 Y/ k2 G0 O8 h if (dest == m_Item.nIndex)
! b$ D$ J9 E4 G! e4 W- ? {
5 ~8 W7 d1 l' j' I //id相等 则 改变对应的dest和src% L$ O+ t: B/ U9 T1 [4 N [) c9 {
m_Item.nIndex = nTmp;
7 O$ t: ^( p5 b; z }3 n+ d* O) H* j; W+ Y9 @
}
: ^- \0 s# @# d}0 |+ \; D1 z8 a1 F% a
};
" ^3 j& P7 p4 ^* x4 u-------------------------------------------------------------------------
8 w6 B+ d' i6 U' H0 [' q. L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 ~8 }# O6 |& t( ], q: _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ M$ O! X1 s! {6 x' `$ b紧靠其上添加:# v( T5 B% {: i+ e9 f# x3 X
if( pWndBase == &m_wndMenu )
" ]0 e7 I, Q- f( S9 O/ Y' h7 \{1 p8 P; f$ e4 T$ g+ @( E
switch( nID )
( G% u- E% U, X! k+ L, x {
/ _+ G, D( p- s4 T. q& \; D1 | case 2:
( G Z- X$ a3 ~, U! I {3 r0 Q9 K# N/ K, L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: Y Z# z& P6 m, h) f" s: j if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ O1 m# m K6 e- o3 R$ \ {. I' H( \/ d" s; s& y3 i1 w
break; M6 ?3 y& k) `/ g7 I# H& }# p
}1 ~/ n) D3 Y' l6 H' S
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) X" f2 p1 v) o" m, A
{. k% O# F. w/ [0 @" u' l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% C! M- H- T6 s: f
if( !pItemElem )! W8 X1 {" ~. V- `0 v+ x
continue;0 d: `2 n8 C- y% ~* B
if(pItemElem->GetExtra() > 0)
" v2 |$ d/ D" l! y9 \ continue;/ ?! t( v: k# t0 n: ]$ l5 V9 O7 A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
R! T7 d7 S& A% H7 V continue;
( W$ G; y7 V7 u$ n( S* m if( g_pPlayer->IsUsing( pItemElem ) )4 E) F& X4 V$ H0 ]
continue;
9 X& q, x( g$ w: D' C$ k+ @ if( pItemElem->IsUndestructable() == TRUE )3 w, z$ x( Y( b3 T; l& {0 O
{
6 D9 {7 ~% Z8 M: B/ \& ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 L9 G. i. ^ j* B% Z7 s continue;) I) u! B q9 c6 |
}4 m. E# Q, J5 Y" B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 l' y% H% \; }4 `
}
2 N/ A* g: O6 A+ l, ~7 N break;1 y$ D T1 Q" {3 Y# ]/ o8 A
}9 M1 H' o ]: G9 V' c
case 1:' a( e1 f- I i# \& Q; h
{
5 I5 V, h3 @- w D: ~' |5 N/ r, ~- r //整理背包( \1 p, w3 n9 Y% S- k( h
//////////////////////////////////////////////////////////////////////////
% N \! f# M+ ?8 R/ z& Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ d Z( C1 S {" M //////////////////////////////////////////////////////////////////////////, L: g- r9 k7 c7 W
//////////////////////////////////////////////////////////////////////////; W& W0 c8 ]$ ~( }6 |# V! A. ]
CInventorySort* pInvSort = new CInventorySort;
8 @8 e" ~, z# o7 A! ~0 u vector <sItem> vItem;
& i' S' Z \9 b. ?: c1 W vItem.resize(MAX_INVENTORY);//初始化大小
) R$ p# V- S: P0 Y4 o) ~ //////////////////////////////////////////////////////////////////////////
7 v+ Y0 d' {8 @0 ^# b //填充数据
3 p/ z+ T; ~, u( x for (int i=0;i<MAX_INVENTORY;i++)
' j6 N- p4 Q, p( t; Z {
o. }3 a3 R9 f* T2 \4 A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! w- }. R; r0 }* m6 |4 t O if (!pItemElem)
$ m% J1 U' t& F0 K {
+ n% l" j; D) f2 H, w4 E vItem.dwKind2 = 0xffffffff;
7 _" E/ \6 l1 z f. Q, C/ @ vItem.dwItemId = 0xffffffff;
) `0 P0 Z& u1 a B5 A3 ? vItem.nIndex = i;' Z5 } P6 `; D8 d0 u
}else {
: t l2 a6 U( ?' w ItemProp* pProp = pItemElem->GetProp();
- u1 p7 u) ~/ S, Q vItem.dwKind2 = pProp->dwItemKind2;
$ b! H, n: W, S vItem.dwItemId = pItemElem->m_dwItemId;- m% W% @, z. Z/ l) ]: @0 |
vItem.nIndex = i;* Z5 D8 W2 ~5 p8 l$ m
}! c& [& m5 m8 G* Q# @$ w
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 t+ E0 c J2 M; w
}
5 S- z+ m) s0 h //////////////////////////////////////////////////////////////////////////
# Z% t9 O& X) f& l) S6 R sort(vItem.begin(),vItem.end());//排序4 B1 b6 x$ A7 H
//////////////////////////////////////////////////////////////////////////
7 d$ v; o0 W, C! m$ I# H //交换. H8 \* n# {0 G; e2 j1 W7 Y! ~
for (size_t i=0;i<vItem.size();i++) W$ H" b" n n/ H/ a
{
2 B5 b6 |7 c4 K% Y* d7 ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 K/ s [% B, O! P; N% y& o% ?- ` pInvSort->Add(vItem.nIndex);' N% S! w2 M4 d a }" t- K, a
}
& m$ D" C& Z4 ~( ~' D0 m+ ` BYTE nDestPos = 0;
5 R# T+ B' C* `) ] for (int i=0;i<MAX_INVENTORY;i++)# J' c# j" h: K7 Q
{
0 E. ~, _7 _ |( B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- T U) ~" ]6 h, W# B' d3 v$ U if (pItemElem)
7 n, G o6 D1 U" T! b. ^ p {# Y+ v# `/ G k( G5 o
if (IsUsingItem(pItemElem))
- ~# q" \; U5 [! J2 p! p( ] {
! b! ]$ `& y G5 p6 I: a/ F0 V //这个位置无法放& U" |) ]$ B9 z* ^3 F: Z; \
nDestPos++;% z4 \. b. f' `3 I8 k0 Z
}( R9 h- T- ?- A1 I- C+ u
}
; t. ^+ J8 V. p BYTE nSrc = pInvSort->GetItemSrc(i);% n4 i6 g- A. |0 o
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 m6 P- D, M9 X1 E+ m4 O
if (pItemElem)
) ^# A* i. ]( @& h8 G& @# W {) M* j& @! T: U `
if (IsUsingItem(pItemElem))
) k/ `8 y; Z: J3 }1 i7 D {
* ^2 ?* _% Y9 b1 p //这个道具无法移动,跳过
, z; j$ F# w9 l( h continue;% w+ ]% s, O1 O$ C7 q; F+ M4 N" q
}" T# G+ K, d3 [6 ~9 \6 n
}else{
( C3 F( u) `/ `, M' X% M6 y" |8 y //空位置 不用动/ J O! G1 I5 e
continue;% b/ v7 A1 p' H' r# v- `) c
}
4 x, g" U6 P' B4 Z0 Y' J/ x //////////////////////////////////////////////////////////////////////////# A* C( U' L4 W
//开始移动
8 i! n" ?* ~7 F1 ~ if (nSrc == nDestPos)* |. S7 ^' V7 {7 Y/ j4 X6 e
{" w& [6 {9 Q J! B& w, ]$ ?
//原地不动
8 `* ]# Z; p3 [# b+ T, F nDestPos++;1 @! i" g$ k- x1 r- v/ `: h
continue;
5 O9 e7 S6 O' P }% \( T U, s. K' U& o0 |2 k
pInvSort->MoveItem(i,nDestPos);6 L; i' |% V: |! S) }
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% | e y$ B n" F4 ?
Sleep(5);
/ ]; w/ s- t9 ]6 D0 x/ |/ ]: E //Error("移动 - %d->%d",nSrc,nDestPos);" J5 ?$ B: Y2 S$ G
nDestPos++;0 ^; V' v1 C- x1 B
}: C4 u! i- P$ z* |2 f& P
//取第一个元素的信息
+ A% S3 R+ d1 o3 x /*# x7 W' s! A: A+ Q- Y" _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 \6 f3 V3 a; r# R( S
{
# w; h0 G7 _3 n* r' X$ D Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. A1 b: v) V2 k) a( h8 V5 m g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 d A/ i9 o$ \2 } l. X
}
! o3 v/ G4 O3 ~& H+ h */+ R& f* H) {+ i0 D( S7 l
//////////////////////////////////////////////////////////////////////////
# p* d. u. M, P7 ~1 A break;
, [& O* S) y) U. ~8 P } Y& y X' A' |! j, Y/ t6 O4 {
} ( N- j. f5 p1 n0 Z. H: A! ~
}
& q# u2 |% v. ^m_wndMenu.SetVisible(FALSE);6 D# z6 j9 D7 W9 H
v) t* \- c1 b/ F
--------------------------------------------------------------------------------------------------------
4 S$ u8 C! U, X5 Q% K% c搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), O4 Y* l8 ?0 Q2 k0 Y: k
{
3 F% Z; J6 c4 ], YBaseMouseCursor();
% M; b" I! ?# B0 n2 B \}& L$ h7 P$ }( A* C7 C
在其下添加:
4 D; ?) y z1 p# k# y, xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" L+ F$ n- Q5 ~
{
3 }2 _" z; G+ i5 q( d6 qm_wndMenu.DeleteAllMenu();! j+ q& q" Q, U. _! }3 _7 z4 B. E
m_wndMenu.CreateMenu(this);/ X% i+ P( r8 h
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 I; s4 c: H/ g4 i
0 `, r/ z; s8 Z' `if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 _2 a: a! h4 y( [ }( ^
{$ K7 ?- g- G, j4 S0 ^8 [
//P以上级别才可以删除所有道具
4 r4 t# s; _5 k; g, D c6 L m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: |) u6 v8 P3 E6 n0 n}/ \6 S8 U: ~5 k8 y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 a, Y A$ p7 e9 H# R. Um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 [5 d2 g& j: m8 O/ C- K
m_wndMenu.SetFocus();
5 w: N; b2 H2 ]3 V ?* Y) ^/ h}
6 @& j0 _, _ c' d# L" v------------------------------------------------------------------------------------------------------------
! K7 t3 C: n7 v7 c" N3 T*************************: v3 I, W+ G4 ?
WndField.h文件
1 M8 d+ C! F$ S*************************! R0 T! s- _2 l% `1 |
搜索:BOOL m_bReport;6 O% F$ }" h3 L J( k
其后添加:
6 C, b/ R! s0 w6 ICWndMenu m_wndMenu;
2 O2 l; v* M! v7 [* g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); Z. R$ I4 v6 _. u
其后添加:
% b4 z9 {, d7 W, q8 Wvirtual void OnRButtonUp(UINT nFlags, CPoint point);. x3 k9 p' J$ l T6 ?& G
' `) }8 \/ ?* j
6 E! u; C! A6 P/ f) z7 p" q5 s( P) m |
|