|
源文件中_Interface文件夹下WndField.cpp文件7 m, I' _5 ?' e: F% R5 v& L
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& x S) s3 p* J" h6 P
' J2 C4 X f" o e$ {struct sItem
& y1 W2 h' j, z6 c6 z1 {# R{7 y. G8 d) F, a! q; j$ E+ k
DWORD dwId;, b, \2 @, S# O4 t" @ N9 Q! l; G
DWORD dwKind2;2 j' B. v" m3 x Y
DWORD dwItemId;; w4 }) r/ x1 i
BYTE nIndex;% j$ Z. u7 u. _8 K
sItem(){
$ O% o- n# R5 ^/ S8 j) X7 H dwId = dwKind2 = dwItemId = nIndex = 0;/ P1 X; u W! T4 F, @+ v* m# G% {4 M
}, J' y' q4 I( ?; I3 T$ i
bool operator < (const sItem p2)
* b- K2 _0 {1 d) A7 L: N{
5 S0 ^- H) n, `/ G if (dwKind2 == p2.dwKind2)
J1 W9 \% \4 }3 | {
8 y8 a1 }2 p$ p/ c% r return dwItemId < p2.dwItemId;. H) S9 s+ ~* T. b% g
}else{% }* g' I6 ^( A8 w' A( x
return dwKind2 < p2.dwKind2;) h Y; ^6 r( M6 g
}
( |: r; O% W- a# M3 T4 d}& N2 y" c+ B! F! i# n# w' y
};( P6 o: Y5 ~% y. R- A' r
class CInventorySort' Q' I7 k' d: s% g2 m8 G- C
{
; R1 X. F+ @2 y. U5 ?$ dpublic:- t; ]) Q& d: L
CInventorySort()
9 F) U+ |/ H4 U. }7 @{
& ~- S1 _4 w5 E9 G0 W: [& U d m_dwPos = 0;
% v$ T( ~( F8 T' P9 }3 R}
0 D8 [) [$ v; u# ~7 B5 Q~CInventorySort(){}
- k4 q/ D% |$ E( H( \private:4 i$ |- m$ d, v+ H3 U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ I' |0 E5 W1 w5 f5 ^7 Z5 d
DWORD m_dwPos;8 p3 d, d5 y2 n8 U3 G7 n6 r7 ^
public:, n3 O% A5 h: V* X4 |% l! S8 A/ d O
void Add(BYTE nIndex)
& [7 ]1 G6 w( O! s. C2 t3 W{
/ ^% t) d2 M) K' N$ r if (m_dwPos >= MAX_INVENTORY)5 m' V; }. O3 @6 Q: G1 f
{. j0 F# Y$ a/ f6 x$ ]
return;0 f6 f5 {* `' w+ }" Y
}
. b- L* g q# {% L9 r( Q" l2 `& O m_Item[m_dwPos].nIndex = nIndex;
& f7 e9 {5 X! r, K' H- p m_Item[m_dwPos].dwId = m_dwPos;0 q( }# j- S' k
m_dwPos++;# _' B9 n& a3 V1 a
}& w1 t; }8 `( U' Y, M, T1 Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* b7 j, ?8 T) W& Z9 {
{* A. `( }# L$ @! B. N. `. s) |
for (int i=0;i<MAX_INVENTORY;i++)" M) @% y/ L; W4 q8 N
{2 G' L# E6 ~0 Q& B- v! w. I
if (m_Item.dwId == dwId)
/ a; E9 [- h, {& d" }/ y; ? {( j# ^9 k' e0 k& J& b6 L
return m_Item.nIndex;, ] b- R, Q' e& L- H" Y$ b+ ?
}
6 S7 B* ^) a: ?+ `% F; N* K5 C }
. w) h/ z" q$ J return 255;
2 D' P0 g" R0 X! K4 o d1 l; _}
2 z7 y6 M& _; Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, t1 K! a/ L E5 K{* z. b) p- ~% o8 l, A) t
BYTE nTmp = 0;* ?4 o. ~) w8 i+ _
bool bDest = false,bSrc = false;
- E: {0 a- v: J* _+ j; ? for (int i=0;i<MAX_INVENTORY;i++)) D1 Y3 l0 V* |
{% }- Y3 v7 r6 \
if (dwSrcId == m_Item.dwId)
: l9 z% z7 z5 X" Q* B {
- ]- f6 W! s u- O //id相等 则 改变对应的dest和src
% Q/ l; k- Y" b/ [2 B4 X nTmp = m_Item.nIndex;
( c6 h8 k ?0 L; a m_Item.nIndex = dest;
3 J( z5 n; H( M# X9 m+ g" R }
$ O9 a P3 J# h2 o0 ^, {! c% O }
9 z" o2 k4 T* _1 C //临时数据保存完毕,交换开始
/ Q1 Z) C8 b, A) B0 V. w! Z: n" [ for (int i=0;i<MAX_INVENTORY;i++)$ M. t2 G$ k; }! k+ s9 R. z& b* \
{: C5 i% ?) g# {" @# `0 U, f5 A
if (dest == m_Item.nIndex)
3 `+ B1 g0 H" w+ e* T {# g% k- i' ?3 f" m
//id相等 则 改变对应的dest和src+ c% A3 Z# b2 Z; L- _" P: s: e0 d
m_Item.nIndex = nTmp;
% `% s& M7 y6 p0 B% Z6 I. D& k3 | }& P; v Z+ _6 }' F) W
}% Q7 A# H! b1 B9 E# G
}
8 X: b( t9 T+ {* y9 H- J};
: ], m# ?9 x3 w% k7 ?1 h0 |-------------------------------------------------------------------------
+ a( E0 a8 g" l8 `6 l1 |& a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; p! Y s- y3 J0 n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ b5 h& b0 @3 ^7 U
紧靠其上添加:
9 C- M5 n* ?* aif( pWndBase == &m_wndMenu )
/ H# ~' e+ y5 Y{$ ?' n7 S- ^" g
switch( nID )
4 S3 t6 e- n% f) Y8 a! S {
]- i4 x/ y/ ?/ P7 V case 2:% X; s9 j' ?6 X
{0 g9 [$ }* z% m8 g6 X
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" e7 U( Z! o4 R* F$ c5 y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* [2 R$ [- P+ V" m$ \+ i! c* F+ z0 k
{
6 X6 h! P% J' E, g break;% ?% J2 n& O- Q4 K3 B- {9 d
}
" K7 D# j$ X( c, c4 K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 r; t; P2 x% T% ~, l$ j/ S2 C
{6 b5 j% Y2 H# x y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 I) b! K1 G- z# Z( X if( !pItemElem )8 s4 y' o. u& |4 b0 C5 V$ {
continue;
) }6 e- W/ @! h/ T- U/ @; H, A if(pItemElem->GetExtra() > 0)
8 c! N9 ?8 r% f$ O continue;( a7 L3 ]7 E9 a5 Y/ `
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 @3 l# ~* V* D ~0 a9 k
continue;8 |7 e- ^* q1 c" j @7 x/ D2 {
if( g_pPlayer->IsUsing( pItemElem ) ): B7 b! E4 y- G& d
continue;$ J4 z) Y% }/ I5 s; y% Z+ m
if( pItemElem->IsUndestructable() == TRUE )
% X2 h7 q4 C* x {
8 y1 m8 {* L, ]/ ` w g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% a6 k) G( l! N6 b; l- O continue;- R& s Q, K1 k4 h( s3 y
}9 w( C: a2 V' x. D( P, Y9 {5 ^+ u
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 b& V) W( k8 [& ~3 I b }% W/ B. R% Q* x$ T
break;7 X6 t, u0 [, u) t9 D' b$ p
}# N1 x h7 c, i
case 1:1 v! \5 v: b$ g5 {/ W
{# f# ^& q( y0 t
//整理背包
& s. F9 R* n8 O/ B7 E //////////////////////////////////////////////////////////////////////////
# B% e) d7 ? f5 |5 [ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); _' O1 t: Y) ~) D T% B
//////////////////////////////////////////////////////////////////////////
3 l/ O7 e' d- ?* R1 D //////////////////////////////////////////////////////////////////////////1 S2 c/ L7 V6 @) z
CInventorySort* pInvSort = new CInventorySort;
! u% j4 w; L& `, P# H" H vector <sItem> vItem;4 u- I" i: ^5 C9 H5 W. O V
vItem.resize(MAX_INVENTORY);//初始化大小) _2 i, w# M2 Q+ r
//////////////////////////////////////////////////////////////////////////# c7 j5 y2 T& o1 |$ K* N% i% G
//填充数据9 M1 c& y! y: y3 v$ R$ ~( Y5 P
for (int i=0;i<MAX_INVENTORY;i++)
! W2 F: ?0 n+ X! s {
7 E4 p5 @4 e7 I% S- H- l" g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% |' |* g- a! Z1 }: j% o if (!pItemElem). c- n1 x& O5 I. z( l. w/ \" f
{
; V" O9 D; w8 }4 o" S vItem.dwKind2 = 0xffffffff;
9 H4 I' r2 g" w7 h {, p( w" c1 D vItem.dwItemId = 0xffffffff;
! ~4 Y; [3 v- }6 M5 ? vItem.nIndex = i;& n! i% [' @$ n6 ~9 i
}else {' h- I/ q a) N- T0 Q% A
ItemProp* pProp = pItemElem->GetProp();
3 Y9 P1 {4 x) z$ Q vItem.dwKind2 = pProp->dwItemKind2;4 Y9 y9 U8 n" [3 Z' g7 c: f5 B
vItem.dwItemId = pItemElem->m_dwItemId;: y5 K# a: d }. i
vItem.nIndex = i;
! f- a' G, @; u% z3 c R }
2 N/ g3 _3 g3 y8 ]3 W( } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 W8 D8 y9 {2 P
}, A4 Q0 L O0 f
//////////////////////////////////////////////////////////////////////////' F; u, `( c& P& G7 s8 T
sort(vItem.begin(),vItem.end());//排序
) O0 G3 _8 _, W* O" _. c( `( Q //////////////////////////////////////////////////////////////////////////
8 s$ E. ^6 h& n# K% N } //交换) W$ m# a9 Z7 W6 }1 t6 |
for (size_t i=0;i<vItem.size();i++)9 T2 y; F | E" F1 x
{, C9 E! U2 N# n8 X7 e, y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; a) {' a! r8 i) z$ L
pInvSort->Add(vItem.nIndex);5 Q3 e, Z- @9 p3 `! p
}& V2 I6 s1 D) _4 o
BYTE nDestPos = 0;
& ?2 r3 D2 V+ F: I/ Q for (int i=0;i<MAX_INVENTORY;i++)- E- b J" r. n% x d
{
8 @2 A% f& ~' @7 y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 g6 V: g j! d0 B V& x1 F( j0 A3 J" Q if (pItemElem)8 N) W5 T8 z% ^% i' }" m6 U8 s
{; T. @% W0 a$ e5 b t
if (IsUsingItem(pItemElem))
5 y6 [3 X3 _3 }. h- L$ `% n {
& m0 Y+ `0 _7 @/ X, W //这个位置无法放2 B* e, A( L+ _
nDestPos++;
3 R! c, [& ~( n2 | }
; M% d1 `# Z3 d7 i }0 h) G* Z2 o+ }# j9 e( E
BYTE nSrc = pInvSort->GetItemSrc(i);& o* c9 S7 h8 s' r$ v! s0 m1 R( K
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 \0 d u8 E& v# j2 T if (pItemElem)6 M3 @% I k7 d1 h$ @' v; D; A) S
{: w0 ?; `; G! m6 F | O
if (IsUsingItem(pItemElem))9 q* M! a* C# V) _1 ?; U
{
, c9 {% `& l5 o) f6 m3 Y //这个道具无法移动,跳过6 ?7 M% V R2 p3 Q4 J1 g9 t# m
continue;
+ Y" Y; ^" U& ?9 t( W }# `- \- a7 s6 Q8 R
}else{
- N( ? k3 n! z5 e3 D2 R //空位置 不用动* C( Y3 l0 n& `4 s; ?. m& l
continue;! `: A# b# \4 k: y( x- K
}; v3 ?2 n1 u7 x+ a9 E
//////////////////////////////////////////////////////////////////////////# C- Z# ?4 ~! o( S1 ^9 J( e3 F
//开始移动
5 W3 A# k6 P9 ~ if (nSrc == nDestPos)7 V' q; m: C: p) M; ~2 ~- @# U
{
' Y/ Y7 y M3 w$ |- L7 D //原地不动
3 B* p9 c' A2 i) }. j8 G7 q! ~ nDestPos++;
5 [9 L( K/ B; W7 C" ^' i continue;
( t4 C" E" H0 I( {/ A }
`! U4 D' H `1 J pInvSort->MoveItem(i,nDestPos);6 I. R1 B Y8 \- t) o- p$ O
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 I0 M; y/ M( `* Z# J. u Sleep(5);$ z* V& v: d; Z) a9 J
//Error("移动 - %d->%d",nSrc,nDestPos);
2 `8 u( c/ |( O" R* }% ~ nDestPos++;
& V; l+ `+ U, o. J }
J6 w; p* v! N7 r //取第一个元素的信息
[: h# c" l& M t+ I; u /*" B+ }; M- C- j8 e- B$ X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), {2 Q" c3 ]' B6 t! g2 z
{
9 P4 ?3 f& m, v2 L( l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& j$ p* w- Z, m0 `# z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 M2 L) V6 e9 b& I6 n) x; ~# }# ^7 V }
Q5 j$ l) o7 ?: C2 f7 ` */; |& K, N" {6 O* e- B
//////////////////////////////////////////////////////////////////////////
% i# s1 p. W% d! h break;3 N+ D( M, d% \4 W7 a
}& `* X8 D3 p( e# Q: ]7 d0 T
}
* M. A/ s' V9 B}
2 g5 T, u% i( ]% G0 |3 M: ~m_wndMenu.SetVisible(FALSE);
/ g u1 Y; j8 p; a! j
6 @6 r* I! @( L) T$ ]# }) b) ]--------------------------------------------------------------------------------------------------------
4 H: G! H" j8 I9 p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" e2 D- i" Y; E{. ^( L! n" T* F/ N/ c
BaseMouseCursor();
1 G( V. U, Z, y* M# m+ T}8 [( j" [3 D4 J4 B( p- p
在其下添加:# k/ G' o% \% l* h% l1 X& T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 s7 d# k, }4 }8 ?5 M& X o/ J{* r2 k& T3 _6 u
m_wndMenu.DeleteAllMenu();
; O( c2 r5 I( w6 V4 H0 pm_wndMenu.CreateMenu(this);5 R3 a& O* t) {3 j
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); @9 [9 c7 @! _" P7 T1 W9 r7 \1 ?
( C6 E4 V* T: i; R+ q3 Q0 M3 O4 X
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 _& z/ f7 N7 K{
. a; ~! \9 U$ A4 G1 P/ S //P以上级别才可以删除所有道具2 z/ ?) l Q0 i8 I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. }' C P% x2 g0 {! M, I- o# G}
) O: S3 }4 I5 c) L) z1 l3 ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: B# i) s2 p4 ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 P5 h2 o$ _5 J/ i* N( H6 w! r& l6 Im_wndMenu.SetFocus();
1 D7 F& G. x: o2 J* Q, o) R+ P8 [}2 R/ c/ }6 P# v; @
------------------------------------------------------------------------------------------------------------
$ A9 a* [8 N2 Z s*************************# m* M2 `0 k2 b! y, E
WndField.h文件
/ r/ g" L+ j5 c" R! S ^4 `*************************
5 x' e/ W h3 t. {( c7 A# C" p搜索:BOOL m_bReport;% o _+ f% n! |$ W
其后添加:) Q: R! b# S: i
CWndMenu m_wndMenu;
" [' B. o6 X4 j- d' p* d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" }7 F Z2 w1 W' s! V3 a# o( c4 r其后添加:/ D+ u3 x7 @% O6 M
virtual void OnRButtonUp(UINT nFlags, CPoint point);
U4 K5 j) `8 _3 u( `5 Q6 @; y+ B$ X/ N& U4 b' M" \
5 _; D* Y5 Z2 {: V
|
|