|
|
源文件中_Interface文件夹下WndField.cpp文件2 ]+ N6 m6 M; Q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 d# d# z9 b# E5 J- G7 g2 i( s* }" T& k. l
struct sItem; E0 R+ S' l3 B
{
I N1 m6 i& s* Y' X1 SDWORD dwId;
( t2 {5 V8 }6 I: b6 X; b6 HDWORD dwKind2;5 a0 T$ O& Q+ o% `! L$ C6 f
DWORD dwItemId;
8 l0 y8 F5 {/ V1 ~7 zBYTE nIndex;
, w* P4 H) U/ z+ M5 o o7 esItem(){% Q4 r+ p4 N2 X& u2 k( N2 K) F f# A
dwId = dwKind2 = dwItemId = nIndex = 0;" ]4 S/ k; ^9 O2 Y
}
W! {/ N* Q2 {bool operator < (const sItem p2)5 @$ }) L% \ x a: I
{6 ~# |- \0 f7 U1 R
if (dwKind2 == p2.dwKind2)
) J- T, A `8 y8 _! m, n7 s- \$ Q {$ |# z9 R1 _1 p' Q
return dwItemId < p2.dwItemId;
) O k t; @+ e9 P) D4 Y( o! z }else{7 `( u) P9 {( y/ c1 c! d% C T
return dwKind2 < p2.dwKind2;
) K# S+ ~3 Q* p" F% ? }
" J9 x$ `# m0 V- c: W& I, W}/ }$ _4 }# x0 T( O0 u
};
8 u. W' v9 g6 c( [class CInventorySort
$ ] t, V$ S1 W3 h* [{! I; h% ?( t5 T$ U5 b) _: c
public:3 T+ c( F0 q1 ` a% j$ k
CInventorySort()
% p6 s; P+ b% \! N0 t4 K{
4 Z( S( T# C4 @2 n: P! @ m_dwPos = 0;% R4 T& [$ a5 [1 e4 n* j
}
2 o7 A9 k* y7 y~CInventorySort(){}( O% S! h# N# a. r
private:
. v1 O4 V. V9 F) s7 T% G9 N6 @, l# p' c( ^sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ ?. @4 u N, M5 P" Z; PDWORD m_dwPos;7 H0 ]; f$ \$ ?1 h8 ~
public:
% P6 p G7 I+ @1 Y/ `void Add(BYTE nIndex)6 L6 E" f9 K, G# w3 J
{
4 B. k/ p2 C) a7 h$ }6 K if (m_dwPos >= MAX_INVENTORY)
@5 {$ C5 n( P' P) G I$ U J {
& h3 P6 b4 A8 l" u+ w2 h return;
& ~6 Z) e& w' Z0 m B2 S4 X5 t5 Y }$ K/ g! p: T( M/ K3 T2 s0 k3 S( b
m_Item[m_dwPos].nIndex = nIndex;
5 i0 C' K5 Y& J/ L v m_Item[m_dwPos].dwId = m_dwPos;/ t0 H2 t3 d- X/ Y; G
m_dwPos++;/ @* s+ P" h* \
}
- Q% S0 W/ z' D$ R/ C) n* {* ABYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 `/ w3 w$ X% u8 X{# |8 m- f7 Y* Z2 } O
for (int i=0;i<MAX_INVENTORY;i++)
( b2 k) n0 L+ ]9 `" q {* I- x! \; t! k2 B& f; I
if (m_Item.dwId == dwId)
. n* h8 _& y& j$ c: H# K {
/ o& k2 a" }0 f: Z return m_Item.nIndex;+ f4 }& p9 R4 D8 W
}
% F# s; H- [) S; a% G }" G# {( ?: P+ T$ {
return 255;
( ?) h3 |! N$ G4 Y$ c' p8 q}" U! [% s0 T; O* E6 T3 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' Z4 o% O2 t6 b5 ^( u' p) ~/ K! f
{: p3 T! J. U! g4 R* b& d7 c6 n
BYTE nTmp = 0;
/ D2 x& M) Z2 d2 M" [7 _ bool bDest = false,bSrc = false;0 j7 a9 \0 o& e6 n# A! c& Q
for (int i=0;i<MAX_INVENTORY;i++)+ q! x& O2 q# _4 E! v
{8 z" b! l& i5 F% g
if (dwSrcId == m_Item.dwId)
! F+ _. F1 N4 g W {- v; t7 x0 s$ O, V. X
//id相等 则 改变对应的dest和src) I9 f5 D9 z+ R5 E6 k4 P' y
nTmp = m_Item.nIndex;( x! o; h6 U. B- n" e
m_Item.nIndex = dest;
' D3 b T( X) F3 i$ [4 ]) r* X, X9 q } W7 s0 `- x4 ]) o3 A# |1 q
}
- |- g$ N( {! @1 l //临时数据保存完毕,交换开始
4 k1 H( U3 F3 u2 z for (int i=0;i<MAX_INVENTORY;i++)3 y' p& \9 E7 C1 U" _: C
{! n: ~& v: H2 g. Q8 j4 G
if (dest == m_Item.nIndex)
8 C( q8 r- k8 ~% K4 U {# o; g; Z; X: j* Q
//id相等 则 改变对应的dest和src) k) t6 }0 M; |. h
m_Item.nIndex = nTmp;. X h( R( t+ {7 t7 q( m
}& |! \6 F/ G& }& M. s
}/ k) G8 G8 w- {
}
# ?% {; b5 E; k% R7 z- U/ _1 ?};4 |9 a- b5 p& x, S6 a$ F, C& U
-------------------------------------------------------------------------& m/ w) c5 Q& ^+ z' F H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 R0 J7 \1 R8 v1 F搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 R6 ]+ n. T! i* i紧靠其上添加:
" C' f# j; I; K# C3 Q) L# t- {3 Q, J! oif( pWndBase == &m_wndMenu )
2 V0 [! J' R! {0 H8 b8 A% e- G' k{ h; j7 m' l" P8 r+ y& ]( Z, B
switch( nID )! z. Z/ a% b7 H- D2 ]6 m- a
{: S/ @/ M4 N+ T' [& w8 x) w: f8 i
case 2:2 j/ T) b& L* h' ^+ u! L2 d
{: g5 D! Q* y4 Q% {9 v
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) `8 _3 B( B# b4 _( u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 L1 v: W5 |& G- Y- }5 r {
4 h& w' D# q4 S3 f# D) I% Y2 V break;
/ f2 O9 Q5 {4 ?' x% W; k }
$ d5 m$ v. M8 b/ z r/ c4 ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 x5 x$ t" Q7 n8 i
{. q- A2 J# I$ [( l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. x! }6 t8 h' @3 y* P: q/ `' s if( !pItemElem )
5 O. c3 {5 c$ N) E# U continue;
' m4 q( _5 z4 v2 f0 m if(pItemElem->GetExtra() > 0)! X' z! h: S* r. j9 ?
continue;1 d# l3 e0 c- N( m1 M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& ?' N/ a! v! ]* J0 u5 s7 T) Y continue;7 d( S# I# p0 P8 y# L! X" r
if( g_pPlayer->IsUsing( pItemElem ) )) [ `0 t' V. s0 J
continue;
( p* P! J8 ?2 N if( pItemElem->IsUndestructable() == TRUE )' h0 F3 f6 B5 M
{* {8 q* |# f. x& I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. O9 f; _- ^% x9 k/ C continue;) ~/ t' E9 O5 n4 ^4 C6 j8 `3 s" K0 W
} @& _3 t( O5 m$ h" ^/ I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 v: {0 b- U b1 ~6 V+ m0 l }
9 g2 Q3 y f& Q0 |* \8 M break;. K, e n9 c4 @1 m o* i
}0 U" t7 n, |% a) s7 R- U4 C/ b: \
case 1:1 r" E" M- e0 ~; e, j2 L. }
{
( G1 h# Z+ C# B0 K/ W //整理背包$ ~/ S1 }( T3 @' L& U: b
//////////////////////////////////////////////////////////////////////////7 H! ~, C! }/ C2 c7 N. o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- b4 z- V" s) q t) w" b8 Q
//////////////////////////////////////////////////////////////////////////
5 ], f4 J) D4 q% y8 t //////////////////////////////////////////////////////////////////////////
* U/ ~& V, X" e, w4 s2 c3 `$ D CInventorySort* pInvSort = new CInventorySort;+ @) ^7 J# |5 Z
vector <sItem> vItem;, D3 V* n' n" k& |2 `1 G
vItem.resize(MAX_INVENTORY);//初始化大小: P; v! S8 n8 J& h. D& Z# Y3 [, {7 U
//////////////////////////////////////////////////////////////////////////5 _4 X t3 z5 U$ S
//填充数据
- k! N2 l: t+ X for (int i=0;i<MAX_INVENTORY;i++)3 K; \9 i5 n% \; T+ S3 l' w. E" G
{8 v6 _4 o* t3 G8 b( R, L4 z3 o8 N6 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( `' Y6 w, \: O& }4 T) n b
if (!pItemElem)
3 c3 Y8 r* F" T$ h9 r8 v6 l5 [, s& _& F {
; c! z% L$ ?: h* J" b vItem.dwKind2 = 0xffffffff;
+ G3 ^6 O0 |: d vItem.dwItemId = 0xffffffff;# F9 I# h) C. v u4 n
vItem.nIndex = i;; q9 c+ j4 }2 Z$ }
}else {7 _. _/ Z; C4 o
ItemProp* pProp = pItemElem->GetProp();$ S @, p- q+ a; `9 B8 t0 J
vItem.dwKind2 = pProp->dwItemKind2;$ W/ e; m$ v$ s$ [) C1 P
vItem.dwItemId = pItemElem->m_dwItemId;2 ?* Q. h$ z+ C7 K, L
vItem.nIndex = i;$ [6 z" W) W" A" l# @
}( U8 N. y/ v5 y$ f# a* H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 Q% n! P; I( ^* t6 W; A: @ }
8 w+ U) G; {* d/ D /////////////////////////////////////////////////////////////////////////// C7 Q; V; o' U- x1 \
sort(vItem.begin(),vItem.end());//排序
% o9 c. h/ b7 L: L; i //////////////////////////////////////////////////////////////////////////
1 j4 T! \ u6 q1 L+ D% D: Q //交换5 p( Q T' d$ s/ _+ J6 e
for (size_t i=0;i<vItem.size();i++)# G6 g+ T, D# G& C- o) n ?9 p
{, ]9 l8 E/ m2 H) [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 ?0 }, \, u9 A
pInvSort->Add(vItem.nIndex);& \5 ]- J& }$ C i* I. V8 S) e
}, f# @2 q1 \0 i0 Z- T4 V. {: f
BYTE nDestPos = 0;9 e1 d; c" ~: W( O) t. ?1 I
for (int i=0;i<MAX_INVENTORY;i++)
3 o, s6 h. U: t' P% w, `% d {% s% }( ?& Y) c# A2 g& p1 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# B* O! F4 t* V
if (pItemElem)
& i2 X4 A. R9 |9 ]9 g9 {" { {2 }0 W& \6 c, P
if (IsUsingItem(pItemElem))
% B( y# C1 ]9 o {' c k8 Q% D3 S; B" ?
//这个位置无法放' X2 n) @! p2 e0 j2 D6 c' A
nDestPos++;" O L. t8 l6 s/ o5 _
}
V6 t( h8 I9 v4 m0 f: p) D- Z }! h; I: l3 O# U1 w3 l5 f( c
BYTE nSrc = pInvSort->GetItemSrc(i);- N8 a9 ~( m+ a- _, R! {1 s; k& p. B
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" E; N u- G& ], h9 I4 |; p
if (pItemElem)( \* X; A, h0 F% E7 [) _
{# V# M& Z+ c* Q' j$ I& Z
if (IsUsingItem(pItemElem))
7 _$ M4 n. v1 R6 Z1 ]+ h8 i% V {5 M+ j! w, |" P+ `$ V- F0 j
//这个道具无法移动,跳过( _! W/ l4 m+ l) d6 J# x% b, R) D
continue;
) g1 [7 n, `# c/ Q$ e% O5 w }
6 @" h6 m( e! v9 q; x5 G }else{
( j1 ~" P* ^- ]+ u" x //空位置 不用动
" b3 k9 a0 p6 q" V continue;% e: \+ N2 U/ e O3 ~9 n
}
( C4 `* P" r# z6 f) r% { //////////////////////////////////////////////////////////////////////////
! |% i- H: V/ u3 k, [7 S4 J7 v //开始移动0 ~$ H" m1 `* x! F' J4 S. A* Q
if (nSrc == nDestPos)1 L% T# _' V& c# v4 D
{5 x8 J8 ]# d; G& _* m# o& y8 n
//原地不动+ J' ^# D8 n( a- i3 n, i6 D4 V1 o
nDestPos++;
6 K" r: I4 Y) w continue;* a" t. R- U9 L" a; ^, N E5 y
}
8 {1 K) d$ e) w2 X G" v pInvSort->MoveItem(i,nDestPos);
, G- p( j5 w$ }$ ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);: ]9 `6 @( z& U! b
Sleep(5);
2 y6 S9 W- X- Z" a+ X5 c2 o4 Y6 J //Error("移动 - %d->%d",nSrc,nDestPos);: E. D9 ?& H! o' `- f6 i
nDestPos++;
& r' H5 L5 U3 b4 ?" g }* V( E3 n: J, ~7 j& n
//取第一个元素的信息
" S/ M) @, B+ ~ /*9 q( `, r+ ?& u4 k
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
H+ D0 Q2 K+ ]5 ~ {. M7 d4 ^6 ` B5 N0 V& J ~# G
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% ~4 l" v1 i- R9 p( x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 i: j3 p' W9 ~6 G }
2 j; L0 g- M2 H- S% o7 u */6 ?* y& H+ O- }1 a0 ]
//////////////////////////////////////////////////////////////////////////
0 x) o3 _, O$ l ~& @* i( C break;
+ j. x( }6 A4 R" V; H }
9 O4 i% k' {2 _5 { } / y& h9 Q; z$ v- c# @! s7 ~
}6 Q9 [: Y. |0 C
m_wndMenu.SetVisible(FALSE);
& d$ A" l4 }$ K8 J) d- a6 \
3 @# X8 }3 [$ g0 M$ @--------------------------------------------------------------------------------------------------------# ^7 `9 x7 z+ m* C
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' [/ ~, Z3 w Q6 b0 G' ]2 x2 F5 O{
5 Z% i9 |1 X9 r% @' kBaseMouseCursor();
: a4 y/ _: q. [/ j" B( \: D}' i7 Q: H/ D) B) S! s t. Q2 O/ W/ I
在其下添加:) q1 {+ j0 {7 k- V: @' z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* F3 r6 L, x- Z2 M0 B5 h3 P
{
6 E) l) ? @, _+ |6 t7 e [6 C4 T9 Om_wndMenu.DeleteAllMenu();
; \: p5 v" `. Q$ J( C2 {m_wndMenu.CreateMenu(this);
3 n: ~0 B7 T8 [( l2 s, D2 j8 {m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 r4 X; i) p% X
+ f j. ] `: R* H5 ?$ Z8 Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; |+ a2 a( r2 s{
* r) w, N* Q. D8 W //P以上级别才可以删除所有道具
# I/ i' X4 V" ?6 f6 K& f, F6 {' X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 p" V& e. S3 l8 `2 L
}' K5 Q' n6 w/ `" i
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! ~3 b" s7 u9 s' ]3 [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 C7 v" q" Y- W3 r1 Z" U' `5 _$ _" ^m_wndMenu.SetFocus();
. i% r2 E8 J; S4 ?. N, D}+ f; N9 o! Y& a' r! k, A7 ?0 q
------------------------------------------------------------------------------------------------------------) c& x* d6 b' ?# G* ]- v3 @2 }5 N
*************************9 [8 Z' ^# ^1 E) T2 m
WndField.h文件
) I1 U3 k; V0 E: M; n2 H2 f( f a*************************
# e9 N4 b/ B( H _+ G0 z搜索:BOOL m_bReport;
! _# M. p& t6 h$ ^) W @其后添加:. N& ?! X; H, W* n' G
CWndMenu m_wndMenu;
5 J9 p, j4 b* |( A搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 k0 q9 J' W7 Z: b k其后添加:
" ~( l, h* F V4 Vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- e' _- i+ G$ S( _/ J) ^7 w& R6 m/ E X/ l( k
, {7 K- z2 k8 u |
|