|
|
源文件中_Interface文件夹下WndField.cpp文件+ h5 d& o3 N3 k( r6 [3 z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' l7 x0 C1 r% z3 a6 O+ x3 y
* g, H w9 e1 j0 \4 Y' x# Z hstruct sItem
4 M; `% C4 }# x; l. L/ D2 o* _{
4 J9 |; V& e& |5 _" V3 d3 nDWORD dwId;
) F' L! u$ N* ?% d/ k0 ODWORD dwKind2;
" h. s. I3 K* |DWORD dwItemId;
( h' v& S5 E5 qBYTE nIndex;0 s9 M% q. M* q' d% @
sItem(){
" C7 U6 ~ V! ]! z dwId = dwKind2 = dwItemId = nIndex = 0;
+ x" U* ?& C& [7 y5 H7 M' q: b}
6 e s9 c+ u! J% g+ X2 \# Y7 Obool operator < (const sItem p2)! `2 y. i; a% u6 A+ p/ m2 o3 W
{
9 N6 W/ R$ ]# i# V if (dwKind2 == p2.dwKind2)
( n+ g a9 J1 A {
3 i2 P: }4 g5 ?/ s# j return dwItemId < p2.dwItemId;
" h/ d1 G1 f) H }else{
& H9 T1 d9 M: R) b/ \+ R return dwKind2 < p2.dwKind2;
2 C* A2 x6 P2 C0 l8 O! P }
+ h+ N1 |6 f. J' U- u2 L8 t9 q}* J `$ C! ~; D9 _- S
};
! Q) f- E( |6 k9 Cclass CInventorySort
. h8 H4 p" j9 |) a{
7 H/ Z3 e% A1 k2 }public:2 ~! z& A' a& X5 r
CInventorySort()* |+ [4 }, m* T% O. @
{
+ G3 b2 p% A4 H, D6 v2 n m_dwPos = 0;
2 ?' ~: o6 e+ Q7 b: M* z) }}; I0 f" h, W9 h( [8 p9 Z! l
~CInventorySort(){}
8 F+ {8 U3 V$ O2 N( b6 bprivate:
0 b. E* Q! Z2 N' H _8 KsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 z5 B" E3 n$ P/ d2 MDWORD m_dwPos;
: S! @9 ~" h& @7 Z8 W5 k# j, Z* kpublic:
% i: |; ], \5 ]6 K( l. x8 M' ]void Add(BYTE nIndex)
, e* a: O& i: f{
. j; [) s9 K. d. T9 C) g/ x n if (m_dwPos >= MAX_INVENTORY)
* P" q3 J& Z0 H" D8 b+ I3 V/ e {2 H$ P! i0 J! V3 K
return;$ `1 z% Q% ]- x4 e$ U6 P
}6 l; U: G8 J$ `/ ~& f1 l
m_Item[m_dwPos].nIndex = nIndex;
6 A, E0 e; | m o, K" [9 B m_Item[m_dwPos].dwId = m_dwPos;! G/ i' F$ Z( W! I+ Y
m_dwPos++;! k1 @4 j7 p9 q$ c' r- L& y
}
0 q; p7 H" y) c1 n* z0 f& MBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& T z; I. H5 p! W
{
. p8 [) K2 O" J: r. d. s$ R6 ?/ b for (int i=0;i<MAX_INVENTORY;i++)
" z& W) n$ m- e, V; R {- I' L4 s: F9 X5 B9 _" P
if (m_Item.dwId == dwId)6 ?) K6 r2 {; k+ G% ]4 L
{9 T) L& n1 x" p# a
return m_Item.nIndex;& B" ?& X! P0 B7 L# d
}
9 V2 V! |* B8 _. c, N! a2 H }3 J; s, y+ G3 j ]9 n) S2 A
return 255;
0 k) l+ ?' E9 B6 T' h2 {$ J}9 j9 I1 r8 w1 F# `! T8 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 U0 f" t' y" L% ]# q
{
: D7 J$ F2 J! A, ] V2 {3 g BYTE nTmp = 0;# f6 @) ~ L1 @2 A3 x
bool bDest = false,bSrc = false;
8 U+ Z. B; N1 @9 s" {& @3 C for (int i=0;i<MAX_INVENTORY;i++), m+ v* k3 e% K! {/ p" u" s
{% R, \# Z& x( y4 v3 e
if (dwSrcId == m_Item.dwId)
5 b* z: M" s' z8 e; Q {! @7 p' J) j: p6 o
//id相等 则 改变对应的dest和src5 c) V1 }- L& A9 o: N1 t7 { i
nTmp = m_Item.nIndex;: c2 i& c8 V3 m) L
m_Item.nIndex = dest;
3 O A! u* J5 `% d }% w, c: T& g+ l7 b' j2 F: D
}& ?4 I* H. N; @) I8 \# y
//临时数据保存完毕,交换开始+ P$ R* l! D; [1 I2 C8 L
for (int i=0;i<MAX_INVENTORY;i++)
4 m7 G S$ s! }5 j. C {
$ V- L# J. d- r) c, Z4 p2 d if (dest == m_Item.nIndex)$ O9 `4 B- G$ I* V9 l+ C& F& B
{
" G: v4 D2 n R0 I //id相等 则 改变对应的dest和src, Z; B t9 [+ j& Z2 i- p* K
m_Item.nIndex = nTmp;, `3 w" K2 J* j' t
}
8 x6 t5 E% B$ i" Z* J }- W) b! B4 ?/ \6 F0 W
}
7 S# h3 j- W. C! S E};$ Y1 d3 p- R) w0 p2 b/ \' a) M; _
-------------------------------------------------------------------------
7 J+ ~. ]( E2 _" t+ i- b0 g7 B7 J* u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). n- s* H( l$ |. X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& A+ C* r- e2 e9 ^5 L/ t& T O紧靠其上添加:
; E0 l5 Z6 N, G: |( [" cif( pWndBase == &m_wndMenu )
4 {7 O' M- Q# o7 b6 f{3 ^+ D9 n) C2 j9 P
switch( nID )
o/ M. d8 Z! F {
" q- {1 |4 H& L0 [1 | case 2:
8 \! z" @8 m' F9 @/ z# } N {- b- B6 C" h2 c" l- z, S3 z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, K3 U X+ O1 u( J2 x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 b9 L; l0 h1 L3 K
{2 o( v2 _) x. U( B7 Q
break;
2 l" H# x3 `8 [( }) X }0 h6 S* e: P% [9 ]+ ]6 b4 `, g
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 n* \' H% ]5 ~! ~5 ]6 @; H- U' T
{
$ ~* a# |: \4 h2 ? H# ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 Z% {# A1 O2 Q% A+ U7 @
if( !pItemElem )
8 F2 M$ X5 S3 I- C continue;
' e+ u+ e/ N" C2 _! Y4 w if(pItemElem->GetExtra() > 0)% A( i2 p! B# q3 t1 j
continue;9 Q6 Z: V( s# z7 W+ @
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & k T @: Q8 @+ e3 Y5 d
continue;
% ]+ f8 m$ o; O6 g8 _$ E# o if( g_pPlayer->IsUsing( pItemElem ) )/ _8 ^# O- J$ [& g
continue;
. k8 |' X, w4 ~: O if( pItemElem->IsUndestructable() == TRUE )( |1 K( g6 Y' R3 w6 K- m: K. O! J( V
{/ X+ K) F6 \9 W4 H
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 o f ?, C Z7 H3 U% ~+ I: } continue;
# j% {& H+ ~/ e+ P* R }5 d* D& a$ i, z H* T5 {
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 ?2 x! A$ n/ L' s5 ^$ Q
}
( F! J# s; `: I( O1 n5 F break;5 p, O7 K) @% V0 t0 o3 \
}
) y, S/ m1 q P2 u& y* [; l case 1:# V4 B# T% R7 T& E+ B8 `2 r4 [( Q
{
: b2 h7 x" @& K2 u) A/ D. Y1 @ //整理背包9 T |# P, Z5 T3 [2 q
//////////////////////////////////////////////////////////////////////////" _5 F3 N& a6 o/ `2 H h5 j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 [8 j5 `3 [1 |& i
////////////////////////////////////////////////////////////////////////// E, S8 H& Y. \2 z% Z7 q
//////////////////////////////////////////////////////////////////////////- d7 R' ~2 x4 Y3 y) y0 c
CInventorySort* pInvSort = new CInventorySort;# ?% r$ o& x! {' H5 c7 J
vector <sItem> vItem;
3 o- n$ D7 i* L vItem.resize(MAX_INVENTORY);//初始化大小5 p( V9 x* Y$ p
//////////////////////////////////////////////////////////////////////////
- a7 ?6 L, h* K* _4 S. B //填充数据
+ ?6 p7 }' t4 G3 |. k' @ for (int i=0;i<MAX_INVENTORY;i++)) {$ M" q3 Z) O2 \) S' _
{) M4 x& P! g, p9 |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 F" I+ v4 n1 N$ c# `
if (!pItemElem)7 l8 j9 W }! h
{; V0 }- ~; v) t/ d( V
vItem.dwKind2 = 0xffffffff;
/ A$ p* |6 Z0 I7 k. E4 O/ V vItem.dwItemId = 0xffffffff;+ H* f8 u( U5 [0 y
vItem.nIndex = i;
9 }/ F4 u: M9 p7 c, B }else {: d7 H' F. D% J
ItemProp* pProp = pItemElem->GetProp();4 b, S1 C( F# e- ]; P# `# n
vItem.dwKind2 = pProp->dwItemKind2;
4 I' i" ]) B( Z1 Z, T vItem.dwItemId = pItemElem->m_dwItemId;
9 W" X8 \# F# R vItem.nIndex = i; b B6 ^! _0 @# {! d) d' Q
}
" A1 [+ N" N, {$ D1 B //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 k6 K8 u, f* x8 U
}0 r2 W% ~- ?- _# @3 x; R
//////////////////////////////////////////////////////////////////////////7 w, o& a! R( E# s: r
sort(vItem.begin(),vItem.end());//排序
2 \# u$ `" ?9 h" E! Z# T4 w! { //////////////////////////////////////////////////////////////////////////1 W( p. g+ c7 e: a$ v2 s
//交换
6 Q+ l) W' b5 @! \- O$ V8 D for (size_t i=0;i<vItem.size();i++)
7 D& ]4 y6 W2 @( ]2 A! j {
* \' _6 k/ N% t7 W //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 m/ A1 I0 c8 c2 G
pInvSort->Add(vItem.nIndex);
# u# i4 {: e7 D4 o }
) ^# w! Q+ o5 q# L# v3 [. \; o R BYTE nDestPos = 0;
# r6 R2 Q% Q0 m9 q5 K% k; B2 F for (int i=0;i<MAX_INVENTORY;i++) p5 f6 s; C9 u$ q
{
! A6 ^; X8 D8 H i1 m- b% o% P3 A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' u0 @2 V6 E$ r. m- U* A& o9 ? if (pItemElem)
! R0 J* x6 {7 d, l" z {
. f; B1 E, z) K1 |( { if (IsUsingItem(pItemElem)); d' F$ { J. _: O! X
{! V$ R* w! L; s$ T) Y6 Q
//这个位置无法放; }, L2 H; C3 l! T
nDestPos++;6 x. o3 e. \! }% ]& q3 d
}3 k/ H& c$ k4 @. h* S5 P
}: |; c, b' o# A6 W
BYTE nSrc = pInvSort->GetItemSrc(i);
: {7 M8 C0 s+ x" b6 h pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) G9 [$ X0 `8 C4 n. K! { if (pItemElem)
) A6 D3 Q- t# _# e" x' O" I {
) o' h* O. R9 X if (IsUsingItem(pItemElem))5 { U, {% x4 O J2 b* Z
{
$ w- v- @% X8 Z% v0 Z! _ //这个道具无法移动,跳过
+ O" z! V1 x1 F0 E+ E& j continue;" y+ J4 q; E* ]
}! r+ M9 J) [+ b/ L
}else{5 B8 ^) {* b0 v% Z8 m
//空位置 不用动 h% k D6 [2 s0 P# a
continue;+ r3 J- ]4 P9 `' B& i
}
! c1 q' a+ y9 {# p: h //////////////////////////////////////////////////////////////////////////. i7 c5 P& h: O& l6 Y5 L1 r* f
//开始移动
/ k+ N3 n! o1 _# j' T6 Y2 ` if (nSrc == nDestPos): `) T8 n# u/ a
{
% `; J8 X, z( V1 }) s- o //原地不动/ o7 y% m& {$ }% H$ a
nDestPos++;
5 i$ x p( w+ ?+ M continue;: `# { S; U3 ?1 Z3 s# e: Q$ O3 ?& W
}* F' X, M& _: L( v
pInvSort->MoveItem(i,nDestPos);
4 n/ o( P- A1 b+ x/ D; P g_DPlay.SendMoveItem(0,nSrc,nDestPos);' [, d d( J" a7 I' l I
Sleep(5);
: S3 o& j2 q# G/ @0 f: H //Error("移动 - %d->%d",nSrc,nDestPos);4 J0 b {8 L! t- o6 ~- ?
nDestPos++;: B3 _! |& t8 {9 d( L
}8 i! B1 g* L+ b; q
//取第一个元素的信息
- M2 t( ?/ ~! f /*& g Z9 _0 x' D1 i- C. T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% R' t: V) l6 |+ g5 Z
{
! g# I0 n8 O% u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' q# j. G8 m. D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ r) ]" q( l7 R9 ^) F! E0 j
}3 Y' \3 F2 D2 B2 d" [8 s
*/' ^( y# I: A# I- z: i, `
//////////////////////////////////////////////////////////////////////////) C6 j/ O3 Y! p v6 M, x& `) i
break;
# O0 |5 S- ^; w: H# p. M8 O }
+ b$ X' C1 B% r } # m0 U) n1 B7 ?8 I8 |
}% Q$ |% E; F; ?% {
m_wndMenu.SetVisible(FALSE);/ Q, h9 _: \+ T3 [# B1 b# p+ w: }
* j1 k1 h+ {1 m/ y Y3 k k--------------------------------------------------------------------------------------------------------7 g, y- l; Q2 b' W b- A
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); N0 \. r1 u4 u' W
{ g5 h& O7 @' o6 f! l9 q5 J3 g; F$ @
BaseMouseCursor();
6 g1 o- d r; O3 s% V8 w2 p}0 e3 O& b9 h) B, s
在其下添加:
$ a1 k$ V2 T# a) X2 @+ avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 t3 n% \) w0 A( P# @) j3 C
{2 C" B! a2 W- \
m_wndMenu.DeleteAllMenu();
" R6 v. {/ ^& i6 y4 u Zm_wndMenu.CreateMenu(this);" w6 X4 @: P3 E+ t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
v2 {& h d+ P! \6 @2 |9 T; b3 p1 |6 {( l0 D9 c
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- U! z. `# A B9 n9 e' e{* f* |# V. i$ p$ W
//P以上级别才可以删除所有道具
' p& P- R+ Y% p m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 M; V: P }+ J, \0 F
}3 ?, X6 h$ p% n4 F0 R
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- U% Z! p# m9 z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! Z4 H, Z* }9 Z4 _' ~- E( Fm_wndMenu.SetFocus();
( x) i5 x* d5 [4 P$ w) r}
: n/ e# @8 X: S2 v: p------------------------------------------------------------------------------------------------------------
5 \3 r+ B* m, d* x*************************2 V' N( p. ?! ]
WndField.h文件
* ^5 x' m% `5 D. k*************************
! T) x% E! B" \- B搜索:BOOL m_bReport;5 H- n6 l( ^1 a7 _# E/ U
其后添加:
, l1 C) q" a. e7 L0 ^8 ACWndMenu m_wndMenu;% I1 K/ M) m' Y, D, n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: @; P0 N5 T _& Y
其后添加:
5 ]. |; Q# Z( c2 Ivirtual void OnRButtonUp(UINT nFlags, CPoint point);
" Q. O; z. z T# D0 f) d: z( i* z' Q5 s
- ? J6 n) y, E: F+ J |
|