|
|
源文件中_Interface文件夹下WndField.cpp文件
+ c% N$ d2 `, f. Q5 t+ {+ l7 d. r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; v5 M4 h5 o% C- B9 u4 D% j w, v! D1 P
struct sItem+ r; ?% D l! M/ }" h6 [6 i
{
, } x4 t5 C% xDWORD dwId;0 W) K* O0 y# O# Q; [
DWORD dwKind2;/ \6 X# V6 e F! c- B* M8 e3 D
DWORD dwItemId;
! s1 m a, _$ l6 ]% BBYTE nIndex;
0 f$ n* l6 l- g% H- }sItem(){# a* ?1 b A% F" w0 E5 D
dwId = dwKind2 = dwItemId = nIndex = 0;2 L5 |4 O$ U$ T& Z3 N6 o
}; W7 p0 k/ m$ D: @! r0 m
bool operator < (const sItem p2)/ s9 u @" m6 |: i9 H/ i
{% `1 C' U f8 R/ M
if (dwKind2 == p2.dwKind2)5 V$ Y. Z1 s' F$ G& w0 a9 }
{- z$ M# s n$ ~: R6 Y5 q0 u
return dwItemId < p2.dwItemId;( u# }. _' o6 R1 M
}else{2 T2 l. ]9 V& |. D7 E
return dwKind2 < p2.dwKind2;9 t' O. ]0 `* G& m
}7 j; b4 I$ q; L
}. F1 P' D `$ s$ ?+ K! W, J% e
};
+ o, y* C; U9 b _class CInventorySort
P6 z, g1 F1 n9 h{+ I7 V5 ?" N% P0 p5 F$ R- r& F. v
public:
0 Y- J# K+ K l! I' HCInventorySort()5 ~* {* [0 }% w! k; D1 t
{- U$ H1 Y: ?0 _3 @
m_dwPos = 0;; O. F; t; {3 }2 D" J2 H M4 }
}& E( x# i/ o% Y6 G
~CInventorySort(){}! _9 i1 A0 S4 C! J
private:
: z( H& t2 b" R* |: |# MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 d+ Z( K3 R/ T; P8 d
DWORD m_dwPos;
9 o4 ^' {% ~4 d+ `0 J a& J& U# U, Apublic:
1 |! [ \+ Z2 l4 G& Pvoid Add(BYTE nIndex)+ S1 J2 j0 ~$ c' S: u
{! W4 B9 {" K+ J4 M* J4 t
if (m_dwPos >= MAX_INVENTORY)
, G' C c) v; d/ @. V: X1 L {
# B1 m" c+ k) p! f5 ^ return;" M" {. x, G" B6 ]# e
}
& H6 C: J; q- Q- i- W m_Item[m_dwPos].nIndex = nIndex;
% u7 [2 ^% a! q3 z' a( I* s m_Item[m_dwPos].dwId = m_dwPos;
& `( V. o2 F3 I! u6 t m_dwPos++;$ `' Q. u: q) H+ U& x$ u, Z
}; Y/ a# v0 y( v! N3 V& u. O1 @
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% B" r" f( S- Z/ [{
% i1 X" ~* X1 M# r for (int i=0;i<MAX_INVENTORY;i++). @' H3 N& c$ C
{" @ G% z" E' e+ }2 E4 e
if (m_Item.dwId == dwId)
0 e' Q2 c; i9 K F {* G( y( B1 d# `+ \
return m_Item.nIndex;8 B. o+ @5 f' y! N
}
& X. S& x5 C7 d7 G: Z }! n; D! U" E0 m; [
return 255;
! X3 H9 G6 w _: Y/ t: s7 V7 F5 U8 u}. E( t' O' l; ~; X- ^ u* N
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ ?! L d: F: J
{9 S5 f4 B2 \& u5 Z) ~) b
BYTE nTmp = 0;
4 \& W4 \: k' x+ ?. Z& H bool bDest = false,bSrc = false;
# t4 D- T7 i6 a for (int i=0;i<MAX_INVENTORY;i++)
& s ?# m% _0 U! C2 v% ]( I* [, c {! K) Z( k# |/ g* ?$ G) Y
if (dwSrcId == m_Item.dwId)
4 k4 z* L; P$ C+ R1 e, N" L {7 ?$ x6 i6 f; e8 k' J
//id相等 则 改变对应的dest和src
' l$ Y/ n( Z: }, ?& s nTmp = m_Item.nIndex;' b7 l" ?" k9 A) z Y
m_Item.nIndex = dest;
/ v# ~$ @& ~6 X7 Z }4 J* K1 [5 ]) s1 c' I
}0 G# d# h6 W! Z/ M$ h. p( K
//临时数据保存完毕,交换开始
' X' |! D( Z1 x* ]0 d for (int i=0;i<MAX_INVENTORY;i++)
7 a/ _5 K5 |. ? { R! l% u) `5 C+ a
if (dest == m_Item.nIndex)
! X! z' Z" x. u, y' x& ]0 l {
, l: O3 J: C9 A% O/ C //id相等 则 改变对应的dest和src
t: a+ X) z' Y. q% o# @ m_Item.nIndex = nTmp;" ]9 K' k$ R: ?8 l- K$ l
}% S6 p* b# v4 A* m
}$ }( v8 f/ ~% E6 z8 g( [
}
( o( O# Z4 u# k4 I+ @};- w: \' S4 n- j( z
-------------------------------------------------------------------------9 t/ M" y7 _- Y I: m
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& [1 s5 j9 B3 q$ A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. F. h1 U8 \7 D% r# @
紧靠其上添加:
/ r! Q# {. ^5 S/ }- eif( pWndBase == &m_wndMenu )
; c/ p1 q# t1 k8 M- {* a{
6 f; r5 w( s/ ` G% j5 x& Y$ g' P switch( nID )
# c( X+ [/ N! Y- \; m) [ {1 j1 q# Y5 V6 r+ K3 O5 M
case 2:
; Q, l- A v1 \ {1 i6 v0 h8 M" O6 X; S( e
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' m7 P* g, D: F1 M1 ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" W1 X# d! M8 H {
- _, e9 `, j9 s1 E- C break;1 S. o7 a5 E" i0 |8 `+ _
}
+ N" L2 }: d8 u- o for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* B/ S4 u5 Z% V {
0 X! T8 \, Q; R! n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' Z3 V) L/ e+ ]; j4 ` if( !pItemElem )
: {. z0 x4 P- b9 j continue;( }. f) U& ^2 ^
if(pItemElem->GetExtra() > 0)
" R- G" p$ J; W# d continue;
8 Q( H. o% F. g6 d* o' b8 l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# Q4 `* }1 z' c% m, { continue;
+ P" E2 V, z2 f; C if( g_pPlayer->IsUsing( pItemElem ) )
9 A. Z) F8 m# I0 | continue;4 b+ v) U4 T0 d" z
if( pItemElem->IsUndestructable() == TRUE )
# v! f* B9 J, _% d {
" Z% [& s% T7 p, v& W4 ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 y6 {! s3 z0 ~, ~. V* i
continue;4 e/ N/ E0 F* c* M. W+ V
}
* i! Q" x! O S9 }/ X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 n4 i# J8 n( f4 T6 p1 t
}: @% u; x4 ^ U0 d i! D( ]! m
break;0 H5 p/ |, R! ?# j# S
}
; Q8 Z3 w; Z$ o: Y; W( F case 1:
/ w c7 ~( P/ V! K( o; P {" g5 U T7 P* P6 ^1 J3 ^! s
//整理背包
8 ~9 @" a8 Z% U //////////////////////////////////////////////////////////////////////////
! ]3 x g0 M/ f4 w; A //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 ~4 U! o) d* Y1 w( Z* c& z
//////////////////////////////////////////////////////////////////////////# P* n) J9 p6 s* E9 W
//////////////////////////////////////////////////////////////////////////. `# p3 D7 E# U$ ?& u
CInventorySort* pInvSort = new CInventorySort;
' @7 ^+ ^( ]0 L& { l; }: I9 w vector <sItem> vItem;- f1 q3 ^# l4 ~; I9 h
vItem.resize(MAX_INVENTORY);//初始化大小- F* O3 y7 S4 d+ B$ g2 j
//////////////////////////////////////////////////////////////////////////
! `' X5 Q3 A4 G //填充数据' U* l- Z2 [- @/ _4 u- @
for (int i=0;i<MAX_INVENTORY;i++)- n& R7 n8 O$ G) b) C
{. C7 x" m$ B1 s* |9 H/ s7 \; `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; H( h& w- ~- ?0 Z! f2 n, B
if (!pItemElem)
# Z7 f3 W: \* |" K; A, N {
1 p g/ P) F h' c# v7 X vItem.dwKind2 = 0xffffffff;
o) x" R/ }3 O vItem.dwItemId = 0xffffffff;
1 R; j' E3 i' A. e5 _3 V( E" Y, S vItem.nIndex = i;
2 p( G! O! e" G/ m+ H }else {( j( q: s# e$ h8 c- M1 {3 ^
ItemProp* pProp = pItemElem->GetProp();& y, x ^+ u1 s* o! e
vItem.dwKind2 = pProp->dwItemKind2;$ O; _# Q/ u0 s- r1 N% g
vItem.dwItemId = pItemElem->m_dwItemId;! Q: w% A/ w0 a( H
vItem.nIndex = i;
& k, {/ m4 A) g( \: g& ^' s }
3 u: ]$ B l, x( U' h3 S D4 X& x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ ?. ^5 ~& p3 ~* L( \ }/ I- {# i* l- ~6 w: X2 H& [# q
//////////////////////////////////////////////////////////////////////////
4 F- N8 a/ w, d+ K+ n sort(vItem.begin(),vItem.end());//排序
% r+ ?( J, d O' k1 `; W //////////////////////////////////////////////////////////////////////////) Q* \2 m9 L; A
//交换
, o6 O4 J1 v! k4 \3 U9 m for (size_t i=0;i<vItem.size();i++)
( n9 c0 E7 I- S# _ u) Z0 I { I7 F$ _: ~+ y9 C: ?. m2 @# s3 w
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ m! N+ j5 ` r" ^( {9 A
pInvSort->Add(vItem.nIndex);! ^* t: p. ~; d3 g! e6 w
}, S- g2 i) E% C# d, [ P
BYTE nDestPos = 0;
7 V* l7 O! x: v# ? for (int i=0;i<MAX_INVENTORY;i++)" w) c7 v* `0 [4 b2 x7 t) J1 G/ e
{8 q8 r# N! n. a$ m3 _. r9 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 P- O/ ~9 w* L3 I$ R+ m0 N& X/ i
if (pItemElem)& R9 [& z7 U, h1 c: x! j
{/ N/ i% j; M' w3 k( Y
if (IsUsingItem(pItemElem))- M$ c% |) G0 u: ~
{ c- d D( x8 z
//这个位置无法放
; G. F$ `# U( L! D; D5 a2 d' a nDestPos++;
' u% u' X' ]; d( I) q: n! f( O) M. g }
. R! x6 b: O% D8 S: E& }: p0 @7 e/ P }! i: ~! I/ r4 I) ]8 ^# d
BYTE nSrc = pInvSort->GetItemSrc(i);# y0 O1 c7 n4 G* D
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* d" P8 Q! H6 n) `" [" Y" k
if (pItemElem)
, W: p" U6 D0 ]" M {
8 b7 h1 v D6 n) d* d7 h9 M if (IsUsingItem(pItemElem))
2 Q1 |5 v, w }" M+ s# O. H {. s. g4 \9 A" f9 [# A
//这个道具无法移动,跳过, \& s4 u' }! ~
continue;) x) H5 q/ t U* v
}
* |/ ~' ^: O0 {$ P }else{
y- x5 r y0 m! H/ F0 D0 V. g //空位置 不用动0 |& V, H& x' L$ a3 P
continue;
% e# k% i1 X' u) G+ U5 ]$ B }
! o, \ K/ t- R: E //////////////////////////////////////////////////////////////////////////
V1 a/ j* j( Q! J4 }* z+ m, W/ i //开始移动
- m/ Z5 O+ [( p4 s3 n6 |, h if (nSrc == nDestPos)
! D$ Z0 k$ ~/ ~# v2 G1 \ {
$ ^) Z5 D/ c9 B //原地不动
" F# Z6 {# l2 X& f/ ` nDestPos++;. ]2 m0 r. b9 _, J0 ?
continue;
5 {6 `4 e! V& D2 _% p1 m }
; r9 E- s) |9 ]1 p# _ pInvSort->MoveItem(i,nDestPos);- F9 L9 F) @- p/ W7 E
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) T4 m8 A( ?! c4 Y9 }: Y Sleep(5);7 v. u# q. X" h8 f2 J" P! l
//Error("移动 - %d->%d",nSrc,nDestPos);3 o/ h4 I) F: m' i' B W. B% ]
nDestPos++;
' }$ v! r7 |* J; `" J }
# x; p* \7 J" p n6 K9 L //取第一个元素的信息: _( k8 Y* J( Y a/ y' k
/*) s( W6 M0 N B& d! C
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 {* l1 @: X) i
{
7 _6 h" ~$ d) i8 H" l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; x2 [+ G8 Y. @& g, n3 L& s: { g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 y5 V) P# a" F3 Z% M }. p; N+ R% `$ C" J2 Z
*/6 m j/ V& ] Q3 c m1 \
//////////////////////////////////////////////////////////////////////////( g8 i$ I, T) {
break;4 g: |( b9 b) O9 b" N" q
}) u* h6 E" H2 T5 n, v. q+ t; \# N
} ( Y. Z; h2 _/ q
}
/ i0 ~, W* m, v& xm_wndMenu.SetVisible(FALSE);# ^$ v) @& M. s- K* c
" L$ O( w0 Q4 I% J! o--------------------------------------------------------------------------------------------------------! W+ q1 D; }* W# o9 d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 N: Q) i, ?4 X2 M( V' T0 S
{
4 v c2 S2 V5 ^& NBaseMouseCursor();
2 V8 @1 l3 v4 G N}- x' e7 }. x1 e! z, h3 m. Q1 y
在其下添加:! J3 n3 v" D( b0 @ C" f- T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ f& W6 R$ Y2 }{
! \4 q7 e! ?/ W% A+ L6 lm_wndMenu.DeleteAllMenu();
; R+ k, E- H3 C. u- H) z9 xm_wndMenu.CreateMenu(this);! `+ Q' H4 \% A& R
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# S6 n* T2 W1 _* _7 K: V$ B. _3 E7 i4 ?' c5 P$ W7 s/ Y8 U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 c5 H" o! {6 x' m+ A$ ?1 i{
* ^8 D2 i: [, R4 w' E$ y //P以上级别才可以删除所有道具. q2 {0 v0 h: Z j5 v3 |
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: I$ W. K3 v+ @; ^ j$ [7 l
}
. y! A2 D# _9 e3 m* l' ^m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); s0 z; y( V- [* z1 _6 r. {4 v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 l9 V7 a& | w' [m_wndMenu.SetFocus();
! b# v+ S: R8 O# i) ]; u}! k5 E+ Z( i) C8 c, m/ \7 g
------------------------------------------------------------------------------------------------------------
1 M n( ?- i; D: c- d1 X( q5 G*************************2 n8 r: K% `4 h' {8 }- w+ v
WndField.h文件
7 P P7 o5 ~* R- @4 q2 O& a+ x0 q*************************
* u5 W3 @' G# G) d) K搜索:BOOL m_bReport;
D8 a) }9 l* ~其后添加:
% `2 c* y. ]% t# ]* OCWndMenu m_wndMenu;8 V4 v0 d- g6 @* S* A" U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! |4 W! \4 w( F' J+ g9 `
其后添加:
9 R8 u7 }4 ]1 L; o- z# B' n7 Avirtual void OnRButtonUp(UINT nFlags, CPoint point);3 n! \$ m5 g. {1 Z2 v7 A% _
: V/ q5 n; g4 }
& Z, @1 _( A+ p* J
|
|