|
|
源文件中_Interface文件夹下WndField.cpp文件. p9 H [7 Q: ? a/ U
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& L& [& D+ Z4 n8 s8 _
% Z3 _" c5 j) G3 ?' Q U' ~2 sstruct sItem0 K* F; H. E6 A& [% S- P
{2 A1 Y- [- f, p6 q) Z/ |# Z7 O6 {$ ~
DWORD dwId;0 K# s7 U, g/ x1 t" J* I P- [& W
DWORD dwKind2;6 j7 N7 B" ^- F# W$ |) K
DWORD dwItemId;
$ x6 L: y; \; z: SBYTE nIndex;- K" V& X3 G: q" _4 @ u0 j
sItem(){
( x1 h% s9 Y; n, O/ q6 O dwId = dwKind2 = dwItemId = nIndex = 0;/ H! o# ^. E- D U$ O% K+ n
}
0 v. k' p8 U3 @1 _: hbool operator < (const sItem p2)3 E1 n! N) b4 ^' {# o t
{$ I m9 i2 g0 X# x% @
if (dwKind2 == p2.dwKind2)0 ?3 A9 _1 G" D" ]% Y
{
3 {1 ^, E7 I0 g return dwItemId < p2.dwItemId;
0 \6 U9 e7 c( [0 O" f+ w }else{
# n0 E* S1 _" [) ~. q return dwKind2 < p2.dwKind2;! _; M; C& H. {6 b# a# O: D( Z
}
1 | u% R, k1 C$ k( j$ |; M4 x}
5 o6 B i5 O+ |% E" T};
/ G& a2 T5 u2 |. T8 c7 Jclass CInventorySort
& _9 r. U# c2 ^{7 ~4 c; `$ z0 ~& Y8 y$ u
public:& {# K0 O0 O$ ^7 }' G9 [
CInventorySort()1 N# \# g+ `0 z1 F$ `( E1 \ _
{; N, d8 n/ a+ J6 o
m_dwPos = 0;& o; k8 l( T1 H! p! E
}, Y/ i7 G/ y: O# {" e
~CInventorySort(){}
) ?5 J5 F5 `+ X" v* f9 V( Iprivate:9 m0 B8 J# \. |/ L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( D% _! r- J( w: I" b9 }- s
DWORD m_dwPos;
. l$ m' U, `# gpublic:
- D y7 D; I% \8 Z5 o* ^void Add(BYTE nIndex)
9 z; i( ]. r( j7 T& W/ w/ }1 |{
+ ?# H5 a0 j0 B6 C if (m_dwPos >= MAX_INVENTORY)
$ h. n9 B6 Q- G' _ {
% U" p6 M/ Z, O1 _: |4 E return;
9 l7 z H' B+ m* k }6 R3 p, {& |9 i4 Z$ ?' I
m_Item[m_dwPos].nIndex = nIndex;
% T; C; v; k5 x% s1 R m_Item[m_dwPos].dwId = m_dwPos;" v5 u: }: X* L; t {8 n7 X
m_dwPos++;) ], l2 }1 Z6 Q# l
}
7 x5 i( m5 P9 CBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! i3 v% k. }6 F, U
{9 l- _9 [8 ~2 q+ K. p8 S# x
for (int i=0;i<MAX_INVENTORY;i++)
9 F6 E) F! v# _) F1 {& p0 ~ {
' I; R. o; q) c/ x3 X0 Z( ?! u if (m_Item.dwId == dwId)$ D; C: e6 B/ t N7 m- f1 k
{
+ J8 V# K$ g. Z9 T$ A9 ]' ~' D m return m_Item.nIndex;! [! E$ P! ?8 V( b
}) ^( A. o5 r2 W% Q& T4 X/ d
}1 {9 d* I6 Z& X* ~- `
return 255;! Q# k3 w0 r/ ?. a5 H, T1 ?3 G
}
" N6 }2 l. Y5 j0 yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. y$ C* x& _1 w! S3 b
{# T* Z$ x$ X N! q0 W% v6 V) q5 x
BYTE nTmp = 0;$ |. F4 \7 u5 m; {# T% O/ e
bool bDest = false,bSrc = false;$ g3 Q k a* @* p0 ~
for (int i=0;i<MAX_INVENTORY;i++)
6 Z( g- j/ M7 ~- s5 b% j {
5 n8 J2 ?/ M% I# P: z$ Y if (dwSrcId == m_Item.dwId)
; Y/ d* p. Z9 d6 ~; R. V9 k" V0 T {
- f& C) k. P6 m //id相等 则 改变对应的dest和src7 J* L* F' Y+ Y2 P' ?1 ^
nTmp = m_Item.nIndex;
9 H( v* h9 x& R3 W, p8 b9 E m_Item.nIndex = dest;! K2 U( B! q0 }! U6 w/ u
}
5 Z/ F. P& m# r( s; Z3 K: F }
^, _# h9 l, t //临时数据保存完毕,交换开始. v- h. U# \0 ~- ?( b5 M
for (int i=0;i<MAX_INVENTORY;i++)
- E) m; G& o! Q {
" S l9 R S( n; D0 X6 T/ P if (dest == m_Item.nIndex)
1 Z* {, q( y* _. [ {
8 M: z7 b! |$ a; M //id相等 则 改变对应的dest和src
# u( @; H2 `3 }7 Q! D% s. m5 S m_Item.nIndex = nTmp;
3 R9 r/ P2 U. i2 r5 h+ |1 D! B0 X" s }0 t1 x6 R8 h, l3 { ]7 u D: N/ D
}- w" m7 e# C7 C- o6 S: R
}5 P' H/ e4 h r! ?
};
' B/ l; z. m) W+ {1 Z-------------------------------------------------------------------------5 r2 @! k7 I0 ]3 q0 |/ o/ R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 w( B- v, o( z' f- X+ V, I* t搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) g' o7 ^% |* f! c
紧靠其上添加:
: @( P2 ~, H uif( pWndBase == &m_wndMenu )
8 p: G0 e/ e, K: h% h7 d{
; ~( S/ d Q: C6 Y switch( nID )
5 E; \* ~% t" ^8 m {3 T, W% t s! _8 T8 s0 k# I
case 2:4 y, ?5 H8 f9 Y# {7 E
{
8 e2 `5 B- U5 N* ~: D; \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- ^) z! n" k/ J) h4 d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- d' ]2 {6 Z5 E Y3 `3 X
{
& d/ K* v% `* Y, s break;2 t! E$ N4 L0 H' ]0 X S/ h
}6 f6 X* z6 i+ Z" S; |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* h R* u" v% q4 x* W" g w% ~
{
' E! X: G, J$ b5 k7 T8 J( y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 N2 k" j' ^8 Y2 ~0 N
if( !pItemElem )
. b9 C$ `# w. {( Z% H( K continue;( l6 x1 g9 N- }4 f' r5 U9 X5 j
if(pItemElem->GetExtra() > 0)
8 i4 A* V- J$ R3 V$ a; a k) r! b continue;
4 p3 T Z6 n2 l$ o if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 e1 v! |' T0 L$ F3 j
continue;4 V7 O9 g' e, G* ~, w
if( g_pPlayer->IsUsing( pItemElem ) )# @9 U* T, f ]- V" z
continue;
% m# W& U% m |1 I9 ^ if( pItemElem->IsUndestructable() == TRUE )
4 k: |7 B; [# t: x9 ]# o {
6 {9 j8 Q" y x0 a9 W- { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 l9 s' r: b2 p/ { continue;) Q9 j( a+ X7 f' r
}7 w& H: J* ]+ |# T2 `3 p! w$ p
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 w6 o# @( s. S5 r, H! s9 I }
3 p' A4 A8 w; U, \/ O Q break;) p2 `/ K9 F; ]. G; C6 g3 J7 _- T1 \
}6 b6 O' e, z& y! f( ]$ b! R" L
case 1:! r Y1 Z/ @/ h7 f8 {" F
{: l* k$ ^9 w' @, u, a" q- f7 L
//整理背包0 [# F2 L( ^4 l! d/ {( T( d
//////////////////////////////////////////////////////////////////////////
( g( ?- L3 U' B$ w7 F- I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 p; b+ I T8 E( M& w- @# I! Y //////////////////////////////////////////////////////////////////////////
; t% D/ S. z3 o f //////////////////////////////////////////////////////////////////////////; X; c( y, R9 v" q3 `
CInventorySort* pInvSort = new CInventorySort;& Y1 b c# B- [, x, w4 [" B
vector <sItem> vItem;
3 O( y5 a$ R8 J- n: T$ n vItem.resize(MAX_INVENTORY);//初始化大小; C0 u' g& W/ D" A
//////////////////////////////////////////////////////////////////////////1 T7 v% U _, d) o
//填充数据
( ]! M3 w& v( I for (int i=0;i<MAX_INVENTORY;i++)' F' F9 F) U5 o3 T& ^
{& ^4 Y3 z+ }& R! V2 i3 V. r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ E9 j; \9 q6 o: y+ r# N if (!pItemElem)
6 s# g7 r; ~3 ?5 Z) ?+ f1 E {
4 A8 Z: g* C* a vItem.dwKind2 = 0xffffffff;: k% d. x; y J& o, P4 [5 o
vItem.dwItemId = 0xffffffff;
8 C5 I0 ~$ `6 @# z1 S6 l, ^- G vItem.nIndex = i;! p6 _+ K6 H0 l: H
}else {
# Q9 g8 F' j/ S2 R ItemProp* pProp = pItemElem->GetProp();
' ]4 t2 i6 G( J" S0 a# L& n) H vItem.dwKind2 = pProp->dwItemKind2;. S6 w H" e: p) A9 p% `
vItem.dwItemId = pItemElem->m_dwItemId;
! t, ^7 s2 U- b+ A# z+ k& }4 [ vItem.nIndex = i;0 t) [7 M2 z8 f3 A& E
}3 N5 h: k$ @/ H4 [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- Y+ }0 ^ e# H( S% [3 A! p7 A }, n- A' I1 j0 U8 G
//////////////////////////////////////////////////////////////////////////6 x; ~, N& s9 b; y) ^1 _' R2 ^
sort(vItem.begin(),vItem.end());//排序
+ Y. g+ [" A5 L* U //////////////////////////////////////////////////////////////////////////
, D9 p: b6 k% f' o/ R //交换
' s9 P. ^0 b7 a for (size_t i=0;i<vItem.size();i++)
Q9 S* D- o8 C5 i! L+ @8 r {/ B; _; Z N$ o/ s2 Y2 }
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 M/ Y! T7 ?! A5 b* i, P$ z7 p pInvSort->Add(vItem.nIndex);& u( d% O* E4 {+ `
}
+ y( P8 g" ~! X5 H# D1 d8 G$ y BYTE nDestPos = 0;
1 Q& Z2 b n7 s# t5 |/ g for (int i=0;i<MAX_INVENTORY;i++): X% ?# N8 [' O; N0 V+ l% F
{
5 s6 g/ }( |$ D) }4 m3 s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* a% @; V" i" L7 N if (pItemElem)
3 S+ D7 P$ W" n6 ?9 U {
4 B9 [$ m! y7 M7 |6 K5 W if (IsUsingItem(pItemElem))
; U9 M0 P }! f {% v3 [% |+ e( R6 j" q
//这个位置无法放
' m; Y$ x3 ]1 y6 G4 Z B nDestPos++;) Y8 H# H! p5 {% M, @3 W! r
}
( ~% q1 L9 }7 u# w; Y4 S6 \ }
; C9 ?* ?1 t4 j7 [+ O9 q- ^ BYTE nSrc = pInvSort->GetItemSrc(i);
+ t1 V8 F$ w- \6 q+ w, w. t0 \ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ U. F' O, `+ F1 y5 Q
if (pItemElem)
/ A- F7 l8 y* R2 O/ ~0 v g' U! _ {
3 j3 A3 u' L+ w if (IsUsingItem(pItemElem))7 J! x6 @ ]7 W5 k% I" O4 ~
{. n( N" S* `/ c
//这个道具无法移动,跳过- s- H, T2 |# h- H
continue;
: A$ ?, L/ \( ^# Y; l( E' [0 D }8 b2 S6 }- V* C8 Z
}else{3 l. |; N3 j& i9 z
//空位置 不用动7 Z% y# `. T1 U! l% H7 S
continue;! g" _) \1 i3 q" x% |
}
% }% c6 V. N: c ]8 C) `/ _ //////////////////////////////////////////////////////////////////////////
. }3 Z7 K' \8 {+ _' {; I9 s //开始移动
# Z7 u$ n, Z* C5 ^: ]4 r3 _9 ?6 X/ T if (nSrc == nDestPos)
4 O) U: R1 k8 U7 g* k, J: d {% P! e- m- u \+ r* Q( V" L6 m
//原地不动4 h& L. G( N( [6 f' S
nDestPos++;
: {) [7 N: u5 o5 m continue;* C; H9 b! U" Q" B. E
}
+ {9 }7 x( r1 v a pInvSort->MoveItem(i,nDestPos);
+ C8 s% Q/ m# B7 d7 I1 @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);) ~% J" A2 |% b+ u+ A& F% r5 m& ]
Sleep(5);
" Q! Y* G1 ~: v, S //Error("移动 - %d->%d",nSrc,nDestPos);7 j9 y3 Q# C+ n+ ^- t
nDestPos++;* k. D! N5 K7 \) N. H' w, w* w" G
}
* a6 K" E2 o& W# U //取第一个元素的信息$ A$ W% }. g1 [) u" ]( X
/*8 s) P& V& U4 n4 M! V2 R
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 Q" j) I. z: t {
2 y& }, R! _/ D5 {4 t9 ^ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# b, u* p$ S& i `4 I g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" |7 J; ?7 W- A
}" Y6 l) a3 d" t4 @! V
*// n5 \8 m; V' [. y/ G
//////////////////////////////////////////////////////////////////////////$ v. v& w& A' `
break;
2 w3 S; ~4 `5 p' u0 P5 M; i }4 h$ W: Y5 K1 o. O5 D& E7 _+ q% H
}
$ X7 W0 k: x: Y$ |+ l& U}
, s: S9 [5 K7 K8 c' _8 `m_wndMenu.SetVisible(FALSE);# R' M+ \! I$ o- S* I
. h/ |6 A* I: V) S" y. h, m. k-------------------------------------------------------------------------------------------------------- L9 G. r6 Q6 i& x# A P9 B/ U$ T, q1 |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 u7 C- ?7 ]" n& q& z% M: E{
, @+ I9 G' K! |" ]/ b) {1 bBaseMouseCursor();) u: @$ ?& c2 Z; i
}# L+ E3 z/ D3 e7 }! j t3 X
在其下添加:/ Q* X+ q2 [5 i+ \( S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): W& S7 E7 ~9 P; _
{ I$ X: O: g" s5 E* w* q
m_wndMenu.DeleteAllMenu();: {7 s* ]( ]6 L1 K1 i: z* G( I
m_wndMenu.CreateMenu(this);6 m7 X6 E0 N$ \" I8 t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! U: A3 O9 R$ L0 h1 L
( d) u3 j2 ^8 |( Z7 D6 p* ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); T6 {4 Y: S9 l% ~! }) w+ ]( ?, A
{
4 }3 |1 {4 ^- B6 I& o: Z4 p //P以上级别才可以删除所有道具
2 V% w3 A# Y( d7 W) n3 @- G m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ B& p4 q& k/ K# N+ p}) p [( ] M5 f; h) A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 Q" y6 f3 ?1 |' M, T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 W7 x: b, f7 g. d4 ^m_wndMenu.SetFocus();# n' V: g7 h- v b! H. }6 I
}. ~) u5 `, B u, X$ C
------------------------------------------------------------------------------------------------------------
2 n2 k, W" V0 r c0 V*************************9 f7 Y3 Q& Q1 ~9 N
WndField.h文件) f0 X; t$ [ K) \ q
*************************
* l, n( [( t$ u. ^搜索:BOOL m_bReport;
6 {& P2 ~- R2 b. ]其后添加:% {- ~( f# Q4 F- M8 `, R
CWndMenu m_wndMenu;5 R# z# g( W4 B) J% X* l2 r- w, k' Y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 m1 _% H2 M- i* w/ n- W
其后添加:6 \4 g+ L7 X( `
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 p+ I1 F9 y: p4 w2 V5 o
+ e4 _7 s# V! _+ r4 m1 U& Y! ~; n$ a# d7 p) |) g
|
|