|
源文件中_Interface文件夹下WndField.cpp文件* N! q) b. _& m/ {8 N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 f" M, {6 S9 M8 N6 S; I2 R
& ]) f$ k* H$ B: \4 ?6 P! @/ P# pstruct sItem9 C6 _: q }' C: k5 P
{
* e! j+ V& [! o) BDWORD dwId;
7 x6 O2 ^" w( }0 PDWORD dwKind2;
, c) r7 g3 P& O& A" QDWORD dwItemId;! m- ~: x! ~5 B D: e3 t9 W: F2 E
BYTE nIndex;
* \) Z' w1 E( ^6 Y5 SsItem(){# L0 E4 L/ f& h) _8 v0 g
dwId = dwKind2 = dwItemId = nIndex = 0;, H5 M( V- h# l7 m( c( L
}8 o! F$ \$ q7 |8 x# _! M
bool operator < (const sItem p2)8 z6 S' V$ q$ O1 f( F! n/ ~. n
{' D2 b" H. Y. r O
if (dwKind2 == p2.dwKind2)* k6 Z" |, z* l5 m% T7 v
{/ T3 x. m' [" J9 P$ d @
return dwItemId < p2.dwItemId;% n8 \2 ]! x7 a3 R
}else{/ o7 s" G. t3 N7 @' p* ~9 H
return dwKind2 < p2.dwKind2;
: r& w( E# m9 } M }
" d( M" M; w; p6 T}
: ]2 L4 E) a! C8 p* H+ h4 _( N4 v};
; H! F% w) o3 G+ `class CInventorySort% c" I3 s6 t9 G5 a5 \: ~* N
{7 g8 x( c# y; P* }# B
public: K: O2 `# v1 v
CInventorySort()0 U! F3 p" h% k$ ^; A
{
+ s( K+ l! o3 Z m_dwPos = 0;
0 c% K8 l, d! y0 U}/ e9 w$ n+ M" f+ c, a
~CInventorySort(){}
% a2 M) f$ J/ @. ]/ Y! oprivate:
+ |1 U7 D% F: H2 R! N0 u3 b, o M3 FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' R0 R. [# o! x! s2 v% I' x
DWORD m_dwPos;
7 X/ A: S7 i2 e2 ]public:/ ^- L" O: j& k, F" W3 _
void Add(BYTE nIndex): _' P" J$ w$ P4 ?5 ~
{
) _; a, W, S6 p9 C9 L" t) p; ` if (m_dwPos >= MAX_INVENTORY)* u$ u- _' R2 Q9 t1 M
{
, Z9 B5 c& P5 w+ N2 y H return;) E' b1 W4 P0 S0 {& ]9 i4 Y# M
}) U6 y0 j# w0 `8 {* ~5 U! U
m_Item[m_dwPos].nIndex = nIndex;* i# E/ X9 m. ?
m_Item[m_dwPos].dwId = m_dwPos;+ D/ D; p3 P( k. y. k- q m2 K
m_dwPos++;
8 O0 J3 k- P4 I}
+ E/ t6 F9 |3 O9 R7 Q" OBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 ?& C. H: w0 ?; A
{
3 P3 e) D8 e/ Q, }5 E/ m for (int i=0;i<MAX_INVENTORY;i++)
: L. p) c/ J$ N: P/ K% P5 E {1 U' l5 J' a; ]) e
if (m_Item.dwId == dwId)
# j& z: A. f0 `( ?& t1 ~( l7 b {
& G+ T* _) s/ `) M return m_Item.nIndex;
9 A( R0 i7 B; \. Q( Q$ J& S }
6 y8 `: `3 C9 e }
# {9 d8 t1 Z: d1 J; @/ d return 255;
( Q* X$ e+ W0 p5 O3 _}, N2 D0 }' m) S) {6 p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, O6 I6 y+ ~7 B. Y3 w( t{2 Q3 j3 v# l/ r, g( E2 M
BYTE nTmp = 0;
% T& t: h1 G; G7 M1 @/ ]0 a2 y3 m bool bDest = false,bSrc = false;! m- V4 x T: R( o7 j! w* y! D! w
for (int i=0;i<MAX_INVENTORY;i++)
, \6 I- I' o* Y" A: c1 D% ~1 G {8 a1 h/ b2 D6 s
if (dwSrcId == m_Item.dwId)# h1 \! C% k$ b ?3 N
{
7 }! A! m6 h+ G; o, p: t$ p //id相等 则 改变对应的dest和src M# H# G/ |, I- {( Q' F
nTmp = m_Item.nIndex;
% ^1 Z/ T4 }' }! V/ x5 Q0 Q m_Item.nIndex = dest;
5 p8 I% F0 D2 F$ k }! Z" i( U, k. a6 [3 G+ j
}
6 q! C0 K" \% Y) N! n //临时数据保存完毕,交换开始7 ~3 `* x6 F% _- u) B2 Q' @
for (int i=0;i<MAX_INVENTORY;i++)
: }& d. U s+ G8 q) l$ _ {
2 V$ h+ z' {4 y, x, ?+ `3 {& f* X if (dest == m_Item.nIndex). S. Z* u0 h, ]# z0 M" T6 @0 m
{
- o: F* B6 c' ~9 Q //id相等 则 改变对应的dest和src
9 m. l! E9 C; P m_Item.nIndex = nTmp;
8 h( L8 k3 |6 q! \; [, | }
# X* O: e8 t8 _ r) Z8 z+ G- M! | }5 _& j! @! i9 W& A8 M8 P
}
7 p5 K. _& e6 `% `};- Q; j6 N0 V- c) W5 h. z; @
-------------------------------------------------------------------------
+ j3 b- j( V4 M2 ]+ N& ~4 k6 P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ T8 q6 O! P& C: c$ a( x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 G" r" F p, o9 m9 n
紧靠其上添加:
, J4 b2 r8 F* Q; W8 |if( pWndBase == &m_wndMenu )
+ g9 |- n& e3 V: V" {& B{
: M( M( I7 J V switch( nID )
" O- d2 U; a' ^; W4 P8 X' k7 o' h {
+ |- u1 q9 `% ]) A. U+ c case 2:
* h |) k$ ]4 P/ B {0 g. |# j& e6 L0 n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ V" v5 V1 w4 R9 D9 L5 L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! V* H0 i$ V$ b {
4 d/ i7 _- C; _" r, m6 A' G* i break;
" E6 B% X3 d4 d# t# g J- U3 Z, ~9 { }
+ X/ @4 n. `5 @% ^) }) `9 }7 |0 g for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) Q/ @" c; o7 u5 B! P& I9 H
{0 n+ B: c6 N3 @4 K+ q' \& ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 W! Z2 l5 X7 y
if( !pItemElem )
$ u" F0 \7 S, t" A! F continue;" g* w0 U$ m& t
if(pItemElem->GetExtra() > 0)
- N% |1 P- z$ p3 o# ]" T continue;9 Z6 P1 _# A7 w7 P4 Y# J9 Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# F6 M8 w* F% h) |* E3 G- Y: L continue;1 R( j, z6 N: o
if( g_pPlayer->IsUsing( pItemElem ) )3 O y& q* ?) O' Y. k
continue;( M/ j! a8 \+ x; h; D
if( pItemElem->IsUndestructable() == TRUE )
/ Q* ^) T. j$ a# |' s {
8 }. r, g1 u' X* _0 z% H g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" C* s8 o2 L' p9 P( b
continue;
7 L7 r( s2 g+ D }
5 p' H( R7 z; t3 c/ `+ [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" o" \& u1 x: d" l) U) o/ t }
" w a; u Y' t4 L/ r# e& | break;& P) d2 x, k9 [7 K' E* _3 j
}) D* d* h$ ^9 C# u
case 1:
9 S8 u/ `5 P g% s: d0 u, l0 |6 P! @ {/ Z/ m% n6 L7 q) L& H
//整理背包
8 V+ P1 A4 \7 a' N //////////////////////////////////////////////////////////////////////////
' s$ K; T& ~! G( `% P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. T) _" |; i1 Y) }# o" ` //////////////////////////////////////////////////////////////////////////
1 h, g- ~1 \0 _ //////////////////////////////////////////////////////////////////////////
% G( [; Q+ V' t CInventorySort* pInvSort = new CInventorySort;
" S7 Z, h, J" e* y0 G/ W7 Y2 @# F: s vector <sItem> vItem;% J0 X6 ^+ p3 j+ s' m" y7 n
vItem.resize(MAX_INVENTORY);//初始化大小6 j4 q z4 J' a0 v: M( [
//////////////////////////////////////////////////////////////////////////9 F" h9 \7 c4 T' m% I }
//填充数据
/ @! `* z( m. j6 @, J for (int i=0;i<MAX_INVENTORY;i++)
, _* B1 w; Z! f: Y+ G {2 ?$ a2 r$ p0 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 _# B" u5 w( V5 S* @) c" u( Q6 s
if (!pItemElem)
- Y) [/ B- N7 r0 X0 y% C) N( [ {
& Y* ?1 j- R3 H0 C vItem.dwKind2 = 0xffffffff;
1 l+ }+ x, z2 b vItem.dwItemId = 0xffffffff;
* I& K' d% E3 C! J% H vItem.nIndex = i;
+ q( e! y, Z% _" C7 J( b }else {2 c. ], Q# [) h0 H5 {3 @7 h
ItemProp* pProp = pItemElem->GetProp();9 ?( r& x# J$ O' l
vItem.dwKind2 = pProp->dwItemKind2;
/ t* i E, y5 D' E' x& K vItem.dwItemId = pItemElem->m_dwItemId;
4 C2 [; r5 V4 W; p, c7 w vItem.nIndex = i;- d3 }. p8 l" @& R6 m) L& q
}" J6 M% @& W4 w P. t, p7 j
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ c" X/ b* o/ s8 v. O
}$ t: T# p1 M* C& z' r1 R- I( t
//////////////////////////////////////////////////////////////////////////7 M* I& e! h5 T2 b/ z" C
sort(vItem.begin(),vItem.end());//排序
: v" W) M& L# p, c //////////////////////////////////////////////////////////////////////////
6 y; O8 ^$ b5 }7 j //交换
" G; O1 w/ ~, H; g2 w for (size_t i=0;i<vItem.size();i++)
' b" U P" ]6 g. v: j {
8 N/ R3 H& U( k4 T, L //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 m: {0 t; M! K$ ^+ r8 o pInvSort->Add(vItem.nIndex);3 S9 f* p6 c2 U5 x( ?
}
: L: C( k8 u6 ]) W6 G8 ` O0 b BYTE nDestPos = 0;/ p$ f$ q: a; S
for (int i=0;i<MAX_INVENTORY;i++)
; M. O! @) D, D" m6 c {
, Y( g4 Y7 k/ \ x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 S2 S1 T$ I7 a8 ^1 J) v) o
if (pItemElem)
. ]3 c- v3 M0 a6 j" P# @ {
6 P; q* n: q% L4 I: B. b% ? if (IsUsingItem(pItemElem))
& a0 [4 ^- v% v# t+ W {# Y% y+ s- i' t- u" x% P' m
//这个位置无法放
* o. d) B3 O7 ^; |2 ^& h7 z" T nDestPos++;( s8 _8 \: G7 G* F: e
}
8 y; w3 o; i' R" L5 ^. q }+ A) s X. h( h' j+ a H
BYTE nSrc = pInvSort->GetItemSrc(i); @& H5 j: ?; l
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% d2 V2 Y d' Q6 Q
if (pItemElem)+ ^+ m8 N* ^" v+ d+ R3 ~
{1 h: m% W' \: q6 |# j7 ]) K+ d
if (IsUsingItem(pItemElem))
* \6 q. ?5 d, L _. O% f. ~& P {
9 {8 e5 U6 Z" d5 g3 j //这个道具无法移动,跳过. j% s7 u9 M) C h2 c$ v% P
continue;
, N* d8 O% P/ {8 V- o8 X. _ }
% r/ E) }. b; Y: H* ]; K }else{
# C- J/ f+ u+ t0 x9 l6 H1 ?6 t: R: c //空位置 不用动
$ R* g4 Y5 n3 a: c Z continue;
1 h( L: A6 r+ H9 ^5 ^ }4 g) U9 U9 K* u$ m/ _1 r8 I
//////////////////////////////////////////////////////////////////////////
, V2 I: u, j/ u //开始移动
; w, E1 L! `7 D7 ~9 A if (nSrc == nDestPos): B! j0 R$ c9 k. U7 p
{" }5 Q+ u" L% A0 y
//原地不动' W0 U% x9 U# ]* a3 A
nDestPos++;) b; n! m7 w; F: i
continue;. A8 a" I& e! A
}3 i0 s5 Z0 S8 r
pInvSort->MoveItem(i,nDestPos);
& Q) d" i8 n& }1 E5 O g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ |4 @# X; V; E6 T Sleep(5);. E+ {; ~6 j8 L) V$ k3 |# v
//Error("移动 - %d->%d",nSrc,nDestPos);! C" q( j1 z& E8 \9 V; C/ m& F7 L) O" L
nDestPos++;. k4 ^. X& R- m% a' E
}
s/ q( Y l7 T: R/ x //取第一个元素的信息
6 c0 D Z D l. Q /*$ a9 R+ A, `( Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* M J1 I) G( h- b, B" m. s/ H
{
9 I/ P0 l" D# s- `2 G! Y5 U4 R. S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' L( V* J* w- k; a, _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, {, Z' n$ P9 o) r! q& z8 c, a
}: G' w% ?& b: N z0 }
*/
* M5 t2 X- M& L; i) l" e //////////////////////////////////////////////////////////////////////////: e6 ?# g& S, N) i; T
break;% j. X/ H* A6 r; ]5 G
}2 q% v5 I% X+ Z! a. M
}
; _1 S8 p5 S" F}' K; T! k0 q; K, Y
m_wndMenu.SetVisible(FALSE);! B; x* S; g6 M/ L4 t2 L, V1 T" r1 M. D
4 d0 o3 G5 z9 ^0 q3 S
--------------------------------------------------------------------------------------------------------7 n% _+ ?6 S# F
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 B& c9 g0 Q3 R& }{6 J% ]2 d# S8 \
BaseMouseCursor();
5 _3 }! g3 W# m9 G; ]5 I}7 _( j1 h0 x/ h
在其下添加:
- {7 l/ Q3 V7 I2 i" R& Q3 \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 { t+ K. `6 j: s9 t5 Q0 X
{
! Q3 k' [! H/ \# Y/ M2 xm_wndMenu.DeleteAllMenu();) X7 B( r3 V( X
m_wndMenu.CreateMenu(this);
$ i3 h% v3 ^6 r/ M, Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; A+ I/ ~' y% u! P" _
- s) P* U- s- O" q1 @3 Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ ]9 W' Y# f$ Q! z# Q{* ?8 U+ r9 j0 ~ x8 U! B
//P以上级别才可以删除所有道具
' S% d" b$ B# a6 I9 d m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ c" k Z: j4 J) }) n7 i
}
) ^) e& B9 X; p2 f/ _( O/ E& Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 S( R2 r; b( I) rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 N9 {+ y2 M- ?, [m_wndMenu.SetFocus();
3 g) Z" O$ D0 N* S; U}, O3 V3 ^9 U1 r' H$ g& E0 b1 a
------------------------------------------------------------------------------------------------------------/ V1 l8 W0 K. j# T3 W" g
*************************& M8 A" ^8 H5 d8 r) s* l. g& ^5 B
WndField.h文件
) a3 ^: Q8 y3 i. c1 D- v n*************************) R5 u0 W6 b' o9 X/ [- h: t
搜索:BOOL m_bReport;
8 c) E. m* D+ z! D) }. H其后添加:
y. c+ r4 k$ T1 NCWndMenu m_wndMenu;. c5 Q: r3 o( S2 ]) O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% p M% W/ w8 H: g* T) K- q其后添加:
" d" g4 l" ^! y: v4 S7 R6 m1 Z* S* q) gvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- Y5 J+ V4 A. y# z5 z8 }1 S2 [8 K. ?+ ^
2 o" I' o, @' J. y
|
|