|
|
源文件中_Interface文件夹下WndField.cpp文件4 {$ Z9 G% t2 D# h8 \% D5 r f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, q' O9 U- K! k& o' _' y. p. r
! ?. f) M+ ?3 T9 t* `& w* kstruct sItem; H6 s+ |9 o) M* p
{
; ? [7 k8 d$ h% p+ Z0 _DWORD dwId;- i! o; I/ M, y
DWORD dwKind2;
1 F+ G {1 |0 _/ ~8 ?" P' [DWORD dwItemId;
: {* I9 g" B5 ]0 x, a+ {, |3 m6 ABYTE nIndex;$ j% f- K% ?% q" M
sItem(){
/ I( ^- c: q4 g$ |8 h% f( c( D n dwId = dwKind2 = dwItemId = nIndex = 0;0 [. z0 T$ Y2 ]. ~0 d3 F+ g: n
}
* T( g1 q) {( U& q0 c% K+ vbool operator < (const sItem p2)8 Z$ Q9 z" q# j; e# ^; C8 A: ?
{' p G- E. W) c
if (dwKind2 == p2.dwKind2)- Z" x3 h3 k/ [2 C4 G
{6 r6 r& i% a4 \4 o# [2 g! v2 i
return dwItemId < p2.dwItemId;
9 f8 N2 h/ I0 K7 J: H3 O/ b }else{+ x6 T9 D5 c3 q1 S& X
return dwKind2 < p2.dwKind2;/ R$ _2 D7 r7 {. K; ~0 e: P
}7 s* }( ]4 b' }* y' V" i
}& |: Z/ e; e$ w% B9 q( z Z
}; u# S8 Z* z6 o! w1 Q7 z/ b: s
class CInventorySort
, v- q7 ` ~ R% v- |9 q) B{
6 V: u, t: w9 N5 q& Vpublic:
" Q$ g8 s- h% I! x' P; m3 TCInventorySort()
! z& a4 a& l+ |7 ~+ o, A$ d{
% `* W6 ?5 H! f5 k: Q7 Q p m_dwPos = 0;
( X/ _- a2 j9 X1 ~" O4 X: x}8 d" m" n/ Y6 p- p- _& ~
~CInventorySort(){}0 d$ P9 \8 t- ]# I9 X' r. l
private:" E' _1 g7 c3 L+ I: o
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ _- p. Y" @' R) f- K5 G2 lDWORD m_dwPos;
6 S3 V' u( L. M! N2 F+ c* f; mpublic:8 F% F+ j' k: _& M$ ~# S$ a# ]
void Add(BYTE nIndex)
0 ]: ^/ H2 j! e# N& p/ Z1 Q{' D2 T: R( Y: m3 |
if (m_dwPos >= MAX_INVENTORY)/ w$ T+ j' A' T9 b, U# ^
{
8 l! u6 F7 F% g; C% m ~2 G return;3 D" y d+ ?$ m/ r
}
- B" K. q, U/ `0 O m_Item[m_dwPos].nIndex = nIndex;
2 G7 c; H2 S8 e: T+ a m_Item[m_dwPos].dwId = m_dwPos;
8 m" U" }) {) |' P m_dwPos++;
% `" k$ ^1 ?* ^4 p1 G$ m}
) J- \, j7 L2 E6 Q6 F% ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. ?% ?9 p `0 q. J9 z{
4 g0 ]# E% v3 X9 P for (int i=0;i<MAX_INVENTORY;i++)
9 _0 v* J( E K& W {& M$ P" [+ W3 M2 V7 Y( t& \
if (m_Item.dwId == dwId)
+ r9 j2 C5 I/ `$ ] {
' n8 m: b8 X5 I3 o; W: z; C3 Y return m_Item.nIndex;
! K& J, F1 Z* l/ m }
, h% b# v, M8 f/ X- _ }* Q2 d( N% \5 Z0 k7 Q* v; z* r* q
return 255;
; G( b4 O7 P& K2 s( T}) O6 A& T$ a, M6 j" R
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. ~/ v, i. z, S1 [1 V+ Q5 G{. T+ p @* \* O
BYTE nTmp = 0;3 M' g0 `* C# h& g" M7 S
bool bDest = false,bSrc = false;6 C3 Z( J9 |5 J+ Z# A
for (int i=0;i<MAX_INVENTORY;i++) |8 p9 ~9 \3 `) ~2 I8 @) X
{/ v2 t. J( N: h8 g1 j8 w+ \
if (dwSrcId == m_Item.dwId)
' |5 D% M- [2 h {
* ]7 k) F8 M" A9 \0 b //id相等 则 改变对应的dest和src
6 |( E$ U- r8 r+ Q5 J nTmp = m_Item.nIndex;- d$ f$ c# c, P6 E2 Z' I/ X
m_Item.nIndex = dest;
7 N: f4 U: i. O) l4 P }
- w- c; s5 u0 V W2 h, I" z }& f( [6 {, {" Z9 j9 p, D+ v
//临时数据保存完毕,交换开始: J5 j; ` u4 `) v7 d, s* ?3 W
for (int i=0;i<MAX_INVENTORY;i++)
2 d4 Z; d# F) g% S, I/ K {
8 N# _ E0 }4 m {4 H( n if (dest == m_Item.nIndex)/ ~* T1 |% F5 \7 i4 G+ P
{+ {( e: E* F/ J) i) ~3 E4 H* B+ M
//id相等 则 改变对应的dest和src
! M2 V- n5 d/ c {* u# r- V5 D m_Item.nIndex = nTmp;5 R5 ~% Z- s9 z! i
}
: R* _5 g( w2 Z* g- R0 u }
' ^9 D: S& H4 r7 z2 p}
$ |" ~9 x2 N3 m! {2 W' L};+ i! T6 |* X( V6 N- T5 O2 p, [
-------------------------------------------------------------------------
, s( X0 M9 u) J: y# \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), D$ o8 ?* L" T, K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
j {$ a* e6 Z% J z% _" e紧靠其上添加:$ E& k+ @2 n3 X9 b" \ n7 ?7 P
if( pWndBase == &m_wndMenu )
' o; _+ _7 C+ }! a; J3 r: U{) a# s7 w8 n6 W; A
switch( nID )
. T- h3 k' M6 L$ f/ \+ {, n {
0 c3 E( ^" f$ e+ b3 l1 j case 2:4 \) z; i) ~: `* G- w. c7 [
{5 A3 s7 X7 Q! n; ` x! ^
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& E. V6 I9 ~ G+ N6 h6 w! v. X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 K( ~- n) r/ r7 j {
- ~2 H* C! w. M break;
- h5 T4 [8 i2 i$ c }
! d/ l7 w+ F5 O/ T, K6 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 ?- X/ E% Y& ?# l
{2 r. |$ d9 }; j8 Y) C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 n& D4 G4 ^3 E8 X `# F" q
if( !pItemElem )) X" h# F; D0 q0 J5 q7 y% X6 L
continue;
) p2 l, M' h2 \, u) A if(pItemElem->GetExtra() > 0)' z3 T2 D6 u& b4 d% I! b% c! a; q4 y
continue;8 ~/ O! v* q! z5 y0 Z! E) f
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - u2 J+ |# I4 d' p" ?
continue; v# {4 T& L6 u3 K
if( g_pPlayer->IsUsing( pItemElem ) )
3 @$ }! d2 _1 m# y; }( _* o, X! v continue;
" c) G j# L! K9 s9 _( D if( pItemElem->IsUndestructable() == TRUE )
. D" g1 N' r2 c {
: R5 K# H4 F& R3 V4 d g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* m' \; ?/ B9 E3 m( R0 ?
continue;
$ [6 m6 p7 M+ r* e9 }7 S* F& s& o }
' S3 X# A2 ~, w+ N8 ^* r8 X5 t$ m g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% B8 n& b+ a4 i M8 J) D }# o4 g& e- A; E! l9 l
break;
9 A; H3 X+ w! ~ }
+ B+ M) u' T2 W9 T' T$ g case 1:4 g# q3 o7 c* s) y$ j' _1 K$ F
{
+ M! c3 E s& I- H/ L //整理背包
1 a$ u4 E& T+ W //////////////////////////////////////////////////////////////////////////2 L- M; z9 x) Q1 c' y% U
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) ]) v- r& @3 s, x( U0 g ////////////////////////////////////////////////////////////////////////// {4 p- \: M9 c$ q3 O- k
//////////////////////////////////////////////////////////////////////////& ` Q. f! T8 V+ m! o7 T
CInventorySort* pInvSort = new CInventorySort;
# N8 z( E0 `4 \! ~ vector <sItem> vItem;$ Y2 t9 l$ o" ] Y3 R2 s
vItem.resize(MAX_INVENTORY);//初始化大小' b h% B3 U7 s8 z% `5 w
//////////////////////////////////////////////////////////////////////////0 h7 F( i0 i; E6 l: W
//填充数据
8 P5 }: w; n# I/ ^( \ for (int i=0;i<MAX_INVENTORY;i++)- U( g9 @1 i- U: Q
{8 u) l$ C0 e- P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 e5 ]5 H q! o; d if (!pItemElem)
) t$ w( ^! |" j- ?( u5 g, I2 v) X1 a {
6 [6 u& B, F1 I: y7 E) u& V vItem.dwKind2 = 0xffffffff;4 U/ g1 ]5 _( Y9 x1 ]: [
vItem.dwItemId = 0xffffffff;
$ J% h( f; w( @5 j. U. a vItem.nIndex = i;" h* @+ N+ I0 K* j1 G
}else {
+ P9 ?, e7 A! }5 t ItemProp* pProp = pItemElem->GetProp();8 D/ | p6 q* E( D- }
vItem.dwKind2 = pProp->dwItemKind2;# m2 ]) {. N J9 X
vItem.dwItemId = pItemElem->m_dwItemId;
$ \7 i6 ^+ R# ?- c- ~9 t3 T vItem.nIndex = i;
' ^4 T x+ p) A' V5 \ }
3 [$ B' f7 F: |$ b- h' k //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# S6 P8 \$ q/ R9 [
}% i9 N N3 u$ s8 D8 s0 n1 z3 ^
//////////////////////////////////////////////////////////////////////////
$ x( n" b9 B1 `2 c+ T2 b* M$ | sort(vItem.begin(),vItem.end());//排序( }7 g5 [1 d* |1 Y3 ~7 @
//////////////////////////////////////////////////////////////////////////
8 l/ {7 U; I; y' p1 ]) m //交换
; n O% F* M# V; F# N* X' a7 Q for (size_t i=0;i<vItem.size();i++)2 G# r8 s! y' X% W5 Q5 Q, J
{1 R6 T' |* G- U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, a1 r2 S1 r& w& D+ ? pInvSort->Add(vItem.nIndex);2 Y w+ `: ]9 C7 t3 d+ I5 e8 s# o- _
}! z$ x* N( i6 X+ A+ I( K# E
BYTE nDestPos = 0;) f7 V& @1 V, Z; F2 H
for (int i=0;i<MAX_INVENTORY;i++)
; Q0 E9 T# u; y' { {1 Y5 M W/ W6 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 P S7 y- k4 {6 o/ a- l# [
if (pItemElem)
+ }- {/ z( v4 _. i5 j' @+ { {
% e4 B+ {7 @$ V% i+ a if (IsUsingItem(pItemElem))
6 ?5 L4 \4 {: [; m! j4 j# F {0 e Q( V# k/ n$ G5 [
//这个位置无法放, p. }, F+ d# d& D' I& {
nDestPos++;
) o$ E4 A/ Q" X/ R. ` }) G. l& y$ M8 ?1 i
}
( [. o- k( G9 y: z$ s" j$ e BYTE nSrc = pInvSort->GetItemSrc(i);
& f" V& b; j+ s* Q( U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! Q! S( ^ e! @) ?
if (pItemElem)
: T, y( A; O4 i; w3 \- Q {
, D* s( X5 y2 L4 g! t. B if (IsUsingItem(pItemElem))
7 p* A0 O( `4 q; G8 i, d1 Z( ~ {* c5 z) J& }* |: o* ?0 G' ~
//这个道具无法移动,跳过( k+ q0 V; K) q* W9 U f8 a/ o
continue;
7 m& e# k1 D2 B }
- i8 A8 W) _; `- F) d }else{
2 g( P5 u3 k& ?( f9 q# c" Z //空位置 不用动
; g( a' R9 ]# g4 @0 Y9 T+ w continue;2 `9 h4 P- b$ Z% u5 P$ O
}
* `% C* d; g& J) ` //////////////////////////////////////////////////////////////////////////
7 y6 N$ M% O: P. m; y% V/ Z //开始移动
$ I! I6 V7 S& ^( y ?/ X if (nSrc == nDestPos)9 h9 h3 _ c) r
{, O5 o! O3 \' r+ M, U
//原地不动
3 n3 P7 A2 @+ k& A nDestPos++;
4 R7 U: A1 Y- L" E4 b/ l continue;6 u3 W2 }$ d9 z2 F& J5 e5 k
}. u/ o. c3 z+ c- x' ^
pInvSort->MoveItem(i,nDestPos);
- J- }- P! }) `+ I" k! T1 u8 n: F8 e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
[: l7 ]$ K% `2 a( }5 l2 C* y; G# _ Sleep(5);/ G9 m( c/ {* \8 `4 ?, u
//Error("移动 - %d->%d",nSrc,nDestPos);
4 q5 F0 k) i/ J* M' l `+ T3 j nDestPos++;6 H# W, d6 [ v, v3 U9 v
}
% D Q1 J/ T4 T //取第一个元素的信息
9 G9 Y1 B- l8 ^+ Z+ d/ z+ M& B /*+ `1 G+ z5 m' _: z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 Y" g8 r, V3 r; |/ j4 u* X3 S {
) E7 H5 D. U7 V" R5 O7 h/ w Error("Move - From:%d,To:%d",vItem[0].nIndex,x); ~3 t/ i; m! h; B9 A/ @" Y! V# ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( ^) e- ]* z4 \( | }( i" {2 i0 X9 y: V
*/
' e4 ^+ T. G5 d7 N //////////////////////////////////////////////////////////////////////////
2 o! C: c- {5 p% d break;' a* l# ]$ N) m% T+ ?- N
}
, W9 w8 {+ p/ ~! x' ]' b }
; V2 y- E: A, o8 y}
) | E# M. N7 e; h0 ~! am_wndMenu.SetVisible(FALSE);
- H: g C( G9 S% ^, }- G" C Z( {
$ a8 E8 _! O T9 L7 E4 E- a1 G--------------------------------------------------------------------------------------------------------
! q4 E& I. A8 G: z" j搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). u ]$ T! L: K; i! R1 J
{
: A/ Q' L. {- v' R3 J- cBaseMouseCursor();
2 {2 O+ ^5 h9 P: g7 k}
; u) ^5 {+ O. A1 L5 B在其下添加:
- a& o# V- g( D7 D6 @/ dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ v# P% O8 L: z{
~; Y, u! L$ h; n- vm_wndMenu.DeleteAllMenu();/ e" K1 Q5 ]" b0 m6 O% |
m_wndMenu.CreateMenu(this);5 D9 \% f1 T. c, Y1 ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 \. |. i1 m/ g
& w& X7 F+ A: vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 x% H/ h" f0 g5 E s
{
8 W* [/ M' T7 b) i6 ~( B //P以上级别才可以删除所有道具
& P8 i' y! e0 B: }5 o0 |. { M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' _% E$ A* [+ h4 _, C; ~
}
/ h, i7 t& y( I) \m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& U8 A, N u8 Z0 a B- d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! w& I1 E; i) O9 v$ s/ F7 Um_wndMenu.SetFocus();
. {! X2 v& G7 r) U- t# h1 `}+ B$ d# F8 t" f4 r$ ~
------------------------------------------------------------------------------------------------------------
& O# F6 a1 S: q5 U0 F7 G*************************
3 h4 F, D C6 OWndField.h文件1 G: q. h- [( o* Y1 `' Z
*************************: W" @) [! O, ?; T8 g
搜索:BOOL m_bReport;
$ }. t( X$ d1 H4 O- t) J1 ?0 V其后添加:$ @" L8 C: k, l1 D7 y, I/ \
CWndMenu m_wndMenu;
- |! Y& `5 l4 A# t2 Q: `搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* i# {( k/ ]' o/ Y, Q# Z其后添加:
8 z% X0 h9 C3 K/ Y Svirtual void OnRButtonUp(UINT nFlags, CPoint point);
# x+ Y2 X: U, C; H- [* K' Q1 a8 O9 X9 D
9 }% C! I" Q. J. o+ s
|
|