|
|
源文件中_Interface文件夹下WndField.cpp文件
0 Z" J4 I0 P" J搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 t. f" D7 u! y! a7 k
1 R& |) E5 [( T1 Ustruct sItem! Y4 [9 E! m. w0 B6 m1 k x3 B" z2 I/ Q
{
: E* F4 `( q2 U% S7 ^. `/ i& GDWORD dwId;
; D9 w4 h" |: H2 X T# J+ fDWORD dwKind2;
3 }( [1 V% z$ d2 N( SDWORD dwItemId;+ E' y$ j8 G$ |' j( M& D
BYTE nIndex;
+ r# r0 V+ P1 L$ O5 psItem(){
0 o( R6 d5 O0 g" D! h- e dwId = dwKind2 = dwItemId = nIndex = 0;( N; s1 p4 I3 N( c x) V
}; R# x2 |& x+ n, N
bool operator < (const sItem p2)
, |: G. R, I. ^4 l{
. i( S* a: B4 [" s5 t2 \ if (dwKind2 == p2.dwKind2)6 z- t( p; P% g! }% e' \/ s$ B0 Q
{/ g+ w+ H$ p. i* L3 ^( f9 u) g( @
return dwItemId < p2.dwItemId;
, w8 ?' |# k. v! D5 { }else{1 n$ n: m) T: X
return dwKind2 < p2.dwKind2;
, c/ `; p t5 D+ k2 |; a }) A5 N8 l! Y9 n; D& ?8 A W
}
# O5 [, S) v$ c$ o0 n$ f' W/ [( H};6 n" o$ m7 B. o8 Z7 `
class CInventorySort
+ x5 |; F$ @1 w; F6 |0 B4 |{
7 z4 b `5 c l- x- Q/ Z5 \public:- _5 @: E% G" `
CInventorySort()) \+ R. |1 @; i# @" T3 Z+ E2 W4 | K4 F
{8 g( b2 ]1 e3 {2 ?. C
m_dwPos = 0;
- V' r) @. m* N' U/ }- r3 s! M2 V}7 u4 |, C% ~# m
~CInventorySort(){}2 N8 t0 Z! n. e, o1 I; R! R
private:
) k/ L; L. o, `. F4 r5 j+ B( ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* \. W8 ~& Y# \+ x; l0 @& E3 z6 K
DWORD m_dwPos;
2 q/ M- H5 `) t0 \) `, Lpublic:
- U6 _6 n c) _7 y$ ~void Add(BYTE nIndex)
) s" e0 w% p8 W, M# \: P a2 y{
+ O& ~* |- U/ v! J: C if (m_dwPos >= MAX_INVENTORY)
7 i' k& x4 k5 ]9 a3 _7 e {3 q; }, d0 u# U
return;+ ^$ h# F+ _5 Z" G6 h
}
: w' r- h( a$ P9 |# N# S m_Item[m_dwPos].nIndex = nIndex;
7 J. J! Y; P- G+ N" L m_Item[m_dwPos].dwId = m_dwPos;
+ x' e& W) {1 u" g B m_dwPos++;& t- s6 L0 {* e, h$ `2 a1 Y
}
. R. L+ g9 q% I* _# ~. yBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, V: b7 s( ?) K3 f3 x
{
/ L' w0 b& }! f9 W/ x2 r3 o for (int i=0;i<MAX_INVENTORY;i++)( s! `& C6 j: ]. Z5 i& o# W3 M
{7 A. Y5 \1 p# Q. P+ a
if (m_Item.dwId == dwId)
% W( i- r9 F4 {) t {
* \$ z' ^. F5 \- U/ Q2 { return m_Item.nIndex;: A# J" g# f: j1 j# e- q
}
% C: G& B; A8 `6 m3 y3 Y" u }
: T3 u( L. }8 o( o8 Q2 i# `0 o+ Q- t return 255;
* T ]; n x) x o% c5 J}/ v+ a+ h1 C( x' [! s4 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 \+ m% s( \0 A6 V0 `3 c, u. p( |
{! z* q" [6 T. t$ s; h; m! ]
BYTE nTmp = 0;
" }" c: K/ [8 h bool bDest = false,bSrc = false;
7 K' w6 p# `1 \ for (int i=0;i<MAX_INVENTORY;i++)
! S7 E; I0 [# A/ n {
" y+ s. B8 @1 r9 w* V" U9 ~# d if (dwSrcId == m_Item.dwId)
0 g- |$ j- B) s; u$ M {
2 C" h: E5 T( I //id相等 则 改变对应的dest和src; l& H5 _7 y) w
nTmp = m_Item.nIndex;# e) N l% o' C
m_Item.nIndex = dest;0 o! Z& q4 R# _5 Q& h) _+ s
}
. n t& ?& X8 g# r: F/ g; E }+ f1 @. M1 Q3 ~7 p$ w& H9 q7 h
//临时数据保存完毕,交换开始
( ]) m4 |& L$ v" I) {7 I6 A Y for (int i=0;i<MAX_INVENTORY;i++) I/ {! h2 t5 N8 R, {- j
{
8 x: u( z" c% N" L if (dest == m_Item.nIndex)
, |. ^0 e/ M" D# l {
) m" r. l% O1 e& k //id相等 则 改变对应的dest和src
% F- m; ]0 C: c m_Item.nIndex = nTmp;
2 ?. A# {. v6 ~/ B0 k }
" S+ u1 j- j) A J. | l }3 P7 w: J; a, Y, s+ m3 K
}
6 e& Z" x" D* `1 ]7 C5 t6 m( F};7 b' R- |, {3 B5 O/ \
-------------------------------------------------------------------------
/ Y5 x2 B! v! {* G依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ i2 I% [4 U7 Z2 x+ A3 M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% m! J4 Y5 p) [5 C: a' H
紧靠其上添加:
: W# t8 L; X8 \if( pWndBase == &m_wndMenu )
% p' m( @- ?, g; S( S( x{
* R2 s- X% q+ l) ?8 [: \) | switch( nID )4 j0 c1 w/ m! E9 V
{
7 F z# b! \+ [' [" p( n7 T3 y case 2:
% E; E) r2 q7 c& H0 }0 ] {
1 i. \4 v0 w N5 n, Y" u9 @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 m& H; R# `7 P* K& Z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; }$ o% A6 o! _5 v5 ]" Y% d. G; y0 w1 R5 n {
9 I+ }( _0 O. V5 y1 j* i% v% m break;0 m x: o; \' r% M
}
" Y! V5 J' u( |7 Z8 O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 D/ V" s b! ]8 ]' y) v
{
9 O; n. {8 ~. X; B, H" `- q, P3 m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& e. ~9 U: |0 K# h
if( !pItemElem )3 E4 p: _0 ]& s& B
continue;8 f _. U! _4 U7 C: \
if(pItemElem->GetExtra() > 0)) g3 O8 k; B! i1 R
continue;* ~( Y' j; A0 a. M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% ]8 o' }* G1 d- z continue;
3 g o( j' e+ P- b if( g_pPlayer->IsUsing( pItemElem ) )
9 B& I1 H& `2 P continue;
8 d' N! h- N: M4 J4 `0 L( |) [" C if( pItemElem->IsUndestructable() == TRUE )/ R1 \' k" J2 |$ o5 [: x
{
- f, H1 Q, z6 J( J7 O; o0 { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" E6 t7 i1 |' i continue;( ~$ m6 v3 W2 P; ]) U
}; ?# z- z" f! z2 w+ X# A& I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 i7 c. g/ @; s% W
}
. _& y1 \) b( M* x0 B break;
! H* V3 z6 W% _# { }" V8 a4 ~: H& F# O6 s6 M
case 1:
/ V. t/ T. m% |6 s7 j$ S {: {5 X9 F4 }) ?6 [% X" R
//整理背包 f0 N5 l6 j' o) q7 f& ^ q" m: {
//////////////////////////////////////////////////////////////////////////
7 t, x9 |8 C! n) H/ G4 D N, T6 @ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 `# ?( R# J4 R- U3 f7 T //////////////////////////////////////////////////////////////////////////
+ b5 m. l3 K# `% Q$ M* g, F //////////////////////////////////////////////////////////////////////////
2 s/ E/ o" \1 B6 n* ^. u CInventorySort* pInvSort = new CInventorySort;9 A7 k8 V+ c4 C4 Z' P" ?3 }
vector <sItem> vItem;: W8 J- @! w# I9 K+ C6 ?1 I" E4 K
vItem.resize(MAX_INVENTORY);//初始化大小
d! [' b2 K7 L //////////////////////////////////////////////////////////////////////////
% m+ s+ O0 j4 F) ?; f$ z9 d* b; U //填充数据
+ x: p1 G( o G" r- {5 _4 Z2 S for (int i=0;i<MAX_INVENTORY;i++)
! A' ]& j. Z1 V; b" q2 g3 S' e v {( U5 ]+ F( F4 d" d6 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ ?* E+ B& c" A* Z. H
if (!pItemElem)$ \$ ^( V' T. ]. x5 u' r
{3 ]# F- L, V- D* V3 e3 `7 n B( o! E
vItem.dwKind2 = 0xffffffff;3 H$ a3 ]: t4 Z" ^" K
vItem.dwItemId = 0xffffffff;
1 w- O$ t! Q v: G0 i0 V vItem.nIndex = i;
5 S& U1 I& L- Y( \# J8 d- b }else {/ r9 B2 D; d7 h* t& P! p- P
ItemProp* pProp = pItemElem->GetProp();7 L5 G) S/ I- l9 p4 v: q
vItem.dwKind2 = pProp->dwItemKind2;
7 [/ K2 q# t; Z% U7 f& r- W+ D vItem.dwItemId = pItemElem->m_dwItemId;
9 {6 ~: s) y$ D: i vItem.nIndex = i;6 H: b- ^. T) p2 \' D
}: ~ G. c# j1 e$ Z7 H1 ~
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 }( I8 k: M3 w- P& _ }
9 I# h7 D9 U4 J" g' Q( E //////////////////////////////////////////////////////////////////////////- ]' W0 c4 r. P9 S
sort(vItem.begin(),vItem.end());//排序
+ J! R3 r# o& M* u3 ~: k //////////////////////////////////////////////////////////////////////////
6 i; x; c) m- [! N1 p0 l1 |- c; k //交换
, V0 A5 `8 h3 o1 c2 {; G' A3 r1 L for (size_t i=0;i<vItem.size();i++)! c+ Z; T4 i" |# q+ a% ]) {3 L/ x
{
; k; L1 I. Z b //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 @# h2 z! a, u* ^1 a! r( z+ L pInvSort->Add(vItem.nIndex);: k, i2 t& }4 J! |8 g
}" p* ]' H7 U- ]8 V& d n
BYTE nDestPos = 0;" h( Y) R. S) y
for (int i=0;i<MAX_INVENTORY;i++)$ g& a. l8 H' ?# t+ O
{1 Y0 Q9 u" }' f) R$ O' D. f- y( @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: @ q' [7 S5 v/ R3 ` if (pItemElem)# q5 T D0 _& F
{
, V- B0 f6 A! x1 Q( v4 I& Q if (IsUsingItem(pItemElem))
! Q9 e+ q! i/ U {
$ w0 p- R! c5 f" P* [ //这个位置无法放) P# r3 j' G6 r
nDestPos++;
( W" E6 k# w1 f( a* h: a" _ }
) X. t( [- g0 U |/ z- V }% P8 Q" R% j8 v
BYTE nSrc = pInvSort->GetItemSrc(i);
+ L. _& }' o E5 I, o5 \ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! H% b9 p% m* Y/ G if (pItemElem)% V0 W0 E5 J: e+ S+ Q5 C
{
# e1 m! P) B9 N: O1 C% `- k K if (IsUsingItem(pItemElem))
/ N; F3 S0 U! m5 X {
/ R5 Q6 r" f2 P //这个道具无法移动,跳过+ q+ i. B) z9 R/ ^. `. m8 l. s, ~
continue;
, Q9 x5 q& @2 \# m- o/ k }* H2 ]( [- w/ u w$ V* A5 s# G) n
}else{
/ F$ }2 g. `' r- @' x2 f //空位置 不用动
$ e! I! a- d, y, _ i continue;
: K( U. F+ V) V$ m. o }
3 F8 ~/ s5 F; Q# |' n //////////////////////////////////////////////////////////////////////////
J& E/ C2 L" x //开始移动
/ x% p# m5 W4 w3 ~. o e if (nSrc == nDestPos)
9 O1 @0 B) L- h( }+ t+ G {
7 x3 L2 Z, @, V. Y //原地不动
. f6 n% P# A, i. { nDestPos++;2 Y5 ~( [+ l8 s! y7 J1 B
continue;
& y9 F0 _. }& E% n! B }
* B% o' ^: y C, q% U' Y pInvSort->MoveItem(i,nDestPos);
8 U; U& w7 }+ G+ f g_DPlay.SendMoveItem(0,nSrc,nDestPos);. z7 [- t) {$ }* t' Y
Sleep(5);
9 V7 k$ ~/ W1 g: _$ X) W' x //Error("移动 - %d->%d",nSrc,nDestPos);
4 n4 |4 t+ ~& g! B nDestPos++;
0 [. B: O- E" M# H3 @( D, a }
1 m) E+ \' ]4 d6 v$ e //取第一个元素的信息
! y' }; R; @, I% U1 i /*
+ P4 ^" ] B p* K1 Q- R1 k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) [, k; y7 U$ F0 w( Q3 @. l
{
1 k2 t6 {6 M8 O- U, O Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! [# S. n" E% C) n9 F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" e$ I- W) A8 ?% B" H
}
# i: N6 | l7 O' G */* V8 ^' ]; r( K
//////////////////////////////////////////////////////////////////////////9 f4 @( J+ e; c$ S% ~) O
break; g, b$ ]' c7 a$ A
}
1 E/ I8 |0 l7 m; H6 u! F8 \# N } 2 ~5 g$ q5 F) ^' D. C+ N% t/ _% l3 K* v
}/ x+ j; H9 A `7 \& n
m_wndMenu.SetVisible(FALSE);" ~: D+ d, C, c8 d
% [7 r! Y% f0 _* L, C
--------------------------------------------------------------------------------------------------------6 [% l$ i1 g$ {4 E: p8 c0 Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- L! _- ^+ F/ P' L7 t0 g: U{
' J1 N6 P: e5 g# c' `! ~9 RBaseMouseCursor();
/ ?' s4 \5 ~5 N8 {$ E5 \( v}
# ^7 s/ u* [* r2 G1 g) u) n在其下添加:: D8 d3 q$ X4 a# Y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 Y) U, ~( ?, O0 s) ^, W{" [1 E2 A5 [2 r
m_wndMenu.DeleteAllMenu();9 L+ K7 e/ a* u$ u: b- M0 @
m_wndMenu.CreateMenu(this);" I9 c! c* ^6 g1 {. m) r: U. F; G
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. N7 h1 y" V1 A, K: Z5 F
- c- w, P! a# p5 f8 S L' E7 hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! o- y' O1 [$ t' e$ A8 |. x{
y/ v/ e7 i l2 v0 i //P以上级别才可以删除所有道具) J/ P$ p3 y+ m) \) Z& m$ E
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% f+ U: V3 m6 C/ B/ [: N# _2 T
}, Y$ ~7 k+ c l6 T4 Y# f' j# Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 v, J1 S4 d# \+ U8 c
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 I7 Z0 c2 F! l+ G# M& ]
m_wndMenu.SetFocus();' [* b# ]8 t6 L+ x* d3 ?
}4 L% x/ U; z, ?9 x1 g1 i1 p9 D2 c
------------------------------------------------------------------------------------------------------------
! n u4 b; S1 a# _/ W! h. t*************************
! g" O, z& h3 a4 iWndField.h文件! W2 t! |6 m& {5 ~
*************************6 N- J4 C0 ?0 G% q
搜索:BOOL m_bReport;$ l) M% }0 V, }+ k$ r. m8 T: L- ]
其后添加:
! b+ n) R3 m; E9 n" h- UCWndMenu m_wndMenu;: _/ y8 |$ f% Y% E* L0 l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 P8 B! I- C6 L7 ~: `
其后添加:) k, S& [* S3 D" ~# }" m
virtual void OnRButtonUp(UINT nFlags, CPoint point);
% {$ t7 L; c1 y# P' d/ C7 O
+ N j. z1 a; U& {' Z, Z
0 ]" Q! N( p& r3 V/ x# Z( _ |
|