|
|
源文件中_Interface文件夹下WndField.cpp文件
7 a* D3 a7 ~ c搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 s3 x% k6 T7 b- K; X% F ?
0 s) L. M% i+ D. sstruct sItem
3 ] C2 ?/ Z8 T5 B, {1 G{0 n3 a% U: e c& L1 m# s) |- k; m) C
DWORD dwId;4 f( _" j7 C. ]+ g
DWORD dwKind2;/ \' Q1 \; S' \: U' K1 P( {
DWORD dwItemId;
8 z6 S0 ~) v! m; q" O5 |$ s0 zBYTE nIndex;
! @6 x8 b; z% HsItem(){( y' F) G8 E, U2 m0 C& Q
dwId = dwKind2 = dwItemId = nIndex = 0;
* y1 E6 z0 i. W& e$ ?; J}
. {9 A- i* N! P: Ubool operator < (const sItem p2)% P9 s0 ]$ w! Q, B% _2 k) M. U
{
* i- { R) C( [' v& {$ f. S if (dwKind2 == p2.dwKind2)
3 L, d& Z# ^/ J8 N {7 ~- j \* O1 Y
return dwItemId < p2.dwItemId;% T& @% K5 A8 I# b
}else{# r, D2 q- V1 w9 S$ l3 @
return dwKind2 < p2.dwKind2; x5 h3 e0 ]; G
}& A4 i( A- q. d, Q' J
}
; @9 i1 L: W h$ N o$ x2 u' @8 b};
3 @" [: q( E- R# iclass CInventorySort* n# Y5 G! U( m, ?; L) M2 H0 z% J
{+ x2 U- l4 J3 f/ O* n
public:
. ]0 q" O& U* N* X3 R, D$ D! Q: C$ q/ ~CInventorySort(), S/ ]2 B! l& u! v
{ U* N% U/ K$ Z9 D3 ~/ g
m_dwPos = 0;
' m/ O% G7 { B* y7 e3 z}
% {" M& `) D3 D# F~CInventorySort(){}: S# {6 Z- c8 o6 l: J4 j( ^# H4 Z
private:
! J% V" s3 `: V, O, f0 XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! u0 g+ N/ k1 h6 lDWORD m_dwPos;& K+ @3 m, s, D( s0 ?
public:
2 z& _4 C% k i% ?. Svoid Add(BYTE nIndex)4 k. s: |7 Q" } \5 b- @/ }7 k
{
; m1 u# G; K8 ` if (m_dwPos >= MAX_INVENTORY). V k8 c4 F* G" a. C8 y; y% ~
{" h$ Q3 F$ C' Q" V8 {2 y& q3 |
return;
v, d$ e, B/ a6 i0 `: P }
4 l' q( k* y: Q: O9 u m_Item[m_dwPos].nIndex = nIndex;
) r2 s s% Y. y* | m_Item[m_dwPos].dwId = m_dwPos;
4 K( C5 G+ H/ N m_dwPos++;
/ n; a9 `) o9 y}
0 ~% T! J& \' ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! X) T v. \- v% E) P% S" F* h( A
{
2 j \6 K$ d9 P {+ _* Y for (int i=0;i<MAX_INVENTORY;i++)
) Z0 K. f: |! {+ U; Y {
( F5 f+ v, Q7 f! a! N* h1 x if (m_Item.dwId == dwId)" |) K) J7 T' m' k H; _: P9 X
{
$ I( k( D+ I! Y0 v7 X) |2 z return m_Item.nIndex;
' t9 O* U. q: j }; X! F9 [ B2 y
}
* x& l4 O8 F6 S$ x$ i2 Z return 255;2 B1 K* p' Z- v! |
}4 `2 V/ s7 @; e0 J% G, H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& H- I/ G' M4 w# w8 L{+ u% x: A+ L0 H0 o# o
BYTE nTmp = 0;* o* Q7 @" _% V; r, u* ?- K" L
bool bDest = false,bSrc = false;5 \- m& o0 r, n0 M$ q$ s9 k
for (int i=0;i<MAX_INVENTORY;i++), }! Z5 P- |0 ~! ]
{
0 i2 p& G( z! I/ s4 p5 `9 R% ~ if (dwSrcId == m_Item.dwId)
9 Y1 q. Z+ i# `0 [* s/ I {5 Z3 A6 s7 U0 H. ^7 ?
//id相等 则 改变对应的dest和src
' ^) @8 _/ U8 m) Y& F8 h nTmp = m_Item.nIndex;
: P0 {/ E" `; x+ D6 a! U m_Item.nIndex = dest;) n: Z' r" B8 ]' z9 n# N
}+ `2 Z- M4 s s1 r) a
}/ h+ J. x2 v V4 m
//临时数据保存完毕,交换开始
. }8 ^: i% W/ W7 r( B5 `7 \; f! M for (int i=0;i<MAX_INVENTORY;i++)1 d* ]7 I5 i- f: S
{! t8 |' |9 z( r! Y, H: v- }& g9 l t
if (dest == m_Item.nIndex)
* x- Y7 L: y% m$ N9 |+ ? {
2 S$ L) c) d. p7 i* ?2 | //id相等 则 改变对应的dest和src
O) j% X1 n8 I3 W5 ]& A K m_Item.nIndex = nTmp;0 R# ?# ~& S9 i8 a4 O' A% C
}
' D9 b( A7 `2 [$ E' } }
% L0 i% h) ?) O# L}
F5 u8 N4 H9 _% T. Z) h8 ?- C7 C};0 U- k( D+ e) L' @) @. w
-------------------------------------------------------------------------
0 Z8 p" S% _: A& t' o8 S$ h4 j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 W9 s* d" e$ X' G' _. o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 Z/ R: ` j1 N4 i8 g' K紧靠其上添加:
@% F0 |3 O% {- Q g* U1 Iif( pWndBase == &m_wndMenu )& g! G- K( j' A$ N
{
; R6 v; ~* P5 p0 T switch( nID )
, H5 u- a4 a5 A; }+ n" |8 t {. v |! |3 O7 a8 @% J S8 P A
case 2:- f) ]5 z' e3 f& i8 U$ `
{" ]) ]/ x6 O9 |) Y I& ?! S3 r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; X- V. `0 _7 p1 r; L5 U( J7 T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& Y( F+ t% R1 _' @ {
& R% H* b1 K1 F. {4 e2 \3 O break; d' E+ w, M9 Z( K8 ^
}* k7 f7 b8 F5 V" ?5 q0 _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* k* U9 X9 r& {+ |% r
{
4 {% j$ k- `: @7 d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. H/ ]# o9 n' a! b$ w
if( !pItemElem )
/ X% R7 j2 h2 o continue;
8 c3 y% ]& g' b7 n( ^" k9 R2 c if(pItemElem->GetExtra() > 0)
: R3 r5 Q0 Y9 v# r continue;$ e& R% S2 G& u0 k# L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : _1 c0 O1 k" I! D/ w) n5 Z
continue;9 J$ c# C o6 Q- C
if( g_pPlayer->IsUsing( pItemElem ) )
9 s" x6 j$ ^. y7 ]8 I* t D$ }7 ~# E1 ^ continue;+ b9 p: R; x9 S
if( pItemElem->IsUndestructable() == TRUE ) ^* w- g$ q6 t" O" M; Q
{* W( i- v* N! z. O) b m% C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 W) S9 `" U- n3 b* k) z' a* A+ @$ P continue;
- }6 `- N% m# p4 V: p' j }
8 v$ D/ |! ^' u- X6 a1 e* F5 R2 i g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% Z3 u2 r' M7 y1 j; N }5 m' I; e9 b. `) v7 x- e' f
break;# L% m7 ]9 L8 y: k* L2 J
}! E5 l/ l; `* A1 P' g
case 1:
|5 J: ^1 s5 i+ U. s3 N, u {' B/ h( V- \' e& `3 W5 o
//整理背包7 c/ o# m$ n8 ^8 `6 M- Y
//////////////////////////////////////////////////////////////////////////
2 o0 ]) x `6 D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 F( }1 d( A) T, ` /////////////////////////////////////////////////////////////////////////// n% q$ ]) }9 V9 i, e {: W* V
//////////////////////////////////////////////////////////////////////////& C- f+ Y! X. ?- C5 n6 u
CInventorySort* pInvSort = new CInventorySort;: t/ h0 ^- w' R6 ?7 M
vector <sItem> vItem;
8 u# P* u; }7 T( e8 J% m) [/ P" @ vItem.resize(MAX_INVENTORY);//初始化大小2 P5 n5 |8 a* \
//////////////////////////////////////////////////////////////////////////
- w6 c- h! n3 O& a- Z: C //填充数据
+ \/ n! P* m7 @* ]/ E for (int i=0;i<MAX_INVENTORY;i++)
! W& k1 `+ f; [% \7 H {
/ Y) D: E4 `: ^# a: ^. \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! N/ V8 }, T5 n: x
if (!pItemElem)# ]- ~" Q/ y2 M
{3 Y( z/ J2 X5 U7 \7 S1 e4 W" F4 K
vItem.dwKind2 = 0xffffffff; B& B/ c5 s" j `4 c+ D4 }4 Y
vItem.dwItemId = 0xffffffff;
! P( A: a; \" C% u! ] vItem.nIndex = i;+ H8 @2 w- E2 q9 |) B/ Z
}else {+ [" t9 L2 ?; k+ p# @' K
ItemProp* pProp = pItemElem->GetProp();! D; o4 E: T4 x2 U$ \* c `
vItem.dwKind2 = pProp->dwItemKind2;
& l- v$ T+ p" A: {0 ~2 N vItem.dwItemId = pItemElem->m_dwItemId;
8 O6 V( @, |" o2 ] vItem.nIndex = i;
) b' c* R4 s% m4 v) N4 T }
: f- a8 _3 [. `6 |, t0 T //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ } } Z" M0 F/ H6 m }4 v3 S- T* M# V- A- l
//////////////////////////////////////////////////////////////////////////
, X6 k0 o. {& o* @6 T; Z. p5 }$ U# v7 O sort(vItem.begin(),vItem.end());//排序1 J, ]! E9 I. q& [ ]0 L7 Y
//////////////////////////////////////////////////////////////////////////) B0 W: W7 `4 k: `/ D! Z/ \2 W
//交换/ n2 @- C4 V0 {3 e8 V9 T% N
for (size_t i=0;i<vItem.size();i++)% R* X5 {6 L5 Y- O, ^1 C" j+ ]8 E
{- R" J5 [. K" R3 c9 {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: O& L9 ]( j( f0 N. ^$ u8 p* B
pInvSort->Add(vItem.nIndex);
. q" R3 C- k7 q* D- C7 i" c0 } }- l$ ^- a- I* N5 ?4 h$ Z4 H
BYTE nDestPos = 0;* c) T# Q. ~/ t7 U% T3 a
for (int i=0;i<MAX_INVENTORY;i++), s) E# Q; q" n
{
7 S& r" k+ J( B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) w" h/ v' \: o6 ]4 @7 Z
if (pItemElem)3 S3 \3 e; b% R7 A2 \2 h( l7 k
{1 d4 l1 E% D! i. z
if (IsUsingItem(pItemElem))3 \7 _3 I' K* C3 m$ m( s1 B
{5 `) x6 m; e* P5 @
//这个位置无法放) d7 s1 p- a! z, j# \
nDestPos++;
) v9 W# J* a- }' T. { }! }4 G1 g+ Y p4 n4 V1 K& Q
}
( l/ _& |$ Y1 \, ^1 Q$ Z4 ~ C! ]) A BYTE nSrc = pInvSort->GetItemSrc(i);
0 N: P" @6 i) a0 N pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! `3 ?4 G& h2 n- j# P) g; m" g
if (pItemElem)5 F9 @3 n7 q4 u+ E" m
{
( D( o& d% P6 E if (IsUsingItem(pItemElem))
+ m3 |) \1 K- Z' i3 s/ \, E {
9 C2 w! u P* {% w, p# | //这个道具无法移动,跳过
! i" A9 @9 F* G! p' L continue;
! O. R' k! F+ Q2 l' Y } Y# ~* E4 A+ k
}else{- \' g4 i" Y+ T8 i; V0 h
//空位置 不用动 D0 D v9 q+ S9 O3 D+ g
continue;
$ L0 U$ L; j( N5 n9 D }
* z' ?7 {& G' A6 N //////////////////////////////////////////////////////////////////////////7 D& g* N6 i. y
//开始移动
3 n3 ]. c. x7 }# \ if (nSrc == nDestPos)
' ]9 p: |* r ~: Y4 X ` {$ B' F" b' }' X
//原地不动
2 [; e+ u1 T1 h' Y nDestPos++;- m/ W9 D0 L' ]6 T4 Z
continue;) t" C+ t9 }" \. Q9 L/ L
}
) U8 W7 ]5 H& O0 |# y pInvSort->MoveItem(i,nDestPos);3 i- s# k; H& ?% O
g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 L% i: o! W( z! R! U8 C4 V
Sleep(5);0 Q( [7 ~% F9 X* M; u* _
//Error("移动 - %d->%d",nSrc,nDestPos);
. l" a) Q+ W1 O; C1 u1 t. Y) V nDestPos++;: U' \) o5 A$ m
}$ ~/ s! S3 f0 U7 B. k. U- W
//取第一个元素的信息
% U( G9 f3 H* g3 K7 `6 y /*/ v% }) l+ l/ ^, O2 C5 N
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& Y2 s: s2 ~5 C. @, o4 j {
^2 [+ J' s# T2 c7 e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% s. i. S' q1 J( S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) r, h% F$ W, h# R _' p
}& n0 u6 t7 Y. u6 ~0 Q; `$ l
*/
( x7 y9 m5 h0 {# a4 Z' ~ //////////////////////////////////////////////////////////////////////////
& Y+ U& E$ y* b/ g: p* Y break;
! o H1 D( W9 b; M& P) h! g }) S$ N7 v7 E: p
}
/ G. v" [$ ^2 Z" a0 M X8 i* R}8 Q8 D Z" a a: m
m_wndMenu.SetVisible(FALSE);
9 q. w% U0 u+ s# B
9 U! S' t. \" O# @--------------------------------------------------------------------------------------------------------
I; _7 ?& Q- b- E N搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# h: L# |. P& k0 u* h& t
{' u6 K9 l( L% K W
BaseMouseCursor();* ?" }/ X9 M1 J6 Y
}; e9 e4 D# y/ P1 t, r
在其下添加:/ {4 ]; A7 g& I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 I! \2 r) t' [
{
$ u' R0 r/ e5 R2 p0 rm_wndMenu.DeleteAllMenu();
, I4 U6 ~1 Q/ `1 fm_wndMenu.CreateMenu(this);
{; ]& w' E( B7 }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! `- T2 L- u+ k) Q1 N4 `3 h2 T9 T
4 H' B0 N5 r# b, @, p3 vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' ]6 k2 e# R/ Y7 d& n
{
2 X8 v/ T! d/ J1 r //P以上级别才可以删除所有道具
! x( c7 q3 f0 e- s; Z2 ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( H C1 L9 q$ w1 F
}
2 s$ N9 M+ y5 q; [7 J. Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, Q/ q6 r0 }; Z! N+ Y+ c5 f+ }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, d$ g7 L% N2 im_wndMenu.SetFocus();
& |6 a. f5 ~9 o% D" W/ q}
6 [: ~, X1 _$ p; u6 u( {( m: |7 i! }------------------------------------------------------------------------------------------------------------
9 s. o% `& u4 X! d0 s q*************************
& q7 \5 `& L8 O; d. H$ TWndField.h文件
5 w3 D/ U9 ~* z5 B3 i4 R. H: y************************** `3 T! k! }4 C
搜索:BOOL m_bReport;# W( {9 V6 v! [ G4 ]3 a
其后添加:
) E+ Q/ q1 Q# v5 y3 v. ~CWndMenu m_wndMenu;3 _1 A/ k7 L$ j! R' M
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, K9 J+ R7 H; U, s$ b其后添加:
& p7 d+ ~$ s/ B' }& Svirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 j3 V( u2 z) v' F. r, K; S, z) k3 S1 m0 ]
9 M6 F7 \3 C, i. T3 a |
|