|
|
源文件中_Interface文件夹下WndField.cpp文件) j$ H6 x2 `) N" _% ~' o& K) {
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 R2 C, h+ V- {, ]- d
! L# i, y K ^% d# ]3 cstruct sItem
3 |8 F+ H" f- t6 \* j2 C{
0 M5 f( i2 `1 H: f/ Y8 I" P1 uDWORD dwId;
4 U7 Z: i. a6 v! P8 p: _DWORD dwKind2;
9 f$ S( E' c2 q, ?DWORD dwItemId;. F8 p$ k# F o- x( c$ E) N
BYTE nIndex;
T+ C' ^9 k- ~* B$ jsItem(){
- v; ~7 |* H& v, D( u1 P! }( Z dwId = dwKind2 = dwItemId = nIndex = 0;
) w7 F5 v; u' K5 _3 R6 J0 C5 N8 T; ~}
- z" p7 O/ w) q- {- g, Tbool operator < (const sItem p2)
. w! P+ U9 x! D6 M{- Y5 `1 k W' K
if (dwKind2 == p2.dwKind2)" H( d: Q# I4 h, E y; J0 \4 r
{0 c) g: Q% m/ z$ }& j5 w
return dwItemId < p2.dwItemId;
1 b7 m8 i: J3 y6 l# G: _ }else{& i+ h+ q8 F2 {+ a% I
return dwKind2 < p2.dwKind2;
3 {" J. C! D0 h: N8 q# [1 c }* a% K+ p4 p4 O' J
}
' Z2 K: p m- G/ j};
4 I& Y5 \; d9 S: G8 {6 k' Q! }class CInventorySort
* s& k! f4 H0 ~9 c5 @- Q9 ^' m{: r6 T) g" E- j; n. \* `- `1 b" q
public:9 p5 @' E' O! O8 l& m: A& F% ?
CInventorySort()1 K- N0 \. U+ \& ?0 s$ ?
{; o" \& c& K# C8 _- x" n
m_dwPos = 0;* k4 g( z0 e6 `/ m7 [% h. i6 ]7 |# m
}
9 a0 M0 v$ E- R~CInventorySort(){}6 z- a) L, f6 g, m
private:0 y+ N6 y2 o+ X- b# }- Y0 q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 L$ e4 L) S$ h* k) R
DWORD m_dwPos;
; F4 S! c/ F- }2 j) Qpublic:
u% q. b9 ?8 _* m: i7 Q( Ovoid Add(BYTE nIndex)6 M" T* z: h$ c( k9 L8 x
{
" |. V! E# }( e: V; o! v if (m_dwPos >= MAX_INVENTORY)
" q4 [ H# ~& V3 }% g {
* G4 k0 ~2 _8 h7 s/ M return;2 `# K' G0 ^' u0 e; U# I F+ L/ n
}
% F D' F$ _7 W+ g: } m_Item[m_dwPos].nIndex = nIndex; D# G# i* g. _, k2 X
m_Item[m_dwPos].dwId = m_dwPos;% A4 l8 i! U$ J# e2 Z
m_dwPos++; W& ^8 I% e! k* [
}* Y V w/ o( E7 D( v" `* R' ~
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: a9 a3 X! q* f! z9 N* r- A- V{4 ~# b7 Y" s$ B; v
for (int i=0;i<MAX_INVENTORY;i++)
7 X, p0 X6 d6 g. C S; i {6 Q+ w. ~3 Z* J( N: l* q
if (m_Item.dwId == dwId)) p/ f1 B/ |2 c# i
{
$ ^6 y, x$ N$ }% x return m_Item.nIndex;
$ A; Z) S7 T( U0 R5 w' G7 v# X }- r9 p. g; L n/ h. i) O+ F5 z
}
& I* ^/ B8 L. C0 ^7 T2 S9 \ return 255;7 a1 S- K2 y# s
}
7 u9 H$ `% c8 c6 T+ r fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: f; w4 Z+ x; v* d" o
{
6 z9 f" y$ O# Q4 W0 H' z5 r/ { BYTE nTmp = 0;
l, k3 y. l# s2 i: k- A bool bDest = false,bSrc = false;
2 Z4 I9 g8 W/ E2 {+ C4 P# n/ `# C for (int i=0;i<MAX_INVENTORY;i++)
4 o+ a. l; j% ` {2 {7 u ]( S5 q1 w; u
if (dwSrcId == m_Item.dwId)7 _$ b' l: R$ d6 }5 K
{ H4 ?, K) a4 w$ [% h
//id相等 则 改变对应的dest和src% i& r( h$ a. m7 V4 D5 B8 v5 e
nTmp = m_Item.nIndex;
L B. f6 F4 q0 Z" n( V m_Item.nIndex = dest;
$ u3 m: j# r; p' w/ J }
0 {+ B' M; N# `/ l1 D }
9 _# @( g& I$ ~ //临时数据保存完毕,交换开始
4 h, p1 T8 P6 j' f& t for (int i=0;i<MAX_INVENTORY;i++)
, a9 o: H9 G3 M4 |% q2 o; W% ` {
( O7 i% N( H" Z) c$ @, J if (dest == m_Item.nIndex)# M2 A3 u+ x) u; y+ [
{
; [; e9 ^- Z7 C9 r/ H //id相等 则 改变对应的dest和src+ s" S+ g; d1 e
m_Item.nIndex = nTmp;
$ D6 V2 c# g& c: i7 ]' j, k/ V4 W+ ] }
- p2 W! p7 V/ G+ Q7 O5 b2 K$ ? }
5 N- y- M$ M7 j' W6 Q% f. P}
% P" |# p7 X3 }- b$ f};
# D5 c8 }( h* j: u+ A-------------------------------------------------------------------------8 k5 Q6 z' R3 P3 `' [3 v+ R( k9 `
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' |3 t2 R, \1 r, d2 V @
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' z# I1 o1 w4 m5 U( O
紧靠其上添加:$ h9 \2 Z+ z. ]' B2 N9 Q d# l0 j
if( pWndBase == &m_wndMenu )
/ X4 d; o% b4 I+ Z$ T# D8 `6 y{& ?& N4 q8 M5 F
switch( nID )2 o. R" C) {4 f0 ^5 y+ b3 _6 w
{% ~" O7 N) b5 _4 z+ O* R
case 2:, [- G( z( r, _* D( i& N
{
/ x- Z5 ?: R' H- Y+ M //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ B% R$ }2 C+ p0 a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# C; C4 H4 i- q {; A/ X4 Z4 T+ a. p7 L" q
break;. z, U- L, Q9 b8 g
}* x z7 }! r3 k) O2 s" y- h
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 k0 D% T2 u* E' A# Z {$ t# d: ^" M3 I7 _3 x' e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# K$ ?1 a p: f0 j; G) k if( !pItemElem )% e- I2 C+ }! S
continue;
7 v$ n6 T0 M1 i o2 a3 R+ k if(pItemElem->GetExtra() > 0)
) L. G0 J) p3 c+ g! l continue;
$ p: J0 n0 F$ H8 ^& f$ { if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 B+ v" {4 \% w# ^5 p/ b" v+ v continue;
5 w- E9 E3 q. ]( d% U5 k2 d if( g_pPlayer->IsUsing( pItemElem ) ). j) \9 p P( X9 l) _. P% c- N
continue;
7 z. A2 V7 e% v( } if( pItemElem->IsUndestructable() == TRUE )# Y2 A! S7 p1 |$ B% l, Z8 @7 Y
{2 x5 U Q0 e9 d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) m" r7 H; T( L- {* _* X continue;
5 v9 R5 l5 X3 l$ e( S: N8 ~( T+ K }
7 L" U' V6 l0 m- ? } G) o: L8 T- ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ [/ y& o! V6 |/ V
}
1 N7 k, O* B) [- J# |1 H. }9 j5 J. a break;
1 K' |. T' r- |; J8 E2 P }$ C$ M9 w2 [8 k6 X
case 1:
) O+ q* p" B, T# u {5 Z0 ]" C1 }( y
//整理背包2 m- @! R ^9 t& Z
//////////////////////////////////////////////////////////////////////////7 Y K3 b t7 B: j3 b$ O: [- r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( U' U: N G8 I: }
//////////////////////////////////////////////////////////////////////////
5 f6 ?- u' ~! r5 U, W9 K; y //////////////////////////////////////////////////////////////////////////6 I0 D6 N* Y/ S. `2 I
CInventorySort* pInvSort = new CInventorySort;
" v& [: n, [ ]9 r3 ?/ V8 Z vector <sItem> vItem;4 \: }: \) H+ s6 F! d4 _
vItem.resize(MAX_INVENTORY);//初始化大小
9 A t6 o2 C; ^2 y, m //////////////////////////////////////////////////////////////////////////
* M/ M9 b+ w! m3 s //填充数据
! z- c% K, k" d" H" R2 { for (int i=0;i<MAX_INVENTORY;i++)) y, Y% _ }3 j# a3 S+ N6 l
{
/ o# h) _7 P, N+ v7 X8 y& ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ g- Y9 y5 E0 z8 [1 k) G
if (!pItemElem)
' B9 u) W8 T' R. ^* J: `4 ]$ C {
" N! ^4 {: \) Q& x# f' u# u vItem.dwKind2 = 0xffffffff;+ o; b1 p# W2 K
vItem.dwItemId = 0xffffffff;% l' Z9 i; M; T1 G" U! z, K# {8 b
vItem.nIndex = i;
% l7 M4 n' q% X2 J% {5 Y) u0 p; A2 o }else {+ [$ s) n/ |0 {8 u
ItemProp* pProp = pItemElem->GetProp();
`' {5 l3 e; D: F7 K, c ^ vItem.dwKind2 = pProp->dwItemKind2;
$ q* \7 [, e) ?+ U2 d4 o1 ^6 s vItem.dwItemId = pItemElem->m_dwItemId;& y8 w+ i: ^& z1 w* k2 F2 `
vItem.nIndex = i;
* v. [/ e! e0 z8 k }
3 m8 |9 j+ z/ d0 q" L. l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; W* ^5 S9 @. y4 Z9 K& u }
. ?9 S/ v: F+ X1 y //////////////////////////////////////////////////////////////////////////2 Z% ]8 N' Q, E1 {2 X
sort(vItem.begin(),vItem.end());//排序
1 x3 R; m& s0 G$ [3 h) i# d //////////////////////////////////////////////////////////////////////////
, B8 f# y( k9 ~ //交换
# m; C5 m' D& y4 w9 X5 }7 Q4 k7 Q for (size_t i=0;i<vItem.size();i++)
" b1 F, j2 y9 ~: v5 K {
8 Z! k* c4 D3 f* s% z' U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 P4 O/ h4 R! C: y! ? pInvSort->Add(vItem.nIndex);
* N& `9 Y2 T$ N# F9 M }6 i% g) a* x |7 H" v
BYTE nDestPos = 0;
8 C# i% @ ?0 G4 @# e) D for (int i=0;i<MAX_INVENTORY;i++)8 C1 f1 l. H( T) b3 O5 t+ }3 S
{
; s$ A, W; _, d" F9 K5 g8 d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ U" `2 i7 a; p+ o+ k3 i7 D& ^8 P
if (pItemElem)
' r4 R- ^. l8 j, O' O0 B {
6 Q/ W1 i. r; q7 M( n! S if (IsUsingItem(pItemElem))
- {9 N( g0 C6 R {# G" O8 C( O p, F6 b
//这个位置无法放
, F4 U' o' F; e nDestPos++;
( c, r4 ?' Z, W: m }
: I. b; K. ?3 }' u0 [ }1 L7 L5 D0 I( ~. J) h/ @ l+ p
BYTE nSrc = pInvSort->GetItemSrc(i);# B6 y1 j5 s Y& e. d& |, d
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ L7 L+ T7 q5 k, N7 _! \% n, o if (pItemElem)
& Y4 ~. @# |" D& `2 v3 ^5 D {5 {# A m- ~ G+ e. k/ T+ s. R* W
if (IsUsingItem(pItemElem))% C( N5 H1 T! }, Q1 Q; E
{
5 }3 O: p3 k" p1 L: \/ U //这个道具无法移动,跳过
2 W: p% }+ _3 ~7 ~% \5 S continue;9 r' H+ Y" `8 D4 H
}
: p1 H2 D7 L3 f8 L7 Y }else{2 n: G: T* g0 ]+ L8 |$ |2 @6 e
//空位置 不用动+ |8 g2 _. b G; h j6 A+ n$ a' ^
continue;7 `' R7 G5 }+ Q9 t# E* A. D/ O1 _
}
9 f6 q4 Q/ E& G: c5 r //////////////////////////////////////////////////////////////////////////7 h0 Q T6 K7 D' B; B* X
//开始移动. u5 g& Y. Q" U! v7 o. U
if (nSrc == nDestPos)
6 @* L y: \3 _- E {" \" i1 k6 J) a7 J) q: X1 t
//原地不动 R4 m; S [+ R" h+ E* _/ ?2 L
nDestPos++;4 F1 g+ K/ }) q5 I3 ?
continue;( }9 I7 f0 E" |; W3 ]& J
}- ?9 Y1 V7 B9 ^
pInvSort->MoveItem(i,nDestPos);! R0 D0 s \2 K r/ O, w& Y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 ^- y/ F2 l' `$ ~1 a/ R9 [
Sleep(5); {# S3 k9 z% W, h+ t# L D4 O
//Error("移动 - %d->%d",nSrc,nDestPos);; @5 L2 k3 L. b5 ?7 y% G
nDestPos++;5 w& Q- D) p, m9 K3 X
}
# l/ w$ k# F0 i+ ^7 U& E7 c //取第一个元素的信息
: M( {6 y. f7 J% o9 `* E f /*8 p. f) A* x% H$ ]" N8 ?
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- e, ^9 K/ G8 e% Z9 P {1 I/ H$ b2 @% x4 {8 F) H2 Z: {
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 L) q! y# z5 D" e; b g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& K0 T6 Z( B7 J; v8 h8 y r
}
$ `+ A# H8 g2 ]- H( f; w */; H. j# Z" {" k& x6 I, s. f
//////////////////////////////////////////////////////////////////////////( W# l4 _$ m- q. u) a' R4 G
break;: J% z9 g! X) U$ B( Z. W
}
S# j, H5 g; J( z$ o# P0 W }
& q# ^& H8 e8 A: [4 R0 q8 n}
; t* G4 t0 N- O8 x: e qm_wndMenu.SetVisible(FALSE);1 ^' r4 { R1 j- h
5 H3 Q1 o" ]0 \ p8 F3 ?--------------------------------------------------------------------------------------------------------
: w- e' }9 a9 k! \搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
H/ T! }8 ]6 e2 | e{: v+ R+ q$ ?+ ~+ o
BaseMouseCursor();
. T. n" B; R& C$ H( [}/ ? p$ G8 T+ Q3 f w
在其下添加:& V3 } M( p/ H! f+ {$ n3 G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
b, `; O, h1 U" S& I{, Z, O5 f% k% _8 x
m_wndMenu.DeleteAllMenu();
$ U1 l% R A4 L6 z+ Km_wndMenu.CreateMenu(this);9 U q1 d' \5 b |7 L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' C4 a4 z N$ `$ g" O4 Q) _8 T( x& a5 v" d9 X$ j2 X& ~3 j2 }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 C& V4 J) _3 t( _{7 w: O7 |- r9 E" x
//P以上级别才可以删除所有道具* ~& M1 [5 R3 f- M
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 T" L$ M6 {# d& d
}$ e3 u9 X* R* a# S4 C5 ~) P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- Y. k6 R, c7 {* l% ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. F; y. }. U5 b$ T5 mm_wndMenu.SetFocus();. b. r% T c8 ?# e- K0 c4 k( |
}
2 W$ U9 ?6 s: {* V, H. M+ v------------------------------------------------------------------------------------------------------------+ q) v! {! D; i! Z1 y9 ]4 h' U
*************************
7 z1 x @5 u( {# I" fWndField.h文件0 G. z" A1 P3 ?' d
*************************
Y! u+ Y$ ? m Y0 J搜索:BOOL m_bReport;
! \- q, H$ d, ^/ f' @ e其后添加:5 \9 Y4 i5 W/ J- p& H
CWndMenu m_wndMenu;
& o) |8 Y' ]7 P" _' X9 f& Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' K0 v- A2 E1 v" h, ~
其后添加:
+ S6 W4 c* j% qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 ^) V- U) n3 M0 B, Z+ d: m# g
7 g/ M5 b: @# c& R* y2 w1 }
* Z8 N. U+ x4 `2 {6 X* }! [5 D' Q |
|