|
|
源文件中_Interface文件夹下WndField.cpp文件$ ]5 }' Z3 H0 l/ V9 j4 U
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& j2 ]3 h+ g, r( F4 D
8 `% j0 ] V% x( e( r' Ustruct sItem; G5 D- }+ N- b
{
* X5 ?' n& W8 k! x7 Z6 JDWORD dwId;- b' o, ?9 d/ J' @" L# ^
DWORD dwKind2;* r" a, F! E' ^* R% U+ u
DWORD dwItemId;
7 r8 T- M1 ~. q5 G! SBYTE nIndex;
' q4 T6 t7 R& Q3 m, a3 {- GsItem(){# F# y% z7 G% {/ L( |4 }" s9 r) |
dwId = dwKind2 = dwItemId = nIndex = 0;6 ^7 Z) ?) v; a2 h3 o
}
9 H7 z( Y& x' D" e: e' |# R- vbool operator < (const sItem p2)4 _' z \3 Q" H( b( G1 P3 M$ l' d
{
" y1 k4 {3 e+ E/ [& B; ^ if (dwKind2 == p2.dwKind2); O$ x* p+ I5 m: q, k- J/ V! h. r
{
6 j/ ~1 J! X$ s* S1 W! c' H return dwItemId < p2.dwItemId;
. {7 ^5 ~$ q3 [/ o: \- X6 r4 { }else{
5 O3 m" {% \/ p9 K$ s6 Q5 D return dwKind2 < p2.dwKind2;
. `, R E: M" j }2 f$ K- P6 A7 j# ]6 m+ \1 u' E* g
}' X9 u# \+ Y9 | x% ?
};; r4 s0 ^1 G1 h
class CInventorySort
0 w" z6 e6 f# A( H{
) t6 W6 ]- ~" Q& \/ fpublic:
% I0 R% f$ o0 u9 n3 x& H5 ~' SCInventorySort()9 x( ], ?0 h& l2 U
{
4 p! F: K' c% W# T* i) R/ v. ]; p m_dwPos = 0;
) z' t$ }- `& k. L& X8 {* n6 E}
6 ^) {5 ~/ x* O, d6 ?2 |, s~CInventorySort(){}
& b) E |6 e2 h) E2 Bprivate:2 `5 U! o$ ~5 u5 c2 J
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. Y* `- H/ e* f% }3 K3 l% N+ X- G
DWORD m_dwPos;7 j# Q; o, B" L) |5 X
public:
- }3 p' @1 t! c# k! T' kvoid Add(BYTE nIndex)/ H5 j" r; x" g, {6 [& k
{
% R$ X# N3 D6 e8 {. L' f: a* P if (m_dwPos >= MAX_INVENTORY)" J: h$ p( R5 X, b& q7 n
{
! i# d. { K( \ return;* ^7 u" E0 X' {8 }( x. n8 P) f3 Q$ a5 P
} A6 q3 B7 _; b# c( d
m_Item[m_dwPos].nIndex = nIndex;
% I$ P2 e9 `7 d! z" o m_Item[m_dwPos].dwId = m_dwPos;
. A9 u9 s7 ]1 k m_dwPos++;2 O) d# W4 f* j! A a) W ]. q" }
}
' |6 k- _+ \$ u2 UBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 c& k% t+ C$ J1 T{* q( E* K8 n) c/ A3 l
for (int i=0;i<MAX_INVENTORY;i++)7 R( c ^; I9 g6 s7 m
{0 ?' v6 z8 m* p( h# H
if (m_Item.dwId == dwId)
; J- b( W9 k0 v8 X {
: z% {# h, ~: |, G return m_Item.nIndex;' Y- h' T( n& T9 s( U9 [: a
}
2 r. p/ k& [& h8 {" K G }
8 J$ h1 g4 `0 c& @6 d return 255;% O! U" e7 O$ T, \
}2 G8 V& W0 @. ]0 \$ f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 c: x1 ~4 q5 U& @2 H4 T/ h
{
3 r- U# t0 {% T" P% O# ~* Q BYTE nTmp = 0;
* K+ J$ e& B8 ~$ P( z bool bDest = false,bSrc = false;
, D8 F9 V5 R/ j- Y0 A( M6 T for (int i=0;i<MAX_INVENTORY;i++)
; g$ ^7 K+ v/ R3 A {" f2 q/ j& K3 F2 O
if (dwSrcId == m_Item.dwId)+ f& ~ z. ^* p
{
( `) E2 @# I, E. ?3 \" {& x4 F //id相等 则 改变对应的dest和src8 \7 r2 Z: z, s) E
nTmp = m_Item.nIndex;7 s1 `/ p4 q T' Y8 }% F
m_Item.nIndex = dest;' Z- n* N" `2 y. f' V, {
}
# w9 q& `. o. \+ F! K9 O& U7 s }
; L& }7 c+ R9 w) c) q& l, G4 l //临时数据保存完毕,交换开始
) F/ h5 H2 N2 _; Y- g$ _ for (int i=0;i<MAX_INVENTORY;i++)- o) q% P+ C. }2 m0 Y- J
{
9 M$ |% R* d6 C6 [! T# w0 S v% k if (dest == m_Item.nIndex)& t r8 I+ }- d2 t$ L! L5 s
{
5 `$ P( @% o3 c+ h: K# } //id相等 则 改变对应的dest和src+ t* S; i1 g+ @% j1 ]2 {2 k
m_Item.nIndex = nTmp;$ W% G( W' A# M% B* M
}
& ?$ B$ o. o. I+ i! n; T, T }
' [( L- R1 h0 O$ @6 m}
( m+ J5 G9 Q% K! I};
% J( T, t) Q3 k6 T2 [: O1 ]-------------------------------------------------------------------------
7 i) T+ R, @0 d: W$ O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 _, A+ s1 j0 x4 V* A W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, z* ~# O* Y8 V2 m: P) C
紧靠其上添加:
5 u% [) S F" S3 F1 oif( pWndBase == &m_wndMenu )% `0 g% x; P' v" Z
{
' D# a5 I! p' F switch( nID )/ V( H2 M6 e& ^/ {0 q2 ]/ c
{: u' m8 ^! x9 ]) |( b
case 2:% L" O, M* k7 |* I
{
% u6 {) ^! ^$ y4 z! ~ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 _0 O: D5 y7 F: F: c
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% o- D0 e& j6 B6 _. l {
{ R5 G% z3 f4 m& X ?* D3 \
break;
7 @5 U- p5 A5 F% m) p1 _ }
8 C1 h- A' {7 s- m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): N+ h& C4 Z& l' `
{; n) X4 k: e: N# F- `* A+ ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" `8 A" D2 Q5 h$ ~2 I
if( !pItemElem )
3 L! e" I0 b! s# U! H continue;
' V. P ^& R" K' |! { if(pItemElem->GetExtra() > 0)7 M5 k3 P5 f9 q8 O2 ^/ }* f
continue;. C7 p K3 ?1 H8 p* ]3 v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 ^& C1 r7 ~9 J0 c
continue;
9 a3 J {2 x: |& n+ \$ ~ if( g_pPlayer->IsUsing( pItemElem ) )
) D( J$ b8 a6 g/ F5 p continue;
. S; D5 u+ x7 D; z" Q if( pItemElem->IsUndestructable() == TRUE ) p: Y: B) a: h5 T
{
- F$ s) c8 }( q: E+ ?2 v g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% |% i) I0 e% V# r' u1 q continue;
4 O% N4 l+ v+ W6 a. n+ j+ k5 w }4 j% c% {6 N4 y o4 Z3 U1 ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; I9 g# M& `# v2 ^( s, f: H }
$ y; ^0 m* i* U: g break; ?7 U# K+ R7 W$ s0 G
}
! I4 k' `. Y8 O, D0 i, i case 1:
4 D) I7 j7 K: \0 B# P0 O* Z$ L2 Y {
# S" j$ H5 b8 g //整理背包7 f2 i9 m6 y6 Q0 x: Z" E
//////////////////////////////////////////////////////////////////////////
5 `$ y9 L" b" E# ? //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 v& v- [: m& s //////////////////////////////////////////////////////////////////////////
" _: S, d) k0 s& [7 h //////////////////////////////////////////////////////////////////////////
9 W- B, {1 o% K+ b1 l0 C: ? CInventorySort* pInvSort = new CInventorySort;7 r' C& i+ \" [. B5 n" i/ ?& f
vector <sItem> vItem;, Y+ O- z7 J! G5 ?
vItem.resize(MAX_INVENTORY);//初始化大小
; r8 i) ^% N- V# U4 a$ x$ s1 I //////////////////////////////////////////////////////////////////////////
; ^" Z8 w0 ~* T+ T //填充数据- x6 d5 J; R9 V/ n/ b# f0 l" m
for (int i=0;i<MAX_INVENTORY;i++)* T; a* E( v, D Y
{- t. ?4 [' }$ \' K- t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 r$ U+ Q3 E$ w% I! e if (!pItemElem)' \/ r: K, X5 N& c
{6 E: Z# r+ O* Y/ E9 I
vItem.dwKind2 = 0xffffffff;
" X7 u) g$ K4 u% ?0 g+ J vItem.dwItemId = 0xffffffff;3 A# `8 D0 n' Y1 m
vItem.nIndex = i;
2 X; J$ @+ J, ?1 j* M4 P }else {. |" i' P+ b! c' d
ItemProp* pProp = pItemElem->GetProp();5 d+ k# M; P* R/ V% q% S
vItem.dwKind2 = pProp->dwItemKind2;
: t+ q$ t) E& D7 q" m" l4 R4 w$ M vItem.dwItemId = pItemElem->m_dwItemId;
2 W+ Q" b) A: A( P5 D R3 D' K) s vItem.nIndex = i;6 w) N/ w# b6 t9 t* Z% z
}
' m7 x7 U* j/ L //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 X/ g4 H) ~$ G8 M
}; H- I; Z: ^# i- x4 x6 s* G8 v
//////////////////////////////////////////////////////////////////////////+ U ?; ^) ^ r# D0 m- i
sort(vItem.begin(),vItem.end());//排序
( h% |/ m. L H3 p //////////////////////////////////////////////////////////////////////////
" p6 B% H6 R. Y% U+ Z5 i //交换
. S9 B$ g& F1 m+ q for (size_t i=0;i<vItem.size();i++)+ W+ x, i' m" b8 d l( b6 r
{' M' @; D! ], u4 n+ k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); F$ n& Z3 l4 O3 W: e+ G
pInvSort->Add(vItem.nIndex);
% M7 ` N! E8 L, M* P) D }
0 }2 E& y8 q9 A' d2 @ BYTE nDestPos = 0;
+ P R! a3 g' G& w& O7 {% o for (int i=0;i<MAX_INVENTORY;i++)( b/ z! X# x' V- \( |0 k; [( ^# J
{
1 n3 ^# c' f( ?( ^9 O$ ^& z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* R* H J7 N4 ]6 }
if (pItemElem)
% a3 O/ b; m4 J6 B% N {
1 z2 }3 q; d( u2 R if (IsUsingItem(pItemElem))
; e( Y9 a8 f5 U {
% z1 B8 m; A+ W l //这个位置无法放
4 z) g b: r! y( n( ]/ Y nDestPos++;
5 I- f9 h$ M& d+ {/ S/ W3 J+ G }. b! C+ w7 N# @
}/ W) z% Y: X* D6 j
BYTE nSrc = pInvSort->GetItemSrc(i);+ _) d% O) [& d8 p2 J+ Y1 X4 W& }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* K7 r* `. V" g m3 E# [& ~$ e
if (pItemElem)" x- ]9 w7 l% f( V7 ~2 M2 L* S
{
7 @2 C) i& e% O: @8 [. O if (IsUsingItem(pItemElem))
; w' N- i. y5 f6 P1 d) B) ] {- w2 K. D# \. d& p
//这个道具无法移动,跳过3 ]8 m& k( g! { h& A
continue;
) _0 ?2 f. @5 ^( x8 M }
& K0 [& E; m" x- ~1 y$ L3 t* | g }else{0 K/ W" W& L0 B/ d! b9 U
//空位置 不用动& z# r6 O) ^: {% s
continue;$ K: Y2 O1 m# i/ Z! h
}1 m& F* s( E. w& I" B% [0 i
//////////////////////////////////////////////////////////////////////////
& h" ], u! b( E' B: p, N4 y+ H' D //开始移动
+ n! c8 D9 i) N: E9 x5 b if (nSrc == nDestPos)
: L- R, S0 S6 s2 P0 X% f' h- i {' U) |' B: S2 R' D4 x6 X
//原地不动+ M8 h ~2 N! H- q0 K: G! E
nDestPos++;, F5 K4 L4 Z: ?4 Y. C8 K9 ~+ L" j, G
continue;0 F- I* K9 N/ b& H p0 w/ z
}6 y- o& ^6 e( d' t
pInvSort->MoveItem(i,nDestPos);( W" a3 G1 I( Q; P' Q! U% j
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* f, o+ \9 I( M9 E8 F Sleep(5);
# Y, }' Z7 q( w2 W# U9 @ //Error("移动 - %d->%d",nSrc,nDestPos);
; l1 w8 U1 x3 I5 G3 b5 m. J! ] nDestPos++;
8 V* U! G3 ?) M }
/ c4 d* L1 H @/ B //取第一个元素的信息' ?& E& |& U; U3 @3 k7 R! ^" ?
/*
! l* T3 T! |8 i$ u2 @7 {0 P/ Z% O if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), I5 E; h: O" t0 G8 h; f
{
* r" S% U: d) d V9 O Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 Y( R! N+ |# @( c6 @
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 K# u/ `1 H0 c: F! U, N N }
7 x/ \! O* L7 I; Q3 g( E! s8 q A. ` */+ j Y1 c% P: F# ?2 w
////////////////////////////////////////////////////////////////////////// ]) K, a' p7 C: @
break;
! H. D' W% T; C6 U9 m0 P4 _ }/ n. I) b5 O$ y& ^
} $ l1 l, Z5 r5 W1 @
}/ g7 b- K5 v% l. _7 E7 U2 k0 N
m_wndMenu.SetVisible(FALSE); g" M4 H+ [) E& v# n
8 j' Y+ ]" \9 S) C5 g--------------------------------------------------------------------------------------------------------2 h4 Q$ C+ Y6 w0 Z: X( H& Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ d) l" i( s3 g; m1 m{
- s6 g, o. {. L2 Y6 L! W" gBaseMouseCursor();
% n! G* w% ~( S( ]& y* v}
( t4 D5 @% K6 O8 j5 _在其下添加:
5 C& H' E: }+ X0 \, \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 c% J O+ E/ p9 ^{
: {! O. l3 @ c y& h Zm_wndMenu.DeleteAllMenu();
# ^7 A, [% H& d2 l! V9 o, Gm_wndMenu.CreateMenu(this);
6 k, g/ I8 s) v8 S. B y# bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: |* {- z" y- a4 e
+ _: x% m1 S0 R+ k' s# k6 ?+ o* cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 N2 ~2 Z- l! o
{1 n& S1 i6 r1 V3 m" w) J- j# k% h) c
//P以上级别才可以删除所有道具; @/ ~( G. Z0 _! f% @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 O, k* T1 u4 J) M; ^/ J' |}. R) s" K; }& D7 |! f$ q" `- h
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. D( a2 `; \+ u9 I Xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; Y0 w0 N! i, G" M3 @ Im_wndMenu.SetFocus();7 j* w7 k0 ^3 \% x6 `
}
, s4 B u+ R2 @6 z------------------------------------------------------------------------------------------------------------
1 @6 N2 H% x) x# h- o*************************
6 v1 p' Z5 |- {- yWndField.h文件* X& N5 F; B2 d. C, n6 g
*************************
/ f9 w' C2 u d3 q* a搜索:BOOL m_bReport;
7 V: g+ N9 Z$ `" U2 x其后添加:
/ ?' Q" F6 C; q! L+ w3 O1 u* a KCWndMenu m_wndMenu;
" j( R) X& l% G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" u: g8 u, y$ ]
其后添加:1 p$ F. z b* O. X
virtual void OnRButtonUp(UINT nFlags, CPoint point);) l9 }( _) f/ Y* J
1 \2 f0 F# r ?) b
9 X3 V. o! K& u$ g |
|