|
|
源文件中_Interface文件夹下WndField.cpp文件9 L& ?8 C7 _& j1 P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 P$ H4 [0 B1 C! p+ `3 C
, x" [" ~% v+ istruct sItem
+ C, C! \6 }( `4 K" L{
9 d' N" T% f# ~5 hDWORD dwId;" z- {+ X; I! U+ L
DWORD dwKind2;
7 v$ C8 S! H0 d+ SDWORD dwItemId;# v5 d: `$ j6 z9 r) q
BYTE nIndex;
% s% l0 p& v/ X. e% jsItem(){5 C/ q2 @: N! @& K; P/ j
dwId = dwKind2 = dwItemId = nIndex = 0;1 I ] ]7 Y2 y( i( x! [
}( z) ^) b& m9 g- r( j
bool operator < (const sItem p2)
9 S- K4 M# M$ Q7 |8 O% q{2 W1 t/ h t' ~! W' r/ C8 n& V
if (dwKind2 == p2.dwKind2)3 O* v- ^: \: Z. G2 [9 P; Q6 a6 D! {
{. g, T) ?( ]8 Y: \
return dwItemId < p2.dwItemId;
) O0 l, T0 {: A& p }else{
- T2 P1 S: a0 `3 \8 X h/ z return dwKind2 < p2.dwKind2;
) w* s4 d3 L3 W% i: ]: t1 h }
; X7 f t* a2 X! n; R}; |; b: E% _7 [0 i1 e$ V0 W
};; D( E7 B' d- u* X: ]: E+ j
class CInventorySort- c0 d* ~, @* x
{
, K; u8 G; n0 L* Z1 I2 w. Spublic:
, h2 p! ]; ] S# [: E1 tCInventorySort()
2 p" x- k: Y4 \) j{0 q' T, A$ U# C3 B, M! T- y0 ?9 z
m_dwPos = 0;
% |3 s7 j7 h% G/ E}6 s7 T* D# j* q: F& c9 p8 L# t
~CInventorySort(){}: m/ D& a# ?7 c; c" r) f# D
private:
6 |% w6 Y5 o1 ?7 B4 V; [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) j& w" p- p, a: {7 [- U: T" p
DWORD m_dwPos;
9 |7 m \5 P i7 c. i$ ?public:, Z; F/ `/ h" a) i' B! [' g4 \
void Add(BYTE nIndex)
, G) b7 {+ o; \) K; s7 w* V{
0 C6 ^' ]$ V3 g- j; n; a7 \ if (m_dwPos >= MAX_INVENTORY)
4 p+ s R1 s! ~; x5 D {* D6 _# ~7 Y" y( n" p# n
return;4 O1 ]8 d: P. N* ?" K
}7 O A5 Q" e+ J
m_Item[m_dwPos].nIndex = nIndex;% n! f* y+ c/ C" F+ G, U
m_Item[m_dwPos].dwId = m_dwPos;
+ }3 ~ }1 K) a5 ?1 Y m_dwPos++;
/ ]6 z0 B6 H$ Y, c/ K& B9 `}
# M- o1 y+ I S+ SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- n u8 z; d1 S
{) E9 o5 ?0 ]4 V
for (int i=0;i<MAX_INVENTORY;i++)) Z5 }9 J2 Q8 z }2 y
{
$ O( M p* T4 O7 z4 @ if (m_Item.dwId == dwId)
5 Z5 N' r! Q7 S. [. ` {- S' w( u9 I( @# L( t: \6 ]
return m_Item.nIndex;
( s: \1 f9 D* _ A% g( W }
# Z; `; D$ e n0 M. R1 C8 a+ i3 a }
) n' u2 R8 V7 R& |" V return 255;1 q) W5 W* i3 u1 s* K3 C
}
, T _$ R; L' B3 S1 t a6 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 T. {5 j8 ?, j$ ^/ l3 I. S1 x{3 j* @- C% | ^, V0 }8 l$ E4 J
BYTE nTmp = 0;
( u; E7 |* \( M8 O& i bool bDest = false,bSrc = false;5 {4 D/ R' _8 j9 ~) o% H* t* {
for (int i=0;i<MAX_INVENTORY;i++)' }0 Y! s) S4 P! \+ N
{$ i7 j' B5 W0 d, I2 k7 Z4 j" e
if (dwSrcId == m_Item.dwId)4 V/ a" t! w A: `- X! U
{
) w) M9 L- r' O5 l //id相等 则 改变对应的dest和src
- a( {' n1 n; |6 Z. t" n& ] nTmp = m_Item.nIndex;
; r' a# F! S$ B7 ]! h5 L4 s m_Item.nIndex = dest;$ `% B. N, I4 h$ p' a# A l: `$ a
}
4 c' K" S S6 L8 a8 F g }
& E$ h% N/ z- g X& V( B) ` //临时数据保存完毕,交换开始; B' ], v% g1 j: J* q% b# [
for (int i=0;i<MAX_INVENTORY;i++)
, p/ B- O9 W! X) } d' G {+ k' z A; f/ M; g3 n
if (dest == m_Item.nIndex)7 w1 D D3 P2 f6 u$ z' P
{
' Z2 u, A5 k, p( l1 G0 d7 _ //id相等 则 改变对应的dest和src
4 S' j# y$ I2 d0 e- y m_Item.nIndex = nTmp;* A3 q P, Y# ~& I3 A
}
3 }( D( q' B. `0 E" }- s! V' V }
( ]0 K/ u# A" n X}
( W2 D* X0 s/ U; g- s! X( K# x};
0 Y( z' C4 N! k( k% m-------------------------------------------------------------------------
, S( O4 g! R. a& f% E5 y1 v$ B9 ^( ?& p" n依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, d1 E- x1 _& w4 S+ s* E" R搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* P/ {3 L. Q9 \. n$ ^% m/ T
紧靠其上添加:! c. k/ D+ y- N' {* V5 t
if( pWndBase == &m_wndMenu )
# |: D! H9 V: `0 ^7 [4 d* S{" Z! g+ Q: P9 q- \* ]- @' J
switch( nID )* v5 n) m) ~6 l5 ?& j1 p: \
{
" u- k5 {7 M) W case 2:
. g0 ~0 r) j: d {
; H# H, z {0 ~, w //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' j% d& @' ]6 u- e1 Z1 U# ]- f) c
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ F% L8 B% S7 D2 r! \ {
& T7 y! Q: ?( m3 g break;3 ~2 ~- a# N6 ]( l
}7 O3 t5 o' j. x1 K/ R. W0 w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* I/ u2 c, |3 V
{- N# O6 u5 d7 w) N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* C+ U! e! [* o& q& e: x
if( !pItemElem )8 ^! @2 P% D e9 e
continue;" R5 x! F r) J" L; F" h
if(pItemElem->GetExtra() > 0)' N* ]" w8 H9 |- D
continue;7 Z, n5 \7 x& k+ W3 Z1 M" G
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ B' [4 s' _0 \ continue;
3 b+ D2 {" u$ _) y: z C, y if( g_pPlayer->IsUsing( pItemElem ) ). r% U% L* E# f0 o5 N6 Y
continue;
7 _0 P' O# R: W if( pItemElem->IsUndestructable() == TRUE )# A' [- z8 N, D
{0 l- A( d, A% u' n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' a7 ^8 U+ c; }- S( M" Z continue;7 K5 G* J! a- B+ ?6 f
}
9 i( ]7 R8 @, J" q- a, f. o0 q$ d ~ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( E5 c7 @2 x: z |% t( C
}
! f. O) G& T6 J break;0 A0 B" i, [, @. _3 z6 m
}
5 q* w ^2 c" a$ q# a0 |: Z9 Y case 1:) w; r2 _- R& ~! u! f% `9 l9 o( J
{
% `. S& z! y" A9 r$ \* G- s //整理背包
% [0 k0 l% s1 B- Z$ T //////////////////////////////////////////////////////////////////////////( U' _, V! i. l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) E+ B# |& J4 E //////////////////////////////////////////////////////////////////////////
2 x4 O7 {( Z# O3 N //////////////////////////////////////////////////////////////////////////2 G0 d6 W0 e$ Y) R9 N! m* ]
CInventorySort* pInvSort = new CInventorySort;7 A6 z1 J/ w, e" J+ V9 i/ E
vector <sItem> vItem;
* v' p- ]; G |/ a& s9 K& q( a3 M vItem.resize(MAX_INVENTORY);//初始化大小: P7 M* _2 C! o% Z' ~0 j/ _
//////////////////////////////////////////////////////////////////////////
9 t$ h ]. J1 c: R/ f3 M/ X& O //填充数据
+ w. h& Q. I/ O/ I) P( h" g for (int i=0;i<MAX_INVENTORY;i++); d' E+ ?$ d6 V6 o
{: L3 A% r+ j$ y2 _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: \+ l! w2 E: e% c; X" j if (!pItemElem)
/ P- z1 K2 C# S2 V& ?9 p+ _! e& M( E {; o3 y7 `1 h8 y' V5 ~: A( {
vItem.dwKind2 = 0xffffffff;
3 N% s/ _/ i* l0 x R vItem.dwItemId = 0xffffffff;
" l* D: E! D" L+ k7 p vItem.nIndex = i;
$ f6 s( |5 J p }else {
% Y( S) u; }% q7 k2 K' A4 B* O" \ ItemProp* pProp = pItemElem->GetProp();
. _' d8 O( e' p K$ _ vItem.dwKind2 = pProp->dwItemKind2;
2 g; {, x9 ^; L- H* j7 t7 T8 t vItem.dwItemId = pItemElem->m_dwItemId;7 G6 i. c& s/ b* d
vItem.nIndex = i;3 Y, Y! n! e, E
}" K" ]- f" T7 u( d, V2 d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ \$ O8 Y3 s6 I6 C& u, @ }
3 R2 B$ Q1 Z$ Z //////////////////////////////////////////////////////////////////////////, o+ D: [2 I4 z5 }
sort(vItem.begin(),vItem.end());//排序. Y$ F; A5 S% b8 f( Z) U/ J
//////////////////////////////////////////////////////////////////////////
3 D2 H1 k/ H7 n //交换
. W* n3 a. |: _; G) s, M for (size_t i=0;i<vItem.size();i++)
+ A9 h! I2 d# r/ j! j {6 J$ J1 i/ d, {- Y' E3 w( P" m
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* F3 U. y8 }9 q1 F4 d @) F/ l% g
pInvSort->Add(vItem.nIndex); f& g! \% l# \: }
}
, z, p! e# m' K" T0 w! `, h' i% ` BYTE nDestPos = 0;
7 G t5 z0 G+ Q# x for (int i=0;i<MAX_INVENTORY;i++)
& K) x( }: b6 e& @3 G4 o {7 H7 ^! T, B7 i. V, b2 V! c" J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; K/ f$ D% ]! v! \& R
if (pItemElem)
0 H4 P' ?& s0 I& P1 ]7 H1 X" _ {
! {4 D) m- o1 [6 L8 z if (IsUsingItem(pItemElem))9 y# T! _" C" |2 E: X4 e# m
{4 j# J. v7 I5 Q- Q2 s
//这个位置无法放
5 I: w) ^7 [! U2 Y7 X! ]0 p nDestPos++;
0 i, U. l& N" D$ U, ]" [- f) {# C- F }. @# b' d. s8 \4 }( P
}3 D+ ~, J C8 [8 ?0 W. v& C
BYTE nSrc = pInvSort->GetItemSrc(i);
- } M7 h. Z2 P. v pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 ~+ ?9 x0 T; ~( p. ?
if (pItemElem)
8 D2 T6 @, E" c8 w( ^, [' k0 q0 s2 J# { {
2 R7 E: Z7 n' Z- H7 j if (IsUsingItem(pItemElem))
/ f [- ]1 R( Y; Y {
' s* g; w. h( A8 _) [8 K' ] //这个道具无法移动,跳过! m& c7 b% A: U2 `& \
continue;% a$ Z; u* y. I6 o- g
}: L: `: s/ p/ {+ V K
}else{: a+ V2 _5 s% ]" I
//空位置 不用动( q! d& r- f) G. p9 s
continue;
0 C: x" ~% ? S }
# X! w* d% R* J //////////////////////////////////////////////////////////////////////////
7 c; y" j+ x: ?" Y; z0 M5 v //开始移动& o6 ~6 u3 M8 m! g
if (nSrc == nDestPos); Y$ ^. O3 _+ D
{! t/ a- e* R% ^3 X4 M
//原地不动8 a6 W ^. z1 f* E' l$ G
nDestPos++;
% f- E) s2 [: Q* _4 m continue;
+ Y x; i n* n+ y }
( a" T( |& M- s K6 U pInvSort->MoveItem(i,nDestPos);! Q1 {- T0 R$ I4 D# i3 e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 i3 |/ v8 U# ?, D; X- ?
Sleep(5);
" I, F% d" y0 n2 }& q+ ^ //Error("移动 - %d->%d",nSrc,nDestPos);
4 a2 ~, X+ b) j3 |. i nDestPos++;! @, b2 C5 h* {/ L
}
1 V/ u* N+ z: W/ \* l //取第一个元素的信息
7 P% r% u9 h( I1 u+ R: C /*5 W2 J5 E) U5 `$ v; M1 l. w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& G; ^: |7 J- z* {) E0 P
{
+ x: M9 @4 p C# G Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
U1 `% v2 `+ _& ?8 V- e g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 I2 P& a, @, X
}
: C" Q1 l$ ]$ ^0 H */
/ F2 {: U( Y6 Z4 Q8 w' s' }+ N! B //////////////////////////////////////////////////////////////////////////
* C2 T5 J" r0 A S+ U% w- q break;' [ s. G. j+ t) v3 A9 e, L8 |: @; H
}
# o: E/ A( ^- x) s4 { }
$ F) F0 Z4 _- H+ O9 o}
. }9 @" n2 J; \6 im_wndMenu.SetVisible(FALSE);
, c& d5 E8 P1 M5 h; o+ T( ?/ E
; N. z+ J7 n$ M4 Z' w--------------------------------------------------------------------------------------------------------: n4 w, j" ~9 v% \0 j! M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 M- j" ?* ?1 h6 x{' B1 I# \* S9 m4 v# p# L$ q+ c: M4 w
BaseMouseCursor();* `5 \7 n6 J# N2 } |
}
- ~$ F5 l/ e# Z. w, b在其下添加:- |# m4 s( M- j! u9 w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ S. g8 S2 ?" ]8 G- U5 ?! d N
{
8 w+ U# c. [3 ^9 wm_wndMenu.DeleteAllMenu();
2 y- ]. o1 B5 U. |$ tm_wndMenu.CreateMenu(this);
8 W5 n5 {$ y- O+ z4 b- s8 o4 lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 ]2 f6 v3 r& t, ?1 ~' U" s) ?/ @/ i: k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 ~' [# R) l( O0 q
{
) Y2 d7 I4 e! q: E //P以上级别才可以删除所有道具5 Y- Z" T- b' n( x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 ]! d4 B; _; }, h8 W
}
5 G: w, r% g4 y/ T% v5 D& Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: a8 j7 |) f, ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 `" W& b) C% p3 b9 E1 d
m_wndMenu.SetFocus();
9 Y- ]% P( K+ k; R}4 ~5 A8 T u2 Z9 ]+ P e
------------------------------------------------------------------------------------------------------------4 |& t9 u3 s5 O2 U+ h- U
*************************- [8 n6 ]& e% c9 E& C( E
WndField.h文件0 D2 X; K' t/ F% m5 m
*************************% o4 {' \$ s) M. s+ |
搜索:BOOL m_bReport;
6 G. A" k+ L2 c. u1 b其后添加:. `7 h6 G5 C7 R3 z4 a% D5 F
CWndMenu m_wndMenu; e& ^3 q3 I/ I; @* i
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 @6 h* t0 |$ i7 [- k7 l: z& Y其后添加:
. y @% i: c, s8 f- Hvirtual void OnRButtonUp(UINT nFlags, CPoint point);
/ r+ }* e% [/ S. J3 O( ?: ]
3 _) s) h6 i( n( {7 ]& e0 D! P" U! n; H% k6 z, }
|
|