|
|
源文件中_Interface文件夹下WndField.cpp文件
: x1 H9 a: _9 p+ j# c& @; A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 @2 }1 I8 Q( s8 y" k
3 D6 y( _3 @6 ~3 O7 N1 R% E
struct sItem- n _) t' Q# ^- V& b0 l. b
{- D* u, y! M6 x6 F% {8 Q
DWORD dwId;
7 a' {9 c; w# X( }DWORD dwKind2;# z$ @6 }# W( R0 y
DWORD dwItemId;
2 l: p; ?! U) w* o' I- a( G0 sBYTE nIndex;
6 Y* y2 e1 g0 jsItem(){
! H9 W2 w, \# o dwId = dwKind2 = dwItemId = nIndex = 0;8 d) c6 B7 F- Q7 v
}* y! r8 G9 O/ p |, ^
bool operator < (const sItem p2)
+ `+ k. s8 W" F{
, ?* X7 b2 J7 b8 \+ | if (dwKind2 == p2.dwKind2); ^( @; E: G$ p4 {7 H2 r# P) K6 \
{$ l3 o D3 R0 g3 i- Y# V# O! N
return dwItemId < p2.dwItemId;
* `' V6 B, m3 s V1 k }else{
2 M8 s% F4 S6 r return dwKind2 < p2.dwKind2;9 ]! O$ j% N2 I1 p" q# E$ p
}
0 u2 u+ Q4 E1 _$ `1 J9 j* `2 \) _}
: }+ \- y4 C T- W7 n};
0 @3 F+ {7 ?* P9 s {- Hclass CInventorySort5 f8 W0 b$ t O! Y* X" I
{0 x' o; u1 S3 e' n! D; p. E
public:! k: y9 E/ y6 |
CInventorySort()9 k- p9 w1 X# F1 i0 T
{
H m, T$ _ w' { m_dwPos = 0;. [8 _ X# G% `2 F; @
}- s- _, k0 L$ k, a0 m
~CInventorySort(){}
# }# x3 S7 ?: T! z7 Kprivate:
1 i8 X6 n; J7 F2 W6 Y# zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) |* Q3 C4 p! s: k. }DWORD m_dwPos;
, j- ^+ F8 h- O: H, V) Spublic:
* N3 j7 b- ?- c) U+ k! Ivoid Add(BYTE nIndex)
3 X" X! X2 Q" T' S9 g{
; o5 Z8 @0 N' Y( L' F if (m_dwPos >= MAX_INVENTORY)
) u% Q' N% N2 e/ K {
# l9 }$ N0 ~' X z& D1 ~1 X return;$ ^7 l }, `, ^, W3 [* ^
}
! ]: Z* R# I7 h+ C# Y" _3 p ] m_Item[m_dwPos].nIndex = nIndex;1 e- Z8 E0 M' Y. C9 \
m_Item[m_dwPos].dwId = m_dwPos;( A6 C% `+ ?5 c" D- p# F' ^6 z
m_dwPos++;
6 I: @! E2 I! _# q}
4 Q" ?/ ]& }# w+ j: qBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 b) N5 o6 Y: K/ `* s8 z6 o. V5 g
{
7 U! `5 h; ?( ]* g for (int i=0;i<MAX_INVENTORY;i++)# P! S2 c% T: ]: p
{4 J9 T7 e5 T* n
if (m_Item.dwId == dwId). e* W) l0 q* u: w* y, a- @
{3 k% L% U8 B1 D7 i( [$ x
return m_Item.nIndex;( I5 _+ |# v" ]0 B* o3 B
}" K" k5 H/ ]5 _9 V" g0 j
}
4 X, u- O+ z$ C8 ~$ e return 255;& F4 g0 U5 e! w
}3 w0 V9 t& X& c R
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ X9 w. m, ] O' {
{+ R( d, i' c# s% _+ f/ B
BYTE nTmp = 0;3 a2 f9 h% f; k, ?
bool bDest = false,bSrc = false;
1 h3 ?% l2 A2 D for (int i=0;i<MAX_INVENTORY;i++)) ?- [7 I& G6 h8 W
{* \0 C( l2 ^' |) `1 K
if (dwSrcId == m_Item.dwId). _2 w/ X( @3 P" r% v8 o4 X% a
{
7 R& E7 |- n% ^ //id相等 则 改变对应的dest和src
' R4 d) l; d, O* D: N! g; p nTmp = m_Item.nIndex;
; O. Q8 T' E* g/ P* I' O m_Item.nIndex = dest;
$ h7 S8 x3 S# v1 \: h1 A }7 f' K5 _9 {3 O! I5 P9 @8 L
}7 D; A+ A3 }4 N [5 `5 u
//临时数据保存完毕,交换开始
' c4 c; u% f1 j9 \* F- c1 R for (int i=0;i<MAX_INVENTORY;i++)
& H; x0 X, |: R) {; i {, [$ y* ?9 z6 I6 o4 X
if (dest == m_Item.nIndex)
. N3 _. h3 N& l: H {7 K: n; f; L1 c6 I" O
//id相等 则 改变对应的dest和src6 C# d! L6 y$ G/ x3 m
m_Item.nIndex = nTmp;% t3 ^2 Z, ~8 y+ Q: p
} e1 `/ ?; L. f. n2 u
}
1 v* h& h: V& f6 S}! x4 W* G8 F# k( _$ n+ e4 U- o
};
( [# D: [ Z% _! R% |2 }-------------------------------------------------------------------------5 Y* T+ H) a) ~; u! ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' V- X8 n' g3 n. V4 i
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. H) x8 {7 H8 ^3 G) c/ ]( U9 } d: p+ {紧靠其上添加:) Y3 e: m3 |7 S4 u
if( pWndBase == &m_wndMenu )4 _8 _: Y, B) Z5 l2 [0 O
{
' K+ Z4 d) S8 c+ \& O switch( nID )% x' m) j! ]2 x' V
{
6 I* r& S) ?0 d9 w: r, \ case 2:" }- V7 O8 B1 w; F! X% a" G; y. v
{
$ m$ q* O5 z( G7 h3 R //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 n. g0 j% C% m" R if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! w% D( Y1 _0 M {! J: F5 }, @1 z5 u' h8 @
break;# F: M/ w1 ~5 W/ b: o L
}2 r" j9 P9 x% W; J2 `
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- [9 f$ J' i: ^( Q {
3 O: S) r% V. w9 i/ n# y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. b& F }) o/ F9 v% V! M& w
if( !pItemElem )& ?9 D' B9 V9 f" o
continue;! g( p0 b- E5 z8 c2 ^+ I/ s
if(pItemElem->GetExtra() > 0)
" [! U/ ~9 m8 {$ C continue;3 E; W3 ], \7 o- v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) e" b2 A2 @$ i/ l9 P; L
continue;* j, ?" x( _9 c) T
if( g_pPlayer->IsUsing( pItemElem ) )1 D% f: f1 k9 k$ b
continue;
$ [4 f) z/ G/ O if( pItemElem->IsUndestructable() == TRUE )
; N1 L) e- E; ? {1 k- i" b! P+ H2 Y' T' C2 K+ ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
X0 v1 x$ s' F/ v# L8 o continue;
: b' R# @3 R y8 J% |6 E }
0 M* m# L. `8 Q+ R4 a' x% P/ d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* h8 v; s* m1 J+ _8 m# W* V8 [ }
! V4 g/ z1 e; P. x! G break;) r( }4 X u1 N
}
6 ~! ^& l/ }" E! u& W4 J case 1:
! L( E! E) d) {. f" x {6 A0 y$ c5 F8 g& x, B. {. u" f) s
//整理背包
. B/ n$ g, z/ Z. m8 S5 L //////////////////////////////////////////////////////////////////////////
) ? `( g5 N" c$ n, E //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, H2 r' u: W5 I //////////////////////////////////////////////////////////////////////////
/ q' {5 [- g3 F8 u+ Z9 w //////////////////////////////////////////////////////////////////////////8 c. R- `( t9 K* X/ x$ U: `
CInventorySort* pInvSort = new CInventorySort; g* L! C/ O% G' G/ X! R6 ^4 m! r4 ?
vector <sItem> vItem;' `% m8 P4 t( W! Z' L% i j# w. a2 I# o
vItem.resize(MAX_INVENTORY);//初始化大小
% L; P W* m' \. ?% ] /////////////////////////////////////////////////////////////////////////// y6 d% } X- L$ R- ?0 w
//填充数据
" f/ a8 J' k( c' O& n for (int i=0;i<MAX_INVENTORY;i++)
% M G/ S! [) S7 j4 f; h: D# S9 C {
' }. ?3 C# T9 j& G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, a0 R2 o/ U) n/ I, J
if (!pItemElem)
6 W. a4 J$ F4 M+ S {
9 r4 z1 B3 H$ H' |& o: C) ` vItem.dwKind2 = 0xffffffff;. f) p* x$ n0 s
vItem.dwItemId = 0xffffffff;
; D. g& B! E8 z vItem.nIndex = i;# U6 A; E0 {( I6 X: x
}else {
! `6 m/ s9 q$ {; K( F& W6 l ItemProp* pProp = pItemElem->GetProp();7 U$ ^6 ?: n' j% N* @8 y0 U( T
vItem.dwKind2 = pProp->dwItemKind2;
. u1 a) u; W& k% X" a vItem.dwItemId = pItemElem->m_dwItemId;+ L* Q9 J1 v! X1 ]. A
vItem.nIndex = i;+ W1 S2 m9 m. O. C ]" b
}. |; k) N1 N* ~" ^$ u1 j7 S4 R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. c/ g4 h! D/ s5 z }6 S& J% b9 E( X, f1 I4 k1 Q. X0 E
//////////////////////////////////////////////////////////////////////////
2 P' u. `1 a0 I. J! b4 ^ sort(vItem.begin(),vItem.end());//排序
! }$ C# y6 @" a+ H //////////////////////////////////////////////////////////////////////////
2 l/ F$ b" }' M4 Q; s4 ] s //交换- E5 f1 h- Z# S& N0 Z
for (size_t i=0;i<vItem.size();i++)/ y$ P5 h0 b q! |6 s8 o
{
' }( N; z% j# Q7 {! n/ H5 S //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( X$ w" v6 u$ M! t+ W/ I pInvSort->Add(vItem.nIndex);
' K+ Y3 w, N$ \* l% x$ g8 O$ S% i }
k0 ]0 c X9 K# e BYTE nDestPos = 0;2 K. c8 f2 ?- }" q/ I1 \7 n
for (int i=0;i<MAX_INVENTORY;i++)8 x d5 m" @: K" O t4 U- O* D3 q
{
7 q3 Y6 B+ V. w4 B! w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 S s7 {- q+ d if (pItemElem)6 j8 v6 u7 f( b
{9 @$ \5 ^& A" @
if (IsUsingItem(pItemElem))6 ]- G9 Y+ v3 f" Q
{
4 q2 M' i5 o; {" | //这个位置无法放
4 k' F( |) f3 }( T7 D' \ nDestPos++;+ f2 N+ B% B3 x6 Z2 F
}
- l- E T+ z$ T b, I N }8 z5 C( Z4 j" H2 x9 X
BYTE nSrc = pInvSort->GetItemSrc(i);2 ^8 z# ?5 B# q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 |3 K1 g# ~: Q- r if (pItemElem)# m4 h) b2 a6 J, k
{1 t7 K) Y5 V( s* k6 f Q R
if (IsUsingItem(pItemElem))$ q1 Z- u% @9 K [8 k' O3 I
{: W3 C7 b: X$ A4 L& v5 O3 g
//这个道具无法移动,跳过, H2 K/ i5 E) j6 T
continue;2 d# f) _9 B- K
}
+ D# [6 u. [! p* _6 R }else{
6 Q' b9 g# Q% }! C6 |6 S' F //空位置 不用动
- K G% d1 F/ H# ` continue;9 s7 X8 X1 p/ M0 h) Z" l
}
1 p& h7 `( a. D' ]* @ //////////////////////////////////////////////////////////////////////////
1 ?. g( ^- o* g% Z- W' }2 l3 S //开始移动6 X& A, ^& _0 Z/ X. N3 r+ W3 T
if (nSrc == nDestPos) d2 l* l9 r! Z3 `$ Y- e- g
{( S" R3 m0 A: y; i5 @3 z. q1 H
//原地不动" ~, g+ U- J+ `" Q- F+ b
nDestPos++;
7 x! I! n! m1 D/ P" g" i continue;4 R+ q7 ~: Y4 q; X0 S
}- b) z7 [5 k! i) x
pInvSort->MoveItem(i,nDestPos);
8 C: n( ]" a# I, k9 T! a g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 Z7 l9 B( h2 H7 i8 V& i- Q Sleep(5);
- R' r# U3 s: A* l7 ^ //Error("移动 - %d->%d",nSrc,nDestPos);
8 l/ X: R" p: c7 T8 \5 V nDestPos++;! ^/ }4 ?/ A3 D: x" U) }& v* R
}% m! O3 ?% k+ g! M
//取第一个元素的信息+ i2 H5 H" L* {" n. h; W
/*
( a3 x) c1 \: |" G5 e if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' E' y+ {' ~: O; z* Z8 C
{
% ~# z$ K7 H6 [$ M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ o I- U+ l; ^8 b% h4 }, Z: B
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: e! g6 t" x J- a; c. Y }
3 H' K. p. R$ B, H6 g6 @ */
1 e. N& _. P7 Z7 M) |' X //////////////////////////////////////////////////////////////////////////; M9 v j2 H# i+ m! X* ]0 Q
break;, b, _% ^1 B/ S K% u! i
}
/ ~/ G1 G+ Z# l$ w& Q }
w: p& J P) x}. f# n+ v, h6 X& F' H
m_wndMenu.SetVisible(FALSE);
2 q* l4 _& {8 H+ \. w( O$ d; z# }5 h$ a3 j
--------------------------------------------------------------------------------------------------------) S& P+ }2 r. {+ H" R% ~7 V
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) P2 y* b& R6 l6 F4 l2 @
{
* Y7 s' V; d1 [5 i5 t5 p6 j- Q" jBaseMouseCursor();! @' x, ~) a' z5 n6 ?# J* s) }9 Z$ ^
}% Q1 e/ I; G! j; a& \1 i. J' h a+ d
在其下添加:% t& k z/ y6 d9 A! v; B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 {+ C. D7 y% ?
{" ^- e( r8 F" W8 B
m_wndMenu.DeleteAllMenu();
0 C6 X& V1 t* lm_wndMenu.CreateMenu(this);
( F6 V5 `; ^. F4 f. c! ], Y; Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' V: n A! W( X, i: R! {
+ X6 P& e$ T8 w% x) dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- ?5 P$ ^* r6 K0 V) {8 q; r8 ~{
( N6 ^% n: R. W* {. y5 s //P以上级别才可以删除所有道具
1 p8 x! [8 p; N; K/ @; x. J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
Y- V& `* a5 P e( V( G}1 Q6 ]0 Q0 `) C- C: u3 H/ M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) ~7 M3 K1 q# ?& j* ]( N0 h Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ T. S6 g& ?8 ?/ h, f0 {
m_wndMenu.SetFocus();, e1 W2 I+ h7 K6 S
}( u* k$ m2 L! ? ]
------------------------------------------------------------------------------------------------------------0 S! l& w- T* E" U, O
*************************
4 _6 u# c( L! j6 ^7 `7 ]9 C$ UWndField.h文件, |* j* {/ e" S4 R; r* q; q, {
*************************
' N, Y+ h. O- B搜索:BOOL m_bReport;( v3 c3 |' M" C$ ~# A; b
其后添加:
' e% @; Y [6 f( K) f8 z/ ^" NCWndMenu m_wndMenu;
; _* [3 I& L% p# ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( R* o# V v' [其后添加:
% x/ [$ n3 Y- I- }+ c2 f. s9 tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 ^3 A# X8 i% g2 N) R- t2 {9 L5 m+ k& _1 j5 t8 m
1 `, o1 p. b% e3 ]0 y
|
|