|
|
源文件中_Interface文件夹下WndField.cpp文件' |& A7 m5 v; }4 o0 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ C! {+ \! k* E( h8 M
$ P8 G4 r: T% E2 o c0 s
struct sItem: T* {3 g: B- a
{- o# q7 J: ]6 W% u8 C' u k0 O
DWORD dwId;
" H# U( _( K# F& d' aDWORD dwKind2;
. v& w* b, ?% h0 }DWORD dwItemId;8 [' n3 C; U7 A' t
BYTE nIndex;
8 i& e7 D, f" f. O# usItem(){; L# b; E5 p% ]# L
dwId = dwKind2 = dwItemId = nIndex = 0;
. j! C( q5 r1 Z) J" L1 }/ \ W' n}; G! p. N! P* Z: }- s
bool operator < (const sItem p2)
: W9 A6 G! ]0 H) s' F{' f/ U3 s: B# i
if (dwKind2 == p2.dwKind2)
- t4 X8 v2 f6 V1 U6 e' q/ D0 L" { {
1 v# V7 E& S- z5 S% [8 Y return dwItemId < p2.dwItemId;
. d2 w! Y3 ?' u; o- Y }else{3 R7 [; h1 z- Z" h
return dwKind2 < p2.dwKind2;
: q B: P) m B- i4 k }
; e0 Q" o% P* e$ X- I}
+ U+ ?! u3 H* R};) T, Y9 ?- |+ c+ W7 ?; G
class CInventorySort
~, n& S" Y6 M* C/ @{9 W) b) y* f1 O: P0 b/ |/ u0 M
public:9 w, k# a& ?2 f
CInventorySort()( N6 q) C+ y$ R0 n' ?/ _% F
{
- w, c: g! s# D2 G ]) {/ { m_dwPos = 0;
6 K% [+ y4 `" T# Z}0 v+ f" I8 Y7 f/ \$ Q9 f
~CInventorySort(){}( }, M \; f! g, g: }
private:
. ~7 O. m; c9 X8 ~, PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 `2 Z% O2 B$ a* _DWORD m_dwPos;% I% M% x5 Z$ g: e" \
public:; `5 m9 g3 t) [) h/ {
void Add(BYTE nIndex)
4 I$ d# I+ e& M* x7 Q{
/ C9 D5 t: y: @. f/ J3 r2 i if (m_dwPos >= MAX_INVENTORY)
6 A3 {( v. X& \: s' n6 Y# r {
: T: V/ h0 r4 k- \ return;2 C% {; ~7 w, _! D
}
1 f4 e) q3 i+ Y' p5 K8 n! L m_Item[m_dwPos].nIndex = nIndex;
/ T& L& T1 Y0 s% z m_Item[m_dwPos].dwId = m_dwPos;
+ s6 @ n4 p! v& s m_dwPos++;
. N) H8 P7 K6 a}' \) P5 |5 B" o3 _' g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# Z: f& l$ t3 s{. M8 ^) j; |5 x
for (int i=0;i<MAX_INVENTORY;i++)
( f1 Q4 B7 Q7 | {1 r$ N; P& w: s9 a& I' R
if (m_Item.dwId == dwId)
. Z% A' r! O- J: V2 H$ i' M3 p/ G {: N, R) G Z* G. Y
return m_Item.nIndex;% f+ t" }: k0 B* a5 {% `4 O
}
, u. [: g* Y- I0 b! z }: y1 l. i5 X( F8 w
return 255;5 [& B. x* M+ j& L
}
& `+ K _+ j9 N- K; d* hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 L3 M7 E9 r% A1 | F
{
1 `5 M8 N2 c% Y6 U$ D BYTE nTmp = 0;
H- }' y C1 \% P, y bool bDest = false,bSrc = false;
" \9 ^" k' b$ f2 M; v for (int i=0;i<MAX_INVENTORY;i++)
5 d" h. \4 @' d$ f6 M* h6 A' E {
6 ?8 \; h# U, R" s if (dwSrcId == m_Item.dwId)
8 T2 h: X$ z: O. K5 W5 y9 J+ T {
1 d8 {& ]/ ^" ~* N; T x9 N/ T //id相等 则 改变对应的dest和src3 e% J$ L- M+ {4 ~
nTmp = m_Item.nIndex;
4 @6 O2 d. B$ k+ F# p: ?! r8 t2 W m_Item.nIndex = dest;1 X& Q; l/ E- ~; Y
}
% D3 i1 M4 @" ? }
4 ^/ k0 s( @0 Q! ?4 v //临时数据保存完毕,交换开始% X8 `( ?+ j3 P* m
for (int i=0;i<MAX_INVENTORY;i++)4 T3 h! m% e( [" |
{
, s7 S" A5 n- t) G if (dest == m_Item.nIndex)
, X/ _. L' j4 o c! S) r% M {$ ^2 b. ?" Z+ G9 Z/ j
//id相等 则 改变对应的dest和src7 c1 K+ h; L6 G( Q. N) {
m_Item.nIndex = nTmp;
+ s* N8 w4 V: n5 J" Q }
# o' z. V" d8 M. p }
; X+ i0 j- |/ A) W5 P8 W}, ~# V) M8 j6 g$ X; c0 D
};. ~6 G8 u7 b/ C
-------------------------------------------------------------------------$ ?- `, I5 A8 G5 Y0 _9 t! V
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 G; L1 Q3 j& S9 Q( _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 x" I/ Z o$ B* o紧靠其上添加:& [2 l5 r# x0 o n& ]$ P
if( pWndBase == &m_wndMenu )
& v; q$ a, @! D! @, n{2 v: t9 L2 {5 w6 _2 ~
switch( nID )# T. X, B6 [: @. Q
{
, F1 W' e% S3 ]/ J0 G; V8 A case 2:
9 ]8 I1 u3 ~% h: m: d; e% N7 w {+ j. ^$ S( K3 f) X# z" k
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ x6 S& N2 v; C& K( n
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% a3 e2 q5 g" ^6 Q {) N5 D' A) \# a( b" q( F
break;
) _ |/ k: }' A }
5 e3 ^' t' R5 H% R. Y# y0 j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! V1 B' A3 U( T6 I
{- n- h# S! Q# }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 w R! T* n \! x* d) X
if( !pItemElem )
, o) p$ p4 n( O/ B1 g7 }. x1 Y) e continue;1 C( T9 I+ o. Y3 l3 c
if(pItemElem->GetExtra() > 0)
4 F% @' {# S0 a& q* T) l continue;4 h0 A9 b* M) f
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- t6 A6 ~$ y1 {$ H9 a+ q$ N6 W continue;
2 D$ o% m! I# ]$ w3 o+ C* a if( g_pPlayer->IsUsing( pItemElem ) )
2 b1 G Y0 G/ Y5 U8 i) V* _1 K continue;. _6 k3 U) W& [4 V: i
if( pItemElem->IsUndestructable() == TRUE )
: \3 N+ ?; q) \0 w% J, S {
a4 J; n1 x9 {( M2 ?7 j g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 z- a, l1 a" L* M
continue;
; i+ O; F( ?- C3 U( M5 F6 Z1 T }7 N- B% E8 t1 ]- V1 h7 L% Q' s6 d
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% e# f4 v- r8 ^( J2 }
}
4 {: B0 Y( ^) f- }$ B break;+ Q) y3 Q, U$ G% T
}
) _% R4 u5 T7 c3 `! g; u: p case 1:
3 X" a' w' U$ m: y) k* [8 y {
7 t- h" c- k* N% n6 x9 y //整理背包
9 E3 R9 n( c4 _/ d: l$ w( B //////////////////////////////////////////////////////////////////////////
, \8 O: r a6 c5 S& W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, S! y, g6 k3 N, j: Y$ F //////////////////////////////////////////////////////////////////////////) i: s1 I \3 `% F( x% U, G1 g
//////////////////////////////////////////////////////////////////////////; b& M. i& N* R8 Y% B4 ~4 W9 P4 f
CInventorySort* pInvSort = new CInventorySort;" X; N1 I9 k! B1 ~* n+ S- N, x- g* i7 u% O
vector <sItem> vItem;
! n1 T# S1 @: f P; }' L& A vItem.resize(MAX_INVENTORY);//初始化大小
8 r( f1 {6 A7 b3 I- k //////////////////////////////////////////////////////////////////////////
8 N/ _3 [' {$ d1 O //填充数据0 s1 C( T, p/ \ c/ Z1 ^
for (int i=0;i<MAX_INVENTORY;i++)* I1 d9 F$ R9 Q1 @, J$ {9 [" F: ~
{
2 ~1 V3 U/ w3 B7 h; v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, t& V8 {4 D3 z! W& w if (!pItemElem) r/ P: X; d) j% Y' J% g' V' r
{% v0 Q9 a) h% p4 a y* p% m
vItem.dwKind2 = 0xffffffff;
! Q8 l' ~0 a2 S* n vItem.dwItemId = 0xffffffff;
6 U6 |. {- W, j5 c/ _! P vItem.nIndex = i;1 }) r+ ~' O) k0 y" Z0 J- H1 l
}else {0 }) O( n( X- o! c/ }+ o
ItemProp* pProp = pItemElem->GetProp(); C; z, R% F* y( d; d+ Z/ X" T- n
vItem.dwKind2 = pProp->dwItemKind2;0 ?9 Q0 M$ `+ Y1 y
vItem.dwItemId = pItemElem->m_dwItemId;
5 `# v+ ^% F2 [3 U vItem.nIndex = i; X7 F' g* \/ {2 Z k8 [# L# Y: P
}! e2 K8 t! o6 @8 F4 J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. H& s8 d; d! [$ l6 J' u4 J }- b- P' p3 J: ?! u j6 `' C
//////////////////////////////////////////////////////////////////////////8 g. {4 [4 e6 q/ n; |2 e% ^1 K2 R
sort(vItem.begin(),vItem.end());//排序
+ n+ R( A" J' }1 ] //////////////////////////////////////////////////////////////////////////4 v, W* W9 ^# F
//交换8 @7 N! j; Z8 _9 ^4 f( Q J
for (size_t i=0;i<vItem.size();i++)3 S: k% a0 h3 ~
{+ ^) W N; q, N% c4 P2 h |
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 }2 @* J% J" U0 _3 |+ n/ o pInvSort->Add(vItem.nIndex);
) {' j" Z0 B l! {2 N$ }! l }
! N+ c7 o) p6 G6 Q$ u BYTE nDestPos = 0;
6 V% P' K3 }6 \; h) j8 [7 G for (int i=0;i<MAX_INVENTORY;i++)
9 L% Q! w- t5 Y' d: i {
5 K3 w5 U3 ^/ W& `+ Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! W4 ~7 F2 p" {/ U% S if (pItemElem)% D6 G' u$ Q" j/ n
{
, w3 k. Q7 \6 Q0 F( |, R$ S8 q if (IsUsingItem(pItemElem))( M$ X' I9 S' B0 P+ z5 q9 f3 J- f
{- _* w2 w+ C. K
//这个位置无法放0 v4 S# z o3 H9 m+ {% W% X" _, m5 y; c
nDestPos++;* K* t9 ~5 B$ x6 p) J
}. j4 ~! R8 h0 r+ W& c& Y
}
2 ]% ` {" c/ |1 k! Y: q# U BYTE nSrc = pInvSort->GetItemSrc(i);+ ~7 Z: p4 b0 r# q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# i5 S/ D0 E+ F* y2 s/ l# X if (pItemElem) ]' ^ l. D' B2 C5 P$ J
{- b3 [& c' p- h2 p) }
if (IsUsingItem(pItemElem))
) r3 ^& Z; P3 A {
/ H8 n* G# E, L- x //这个道具无法移动,跳过
5 ~4 K. S7 O0 V3 ~# x continue;8 C ~3 ]% O+ I
}0 P ]' R; L6 q9 X }# q7 ]0 H
}else{: \: l9 A' v2 O
//空位置 不用动2 c% k0 B5 Y& T/ ?
continue;
9 V" l- y5 s8 j" i2 ^3 {$ y# w }: G, N6 G. q4 a& {
//////////////////////////////////////////////////////////////////////////
6 R2 l. I( I3 \7 a7 B: ^+ r //开始移动! Y( c9 @+ e+ d
if (nSrc == nDestPos)
3 t* c1 p7 t( d {, T: L( I, | {
$ {% V+ o8 s$ i+ i- D //原地不动, p6 V* O' z) L* d0 G2 F
nDestPos++;' C* |: m$ {0 w5 S% D, E' a
continue; \$ n5 Z' e0 j/ L L
}5 j; V: V4 D8 c% P
pInvSort->MoveItem(i,nDestPos);
: a# }5 Y- e( ?% w: j6 z$ p4 @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ f$ t1 x# L! x. H9 ^* e" N
Sleep(5);1 F3 Z# E7 b8 _8 B
//Error("移动 - %d->%d",nSrc,nDestPos);
& ~& y" L- _! h. i) l7 W: Y nDestPos++;( a3 U6 C C; v, M% n
}
6 b4 d6 T: o c8 N9 _2 r% v/ L9 v //取第一个元素的信息& X& T C. U, }- j1 I/ x
/*( c# L5 x" ^, G0 V: F p5 }3 w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); J! u0 W8 t6 i; W ?
{+ O* a) X, g" x
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ J! u3 ^) z% `, E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! \$ G0 f7 ~& w' J0 @
}+ B/ b; f3 q, J; d% p
*/1 |% e* k0 K( E9 S W
//////////////////////////////////////////////////////////////////////////
8 O3 W b2 o' f, t7 i break;
5 Z& P1 }: I/ i/ C$ h! ^ }# [4 `3 D _5 e" m0 k3 b
} 5 u6 k" U6 n3 o3 Z" k
}
2 J: K1 B, {2 x* Dm_wndMenu.SetVisible(FALSE);% Y2 [1 |9 Z( f5 }0 T/ t/ ~9 E
3 i5 a) @3 k2 k; x% j9 |; n0 {, |$ Z--------------------------------------------------------------------------------------------------------
* z! y- r" h: O8 s' x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). |& P, a! ~1 ~+ _# H
{5 T8 J% k4 i: H I- q
BaseMouseCursor();
# I% H8 M3 B. L0 N# d. _( K}, o3 H% i2 o4 c6 f) C f, S
在其下添加:; z% N4 }0 l" R# N W/ e% l
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 y+ i& n) m& \7 x; H2 ^{
+ R5 L& N) f& x+ I( Cm_wndMenu.DeleteAllMenu();
( N9 K0 P2 z: s1 g& ym_wndMenu.CreateMenu(this);3 m0 g. u- h( r' k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 S" e) s9 G( Z2 `: |( @2 X9 u6 p' ?3 I3 a! c1 Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, @+ M- X, M, {' E1 y: f{
! M! u: T( X6 I5 \5 A- S9 Q. ?6 o, H, \ //P以上级别才可以删除所有道具' A; ~! {+ h* A5 q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 z0 L! b; V) Z" q
}
* H- L, ^- d* dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ |7 U7 c0 c: P2 ^+ h- Rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
x8 z, {- G5 x5 \% t0 ~4 um_wndMenu.SetFocus();
" {" w8 F2 ~/ t" P4 q& D( `}
3 O3 E; t9 O, h6 }, w9 h d------------------------------------------------------------------------------------------------------------& g5 a! B* W9 n
*************************# Y l& E3 }* b3 f
WndField.h文件6 }' D! P8 R7 o( J
*************************
8 E5 ?4 [& J/ V# q9 j3 W" S搜索:BOOL m_bReport;
3 j3 i/ k8 i5 s- ]$ k' @其后添加:8 N# V, h4 H6 l* I$ t2 w
CWndMenu m_wndMenu;
1 R9 w/ t! j2 O" J9 [1 [$ {搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. v" s) m, y( Z$ Z& S/ D! N) O5 S其后添加:3 B' b6 P, ^$ D2 Z: P
virtual void OnRButtonUp(UINT nFlags, CPoint point);! K$ H/ E/ O, ?3 D0 H9 r% E7 ]. X* b
: e( o: q- `4 M5 R' H. ^8 Q
' Y* a' U `2 z8 e/ f
|
|