|
|
源文件中_Interface文件夹下WndField.cpp文件
7 r: P8 u, ]7 \: z5 C! s1 z9 k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- A1 h6 A! y+ Z( N8 F
; N$ X) P/ T& Z6 _5 P3 Sstruct sItem9 c$ T7 g* w& T7 R
{! [( h7 n+ n; ~$ Y
DWORD dwId;% n& y7 }/ f* p* O5 u- S
DWORD dwKind2;
( {3 N4 [. o/ T% U( W2 `2 p& ~7 wDWORD dwItemId;: b( s/ Y. D( z2 \) j' @6 ?
BYTE nIndex;
" l! m# y7 Q. c0 P, q, V CsItem(){
4 f4 M: U3 J1 Z6 S8 n- X dwId = dwKind2 = dwItemId = nIndex = 0;) K! W2 a: z1 R9 G; i
}: a* P! _' x3 i7 D5 F( M8 e) S6 @% t
bool operator < (const sItem p2)1 m' p& p, h8 @* S- E% s4 b
{
' W) b( T$ l5 |$ Y; y2 t1 L if (dwKind2 == p2.dwKind2)5 |) U* v& r' d9 [. b
{
6 n4 t- y9 T& ?6 S$ c! ? return dwItemId < p2.dwItemId;
& g+ v7 l9 ]. V }else{
) ]2 j& w- M2 }, \ return dwKind2 < p2.dwKind2;
+ X7 q) w: h5 R }
- A, _( I: u O0 K' p}1 g; f& A! ^7 z0 d1 g
}; q# Y+ g7 ?0 t) m+ K* K
class CInventorySort
3 c, c& e. m' e$ ~: c{
1 Q+ Z% s3 V8 k% Hpublic:
( Z, [0 ^. R. N8 CCInventorySort()+ M$ ]& Q7 ^' n+ J# x3 q0 |, F# m+ A
{
) \+ {; h7 r2 ?9 E3 z m_dwPos = 0;: a- ` P$ G( }) Y% G, X2 W+ e
}; c/ }' [' ~9 u- l* b
~CInventorySort(){}: C# N: N! v) Z1 q4 M
private:7 h3 G! D4 w' A( k; x7 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& g7 t C) K( t- \& u
DWORD m_dwPos;2 e( V. S" d+ X$ F: U& E- M, E. |" v
public:& F9 ]- u% T8 X2 V5 r# K
void Add(BYTE nIndex)
2 z1 K1 V% M) f. d, Q! a{
2 L6 s, m8 V2 L# W! @) R if (m_dwPos >= MAX_INVENTORY)
- k9 x2 V# ^, P9 V% S {4 R ?* Y/ V) H' L" Z% @
return;
3 v' u8 @: }- |* {, u }. J5 G( \4 b- t; B( E _/ X1 s9 h
m_Item[m_dwPos].nIndex = nIndex;# Q. J, L+ V+ W+ b& O+ a
m_Item[m_dwPos].dwId = m_dwPos;1 H; a: T7 `3 j8 X0 n9 P1 @
m_dwPos++;
2 i+ T2 p& f; l& V! |8 S5 x( D2 z}1 Z9 C, G6 @& |* u. @
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. S8 P7 X% W- ?3 B{0 ~. J# d0 j3 b4 W3 `# f
for (int i=0;i<MAX_INVENTORY;i++)9 g1 x1 h/ L& i, ^6 e1 e+ A! w
{, ?" u% L3 v5 C( `/ G2 o8 q
if (m_Item.dwId == dwId) o: b C9 |! \. e. d+ V
{8 @# |+ D M; j3 R- J
return m_Item.nIndex;( y; Q" X3 W. ~- \* |
}
+ ]- M8 N" x+ I }
+ o n3 ^( `. D' V$ q8 M8 ] return 255;+ q- w4 X9 A5 s4 u% c/ G
}2 j: m# b9 l1 [& `0 }3 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ j9 r4 ^- ^4 g8 {3 C5 U3 m
{
* o* w* V4 n& a5 v BYTE nTmp = 0;
/ ^6 |7 t' ?$ z" @: t, E bool bDest = false,bSrc = false;& M- r# x- n. p# m' J
for (int i=0;i<MAX_INVENTORY;i++)1 A: T; e) l/ Y- \! \: @
{0 T; a( u* X5 ^
if (dwSrcId == m_Item.dwId)
1 M; j& I+ t G {. I8 P( E# N& h& v! V
//id相等 则 改变对应的dest和src. t/ O, u3 Z$ S
nTmp = m_Item.nIndex;! _3 @4 V' {% }, c
m_Item.nIndex = dest;' A8 V0 b. a: k* _1 o. [; d
}/ P$ c* R5 ]5 x& }5 }4 R2 l# ]' m
}/ ]/ k! a/ J1 u2 {
//临时数据保存完毕,交换开始
3 ^! o t! y$ E* v6 x for (int i=0;i<MAX_INVENTORY;i++)
4 S$ ~# d. G/ u {
; \5 B3 k- T( V9 f if (dest == m_Item.nIndex)
* H, q/ L5 P7 ] {7 O# J5 B4 a3 ^
//id相等 则 改变对应的dest和src" @/ a6 b3 C: F, {3 F
m_Item.nIndex = nTmp;
: e- c/ i2 e& j2 B( b* J }( P Y5 d3 i# K
}
5 r4 y2 [3 m, J. j7 y- ^}7 n3 ~' n$ ]+ {7 h5 d. ^& M" k
};
3 {* w' T" J5 E; E+ M8 a1 F-------------------------------------------------------------------------5 w$ x3 o& h0 a9 Z; h8 z) J6 ^2 d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 C: |. \0 O" ?* A# x8 n* r% r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! z# n* w. }" X
紧靠其上添加:
$ Q, C5 W+ K/ C8 V6 d0 D; jif( pWndBase == &m_wndMenu ); M c) V5 g% q9 y' u1 G
{
$ j$ r, L8 H5 W4 y0 y8 L% J& F switch( nID )! W" N. m6 K" h
{
& {5 q& ]; e# r: P case 2:
+ u3 C# ^, K+ z/ b0 P3 H+ ^3 ~ {' B/ _: }4 D( p; T- A: L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# {- k% L% [& p) e) J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% ~* ]$ |' N3 x/ Z. R0 D, T9 G
{
* T6 s1 S2 B; B7 ?% a: P6 I% l+ N break;$ _( F8 ~, a2 _5 p9 k) p
}
/ \" {: s% |3 W u5 h+ y% m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' ?7 t4 f! L6 {! [% d6 M6 d {& z# S8 p, r5 M4 S: o4 H; }" L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) m- N( P6 `8 e
if( !pItemElem )
; n2 H) Q' s% c& M' K continue;* N1 d" R) ^; r+ A- Q. I
if(pItemElem->GetExtra() > 0)
2 A5 j7 B- V1 E% W continue;
% N( v9 W, }( v. e( i* F7 } if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 _) Y0 z: {+ y continue;
; q# w$ ^. Y B: ] if( g_pPlayer->IsUsing( pItemElem ) )2 [6 T0 Z! b0 Y$ y$ Z6 C
continue;
: ]% E$ v" @) T5 b8 N) \3 n if( pItemElem->IsUndestructable() == TRUE )$ Y D: H* A4 ^3 E* G
{
& S) O: }' q: r: }' i2 i0 s1 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 o& x5 O# q# k6 H/ r# I5 j& p V
continue;
* \! A* N; y* a# C( ^ }8 K) v$ k2 l2 g, l
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ L. j6 R z% A! a
}
+ C# y' n' \) u break;2 ^8 n& X9 |3 Z0 l+ P
}3 p1 U' N* F- d" L2 `
case 1:
+ j4 {7 Q/ g# z3 C' t- h7 V {, K9 l1 d! }- e1 x+ P
//整理背包
$ x% U6 r% a6 u5 I //////////////////////////////////////////////////////////////////////////( A* O( O- i5 o: r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& \0 U- Y+ O T: a4 e* q [" Y2 \7 W* y
//////////////////////////////////////////////////////////////////////////7 `+ R; |& f: e) @/ B# r$ x
//////////////////////////////////////////////////////////////////////////
5 ~# Z0 p; s+ U) N, V CInventorySort* pInvSort = new CInventorySort;2 m$ x: r+ G9 o* G1 }) n1 M5 h
vector <sItem> vItem;
7 _6 r1 j# n( o" k" T vItem.resize(MAX_INVENTORY);//初始化大小
1 n; w8 G+ h) i; [7 n //////////////////////////////////////////////////////////////////////////
; `, e$ u' b. v5 g$ p2 B //填充数据
) N1 h6 D& O- N+ d for (int i=0;i<MAX_INVENTORY;i++)
) x7 G" Y* `3 p U) w& N( ]$ N {
- u- J/ i, a& } _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 t% F% B% w& }8 A
if (!pItemElem). ~" s0 D2 y) o2 I, d# u7 B
{0 I7 R3 K. F; q
vItem.dwKind2 = 0xffffffff;. O3 _* l/ t0 K2 a7 b
vItem.dwItemId = 0xffffffff;4 O; L$ R3 f" X( t9 M
vItem.nIndex = i;0 Z* g+ T8 i+ H) M9 k, X
}else {2 \+ ~5 x, I! c9 L
ItemProp* pProp = pItemElem->GetProp();; E" h# ^, i3 `
vItem.dwKind2 = pProp->dwItemKind2;
, t- K4 [3 V4 F4 O9 G4 X vItem.dwItemId = pItemElem->m_dwItemId;
. J1 c d+ _% {2 K/ Q1 q! x vItem.nIndex = i;
0 }; i- ^) s0 x' T) |( |6 w2 [ }
- l' t' w; m. c( M: @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 `) N1 ^8 W% b
}
5 p8 W& l4 p% @6 [% n' S //////////////////////////////////////////////////////////////////////////5 P" z9 W2 {7 v3 `0 [; j' F9 ^' R
sort(vItem.begin(),vItem.end());//排序
) O! Z$ d" A1 i# v& V6 E; O //////////////////////////////////////////////////////////////////////////
' C& ^! L# E) q //交换
) W. C1 d, [' w2 \ for (size_t i=0;i<vItem.size();i++)
+ o2 \; S) q7 t6 G6 P5 q {
, a% [( E; p* P- x6 n //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 U3 s _4 Z% f2 T/ ^2 b( @$ ^
pInvSort->Add(vItem.nIndex);/ O; U- t# J# A2 x9 [; {
}
A$ @ O4 t) a8 W BYTE nDestPos = 0;: p; W6 E5 _+ H; X" d- y) c' Y
for (int i=0;i<MAX_INVENTORY;i++)6 T- u7 l; m+ R" i/ b
{; n3 R2 T% G/ ]: S5 u' G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% v% J: e7 |. w+ F
if (pItemElem)1 l, L1 A" C) o% g0 f2 Q
{; t, H/ t: b! o1 z+ o
if (IsUsingItem(pItemElem))
K5 m& {$ U# A+ J( p; x {4 }$ H! [# ]" z0 f$ i
//这个位置无法放9 l# _: w% x3 C" ~4 |' y
nDestPos++;
% U5 j+ |( [: P3 f$ w }
3 G3 u- f- G3 f6 C6 i }5 S. m- x( X8 F( i- a3 ~1 X1 v
BYTE nSrc = pInvSort->GetItemSrc(i);
2 v( h$ Q/ L2 X h% R ^1 b( _ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* ^& ?4 s$ R3 B& s ]4 t% E5 n if (pItemElem)
2 M) z! L% ]* p4 ` {
* i, r' c# F5 R2 q if (IsUsingItem(pItemElem))
& d# b5 A+ Q+ f/ N+ D8 _ S {
2 _. G8 N8 X! e( Q; x& { //这个道具无法移动,跳过
" d, u- i# G; `3 B9 z/ K M% v continue;6 @% I- A) M/ j6 @) X) X ^- s
}" [) ?4 b6 b. @" L0 c( n8 D2 H
}else{- }! y- i* X9 e. m. ~% r+ P( e, e
//空位置 不用动
5 a/ s( r: G5 i continue;; ~3 x" [8 B6 N- S* x' @8 s. p/ P
}- F1 m. s. }+ M! V6 I
//////////////////////////////////////////////////////////////////////////
0 `* f9 d4 Z' B: d //开始移动
0 H. C$ j/ ~) c6 r) \, B3 y" H if (nSrc == nDestPos)7 d% C/ l/ p: _6 T
{, g1 g# Y1 S/ [4 w) D. j. S' y$ G
//原地不动9 G: e" L" n$ [% T( A; Y
nDestPos++;
. k1 w. ~3 C- o, |+ U- O h" A3 N continue;
; T1 c8 E- T0 U7 m }2 Q8 U! G4 X4 R7 T, V4 O
pInvSort->MoveItem(i,nDestPos);* J( n, q. [6 A( {. w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 b+ C( k( S/ t! @
Sleep(5);
8 h% G; M6 i& T2 u) q8 G //Error("移动 - %d->%d",nSrc,nDestPos);( m: |$ x/ H9 `' ]7 J2 h
nDestPos++;. p. _1 u$ T. k7 f$ b; ^8 b
}! J4 Z8 ~. y- n4 w9 V
//取第一个元素的信息
" Z# Q, ^! f1 }! j2 f% x /** t0 c! m) t3 {4 n
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. Q. r* v) E+ t/ u {! p' ?, T3 U) K; p5 T
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 Z4 {, s) [3 C: ~5 T g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: X8 l5 e" S( F
}% x8 o. [- K6 ~1 _9 s* Y
*/5 ?% D4 }5 I! c2 _$ G3 p6 l( B
//////////////////////////////////////////////////////////////////////////
( O7 g7 v- w, E' R* K break;
z b) Y5 O( ?/ }1 f, n' V1 N }
" F* ^9 G- a* ? V }
3 K3 Z/ d. |; n3 U* A}
3 Z, a: d) ~' zm_wndMenu.SetVisible(FALSE);
+ Y3 k" r+ B# d5 Q& x1 z3 E
' F |& t, i( ~7 s--------------------------------------------------------------------------------------------------------
; {$ Q4 b8 k4 f* t& i! G( g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' B0 r' x% R1 F
{
% z9 r C2 A2 l; [7 ]$ YBaseMouseCursor();
2 n) T+ ?+ \' u}
0 u8 c3 l _. P2 _. Z3 M在其下添加:
2 b* N t) c8 r r; vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 @! a+ k3 K* b& B5 S0 Z/ v7 r
{
( A9 _ j. A2 c+ O4 b* A. rm_wndMenu.DeleteAllMenu();
' D- f* y! f; im_wndMenu.CreateMenu(this);
1 a8 f! P. V; N7 ? q( j0 Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& {* ^' Z- J/ E/ v& n2 |, [# b }
3 F7 Q9 a7 F* lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. ]& d+ Y6 P% ~0 m; s" `, E{
+ D ?0 T) Y, A2 ?4 g //P以上级别才可以删除所有道具
3 a5 g0 b! |" f/ Z6 _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); C- V) B0 j1 C# h6 ^' }
}
! S! m! U: N; ?' v- P# J" pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; D$ h& L) J+ J5 K5 F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- \) Y5 D. a8 Im_wndMenu.SetFocus();8 |( {/ o7 S6 `( J, \* B8 V
}- h- x. r$ V4 a* w h7 k5 f9 i2 ?6 p
------------------------------------------------------------------------------------------------------------, ?! Y7 }& J! W, H1 k- z
*************************6 @% A9 y6 u) ?# [
WndField.h文件! P' d% k4 S1 |! ? M
*************************
+ ~- C5 S# I2 D7 a搜索:BOOL m_bReport;
# I( L1 _0 v( T( y. T9 q其后添加:
6 {. Q8 M1 R' W1 G0 X) L% n6 ~. l& KCWndMenu m_wndMenu;
( p5 {, F7 B: X6 G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
W9 q- J& ^* P: Y8 E- y其后添加:, P+ @$ g/ s) Q' z& P! D# C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 B0 X% k* p3 C8 g' W5 l
: Y: ]; I7 a8 u) A/ z1 q. Q3 `. ] p+ D* k
|
|