|
|
源文件中_Interface文件夹下WndField.cpp文件
+ j3 `) M, q7 o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( F# e# j w9 {5 l$ n8 Z5 k* ~* q% e3 J+ N7 S; K( }
struct sItem
. g9 B* r6 c- a' \/ e0 j% e{
' N5 Y* I; a4 n$ ?% Z$ r+ S( aDWORD dwId;( |. N; }( m2 f8 U* E
DWORD dwKind2;
: M l7 i1 C0 q; f. `) V! ^DWORD dwItemId;8 s# {) D+ J6 o! s- W
BYTE nIndex;7 f) K' t' h3 [
sItem(){5 I. k" I' x) v9 d+ d; r5 B
dwId = dwKind2 = dwItemId = nIndex = 0;
* C l' M% _3 r0 @}2 u$ R! a# W1 d
bool operator < (const sItem p2)
" [: m) `! [# c% x9 P{3 X, x: U ]$ l0 o/ S
if (dwKind2 == p2.dwKind2)
9 |, _1 v( h. o |# x {
1 s! u% e2 Z* H9 q return dwItemId < p2.dwItemId;. ~! U$ ?3 S- @) r: E
}else{+ {+ r. \* Q" g
return dwKind2 < p2.dwKind2;
) N$ V3 P) h8 h' G5 A6 k; M/ m' s }
( m! _ W' G% a, s}9 c R& F9 E/ Q5 U. P
};
. f G7 a8 x/ e6 P7 E, Rclass CInventorySort( O# x$ M: \, x0 ]! d- |: W! L6 z
{
% Z, x \1 [# |. E) |public:1 O% G- s3 S5 r7 s3 Y7 v5 u% T
CInventorySort()
: X2 T9 S- {7 w% k{& g$ H' ~8 M+ a! G
m_dwPos = 0;! n4 G9 y, I6 \/ X3 g
}5 a; W# L# ?. Z! z" f3 k# \
~CInventorySort(){}) m' ~6 ~& e9 S2 b7 J2 y9 Y
private:
' N. }- K$ ~# dsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ J9 r9 U9 @3 h* s( s
DWORD m_dwPos; h* c4 b$ l: q# C1 j/ |
public:% g" E0 N. S/ {
void Add(BYTE nIndex)4 t6 O$ F; v2 d4 T
{
0 H3 r# g7 B" c+ x, y- L if (m_dwPos >= MAX_INVENTORY)
6 M& M: _( o r" J {# ^. Z/ ?+ A5 i7 |: i% {2 [" r
return;
7 Z3 U& h/ ~. ` ~5 o+ Q }
! V" {, r& E% h8 L% ~ m_Item[m_dwPos].nIndex = nIndex;! J, p9 t/ m. ^# F! [. E ^
m_Item[m_dwPos].dwId = m_dwPos;
+ e, P1 Z9 Q/ Y# Z: a) \/ Q) E( R m_dwPos++;
, o5 x) P$ |; s) a}7 y" r. b' U$ ]' U+ K# ?; _
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: ?5 A$ [2 I, T {0 B; A- y{) Z) l# I1 t& [1 J9 H6 B' M2 K
for (int i=0;i<MAX_INVENTORY;i++)6 [0 [, B. @/ n4 }7 ]% M' m3 d
{
y7 h6 V6 m- X1 e' U7 Z9 j+ d' C if (m_Item.dwId == dwId)
: c% R, L H9 `* ?4 l- u {# X; o& {6 M' b! B) w2 Z) ?
return m_Item.nIndex;
6 T1 n! _) g4 ]- t2 ?: d- u- J }
& T. `3 L& }1 V4 Q }6 R3 k- s! T8 B5 i, L
return 255;
6 ^6 H3 e* n3 S# v. e5 V/ n}4 D0 v7 o+ h1 l) U
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: |/ Y# _) z5 Q{3 h$ L' I) X" l) K& d8 m
BYTE nTmp = 0;
1 c; y2 M* z: @8 u7 p! n. I. a bool bDest = false,bSrc = false;
2 U5 [1 p, ]" @! x9 H& F3 b for (int i=0;i<MAX_INVENTORY;i++)+ J6 B3 g+ ^6 V2 ^9 L5 G/ X
{2 s5 V, l0 J, K ^- ^" {' u' I6 u
if (dwSrcId == m_Item.dwId)
3 ~5 P0 c* c1 `" y {
, ~! Q0 b3 h \# C% j+ F* b" I //id相等 则 改变对应的dest和src
, [5 C! g' Q4 f nTmp = m_Item.nIndex;1 x: K' ^4 j2 M t; U8 j
m_Item.nIndex = dest;
. H% A, e, o7 M8 G* o$ `0 G }
& T- _' @7 o( ?& M. e4 y; \, e7 R8 V5 \ }' R0 E: O/ v; O
//临时数据保存完毕,交换开始
2 r& A( V% U# h3 g& Z( _* J7 f for (int i=0;i<MAX_INVENTORY;i++)) m: O3 |& m3 {4 i2 L1 i
{
_ u' O1 p; F% w% z+ J8 i/ C4 G if (dest == m_Item.nIndex)
* G7 }7 i$ U! V+ d {9 ?: x0 Q+ B6 Y. m; ]
//id相等 则 改变对应的dest和src
' Y4 v& h, X+ w; M/ L) \5 S m_Item.nIndex = nTmp;6 s' [, }% s: b) t
}. i, W# C; p0 X" J% v
}% Y0 U5 Y1 S5 q2 g$ b+ ]. n
}4 L6 K, \- S' N
};
$ m" ]" p8 U8 \& _- n# z2 z5 ?-------------------------------------------------------------------------
. c) w* U) X$ l# t7 e2 R7 L; x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 `% w7 T7 n' M" T( o: X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 A! Z# W: c+ u! L1 O* @4 y
紧靠其上添加:
* T2 `/ S0 T2 `7 x9 O" A/ E' Aif( pWndBase == &m_wndMenu )" w. d6 ]( K* z# C. S, `
{
* l v/ W$ E0 s. x1 c2 O5 C) M switch( nID )
) N) a% f" ^$ n- F) L {
' t3 X; Q$ y: t% u" G case 2:5 Q: M }& A) P3 U
{. W. a: n9 s5 V1 a) z. G. A G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 i, A/ Y0 O, l. p$ X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) T7 f; T8 k' w7 V
{
; q- e' m- v4 q" H break;& r+ F* f/ {" n* o0 ]
}7 ~# T- ~; q h
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: }" ^! S/ J3 p$ @( k( G {
6 S' T3 }2 ~$ b! Q; p* E& B! A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 }! u! r) R4 K2 } k0 P& U/ k
if( !pItemElem )& N% ]# ~, v3 {# x5 C- ]
continue;
5 M4 k% }$ s# F' [4 Y' [ if(pItemElem->GetExtra() > 0)
0 M- ~7 a o. ^9 U continue;9 w) O9 Z$ k4 r- `$ d: J& P$ [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 e! c: g8 F r& [4 l, O3 v
continue;9 |7 l4 z `. n: G0 {5 e
if( g_pPlayer->IsUsing( pItemElem ) )+ \8 g. o+ {6 U4 i
continue;+ D1 W5 c/ E, u
if( pItemElem->IsUndestructable() == TRUE )
2 h* X- g9 u. I {# T3 U2 J' f T, q9 `0 R+ i1 T
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. t8 _" ~3 t& y2 R/ O
continue;* x+ Y! e+ }' w
}9 K9 r& s6 s# f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' ^. u% d7 l# N& w& e+ t }. P* n+ o( H) A1 L% H
break;
9 B0 y! H* ]/ ^ L9 H; N }0 Q0 {, h4 W+ P6 J7 T- T a/ g. [8 |
case 1:8 N7 i/ |; S5 n
{
# M$ L/ v+ Y- A, k //整理背包
7 V. a6 `5 a0 B. a2 | //////////////////////////////////////////////////////////////////////////- v' z. O; d8 U) \# Y& k
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ t* P8 @+ m- u //////////////////////////////////////////////////////////////////////////6 [& e( a5 `- e l: p7 Q4 t4 R% Z
//////////////////////////////////////////////////////////////////////////
- Y! R% P- s7 @# t' z8 d2 H* L CInventorySort* pInvSort = new CInventorySort;0 ~# A3 v, u2 o3 P- I `# u
vector <sItem> vItem;
# j" z6 f4 Z- _) {6 P W vItem.resize(MAX_INVENTORY);//初始化大小
0 O) S1 U( n% \/ m: E& Y //////////////////////////////////////////////////////////////////////////& J9 R+ C) @5 k1 I) t1 u
//填充数据* C. v* h: D9 U. Y* q& F' \
for (int i=0;i<MAX_INVENTORY;i++)
1 ?) V( ]' N: f4 e' \6 p2 \# w {. k) n: C! k" Y/ [1 c6 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ c9 n: S7 L. m8 Y- C4 Z- _3 ]
if (!pItemElem)
# ?5 Z# U( T9 F/ F {3 C# ^3 [! { O6 Q) t, ]
vItem.dwKind2 = 0xffffffff;+ W' p+ ~+ X% W5 R
vItem.dwItemId = 0xffffffff;
j, K( A* O3 s& h/ [6 _' f vItem.nIndex = i;
. T* w( ]! e6 t" I, n/ w8 c* t }else {
6 q( f9 M5 n$ U& G' w8 d ItemProp* pProp = pItemElem->GetProp();
6 M) P' n. o) n9 r vItem.dwKind2 = pProp->dwItemKind2;
4 Z. \# K% b6 Z3 {+ v' H vItem.dwItemId = pItemElem->m_dwItemId;
6 ]6 x. m, L6 m; j7 m9 l! e vItem.nIndex = i;7 ~/ K; Z( {! ~# h; @2 [
}
" x$ j' g7 [8 [, h: z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% h. b: d) T! d& k+ ? }: ~; a& `- o9 ~" H! g% Z" Q
//////////////////////////////////////////////////////////////////////////
5 _9 c% O0 h6 z) X sort(vItem.begin(),vItem.end());//排序, Q$ [2 f0 J/ r. ]* S1 f1 E3 S
//////////////////////////////////////////////////////////////////////////
% ?6 O8 L, T$ p% }9 G6 e B //交换8 O: v, B3 G9 b
for (size_t i=0;i<vItem.size();i++), i4 u7 k% f$ S* E! p5 T. G/ `; Z4 `
{9 A4 f* e- ~7 i4 C. S6 a! z' W
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ s4 ]4 U9 d' i6 }, V, e pInvSort->Add(vItem.nIndex);5 a/ B" Q& V- m* P0 c7 \
}
- Y% g3 g% w# X, T" T, V# J5 d BYTE nDestPos = 0;
& x+ m2 g! }$ i& F for (int i=0;i<MAX_INVENTORY;i++)9 l3 W- j+ s) f: `) `* }
{; V8 A, L- M" {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ r5 v8 \+ r( f, J
if (pItemElem)
7 b3 S+ a. }. D! ^8 R+ I6 x {
' K0 l2 c$ I- G if (IsUsingItem(pItemElem))0 X8 \% H. E6 R; x& R% V# T* M
{
6 w2 k `; i7 D) D0 N# Y7 ^& f: |0 H //这个位置无法放
$ d* g& V1 _" R- K nDestPos++;6 S- R# q3 S: \* u- ~; N, _
}
9 R/ p# A4 Q4 O4 _) j! W/ [- L" M% r }3 Z8 z S7 h) z: W! p/ j
BYTE nSrc = pInvSort->GetItemSrc(i);
; U" u9 A2 e- g, Q" Y, t1 E1 S pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 y5 v: K b/ m. R if (pItemElem)! Y4 _ O! T4 }4 N
{
) M0 `7 s$ z5 r6 g if (IsUsingItem(pItemElem))
/ r; v- T- f0 ~. q/ x$ c {
! f5 z* _9 C& I- ?, v$ G4 I: o //这个道具无法移动,跳过: k' c3 M6 g$ l- n3 X
continue;, J6 d- W: p- K$ \4 Z1 W0 [
}3 o {; K" p( D: q! D
}else{
$ j& B. E% K4 M4 j1 L- s: v8 F //空位置 不用动8 N/ {2 Q9 T- y* I0 m( @
continue;
5 U, a$ S- q" f! z }
: N: P, f; U& O5 ^" } //////////////////////////////////////////////////////////////////////////# ?5 |9 E, r, k& S8 i. e
//开始移动: w# ~4 a! r5 e. S& a. q* ?7 N( X
if (nSrc == nDestPos)$ t: \6 r$ j8 o0 z
{2 [; R0 W8 H0 {7 P i3 i' J
//原地不动" S2 K# G' z G5 [; G
nDestPos++;
# Z3 H& I7 |0 b. h7 ^4 U continue;2 q/ B9 M' E5 y& w" ? F G
}
0 U# D* k/ ?- d8 ~0 ] pInvSort->MoveItem(i,nDestPos);
C# p/ N& x* F) Y2 e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
m/ g3 a( k% U0 @& E/ v- X Sleep(5);
+ k8 u1 T/ G, x) B' U# r //Error("移动 - %d->%d",nSrc,nDestPos);
& @4 J* [9 U q8 ]( ? nDestPos++;
2 P9 F2 \- o6 f3 R0 S }3 t/ @4 W+ n& L: z! o+ f
//取第一个元素的信息; w; c0 D2 F2 D
/*+ }- { f; w6 O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' G4 ]+ x9 J# k+ ?
{' K9 B% ?0 ~8 V9 P
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: r+ ~/ D; r+ O- c5 d! y* v) L# c- j# n& L g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 D" E- k/ t4 A2 N* _: a/ N
}
, ?3 t' W2 `" d5 [ */( E7 @5 R% z: t
//////////////////////////////////////////////////////////////////////////6 b7 _' |; Y0 O8 Y- S9 \
break;3 s" M" g- |6 f) m6 i! x. M
}$ d9 u4 }$ F: `9 \- q R ^- i# B7 C
}
5 \ R* ^% e |& v, K. t}
: r6 B' d& j! D2 ^5 im_wndMenu.SetVisible(FALSE);* i- j9 y* R- Q0 F
$ R3 f2 ]/ j: Z--------------------------------------------------------------------------------------------------------
: e6 q8 _ `+ p4 U) Q+ Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, A) |$ l0 S# h2 K7 S9 z{0 M; m* S2 M8 f- q5 q# t
BaseMouseCursor();1 I% l" C3 P$ p8 y3 Z
}$ B0 W/ m3 C9 i) D0 ]/ N
在其下添加:: m0 x5 q5 F4 A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); Y% r* g) v2 ?9 O. U# K: X
{
2 ~7 I# C' e9 f' d3 Qm_wndMenu.DeleteAllMenu();" U- Q0 D ]/ W! A
m_wndMenu.CreateMenu(this);
3 y" q v3 e, hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); D9 b' I7 V0 \+ M6 Z2 R+ t* f
$ E4 B4 q7 h# m0 @ T; Iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& M/ q; d) R/ c" y% a. \; s G5 d{6 D" I) s4 D- [+ P8 ?
//P以上级别才可以删除所有道具, e4 W/ P' Z" y4 Q2 i! r, f$ M3 S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ Y- c) C) b6 j% F% c3 i# p}
( L+ N3 x% i1 J+ l: f: @& ~/ Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ d$ B% A8 D& y% k0 M) a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ l. N) q- q/ `+ b0 J- \
m_wndMenu.SetFocus();
( f" {' l6 j; Z) P: P' D}
[! w2 n* b! D; N: j------------------------------------------------------------------------------------------------------------( b, F# c; K- z* z/ M* j
*************************: M9 f% D; e" ?. V B' j
WndField.h文件" z; x9 A4 \& [" j3 P* H
*************************0 }6 \* q" P r1 }- ?( J" Y4 q" }) X' t
搜索:BOOL m_bReport;
" `( I+ r6 K7 t( H- A其后添加:
1 }+ l# P9 z( V0 Z# ^3 uCWndMenu m_wndMenu;( F! m+ n& \$ e1 H- e( O5 W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) l9 ?& K8 t* {7 M6 E, |+ `" E
其后添加:
* M! M2 ~9 B6 E" r6 r' n- I4 @virtual void OnRButtonUp(UINT nFlags, CPoint point);
! m- v1 }" _7 |; }, f9 i: Y; ?6 S+ y( r/ E# b
7 z+ M! t5 N+ ^# _) d8 W+ \
|
|