|
|
源文件中_Interface文件夹下WndField.cpp文件
1 t0 a$ @ E. |* \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). e. u' R# w( S5 x" T, y/ `/ f
+ Q: d1 p) N3 W0 F1 @
struct sItem
K) E+ _, i. ~7 J' v7 x; @2 W{& `+ }/ \7 i# s1 T
DWORD dwId;2 X; e' ]% R1 d W
DWORD dwKind2;
: \8 M4 A! i8 j2 L* IDWORD dwItemId;
; @' m$ l" d9 J0 X1 U( e" oBYTE nIndex;
& z, Z$ `+ c& a' [/ L8 LsItem(){. K5 z0 j( z/ i
dwId = dwKind2 = dwItemId = nIndex = 0;
7 u4 G0 v9 w! }& x5 a6 H L}
) c" q0 q# Y5 }) j t G- Rbool operator < (const sItem p2)
6 D' D( Q% I4 i{
& \3 E- A4 b* [' y# d# n if (dwKind2 == p2.dwKind2)
( v9 P9 q2 U M3 E/ T {
; g; `) S2 t) i+ d return dwItemId < p2.dwItemId;
9 _5 {) c' ^3 T1 @/ z }else{
1 ]* U6 k. K, [' V return dwKind2 < p2.dwKind2;8 Z$ Z! U) W- r3 n
}
) L- L* b# z+ a# R+ ~7 h! {}4 I' }) K! h8 B) b, j% W, W
};# ]9 |4 m0 | H/ E
class CInventorySort
' f7 b4 t0 x2 f; L" ~; s{6 Z! z7 k5 m6 J1 }3 y/ p
public:# p8 V$ a+ A$ ^3 p# S
CInventorySort() ]: G1 [" J2 D
{5 c6 E" Y8 m9 Q+ ]' P2 H3 B2 C! v
m_dwPos = 0;3 X4 M$ |+ y$ C' A- f2 j
}7 U9 E" d6 D5 ]7 T$ @* R+ Q6 I
~CInventorySort(){}
+ s: P: d- p7 Vprivate:8 Q# k5 O; P' j3 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: r+ M9 w& x3 V( \1 NDWORD m_dwPos;7 A' _% Y) K( t/ D- `9 h
public:( M* M1 C( N1 f' w3 ?' D
void Add(BYTE nIndex)
4 K# @* p5 B1 \& {; ~& b6 F0 {{* { l5 N, ^# I6 N( n5 \* Z
if (m_dwPos >= MAX_INVENTORY)
: j b; \ i7 ~ {/ y% l4 m$ ]7 E* q# Q7 ~. W
return;$ l5 D4 D6 b" i3 r3 v
}, T! d7 _- n: H3 d3 c* Y
m_Item[m_dwPos].nIndex = nIndex;. c4 P: z; F7 r! O# R
m_Item[m_dwPos].dwId = m_dwPos;
9 C" G7 D: B: ^% ?$ K m_dwPos++;/ I: F: W3 }& Q4 ~* D3 M
}- e! ]% {2 V; O+ w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 _# u: U" u+ k0 s) e- r4 N7 t{& {& _8 @ O/ c. H( j
for (int i=0;i<MAX_INVENTORY;i++)
) G) p/ c5 W; X$ c/ E {0 w/ I0 I; c `$ w* s
if (m_Item.dwId == dwId)
6 A# M+ ]7 V r" n1 [6 T* N e( O+ L {
0 J0 r% X# I3 _8 [2 ]7 B- g( e! \ return m_Item.nIndex;6 r# T2 y8 G% O9 @
}# G( @* [) V* h. | B
}
) |1 b2 u/ s8 \+ q2 a return 255;
5 ^; [* _- D, P6 `( R4 g" q}3 b5 P9 s7 l1 E* J5 G, j* K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 s- T1 t: D" o* ^
{" K. l# L) @6 L5 Y
BYTE nTmp = 0;
. `0 o( z5 `7 ^ bool bDest = false,bSrc = false;. i" k1 O# s$ p1 p
for (int i=0;i<MAX_INVENTORY;i++)8 G8 m9 v8 s- n& b) Y/ t
{, v5 X' `# Q# s+ @8 ?- h
if (dwSrcId == m_Item.dwId)( e) \+ L7 H3 b! [7 j# C
{5 v$ R8 k: W2 r) f! x
//id相等 则 改变对应的dest和src# t7 T3 p/ @% N- H- B% E6 h, i F1 g# V9 D
nTmp = m_Item.nIndex;
* ]6 p [; [6 m/ D: e* D% d; V. A m_Item.nIndex = dest;, d7 c( J1 [' Y6 A- q
}, S6 b* q0 p9 k# J+ m6 ?: _
}. i0 u7 I' f* ^0 l% L# w
//临时数据保存完毕,交换开始
+ W' m) y0 Q g' j for (int i=0;i<MAX_INVENTORY;i++)
6 {, z2 e. S# h# J, g* r {% T3 t4 Q2 J& D4 \# b* R
if (dest == m_Item.nIndex)( }. F1 d, t3 m
{
7 c5 U( o+ T3 K* P //id相等 则 改变对应的dest和src* e$ t8 ]' R O' r
m_Item.nIndex = nTmp;1 I# Y+ {) K0 K: F
}
) R) t3 p, V1 S }
! G5 N- | E; H2 ?, v}# R3 D2 f- `9 T$ g+ A
};
4 D9 H6 [, ^/ K" m- h2 k$ U-------------------------------------------------------------------------1 T- x6 @$ i& G7 {5 W8 z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" a& z3 M# @4 u% {搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- V% E+ m9 z' ^* y4 {# P) \
紧靠其上添加:* ~; B9 p, Z; k0 l$ h
if( pWndBase == &m_wndMenu ) p. y* o5 `: f
{+ Q! s x Q: a# A5 `, k. o
switch( nID )
$ X+ @% x: D) O: c @ {, W/ R0 Z1 U2 H2 q$ v
case 2:
8 {; M) R& i; y/ j { q2 C! }& q, i" O( q" }
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ ]9 j, R0 n8 z; L$ O7 O* P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 |$ k$ P6 c: o$ U* _& m" C {
7 P' J6 e' z$ f2 e/ |8 [( ` break;
/ m0 Z; [( [8 s4 i' e6 W }
: m0 Y/ f9 a5 K% [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: q( g; l8 d& d+ Y, k( T {
_; k% f" B! _5 s5 ]/ C1 H1 E/ J, c4 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 `1 F* @* J) s" Z& d% s if( !pItemElem )
* ]$ D: F% ~. }! s0 p( q6 u+ s4 b continue;
+ A. H X! C" W: T5 ^/ o if(pItemElem->GetExtra() > 0). T) t! C: C a: l
continue;4 K3 X" O: s# c0 a; ?3 b( q0 o
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- n: C5 y& E% _& y continue;5 z) |8 T$ c9 ]+ Y: b3 B
if( g_pPlayer->IsUsing( pItemElem ) )% K$ H$ J9 O. B" W& ]
continue;
5 K. M! n0 W# v$ i9 ^/ j n if( pItemElem->IsUndestructable() == TRUE )
, L+ o+ {+ A" U8 [/ d0 F {7 F0 t1 |% O) G9 H* _3 t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) m m& x* Z& W' R/ n6 I4 ^, D
continue;
, |" v. ^: ?! P. R) B2 v }
3 g3 X, l5 G4 q! O( [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 |) q( C# W7 t, r! ]# l; N4 A+ h }
! s4 ?0 a: n. d. q break;1 }8 j0 G& l& t( ]7 F/ y3 s
}1 _" v$ h0 c" ]/ }5 P. e$ E2 O" x
case 1:
/ {4 n- u' o% C* s* d8 X; G {0 c( H2 u9 n5 D, i8 {
//整理背包# |4 d8 j, r* W2 p; e+ E7 U( e
//////////////////////////////////////////////////////////////////////////, M0 e, C8 T% G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& l- L9 H. p: Z
//////////////////////////////////////////////////////////////////////////& a3 @, j9 Q5 B6 Y; `: @! I0 M) k% T
/////////////////////////////////////////////////////////////////////////// E' Z! I. ]; ^/ b# B! }
CInventorySort* pInvSort = new CInventorySort;/ ?6 p. [' M; t( y2 G
vector <sItem> vItem;7 D% V0 j, e* J2 ^1 y% |$ t0 _
vItem.resize(MAX_INVENTORY);//初始化大小
& ]& c! |7 e8 |& f# t //////////////////////////////////////////////////////////////////////////. Q$ B; L2 V/ E0 d
//填充数据$ g8 U& g2 u/ T& Q }# G$ O y
for (int i=0;i<MAX_INVENTORY;i++)( j3 W( u; M: w, ^
{
1 ^; G3 s+ }( E8 a& z, J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 Y9 O4 f* v7 @9 l; X. R- U: L. Y
if (!pItemElem)2 n* h( W5 _/ H9 J8 i
{7 Y' d; i$ i) `9 q9 _: b
vItem.dwKind2 = 0xffffffff;
8 |) H/ Z" _1 N) D vItem.dwItemId = 0xffffffff;! Q: v2 `" K5 H
vItem.nIndex = i;5 }5 V# @' H ]. d- a# [+ n) }+ F
}else {
; k7 f- @ l+ v1 ^ ItemProp* pProp = pItemElem->GetProp();
/ X7 y) S5 P$ Q" l5 _8 r5 c vItem.dwKind2 = pProp->dwItemKind2;& I2 i2 h G' A8 u. `% v" p' K0 g
vItem.dwItemId = pItemElem->m_dwItemId;3 m$ p+ h" I6 v- w
vItem.nIndex = i;
9 l7 B" F. t9 y, X" \6 T( l5 i }) ^! `& H5 n7 K% u" k2 Y( G0 n
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* z7 s! ?9 _8 ^$ ]0 D. M
}
# c2 w( f+ C0 h* z //////////////////////////////////////////////////////////////////////////
0 B7 `0 s8 }7 P- |( v sort(vItem.begin(),vItem.end());//排序3 G, Q: H$ g5 ~$ u0 k# w4 P8 }$ N
/////////////////////////////////////////////////////////////////////////// o3 [" L" M& `" H3 f6 s! E
//交换
) b) m R- n1 N9 Z+ ?3 _ for (size_t i=0;i<vItem.size();i++)
( Z2 ~# `* e+ `8 ]- q$ L7 P2 k {
2 q* k! E% d" ]* w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- \$ C a- D; Q5 d2 ]6 H; U7 D pInvSort->Add(vItem.nIndex);
0 l8 ]# K" Y0 k( F, t }
$ |2 @' j: X' @& J9 O' ~ BYTE nDestPos = 0;
8 ~* h: }4 b, b. k3 _. e for (int i=0;i<MAX_INVENTORY;i++)
0 w( E% a0 J+ s$ f, S3 |% V {
1 r* K w% W0 ]$ O- } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 a3 m8 P2 i/ P3 ?# U' ^4 v
if (pItemElem)5 Y( N& n* ?! E+ s) {- F
{5 u# ?) P# {6 P1 b2 W; H8 n( {! h' C* h& r
if (IsUsingItem(pItemElem))
/ W7 {1 r+ j% @: R* p; \ {
. A( I0 m2 [! r2 m' ` //这个位置无法放
) l: x9 Q; w l0 w0 h2 S nDestPos++;3 ~' Z3 F" M$ h, {" ~
}
9 K' c+ V; ]0 |5 C$ B: _- }( E* Y }
$ y* o+ w: Z/ \& a0 ^$ ~# ~ BYTE nSrc = pInvSort->GetItemSrc(i);
- J6 O7 M$ x- X" O: |% c pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 D7 z5 X% q( u% V$ T
if (pItemElem). g9 M" V1 G2 E" S# m, B
{
! H3 u7 K* t6 ]. f4 ~% t if (IsUsingItem(pItemElem))
/ j9 C1 x, F% r" v {7 H* s1 s; C" n% ]! S
//这个道具无法移动,跳过# ^5 M1 V; x E0 V2 [* Q8 [. m
continue;- ^5 w' k( p9 d3 e6 g3 |) B3 t
}% L1 k: L1 Y# F9 g9 h- n
}else{7 p- k) H) K* A+ V1 o0 |, I
//空位置 不用动
) s, [7 `7 t7 V$ h6 n$ n continue;! w7 a+ W, H( R( }6 @
}
8 o r& x' Y' M% U( L //////////////////////////////////////////////////////////////////////////
9 K* i! C# f! u; ^2 h$ z. [0 ~/ X //开始移动
( Q% a' W4 d& p* x if (nSrc == nDestPos)
: f U* K, ~: e% K" e! R {( u, R7 h d1 Z/ v- j
//原地不动. G3 K: J( [( d+ U* ^
nDestPos++;
' r) |" k' H. X V5 c' L8 E continue;
5 t0 f1 ]' X* J: Y1 g0 n& }# \ }
; T# C! V+ X4 `% d; r E$ K- y pInvSort->MoveItem(i,nDestPos);
" Q! ]1 b% b% a b8 G' F g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 Q1 o5 }% }' m3 g
Sleep(5);! ?7 H D' f& e
//Error("移动 - %d->%d",nSrc,nDestPos);
8 q1 j7 ?2 K& D$ f$ y/ O( p* z& q3 ]2 @ nDestPos++;3 U8 N0 U$ W6 J! q3 [
}
0 L) k6 _6 x+ { //取第一个元素的信息
5 s/ x: a' s: Y! s: O& ]3 h /*
0 V. R( B& w8 S! U2 g' K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 [1 i; P$ l# `8 o {
& A4 |) y9 W" M7 v/ l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 @6 L7 R; @5 a3 @" e, V; @/ J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 y# |+ j% G% t6 \ }7 M. N9 R1 h% a' ^2 |
*/6 Y9 F$ U$ B9 O/ o% G6 F4 `2 ^
//////////////////////////////////////////////////////////////////////////; l5 x2 U& `, I" w: m" J7 ?
break;
, _6 T% C) {+ a8 u4 l5 m3 T2 [' U }
2 y+ M1 z% w: O9 T }
: |" w0 J3 N+ P3 F! L% C5 v}
% u: K! ]8 L( d, um_wndMenu.SetVisible(FALSE);
. P4 E* B1 y6 T9 A T* B# C4 A! L' i5 C$ Q; l
--------------------------------------------------------------------------------------------------------. o2 d) F& l7 @ n7 H: U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 x- N3 F5 H! M+ p9 l
{* t N N: F2 d
BaseMouseCursor();
$ ?9 R2 d4 q; a/ a# [7 f; e! J6 {: D}( c2 |% Y( Z- { l# C
在其下添加:) |" |# O& f' _2 a# _7 m! l3 s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ D6 N) | z" z4 J% m! Y& K{) D) ?8 q2 \2 Y
m_wndMenu.DeleteAllMenu();: K* g+ Y/ K5 P0 q4 I; ?5 |, [4 ?
m_wndMenu.CreateMenu(this);4 h u. s5 C4 e* i- J8 o. q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% V; A- z" I/ e* a1 ~# h; B/ T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& L/ l. O: t* r- S' h/ k; X{0 X* o. g. Z* {. y$ q
//P以上级别才可以删除所有道具7 Y" I) K& J! c* i8 {5 ?" O5 \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" a4 L! \. W* ^( y# p
}
$ l6 i% N0 f/ [% ~m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 u- ]/ u; q n# Fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ Q g0 N' W" ]+ T f8 t0 }( Em_wndMenu.SetFocus();/ N. E+ U* p& H8 S, X( A+ a# o
}
7 E F1 \9 C& l7 C7 k------------------------------------------------------------------------------------------------------------8 O a/ ]2 ?: L8 W3 }* |
*************************' w$ `) F% W6 y+ w3 w
WndField.h文件. Q7 H* H5 U* k, ~
************************** T% h5 K8 `( X5 N% u1 H/ D. I
搜索:BOOL m_bReport;
! S5 b( [% P# d" M2 c其后添加:
) ]- E" P8 v7 b8 T9 [/ p, UCWndMenu m_wndMenu;
) v* e& F: ]" \3 ^2 z0 K搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. @) O; s' }1 d* i8 M2 I. r其后添加:: q/ Y0 M( U% i8 V8 f, P6 I
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 C; z( P$ v0 y3 f, W8 L7 _* B1 _/ J. s! ?" \, L
; g( o* N" V$ v' w
|
|