|
|
源文件中_Interface文件夹下WndField.cpp文件! K/ x; x8 ~' C, n7 u1 q5 [7 H6 h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% V) [) b, |" }" G
' P- P( r, r# N1 ^2 z
struct sItem' g+ R) N- ]2 J$ n: G
{
5 K# B* I- q9 z1 i, @8 n" ?9 UDWORD dwId;
% Y$ B0 D& M9 B3 P3 ~) i/ r9 y6 n/ Y5 ADWORD dwKind2;
$ Y/ k& p& g6 P" r$ U0 r1 g6 bDWORD dwItemId;* u% ?: F9 y/ b; ^# Z/ M
BYTE nIndex;2 H% i& L5 b. c5 ?" r
sItem(){
6 y: D' f ~/ O( ^0 `3 `( ^ dwId = dwKind2 = dwItemId = nIndex = 0;
# m/ `+ M; g- @3 y8 s: \}# g3 S% B1 ]2 \: q
bool operator < (const sItem p2)* \7 Q1 V: a, w2 I6 J
{+ Q) U! b4 H- F
if (dwKind2 == p2.dwKind2)0 A1 x! ^$ o$ Q1 s
{2 Q1 n6 e# ~' A) r Z; u
return dwItemId < p2.dwItemId;
. O( e2 ?. x+ e9 m3 [ }else{# ?/ v% l: X( X. r- ?* ]! M* x
return dwKind2 < p2.dwKind2;1 G: I5 X, I; i: A
}
4 q7 I8 ?1 D) Y4 j- d. u}
_( [" {& g0 z. n7 d. a};
- d; J$ M3 c8 E$ bclass CInventorySort- N5 l' t5 ^1 h$ |
{+ ]' q# V& D, J0 s& U/ [
public:
& L; d0 J. k% S6 m5 lCInventorySort()
2 q$ @$ @% J0 g, [{4 y' I* J; H ?3 V/ [
m_dwPos = 0;0 u4 o9 F9 t/ Z4 V! C2 I4 e
}- ~& {. z2 X7 t3 {* v1 D
~CInventorySort(){}5 l+ B+ t7 ~4 I7 T5 j
private:, D; h$ T5 B" r8 P% T( I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* q: q4 X+ i; o) V# ~4 a; F
DWORD m_dwPos;
3 k0 ?8 ~1 J& K r2 O; q% L7 n- `public:' y7 L* s# F# m5 S) n( I# e$ @
void Add(BYTE nIndex)
; k& y4 ^6 A- K9 k; n{
# { h% e4 v( ]/ J3 V if (m_dwPos >= MAX_INVENTORY)
3 N% I$ y8 U1 k) W5 M1 V {/ x. B. H, e5 [' _5 m# U4 P- H
return;6 w. C, v! W& p0 Y6 ?* _' m1 i! i
}
3 {! O2 l" j9 _$ w2 J1 T0 d m_Item[m_dwPos].nIndex = nIndex;
1 q: S+ T2 ]9 F1 l0 b# |( q9 Y m_Item[m_dwPos].dwId = m_dwPos;
. ?1 w3 z$ B, h1 m s8 d m_dwPos++;
% o, ^3 I, ^8 E8 g R: p& g}
$ t% z+ f5 p/ b) qBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 y& {& ?7 Z' x( T( _# E7 x
{; D& _; h6 \# x/ f$ i |5 Q
for (int i=0;i<MAX_INVENTORY;i++)
. d1 @& N0 R: r1 x% W" g' ~1 J {
2 y" F! k- [* c, S" D/ |$ c. I if (m_Item.dwId == dwId)$ _8 |6 x% K# x4 M8 p
{0 X5 T0 B' z6 _! |8 ?4 E$ ?
return m_Item.nIndex;$ v* r9 D2 [3 L* n+ P0 n
}& c( ~9 v" k- x6 m5 l7 p' m
}
+ ]2 U) a" r+ d" x7 s4 U! f5 ]+ o return 255;
; i7 Z R0 j7 J: e/ R3 n Q* n/ v}
& H! N3 x! Y' |7 g' p; W, {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 L1 F9 a( G/ O4 m; v: A, t1 ~{" S: n0 h& M' K4 g. E2 V
BYTE nTmp = 0;% ?0 y+ Z' E6 i5 A. K- n1 V) _
bool bDest = false,bSrc = false;5 m0 } Y/ J, P% h# X1 [5 B
for (int i=0;i<MAX_INVENTORY;i++)
/ w. {3 ]1 q: \3 l8 q3 N% Q/ I {9 [5 H$ W% R; u0 O$ r
if (dwSrcId == m_Item.dwId)# c: m6 [ @" f/ q$ s" b) q6 ]
{
; k6 {2 M; u% e //id相等 则 改变对应的dest和src
# o' q. J+ M( W* T3 i7 `, ] nTmp = m_Item.nIndex;' o5 d8 Q$ c' ?$ v- D9 |
m_Item.nIndex = dest; E2 A* r& }4 O i7 u* X
}3 N/ Y8 Q3 P2 B! P r. T
}
5 I. ?& r u; X/ ?6 n //临时数据保存完毕,交换开始
4 |; M0 c0 t' \, c for (int i=0;i<MAX_INVENTORY;i++), Z- e0 v. d) q; t6 b
{ B) J3 d5 m! V2 c
if (dest == m_Item.nIndex): C/ ~6 I2 l* H0 {$ o# q* U
{
$ }* K) t& G- k1 R2 ^$ F+ d //id相等 则 改变对应的dest和src
1 T( V" M1 U6 w, r/ I m_Item.nIndex = nTmp;
! W" H9 s/ ^; F& D* G }
0 v$ Y/ j. P/ K" ~1 J }
- V6 m0 j3 O( A L+ x# b- s}! n$ } r0 k- K3 X9 s. T M. P! B
};0 B: f2 T( K& B9 G& y* O/ R! i
-------------------------------------------------------------------------
1 C* W8 M# _! s% L/ `0 Q& C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- E, U2 E' |- N& T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# E) w. `1 X9 z" e5 D4 W( z& l% t紧靠其上添加:1 c) [1 K! {' b
if( pWndBase == &m_wndMenu )" ~; @; Z! m1 e
{
1 ~, p0 r1 P, K1 p" L a) w switch( nID )
+ b! y1 e$ F; Z- b {( u( ?8 j8 q8 p
case 2:
, q- [& w D) J$ ^: b, g! Z1 N {
$ N$ v) ^- h3 G/ Y6 p2 I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# f% o/ ~9 h; U4 W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& R" n8 j& }$ ]; x8 r" w: W
{, _+ Z- p2 J* w' g+ r
break;
0 `. q. P) B. Q* |8 H } O) K" r1 w" l# T: u
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 `' \& G$ A/ r% G
{) u k: }: ]) n2 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 E1 c* Q) W8 D- G, Q2 ]
if( !pItemElem )
* y1 P2 ~: B" V3 \ continue;9 ]! ~7 P4 o2 W/ R
if(pItemElem->GetExtra() > 0)0 _' R/ Q. i6 @# _. C
continue;
6 H5 K ?, E/ J1 N! u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : u8 D3 f4 L% [& ~
continue;5 S3 G' A6 z: b# e4 c* u
if( g_pPlayer->IsUsing( pItemElem ) ) Y# F0 Z0 |6 G% W. C9 j7 V. P
continue;1 z8 l; Z' x' U0 ~' d
if( pItemElem->IsUndestructable() == TRUE )6 I- V/ ~' y) p& h0 c2 l. ]
{
% ]/ _" y+ a$ f7 O2 C( U g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ P) ~* l ~( `3 J# v3 y continue;, k% b/ y+ Z( U& q; l
}" f, |5 \: p {" h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 s: Y% X f/ R
}: v: T8 T* b6 d4 n$ C' P! }
break;
. `! T& q4 K% U1 } }
7 F: L2 c, C: i case 1:; d6 s: |* M/ }, i6 Q- d! _+ H
{
* F" M+ A& u5 A7 s" A3 R //整理背包2 L6 L' L* k* t x. f; F
//////////////////////////////////////////////////////////////////////////' V; K, y0 Y$ q8 V& e1 M5 n
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) k- T5 N8 Y+ e4 H6 r3 V+ T
//////////////////////////////////////////////////////////////////////////. P- Z4 y. G" l9 R: \# v1 e, X- `
//////////////////////////////////////////////////////////////////////////
' M. \, i2 B! |0 y" g& | CInventorySort* pInvSort = new CInventorySort;
" V9 k1 p! r& U0 I: X: p vector <sItem> vItem;4 Q2 J2 H- Y+ x; N0 a( H9 {
vItem.resize(MAX_INVENTORY);//初始化大小
' n) K5 m$ n3 a0 N: {0 \ //////////////////////////////////////////////////////////////////////////
+ O& C( @; g0 ]7 N+ h //填充数据; L }* ~0 v( K
for (int i=0;i<MAX_INVENTORY;i++)2 q1 x# P8 M1 ^6 H& K# z6 a
{, C0 C% {0 w( f; A4 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' R, a2 p, H! G5 j
if (!pItemElem)
2 {) ?8 {' j/ k- N) p {
7 C# r+ }- t' V3 n2 o vItem.dwKind2 = 0xffffffff;
3 p4 h U" S3 D4 S8 k2 _" O vItem.dwItemId = 0xffffffff;+ J5 b$ F& H& R: f" `% |8 h' H" L
vItem.nIndex = i;
( g' [+ f/ B3 K2 b" w5 k! d: { }else {2 {' V; n6 }" Z. z$ n7 ~
ItemProp* pProp = pItemElem->GetProp();
4 h( B% ]: f6 O4 J% f vItem.dwKind2 = pProp->dwItemKind2;
1 x- T6 z& l1 b vItem.dwItemId = pItemElem->m_dwItemId; Q: b" b7 c7 a ^1 R4 S7 t: v( `
vItem.nIndex = i;
" Y4 K4 m8 n% E) Y# |2 }+ Q }. N/ | T* S, ]- u6 q8 f* {+ P( Q4 ^
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ m5 k, O$ }/ N' M" ~. N2 V2 Z
}
- `: P- u( z( t: D //////////////////////////////////////////////////////////////////////////* v3 ?7 d+ W, ]5 `0 P& g4 p- p
sort(vItem.begin(),vItem.end());//排序/ {; S% u9 q! w
//////////////////////////////////////////////////////////////////////////
* w( b0 J. R! z6 m( x6 c //交换
6 g: _6 G; Q7 `/ ?! L+ j; ? for (size_t i=0;i<vItem.size();i++)3 l1 b% D& ^2 d) Y# A3 r( _
{
6 C& Q5 }- ]/ ~5 g" T3 V; Z: |0 M0 ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 w' ?' b' m- p! v5 x$ H: @, f pInvSort->Add(vItem.nIndex);
3 Q. [) X* I, o7 v/ b/ v }2 E! p7 f, E6 i
BYTE nDestPos = 0;
" K6 q/ q% }6 V) [ f/ [ for (int i=0;i<MAX_INVENTORY;i++)
, b0 D. d! j3 o& u6 C {
2 T) y) R) ^( z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* Y G) h9 Q* `. D; | if (pItemElem)
9 @! s" q$ c* a: O {
, G( {' \4 K' b' t if (IsUsingItem(pItemElem))+ [3 f( j/ z* ^$ M! |
{# Q' P2 ?- Q% t! T1 X. D
//这个位置无法放
! Q t: k" U% Q& Q. { k nDestPos++;
) y8 g# V, ]9 d' s8 f; Z( ^ }7 g; Z3 \7 I. n0 X
}* x! m& Z4 |3 }
BYTE nSrc = pInvSort->GetItemSrc(i);
4 l0 o% ?4 n2 d C6 T: I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 A+ I9 T ?- z, B if (pItemElem)! o' L" D' U/ R
{
5 U, X# @( H9 g! [3 E if (IsUsingItem(pItemElem))
; W! ?& @2 u! }6 T {3 L3 R! R8 R: U1 Q4 {
//这个道具无法移动,跳过1 ~3 `) @) `5 }/ N% a
continue;
# H U! J! e6 Y" N- X; Y }
; l1 ?# V* M# \5 K+ b4 d; N% Y } }else{
2 q3 ~& ^6 k; ]$ U //空位置 不用动3 G' N$ }9 R g' s) v3 H4 ?
continue;
" } N3 a8 P" {: V6 n }
) [4 k0 D* [# f7 l6 C, y //////////////////////////////////////////////////////////////////////////
8 f: e/ k' z# M //开始移动8 K6 S) [, T( m" n
if (nSrc == nDestPos)
( e+ Z- \) C* Z: N% c: x, j {
! g. S5 @2 e. \- c. K6 C+ c& r8 O5 M* O //原地不动
2 m u5 U$ I* n7 g) v/ ~' h. ~8 t nDestPos++;5 \2 G5 D& p- j0 b: R7 E
continue;, X# V! }/ H( J
}9 ^' L N% [, O) r
pInvSort->MoveItem(i,nDestPos);% F8 b# U5 y; o/ q; j
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- n$ i0 D& F! }$ J Sleep(5);
) Z$ a; _) V! X+ x& [1 ?: n8 x( S //Error("移动 - %d->%d",nSrc,nDestPos);
* u* J5 v" M" _% m+ @ nDestPos++;
- I. b. C/ f5 a: p0 E }
7 E P6 s# b0 G' k& _ //取第一个元素的信息
' {8 g+ E" [ t0 `0 L1 q, g6 B3 r3 A /*3 c- O0 H/ [" d2 p& y' _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ ^! w* b4 Y: a+ a( m& I. b8 ~ {. z3 V# i" o, g
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) [2 L( j0 f9 W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ z" H* g% ~/ v }& a$ f6 `& i0 L, x6 v8 }
*/4 _3 _! F$ x: r
//////////////////////////////////////////////////////////////////////////
" l5 B( ^" M4 p3 }: ? d6 o G break;
# b; O5 f$ o, T3 Q \& v& H6 ^ }
- @2 L% c4 y, [) s/ Q% t/ w, _ } % i7 S) ~# _) s- u2 |# B
}1 v8 X* ~8 [5 ^& n. l
m_wndMenu.SetVisible(FALSE);
: q# p! u/ |: M) s" F
" D) D- c8 u! H1 ?4 _--------------------------------------------------------------------------------------------------------2 T2 n1 t! A6 K' a# ^, s( m: g$ L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 X% I) S$ U+ c2 n6 D* {% I. i
{. {9 S. Y( m4 C9 t* |+ l
BaseMouseCursor();6 M: W2 ^) q! ?/ W2 }
}1 c" Q! w+ \$ Q0 h, b6 @5 x
在其下添加:* r2 l& |* ^! |0 A- o) M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 b6 ~3 | Z/ [1 R9 n
{& o5 V8 [7 ]/ N/ I* m2 h
m_wndMenu.DeleteAllMenu();7 u, W: n" S9 Q. v, m6 Q- g! |
m_wndMenu.CreateMenu(this);3 n! P$ G$ J/ x. j5 Z7 k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 ?- S- n; X8 n5 x, h
Y6 T$ o, S% H! W; e7 D$ u) [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% P: Q/ @. u7 | F
{% V1 N! `9 l, s9 w* D
//P以上级别才可以删除所有道具# s# ?, ?9 W: ^
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 C9 z+ K9 Z" K! P! z2 j
}
2 s# j/ h# R' x' T8 p7 }m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 x2 Q2 Z( B" [3 P% K' \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! x1 i1 W7 l- k
m_wndMenu.SetFocus();0 y1 L- U% ]+ D) I2 S" @% B
}
. I# K: k) R) m; L* i0 f, h------------------------------------------------------------------------------------------------------------
" }3 w6 g t4 q6 ^4 P*************************
' B, A7 z) V( e6 L) h: nWndField.h文件$ x# x% |9 k0 I
*************************9 [" r, r: P3 `; V) y* }
搜索:BOOL m_bReport;
* S* E& u( A7 r* }其后添加:
, i3 e b$ P7 `0 I3 eCWndMenu m_wndMenu;
}8 p/ Q a& ]- a6 _" r搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 k- y7 V) ~# @! K3 T9 w, l
其后添加:
# c" D& D3 y- X8 zvirtual void OnRButtonUp(UINT nFlags, CPoint point);) T# Y$ C/ M& b
& r' K3 x, X) Y! S: N6 G" X$ G0 u' k5 X' k$ Q
|
|