|
|
源文件中_Interface文件夹下WndField.cpp文件
- W, t8 l, C$ ]- v6 d. S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- g4 F$ X4 Z9 ^# y- K
8 h# w0 `0 K9 K( `# z& }struct sItem1 V: D! } R+ E$ b. z) u4 W3 H7 [
{3 h3 j; T( V9 a6 g; L: B
DWORD dwId;
! A) T; T& m& g. o; V" p' h# \DWORD dwKind2;" r3 ^7 D6 J1 ^& i* s5 H
DWORD dwItemId;% P$ _$ r; m& P
BYTE nIndex;
, M2 j% I1 b7 o$ Y! ^* ssItem(){
% D6 @1 \. O' o& L9 n dwId = dwKind2 = dwItemId = nIndex = 0;
6 q- W" g y1 s5 M1 a! ]% v/ j Q}1 N- Q7 d }! F
bool operator < (const sItem p2)7 @, Q& M8 V0 c9 c" r; \
{3 d/ _0 m6 f2 m. b
if (dwKind2 == p2.dwKind2)! _3 a- i% C" _9 m( c+ D
{2 \( m$ j2 {- S. ?
return dwItemId < p2.dwItemId;) e& x0 U: u2 Q1 M. G
}else{9 {$ M' U& ~) T
return dwKind2 < p2.dwKind2;
" x6 \1 z+ h% D) \- ?) X; }) C }
8 ^1 C+ p1 p% P1 p) h}6 z6 l8 _8 i6 ?) P5 ?: p# |7 O
};2 t4 ^$ y# U! y7 ?9 n; w, G$ |. \
class CInventorySort
4 z1 S2 B/ L! B. E{
c7 H, s! ]! w7 D0 n( c# opublic:
8 v0 J& Z- J0 |" E, _" H( JCInventorySort(); C I1 A2 `$ R8 s% F
{
2 t$ J- M/ k& b m_dwPos = 0;
1 G8 s0 \3 L- `}
3 V6 T2 K" g6 M% q* I L' `& l~CInventorySort(){}
3 `% f; F6 H: hprivate:+ b1 X( x; W+ Q9 E) q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 ~$ s3 ^; e V& s2 HDWORD m_dwPos;% |: f/ c% a" R# ^
public:# E5 x; z8 D0 Y
void Add(BYTE nIndex); |6 E; f. w. l' A( H4 S
{/ r1 I# H! n* L0 }
if (m_dwPos >= MAX_INVENTORY)
& C( R9 I S9 A' n! h, |& U/ p {
; S0 z1 k. _8 y2 b return;6 @2 d/ q) m+ n. u4 r+ m
}
8 h F: g6 A, Y. A m_Item[m_dwPos].nIndex = nIndex;
5 ]6 R9 c' z. b m_Item[m_dwPos].dwId = m_dwPos;
5 q) V3 a1 X) _6 B( H7 Y& u- u& V m_dwPos++;
" [& C$ j, E1 o3 a}4 r" H" _0 ~) x* _% B' B1 U3 n# i
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 p3 Y! o* c* W' s* U{
! a2 g9 b9 s. U' h' k3 U( z% P for (int i=0;i<MAX_INVENTORY;i++)
& k+ h4 N w6 i3 h$ A {
' P6 |. n9 f' ?' b1 N1 y( I0 E if (m_Item.dwId == dwId)
* P0 L+ z6 q" o* b0 R {
7 K! Q. I; _+ {* d1 p! f9 b return m_Item.nIndex;
0 ~. F: U' X! Z: X+ B }
E4 z6 ^- _6 B }
& x" v6 U0 S2 u return 255;
1 K& _0 F/ f5 z( `- a}+ |4 f0 m9 N& p- V& l/ [2 `: X) Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ T+ X. N4 v, B9 M R4 h2 l
{$ f( S% b# s( S4 t2 G) }$ Q. Z
BYTE nTmp = 0;) b. {9 L" g. Y2 \
bool bDest = false,bSrc = false;' b9 M3 D% R& P. t- y/ P
for (int i=0;i<MAX_INVENTORY;i++)" S5 L' Y& l G
{
. }' |9 b/ n, W ~( Q9 }9 l& W! i$ q if (dwSrcId == m_Item.dwId)
0 K: {# y% m( z V* c: r" ^# V {4 t; \' n/ Q4 h' v
//id相等 则 改变对应的dest和src
# G4 p5 S) u# D" ~% s nTmp = m_Item.nIndex;
3 F1 J& `3 f# |5 G m_Item.nIndex = dest;& h1 m' s2 v& M6 j' ^) k+ z
}8 ?+ X1 h8 Z% Q
}$ @. ~3 e# E. Y2 y ~
//临时数据保存完毕,交换开始% P* M" s* z& b9 i
for (int i=0;i<MAX_INVENTORY;i++)6 f% v, q- E3 Q; [! x
{
# a" C; p( H, T* p if (dest == m_Item.nIndex)
% H2 g$ H4 f1 Z( R7 I* m0 D8 q {
+ |( B0 _0 B7 p% m' Y //id相等 则 改变对应的dest和src
; \: @, k$ }5 `/ N) V m_Item.nIndex = nTmp;$ X9 v( S9 u6 J" D% f& ~" m2 I
}
: x& N% j; T- ]! y }
- Y/ N, u2 o. \. ^% \}* J7 i4 Y }( W9 ^3 i! c* L
};( s2 P/ k u. V: }( p, I1 w- p
-------------------------------------------------------------------------
; [: O- e6 k: s$ ~8 T/ i依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 g; `% z, ]# X8 J; G; y# a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. Y- ]$ y1 X; l$ n6 a/ p) B
紧靠其上添加:! A& N, s8 S0 w) b$ p, P
if( pWndBase == &m_wndMenu )
$ T6 X3 T9 _; k1 b{2 F3 K& q% F2 l# L O5 F& T! i
switch( nID )
$ R7 D. y/ o" ~2 W3 P' ^ {
$ A3 B! i+ ~( {; t; k* c4 C case 2:
4 z$ g# H4 A4 o1 ?8 N& `1 Y {/ O3 Z+ D0 s: a: k6 P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 K( }! T4 i+ f8 o* O) U
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( \, A9 U m9 _ {9 E9 [1 O8 s/ `: V6 {) Q+ _
break;
# y0 B, W$ X3 k; Z+ Z }
: a) b. O; E$ F# a; D5 B6 _1 i9 ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& {2 k* c4 ]7 ~/ K
{1 s. z" K! k* h& \! ^- l. p1 }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Q; {2 @: C8 } if( !pItemElem )
6 S" M" J9 _% S6 m continue;
. E" K1 J& L8 T! j/ o if(pItemElem->GetExtra() > 0)
( Y/ d6 w$ z, i* x% R* p continue;
3 _3 [/ G' E' q. E/ ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % X; y/ N! k v# r
continue;
. A8 s" D) p4 |2 n& } if( g_pPlayer->IsUsing( pItemElem ) )
, Q% i* O, Q$ M2 p3 |+ ~6 W: x continue;* R( D& F0 A6 X
if( pItemElem->IsUndestructable() == TRUE )" K9 M9 Q6 j3 a0 g" K7 G8 t
{- C& m! w8 D0 w- Y/ g& @4 P8 {
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ t3 R( C% [5 w* [ continue;# D: p) y0 o: J; H
}8 B8 c) j2 ?8 W% E0 g1 j& i. b
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 q7 ]" c) S* g& z/ b9 f
}
* }7 K5 w1 |. D7 e- Q3 c break;, o; Z+ O1 |: i' {
}
% p* a6 y @) Q4 l3 M1 n. |1 g: o case 1:2 |* p2 A- N0 I3 O, |1 V$ X
{
. [7 \' q+ X& M) H6 k8 I //整理背包
0 H3 Q% M7 |; U# n' _ //////////////////////////////////////////////////////////////////////////
4 _; K: K3 l# K) f: v1 | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ {! P! Y. ^3 j. i" i! y //////////////////////////////////////////////////////////////////////////3 k( w1 C% Y2 k! x! a9 s, i
//////////////////////////////////////////////////////////////////////////0 z% v) c+ f& o+ G. v* |
CInventorySort* pInvSort = new CInventorySort;
( ~( \' a3 V+ D/ Z, m$ N vector <sItem> vItem;
0 [1 n+ u5 G7 t vItem.resize(MAX_INVENTORY);//初始化大小
! p" g; C3 p. Z* S$ ` //////////////////////////////////////////////////////////////////////////
( m( L$ S# D' b* P //填充数据% y |3 ~# E: B e {' [
for (int i=0;i<MAX_INVENTORY;i++)! n p6 b! Z7 \) M% l3 Z3 o
{8 Z$ `/ l$ @2 y8 ]- N" w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 B& w& ^/ A; v6 O$ Q if (!pItemElem)
. Q9 g' E$ ~; A; E+ D {
4 r0 c% M- t# q) l# o3 a$ m vItem.dwKind2 = 0xffffffff;3 X8 I! x4 Z) K! o# ]
vItem.dwItemId = 0xffffffff;
" |) S/ A9 W* w4 I+ _3 e vItem.nIndex = i;
6 l& l- ^$ X, c& Q }else {8 _: ^; n/ V" k
ItemProp* pProp = pItemElem->GetProp();
& b' F: f8 w1 Z" N! G* G/ m! v! Y/ a vItem.dwKind2 = pProp->dwItemKind2;; b% ^$ R% a% Y9 _
vItem.dwItemId = pItemElem->m_dwItemId; @3 g6 n2 }0 t* m. a
vItem.nIndex = i;- X; S' n- {. R9 r3 ^; W
}+ ]* a4 i l: y" O1 \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" h( v& T' n+ B2 R, M$ N
}
2 k6 Y% J2 F/ F3 S5 a0 T //////////////////////////////////////////////////////////////////////////
; C9 e' J/ T! C' _ sort(vItem.begin(),vItem.end());//排序
; s# P! B/ F1 o) f: E //////////////////////////////////////////////////////////////////////////
6 z# P$ Y4 e, |3 v) J //交换
: Y: G s) t0 B1 y/ y: ^ for (size_t i=0;i<vItem.size();i++); p9 L$ i' V8 o) h- M7 p D: S' {
{
' @0 {# G2 _* `. ~3 X; q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ h9 h' j8 y- t6 J. D( X pInvSort->Add(vItem.nIndex);9 B8 \1 Q- j5 L6 R
}& a/ F: P) z+ _# D+ ~
BYTE nDestPos = 0;
! T. J& {9 Q* e# A for (int i=0;i<MAX_INVENTORY;i++). c2 Z* |) O, x
{3 V7 N' L. m4 V9 B! K* r8 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, @2 A X) v/ H& h) Y" d$ U, w if (pItemElem)
4 k* G( w' v' p% \$ R7 Z {3 Z, m4 G- c0 w1 I. _& K. N7 p1 D- Z
if (IsUsingItem(pItemElem))( [. c0 B! ~1 Y. N
{
: Y) y7 ^0 B4 [- } //这个位置无法放- W0 ?. l l0 X7 a9 i4 M/ N
nDestPos++;7 w5 s; a2 _7 P( M8 S
}
" H- N* u% L) N }
5 K+ q+ Q9 e) u5 B4 }. e5 _' B BYTE nSrc = pInvSort->GetItemSrc(i);
( x3 c! O+ Y3 X" u2 H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! ?: m( v3 X# }# g6 I if (pItemElem)
. W1 p5 }" b# X5 ? {; i% r/ @" }+ j* E4 L5 N: O2 v! x' a
if (IsUsingItem(pItemElem))
. Z" y# J0 B3 i% C* e& b9 u0 O: K% H {# E! P/ y% [; I3 M- Y& S! C+ }
//这个道具无法移动,跳过$ h* I' l/ @" D U1 {- V2 j- a
continue;
( T* y: A) V! ^( v& {& u+ x }
1 F$ R$ y# e _' t6 z- F }else{6 n3 l4 F4 D2 ` L' d/ B
//空位置 不用动
# L7 L$ i! t" `3 Z continue;
+ T8 N; |/ T" |+ g }
) D+ k* ?: c; i* R //////////////////////////////////////////////////////////////////////////
8 d, R0 v! C9 ]/ v8 E. ]# H3 f0 s* A //开始移动
$ W c3 t1 i) C: c+ `' E& K4 O if (nSrc == nDestPos)
s4 \4 X) F' B% O2 p0 c/ C% ?1 J {
! W0 D" X5 v: ? //原地不动8 P; U5 `: ~8 h5 G. I& ]" Y
nDestPos++;1 V: b% C/ S7 I) {) b% o$ M* a
continue;# [. R; L1 p+ V4 d
}$ f4 x) n( S+ V( M2 f! j
pInvSort->MoveItem(i,nDestPos);
6 l4 _6 _1 p6 o6 P5 N$ g* u5 [; o g_DPlay.SendMoveItem(0,nSrc,nDestPos);% ?5 l! P2 v! C& t3 z1 l/ X& ~6 @4 b
Sleep(5);
! ?2 L% T+ H. Y' ~4 r# J //Error("移动 - %d->%d",nSrc,nDestPos);
. h5 }( [, [8 k- G. J( A& I nDestPos++;
/ T, s2 @( I' Z0 N. x% }6 p4 s, u$ h' u }$ I* _* q& n& [
//取第一个元素的信息
. o" s7 }" v( }% ]; p/ L6 y /*
% a. S1 n7 O! [: I9 L if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). C ^ T( `* R* [( D$ F
{
5 H8 f9 o) v- G) c I, J Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 I) r" S3 K; }# N) D2 x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* W. ]$ @ {5 } }
9 `. W- y: C& M0 v9 H! u7 | */
: K) K, K k) A //////////////////////////////////////////////////////////////////////////
* _/ y# s7 t, w- N4 d8 `2 Q break;
4 J0 e1 z6 \ y1 i; g1 b }- S ?) m3 a, Y: Z5 s- p
} 3 \/ B. |2 }% D/ ~, y9 m: B1 }
}
1 {7 ^4 h! Q& b2 x6 N7 |m_wndMenu.SetVisible(FALSE);
5 n/ y' |4 X2 U k
/ P/ K9 q+ F7 P5 e8 M2 B$ o4 @--------------------------------------------------------------------------------------------------------
( D' D0 ~4 Q& k* {0 p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 ^/ I+ R( c" e1 Y4 g{
& i4 I6 T6 D2 OBaseMouseCursor();
- @0 F5 S6 U, I- R3 m6 n6 M) q}
& s$ R' z$ x7 ~* M) Y _$ v7 E: p在其下添加:$ F) w2 v- m b5 \) `
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! j8 H% M {. v$ R i6 m{
& }" @0 s, q/ x! J# M( Lm_wndMenu.DeleteAllMenu();) N* ]6 c) T A& _
m_wndMenu.CreateMenu(this);
1 t1 v( H: F0 W' G; a( y2 O. ?m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& d6 n- b* C: s' F+ O7 b; j, N
, {2 I" a4 k/ c {4 S; Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# p+ G* ]% d' }! l) U: J2 Z# f{1 z8 R$ Q( m* a1 o! {4 D6 ?
//P以上级别才可以删除所有道具8 N; W3 L8 f* ~3 q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 G& a) O) s/ C/ V6 y5 W' @}* S3 c/ V! v: {& F8 ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 } h8 [9 R2 k# Q: @1 ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 ~% v3 h, L! _% e
m_wndMenu.SetFocus();
% d0 Q: o6 d$ {4 ]( B( |; Z+ p c. T" ~}
/ ^& |% ?3 o; e! A' N------------------------------------------------------------------------------------------------------------ a1 ^+ j: Y, e, H
************************* U. ]) K) ]3 d
WndField.h文件
2 Y3 k2 k. J3 ~& I( V*************************
4 r! `; J- a/ L2 v搜索:BOOL m_bReport;
5 P7 o( T" c+ o0 Y _1 z其后添加:
4 y1 `; B7 ` c/ p+ m% X4 ZCWndMenu m_wndMenu;
2 `' A- a" p8 _) t$ o W) p- p6 o! @/ }" a搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( Z' [: T( l6 J, y v9 p% W
其后添加:
9 C- g: f% S) E6 U; m' Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ ]. O7 s0 r5 J+ J. e7 Z5 F3 i4 [- _! i1 D6 ~4 Y6 k# E! ]) N, U
Z+ N- u( ]. R9 t) Q |
|