|
|
源文件中_Interface文件夹下WndField.cpp文件
: }0 y# n) {# u- e( O: o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 f3 d- i0 f4 T- s) A
& K& O( I \" }1 h8 x: I2 nstruct sItem
( e! f5 t, b! h{) d( N$ [$ T$ {. V6 F6 d7 |
DWORD dwId;
6 f2 b- V% Q$ w3 B6 Z/ Q0 zDWORD dwKind2;
& {0 q) [' {$ Y- v* ]DWORD dwItemId;! c- V. _4 i% m' e1 b& g
BYTE nIndex;
; }3 r& Z# h. g, H1 l; nsItem(){
- S% x2 Y( `% w+ {" e8 f dwId = dwKind2 = dwItemId = nIndex = 0;: g: \2 o- f: I
}
$ P2 k/ }5 R$ d9 a Z( z3 ibool operator < (const sItem p2)0 l; n n( u7 x% ]
{9 f! U$ V+ Z4 Y- m! o' ]! P
if (dwKind2 == p2.dwKind2)
8 s0 A* E' z2 g2 G6 X! x {
& x- W D5 |7 \; H return dwItemId < p2.dwItemId;% n- a, ]5 F2 t; f( j* [2 J6 X v
}else{
8 Y/ M5 e: I2 ], _6 } return dwKind2 < p2.dwKind2;: I L1 K, o! x1 ?. s$ `" C
}' Y, s5 Q! d' X: ~9 _" j4 V( U
}
|7 h) x: D/ X$ c: P: V" i9 V};2 B! X* o& j, u# ^
class CInventorySort( {$ k; j5 l" \: f1 W
{+ Z! G' p7 }, D8 z6 `0 K0 L
public:$ ^+ y6 t+ O; e, g* z0 v4 w+ S
CInventorySort()
( l9 x) _; Z }# O6 `- I{
2 s& |+ T' m5 v2 o6 r$ P m_dwPos = 0;
7 ? h6 D6 | V2 F6 M, `$ `}: _5 K* G# a- l/ v8 \$ t! m
~CInventorySort(){}& }1 Y4 r) I9 ~' {
private:" C7 W7 ]' w! Y1 x' r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' Q+ G- L2 H. W* t/ e* N
DWORD m_dwPos;# y. u# m" r; g8 e( e
public:1 U% \8 {2 Y* O. ^
void Add(BYTE nIndex)
+ f. C, a2 K9 n' W+ E{2 a8 B; Y, o% H* Y/ a
if (m_dwPos >= MAX_INVENTORY)
* C l& X9 {3 ` {7 z5 P3 X& C b% j) L. B1 K
return;
0 _3 X% |5 _ N( }7 O w }
7 m$ {! G4 ^7 a* `# t: T+ { m_Item[m_dwPos].nIndex = nIndex;2 @+ N$ Y) \6 C/ C( i
m_Item[m_dwPos].dwId = m_dwPos;
+ }9 x, A. a9 @0 j m_dwPos++;
7 S- T8 R) \1 \/ Q( J6 u( ^9 C}
, J; i5 @0 v- ]7 i1 K: P! JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- @' k3 }: K( q) J5 f{
1 k% m. C6 Y7 ]. y! U$ N. W4 g for (int i=0;i<MAX_INVENTORY;i++)" y! h; d+ j( Z+ `5 [& C& S8 j
{% D: m- `8 ~/ [, K% x
if (m_Item.dwId == dwId)
& v* n: r* X9 a4 m. u+ [7 E3 N5 Y {
$ I \( o T) } u0 i( [1 W return m_Item.nIndex;
" N' l c1 z: Y! V, m }, `7 s5 |5 S0 e* e9 |
}# e0 I! z. _- T0 r, h' H8 \: k
return 255;/ q2 V% U8 G5 b h+ c
}+ u- U: K& G+ U' h J- _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# y- e8 b2 @4 w- s5 E" P ]1 z
{
0 _6 g `' ]0 x; b1 M- o1 a BYTE nTmp = 0;* X, b3 ^4 q4 O9 B- w/ P4 I/ [ k
bool bDest = false,bSrc = false;6 | V/ y& h5 X3 b7 m: V. c2 W
for (int i=0;i<MAX_INVENTORY;i++)
0 u! A# @! @0 m; o0 G7 h {2 x5 o! N: H4 V4 o% J6 t1 `# c
if (dwSrcId == m_Item.dwId)( p3 J; H! [" _9 r. Y
{
; L. d, k2 K6 s9 m6 L6 n2 F1 J/ ] t //id相等 则 改变对应的dest和src, b* \: ]* W7 N4 m$ k" u
nTmp = m_Item.nIndex;, z9 ?7 {# l* W# B2 R
m_Item.nIndex = dest;" I4 n( l9 T6 s* I5 ]( z
}
% j6 V4 R; \, ^ W& e4 |5 Z) g/ F }
/ \+ j) \& f& |8 s( k4 l //临时数据保存完毕,交换开始* E( T; @7 z5 L8 z# v
for (int i=0;i<MAX_INVENTORY;i++)" H) _" ~/ u. I; S1 E+ }' r
{* L k+ `8 C6 f8 f( ?/ m
if (dest == m_Item.nIndex)9 |" R0 h7 l- z
{
, z" g' G9 @) ~5 i9 e //id相等 则 改变对应的dest和src4 ^8 H) a" ^& `) u8 p2 E
m_Item.nIndex = nTmp;/ b3 C8 g; m2 I# |0 W
}
% C+ }* \. l$ s0 ^6 V) O }
: f9 h. e. T; O- X$ d! o; K! Y. S}
+ \ W3 `/ k, u+ f, \& A7 J6 b};; [* X5 a3 e/ {# A/ u; o
-------------------------------------------------------------------------
- ~; T' A2 i8 C! R8 ^6 D J依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 z5 {' F) c9 n7 {, k/ N/ t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; S$ z; Q. n+ C* B* D# M: {3 d紧靠其上添加:
8 S* V2 o6 M: [- tif( pWndBase == &m_wndMenu )
h5 [$ \- ^* `8 Y1 d{) I9 c4 @- R$ y
switch( nID )6 u8 x! J. G2 [* }
{
6 p# `3 [" I( m f3 p case 2:
( j j% n: e2 q5 L; K6 H {
# x! \9 l& E& B; z; G. V8 ] //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ n5 |6 Q' c# ]8 p$ c if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" v" U6 h3 o0 P5 A9 X% ]& } {
' O; n6 i0 n( o7 l break;
E- P! t) O+ p$ C n; C1 ]8 e' I }
3 o/ m5 C, J, |% f" b$ s- B for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# }, |8 b# e4 K {( c, H! x2 p8 y' o1 b P1 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( R. R2 J; a8 ^
if( !pItemElem )- S q- k9 M, Q6 U% @/ i
continue;; ^: d5 _( u( s2 K) A3 \/ l. `
if(pItemElem->GetExtra() > 0)
! w6 }8 `# t6 Z+ S3 J continue;
7 S. C3 b7 i5 o m2 H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , d' r2 |/ S+ @# d$ V
continue;
; [. O Z( d+ p0 j; K. a if( g_pPlayer->IsUsing( pItemElem ) )' q/ K2 T7 t6 w
continue;
g# M- i& w% V ?! E if( pItemElem->IsUndestructable() == TRUE )
% I2 _- L" q7 L/ G {
9 m$ ^8 ^; B( K$ w1 V g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( C. W. M% ?- e4 x+ x1 d continue;( g4 E& |) ?- h3 b* o
}
5 N) Y, Y$ e+ S+ n% C+ ^$ j6 K g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: N* f6 C6 k6 `9 d2 G/ t
}
) @: H; F) F- g break;# P% x. K0 D/ E9 Z# J
}+ M/ A0 V4 q* J: k. u: u* Y& U; a, U
case 1:. o+ D7 U$ j# u
{ b- y. B- r! U8 u9 V4 @- w7 b
//整理背包$ Z" e% l0 r# _5 K
//////////////////////////////////////////////////////////////////////////
4 I. I" M/ p$ I5 b2 T* Z, U8 g //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 f/ P5 @0 N1 b" A& @& U: } t2 ^) ` //////////////////////////////////////////////////////////////////////////
- C0 Q! I; E( O //////////////////////////////////////////////////////////////////////////
0 x( p9 ?+ I% ~ CInventorySort* pInvSort = new CInventorySort;
( j, T4 R; E" ]( E! b4 h! o* l vector <sItem> vItem;2 X/ w% I6 \5 B3 y1 O8 I* j' v# x
vItem.resize(MAX_INVENTORY);//初始化大小
% F2 y. Z7 r5 F //////////////////////////////////////////////////////////////////////////* M/ B4 Q% G2 z0 i. W- L
//填充数据
5 T% a- x4 k/ T# I for (int i=0;i<MAX_INVENTORY;i++)3 O4 v3 P: m7 K# l1 {; T
{( {4 `- @9 l5 H0 P- @( d {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& j0 W) e3 {6 d7 o* d* Y
if (!pItemElem)* s, n# i+ Q- _2 G3 f$ n# h/ D$ @$ R
{/ [3 ?$ g$ |# B. t7 z
vItem.dwKind2 = 0xffffffff;; X2 z: P" Y' @2 M: n& v
vItem.dwItemId = 0xffffffff;2 K# ] x+ Y' g& \$ [) y
vItem.nIndex = i;3 E2 X1 h1 |$ r/ V7 D# w
}else {' b; N5 A% H8 O( }! `: C4 ^ V
ItemProp* pProp = pItemElem->GetProp();
( f- q9 O; [: L5 ?! ]( n" J6 M# f vItem.dwKind2 = pProp->dwItemKind2;
. [) N; |4 t* }4 Y8 X* Y5 d vItem.dwItemId = pItemElem->m_dwItemId;
: y; r, P+ A2 x1 R) E: c/ j9 Q vItem.nIndex = i;
9 x6 K* N+ U. r- h }& N* m/ u' _$ F8 a* r" e
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, g2 c+ z8 h1 C1 m }
6 e/ Y! o+ i% l$ l0 p" G' y //////////////////////////////////////////////////////////////////////////
( w% \. v: G& A5 @, G sort(vItem.begin(),vItem.end());//排序
( W; ~# f' W4 y/ B //////////////////////////////////////////////////////////////////////////
+ D0 }/ [( `1 N //交换
) w1 v1 ^, E" h7 M( M) e for (size_t i=0;i<vItem.size();i++)7 s4 |1 `6 k: U; }+ u1 ^
{
7 F, S l: T! O6 W //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ x" W# t$ l, T. D3 U2 w5 F pInvSort->Add(vItem.nIndex);6 w5 T% I( F0 e( Y6 d- {5 E# h9 v
}2 J2 f y4 p0 Z6 Q. U
BYTE nDestPos = 0;
5 A, T3 @! R. V' A for (int i=0;i<MAX_INVENTORY;i++)* `# `% a* e% c; i0 S4 U- p
{
6 y& f- }) ^7 ~# U! c5 q7 G! G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ {8 k! a' W" `1 Z+ e4 L0 y
if (pItemElem)$ t% z# f8 k; W- d2 P) m
{
5 r: j: B: h* ~/ F& y; K% h9 B if (IsUsingItem(pItemElem))* K* _( t+ v, q) I+ }
{4 f/ ^/ x- N, v$ Y; Z+ \
//这个位置无法放
- o# v# j2 c0 K9 a6 T& t! p& K' x2 e nDestPos++;
* O0 U2 Z1 q7 Q1 b3 C }
- [. L7 U" q2 D# A9 G0 V }
) S0 N1 j4 S, e* z. B5 O) r8 h5 { BYTE nSrc = pInvSort->GetItemSrc(i);: g+ z& N+ k0 ?) a7 N# r
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 d* Z. q! l7 ~
if (pItemElem)
7 K% P: a. B0 ^, l {
6 k2 z0 H6 Z6 s+ C if (IsUsingItem(pItemElem))7 Y7 h# ?2 v) z
{- C& V! S/ O }2 k
//这个道具无法移动,跳过" t0 R3 [* x2 N! f* R& z# Z$ y
continue;; L% |! B# |: G5 o& X! O
}
- `. j- P& a3 N }" E5 r8 p }else{) j) P& i7 }1 Q" C- E& `
//空位置 不用动! R% M! c" z4 h8 P
continue;! u9 @( F/ [8 P1 A7 z- R
}5 T4 p9 N: j5 p/ a$ f
//////////////////////////////////////////////////////////////////////////. N2 b+ l6 a/ E/ l( G
//开始移动
0 K3 T9 |7 o7 z9 V8 e+ z if (nSrc == nDestPos)
; Q! h. m" j; G* v' h {
; H- n$ D& e0 t" ` //原地不动
" e% I* k( b+ ~3 B nDestPos++;
. X. ?/ U s$ q, Y/ J continue;+ s3 n7 L7 y, P6 ]0 |9 @! B5 j
}
, w3 M8 }0 H. @ pInvSort->MoveItem(i,nDestPos);
, j) `" a9 R: x( V8 b g_DPlay.SendMoveItem(0,nSrc,nDestPos);, i2 n# d7 y$ v! U
Sleep(5);, w% Z4 r2 \9 l% L6 u! N' r% O4 U
//Error("移动 - %d->%d",nSrc,nDestPos);
& s2 r) \" e! t9 f/ x5 | nDestPos++;0 m4 D1 D* A, B, n6 F
}0 k7 u6 f: z. f- l
//取第一个元素的信息
1 i% T3 E5 y9 j0 _ /* ^' [2 C7 w: }2 N7 r! s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. h: |( s( X2 }1 L {
' z: u+ Y/ D [( q7 r. c Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 Y& M0 f1 Q: { J# F: q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ P- u. ^, q( E1 [
}
m# |1 g6 {% N9 L- |+ w */
% Q5 M& h; x" G$ M* d //////////////////////////////////////////////////////////////////////////
$ T$ {+ H( [* T/ X break;0 I9 G. D& |! m+ \3 ~+ P) Q8 v2 g
}0 |9 g, }( U+ n q* ]/ F. l& l
}
! {+ G( y/ P- P0 S3 [6 Y}, S: t9 x% T; l
m_wndMenu.SetVisible(FALSE);
/ n- I0 [% |& }2 m
" s3 S9 A& c( B) I--------------------------------------------------------------------------------------------------------% u& h4 F; `/ N' G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 C2 p8 c8 L }2 I: U6 S{
# e4 ~: o' ~6 `+ E0 N0 aBaseMouseCursor();
4 ~$ s7 M# b; B Q# ?}
3 l- u+ ^$ _6 a& K0 y在其下添加:
2 T/ w9 e5 O: ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 ]+ ]% x+ e7 ^: x5 a! O7 k
{. a3 ]2 \2 A' w& A1 J
m_wndMenu.DeleteAllMenu();! j1 U. H: N- p' A4 y0 ]
m_wndMenu.CreateMenu(this);+ ^, {' |# A( j6 t+ {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 s, y, o. s; q- S
4 y% h* |1 }* g2 `if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 M/ l6 h, |; u \$ ~8 N: c' T9 f* X$ G{
' T @& t1 [' ~ x //P以上级别才可以删除所有道具
; ^, S! n; B) m* A3 W0 f- p( b m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; l& g7 _6 n7 r9 {1 {" h- e+ M}
; F; y" y" K8 F5 Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; D! X* a# M, `& H) jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( ~/ N# O' w/ q, pm_wndMenu.SetFocus(); Q) k: J4 @7 R, P! i( U
}
" l2 T! f6 @+ F/ c/ x: \------------------------------------------------------------------------------------------------------------1 Q6 S$ `' t0 d, j( L
*************************
; C# v& t- k, z0 m5 g& IWndField.h文件6 L% I; e5 w* K+ J; ~
*************************/ C/ J4 a0 f) ]/ ]
搜索:BOOL m_bReport;
/ K# Y) f& N8 A" G其后添加:
- h3 I9 g# V3 {. e+ P5 `+ J9 UCWndMenu m_wndMenu;
5 e! I! A7 j6 K6 X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 C4 B% |4 O9 s: p r" r8 \; W/ d
其后添加:4 t, W( {/ `0 `% x- N
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; R9 J- Q$ e& |, a
- X: R2 g% j) o# G9 S* q; ?8 `* P- a. o3 d: F
|
|