|
|
源文件中_Interface文件夹下WndField.cpp文件% ^) |; B( L7 P0 G' k6 F" U0 L2 z3 T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 p( p8 T/ }% T9 _: G. w4 C/ j) `: e3 h$ _, Q) t
struct sItem, \# E' P: d/ b$ E( e% T
{3 ]$ Z6 |, s7 k+ q$ K$ w
DWORD dwId;
* ^) e* ]: c8 l; H5 _9 dDWORD dwKind2;
: o% T. E/ Y+ f: k# e0 u# |DWORD dwItemId;; _' d' p& L5 s9 P' U: T
BYTE nIndex;
: z9 T ~- g- \# o/ M, IsItem(){, z& S. p* {4 {% L2 U
dwId = dwKind2 = dwItemId = nIndex = 0;( W) G( a* L% N& g
}
' X! X* g/ V0 N+ pbool operator < (const sItem p2)
/ P: H" D, u& F' W0 L0 u{
, D! a: b5 B4 O5 y& y if (dwKind2 == p2.dwKind2)
+ R! N0 v9 |+ O; V" C& A- K' M {
7 x9 }) u' ~) P; Y return dwItemId < p2.dwItemId;
1 ^* s" v" d. p }else{. B* `) Y) M- r( d% ~ ` n
return dwKind2 < p2.dwKind2;. v( p5 D* O: G) n) S; @
}. {! ]& E; i$ K/ L6 Z: j
}/ u0 g7 F8 |! I" y
};
A9 `+ J! O2 Z7 i3 [class CInventorySort1 C5 Q) b/ n) z1 t! |+ u3 T1 g
{" D( j4 U4 k# C B
public:
5 L( B, T8 ?+ p$ LCInventorySort()! u. P) {) K/ ~: j& j
{/ Z" E. h" y8 E; F( V
m_dwPos = 0;/ f( O7 `' m- g7 T
}% y* p9 ]+ ~ K' [
~CInventorySort(){}$ u* q2 }6 d; @+ d" A0 G0 i1 A7 i
private:
* Z- D0 j# _( d. Y; XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 @) {% y4 Y! K: n Q4 J- x
DWORD m_dwPos;
, p' e" Q/ n; O1 y# }8 x' hpublic:
# c( O& B. w" L' D: t7 Rvoid Add(BYTE nIndex)
: n: h6 x& s& [/ k7 p{
( A0 c! C- C! y. e/ a7 m if (m_dwPos >= MAX_INVENTORY)
& {5 g$ c" I8 ^+ S, V$ d {
" t' a! n4 H/ k8 ?' N return;
2 ^& s) ` H/ k/ j# [1 c0 Z$ H* u }0 h6 B- C2 R/ p, u# _! b* d% v
m_Item[m_dwPos].nIndex = nIndex;& ]: N. O! f" O9 ?# [! x
m_Item[m_dwPos].dwId = m_dwPos;
. E" T8 ]: }$ B( e m_dwPos++;
7 ~0 p1 X! U' g4 `+ s: R}% `1 ?* r" c: ~* W5 c# k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* t+ t0 J+ z) @4 t H" z{8 Q, _ \/ g1 M
for (int i=0;i<MAX_INVENTORY;i++)5 ^7 @7 ? V( q9 o
{0 V% q( W' t. a/ F V* r
if (m_Item.dwId == dwId)
( D& o' |/ \' [! H6 O {
8 i2 x4 t% K* C return m_Item.nIndex;" ]1 t" m2 [6 J2 i0 Y
}: I$ C$ Y, r3 m" F2 y+ j2 h8 }
}. C; p) H6 Z% u: z6 s6 f; ^9 J
return 255;! B, U) K9 L1 g M
}! C8 x& a6 t- L3 ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 K, I* p; X. c
{% H, c: [( x: l- _6 |- `
BYTE nTmp = 0;
1 d" s' R7 r' b1 h* M; i% ~! i, K bool bDest = false,bSrc = false;& ~0 J1 W g9 v! Q2 b! f- x9 _
for (int i=0;i<MAX_INVENTORY;i++)) R$ F1 U: ~" I ?7 f7 @7 L( d
{$ F1 v' E3 V3 e! J2 Z# `
if (dwSrcId == m_Item.dwId)
, O. ?- K; N) h% X {8 p1 E- X X3 ^
//id相等 则 改变对应的dest和src
) {8 p7 g/ Z/ d3 ~ nTmp = m_Item.nIndex;, ?/ ~) W% E7 R% t5 ?
m_Item.nIndex = dest;1 [1 S4 X: [( V$ }5 j
}
5 a& r5 ]; H) H' V% Y P; K }: O+ C) b: p8 M2 I
//临时数据保存完毕,交换开始; k5 M1 V# Z# v& d6 f
for (int i=0;i<MAX_INVENTORY;i++), V6 L& e& e$ U) x3 d
{
: c! b: R" L+ l I( P! K2 U. z" W if (dest == m_Item.nIndex)
3 ~1 M* n; B- l2 G, X) t {
. E1 Z6 n6 n0 f9 W) J, J4 w* k) p //id相等 则 改变对应的dest和src ^& f: ~8 u0 `
m_Item.nIndex = nTmp;" x$ C, ]3 Q4 F: \- z
}
: U% K3 T8 Q; G6 @/ q }
4 V6 N: I7 C6 G: w! @} d! B% h# v/ C5 s. P* c
};, i3 Z4 y8 `+ ~+ g) o9 |8 U% \
-------------------------------------------------------------------------
, \0 W' d1 ^" o; Z, H P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 {9 R! Q7 i' V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' {2 E s: S& i$ s5 K+ _/ s' N
紧靠其上添加:# [# g, H: b* N9 G
if( pWndBase == &m_wndMenu )
7 x2 u0 V9 Q6 ?$ B{
_* _3 X. @ J3 g6 i/ | switch( nID )3 r+ K, @, M& g+ P3 y% L5 J7 S
{
* d7 w! Z% E5 C; q% L: w( B! i case 2:
0 ?6 q+ h+ e/ ]' V& w; x {
8 l3 q1 O4 Q) k$ V# t6 G' s- X' y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ q* b c: r$ J# c% v0 }" v, C2 t7 u* X) Q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 x( D7 j" m9 j* [$ H# ]: t% I {
5 L; W* l* D' U5 A4 u. ?) h& ] break;
) W; Y, r; ^1 ~0 O) ^+ z! D }
7 L- Q# D" s& J: r: r% E8 W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 l a: P0 m" l5 S0 T {1 ^7 } c; N0 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 P% m! E! ?, C2 ~9 V8 I& Y2 K if( !pItemElem )
' i: H% \9 C y1 L7 y' Z. n continue;% ]9 Y9 x. l0 W( h) w
if(pItemElem->GetExtra() > 0)& Q; g$ |% H' z' }5 c$ J; C
continue;
( z [) B+ T, x! N- M if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 H' Q- ?6 c: ]% I9 O continue;
+ n+ a5 { P. l9 a- a' R% { if( g_pPlayer->IsUsing( pItemElem ) )8 e! @3 h8 K' W" ~+ ?
continue;; w4 y5 W0 H3 a$ Q Z
if( pItemElem->IsUndestructable() == TRUE )3 Y# ]( G( p* w. S" x
{/ G9 \' ^" {6 Z" Q% X
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( v/ x) B- a, m7 X- T( |# ~
continue;
0 P( w2 K, W( `& C$ H6 u! w$ W }$ r8 }. O/ J- T# }" u7 a& p2 l
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 @9 a+ O8 ] u
}
- a8 Q& q( w+ p. f break;1 ^6 n! A# k' D/ I! _7 g
}
8 x' [( G. g& y! X; w, W case 1:% p& b9 s0 a9 A, I: U9 B* i8 |
{$ b; g" {# O3 {0 B# r+ N6 h
//整理背包3 @, E8 \* X* x( g; S! V
//////////////////////////////////////////////////////////////////////////
" Y+ c" ^; U: {! J! e# @/ T# [ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 q5 I* L% P2 }( L
////////////////////////////////////////////////////////////////////////// Q$ V% v7 {4 }$ ]& u. N
//////////////////////////////////////////////////////////////////////////5 ]- l7 |% U( U, Z; I# d
CInventorySort* pInvSort = new CInventorySort;8 Y9 O* ]* c- a6 i4 v* P" M; Y( T/ y
vector <sItem> vItem;* M3 ^6 g5 a' Y& U
vItem.resize(MAX_INVENTORY);//初始化大小$ q) r4 s9 ?! h# @
//////////////////////////////////////////////////////////////////////////9 K8 p# u4 H" Q: t) h/ Q+ T7 R$ E
//填充数据! {9 R4 o; \6 ~0 z* Y
for (int i=0;i<MAX_INVENTORY;i++)0 ^- ?4 B/ o9 P/ b& n" W
{
% [4 W; p5 o8 S# a. A. |, a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 t' F, q/ d1 h8 E) W0 j if (!pItemElem)" ?% {1 W! _: i. h
{, D! E5 a& {1 l# R
vItem.dwKind2 = 0xffffffff;
, }7 H$ G7 C2 x; q vItem.dwItemId = 0xffffffff;
! T: G/ x/ c. d vItem.nIndex = i;0 C6 v( o5 {9 L
}else {
: v+ I# D. f8 e+ C. Q$ Y% a `& i0 @6 J ItemProp* pProp = pItemElem->GetProp();
' U5 T/ M; A( `" H$ r7 K vItem.dwKind2 = pProp->dwItemKind2;
7 _: D' \$ e8 R" Q5 Q. ?' l vItem.dwItemId = pItemElem->m_dwItemId;' v Y1 e) L9 f( s( ]* ~
vItem.nIndex = i;
+ ^' r ~( [( e$ q }
2 }; W f. y( a% { //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 Q7 m6 P E* D) F+ H }
7 P4 ]1 D7 y! T0 i ////////////////////////////////////////////////////////////////////////// f# F8 Q. f: e4 J% T( s
sort(vItem.begin(),vItem.end());//排序2 R x/ A, A: c7 z8 {
//////////////////////////////////////////////////////////////////////////
; T. u6 r+ A) ` //交换7 h% `9 j% J+ w
for (size_t i=0;i<vItem.size();i++)# }+ ]. \+ `: N0 M8 M4 e+ t
{: Q( W" P0 m1 ^6 J
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& H: B( Q$ ~% G& _2 o pInvSort->Add(vItem.nIndex);
6 S6 N0 D7 d; v: O) V7 l }! |* V2 n4 F/ |8 N
BYTE nDestPos = 0;
/ K& q. \4 y9 U+ o$ U, C for (int i=0;i<MAX_INVENTORY;i++)- Y( c. T4 A7 [9 s
{8 M# U8 c) O' p7 [ P4 }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ a+ L7 T0 w& y
if (pItemElem)( `7 _5 T; E9 t: k* c3 u/ T! ]! T
{2 |& Q6 M$ e9 V/ O* t- E
if (IsUsingItem(pItemElem))
6 }. F% _- v+ C {0 `& L: L% j8 \7 U( P9 y/ ^+ A" B
//这个位置无法放
. J7 v" C. l6 k, Y3 W C nDestPos++;
8 x' `: Y8 \& f/ _" X. ] }7 `7 K1 C4 v. R8 u |
}
$ O% e% n' c5 a0 R4 m BYTE nSrc = pInvSort->GetItemSrc(i);, Y4 G3 _5 d. x1 h" K. ?, y$ k, s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 F: h$ f5 L9 Y& a# s9 G5 f if (pItemElem)" ]1 J8 i* A/ U2 C' a8 A
{
; x* A3 {, C3 Y. G0 U if (IsUsingItem(pItemElem))2 u6 O$ x5 A+ F. g) n* e3 N6 m
{
: X; H( i" y+ ]) S% ^# _+ p3 c //这个道具无法移动,跳过
9 u" k$ d7 G$ b# d continue;# `; y) z9 Y. o
}
2 ?! k8 k0 R* C O/ L5 ]* L }else{
* K$ s5 y. x( \2 |- b) Y9 n) {7 L+ Y3 e //空位置 不用动
& T) ~. P9 M! \ B! X- d continue;
9 X- ^- l* ?" W }$ {& [6 v+ A% T! w
//////////////////////////////////////////////////////////////////////////
/ f) }3 I6 I; r: B% S //开始移动) x1 W* h0 f7 w
if (nSrc == nDestPos)! R* d$ F, V% G
{7 G9 b9 E2 ~3 E/ D# J& F+ I, k" w1 S
//原地不动5 C" Z4 S% u# g3 M8 V2 y
nDestPos++;! e# V2 p& f" k4 ^
continue;
9 F' z+ C- x# @! C; m( p0 y }5 V3 t" @7 e( I' u7 p
pInvSort->MoveItem(i,nDestPos);
; R# h5 T' l" l" Q g_DPlay.SendMoveItem(0,nSrc,nDestPos);) b6 g) N2 w5 G: P! E
Sleep(5);
1 K4 a. Q' h7 d! G //Error("移动 - %d->%d",nSrc,nDestPos);& I3 D! O# I9 Q& |% a8 l
nDestPos++;' s8 s5 o9 Q/ f3 R
}
* v1 z5 _: Y0 S* N% P6 Y //取第一个元素的信息* b0 W2 b9 ]/ Y4 u0 w) F' g
/*
N: ~$ S! @% A) n1 z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* |& W2 b9 ^9 I, D0 V6 t6 m {% j! i2 m6 v2 Y; |
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: F8 M3 j7 W; V% I5 H& P! Z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; w9 ^. K7 h% Z+ r }
9 \7 u7 S+ |6 X4 o Z# { */8 ~" u* q# V* h
//////////////////////////////////////////////////////////////////////////
1 H, f3 V/ q: j% ?+ X! Z break;% `, B- H- W. i* r# C: q
}
9 K! s, _+ t4 n) j- g }
* X% K* Z0 z2 V8 E1 a: D}' D( t X9 l5 Y8 _
m_wndMenu.SetVisible(FALSE);
1 D, a0 W- i! T$ k$ ^4 y1 `* t2 ]/ T1 |
--------------------------------------------------------------------------------------------------------
/ ^ e' L, I' K4 N/ Z2 ^搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 [+ E9 ^) W) Q{2 s) b, z. F: y9 Z M- A4 J
BaseMouseCursor();
" D$ g: \6 ?; u: Y9 _}
' @1 W) w0 o5 u5 e( x3 G9 U) x在其下添加:# h3 ]7 X: H3 j9 X( t! F9 x# [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). V9 P6 v8 l Y' X7 W% v( U" P
{, e3 |2 n$ w1 ?/ {1 G9 |- Y* p
m_wndMenu.DeleteAllMenu();* ? J" z0 `& o: Q4 w- x- Q2 g
m_wndMenu.CreateMenu(this);! y4 q- G& I4 N4 u( a: z8 m' S* c8 q& g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 M: E0 \% j4 z
( T. E }5 r( z% S( ?if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); n: b6 f$ h' [4 @* i6 q/ ?4 ~! ~
{: q9 c2 ^% ^# w4 H: j
//P以上级别才可以删除所有道具2 j% K" l: ?* }+ o( ^
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! p3 h0 ~7 m8 r x! K
}
* t- q2 V }& C tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 w# s( J: Q L1 Z, h+ Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 S( ]& a9 L7 qm_wndMenu.SetFocus();
1 t' Z1 K& r. m) h0 k}! Z, P2 e* ~4 d+ D, W; C
------------------------------------------------------------------------------------------------------------
3 ^! K8 _3 ~1 K4 W; j9 o% X*************************- l# x% [5 v! n1 o
WndField.h文件% a8 k$ |; E. h! E9 ]7 F, ?
*************************+ a( n! T. `5 G. U
搜索:BOOL m_bReport;
0 K8 W; N4 G( y" V2 k其后添加: z9 }8 \, | Z' w6 E* I
CWndMenu m_wndMenu;
' W( g! j" }( u搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 [7 w9 x9 ^. }" u) f其后添加:' P6 L( ]4 z. _
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ v/ q$ s* ?: s, z$ l# e0 o! G
- G7 W# h) J- t3 G
0 n! `; @: F( o# r' f! y2 `6 P
|
|