|
源文件中_Interface文件夹下WndField.cpp文件) J% z6 U+ g9 y. C1 d) b+ _. f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 w% {+ e0 h' Q) {) i8 ^
& q/ I/ p: ]3 v0 W# m. zstruct sItem
4 P. I3 ?% n9 B7 D{0 J" H; o' H q s4 S b+ |
DWORD dwId;0 W8 }" ?' ]; Z7 V+ q# v
DWORD dwKind2;
3 g2 e* q$ ~. gDWORD dwItemId;
1 c' f$ ^- c B5 q, i: rBYTE nIndex;5 \* q- i! L. t/ u- O, b; }- M
sItem(){
. x6 S& t Y$ b; f5 r' f$ y8 P dwId = dwKind2 = dwItemId = nIndex = 0;5 L; [, s2 F9 p2 W/ R; J8 E
}9 b W `" x; h; P, X6 m8 U
bool operator < (const sItem p2)
. f/ P! y. P+ _{
) P5 i) \. p6 S4 ^" R6 i if (dwKind2 == p2.dwKind2); P/ X6 S5 q# r8 M# o
{
0 H2 r6 q; e, S; @! y; C6 o- d! a return dwItemId < p2.dwItemId;0 k3 ^! ]3 w) ?5 P
}else{
" \$ F- o0 m# L/ E return dwKind2 < p2.dwKind2;
' k* N) i) r6 }$ _& I }* z5 L P" u- _# @/ P' w
}5 K! G' o' |! w5 _$ U% |3 c+ t
};: @3 b, T5 c, \9 \
class CInventorySort
" V' K% n' f7 ^% ?* P, k{
l' r3 M S3 u! u I9 Xpublic:
0 C, E( Z l% u! Q' iCInventorySort(). t4 I- n6 e* E2 X& b4 g( J
{
& i V2 ^2 g, @% Y m_dwPos = 0;
0 \! L3 s4 _2 O# P5 ~ f}. K3 O! G: w5 x
~CInventorySort(){}
! j" V/ a7 h" F$ \private:& ^% X" v9 I. S+ D. M
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; G" R. u8 i ^; _DWORD m_dwPos;9 J& I+ e6 E7 C! [
public: ]* @" x g8 p8 ?: S
void Add(BYTE nIndex)3 U n3 F$ @3 S0 u$ W6 i) J3 }1 m1 r2 o
{
; ~4 ]! w5 n4 v) G. [: g+ l3 N$ M. a if (m_dwPos >= MAX_INVENTORY)
, U) o7 e* s" ~6 U: B s {
; {# L7 G; r2 W return;
5 ~' H' g) S6 k' d. k }
6 ^/ p$ U7 Q# G& n8 `8 s1 `" l m_Item[m_dwPos].nIndex = nIndex; X% |5 r0 f& ] M, X2 s9 c
m_Item[m_dwPos].dwId = m_dwPos;4 P6 @, t" X* X# W Y9 | ?/ Q8 `- x
m_dwPos++;
3 S' {: ]" W! {" k& Q" f}
' D9 }/ C, c2 Q/ ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* Q+ f! E% B9 L; ` M
{% l; y3 u, L3 N* N
for (int i=0;i<MAX_INVENTORY;i++)
% J4 W* e: K6 e9 d, K- g& B6 G {% s s9 ]9 `( S# B
if (m_Item.dwId == dwId)
" U* \* N% n1 m" O0 {" y {
7 I4 D& J. {6 A# j; W/ M* c! { [2 L return m_Item.nIndex;( M: J4 X" y* X7 N
}$ P7 P \: \# Q' a) \: O4 y* N P
}$ ?' t1 g4 a' V3 q1 Y2 ~
return 255;
4 M2 @; g% @- H8 N5 o S8 T+ l# d}
b9 x9 I# y; |' O0 @void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 E& }9 ^. b& l1 d$ L{, ^" J' X) r9 M q
BYTE nTmp = 0;/ V! u8 c8 Z9 S4 L1 G( g% D+ ~6 }
bool bDest = false,bSrc = false;
) a, Z) G' l- w# e- q6 U Z y" g for (int i=0;i<MAX_INVENTORY;i++)
/ i# l+ c0 f& B: X$ k. t3 @. J {9 v. P* i5 `, ^9 w8 j. T
if (dwSrcId == m_Item.dwId)8 c4 N! t% Y$ S6 W) M! }5 u( u
{( ]/ h0 N, a6 i& Y* C
//id相等 则 改变对应的dest和src6 x# j1 Q6 j: e5 U! T
nTmp = m_Item.nIndex;" h( l- X7 _+ v* b
m_Item.nIndex = dest;3 x) u2 C* [* `& d& j; J
}
! I7 V O7 D7 a }
$ K! g$ l. { ]7 `, r //临时数据保存完毕,交换开始+ ~# C& L+ i3 k4 z! I" f" L
for (int i=0;i<MAX_INVENTORY;i++)
1 J G* ?9 O5 T2 s4 z {; {2 P9 Y c* {, x: f
if (dest == m_Item.nIndex)0 s. P" }5 [- ]8 A
{3 M- Q& L* I, N# f {& p
//id相等 则 改变对应的dest和src
$ u0 H O$ x/ q) W! K$ E3 n& e) H m_Item.nIndex = nTmp;
& O% I0 U3 C! _: x5 m }
J# Q! c" a. w3 q. a }
- R x! O& i" k}
0 s- o) c( m' D0 B% c. ?+ r};
. Z: d/ ]$ i- F$ S+ b-------------------------------------------------------------------------
; X- q' c4 A. H% B) h* T5 J$ L0 b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, o- d3 N% ^4 k/ @* n4 G' z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" Q" A# S8 g6 Q紧靠其上添加:
3 \+ p7 J3 H7 V( Qif( pWndBase == &m_wndMenu )' a5 _1 \% ?/ d& Y$ Y
{
1 o" r! }5 A1 K6 Z7 e! z3 R9 g switch( nID )2 K/ B( ~+ g8 t: a: {# p j
{
& s* {$ Z- R3 A' s case 2:
+ Y' W+ [9 H: j4 \8 u {
: m3 b/ S, S7 e( Z5 Q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 O& C* k) b5 T. a) W2 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). \/ i3 i4 e+ r, Y1 h" ]
{8 v/ B& C7 `& ]! Q- W
break;# e# w) S* W$ U! f# i5 K
}/ Y! _( C+ j" O6 Q+ M) I9 G7 t3 R
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 p7 q# B7 B3 E" G8 B, i
{
( _( a6 p+ c& \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); R" n) K J3 D2 A- U; N
if( !pItemElem )8 b0 B& }! {8 Y+ N! U$ } y# l
continue;
3 l/ h( X, I# c& V, V if(pItemElem->GetExtra() > 0)
* Q7 m- K: F/ r8 P) S' u* p( z) h) ? continue;
. |9 q8 _2 g0 C if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * N/ r( e( w ^ J/ a9 n
continue;
( u' r' j8 B5 A- B if( g_pPlayer->IsUsing( pItemElem ) )
) n1 U9 i4 U9 u4 B. A$ e continue; i- Y* z+ o2 D T, i
if( pItemElem->IsUndestructable() == TRUE )
7 K4 c; Q5 y, G {
2 B* M, _7 D" D, {6 K3 g' X) Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 w+ \( R7 Z& t6 _- v7 t1 b3 y2 | continue;
~) Y. B7 R* V9 F; \ }
! R3 w% p$ @( V; @+ c/ d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ [2 H" ^( g$ w3 Z* M; V }
. U1 H, G7 f8 L* n break;7 a2 B0 [. f) I/ {9 [
}' K! |2 x# u0 P. T
case 1:
5 ~, d; a" c- Z5 g! i7 Q {1 ^2 y |" N9 s
//整理背包
& @( ~+ ?' U5 _1 N4 C //////////////////////////////////////////////////////////////////////////* u& V; t3 q+ V: m5 T q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 i/ a" u, _* J/ L
//////////////////////////////////////////////////////////////////////////6 X& Y9 m" x5 b0 s( V' g" N4 l7 L
//////////////////////////////////////////////////////////////////////////
% x) j T- B1 L3 W& p; ` CInventorySort* pInvSort = new CInventorySort;
3 Y$ [% X7 |" k6 D vector <sItem> vItem;/ k9 P: w2 y# w+ n: |
vItem.resize(MAX_INVENTORY);//初始化大小
+ ~9 t$ ~% L! C: V, X+ ]/ y //////////////////////////////////////////////////////////////////////////* ~$ n2 C3 o; d$ s
//填充数据! z/ d& O& o# `% O
for (int i=0;i<MAX_INVENTORY;i++) l" M, v3 m4 L) \; y
{
! u2 m- ~& w8 `- f( [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 |# W) ^: y& ~7 v' ]/ z" J if (!pItemElem)
& I0 C. i. ^, `, ~$ I0 v7 r {
( b4 K" w. [) V" e) }9 C vItem.dwKind2 = 0xffffffff;) s1 i5 w/ u& A# d2 x0 R& _
vItem.dwItemId = 0xffffffff;
+ u2 k, S. d) p3 ~% f" ? vItem.nIndex = i;
0 F( }) i( T% g5 X. _ K, D }else {
4 i" S5 d2 l) A+ z- l ItemProp* pProp = pItemElem->GetProp();+ c! j0 ^+ J Y
vItem.dwKind2 = pProp->dwItemKind2;
. y& W6 o0 _/ G8 P vItem.dwItemId = pItemElem->m_dwItemId;
& r" F( [9 {4 ~ vItem.nIndex = i;
7 H: l) @) w- Z( p$ x. j }) m( B( C# x' Z( u$ `
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
N" h y! z4 v6 P3 G }
1 C" t, e; ]7 d$ t. W) m; R //////////////////////////////////////////////////////////////////////////
$ Q1 Z8 q$ [% G. V/ N2 u sort(vItem.begin(),vItem.end());//排序
7 q6 t$ F5 S. ]5 A6 p //////////////////////////////////////////////////////////////////////////6 U8 k+ {- G& I' U+ _# E L4 J s
//交换: M8 S8 x; R, ]+ ~; c! ^
for (size_t i=0;i<vItem.size();i++)$ u9 [ B: z9 W" ?+ z5 e$ |9 L
{8 A7 X. K& v7 F% c* r8 d9 l; M
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 M, c- }/ T/ y, q: @2 j# I pInvSort->Add(vItem.nIndex);& q$ L' a" |- p# @
}
# c4 h9 E' E! O: }8 m BYTE nDestPos = 0;
& W5 L9 W- u" @: h2 X8 ?8 R" p for (int i=0;i<MAX_INVENTORY;i++)& d: }4 r8 a) A6 ~( v
{/ k+ K# k5 @% k3 c9 c7 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 n* D# b9 y: b
if (pItemElem)
( W; F; j, r" K8 {) {# w {
6 a- @, Y6 [! V+ B4 k if (IsUsingItem(pItemElem))
# } y6 [( d! Q' _1 K {
# O5 |& N, X0 U% I9 |# I4 v //这个位置无法放
1 g/ z( E4 ~: X7 } nDestPos++;% Q7 a, N5 A1 F: C5 ^
}/ s* V* |3 x) J1 ~; m
}1 t- O* ?$ G, W0 ?4 m& Y+ _! \
BYTE nSrc = pInvSort->GetItemSrc(i);7 @: S- {9 Y! ^+ P5 l0 N( `4 @9 Z! i2 D
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 C0 F" I: ]9 k' b G8 t if (pItemElem)
5 o$ }( [5 [2 i [# B4 s0 w {+ _8 f* o3 O) y. Z
if (IsUsingItem(pItemElem))' m$ ^ l3 }( V k- K6 x
{# @- W0 C9 Y: T8 q* Z+ O3 g
//这个道具无法移动,跳过
) i3 B% D1 L# z6 [' k8 L2 C: d continue;
# J8 r+ r$ J) {7 W7 a9 G1 d' s }
+ r8 @/ s6 \$ ?; M- D }else{
% o2 G; Y. h# b z7 i9 S" b$ T, V( p //空位置 不用动3 T3 {4 \( ~6 w( `- o" r5 r
continue;
! G0 S( S( m2 P! M' v }
3 @& o8 q' F! s //////////////////////////////////////////////////////////////////////////
3 T5 W" j$ Z+ y //开始移动
5 ~7 {# o, v5 o# R8 M u if (nSrc == nDestPos)
0 R1 M" j3 Q" l3 W5 |; J& | {
4 r$ k. c+ [2 U( | //原地不动
# ^3 f# V. T9 Q, c8 {+ l nDestPos++;
+ g3 i0 e# c+ M2 B. C9 N continue;
5 g, w6 ^% g0 Y! k/ N6 {0 \ }
9 C: o, z) J/ g8 f, S* A$ z pInvSort->MoveItem(i,nDestPos);7 _! f* v9 M, X, ~
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 }* i9 g7 u# w0 s7 e' T
Sleep(5);% m0 x% y# B: b+ C- [0 O
//Error("移动 - %d->%d",nSrc,nDestPos);
+ Z8 M2 h+ q" L% ` nDestPos++;/ D7 [4 o4 N% f5 ]5 D
}
4 j( o) o/ p) f9 u4 g //取第一个元素的信息6 f# T1 P; J _. [; t3 @
/*5 @/ Q) i# g3 Q( l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ p0 @; S+ D, ?- L {. M8 w B- }: s2 w% V
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) P( j2 J/ ~% z7 p3 C! X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 L; ~( d+ k0 X+ \7 {
}
! f# j+ D6 X. Y t */
' i: g! A+ E7 M# Q4 X ////////////////////////////////////////////////////////////////////////// |! Z( K7 n2 x% c4 z/ M
break;
2 \* }' @" H; p- F }0 U) v. a5 | D3 [4 v* u
}
; ^/ L$ O/ h- o8 ` w0 Y. @}' Z w2 q O' T4 F/ |+ O
m_wndMenu.SetVisible(FALSE);5 `, F' W- r+ R. V- q2 i: A
6 y( w% Z R5 O5 j+ g( l( x
--------------------------------------------------------------------------------------------------------
+ y0 a7 ~& m ^. g6 @1 e6 f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 W# I8 |' M6 x- f/ Y5 U{
% V& w% `) V& Q- T2 @BaseMouseCursor();
9 C m$ D, V2 {" |8 k7 M; S7 X}
3 E" G; W0 m) X% ?0 v在其下添加:
. \/ N. Q3 d* _% ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' @% I( x5 W4 [: l* B# Z I2 U
{
3 a4 C5 l( n: M# p, u9 @m_wndMenu.DeleteAllMenu();
- {6 @1 E, d/ ], b! J0 B. \- }m_wndMenu.CreateMenu(this);
$ T4 ~9 s2 [' Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 Q* S/ z+ [- X! M/ e# |
8 u6 @3 t( y1 f; G) f, k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. f4 \& Z8 [4 o% `4 r4 N7 k. f{
0 t- |4 }! O4 J1 ^; E: A //P以上级别才可以删除所有道具) S1 J1 W2 W8 v/ k& S# h2 p% `
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% \- z4 d' H/ d: ^2 t# s2 K}
A2 C z4 M bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) i7 ]/ b; m8 Q* ^( n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 _. X4 R5 m( }4 |5 _! K
m_wndMenu.SetFocus();) p) P4 T" s" z& k' X
}
- R: u B: j% L% ~------------------------------------------------------------------------------------------------------------9 O5 L" _3 A% N2 W3 t
*************************8 I* @7 B$ i. N, [( i
WndField.h文件
& v5 l4 e: `0 c3 z0 d*************************
* N1 Q7 L; d' l0 Z) b搜索:BOOL m_bReport;
- x8 Z, g! a- o$ l+ B其后添加:! q- H6 b" I* ^0 E
CWndMenu m_wndMenu;
! J8 U' `/ ^3 b, t1 q4 `; q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 N$ z( [) f' P- `0 P$ S# p
其后添加:: ?: q7 B) Z6 n" w: X
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* o/ u" o7 h% e- U3 N9 Q9 X6 M) X4 @ i& T! ~0 Z L
' X) i5 T: ]# ]6 ?! s/ o& p, j% [ |
|