|
|
源文件中_Interface文件夹下WndField.cpp文件: m8 P9 b5 j6 G% h! n e/ |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' F& {) G% d7 R9 \0 g: r" o5 o, d$ y4 o% y% S9 f
struct sItem
4 b* f/ K1 w6 E7 u Z* E2 G{
2 M2 K, H$ Q3 e B* NDWORD dwId;
1 @# p$ z4 j zDWORD dwKind2;
D5 c4 ]+ f. gDWORD dwItemId;6 W( H3 ^0 B' e6 i$ D' C- t
BYTE nIndex;2 d0 r! l4 r o5 {
sItem(){
$ w8 t# C) Q/ t' u: Z! {) H4 P dwId = dwKind2 = dwItemId = nIndex = 0;
# m; _3 u% G* i2 `( P& y" f C# [}
( M" F0 O3 }2 W: ? ~8 ]% Ibool operator < (const sItem p2)
+ I, F+ |( m: o0 I{
. M) q, I E" D0 W1 ^' u if (dwKind2 == p2.dwKind2): N9 [- a) S( v9 H
{9 k8 w4 y+ M" `
return dwItemId < p2.dwItemId;
! r4 K; n) n- W1 F }else{' j+ _7 n! I. I4 u: t) h% _
return dwKind2 < p2.dwKind2;
! E' [6 n7 c; d" k, }& O }, r. p5 t3 O7 Y" n' A2 w; W
}+ C. v" X7 ]! D
};
; z7 t% T5 d# r( I" sclass CInventorySort
- y w; ] f7 X{
* w# V Y) G* ^5 \3 A Epublic:
6 U/ {$ \9 B0 }5 V8 y+ NCInventorySort()% _1 Z- I( i8 F0 z" A
{8 I, Y' o/ x2 _" V- h
m_dwPos = 0;! z, ~3 c- T# u
}
6 z4 S. N6 f/ o, [6 ^; e4 Q8 F~CInventorySort(){}
9 O0 i& ]0 P: ?5 z! U3 K1 N, i4 qprivate:
; Z! G5 M' x- X. {4 C% q6 f5 E! K* JsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. P1 \) o5 q) ?- K$ ]DWORD m_dwPos;
2 {) B! J8 Z# d. ^: kpublic:
8 ~4 {+ Q1 @, f7 Y) _) w( c" `void Add(BYTE nIndex)) V/ P. N. `3 l% R1 o
{" Y, N& a' e7 D" i
if (m_dwPos >= MAX_INVENTORY)
! E) A0 p- ^, e {
; a3 H) x! u9 [) u return;
9 A# {! a0 O, o; s5 u1 ?4 H }& a4 S, v p# f) i& w; f" Z! `
m_Item[m_dwPos].nIndex = nIndex;
2 e* [6 B3 |9 T. ]+ M m_Item[m_dwPos].dwId = m_dwPos;
& Q$ C( f2 _, k: {; J% R m_dwPos++;: R: }3 {. \7 ?) S* o2 r; L
}
3 r8 i+ ?( C8 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# d$ s- H' \. L# ^3 X4 w( s
{; s( K, F4 l4 C/ r" H
for (int i=0;i<MAX_INVENTORY;i++)
0 S5 k- P' m) c6 e; o. G {
! p9 z+ A: @% h- \ if (m_Item.dwId == dwId)
* N; n# X V K3 S9 C# K, { {" \5 p3 ]+ U1 S9 ]1 ]4 O- q
return m_Item.nIndex;( U; M9 r$ {: U
}# ^, L& J D8 M/ e! ~* ^
}6 R) y) B; A0 a9 {" N+ l& B
return 255;
& ~4 e U5 f6 e! H}
+ B( C) K2 C" C+ W9 _ Ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 R( X) y, t7 e- C{
5 ^3 y4 q7 E/ M/ j: E' l ?5 h' f& b BYTE nTmp = 0;
K# W v* ?& z+ e bool bDest = false,bSrc = false;
) C. M- r7 J' Z' K" A. x3 M! ? for (int i=0;i<MAX_INVENTORY;i++)5 [# ] r' i- [& v
{
" [0 ?! t2 L3 D/ | if (dwSrcId == m_Item.dwId)5 X: V) [ G' m) |
{
8 d$ F" B4 X4 T4 _* y, r$ a* ?/ C7 Y //id相等 则 改变对应的dest和src: t. E; v4 e9 B! r9 @ A8 d8 K
nTmp = m_Item.nIndex; u. M$ T- Q$ J/ P) x2 c2 {
m_Item.nIndex = dest;! ?2 c* j4 G% C( f
}5 \; D. j+ {& y7 M; t' ]
}3 _; K. y9 D* ~7 G2 _
//临时数据保存完毕,交换开始
1 b$ p$ y# w2 } for (int i=0;i<MAX_INVENTORY;i++)
; y4 j) M4 A: c {9 g2 [" H3 c9 C2 U
if (dest == m_Item.nIndex)
) V$ f3 t( i% }/ v+ B, q& L+ z {+ ]" R6 [! `6 a" V E8 |3 T) K
//id相等 则 改变对应的dest和src; _5 F) ^8 F5 ?/ ?; j
m_Item.nIndex = nTmp;
F; @* E* Q1 x* B% D/ G- V7 } }
& ~8 ~6 t' j) K }3 W8 Z0 K0 B1 E, v' V
}
6 Z' T0 G4 A G( H) R0 d};% G2 [8 G. Q* C2 H
-------------------------------------------------------------------------1 M9 Y" h6 p+ t/ `% Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" d+ D: i) o& p: @) ?2 U+ @) S1 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; U: W* R, L1 D; Z
紧靠其上添加:/ V' a: m) y% J8 h
if( pWndBase == &m_wndMenu )( h6 g1 E/ o, N8 C% Z
{
! b. B/ t3 g y' a/ J, V switch( nID )
- F- D7 i& t; V6 ` {$ C0 s/ C! c) E
case 2:
3 F0 K7 p+ H7 V% ^3 K4 I {
8 i; r/ c& X/ S- g/ v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 v0 a- m+ J9 z9 D2 ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! l/ P* Z; S. ?8 q4 K/ ?5 v
{
5 T' S2 Q- q$ z) Y0 Z2 [ break;
- Q% N& S) Y) n2 O; A( O7 G3 \0 p4 q }+ N, _! D9 T1 z9 {! g
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ |) Z9 M, s" E% r6 d3 M+ p
{
/ C, }: D1 ?. y5 C* N$ Y1 g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* ?9 x- {* d3 @! C. |3 V4 M
if( !pItemElem )
2 h1 M. M8 u( Q6 V. A) U* B/ H continue;
* j1 u3 b8 D' b if(pItemElem->GetExtra() > 0)0 x/ i! U" K% a
continue; K+ H( G# m9 s
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 e' I* {/ s# l1 F continue;
' p5 S/ n- s$ p9 b1 d if( g_pPlayer->IsUsing( pItemElem ) )' L+ a% O! s- x7 h
continue;( {1 p- l" r3 J. z' T, V+ N
if( pItemElem->IsUndestructable() == TRUE )2 M" a% u4 S, w4 Q& i0 i
{
- n7 m" n( h% Y# l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 e/ e" Q9 u/ V
continue;; F% u S4 G/ I5 Q4 ^( p4 r
}6 |" I2 v( b1 }1 I8 x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 D: S4 v' L; t( t4 Y
}
# i1 N; W0 I1 j; b* q( W8 ^4 W break;
, G" C; V; r$ U }
, r2 G4 h( |3 A# U. O case 1:
: k$ H- V3 |; B9 |% c {
! H/ r1 C X# V* n1 H8 n' E //整理背包2 Q: o+ M- \, l q6 A& U4 o& {
//////////////////////////////////////////////////////////////////////////
/ N/ G" z) x: l4 S //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
i5 \; ?8 k; V% t6 V ~! c/ v7 y //////////////////////////////////////////////////////////////////////////
. k q: a2 ~8 E" ^# b //////////////////////////////////////////////////////////////////////////
2 S4 {* t7 Q. J z CInventorySort* pInvSort = new CInventorySort;6 w* Y* Z8 y/ U- S
vector <sItem> vItem;
5 k. Z! t) Q" ~/ } vItem.resize(MAX_INVENTORY);//初始化大小
% b7 _* f* y* Q7 l2 v //////////////////////////////////////////////////////////////////////////# q, n" c8 k( R8 m
//填充数据, ^, A1 Q2 ]+ [
for (int i=0;i<MAX_INVENTORY;i++)) B K8 k( t) o D
{
! V Y, C' l9 S7 \( `! W! n. v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); O7 ~9 }% z# f3 S; J
if (!pItemElem)/ A6 e+ b7 y' u. y% ]
{
( _8 c7 L" x& ?+ S vItem.dwKind2 = 0xffffffff;
3 ^3 m7 {6 D0 t vItem.dwItemId = 0xffffffff; ?4 Q( q$ u5 t6 ?" j9 b) ?
vItem.nIndex = i;
+ B# h9 ^; ` _0 n9 \4 | }else {& X/ W$ Q, w1 a
ItemProp* pProp = pItemElem->GetProp();
' [5 l( _ L# G vItem.dwKind2 = pProp->dwItemKind2;
4 E3 x! |$ C& z% y& q0 I vItem.dwItemId = pItemElem->m_dwItemId;
8 G8 c: x- S( T8 i2 a1 ^9 K vItem.nIndex = i;
: T" \( y# o8 @# V" z }
5 n* Q; `0 f" G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. Y, j7 D( i' C \0 I9 C
}
9 F3 ~, V# N! o' ?7 t! [ //////////////////////////////////////////////////////////////////////////. S0 L( d: g# z; ~
sort(vItem.begin(),vItem.end());//排序
0 h/ r& f" S6 F d6 } //////////////////////////////////////////////////////////////////////////7 E u9 I4 `2 h& x/ U- z
//交换1 y$ U8 L3 q& \6 h# K
for (size_t i=0;i<vItem.size();i++)5 r) D% V1 l) ^2 T6 m. Y. @
{
, ~. T; \. k4 v4 b; f7 Y' c //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' J& K& U% K! k. M- G' z0 y! P/ k) T
pInvSort->Add(vItem.nIndex);" C' ?3 _6 a( Q6 q1 L" e" l
}
- N) ~. E b- N: Z# d3 ] BYTE nDestPos = 0;
R" N% x' E! M8 R# c1 H. x; N for (int i=0;i<MAX_INVENTORY;i++)
; m7 u. M5 A* o& a. e' ?- E0 T {$ |9 h: H' j# H' D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 {; L7 d& M. @5 M, U* F# q: g& x
if (pItemElem)
; E( M2 b& h7 `% i9 T% `1 ]! }& b {
' j( o2 s3 R% {' S; F7 G4 t0 n if (IsUsingItem(pItemElem))
. A6 C8 T0 h- ^, d- T0 t" X! `) Y {
$ b" c V! s7 I' t //这个位置无法放
7 ~0 Y3 w4 q$ z6 i! X nDestPos++;# L$ Q D2 Q4 X" S" n
}! c; y4 d: G/ E! G6 ]. m. c% D) Q
}" [5 C6 `, P/ o* L
BYTE nSrc = pInvSort->GetItemSrc(i);0 g# p" o: t: s' K8 |$ L
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( G+ f9 c) i' M. B% ? y if (pItemElem)
: K* z3 r3 ~6 |/ _5 a9 d8 ] {; A. I/ d& h- B3 n% U
if (IsUsingItem(pItemElem))0 T+ ]: A A" T& U Q
{, f& Z: Y8 l7 e+ j; z
//这个道具无法移动,跳过
+ |0 [; w. K: r9 Q9 ~, ` continue;
' F# J" Z1 O* q9 g0 T% u5 t }
4 ~$ E% e9 r1 @' K! r7 ` }else{& h, C( }8 X# i2 m |, h1 H
//空位置 不用动
t# v: w q6 m: Q" b. I1 d continue;* o; u, O! z, r3 g* P/ N3 s+ z. R
}
+ b# }- d; q3 c. b, r) P //////////////////////////////////////////////////////////////////////////& @3 T' n }6 N2 N0 r
//开始移动
1 J p h: q/ Y# m if (nSrc == nDestPos)
+ y1 F, G) X' ~ {
8 C/ I* }' h, Z0 E" U* B1 g //原地不动, M; h' s8 ]6 I. ~
nDestPos++;( Y2 \4 [! G- u: E; V, B" q: E
continue;- o0 c3 `/ o0 G+ g) S8 q- b6 ^0 K
}
9 R% R4 t7 E6 B- w# q6 \ pInvSort->MoveItem(i,nDestPos);
5 }8 F C* n3 L& {) L% V g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" O7 z" V& ^% B! \$ a9 g Sleep(5);: L6 b' O3 }& S; F
//Error("移动 - %d->%d",nSrc,nDestPos);! K- f. X; ~! V
nDestPos++;* B3 { y1 F I# _/ x1 k
}
7 N: G1 L {, c, {$ x //取第一个元素的信息
! l1 c+ ]" u* h3 @1 e5 J H /*
% @% T4 o% ]7 Q% M/ T. r2 ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 |$ X9 z9 G) B3 _/ j) g {
/ ^% _- B9 V8 `+ L Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 A6 N+ L+ I% m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, \; M: Y' ^2 o# D }& O1 ]( t4 |# h) z5 N- G
*/
2 Y M0 m4 ?; R //////////////////////////////////////////////////////////////////////////, w8 \' v* g5 Z# D* a! p$ N2 [
break;3 |9 I+ ?/ q5 d/ h
}( j% n+ i4 l/ @& F" m4 s
} # ~6 h1 l& `, L% R8 p, N+ m
}, o7 m& N) \1 ^. S
m_wndMenu.SetVisible(FALSE);& q' _+ F0 ~5 a+ F x( d: g. h0 T
2 V5 }+ } M [ s9 a--------------------------------------------------------------------------------------------------------" h* V2 Z6 g0 S& ^' K- k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). R; K) S. u- R( J9 O
{7 p/ {1 O8 a" s. f2 d8 f
BaseMouseCursor();9 F0 Y k- [2 P1 P/ d9 n8 A
}5 W; k4 d; _- H1 I; j* r% [; X
在其下添加:; {1 @0 D, B! E( ]9 L$ C( J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 A) m2 W4 M, a2 O8 v
{- L x: Q1 @1 C
m_wndMenu.DeleteAllMenu();1 |1 N/ W* z* ~, e* y5 z) ?
m_wndMenu.CreateMenu(this);
; C/ ?7 ^" s/ H4 [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 G% S& H! ~8 d; q% ^! D5 e- O" p
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# i! x/ v7 d; T, @% ]1 w/ Y
{* M; I" p3 B& J" r, u% v! k
//P以上级别才可以删除所有道具1 N+ \. z3 [' b
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& E% Q6 u2 ?# K2 B. ?" x}* f- {; _5 r2 {# Z5 W. J5 q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
j1 i- D4 A( n4 qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 O7 ?% r6 n1 _m_wndMenu.SetFocus();# L, h+ N4 O# O
}
1 J4 F9 ~( B" E/ W, |------------------------------------------------------------------------------------------------------------
. W/ t+ H7 S0 j4 c4 X% f*************************
/ w* M- {7 C S0 K1 ?: ]WndField.h文件# z% e% |( S9 l( O
*************************: S4 _& j) e% ^- Y4 G3 [, [
搜索:BOOL m_bReport;
' E$ w0 K) f/ x) C9 ~其后添加:5 ]! X/ \# \7 j2 L9 t+ B
CWndMenu m_wndMenu;. S* L$ z1 `0 W* Y$ e3 x9 p
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. v3 K3 D) }7 ^: X; N9 p+ @
其后添加:
- J% I& b# B" F0 @- Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
' s$ D1 J) O& p! T3 B$ ?
* X, J! g' h" M8 W* | A8 W" J& M" y* z. E: L$ T
|
|