|
|
源文件中_Interface文件夹下WndField.cpp文件
, e; b- ^, I* b. H0 C搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- L: e! i$ d+ v4 H7 S/ _0 G
9 M0 T3 N1 @ W0 ~) b6 L& J& kstruct sItem, `% [! m p" @% o0 | ~3 j7 ]6 D+ a
{
9 `$ |5 f0 Q% ?8 GDWORD dwId;
; Q, U( r6 Z5 o$ _; O+ @- j8 kDWORD dwKind2;
4 g9 E% f# j; f1 p# c2 a5 LDWORD dwItemId;$ @5 \) G# q. N/ a8 M6 ]' l8 m. P
BYTE nIndex;
) x' J/ u% Q) P, S! c esItem(){6 W7 _. H/ Z: k+ [8 v& ]
dwId = dwKind2 = dwItemId = nIndex = 0;$ F: D. T* t+ h0 G
}
$ x/ P4 q% {/ @& Y) t7 F- nbool operator < (const sItem p2)0 r- Z) O' h; B" g2 g0 J6 x
{+ ?' n, m" z, y1 G4 Y2 w* X" M
if (dwKind2 == p2.dwKind2)' N. j; @: ^) v4 q/ e
{
1 y- ~- a" P" j. E return dwItemId < p2.dwItemId;
1 _9 c. \0 g# q9 s# ~! f4 Q }else{$ d$ C) Q5 z& t6 k0 q& Z
return dwKind2 < p2.dwKind2;% p( v$ Q7 M, P! c7 _
}
$ }2 ?2 a% w) }4 }. M0 D}3 I" p7 m, P8 S+ @$ h. n
};: ~4 z. P8 m+ ^9 i! W4 M( g) q
class CInventorySort: x- V. g6 G+ z7 B1 Q! j- ^9 Y" P6 L* W
{" c: D4 ~8 d+ d
public:6 Y3 k) ?' v( s4 S& m! i9 z
CInventorySort()/ I1 r7 I" M+ w7 Q# }
{. K5 [$ s# J5 u
m_dwPos = 0;( [ i7 B( g9 p( c5 p6 n& B6 o
}
; U8 k2 w* r' b$ f/ i$ m4 p~CInventorySort(){}
, C8 |& H0 i1 ]$ u% z, q1 m% Zprivate:% ~% r. A" Y# t* r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" D& c& K6 B0 n8 G0 k* dDWORD m_dwPos;
; d o4 T6 |# u- s( H8 l1 Kpublic:
$ N+ Z. T6 u/ j* l9 c, @3 Lvoid Add(BYTE nIndex). C! H) W$ ^0 U, j& j; B
{
T" N5 M" A& o8 q/ l: s if (m_dwPos >= MAX_INVENTORY)% h7 Z( H; `+ Z" Z0 Y
{: h) c: h* I& \ ~) P
return;& x* V$ T) D! E8 K- [
} @4 ~* D, }' Q* q# k4 H; c& d
m_Item[m_dwPos].nIndex = nIndex;
. k0 o9 V4 T$ M1 Q6 a m_Item[m_dwPos].dwId = m_dwPos;
+ R$ r3 ?, P' Q+ ^! ]7 p5 i m_dwPos++;
8 G0 S& G: z5 d5 L}/ a9 H5 }# P" O7 ~
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) z6 I9 P8 ~, _" h$ ^# {
{8 b! \+ w/ [1 f* m
for (int i=0;i<MAX_INVENTORY;i++)/ u! g" k8 ^: V8 T
{' G' {$ d" L4 ^/ c& u/ T2 ^/ h
if (m_Item.dwId == dwId)3 `2 ?, k% [( o4 k1 V
{# }# ^ E3 B, c" X+ t
return m_Item.nIndex; x. S& z1 o, B0 x4 h) D) T4 c3 ?
}
! s% l, q+ K& v1 Y }! [9 r( l2 J( K" m5 M
return 255;
5 J M6 @& ]1 T/ v% Q}4 k; P1 z/ Y% b4 k8 J/ `9 z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 h* s) u6 a! @{
+ A0 [! v0 N) o& T# v W BYTE nTmp = 0;- T7 X* r/ W' c5 k* _
bool bDest = false,bSrc = false;3 ~0 O. S6 i Q: m# t6 t: }
for (int i=0;i<MAX_INVENTORY;i++)
: a; H: C' b- Y8 j {
- s, b5 v* z3 L# c) q% T6 _ if (dwSrcId == m_Item.dwId)) h8 B) X. }( J. i7 q
{
# X% h' N8 ?) l5 u //id相等 则 改变对应的dest和src
! B$ E6 w6 Q! z3 q d nTmp = m_Item.nIndex;
. B, ]6 L0 i- h6 h m_Item.nIndex = dest;
0 Y/ w0 P! U8 a0 S }
' U3 l# R% z% I8 a1 W }& }; k: m" Z& Q/ I+ C, ]; Z
//临时数据保存完毕,交换开始
, ]6 G, G+ R x3 F$ ] for (int i=0;i<MAX_INVENTORY;i++)- A T2 x$ Y; b/ R+ a; K' P
{
* h: g- Z" O$ s! d( \* S if (dest == m_Item.nIndex). }" |- Y8 e& B0 N" P2 H0 o+ _
{: I3 e& i: ^- {. `' l
//id相等 则 改变对应的dest和src
. L7 `+ X7 E! E( j |1 w m_Item.nIndex = nTmp;
; E. H3 V) [, s& F v }) b* g2 Y+ {; k8 F
}
" }7 v, c# q1 J2 Z}
! v6 ^; C3 |9 N8 m};/ `8 {+ B3 A# j, x1 J
-------------------------------------------------------------------------8 C4 L4 P8 u+ A0 s) h
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ n b8 ?4 D) C4 R( \1 @7 p9 [ b搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 D$ P3 n5 {5 D( |2 l! a
紧靠其上添加:
6 [# ^, w! `0 fif( pWndBase == &m_wndMenu )7 h* W/ D9 h" `7 f% I; A6 x8 G
{$ w! Z( A! ~8 H2 y o& P
switch( nID )
& z% ?! _" V4 p% v" \" B {
) I0 H- {4 g4 Y- Q% y4 e, f A case 2:& T8 [5 V7 U8 X8 d5 b$ e
{
- B! O, g0 W6 B3 p# C) ^ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" a" K: \" G( Z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): j) O( u8 U6 x' [+ ]: d
{5 W8 F0 `% ^. U" _/ \2 A- O$ O
break;$ I; c0 p0 H3 S$ k4 D
}1 U2 ~1 L1 n e
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 m, I3 u |5 o; }3 o4 q {. R0 I x. Y$ B1 n/ l3 o# S) Q1 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 r3 f1 H- u( f: m! F# r4 v9 | if( !pItemElem )0 f0 { ]+ W U) w4 M
continue;
6 b: ~" A" }6 [( d4 Y- M& C' U if(pItemElem->GetExtra() > 0)' j6 w) M, r' U' z( }0 z
continue;6 A/ n/ h3 j: n/ M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* R5 p: S k( t1 m$ K continue;4 N. H- \9 E# F& {% H
if( g_pPlayer->IsUsing( pItemElem ) )
8 {5 ~% l M' b' {+ ? continue;
1 B7 ? G! y2 Z4 ~ if( pItemElem->IsUndestructable() == TRUE ), n3 a" }( Q% S6 ^2 y, u' [
{1 I6 M' ~6 L# B' K0 J- G# @- ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 k! ^# W7 u7 Z+ d2 n$ W! [2 l3 T
continue;; `$ X" T s# `
}% I! D0 U o. ~) f E/ J( ?8 t
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: D* c1 }! w6 r: F, l }& D- `/ }5 d5 p* x7 p, R. [! E$ q
break;* u! O: B5 y! ^9 `" [" _/ R
}! ~. s7 W# F+ ^5 h5 P
case 1:$ [) |3 z" Y$ J
{
$ A' C1 o3 V8 F* X7 T9 h. b //整理背包( H4 X3 Z* V0 p9 u- e. V
//////////////////////////////////////////////////////////////////////////! `. b& u. e- X/ g0 Q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 e: d: v( Y q& S" w% G //////////////////////////////////////////////////////////////////////////& m# L) g) K3 l
//////////////////////////////////////////////////////////////////////////
8 ~. S2 s7 P a CInventorySort* pInvSort = new CInventorySort;
, r5 Y1 `% G0 O" g, i vector <sItem> vItem;
# m0 J" I5 t( q) w vItem.resize(MAX_INVENTORY);//初始化大小4 l7 m4 s+ w7 s+ l
//////////////////////////////////////////////////////////////////////////6 e4 Q5 u4 r0 j
//填充数据
2 B- C+ S( i) G, J( g) m+ | for (int i=0;i<MAX_INVENTORY;i++)2 L& c6 r- k" L7 @6 V; o) a
{2 [* ` Y( i$ R7 M+ F/ a5 p+ l( V& v/ w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 {: c: ^5 W# l$ c if (!pItemElem)
* ^% z s& o5 S% ]* I2 [ {! G# ]. G7 e; i! N n5 d
vItem.dwKind2 = 0xffffffff;+ y4 h/ h, Y Y0 {
vItem.dwItemId = 0xffffffff;
6 w. J" K: C0 O) C- B6 @( ~* \4 a% n vItem.nIndex = i;; L8 O' b( i# \
}else {
; z4 y- P4 s0 j$ M) B, ^ ItemProp* pProp = pItemElem->GetProp();
% X3 U& r% l% A' l, H; J7 U vItem.dwKind2 = pProp->dwItemKind2;/ \5 F* \7 ~; [" ^3 x8 T
vItem.dwItemId = pItemElem->m_dwItemId;8 { \% e0 O6 r( B+ O0 |
vItem.nIndex = i;
$ W3 o9 S6 ?7 P }
* [% a( l' I c. ^' J" Z. S //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 `/ z' C/ g- a" q2 \ }% p8 F- u: _/ T
//////////////////////////////////////////////////////////////////////////; w* c* R% h) m3 s
sort(vItem.begin(),vItem.end());//排序
/ _0 _" r" i- G2 y4 d u //////////////////////////////////////////////////////////////////////////
. Z* H, @: b! Y/ W //交换0 l5 |3 F3 L e7 c7 l# v) ]: ^. R
for (size_t i=0;i<vItem.size();i++)0 i( X4 E6 y z4 r* Q; `: M0 M
{
4 }& [, |7 g6 K$ _% b3 N* J0 f k3 @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: j/ r) p _" R4 k$ c$ y+ n8 _ pInvSort->Add(vItem.nIndex);" j9 a: S4 t" H2 u" W' ~; [" v8 b6 r
}' T& T; ?, y- |$ F+ A4 C
BYTE nDestPos = 0;
$ I" ^+ e, l: V: [+ j! t- I for (int i=0;i<MAX_INVENTORY;i++)- a! \/ W) \1 s. T" s$ G( J( u; v
{2 u/ E3 c/ c- v: \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 H+ g, x+ u; M7 S6 s
if (pItemElem)" T: P: `* r% h. P+ |- _
{
0 s! ^1 g' e0 w0 h if (IsUsingItem(pItemElem))
4 X+ z6 G2 a) u" N5 L+ |1 F6 L6 S {0 p# y4 @* p! J- a5 \
//这个位置无法放
/ k* y* R5 u( X5 Y/ [" S* t nDestPos++;, x& K5 R7 }0 g0 s6 G* Q; V
}
4 \1 s3 b5 v0 n* N }
1 a- X3 J+ b& ~ BYTE nSrc = pInvSort->GetItemSrc(i);% X2 }- I8 @9 u; t
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 x8 e: t% b9 f' {6 Q
if (pItemElem)
" W+ o1 @. w- f5 U {8 C0 s( ~ z$ X) G
if (IsUsingItem(pItemElem))! R# l+ P1 B8 s
{3 z+ j; n- |5 d* b/ A" w
//这个道具无法移动,跳过
5 K' B6 O5 v' i$ I1 ? continue;
3 K8 _) |6 T) @. ?& @6 L+ e }
' d3 L5 S3 T B; e v }else{
+ z5 Y9 F# W8 [( k1 t //空位置 不用动# e6 i8 ^6 U2 M& q n
continue;
; ], N" h! ~* v, L& Z# E }
+ Z0 S& ~! @3 m //////////////////////////////////////////////////////////////////////////
% t' s6 [( ~" x //开始移动
! g7 U8 ^9 O3 u" b8 _/ {( M if (nSrc == nDestPos)
( i; X" Z' Q6 |8 M C {1 G; `* X. F m" B" v! O& k
//原地不动
7 A/ E9 N8 f( R8 G- } nDestPos++;
+ v0 w2 {0 w6 j2 e, T8 k8 F continue;
7 e) |2 j: W. R% Y4 z }: _! ?7 `9 a9 a% v6 G: u$ b
pInvSort->MoveItem(i,nDestPos);
, R0 c4 M6 Z, _/ @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 W& e3 a3 t1 ` f& C( s5 k3 T9 A
Sleep(5);/ B& f q% V: _! }) s; V/ z7 Z
//Error("移动 - %d->%d",nSrc,nDestPos);. p0 |; w3 W9 ~: Z1 p, ^
nDestPos++;7 T* e: `' e9 y7 ^: p* r$ M' O
}, f4 v* i' f2 j4 x$ r* A- h& L
//取第一个元素的信息
$ m9 H, z9 h; ~1 }0 {+ P2 T /*
2 `2 Y: u6 X1 \1 r if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! U( U" M3 i2 `2 s: U7 w {
# j6 W6 `& y5 O, ]0 ?: Z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) y8 w/ U7 K" Y" z7 J w& ~/ k* T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 t( U: w; k2 k! z, \
}
7 l/ P3 i' B! S5 d */# ^+ I& Q; e: D0 U1 p
//////////////////////////////////////////////////////////////////////////7 m+ \6 T5 P. q& s! u) k
break;
( b- l0 b6 P3 s/ b }9 _! o/ ~/ j3 r4 }4 O
} 6 K9 u) U2 m6 V
}6 g, G' A# H- l" a/ x3 v' Y7 C }) ]
m_wndMenu.SetVisible(FALSE);
' D% N7 @# A$ ?5 b. T4 b1 Y; B/ }% ~ {" G6 v/ _& \( e( A. p+ Z
--------------------------------------------------------------------------------------------------------
( J& G; N- m/ i4 C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# X) o7 s7 e) L0 P7 Z1 ?{
/ \2 C3 ?. T/ FBaseMouseCursor();
; S @- U Z$ H) R, R}8 V _6 O% ~3 G8 x" q1 D! N
在其下添加:
! \$ b6 p1 a6 _) G8 M+ c, `3 y xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% M/ b5 }) p8 i' E5 i$ _/ R{
2 g3 j$ ?8 `" n6 a+ u' O$ wm_wndMenu.DeleteAllMenu();0 v# o; e w% o& c1 c) b" q: B, J0 S& N
m_wndMenu.CreateMenu(this);! i. x1 |; z5 O4 h/ E2 G% w( S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); Z5 z, r+ |4 f3 m7 B. z
, z% g* \% N) T6 ?- _" _* aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 g* D, C- E4 g) @{3 k- P2 k+ x3 q$ ^
//P以上级别才可以删除所有道具
, b* \4 D! E: C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 d: a& P* A f" G2 B- L( ^}
3 Z t! J% ?; [) Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& Q7 q- t9 R8 ~% V, Cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# ~) L' X) C3 m1 \; |5 U8 L) Y7 Em_wndMenu.SetFocus();& s/ q* D0 R1 N$ K
}
; P! h2 X1 L" }------------------------------------------------------------------------------------------------------------4 K/ T6 Z: S6 v4 L2 O
*************************
1 W# W7 d& D5 y$ B% O/ jWndField.h文件
+ x6 o; h/ @3 |6 j: f************************** ~5 {* _6 v z8 ^3 k+ ~. k
搜索:BOOL m_bReport;( {. P+ e. S1 F0 O$ Q
其后添加:
, A9 ~ Z) g# [7 Q6 {CWndMenu m_wndMenu;
" u6 n2 A/ k+ x$ N( M. t# y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! Q" K3 d. B0 @4 J其后添加:! d( d: c2 O$ p4 ?0 H; C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 g6 ] d Y# F! O
) E6 o* ~6 J9 L8 i- B
/ O' |1 C# g* ` |
|