|
|
源文件中_Interface文件夹下WndField.cpp文件; t' k% l2 @% e# k r* x: h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 u6 ?4 `9 a9 [! ?
p" W' r* \% \: j# @& tstruct sItem
) N3 p H" q5 g6 ~! [{$ d# k- y2 [. G* w
DWORD dwId;
) `6 A; S8 f' \) g0 s9 J3 v8 T2 JDWORD dwKind2;
: J4 R5 X0 q! F4 v/ X( p$ hDWORD dwItemId;1 M$ z/ K5 Z1 p" j# X' i# T
BYTE nIndex;" n* q$ ^1 G% M5 h/ y
sItem(){1 {) u+ Y0 I) t/ V; D
dwId = dwKind2 = dwItemId = nIndex = 0;& o9 O2 V& h3 b5 o8 h* G; F. f
}
, |, L' k" n. D7 Q0 f' Fbool operator < (const sItem p2)
* L1 t: @) X8 V5 w$ E) W{# L/ ] D& g8 j U" o0 ~
if (dwKind2 == p2.dwKind2)! _# m& G! e" B5 ?
{3 a% I3 B5 Y) `; C/ o( T
return dwItemId < p2.dwItemId;$ i7 d7 n& ^2 [: k( P4 K
}else{2 w1 v) m5 w5 o7 F6 @8 }! @. m
return dwKind2 < p2.dwKind2;6 u9 r% j- M5 j, [& Y
}( E5 c y' ]9 X1 ?1 o
}
3 x' G7 @( S9 K+ A: z4 k" f};2 Q* D6 Q4 h; S! y: [! {" N# ^) F2 Y
class CInventorySort
1 z6 B' F' j, s' L4 b{
5 t4 k, [3 S# s$ T# a' r8 T% Apublic:
- k! U }% t+ I. A$ B; ?CInventorySort()9 i# g5 b' J2 X3 j0 D4 ^
{' r1 c: J: E, P4 Y0 \$ {. }+ `- c
m_dwPos = 0;$ w5 Q6 ~/ b3 [3 I( Q
}
- K$ \. a+ N% Q~CInventorySort(){}
3 f; q% W6 o, k) e: u5 [* C }+ oprivate:
2 W- N% M, Q* M$ RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; K9 {( j a8 K! J% I, t* Q) dDWORD m_dwPos;
, M) @. R! k/ }public:
6 w5 \$ P8 y+ T7 |# jvoid Add(BYTE nIndex)
5 p' X& `- Q) m6 Z) Q{
5 i0 V% G2 N# c$ T; y if (m_dwPos >= MAX_INVENTORY)
& j, o, i0 z3 [( {3 }; [ {, D7 z; o8 m4 V/ c7 c R0 Q0 e
return;- F' Z5 t1 w# f7 w
}( C/ M3 {) ?+ \
m_Item[m_dwPos].nIndex = nIndex;7 u" N; Y6 M" F/ S
m_Item[m_dwPos].dwId = m_dwPos;2 w7 |: ?: L7 p' g% K& q
m_dwPos++;$ l7 M8 U% `% L% ~* n3 @
}
7 L) F |/ y& Z& s5 j/ J6 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 r4 \. W/ R+ n) F4 d{
4 i- B" ^6 L2 C1 Z/ G for (int i=0;i<MAX_INVENTORY;i++)5 B: ?( U9 y; a0 Y
{
4 w$ D' d. p: M, w7 \0 ` if (m_Item.dwId == dwId)
0 k! Z6 Q5 U" C {, W7 U `/ V* i
return m_Item.nIndex;
: b( ?4 W- K; g' ^& h }6 g5 a' ?: X, J9 J; w5 a
}
9 @) g9 `6 S) D2 v8 J6 ~ return 255;
* S4 G* a( g: a$ R# r}
: E1 ]1 e: ]0 O" q8 |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( H( w" @# t: J4 M
{9 q4 \+ m! V& N' `
BYTE nTmp = 0;
- O' V, c% U3 s6 d2 ~$ F3 b8 k bool bDest = false,bSrc = false;
4 ~; {: K" u* X1 h' {4 H for (int i=0;i<MAX_INVENTORY;i++)6 J, }% e' G* m) m2 t
{
" q" t# K4 e/ M. o3 }( \4 e2 H if (dwSrcId == m_Item.dwId)( T* }+ z- H2 b( ^3 r- y+ S
{- _3 k, X# p+ F8 M! S6 [
//id相等 则 改变对应的dest和src
; C0 c1 f: w+ g7 Z5 {4 g+ @% F" C4 E nTmp = m_Item.nIndex;
/ F4 T) I9 q) l, h* R6 _. g" T m_Item.nIndex = dest;
% [8 Y1 F5 [. g/ t }; y) p/ B1 c2 m
}0 g( O# N9 T6 X
//临时数据保存完毕,交换开始; T* d9 f( f1 L2 S6 e/ y
for (int i=0;i<MAX_INVENTORY;i++)# J; X6 Q3 K& p _
{/ ] W, O; J; [; ~% @
if (dest == m_Item.nIndex)& [$ I# V' {1 U, |
{
" {7 c8 x: g' ^9 r //id相等 则 改变对应的dest和src& [3 S8 e; k) `6 M
m_Item.nIndex = nTmp;! }3 k3 U o6 Y3 k( {
}2 x) N3 [5 y2 D3 G( ^
}
; @: e7 d8 [. [+ C3 n6 A}
7 c# c1 [! s5 {% o/ t1 o0 G};8 q" Q0 R, g) C9 ?
-------------------------------------------------------------------------5 C- r' `% c) v6 {/ [, p l6 E; l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) x& L& P0 Y' W! Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ ^" D- j) O' |! b1 E! W1 F紧靠其上添加:) v; u" o: H) s" O+ i. \
if( pWndBase == &m_wndMenu )0 K6 y, r" r" w, A- C
{% J3 }& Y W3 ]/ N J
switch( nID )
7 A0 p. z1 H9 N {
) D( Z+ X, l2 C9 c* T! T7 J case 2:: S$ D4 A7 C9 X/ s# _
{
9 A; Q& s @, t1 j. U5 S' V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 E- q* v" c7 G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 Z$ Z# x# D/ y; Q; j5 M
{
( o8 R# l: ]# t# p' }$ H; o; {/ a break;
0 J8 ]: c# b# f$ Y$ ?1 C( B }" ~5 W2 B7 K% A4 ^5 ~7 l' e& y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) L7 O8 g4 r1 A, a; H, R
{
1 z" T0 V9 X3 {1 w3 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* h/ z* C1 y- B# a4 U0 E0 m
if( !pItemElem )
+ h3 S& V( x+ p continue;
4 H) S) Q8 h' T( ?; `$ I5 k; h if(pItemElem->GetExtra() > 0)
; B2 W' H& B* U. C( @9 `5 o continue;# H; J% y1 r9 }4 A3 g/ V/ {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % m4 ] }8 {" B
continue;
, w0 k+ ]% X2 c3 y6 n1 f8 _ if( g_pPlayer->IsUsing( pItemElem ) )
3 }) n$ V/ p& v continue;
6 Y8 Q1 l! @. s8 L8 b, ~" X if( pItemElem->IsUndestructable() == TRUE )
* s/ f7 F* m/ t5 Q1 [+ n0 J, ^ {
2 `1 B' p$ U7 q4 O g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
G% @( @9 W* U, |$ x! g8 i continue;2 Z6 z! `- _6 g4 |: e7 D
}
' T9 q( e/ K: r4 I8 m; J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 n) ]5 V4 d4 M8 L. S$ \# t }
! ^. ]8 s' E& D9 ? break;
) ]% t1 n) b8 ~! i" p( t) m }: N! @5 A7 d5 y! y! x4 `/ W
case 1:8 R4 F* V% z. x( v+ L2 n* D$ r
{1 z M6 u# r' \! }3 B/ F; X8 m1 @
//整理背包
" ^4 m+ D' b% d& ]. G& t) } //////////////////////////////////////////////////////////////////////////
; E" Y; W k: _3 U //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% ^8 _7 N" `$ P) ^* L4 V //////////////////////////////////////////////////////////////////////////
8 P& n, ~3 I; M- C0 H //////////////////////////////////////////////////////////////////////////3 H5 Q' {' i4 j& Q. ]" I" h
CInventorySort* pInvSort = new CInventorySort;9 O# M. i& B; k
vector <sItem> vItem;
3 _# |, K# e4 M& h+ O! a4 P vItem.resize(MAX_INVENTORY);//初始化大小& @& \+ B9 N+ r, d! T) w/ r
//////////////////////////////////////////////////////////////////////////
5 t1 Q# R" w2 }& ~& _* o8 Z; a' e //填充数据# b6 |3 V6 c7 A0 `9 H1 G
for (int i=0;i<MAX_INVENTORY;i++)
) A- I6 L+ \) }- ~ {
: B0 W g! m9 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 ]7 @; w8 _6 K, |2 G' W; b( H9 x if (!pItemElem)
, a# M6 O+ G, a2 O2 ^ {7 b( K2 s4 U. v. H }
vItem.dwKind2 = 0xffffffff;- L3 p5 J# f' m! R; [( y% C0 v
vItem.dwItemId = 0xffffffff;1 J' B% V: d) r3 _ l3 N5 c
vItem.nIndex = i;$ ]9 z% j" W. k/ `: h1 c
}else {
% V! B. L6 Y( W! _' ]/ Z( j ItemProp* pProp = pItemElem->GetProp();
% |% J& Y0 P* [& F% e* Z" E" \+ ^ vItem.dwKind2 = pProp->dwItemKind2;3 ?) x' b# {8 J* n- ~( d* l
vItem.dwItemId = pItemElem->m_dwItemId;
8 O, i; w$ c, t1 g% T vItem.nIndex = i;
+ O) z) U4 G: o `& |0 C- \ }
8 q1 m. v* Z7 d+ v! s2 n //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* v1 G- c2 _6 L
}$ \- d& k* m- g8 I6 H
//////////////////////////////////////////////////////////////////////////
6 `1 i0 v2 ^5 i0 Y3 P sort(vItem.begin(),vItem.end());//排序0 b _' S; Q9 O, I
//////////////////////////////////////////////////////////////////////////6 c( x) ?( R: [5 l- w! i; w
//交换! J0 @3 t% y1 H* R0 w1 J: p# L# D
for (size_t i=0;i<vItem.size();i++)
5 E i9 a0 D! Z- W4 A {% p9 |3 |8 {! L
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- K9 L7 S: I. E7 a0 S) S# ]/ m! ]' y9 {+ x pInvSort->Add(vItem.nIndex);
# k5 x# u. k- G+ v1 x4 k' F- o }2 z- }/ Q7 r1 _9 l9 p
BYTE nDestPos = 0;
, X' ^" n5 c0 f+ O/ O$ X' I for (int i=0;i<MAX_INVENTORY;i++)/ e" s. l: X* I
{% @6 w9 J0 N& m5 o1 l v, Q& b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); x( k" r9 |5 M/ R
if (pItemElem)" X( M3 P$ R; T0 k4 r
{1 J- J, l( j e2 M
if (IsUsingItem(pItemElem))
: i, Y w; U4 a: r4 d$ M. A' `7 u {# |2 y! c+ \5 M9 I# h7 l
//这个位置无法放
# h9 f, k: y. d8 O3 L- l nDestPos++;) C" Y% m3 T6 G( J9 j' A& A
}
7 Y; N) U% L# m, P5 K }( [8 R0 m: w# G0 H& ]$ @$ R( x
BYTE nSrc = pInvSort->GetItemSrc(i);# k1 s# |0 z* }- S) [" [+ L/ X1 o
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 P9 G) ~8 `: c/ @ if (pItemElem)* @& a8 l G% v4 b& t! F
{
6 b: s$ m) ^0 @+ g if (IsUsingItem(pItemElem))
( m* x) B/ p8 \, d; B* l$ m/ s {9 w8 \6 R3 A0 E. S4 J
//这个道具无法移动,跳过, k; o4 h/ L2 m
continue;
3 X) y' H# ~) X6 t2 [$ G8 { }
7 x! k" P& h3 l: v( D }else{! p: ]& y. E' R1 f# u: Q3 k
//空位置 不用动
- ^- P' Q# ~) r! d( Y continue;
% u6 R5 g8 k) f& ^, d }& d) A/ ?9 W/ ~% Z
//////////////////////////////////////////////////////////////////////////2 {( m' F4 \ i0 I% |0 t+ O
//开始移动
$ |, l$ K, @) `/ `0 p! r" w if (nSrc == nDestPos)
* [( n' s. Y; }/ U% L {" @$ a' e5 F$ l; m* j& O
//原地不动
* Y. C9 w0 v$ }' b nDestPos++;
. c0 k( u6 g; u: O6 P+ g* @ continue;& u* l8 Z, ?8 [# G' R/ Z
}' Z8 p+ P* q9 I( H, `
pInvSort->MoveItem(i,nDestPos);; L0 p4 q; x2 }. j; M y- H V
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 C- c" R5 O/ L$ n
Sleep(5);# I* g+ U& p6 U
//Error("移动 - %d->%d",nSrc,nDestPos);
& H, `; J& W* t+ k7 N nDestPos++;
0 G+ o; L/ _- t& I a }# s, }0 e( \ \) F7 `' [# g
//取第一个元素的信息: I9 q! J0 d, H J
/*
# e& x" t& E% c if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 y/ c0 W H4 i9 B1 Z- Z {2 v+ u# h! r4 \" q/ [5 P K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, q4 Y% b0 @& J( `' r# X; _ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" ]6 s/ y: v4 p; f }* E s+ [7 C1 g8 h7 N
*/
/ T/ R' N) I7 Z$ v* R' t% { //////////////////////////////////////////////////////////////////////////
3 P# x, w# D. ?# `2 A break;( |% y9 }/ W4 |
}
6 ^: {1 L3 d8 n5 {$ F8 q7 F# k } ! J3 I9 M( A0 x+ q% _0 q4 e5 |0 b6 B* l
}; ^: Y7 T# E8 ~$ d3 L# x
m_wndMenu.SetVisible(FALSE);
' J/ X. [ q8 Y
3 W; z$ P, I" `+ n: z, c1 Z! x/ @--------------------------------------------------------------------------------------------------------
0 |/ ]: D$ [. p) V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) W8 z5 g) g0 q+ B ?
{
3 S6 g3 M: m% h9 kBaseMouseCursor();
, N$ ?! Y% d0 ?9 h* P2 T/ k}
% F; x+ Z `4 v& Y0 ~在其下添加:
$ \2 p" I' t" c/ Q2 _) ?void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% j" y: p6 X9 M0 [1 H{) n$ P7 x: e( [. H
m_wndMenu.DeleteAllMenu();
2 r2 `1 A- [9 Qm_wndMenu.CreateMenu(this);2 q( G) m7 Q) t1 m
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) d1 k6 W7 Q. z# \3 f- m
9 R* A0 c) C' I6 y/ E( bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 E/ o0 x' B2 y g1 R
{; v" b" U5 F/ r9 x3 [" i
//P以上级别才可以删除所有道具$ \0 y8 c- G- Y2 q6 J0 v
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 ] ?1 ?2 B, B/ G* d% B}! [' \# M% ~# g. [7 ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) @3 G) m! c c7 M+ G8 c+ P) R7 |m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: E6 b$ q1 c: \; I, am_wndMenu.SetFocus();
7 K3 q2 f7 [& }/ \8 T/ d- z}0 E- ^% U% K2 K% Q x" {
------------------------------------------------------------------------------------------------------------6 Z. y9 S. Z. R I0 `0 G& G7 l
*************************
+ _4 E9 T0 Y" i, ]- A2 kWndField.h文件
8 j3 A' |3 y: E/ P: K7 w( g*************************; x0 ^3 J7 H( P3 ^1 F" R1 O5 |
搜索:BOOL m_bReport;# U& K$ v* T# R& R
其后添加:
8 j7 q: r% B; X. f, w; JCWndMenu m_wndMenu;
, h9 m3 e* a" i. ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* r; t( }8 x/ Z
其后添加:
9 J% ~# X: {, F% a9 M# z2 k2 N% u/ p4 Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);) x- Q7 J8 _" ^ t. K$ ^
- @: K) e$ u i, K8 V( @' d
# N$ E, b) M6 h; r0 }1 q+ C' ~% j |
|