|
源文件中_Interface文件夹下WndField.cpp文件
: j+ U' T G7 N) z8 c搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, t" k/ A7 {# X8 ?1 ?4 k* m$ k* Z) o; R6 n
struct sItem
0 q+ C% k8 _# v6 @, ?1 R/ L{
* B; m9 z1 W+ A* xDWORD dwId;
9 b$ W9 x2 i0 n/ [. u0 |DWORD dwKind2;
! G5 [+ F$ c, j8 O" YDWORD dwItemId;
: H: l6 w% Y' pBYTE nIndex;5 s0 s7 M/ P$ s, Y- b
sItem(){: f0 v: N2 ~3 ]1 T
dwId = dwKind2 = dwItemId = nIndex = 0;
~$ d& u' O f}
1 A( ]' {/ J5 b* S4 c( A8 kbool operator < (const sItem p2) h, n3 I. b( H b l0 R% O
{
+ G1 S: R( `0 y, y6 V if (dwKind2 == p2.dwKind2)" E$ w& b( u4 |& {9 c5 X6 A/ ?
{
* T7 S, ~! ~7 B' P# ~2 T return dwItemId < p2.dwItemId;* a4 V3 V5 k9 R4 V( I1 y
}else{4 d: s1 @5 ?, W; G1 {7 d f
return dwKind2 < p2.dwKind2;5 C# I2 {; d) M. ]) G! a; L, x6 r
}! p, u! ]$ J# q% U% r/ ]8 m+ o
}6 w/ I4 `: y( _$ n9 s5 u) C7 I
};
7 N2 [' H R8 x; N9 Oclass CInventorySort @. D, O0 r. p7 ^
{& J0 f% S& T ^# M/ f
public:
) S/ T# l& g* h4 H4 I, xCInventorySort()- Q+ K W' g: k: M3 Q( i
{
8 N% ]# y$ W* o1 j m_dwPos = 0;
/ D) E t. u, K}
( V, S* s- I! Y3 I~CInventorySort(){}
$ i. n8 G) C7 \! N& E2 B1 Bprivate:6 E: f# t! t' _" y* ?0 y. m
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; c5 Z1 U; w6 m- ~% o/ SDWORD m_dwPos;
. K9 }3 e' g% p: [* j& r! Q7 g: Spublic:
: {5 [8 e5 d" g" Z7 nvoid Add(BYTE nIndex)
9 G) i9 E% M' k5 J{5 ~ J9 B* z+ L' ~" X" z& l
if (m_dwPos >= MAX_INVENTORY)9 ?0 m: v q5 ~' e1 g2 ]. [
{
4 d( d# R3 M1 u0 ~; R# a return;1 H0 ]& C5 v+ d
}
* u1 \8 l$ |, B0 t L: g m_Item[m_dwPos].nIndex = nIndex;( i4 K% A" E) Y. v
m_Item[m_dwPos].dwId = m_dwPos;
, u; b) t! B' Z# c: h4 R m_dwPos++;' \7 V: O0 }: ~5 ?4 G: ]' i
}
+ [$ Z4 ?- }3 _+ b2 y' C5 wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ m" T5 q$ W% G, J: n
{
6 d( x3 d- @' c& }5 H1 {( ^ for (int i=0;i<MAX_INVENTORY;i++)
8 X6 [* k) N2 C' a {
: J' t( W+ G# {1 t7 p" X4 ]& t if (m_Item.dwId == dwId)# H8 B1 Z4 h$ S+ g; U2 d# X+ u
{, _' W# Q! q" n- b- Y* l+ B
return m_Item.nIndex;
- J2 u; O) ]2 q( f$ r O6 R8 |8 o4 a5 n }7 R6 ?- A3 {/ ]& W- i
}+ r7 t0 v1 H' f. _1 k# V
return 255;, Q3 j! e7 k: X6 @
}
; x6 N2 W/ f) hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: c, j) ?4 u# P7 M8 h
{
6 J T3 ~- R6 m7 j* p8 s BYTE nTmp = 0;
$ x9 A& s, X V. K% V% { bool bDest = false,bSrc = false;
: f/ Y/ {/ Q3 b9 W for (int i=0;i<MAX_INVENTORY;i++)
2 A: J9 Y/ x, T {
, n% X) H, X7 D/ ^ if (dwSrcId == m_Item.dwId)$ A: V6 C2 L# O+ P2 ]8 B$ v! E
{5 b9 a% ~4 Y8 u0 W; I/ `, ~
//id相等 则 改变对应的dest和src
& _1 R2 Y' Z2 m1 C ?: E' ` nTmp = m_Item.nIndex;
7 j8 x& v5 E# n7 N( W, w2 y) U# C0 S m_Item.nIndex = dest;
( i* b$ ~4 A$ b) p }
4 U6 {5 M& C. K4 k% |1 ~; x1 O" Q5 Y }& L5 Q n3 H; ]
//临时数据保存完毕,交换开始2 z( V, A7 |! t
for (int i=0;i<MAX_INVENTORY;i++)
& j9 y% w6 Z) p2 {" L {% L$ k, o1 d% S* m
if (dest == m_Item.nIndex)
- q: u7 E( k( A% I: J; {; [ {2 K0 ^& A' @* T5 t/ y; v3 x6 }$ A9 ^- `
//id相等 则 改变对应的dest和src8 T9 K# [0 H2 W, _' q/ Y
m_Item.nIndex = nTmp;
1 Y2 ? c7 C) ?# w0 j, ? }
9 [( `4 G; ~; P }
1 [+ ?4 m+ T* B8 R+ V0 I! L}+ t7 L) e0 ]; ^- U, c0 Z% Q/ B
};
/ |) f, B2 C9 @-------------------------------------------------------------------------
( C0 t6 y* _/ W3 B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 R+ Z+ Y# M( j2 a/ H: i& I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. c( N' @+ {) e% m: Q
紧靠其上添加:- a- [/ E) I. o" y7 h7 ^. ]7 |
if( pWndBase == &m_wndMenu )( _4 L4 d8 j0 D O) s1 L: W& L
{
5 v9 Y+ n8 A0 W$ n% k+ D switch( nID )
0 u/ e& R9 ^0 B" t; B {% g6 a5 u, e3 N7 o* T" U9 k
case 2:
7 G4 k, ~- l! V {
; v% ]8 Y, C: d# g9 H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 d; ]+ A$ X4 V' e/ N7 g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 V9 R' Z P, f0 t! a- Y {- y" [- N/ R8 a% H- a' u8 A$ N
break;" y3 p: Z. R6 `& k6 w6 P( X
}
+ W8 X9 K( l* ?7 a4 A6 w0 O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% I/ M; {8 z* r+ ] G( F& Q( I/ I
{6 s- |: \7 r2 R- v% V8 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ a( |: u1 k, g) l4 w
if( !pItemElem )# A1 C4 p/ g3 b
continue;$ A7 v; I S( j4 D6 ?$ s) ]# i3 g. j* t
if(pItemElem->GetExtra() > 0)* Y% I/ F) a6 s! O5 e' l
continue;( Q; `& J3 g* \ r. p# m
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 r" t& W/ _! o3 E7 M! Q3 N
continue;
8 {, o9 m9 O9 P% W( C0 m9 V5 \" v# q if( g_pPlayer->IsUsing( pItemElem ) )9 j E% M; u) ?2 C9 Y1 g: v6 j
continue;8 W/ P% y, z0 W2 i0 z
if( pItemElem->IsUndestructable() == TRUE )
: I' h6 M4 [' {1 h. j {1 F+ V% N3 y4 y Y" A. R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; f8 L& S! _* ~+ ~5 |# |( Z
continue;
! E1 o8 O# k! ^0 p+ Z& P }
5 ?6 f# l5 M9 ?6 T) S8 c5 W, ` g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. N, d0 ?2 E" p% K8 D$ ~6 U
}
" D1 Y: M! O) c+ @ break;
1 ?# V2 R9 _! V/ j }
1 ]! n0 P/ |2 @& T case 1:
+ g; ]. X! e J7 t5 M {
/ O9 W8 |2 P! ~7 k8 e9 c1 O: n //整理背包 f. F3 b' K* D1 T
//////////////////////////////////////////////////////////////////////////' \0 ` @5 x" }
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 k y5 K4 ^' Y, h& b //////////////////////////////////////////////////////////////////////////% Q$ l! S d+ U, L, @' A& h
//////////////////////////////////////////////////////////////////////////6 t! `2 z" j! V K" [4 K
CInventorySort* pInvSort = new CInventorySort;
8 z: z7 U$ L2 f0 g vector <sItem> vItem;
4 e$ K. v9 c: r- R4 G, n; A vItem.resize(MAX_INVENTORY);//初始化大小: [+ r; `9 V3 w
//////////////////////////////////////////////////////////////////////////( D2 U2 M3 P1 z2 G3 }- [% t: z
//填充数据
. m+ i0 u- _4 p/ q: I) A! L! g6 D for (int i=0;i<MAX_INVENTORY;i++)& [) Z6 O* [- k3 ?- P
{5 z9 |: u; C4 l$ T3 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! q; ~ @: a" g& G) u' L6 Y- t
if (!pItemElem)
- q, p/ `1 t+ D( Y. z {
, |+ D+ K9 @( b: `8 b5 }% u vItem.dwKind2 = 0xffffffff;
" L7 b' V" o5 C& Z- s vItem.dwItemId = 0xffffffff;
9 N. X' d! {# W* J6 L vItem.nIndex = i;
6 H+ Y8 g6 u) [" O1 h }else {
$ r& y4 g3 T1 t3 P+ B ItemProp* pProp = pItemElem->GetProp();
0 q& ]5 ~( ?+ ?* Z vItem.dwKind2 = pProp->dwItemKind2;. C( A# p: u; {
vItem.dwItemId = pItemElem->m_dwItemId; c3 ^7 l! ^ I3 s( V/ \1 f/ W
vItem.nIndex = i;
, Y7 Q. N. C1 r6 k0 s! D }8 k1 D) G) [& e9 J0 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; i* |( r8 U) `, D* Z
}
7 w& y' n) w+ k5 c- i //////////////////////////////////////////////////////////////////////////% [6 {3 L) l, p+ c
sort(vItem.begin(),vItem.end());//排序! k% s8 ]+ t. n$ G9 ?, @+ y1 @+ E6 l
//////////////////////////////////////////////////////////////////////////5 ]7 C) `; G$ D, s
//交换2 ^( m f- R# X z- ?4 [
for (size_t i=0;i<vItem.size();i++)
6 J3 M) @/ y, q# P$ [- V {& ~5 a# y+ o0 _) Z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; _9 f+ T6 @+ a2 ?' I pInvSort->Add(vItem.nIndex);/ n+ a- N& A, o1 `" _
} u) I: Y- ^! [
BYTE nDestPos = 0;
8 R4 N' x* y: R for (int i=0;i<MAX_INVENTORY;i++)
5 G' Q6 i6 W% \# r2 C1 U {1 Q" W$ h# ^) y2 n A m# y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! Q$ I# n/ n5 h2 |* i: X
if (pItemElem)
5 G# T2 ~$ h9 d, _3 F: Z! S {3 w {
; t; u0 B& N. r7 h: h! ~- r if (IsUsingItem(pItemElem))
& Y) }0 A& y0 n: k {
2 f& Z# B9 {8 X1 S //这个位置无法放
3 ~5 U" z! F9 {$ P nDestPos++;! o+ y$ [# `& ~, b6 m5 e* x
}
. b! H0 T8 j& m/ F' ^! R9 k+ q }4 ~) D' O8 R. Z0 I8 C
BYTE nSrc = pInvSort->GetItemSrc(i);- S* ^8 N4 ]3 b# P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 [5 F. L) C% Q* Y
if (pItemElem)$ A( a) R9 q1 P" j- G
{ S5 u9 B n( r
if (IsUsingItem(pItemElem))
: P3 \8 z# v) P, z9 r7 U3 H {
0 k7 m Z# [+ t //这个道具无法移动,跳过
8 t" r& U. F: L1 L5 _ continue;
8 R9 ^+ u# P1 G }
$ o* U1 s1 @* B, F/ H0 ^9 H4 h }else{! \5 u8 _+ _, A/ ^$ w9 u
//空位置 不用动 { m' q( y9 S0 w: ]) _' e
continue;( y# I) |- v( u
}) l4 s, k, s3 V* c( Q
//////////////////////////////////////////////////////////////////////////( G( `, w3 [! f
//开始移动( ?# [, m) ?) I# I
if (nSrc == nDestPos)
& P+ J ~6 i5 d1 C: t; x {
% J" ?( c: s+ \ _$ R //原地不动* C+ O& |: z8 j, b$ D* w
nDestPos++;
4 D+ P: t8 M) N V9 W7 v continue;% L+ a0 h/ o7 c! U7 E3 c
}
1 j& N& \! f8 O3 M1 X, R! m) L) M pInvSort->MoveItem(i,nDestPos);& D1 M, n" u2 m) k7 l, V6 i" m
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 u! _4 ]6 @' U8 Y+ C Sleep(5);8 C1 c( s+ t1 p" w
//Error("移动 - %d->%d",nSrc,nDestPos);
- S: V4 _7 {, e: k8 E nDestPos++;& A3 j c9 Y2 n& @" A' a
}- N8 `9 A6 f' i/ _# A/ [
//取第一个元素的信息
$ g$ f8 j% l# ^5 H/ `1 M /*3 l% a# \" t0 q3 Y' h* _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ r# l$ V" F* T! l" W
{& |0 Z/ y$ H, H! j& f1 { o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; A h- F1 f( d5 Z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 s3 _ d4 p7 [- {+ e+ h% X6 @1 U }, M. _$ u0 b- j* Q- W1 u1 D/ j+ [$ Z
*/
/ N: ?% N2 U M1 D# _( q3 s. m3 z8 Y# e //////////////////////////////////////////////////////////////////////////, ?% X! g8 z: L; f+ K m
break;" |! C4 w: C; H {: X& ]
}* i0 ]: k: t$ ]4 G
} . t6 E% d6 u% z O, b+ `7 P5 {8 e
}1 m. R1 E/ R( \: `0 X
m_wndMenu.SetVisible(FALSE);" T- k x# V+ n7 A! e& ~& G* O
8 K0 N2 Z9 h" h- W--------------------------------------------------------------------------------------------------------
9 ^$ O$ U2 y& r6 v搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ G4 \2 J; H, w5 Z{9 \! [* ]9 p# y& B
BaseMouseCursor();8 t1 `- v8 f3 B9 r3 f# H
}8 V6 u# G$ L# [7 O
在其下添加:" D; C2 ?- N8 ?: {
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 u2 L$ T5 ^! }' s. t' N* H
{# U. v& x; \! S- l2 C" H9 e% o" d
m_wndMenu.DeleteAllMenu();
! N5 ~+ I1 q7 d) E1 ?m_wndMenu.CreateMenu(this); T* A6 n6 f; L0 V5 w7 Q" k5 ^5 J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% j7 f& Q& f4 G/ a% f9 W! g
' {2 v) y( I' V: `5 o5 w( L. E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# g x6 w- E% Z+ H9 @- P{! |4 D9 f- q2 r2 D
//P以上级别才可以删除所有道具
& ?" g1 L" f4 N% O7 A* k9 m2 @ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 _& T# O7 l2 o" U
}
2 R" b+ x. }7 D0 I, q( Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 E/ q& j+ l; E/ e9 l ^& a5 Y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 o D+ t3 e: z# p
m_wndMenu.SetFocus();
5 A+ L9 K( _7 p+ A# g7 ?5 s" ^}% f" S6 Q5 N% n: n, B8 U& E
------------------------------------------------------------------------------------------------------------
' Z& ~$ w0 W$ a, ]$ g*************************
3 {8 N( y" k$ i0 c7 Y8 o. m2 QWndField.h文件( v5 x# t8 h( L6 J5 E+ K- b
*************************) w, ]* M" y& r! W1 }) j8 A
搜索:BOOL m_bReport;0 w7 u- [- q- `: d
其后添加:
2 ]- U6 j. U0 n9 i: jCWndMenu m_wndMenu;( H/ l% L& ]( o) ~1 X: v
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( _5 O. H+ l! S. b1 @" s# \( Z其后添加:1 } D. }) q) z7 n8 b% p; Y
virtual void OnRButtonUp(UINT nFlags, CPoint point);( A I$ r- R1 J) ~# h+ e* H4 _: }
I. D2 g4 a- X1 d5 A' t; f* e
' O) \" I- i1 f, f% m4 k |
|