|
|
源文件中_Interface文件夹下WndField.cpp文件+ k6 }$ |, L0 r" r+ P$ v
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# [8 u4 ~+ b7 ]3 f( I
8 k5 P* P4 J, K# g$ jstruct sItem% m$ c& [* v+ g4 n6 E1 m1 z4 d
{
, f" z4 M. K- d! [, kDWORD dwId;
% |7 Y$ M, T0 `" b/ tDWORD dwKind2;
! f$ F" Z4 Y0 ~# d- u& ]DWORD dwItemId;
: B1 D) L& g( g# G* jBYTE nIndex;
) X! b8 l) I4 x4 F% f/ asItem(){
1 A# c1 b6 j2 H/ z/ s9 ? dwId = dwKind2 = dwItemId = nIndex = 0;
% G+ [4 m8 ?; }9 k4 B/ {' q1 E}5 ^& H, {, [! S o, C2 n, A. w+ s2 p
bool operator < (const sItem p2)
3 f/ G; E- J" K! M' K0 a7 j{
8 w2 G# l# M( z2 f1 x0 p if (dwKind2 == p2.dwKind2)0 }* w6 ^6 I2 N( C' z; R) {
{
* H: w* ^! H# C3 U5 N return dwItemId < p2.dwItemId; \1 \' e2 M( ^4 H
}else{- H1 W; X1 p: f
return dwKind2 < p2.dwKind2;
O4 _% X: s, R6 N- x+ k5 I }+ [- ^( ^6 x. a( T- ?9 w
}9 O% {! M. y4 `1 }2 |
};
* C! f! b P( U3 M3 Dclass CInventorySort" r' N- n& _9 Y
{
- e0 W& x! U, y( xpublic:2 a; i v$ Q) M* G7 C" v6 r) r
CInventorySort(): i, G0 @2 w% ]% S6 O# Z0 Q
{+ N, B8 D9 B% }( C% B% O
m_dwPos = 0;: k8 M; {0 c1 f/ | S7 a/ Z; H
} K. e B0 F1 g* P6 `
~CInventorySort(){}
" t+ x0 a" q3 w* z- Pprivate:
" H$ E. y& E7 u# N" w% d4 WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ c z1 N6 d) g1 l
DWORD m_dwPos;6 ?; u2 l1 E+ e y7 q
public:' g1 y1 ?2 _0 n, Q Z F
void Add(BYTE nIndex)
# T$ v! D% e1 _ A* |) Y5 j4 g( r6 t{# Z( x, _: l! j$ U9 A) a
if (m_dwPos >= MAX_INVENTORY)
/ c2 B$ p4 [% Z9 Q) i {+ h6 d) ?7 F2 E, T, ` @) R
return;: k4 J; I& Q7 {0 k7 D0 S: P2 d( P* X
}- f7 C# U4 h8 ]* {; B) {
m_Item[m_dwPos].nIndex = nIndex;. j( j: ^, N7 {* E1 m. J) n# y
m_Item[m_dwPos].dwId = m_dwPos;3 z A, w t& w- T) v
m_dwPos++;3 w2 o2 k: u2 G0 H, N* l% `
}
1 p! I. s; `7 [- ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, M3 F# w0 X* i5 R( q; j! r" P
{
- I5 [# Z3 H# ~ for (int i=0;i<MAX_INVENTORY;i++)0 @4 f& v' U! ^6 Y6 B0 W
{1 W& O0 q* L0 D; t3 U
if (m_Item.dwId == dwId)
: r! R, u2 e: C9 ^8 [* t" g {0 v1 T) a! v, K2 H% o* A
return m_Item.nIndex;3 `- g6 }9 L( B V! L2 ]% D
}
@0 f& r& O% F4 c: _ I }
[- J H7 G, @3 P return 255;
* c: I# s$ [( S}0 c( m4 T; }' k! P* x$ m# n, D' X, ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. r: H1 T) l7 k" j{3 ^! d, l* d/ X9 c8 w3 @
BYTE nTmp = 0;
; e+ s8 [) U2 \1 T8 _ f bool bDest = false,bSrc = false;
1 [8 f2 k7 Q/ x1 Q for (int i=0;i<MAX_INVENTORY;i++)! T$ }1 I3 K* B* U+ `
{
( X$ Z$ o5 z4 j$ ^" u if (dwSrcId == m_Item.dwId)
/ j3 J, ^& {+ w* m {7 f9 b/ K) _- G: v2 E( h
//id相等 则 改变对应的dest和src
; [ Y" g/ W0 v Y2 f+ ~( W nTmp = m_Item.nIndex;, \ o6 d. H, ^8 J* T6 t; r- C
m_Item.nIndex = dest;
5 A1 T) u/ M3 M8 N4 j5 J' ?2 Z& t }
) L( R5 ^0 y% H! ]- E }
7 k4 M% Y) A1 G, H- Y //临时数据保存完毕,交换开始
9 o2 s: c$ N6 ]$ L5 Y$ Q$ n# J1 _. z for (int i=0;i<MAX_INVENTORY;i++)
! k* _& ~* R$ |0 [5 b. B5 i {) U$ K( ]8 L8 `; |1 L/ u, B+ |
if (dest == m_Item.nIndex): N! K& T$ k/ g
{
, t, ]( N2 H6 i& D j" Y) b. q: \ //id相等 则 改变对应的dest和src
! @# j$ E6 l0 X5 L% b: Q1 L& T m_Item.nIndex = nTmp;# P7 Q* f& p; t. @5 K" M. b: m
}" Z8 r& t: Y0 `" m* ^* m
}
' O) M2 X' l1 V! b+ H/ h: A}
% [5 d% e9 w$ `8 N: e7 ^# K6 W};3 r6 t- k5 `. D( z: n* [
-------------------------------------------------------------------------4 J3 P( Q7 I' N* t. f5 Q( P4 f5 Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& W y4 X$ I# U9 }% \
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 j6 V, p' f6 }; q( k- L紧靠其上添加:
% r" E2 Z& n3 _6 s% Nif( pWndBase == &m_wndMenu )
2 B7 a) C3 T$ o/ [3 A/ n$ O{6 e% S* Q* o: D6 I1 G
switch( nID ), ?( z4 M% t% [* F7 q( N- _. i
{
% w" {$ I/ k* p- j case 2:+ ^: ^; j5 F8 v, M3 l+ Z
{
- W; x# k S' J @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 n8 y! i$ U& o& B$ t* O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 }# T: Q4 H: n
{4 H/ }5 L C3 L0 F; D
break;
/ p# S% \, R* B$ ]/ } }
: D3 J# ?9 s2 E9 D3 x% z m# S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ |; Y9 ^9 p. {* W5 q& n9 M
{2 a6 I! H* d# Z. [+ ?+ |, {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ i% W, f+ T+ o- S2 N if( !pItemElem )
% f# T; o( @: T+ Y5 E continue;
7 [' S4 L' e6 g& \7 {: }8 M( F; h if(pItemElem->GetExtra() > 0)0 A6 i9 O+ a5 F
continue;3 I3 I- _' q3 T; S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' v9 ]$ ~4 D, T4 G5 n
continue;
, u+ c. @: J8 T if( g_pPlayer->IsUsing( pItemElem ) )
5 D; c" u; o/ l continue;
8 p' v" i5 W0 b1 ^8 g if( pItemElem->IsUndestructable() == TRUE )+ A! \0 t6 k P
{. G* F" R4 s5 ?$ J; o
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 P5 u Y4 W! h* E1 W0 E
continue;4 }* O1 a }# v5 z+ Q5 n3 k5 ]
}% X- Y; [7 s# |+ F3 ~8 p, t( I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 K6 f5 f, S, I5 n1 r5 ^
}
; V4 x1 V- q; {! h, e7 v7 S5 E; S break; `( C; I) J2 P7 ^! H0 G+ C' l, q/ G" s
}9 u& D; h* E" A* J
case 1:! H* K9 p/ Z, W* L
{
0 s8 Y- ?# ^3 f0 C //整理背包& ?4 E1 H& [8 y! x. U0 l/ ^
//////////////////////////////////////////////////////////////////////////
, i! F, z; L% b* c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" _( F8 m8 [" K4 k4 S u //////////////////////////////////////////////////////////////////////////
2 o' @4 |6 m/ D( _: ^5 ] //////////////////////////////////////////////////////////////////////////
$ q9 E* e/ ~5 B8 W0 ] CInventorySort* pInvSort = new CInventorySort;
4 W5 R+ a5 h% J+ } vector <sItem> vItem;
+ L) e6 y9 k; L vItem.resize(MAX_INVENTORY);//初始化大小: B6 L1 {, D2 m$ u9 v) a
//////////////////////////////////////////////////////////////////////////
( K. a* T6 I3 C" d: d& [ n) V1 v //填充数据+ \! [* \8 Y. U6 I
for (int i=0;i<MAX_INVENTORY;i++)
H6 y6 n; N6 P( @+ f/ c {
+ u7 {3 P; x( e; Z: v0 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); N1 I/ S8 F- Y" d6 t' r1 F
if (!pItemElem)0 X+ g- {7 P% S5 f' s, I6 }
{
4 [ f2 U& c& `, S, R. | vItem.dwKind2 = 0xffffffff;" O S& @/ H) U
vItem.dwItemId = 0xffffffff;' k& l3 y4 m6 Q) d
vItem.nIndex = i;
, h" V/ t! e2 E ^ }else {/ J$ M C+ Q4 v+ t! G
ItemProp* pProp = pItemElem->GetProp();
, {! A5 G( y( J+ Z4 E vItem.dwKind2 = pProp->dwItemKind2;; `, ^% D* i! n. ~5 \, p2 Z
vItem.dwItemId = pItemElem->m_dwItemId;6 }& P& q: ^$ x
vItem.nIndex = i;) [1 n# N/ K, D2 Q* _+ A0 u. L
}
/ R2 Q+ m) [+ d3 |1 G. `& R //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
G; o' O* q4 C% Z% K$ |, K }
6 z8 a% \# }" L. C. t7 p //////////////////////////////////////////////////////////////////////////( D& T5 ?) U. o
sort(vItem.begin(),vItem.end());//排序& z% L- W/ T+ y" E
//////////////////////////////////////////////////////////////////////////
' y( }2 |7 s9 e! g4 K //交换# Q9 ^) h" g2 n3 A# M N9 @
for (size_t i=0;i<vItem.size();i++)) V0 `" I; w+ ^: j
{6 b: V j; J5 L6 T
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! o2 R8 I/ _8 K7 d# e/ m pInvSort->Add(vItem.nIndex);
3 T* L0 G7 Q$ b4 P& k4 r: J. ~% f }
' V- Y3 ^7 W& d Y( r BYTE nDestPos = 0;
+ r+ L( d: Q3 K& ~9 _ for (int i=0;i<MAX_INVENTORY;i++)6 k9 ]9 T5 J7 v& z! p( [. ]6 u9 ^
{7 T% E1 P( G1 _$ d4 i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 ^: `$ `% D/ g0 H7 t4 R if (pItemElem)! _% C- m" Q8 I
{# s$ t" [$ \6 M* W8 N7 r+ L5 s3 t
if (IsUsingItem(pItemElem)). R1 d6 l# N1 d1 j4 Q$ ?. K
{* {; q* V: R0 s) n: v# F
//这个位置无法放
4 }6 P/ `2 D# h9 r$ k2 \ nDestPos++;
( y2 \& i! O5 a, {3 l }% Y" @5 b2 Y L+ R) @+ D
}
/ n3 e9 J4 @1 C7 u( D( g BYTE nSrc = pInvSort->GetItemSrc(i);% d. L" w" u" X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' P6 A4 _% f4 p0 b* V4 A$ h if (pItemElem)
' i/ j# u1 b2 v4 } H8 w {
: Z7 v6 a) W1 a$ [0 y if (IsUsingItem(pItemElem))
! U* m- P7 u& r {
' r: X+ E9 X& n; e; ? //这个道具无法移动,跳过
7 V& u2 Q! Z' ?: V continue;
5 n O& W9 d9 D# s6 \4 D ~, O }
& |" z1 x9 Q8 f/ Z& ?- W }else{( _- @5 d2 ^1 f3 }
//空位置 不用动
) r& k( ]7 p0 ]0 J! p) R6 l5 ~* B continue;. H+ O* }: [- d# e' V
}
) g0 ~4 ]/ U8 I2 Z4 Z& K O+ B- Q //////////////////////////////////////////////////////////////////////////
5 e. \# g- ?" g7 J/ T z //开始移动& w8 o6 M" J; v, m" @3 L
if (nSrc == nDestPos)
9 n1 U0 h% ^: h6 p {
7 |/ O5 C2 w- R" A% t/ S //原地不动: }$ M- X; q; E7 D8 S% S
nDestPos++;* K# B" P% x' e2 [2 x
continue;8 ?. v1 x# S, |! |# }2 H
}$ Z/ x' C, G3 [3 ^ S
pInvSort->MoveItem(i,nDestPos);
/ @5 n( b- d7 l7 w2 V, H m" i/ R k g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) z- u- M t% r5 ^4 }* W- X Sleep(5);, u! h9 m9 y7 ?6 l6 u2 L% S- O3 v
//Error("移动 - %d->%d",nSrc,nDestPos);
* K: ^1 c9 K) P; o nDestPos++;% j2 v& D# w, F8 R/ N
}
9 n- G$ q7 h; f$ r4 P //取第一个元素的信息/ a: T& \1 `! q& q6 }9 Y
/*
) Y7 n( B8 B! k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 t2 S9 G& N# K% d# Y6 M2 D {; t, ]" N) T5 d1 E! T( C* }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 V) d: S1 z* y- M) T; L g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' c; X1 \; X0 m* ], |/ R- [
}
, |; F) Q+ C2 M4 ~' [% Q7 ~ */
3 `; Z& \* r8 _ //////////////////////////////////////////////////////////////////////////* n5 W8 h) h% \: Z+ w
break;# U: o6 W B1 G) d( g X( J
}& \2 I7 K& i! t% z: }' w
} 7 d5 U+ |6 d6 D3 |! q/ g
}) u5 z' `5 Z0 p0 p: X8 ^
m_wndMenu.SetVisible(FALSE);
9 S* ~" J' ^5 m. C5 I5 A& n e
+ D* n5 Q/ p' i6 E4 M: ^' k--------------------------------------------------------------------------------------------------------! [4 }5 M# f. U1 U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 l& x- D+ \% `* C% y{
' ]( ~0 }' ]6 G5 \) [8 O3 ZBaseMouseCursor();, \9 m3 q8 _; R' [: j( ?1 U
}
& K9 P; j% y' \! S在其下添加:) y5 A; o( x6 j, T7 u
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ i3 U: R |' K4 f0 B
{6 U2 c6 ]- }1 p8 p2 E1 N
m_wndMenu.DeleteAllMenu();
, E9 A& w n+ tm_wndMenu.CreateMenu(this);, W- l6 M$ B5 @9 s8 a7 N C- f" D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 K& V A/ X& A7 `
6 `7 ]* V6 b- G% R l. b l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; o! s2 r" c* {; E{
7 t& c" N1 U, S //P以上级别才可以删除所有道具* v$ d$ x" \3 ]6 D" t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ [# s, l' ]" D. J Z2 R8 K7 Z% U- @}5 C9 |8 @( g0 S4 r/ N U8 o
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); K+ C7 ?- [( U* p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 u5 R0 d& `& [
m_wndMenu.SetFocus();
1 _5 c7 X2 h3 X% G}2 p7 j' X4 {( _) S, g2 h7 B/ L( _
------------------------------------------------------------------------------------------------------------4 i1 ]6 A& W# _- o: i( J# n* K4 i5 U
*************************
! H& s2 D7 r" \$ D3 E% ]WndField.h文件
" x% X8 d7 Z# K# d*************************1 r3 F, i2 S" Q# H3 e
搜索:BOOL m_bReport;# U' a. [* K7 V# r
其后添加:9 F" S {1 s0 ~$ P! ^
CWndMenu m_wndMenu;0 A6 U8 K2 ^' ?6 c/ b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) R8 P% J ]# R6 N+ a: J其后添加:: D1 L# N5 C' { h. D+ M
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 M& G" G0 i% {7 b4 ~
1 y( @* ^: ^8 m' s( E
" ^3 Q( c) {* e% u% a# |7 m |
|