|
|
源文件中_Interface文件夹下WndField.cpp文件
$ m% _. r4 R8 J$ q P _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" [( _7 m, F( G3 U. R% \( q
( _/ ^. T( M" e7 cstruct sItem3 ^! b' }! C" G: a: L5 q# A T
{7 g5 }- f+ \ ]8 t8 R
DWORD dwId;
; |5 H: r6 [4 \1 I) e2 tDWORD dwKind2;
) J( O; J+ f! F9 M, X) t. ODWORD dwItemId;9 I0 N* F+ m4 @% f
BYTE nIndex;
7 |' b* k8 E; |( V* a0 ~sItem(){
- A& j3 N* t' K4 u& y dwId = dwKind2 = dwItemId = nIndex = 0;; p I. C6 E4 o2 E* L0 K
} h' D% z% C. E! G/ U/ ^9 u
bool operator < (const sItem p2)
2 ]( I! ]* P% [' s& K" F2 {{
1 v5 |& z$ [" x: s if (dwKind2 == p2.dwKind2)
- i6 [, N8 p6 B* I- m3 D( d {7 B& Q: P7 q+ H: G$ A i& t, U
return dwItemId < p2.dwItemId;
1 l% l2 l) X! ^% r0 n9 I }else{* M. Z% v% S" V' L3 f- j8 `
return dwKind2 < p2.dwKind2;
! l/ ?! V5 h5 k' @7 I }! I/ B$ Q6 O2 ~7 j( w: p' J. U
}, D* T# L |4 B
};: I2 f( H" | W) o( I$ k: r5 p
class CInventorySort) \$ |9 s3 S5 t+ R! `+ e: W1 W$ s
{- ~0 E& r, ^) Q$ n, b2 t
public:! O- o7 g9 \& r$ J; e
CInventorySort()
2 A" e5 L& s* l( C, ?" e{
7 O+ z0 S- P0 q m_dwPos = 0;# ?5 P) N, p4 M* w* v2 E
}
/ g* K/ B% Q/ r0 L, j: A: g~CInventorySort(){}
: y% y' s; S% l; D8 S# cprivate:3 k+ y* C; l% H) N. a! h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ ?3 h. k: W0 C; }* ADWORD m_dwPos;; b% C! B2 {' E1 [
public:
5 u2 C5 ?$ X/ l0 P* b kvoid Add(BYTE nIndex)
) ^* u3 \7 k- x: K: Q1 D{5 M* P+ Z) x& X0 K# w; J3 c! l, c4 l
if (m_dwPos >= MAX_INVENTORY)8 ~8 `0 f6 n) h; r) x2 [& e
{
& m3 o8 A0 {" t0 L. ` return;5 ^) G* D1 O j# R& R
}, L& `4 A i3 f' C1 k/ u
m_Item[m_dwPos].nIndex = nIndex;
7 z1 s- Y( a. F3 n m_Item[m_dwPos].dwId = m_dwPos;& @; c( Z- i( u& [% ~% P& w( E
m_dwPos++;
! ]/ w% W6 g7 X. c* {# x0 V( y}0 F3 Q9 ~; S. k9 L @/ s$ G2 Z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( r* K+ e' I3 N
{
1 A/ S! S8 o! C; W! r! W# f7 [ for (int i=0;i<MAX_INVENTORY;i++)$ e# n: b9 i& `3 d
{
, y5 k1 P+ |6 c4 Y if (m_Item.dwId == dwId)
: N+ a& g6 w/ U {
! a7 ~7 s# w |4 _4 w. b: g return m_Item.nIndex;# ` H6 u$ I' o3 J' J. a
}6 i4 _" u) [3 i0 r4 ?. \
}
- o( n6 E9 L/ c7 v2 U" Y) u* W return 255;
, M" d4 h5 h B}
1 F! n }% Q5 d: ]$ s c8 d2 Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' T9 r& o" r$ _' W" x- ^{! O! Z+ g3 Z" p; N
BYTE nTmp = 0;
b9 S! o: S' W. S) f. e) ] bool bDest = false,bSrc = false;
: H* | z# g. L; W, {8 H% e for (int i=0;i<MAX_INVENTORY;i++)
3 O* j" p9 t# q {# s* F' g, l3 v; Z
if (dwSrcId == m_Item.dwId)
K1 C3 ~& v1 D& { {
1 S2 ?8 k1 e: \6 @* H //id相等 则 改变对应的dest和src
2 W& x) q( ]; j' v6 n nTmp = m_Item.nIndex;
- `9 A! J- B' W( h) r4 q% l m_Item.nIndex = dest;
6 {. \9 M: A# w. Q$ | }
& I% O4 P. l4 k; f. P! ^. h3 |; e }9 M! X5 H) Y5 E* {6 {* ^1 Y
//临时数据保存完毕,交换开始
7 H/ s9 |+ i: n3 m7 Y4 ? for (int i=0;i<MAX_INVENTORY;i++)
+ F# d9 g) |( |) g, {0 h$ B {1 B- A8 [8 r8 n( a) z+ ^0 t
if (dest == m_Item.nIndex)
( g/ L: [# ]( D4 ?( q j% k3 u {& l; e+ p0 E# A, p, w8 V
//id相等 则 改变对应的dest和src
3 [& \# ~! m4 G& b m_Item.nIndex = nTmp;
6 \5 W3 ^- d* F0 S0 \ }" u- x: i9 A. w8 q8 y
}
{# O' H# G3 H& m" ~1 a}
% }* H7 d |9 Y- ~7 R* T$ F2 |};
& V6 U% l5 O! F3 j- r7 K- K+ u4 a-------------------------------------------------------------------------- {5 f) v0 s! R( @* I* a9 x0 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): P; i( ?: T+ R o9 C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) R/ p# ]! @- L: |紧靠其上添加:
5 M# W9 j# G. _) \& S) Q zif( pWndBase == &m_wndMenu )3 @$ M6 B' y) o7 K7 d
{! ?5 t( e4 f- M. r2 B$ ?5 m
switch( nID )
* j2 B B2 s+ t6 a x {4 V U) ~* { b; E5 U5 f
case 2:
8 B, Q: d7 ~ ]' v. ? {. q/ L' ?" l/ X8 U
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" ^& L# P$ `' r7 P) a9 k6 S if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" T$ K$ E& ]( {# a; E$ J+ O {8 V% o+ E: I! ]
break;& F$ ^( J& a" R# A+ `3 q
}
' X9 @- h2 X1 O) A, w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ s) @, n6 g; Y# v+ J9 S: p, z" `
{* C. [9 s# o+ l7 X/ t/ _; c& T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, K, r- i5 d* h5 r. h* I
if( !pItemElem )' c* l" c* ?3 W f' N+ e
continue;
! O, i* q2 N7 @8 u if(pItemElem->GetExtra() > 0)
7 F! S5 L! j+ {' m0 v" ^; w% h0 [ continue;* h& ?1 R8 p1 ^4 W% O0 b
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 r6 \! C; x) N. E continue;: F' T. ?# F# _7 _1 u4 q
if( g_pPlayer->IsUsing( pItemElem ) )
$ t% v- ?3 z6 b/ I continue;
& w1 X% c4 B! \1 V% ` if( pItemElem->IsUndestructable() == TRUE )
7 O# P5 s1 g; }. ~, l+ C7 p& S! x {0 {) @6 Y) k8 i+ F
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 k2 e: J& d" [ continue;
0 B7 G% G" z" D# H, [ }
: [9 {& r4 H; b- x0 A9 p! t2 i g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 o% k5 D7 [6 Q0 N; s$ I
}% E" }: O! Z1 S
break;) P+ ?, z0 j6 x3 }& d8 @# q4 @; g
}
) a4 }" \/ V0 H! q- I/ Q1 G+ P case 1:
% @% I0 m1 Z3 Z/ a8 s N- o. g {
3 |9 z1 h2 N3 M/ i //整理背包9 M9 r) y5 J9 T7 Q6 L' G; S7 s* P
//////////////////////////////////////////////////////////////////////////
7 h$ c4 F. M1 A) N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( i4 O- P! P5 l: Q& @0 P
//////////////////////////////////////////////////////////////////////////" b, ] o7 M3 b
//////////////////////////////////////////////////////////////////////////2 _% ]3 x* {% b/ R+ k: M E# O7 a
CInventorySort* pInvSort = new CInventorySort;
" W* B, M0 h. I$ Q; H8 J; n vector <sItem> vItem;
+ h1 ]9 c* s$ v# H {9 `2 j vItem.resize(MAX_INVENTORY);//初始化大小
9 |+ D5 r$ v4 `& S/ k //////////////////////////////////////////////////////////////////////////
! \' ^% c, x" j3 a7 \ c9 R+ p$ ~ //填充数据+ S& `7 v7 k c" E
for (int i=0;i<MAX_INVENTORY;i++)
$ ^/ D" H' Q2 j. R: W {
& ?. T5 \( y: @5 @+ J7 q8 c1 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! O; c' C) Y. n. w- {" l/ k3 K8 ^$ j if (!pItemElem)
0 G) ]( ~1 k8 b. H8 f% h {
~8 j0 {9 P H4 G2 e/ } vItem.dwKind2 = 0xffffffff;* k1 M7 T( _: X& Y* ]
vItem.dwItemId = 0xffffffff; b7 ?# I* z. Q2 w. n
vItem.nIndex = i;7 A; ~ e9 P/ D+ b
}else {
# Y0 h$ b5 x1 ~% N/ s' D ItemProp* pProp = pItemElem->GetProp();' X) C6 K# x. E9 ?6 |+ d
vItem.dwKind2 = pProp->dwItemKind2;
- `& Z( S" W( S* \2 e! L: F+ l$ I vItem.dwItemId = pItemElem->m_dwItemId;
" t6 |6 H( e9 w3 u1 w4 n8 P4 p vItem.nIndex = i;/ a; ?2 F3 y6 W8 K
}
; E8 N5 h4 u* n2 b, a9 O# O T4 ~ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, @2 W- o2 R+ V/ v
}
: s; q( {/ s! j- s/ P- ^* } //////////////////////////////////////////////////////////////////////////, M8 }! U* F, ~, r+ u
sort(vItem.begin(),vItem.end());//排序- N; w9 {3 p* E
//////////////////////////////////////////////////////////////////////////
- h' p8 t: B+ s: ^( A& J4 F/ a //交换
) l/ D* |/ ~' ?! Z+ B for (size_t i=0;i<vItem.size();i++)( W) k3 d* [- H o5 I
{
5 n% s7 \1 b9 v- Y5 K. n& B4 Q4 p7 q) P //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 k5 x6 K \: G+ e( `8 x/ ^
pInvSort->Add(vItem.nIndex);7 R: o) G- P- K6 _; j
}$ n0 S& }- M& }" o
BYTE nDestPos = 0;
0 h2 P( g, K( Q% C% E+ v$ w for (int i=0;i<MAX_INVENTORY;i++)8 N7 k# ~- T7 |+ e
{" x8 [5 s8 {: H0 ?0 U& o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; W3 }3 X+ K* v$ d# g* a
if (pItemElem)% g6 ^4 y! a/ W; p* A/ r' _( `! x
{
& e$ J/ O8 y; m. V% t. T; m9 J if (IsUsingItem(pItemElem))3 N5 A/ N+ K, n, }' D: _
{! o- U; _+ y% ]
//这个位置无法放
/ p ^2 m: j9 U, N# K0 k7 O4 f nDestPos++;
' x" k+ ]0 P' R" E }
( R3 @, c7 m+ t/ A$ s5 E, }$ @ }
+ L8 H2 @0 c# a/ B5 ^, m; y0 w BYTE nSrc = pInvSort->GetItemSrc(i);* w) O [/ N, W: C; s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" V$ c# @3 ?; G if (pItemElem)4 G9 g6 f L) a6 S4 p
{( z' |3 ^0 R G1 ?& u+ V1 [( F
if (IsUsingItem(pItemElem))$ ?8 ^' g9 G- D$ ~
{
% U) H+ ^/ I9 |# R' D" B B //这个道具无法移动,跳过% @3 \7 |% r/ Q# n2 `/ M. E
continue;
7 e% m+ r4 o) F. h# I }
( y4 A" p& l( A* b$ [7 N5 C }else{* e: _6 \- y2 D* x$ M" g) U
//空位置 不用动* [, o# e# r6 C+ E6 }) A
continue;
0 d+ H6 f% [+ [7 S# L }
! q0 I2 n+ n% U/ b, E //////////////////////////////////////////////////////////////////////////& o. J) s5 U6 D: m: w
//开始移动! z# i V3 d0 H! B& N6 Y+ V% u* C
if (nSrc == nDestPos)
3 i$ A$ k" K: \" Y+ ~) z( @9 l. n {0 M* e' S0 V* x# q+ o0 B
//原地不动
7 T$ N4 b: q7 T2 U7 x nDestPos++;- J# `6 I4 P; x4 D5 C
continue;$ i; I* y1 v% x% K7 o9 g( y% i
}
# O% u' v; ~0 @. r U0 W/ }6 y: c pInvSort->MoveItem(i,nDestPos);+ F& _9 F) _ r
g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 M% w: k+ s1 M. q, ^3 R2 [2 y+ M
Sleep(5);3 ^! N& e8 o3 s6 ?. C
//Error("移动 - %d->%d",nSrc,nDestPos);5 j" q5 W' w' U( ^, Q
nDestPos++;
: g4 i2 F6 I z- O& x/ L/ E! [4 X8 f }# J6 \+ ~2 B$ N* g1 z: D2 |9 s/ t$ p
//取第一个元素的信息 o0 w+ M0 a5 h8 ~; A
/*; ~/ z K6 k3 N7 o6 c5 D
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 y2 X+ n$ w1 d {: M: C! T+ O( R; |* U1 S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 F) L' |, p9 i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% ^7 H. S! h8 S- e6 n: H" ~' U! b }
9 i. D) @& d, \" |! F4 Z */
7 v+ @1 I& F/ o- B3 o //////////////////////////////////////////////////////////////////////////
# d% s/ y) K2 R2 j' @' R2 J9 u break;) n, Z5 H$ K2 D8 J5 i' H4 z$ g( x
}
. j U8 G a: g- C( x0 S }
0 t# M7 J4 Q, ~. c# \& ]5 ?1 O}
! y4 x" A! m+ F, ?" ?m_wndMenu.SetVisible(FALSE);
1 M$ r7 R+ v+ X; ]% ~0 G( d
9 I4 v. U7 j' G( Q3 Z/ \ H+ d--------------------------------------------------------------------------------------------------------2 t l( q% z; x7 g
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# `, Y* X8 P7 _" ~" T6 @{
) k4 }: U W8 u( F5 a4 o1 nBaseMouseCursor();
7 b& Q1 Q, @2 c, F: ^$ a}
" d' Y9 A7 u1 ]在其下添加:
0 P- B4 @. ]9 J8 {4 Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, B1 a2 p4 r8 M{8 H; E% N. r5 H* w& k& M
m_wndMenu.DeleteAllMenu();" l; {( B2 z2 x3 l
m_wndMenu.CreateMenu(this);" U" q2 I( p+ w5 u
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, I$ z9 P3 [# p- D5 F$ U9 E
5 I3 F4 U- R$ u% X d7 K( Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 j! |/ m; g) g1 K3 I: b
{
! \8 y8 M2 ]. h1 V9 V //P以上级别才可以删除所有道具
# z$ K3 ^1 O- Y% t6 K m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 F# {. w# X- W! K1 i' t+ }
}1 b7 ~$ h; n5 _, a. m
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# B- w0 U+ o* k, R; R1 v4 P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. f$ I7 O: H# B+ ]: vm_wndMenu.SetFocus();& @+ l) E2 Z6 n4 F
}
5 e/ K, G8 U* B* H8 z, q------------------------------------------------------------------------------------------------------------& ?& m( v0 ~+ n& Z3 W7 L9 R
*************************. X3 j- v5 C( `1 D* J
WndField.h文件
- s u' g2 V) O2 H, x! E*************************0 @! T: L/ x" ]8 X3 u, }6 E8 D: b
搜索:BOOL m_bReport;
7 H, K3 o0 r8 H/ f& h& `+ q ^其后添加:) }0 g3 ?: X' ^. B5 u
CWndMenu m_wndMenu;
# k3 s, X( G& N6 H' y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# n/ E7 \' {5 T4 j4 j) ?其后添加:
# T( h4 L @7 d. z t* t2 s) M+ ~virtual void OnRButtonUp(UINT nFlags, CPoint point);
' B. ~: p& C' ?' w H0 L8 c4 ]* f: N, s/ b; O
0 V- P" ]! W, w3 x |
|