|
|
源文件中_Interface文件夹下WndField.cpp文件
( R5 p# c0 C% X# c+ C# b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 {# s) C# K/ U7 l! L5 ^- I4 v1 U
% t K& l0 q1 sstruct sItem
, W9 X! J/ K- w1 x6 x{
. o5 W/ q& H' l) W$ V8 dDWORD dwId;
: G- E& N6 C8 v- y2 HDWORD dwKind2;
+ j; L, }- f0 N' ADWORD dwItemId;3 h( J8 s3 R$ V( G" n- {4 H
BYTE nIndex;* j# t8 x' A4 l
sItem(){, p* ~0 ?% |1 X' }
dwId = dwKind2 = dwItemId = nIndex = 0;
$ }; F/ c( d. `# i, @, O}
# k/ a4 j. z# Z# Sbool operator < (const sItem p2)
1 S" p% p, K' E; ?# M{$ e. ~1 N1 \, ?- I9 Y1 @; \5 K
if (dwKind2 == p2.dwKind2)
2 ^# O2 {. ]$ s6 a* @ {1 i2 u' @/ c+ O5 W$ i! r
return dwItemId < p2.dwItemId;
) {8 F# Y! y. f! _ }else{
& T2 n( T: Z/ m$ s return dwKind2 < p2.dwKind2;# R/ ^% N8 w. N) [: H0 E
}
, w& c1 q( `) K% |: v$ x}
5 p2 O/ J( i# Q( d# ~ e) T};
i9 z' F7 Z/ `9 o1 t" }class CInventorySort5 _+ ~8 M+ g- |8 c6 U/ \* b. r- n; X
{. e [' F. a5 J, }+ R
public:2 b- C. ?; x6 c! L
CInventorySort()
# L% a+ n% h* f2 i{1 |# E0 l. A7 Y# q9 ]/ F* r
m_dwPos = 0;7 o; s3 N1 l5 |" h! s( K6 ?( E+ J+ J
}; z+ k! D! H3 @9 ]
~CInventorySort(){}. n7 y4 L- G3 `% J+ U% K2 L
private:
8 r$ b+ T( Q% K- K2 Q; }7 {sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 ^" l& x( H" A& m- M$ ^* RDWORD m_dwPos;
$ V+ P o; X/ B4 F$ q7 v6 `public:3 j' R# Y- h. e9 A# ?/ A
void Add(BYTE nIndex)1 Y% t+ y9 P7 ^8 j" V+ K& ?
{
) ~% @ x+ g0 o if (m_dwPos >= MAX_INVENTORY)8 x7 T/ j3 _/ ]7 ^- s' \/ n4 R
{6 m+ H K# ~! i6 M. |: p4 ~8 P: k
return;6 v( f: K- O3 G% s' [
}
; `1 X' @% A& d5 @6 _% C, v( B1 w m_Item[m_dwPos].nIndex = nIndex;& p$ g3 L2 Z+ W% P. y
m_Item[m_dwPos].dwId = m_dwPos;2 j3 n. ~: V; r/ |+ o. ~) U+ U) K5 [
m_dwPos++;( _, R8 b, h% o+ }! W, V
}
e9 ~! x- s* g$ EBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ z6 P" T, \& T{* p3 i' Y v$ Y f( r9 \) B4 T& K
for (int i=0;i<MAX_INVENTORY;i++)7 J( a5 z$ o5 W0 H) z$ l$ A
{
. P0 o+ @* X& Z# Z/ {8 b# t& S if (m_Item.dwId == dwId)1 j) c/ ^6 S: ]7 P
{: U6 M1 t* r4 U+ f9 O2 j8 {
return m_Item.nIndex;( z) w* B& Y1 C2 A' P, Z X, c
}
) L5 f5 x8 P' w$ M }/ G( r# \7 t8 Z$ g# u2 ]
return 255;
' |) k' W3 m" C) \}
; Y+ I7 t+ w8 b8 o' D0 yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ h; f' m! W) n
{* q1 Q2 C: a' T7 f! _
BYTE nTmp = 0;
7 x' f: [" U% N$ t3 w" z3 H1 g bool bDest = false,bSrc = false;
: |4 ]% S& ^5 {1 Q3 X5 M; K5 F# \ for (int i=0;i<MAX_INVENTORY;i++)8 c! b$ [; L' w" H; L# B1 z/ P
{5 V7 u1 W3 p/ e: F1 B
if (dwSrcId == m_Item.dwId)5 Q5 J( x6 n4 H* i9 F: P
{
; D' w7 ?# G7 L. P; M$ z //id相等 则 改变对应的dest和src
: ~5 r0 O+ H* B6 h6 f3 U; K nTmp = m_Item.nIndex;
* H0 M! d6 y o* n% b m_Item.nIndex = dest;
: J% m$ n6 j. }0 X" D }* m0 \/ y/ T( L$ T
}
5 H$ ^9 A Y7 O6 Q x& q' b8 W //临时数据保存完毕,交换开始* b2 V Y# N* m/ G
for (int i=0;i<MAX_INVENTORY;i++)$ C7 X: ~- \! n2 E6 j$ P* c$ R
{
( a/ z, [. A3 A. x+ x. w if (dest == m_Item.nIndex)
: |8 y( [% W2 d# L. H1 x& A { p4 O6 N3 B- ~/ c* D( m; T
//id相等 则 改变对应的dest和src
/ W- s$ P; u7 K m_Item.nIndex = nTmp;
, H% d7 F# b# T" I, U, a; C }1 y8 l- E: _& I$ D2 b7 C q" X
}
% b% B, d1 r; ~* V( h7 p c}4 m9 }' R: k: D, i2 w) b
};' y0 A4 i" B: j* T
-------------------------------------------------------------------------' h# W4 v$ H4 i' c' Y" {' h J
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 ^# H8 p; X5 A, g, G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& ]; {% n4 S; w! ~( N紧靠其上添加:
1 u ]5 k) q0 _5 ~! s2 Fif( pWndBase == &m_wndMenu )
* E9 B( B- L4 \{1 k/ X( o0 Z* u- C4 T
switch( nID )
: q; h6 l. u9 k4 w: i {
! e. q5 f, ~, `6 l1 i% x case 2:! K5 G+ `7 G, P8 k c
{
, L: q2 |/ G' p //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. y- L$ z% g" O1 f5 g2 a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); h2 ^: h% \ x4 @3 P5 D6 T+ N$ i5 G
{
, H5 D) m1 F) ^ \5 H4 u+ D( i/ w* | break;1 u+ e; [6 ]0 w8 w$ |2 \
}
8 F6 u0 M3 h8 d/ C* V$ W1 _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 @" @9 o, @2 a" { {6 O& V, F) H; l" H* n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# a. j/ c. |: Z! w9 j
if( !pItemElem )
4 i2 V1 }% D; ^( v continue;
! H% I- c( f: I" H5 B if(pItemElem->GetExtra() > 0)% P$ a' @4 f; a& A2 s
continue;5 s" I! P5 z" b3 E3 m! b( ?
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / q+ j# ^ C. R0 a! \. @5 A
continue;$ [# ^8 E( {! X: ~. S' M3 `
if( g_pPlayer->IsUsing( pItemElem ) )
# j, o$ t) {$ q continue;: l( A+ S: \; H' N
if( pItemElem->IsUndestructable() == TRUE )
, b+ Y9 I; H( k* q* Q$ p7 Z {
0 z8 L. i5 P0 O* G6 f g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; i9 {' M$ G: V/ r. L6 T continue;2 @0 |' l0 C" u5 N
}: `1 A7 P8 I' R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- e. v5 n& j! r8 m
}3 U; B' N" ~" g1 C+ I: h0 J+ r
break;+ n( G, {5 g1 D
}
4 Q) i' ~5 c5 ^4 K* w/ `' i# ~% K case 1:$ w$ w+ H+ J! |" N$ ]
{
' O6 b2 v7 J6 F7 g //整理背包
: G" t8 r4 _, \ //////////////////////////////////////////////////////////////////////////
! _: L8 y! B' K# X4 y: [3 h //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& _' `" X8 P4 A0 X1 y$ C //////////////////////////////////////////////////////////////////////////. {) s$ Y+ h4 ~7 P3 @
//////////////////////////////////////////////////////////////////////////
* b+ F% H* G+ n$ p d CInventorySort* pInvSort = new CInventorySort;
9 o. W) [3 f' j; e0 L. X% z0 O% v vector <sItem> vItem;
$ \. \# q% n( k) Q vItem.resize(MAX_INVENTORY);//初始化大小
% [* `0 w, t- \9 U9 F //////////////////////////////////////////////////////////////////////////
B/ e5 `; P9 L0 E //填充数据' ^2 }/ |1 Y, B% p0 N& b
for (int i=0;i<MAX_INVENTORY;i++)/ B0 W+ a" D5 X3 ~
{
. E4 O3 i7 `/ z, Y. h! Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ v* g- f' H, q+ W3 ^: I if (!pItemElem)" A8 m4 b# p' [/ F! \" X6 \
{- W a- a8 {$ }$ p6 ~! f8 q. i! V; b6 j
vItem.dwKind2 = 0xffffffff;; Y4 T- R k; W% y2 [9 c+ I! G
vItem.dwItemId = 0xffffffff;" f' g/ s1 |7 L
vItem.nIndex = i;5 K2 T2 ]6 Q! e
}else {3 h* _" F! z2 W+ H( q* [4 g
ItemProp* pProp = pItemElem->GetProp();
9 P# k! o0 Y6 o8 r7 |$ J0 _ vItem.dwKind2 = pProp->dwItemKind2;
% L7 y; B2 l0 L vItem.dwItemId = pItemElem->m_dwItemId;
: M5 m0 E- r& P6 o* K vItem.nIndex = i;% b+ w1 [7 z( ]! E- C, I) K
}3 ?! _+ M( S }- U) Z, ?* ^3 ]
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 y; w4 E* i8 S- K/ G; T, I
}( `7 }% _; N1 e: X+ R
//////////////////////////////////////////////////////////////////////////
5 a! D6 ^/ l( z# L& l1 { sort(vItem.begin(),vItem.end());//排序) E" p* }2 C& j. i
//////////////////////////////////////////////////////////////////////////3 }& B# E. H8 h$ d
//交换
5 I) H2 e+ u, M( b- e9 ? for (size_t i=0;i<vItem.size();i++)
3 {, i+ ~: e: t; `2 d {% | ]% @! t8 ^( M& h$ t
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( P+ B; o! x$ c. ?
pInvSort->Add(vItem.nIndex);
% A6 W4 K J2 ~8 E) P }& D, F7 C" R2 |- Q
BYTE nDestPos = 0;" U5 D5 k& @ p4 t q! t% m/ o" Y5 A
for (int i=0;i<MAX_INVENTORY;i++)( _+ o4 _3 e# u4 S, w; y. N
{6 w! g/ l9 ?) A4 _ m) M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* _! b3 l; z( B2 ]2 U: m" r* X
if (pItemElem)* [5 J, P1 y5 _& U
{, A$ F% N) w7 c+ o) a9 J( }
if (IsUsingItem(pItemElem))/ L' e+ P: U7 @; _3 J6 {! H2 d
{. z, p' L ~& n7 n5 I
//这个位置无法放6 r" G" B M8 t4 s
nDestPos++;
# O! W1 T# {' `- h }; u* t W/ T) \7 l& a
}; q; S# W$ a# T! Q2 k! ~: a
BYTE nSrc = pInvSort->GetItemSrc(i);" b( _/ R% W6 g
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 U, R! ?/ [0 o# |; q1 r if (pItemElem)
% e7 M. e% r3 b- g {7 K& A8 D8 h/ Q* y. S! {& ~
if (IsUsingItem(pItemElem))
4 o9 U8 z) t/ E! \/ }: h( M) [7 o {
. ]5 K7 l/ u8 @4 _% k) \ //这个道具无法移动,跳过
9 W9 Z; }& [+ c, c continue; \' Z# n! R+ c4 @3 O& ~: g, ?
}( T3 I8 \/ J& v
}else{6 d% n8 _6 W' b) F+ A
//空位置 不用动
5 Z( ^# t2 g! {) o continue;
2 l1 |% q( W* m8 Y }
u7 Z# |' m: k. S" g6 C //////////////////////////////////////////////////////////////////////////
5 o1 N5 x% V4 L* i9 R //开始移动
& m$ i1 X- |+ i Y4 I if (nSrc == nDestPos)( o' I4 C$ O" U9 B5 k, H
{6 c. W: T5 u( i* V0 T5 L$ E
//原地不动
3 ~0 m/ v: q* e nDestPos++;5 t/ `# F* i& w* v4 x
continue;1 \3 e$ e* b; j( k7 u* z
}: ]0 Q, N1 ]( c
pInvSort->MoveItem(i,nDestPos);
* U2 X8 l. c% }; D g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 Z' q/ n u" O1 P7 B/ [9 z Sleep(5);
9 z, f! S" ^( F: r$ g( D //Error("移动 - %d->%d",nSrc,nDestPos);& C( ^3 h P; u: a0 o/ N/ Y5 j1 A [
nDestPos++;" S0 H4 e( ?$ a
}
7 V$ h9 U$ T/ L; h5 {' @ //取第一个元素的信息. C9 S" F3 |: F# X, a, }
/*
2 q/ L0 z8 z# ~( T4 A if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& b% i/ I* X+ W
{# c+ g( p, e& K6 X8 U1 f
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ b# M/ ?3 }% b; }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ d6 Z! F) P9 n! [4 s6 a }
/ P$ I; G H8 N8 ~. Q5 e */: }0 X0 _) Q7 P7 ]1 [. L
//////////////////////////////////////////////////////////////////////////
6 d( B# W8 a3 m4 d+ E break;" {) M* q5 e* l/ Y Y' W( ^
}" p3 r+ p" W) h) E
}
: o9 {/ @7 f1 \' `. d6 f* S8 m" w}
( f# f/ ]4 p" o: ]0 g! Vm_wndMenu.SetVisible(FALSE);
, v% H0 i8 `9 W! Y6 j
/ P$ |3 H @# Q. V! _6 l--------------------------------------------------------------------------------------------------------
8 l# Q8 p, |; H: I; o, \搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 u( ^: ~" A9 S" h I6 @- u: \1 P
{
?- w0 A7 N* Y+ a; v; u T/ pBaseMouseCursor();/ ~& n: m# q7 H! r: c: R5 y! B0 W) U
}
f1 ^6 v, I2 K9 M在其下添加:' j9 u: A/ v2 t1 Q% B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) B+ S+ G2 Y( B4 q! e
{
; _! ]; d# P8 o4 u J7 @3 e6 E3 a& Im_wndMenu.DeleteAllMenu();/ ^; a' H( n0 t. s
m_wndMenu.CreateMenu(this);
9 J. {, [9 q, p& G* ]m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 Q, T8 t! I& `4 `! t7 L& S
! q" d& x! w- H! M b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 a' G8 V6 o% P, O3 D
{
3 m: |8 W" f, ?' Y) r5 o' g //P以上级别才可以删除所有道具! }+ K. W8 q: v1 l4 E- H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 {* \9 [4 c# ? \& `}" P, `! k, L7 G( o$ X' g/ H1 B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: D! ]; C3 A8 _+ F9 }4 B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ x S# g6 ]& L7 z* e) `: V
m_wndMenu.SetFocus();+ g+ V& |( y9 R' H# t$ l
}2 `) _- m% X% H- Y( F6 u/ X
------------------------------------------------------------------------------------------------------------" H" R' `" m5 T- o0 R+ g6 {2 y8 b
*************************
& |2 c1 [3 k9 N& {. I5 Y* FWndField.h文件
/ _+ i5 m/ _/ R: K2 J*************************
8 |8 n: P: n$ r& A搜索:BOOL m_bReport;2 @, e; b. [; V9 f0 v
其后添加:
$ O; |. @& E0 B+ {2 S! Y8 XCWndMenu m_wndMenu;' z7 H8 R9 a: M
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" f7 P8 g) m9 N* |2 l1 _7 u
其后添加:
4 Y8 z' N2 J# O3 O) S* l9 vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 {, t ?* W& k5 I1 }* u0 i) e% ^7 m: s9 }% g6 ~& e. C
) Z$ F1 z4 E: b/ w6 g+ c
|
|