|
|
源文件中_Interface文件夹下WndField.cpp文件1 F9 z- i8 ]* f# p* u
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) X; S* @8 q4 O5 z5 p& `
& {. k2 n3 u. `8 u: r3 m) Y8 j; _struct sItem9 l' Q( M$ t: U% U- V7 ~
{. i: J6 Z8 n5 ?. |7 w1 p
DWORD dwId;2 M& e+ T( v" L0 Z; M$ g% G
DWORD dwKind2;; e1 `5 H7 w1 {( h
DWORD dwItemId;
m) G$ ~) I/ F1 ^" x/ b JBYTE nIndex;
& g; j7 }/ K7 d* s# @sItem(){4 _- i! b- R' f, ^8 G; d9 v1 R
dwId = dwKind2 = dwItemId = nIndex = 0;
- ^, L1 ?7 C1 M* V; z2 s1 ?}
$ G: R2 l0 |& r8 P x2 m/ Cbool operator < (const sItem p2), `. S, j! g; I& L
{' F- V: L4 D5 z( N: ~3 w- ^0 S
if (dwKind2 == p2.dwKind2)
7 E9 I/ }& c+ G' M) a5 ]& } {
0 O; h! W7 B1 O5 ` return dwItemId < p2.dwItemId;! c* H7 d2 d& G4 \% R
}else{
; b( A2 F3 s: A3 C, r3 l9 s8 T return dwKind2 < p2.dwKind2;
1 ]! _* U: Z) ]* u5 x }. ^, p" Q1 i4 D5 G+ m& L
}2 \- e# @5 R6 ]7 T& B& y* v9 i
};9 A3 ]" C W# ?. b) k$ P
class CInventorySort
4 w4 H7 }3 S! x" N0 ?{: ?' s3 o) J7 E/ q
public:
4 C4 n# [, q. |) A+ Z9 L7 yCInventorySort()
u: ^; R& M+ q& |# R{$ [7 ?$ V7 v) M8 q T
m_dwPos = 0;
' @; z0 v `( i}
( j# l: C, \2 X~CInventorySort(){}% N R" l2 i. L$ z
private:
f ~/ v; v% E( R& C" P5 S: SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 g3 P. ?; o+ g2 d' V! ]DWORD m_dwPos;8 ] ]0 k4 @2 A* y3 ]( u
public:
8 v9 ~- E# g4 \$ W2 S2 \void Add(BYTE nIndex)
$ [+ I' f' u# ^3 @; h' w{; ~4 l1 m- u R/ y
if (m_dwPos >= MAX_INVENTORY)
! N0 y2 { {3 H- U9 t& g% k, Q, q {4 u: z: m" `" O% s1 M' g
return;. Z/ D/ k: R- p4 F; p5 m( ]* C( N
}8 x9 T9 c3 Z, O! @
m_Item[m_dwPos].nIndex = nIndex;# f2 \% E3 j: O6 [/ B* o4 ]
m_Item[m_dwPos].dwId = m_dwPos;6 B, Q4 M" _8 e1 E! c: O- l+ r2 |
m_dwPos++;
. ^% |3 R9 D. U9 k% U* A7 c# G' \}
* j5 h. s! u3 m0 f# u( W' zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# b `4 y/ g1 y" f3 A/ J{
X* ~, j# k+ r. ]( Q$ k2 q8 Z for (int i=0;i<MAX_INVENTORY;i++)
" ~0 Z! G6 ^6 v' u8 T {9 u2 z" C7 @9 ~# m- S
if (m_Item.dwId == dwId)
: i$ N* I% F; E% B, | {
( n. R' o: Q" [1 B- I2 ^1 k6 Y6 _8 i5 q4 { return m_Item.nIndex;
" m- ?2 h. U" A% ^2 P. k( z }
" [9 b5 z" U$ v }8 M1 {2 t ^8 H9 m/ J6 y
return 255;
! S/ ?& I# T9 ]! N9 L8 s}: `( V; f1 T0 U$ B' z2 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 z" y, c5 g9 [{
- k' W6 W2 ?* ^# Y) z5 l BYTE nTmp = 0;
8 R9 {& g2 P7 l6 ]( b bool bDest = false,bSrc = false;$ u! T- w, S% d& ~% C
for (int i=0;i<MAX_INVENTORY;i++): I/ p% E3 L7 t" _9 m3 V1 j
{
* C. ~& C" v; U4 b3 l7 g if (dwSrcId == m_Item.dwId)6 j2 j6 F" x. [" m/ o( X7 G
{
8 g5 @7 T @# R' @8 D //id相等 则 改变对应的dest和src6 [& K* D/ {( j/ k$ e$ p
nTmp = m_Item.nIndex;% K% n/ B; M/ ~. j' A Z2 m
m_Item.nIndex = dest;. i; \' @8 [, K& c. Y/ |
}. _8 v% {& v: [* N9 n* f
}
2 v" b# _3 V3 c9 Q% Q& W; v //临时数据保存完毕,交换开始+ \4 k: ^* N3 W7 \) f& k
for (int i=0;i<MAX_INVENTORY;i++)( z" m( V" E* u8 c* v
{9 ~6 M) U u( c. L, v
if (dest == m_Item.nIndex)9 ~" o' l+ V% N) V) K6 N
{, I& Z# g7 `9 \: c$ s
//id相等 则 改变对应的dest和src
, w8 `9 d( _& d5 n8 }' l# a m_Item.nIndex = nTmp;7 B2 c% y3 ?& d, L1 L
}
: y8 o% n1 h7 n- B }) u( T* `% `; c1 v. g7 }
}- S- \8 ^) J; m
};7 j: n& d5 M! U# ]7 |- g+ I) ]& K
-------------------------------------------------------------------------
, j) N4 k' b# X6 b$ ]/ g8 B9 [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ b, ^/ s6 w3 X# c% D. ?6 \
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 {7 ] Z! `7 Y
紧靠其上添加:
9 u3 D: L$ a2 r' b, T* gif( pWndBase == &m_wndMenu )
- N+ h, e9 R* H: W4 x% K! r{3 Y; v. }# z, s
switch( nID )4 c, o, g7 H# S* H5 [! _
{
$ c6 p0 e x' O0 z0 x case 2:
. }- { ]8 u3 q& T# \ {
2 h! \7 M+ Y- v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* |9 q& D- w e1 ]+ w
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 H9 }2 u( G6 ?. | {
% G4 z1 t6 e* ^1 E4 X' S0 S break;" f) V, A) ?% \
}
/ q8 N2 b7 l( _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 F+ T6 h3 `1 y' F
{+ x. H1 R9 a! |. K J0 d8 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, n$ ]& J2 L% Q
if( !pItemElem )
- E% M; _9 t9 Q. Q; I6 U) ]# b continue;
: q, V4 w/ f( c if(pItemElem->GetExtra() > 0)+ I2 \% L, h/ J" m1 Y5 k; b
continue;
$ p* K w/ z: r0 B9 [( V$ u& T if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 ~; B0 x# E; G+ b. c1 B3 f6 H& n
continue;+ [: h! \; B- j% B, W9 {% S( g
if( g_pPlayer->IsUsing( pItemElem ) )% `, G1 a: R8 W( {" E+ _6 S$ u+ h
continue;. e0 U" N' l+ R, e5 t1 T
if( pItemElem->IsUndestructable() == TRUE )
8 y( I4 `1 j7 s! s, N+ } T5 q" T6 ` {9 R0 o) X3 A& H& n( X& I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ _8 T7 H& v; o) A1 {( W
continue;
6 t, n9 h0 `3 F }: P/ M. \8 N/ Z" W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 p8 g2 J6 k) f t' |2 C' P
}
/ g! p' O: n3 _6 L3 ^, Z break;
& Q! \( N( H) i }% n9 x$ m6 P# G
case 1:
7 D2 `* X7 H* V1 F( q {
0 D5 [8 f, N# q" G( }2 I4 ^ r //整理背包4 `: l4 L- @% I2 f# ?; s
//////////////////////////////////////////////////////////////////////////+ a# t* e3 [* i+ T+ c5 F
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 w6 F9 U1 n# Y //////////////////////////////////////////////////////////////////////////9 _. T- T" f- p6 L# c
//////////////////////////////////////////////////////////////////////////! K f9 l% B. D. B( z1 g
CInventorySort* pInvSort = new CInventorySort;, C# i/ ], M# q' G2 B0 F
vector <sItem> vItem;- [+ r; t$ ^. {) M$ N" I
vItem.resize(MAX_INVENTORY);//初始化大小" [, Z# X9 [0 o; E2 f2 d
//////////////////////////////////////////////////////////////////////////" c+ e8 `7 S" e4 t4 x! i- W% C
//填充数据
' [+ r2 D% Q& m c2 M. h# [ for (int i=0;i<MAX_INVENTORY;i++)
% }# O. z0 f+ ~) y7 {5 X& i {8 F. B* }- m/ {" f, g: R' V2 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# ], h* x; j8 C- o$ _# Z4 `9 ]; L
if (!pItemElem)
; @1 j: C4 L, S2 V, ?1 C* `, E9 r {
, i+ ? Y$ a, Y+ a vItem.dwKind2 = 0xffffffff;
/ c' S' M& s9 g; }7 \4 U3 N vItem.dwItemId = 0xffffffff;) Q' o8 E2 ^& R8 ]' }+ K
vItem.nIndex = i;! M6 s) a0 @* _+ ]6 S( o
}else { m& a: i: w& z* w
ItemProp* pProp = pItemElem->GetProp();$ o# O' Q2 m* I8 _3 h5 Z: {
vItem.dwKind2 = pProp->dwItemKind2;+ x+ k+ P; ^$ O# [* {0 G" y
vItem.dwItemId = pItemElem->m_dwItemId;
- c% D: z! N9 S2 S6 w# P6 q7 c vItem.nIndex = i;
8 w. M3 I' Y$ j1 U7 D8 u) T }
) C8 }& D1 v7 h- r8 c( ^ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* \7 a* P( v" U }
- c( V$ a2 f+ [# L c" r //////////////////////////////////////////////////////////////////////////! e$ W# j$ y+ G. m
sort(vItem.begin(),vItem.end());//排序
7 T0 I5 f: r! U. u4 ]6 l( f: y0 C //////////////////////////////////////////////////////////////////////////
3 V( P+ T, g6 L9 r: n0 g //交换
- }6 W7 P Z8 J! z2 I8 a% n2 J: D for (size_t i=0;i<vItem.size();i++)
& ^! r7 w4 A1 P: Q4 ~ {) c3 k0 g( ?% Y1 n+ M
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 {) z4 u* a3 k- H7 o
pInvSort->Add(vItem.nIndex);, h: S1 B2 o: }9 E/ R
}4 Z$ Y3 o" C$ @* X8 x
BYTE nDestPos = 0;% ?7 i6 p8 @ t# V2 ^# E* i _
for (int i=0;i<MAX_INVENTORY;i++)8 Q4 s. ~9 u0 h: I. z: V2 A
{: A! A4 E4 G- n' E- K, {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 {1 g6 K. P8 u" S
if (pItemElem)6 W3 ?4 M- ` Y3 _, }% j) r
{
+ t+ I4 |; U3 }8 b$ U O if (IsUsingItem(pItemElem))
/ F; n R' C/ A! j: p- q {5 Y7 z' |. h k2 r
//这个位置无法放
- [5 e. H% @1 Z' _, C% b+ a8 L nDestPos++;! l* S% N$ H) n: g9 E
}
; n A+ b, V; ^ w }0 C: b- I0 Q, @, [4 |2 ^. H, h
BYTE nSrc = pInvSort->GetItemSrc(i);
! G+ r: m+ {' S pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 f- A, s6 B3 }8 R
if (pItemElem)+ K% `& @" J- \2 q# R- A) t
{
( ?7 x ^! b2 X- S6 q if (IsUsingItem(pItemElem)): x: W d6 @0 d: ^
{
# i5 k. z. j/ C //这个道具无法移动,跳过9 ?2 p# u# `, u8 i+ j ~7 ~
continue;. S2 z, R/ e9 d4 U: t
} b' C3 Y0 `4 n. l+ G! z
}else{
: P! _7 p5 U! S/ Z //空位置 不用动) ^$ ?! v/ t% j F) Y# D4 x( L
continue;# @8 N' J( }8 _3 N
}! W; P0 F0 }. W, a& O5 U- X
//////////////////////////////////////////////////////////////////////////9 x p6 I! ?/ s: E0 P% @
//开始移动4 d3 b* |3 s& s
if (nSrc == nDestPos)
! N9 T' ^6 V3 c) Z2 t# y {
% ]5 G/ T, j0 K# w# V) u: C+ J //原地不动6 }% X4 d5 P3 b
nDestPos++;; w% a; b2 n5 g& `+ q
continue;4 n: X1 m5 Q) c ^! c
}# k$ i; L: r# s1 U
pInvSort->MoveItem(i,nDestPos);
! C- }- L0 L) X g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 j5 ]9 m' [6 ~6 s5 j! _9 F
Sleep(5);/ ~3 c$ g) y& b3 e. U* }
//Error("移动 - %d->%d",nSrc,nDestPos);6 O. o$ T; P; j, P' L: i% b3 D2 }
nDestPos++;
3 ?) n# M. C) z2 C j) n5 f K5 r9 Y }
0 w! f8 C# G h) n# k' n //取第一个元素的信息/ p$ u+ r; T; _
/*
1 h" r( X" N; [. } if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 T3 A4 v- W2 j {/ C1 t) n! o# [: Q$ O8 ~( T! ?9 x: g
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 |; X5 Y) n. u. U2 P/ @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 ^4 r' q4 u" R; ^2 x }: T; V/ e6 x% Y: k: E, c
*/# x( O: T( l3 G. L* _
//////////////////////////////////////////////////////////////////////////& g4 j* K+ i; H$ @! ?! j$ Q
break;
; U% X. t2 l" } }" K5 i' [, r; X H
} % Y" [9 c0 x7 s. m! h+ o
}
9 R; X! X5 n- R* J" g# r7 K8 Vm_wndMenu.SetVisible(FALSE);% `4 L8 d: E5 f; @/ F$ U" ~
/ Z& F V- t8 }1 h5 V
--------------------------------------------------------------------------------------------------------3 d+ ?7 K1 b7 G6 o2 x9 d$ I
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ p- U2 W$ f5 [& F{4 y+ F. |% ]) E9 i& `% l* W
BaseMouseCursor();
, ^% Y4 x7 W6 R, ?$ j}
- ^$ [3 t2 O$ t5 i0 m6 @在其下添加:2 n" m# r r4 U' X: S* ]! i) n
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- {% G) E4 I! T* ^; c: N0 o5 I, f{
$ C8 G+ Z5 K* w+ ~( Um_wndMenu.DeleteAllMenu(); F d! Z8 C" H5 H5 I
m_wndMenu.CreateMenu(this);$ j# D% }2 B. r1 z+ m7 g$ m
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ z. }; [/ v1 @- I7 {7 M V8 l, C& L
/ T$ j6 b/ M4 u* S* P) G2 wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): C" W+ `6 B4 G* W3 P" A% N
{
6 b6 [8 v a' j1 y: p0 F, Z //P以上级别才可以删除所有道具
5 a+ a! [" ^) b: R3 j5 ]% k9 L0 t6 C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, A/ }7 n+ N* h9 z+ M5 U+ G}
4 U+ }4 y6 K# C( Z! pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) Z8 r/ j9 n* k# z& ]! Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 k/ o' {; Y6 G3 t1 p* c! cm_wndMenu.SetFocus();/ N+ ~7 Y* N1 F+ X1 Y( H
}# U. R$ Z$ y& t
------------------------------------------------------------------------------------------------------------7 v5 ]. ?- N' J e
*************************3 r0 O5 B! s4 a0 h( z' B
WndField.h文件
; A0 U2 o( F, E! g5 C% h3 b% c*************************- F' q& J8 [; a( U7 o- h
搜索:BOOL m_bReport;
+ h9 ]6 z! l3 B$ W其后添加:
- B- T# V @8 ^& O3 v2 RCWndMenu m_wndMenu;
1 S9 s6 @5 V3 q) x( Z2 Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 _3 a# p" q1 ?- o* l: Y其后添加:' ?$ k4 [" g4 X d. J% I
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 h, C8 E/ ~9 |# p9 r
' d& L- s4 Y+ c. [7 l+ ?4 F
7 F$ Q; C% |0 [- L3 c* }2 L" e: N |
|