|
|
源文件中_Interface文件夹下WndField.cpp文件
' }3 E" k# f" |+ b- G( D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 c, F0 t \0 s9 { |* ^
' ]# s! e5 V: ~" |
struct sItem4 L0 z( l7 x5 S* o; x5 i
{
! R! |- F: l9 _: ~8 ^8 q& P: @DWORD dwId;/ y/ `) m! J4 L+ g5 F9 j
DWORD dwKind2;
) o8 t! |0 [- {/ F6 _DWORD dwItemId;' Y* K7 n! o; B: ]
BYTE nIndex;
: v9 J4 e, [ [ P) _. @! gsItem(){
( V- y/ P7 U7 A- E6 I dwId = dwKind2 = dwItemId = nIndex = 0;9 T+ B$ m! \# ~+ x" T; K
}+ l$ w2 {6 Y9 i2 C u- i6 B
bool operator < (const sItem p2)8 A+ Q2 g" Y3 G+ j/ g
{" \% k& {2 d' y, f* P+ f
if (dwKind2 == p2.dwKind2)
7 E- p2 Y4 `" D% a {
4 _$ b! h _+ Q return dwItemId < p2.dwItemId;
, Q! y& U6 `$ C! K' } }else{
2 q9 I2 v6 F$ f% Q. h+ b/ |3 m return dwKind2 < p2.dwKind2;$ ~! }. N! N& U% Q% S& N
}% Z( ]4 p' k. ? R
}5 H. C' u5 p, S& ^' p: U8 [: _: S
};
: N0 s$ p! |2 o1 a& ]class CInventorySort
$ C9 O, j/ q5 i9 }{$ C7 @+ c$ d: W; ^
public:" M$ J1 C) P/ n( L
CInventorySort()( w- V. A$ _: ?* b b1 q8 \, b- S
{
+ Z6 q1 H$ \2 ?' }+ _9 o m_dwPos = 0;2 q0 z, J! `# t) ?# D
}
7 |- M' U, R& K4 C0 S~CInventorySort(){}
* d/ @7 G1 E. d& L7 X5 w& bprivate:- q L9 i0 b1 a1 S! D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' {, i; h4 i5 m, w; H: j6 dDWORD m_dwPos;0 M; `4 b, H3 @; S4 p8 E1 Z2 x: W2 a# y
public:
" Y9 r% d& @- J' Z# h- S# v5 Jvoid Add(BYTE nIndex)
# a0 t9 V) _$ Q% u$ Y{
7 {# {9 x5 [5 x- b, P8 [ if (m_dwPos >= MAX_INVENTORY)9 P: K+ L* m8 s j1 n
{& N/ }5 T ?& C! q' R! K, s
return;
a' ]1 W9 b A; K5 I+ Z' `, F R }; a. s- X$ h* f* r8 q9 U
m_Item[m_dwPos].nIndex = nIndex;; \# K$ O! [9 E+ G" i% V8 R! g
m_Item[m_dwPos].dwId = m_dwPos;
0 G3 y4 h! R5 _1 P& H m_dwPos++;6 O& n) q! x+ g2 E
}" `' _+ c8 x; k2 r+ R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# H, }! _. \& O @
{
7 a4 o# n6 w3 g1 p3 n' f for (int i=0;i<MAX_INVENTORY;i++)4 K% [; i5 v5 q
{
1 ^6 }( z# X# j6 ]4 w if (m_Item.dwId == dwId)' {% M% Z* w9 u& D3 j8 `7 B# w i
{
6 A6 n+ |8 Q6 v return m_Item.nIndex;- E' n. d$ X; Q) e. _% G. S
}
0 `6 m1 I+ M. P Q }
- y- Z4 `. p: E4 g+ o6 x2 o. q x" O. M return 255;
7 Z7 k" B; K! V1 B$ p}
7 y8 k; A9 Y5 |0 ^ I" Y) K4 @void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 `* K9 ]4 C; _( G$ ^9 F- A{
; W- b+ a: t4 g BYTE nTmp = 0;
4 @; v) ?6 X3 u, x7 H7 W7 B* Z bool bDest = false,bSrc = false;
$ \/ ?% b$ v+ j& _2 M6 H4 K for (int i=0;i<MAX_INVENTORY;i++)) @0 V5 H) B2 N) d
{* \ c5 J3 u- |4 L! R
if (dwSrcId == m_Item.dwId)
4 T: q7 O2 Y, E {
|$ l0 n8 \6 D //id相等 则 改变对应的dest和src
' z4 I ]' F' c nTmp = m_Item.nIndex;
; F# m8 ?) ^2 U% m( q3 H2 r2 V m_Item.nIndex = dest;6 E; Q( }, p5 j8 f3 m* z6 M5 B' \/ \
}
, m# Y( Q; H% C }
$ k& ?1 d2 _4 ]7 Q0 |( k //临时数据保存完毕,交换开始7 G* e. t, d: v6 ?& C8 ]/ Y4 ^
for (int i=0;i<MAX_INVENTORY;i++)
! n& ?" Y5 u R {4 }) j: R' X9 q2 L
if (dest == m_Item.nIndex)- T$ Y7 k% g; A$ O
{
. h! {' \5 O% j4 c8 c //id相等 则 改变对应的dest和src. ^! a2 P& |; t6 U
m_Item.nIndex = nTmp;
0 x E: g( b3 r/ }4 \+ Z( Q2 |9 c }! w; G8 h. V+ }* ?4 a& I' T
}
3 {1 [6 v9 f3 G/ `}
1 `* }/ A {0 D# M1 ?};% A% e' J2 {* x: L( O+ Y7 L4 a
-------------------------------------------------------------------------
% k5 l4 |/ \2 J' B2 z% g) h& Z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 Z' a4 [, y3 A$ i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' n7 ^2 v- r! f" c, Y# W$ S
紧靠其上添加:
' ]% J3 I8 V; J2 C: r$ X0 U, L+ h( rif( pWndBase == &m_wndMenu )! U) C: u0 B( @+ M5 a6 j; e
{
( I3 G. v L2 f: G% t switch( nID )3 t, \, f. n$ T- d7 l
{7 B1 a9 ]1 S$ R/ z9 M
case 2:9 T; e$ r0 S% o) R2 Z
{6 z7 y6 \8 ?" e! N' W5 ?
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) i9 F: t1 F* A1 l
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 L) { I; |% {( y. i {9 h3 R+ v# X, w; s
break;
8 u6 Z; S- e3 G }
* U' J9 G4 M' i" H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 z7 J. P. q7 \/ H, N8 b {
. z! q: D1 Y; p- N {9 Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ D# {( b8 l7 K) M, G& G5 [
if( !pItemElem )( {/ g( `; L2 g
continue;
( G( Z! Z5 ~% W* n0 w# g if(pItemElem->GetExtra() > 0)
7 J7 o0 K; X9 l: u) G/ s continue;
. d: G: C2 L7 m8 G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 x1 i. V; n2 p
continue;
' w! W. d. [0 Z2 Z8 Y if( g_pPlayer->IsUsing( pItemElem ) )
0 |5 M$ |& x* M7 ]6 ~& Y continue; c1 T1 k% S; G( z' l% z
if( pItemElem->IsUndestructable() == TRUE )
% V6 ]1 [8 F* C7 q ?( c& k {( t% m) h y2 m( I/ k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, l% w3 L& O3 Q) ] continue;* Q, h0 @8 }2 V7 w* g6 r9 d# j J' q! |
}
* y" ?7 `2 T. `$ t9 w# g g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 R- _. ]* |6 J6 S, v5 | }
9 X% w- h& P& z w3 k break;
0 D7 N) d( T( N: X1 F }. g+ \4 ?& G/ Q5 m9 E" o+ T' \
case 1:* f6 E! [+ Q1 x9 }- m; ^ T
{
( ~# S' A" m& \3 o& U+ | //整理背包
0 b9 s" q% ~ M1 z& C- U; _ //////////////////////////////////////////////////////////////////////////
q5 Y* t6 H# W7 C8 I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" U" [' e) u' i- ^# c
//////////////////////////////////////////////////////////////////////////
$ x( g( G, d7 s' P; h //////////////////////////////////////////////////////////////////////////2 t4 m9 }( W# G2 K
CInventorySort* pInvSort = new CInventorySort;/ u0 V f. A i4 g( I* J' n
vector <sItem> vItem;
; o9 q# j. y& c0 {( T; ^9 t& x: g. l vItem.resize(MAX_INVENTORY);//初始化大小
( h) n: Y8 |9 |( G) D" h! m2 w# Y/ I //////////////////////////////////////////////////////////////////////////
3 ]- T* z# \7 ?5 H4 \ //填充数据; e; ^' @9 O: ]; R" h: y3 L
for (int i=0;i<MAX_INVENTORY;i++)
9 T" L n" v1 @. L. ?, O {8 E* H$ ^9 P i/ A2 O0 W- v0 n+ L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# }% _. `; C `1 \) o+ f
if (!pItemElem)4 Y W. ]' ]2 Y( O' b% O
{
5 j/ T. \: B6 y8 r' w7 j1 _. I2 C vItem.dwKind2 = 0xffffffff;( g' Y, U# _3 D" _7 L
vItem.dwItemId = 0xffffffff;. @6 D5 c5 l4 ~! ]; L$ J1 j
vItem.nIndex = i;, n z, Z! t5 V; F3 s
}else {% R% m' L M: U7 u
ItemProp* pProp = pItemElem->GetProp();
. {8 k! T4 h0 ?9 k vItem.dwKind2 = pProp->dwItemKind2; E3 m8 V" {' C' w4 d+ a3 Q% L
vItem.dwItemId = pItemElem->m_dwItemId;
" Z4 Z3 I. E9 a& S2 i& S$ N/ g* @4 T vItem.nIndex = i;8 G& N- v A0 z: z) p/ M
}7 n; M0 _; \: {; `. X' u
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& M% @6 f& _' g/ b }
3 b* A# o; |& a' |8 C/ K //////////////////////////////////////////////////////////////////////////
+ ~: B" l9 ~8 F8 U1 O0 h! U0 S- ^ sort(vItem.begin(),vItem.end());//排序
; {; A3 S' Y: ?. Y: Q2 L //////////////////////////////////////////////////////////////////////////- _5 N' x6 ?) V
//交换, H3 f5 X2 Y( [2 v# J: Z7 G# c
for (size_t i=0;i<vItem.size();i++)! Z% g% k( m, `) ]$ p
{( P( Y2 C: w9 n7 T% O; I
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) W3 \! |4 g) x9 T( y) k
pInvSort->Add(vItem.nIndex);
: u7 k6 O' s z0 ] }
9 _% F# e* \& l5 b' E BYTE nDestPos = 0;# _" f$ E0 I) Y3 ]8 U$ m, ]' \
for (int i=0;i<MAX_INVENTORY;i++)4 Y0 M3 d. W5 N+ X0 ~0 W* G
{1 u) Q- g1 G2 l' I' |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& W8 n$ D1 ^' f if (pItemElem)6 v' \# R! L- A' |; V+ P
{
t) i0 o/ {8 W; _$ j) _ if (IsUsingItem(pItemElem))
. W/ J6 P# N5 L; k) M {
' Y) Q- D0 K* O, N9 l9 H) I //这个位置无法放5 j& H' n2 C" \& a1 Y
nDestPos++;
: Y h) X5 z- f: C }
" X8 z4 s& }8 N w& r5 p }. }. {1 L: ?/ k/ P; u
BYTE nSrc = pInvSort->GetItemSrc(i);: s, l6 g, h0 Z8 N& t
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ b" F0 o( Z9 g! m0 _. P if (pItemElem)
7 f% X( l) p1 }6 Q! n3 L" [8 v# U {
. h$ ^. Q! p" S/ K, i$ Y- o if (IsUsingItem(pItemElem))1 g. s( J, V6 g. V
{: E" s5 }) I9 t" t$ u i& Q$ M1 |
//这个道具无法移动,跳过; \! U) m/ B& X
continue;1 {- ^/ F7 C3 T5 ?% x: x x, t
}
; E8 m! ^1 C) g. z3 f }else{2 n0 h% h: g8 p* o$ k: w( a- A
//空位置 不用动7 x9 \! n5 ~5 O
continue;% W, z9 L- v; U. H6 O
}, B" \: |( R! @; A1 u
//////////////////////////////////////////////////////////////////////////
. ~. h( J5 t* U# L! T //开始移动
# e5 K( G+ t$ q if (nSrc == nDestPos)
1 _1 w7 K' q# w$ V( B! ~* [6 Q3 Q1 J {3 o( E! o8 f* D2 ?6 m
//原地不动$ m; a& U/ t( O Q7 Y8 g
nDestPos++;% i4 m4 Z. Z, c5 I4 l! H% `
continue;5 p( N& O* n: |8 e4 h
}
* o3 `0 Z$ A& o+ c- {4 ^% k: @ pInvSort->MoveItem(i,nDestPos);
3 i9 y- W9 F# a- U7 U3 s g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ i+ y, s, G1 m: ~6 F7 h
Sleep(5);
- W8 R% S% H: @, } //Error("移动 - %d->%d",nSrc,nDestPos); e8 Q; R: m, e( K2 U- @
nDestPos++;
3 w7 K+ W% ^" U0 V6 F }
/ {1 R, W& T, c //取第一个元素的信息
" k2 Q& M) S. \! Q& c- v+ F /*
1 q% x( N( r, g7 v8 e if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ u4 V+ [! N/ y+ ^ {
$ q( ^# K2 p7 ~ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 |& ^: I& r, F+ W' h. {* u g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% X2 J; y6 k0 h$ z9 | ?# H2 H }4 S. t+ y1 O: r8 j" e* s
*/
5 ?/ \2 E0 G3 i$ G7 g& C //////////////////////////////////////////////////////////////////////////6 I. e9 }* j# @; l) g
break;4 [, R, B3 g+ k( p- E! l
}
# |3 J. K- T! i) c9 n/ q0 Z/ z }
- F% L& t) r' y' e, g}
8 z8 {! T5 h- s- v% rm_wndMenu.SetVisible(FALSE);( P, R' V, F, j; h6 y2 q. S, I9 M; @
# `4 ]- n) N) N--------------------------------------------------------------------------------------------------------- g. A2 Q p; U7 W& Q( p2 S" V
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 c, M5 j+ a) z: c9 I
{
5 ^! ^; g' T- U$ O7 ]BaseMouseCursor();" R, N5 ]$ z8 X6 ]& S! s6 H
}
8 @+ t5 N3 G: m- V在其下添加:
6 B0 m, ?5 C& w8 Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ g" y+ M( u" A$ c' e3 Y* q9 z/ V
{
}7 C: l$ b4 }2 W* x1 Vm_wndMenu.DeleteAllMenu();
, k; x+ P+ E1 a b/ V, Mm_wndMenu.CreateMenu(this);
" b8 Y' b6 W3 E2 D% q2 I$ Z% pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 C7 e+ x* p2 e; J; a
6 z" M+ r1 P, J% K5 b1 {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); U- w9 l. [. \5 v& h+ L
{
4 M$ p7 B |4 U; a; N //P以上级别才可以删除所有道具1 e; z2 d, z5 u+ ~$ g$ f* G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: p, O: l) X- A. f+ S5 w( \4 c}
* w) M' E1 M9 }- ^! cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 g- U0 z7 C# I1 [7 K0 im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ V( b8 D# f( hm_wndMenu.SetFocus(); D+ c0 A6 R4 N8 _
}) \# Z8 f P6 h
------------------------------------------------------------------------------------------------------------
z- h& {5 y! N( o*************************6 r$ B5 i) ]/ H8 y- Z. f' w
WndField.h文件4 c! w; w) V6 A: S5 g
*************************2 r, W/ ^7 F, u+ i9 _& U
搜索:BOOL m_bReport;1 x# o5 M# e, ~& P+ f+ `) |, h
其后添加:
, u& D% g G* c- R8 ^/ a; L8 H( uCWndMenu m_wndMenu;
& r# D6 J# }1 e- Q9 F- l! p* g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ V; h7 k# y0 {5 c* x8 q9 w
其后添加:
. F- t9 U" ]$ D8 f8 _4 _virtual void OnRButtonUp(UINT nFlags, CPoint point);
R' Q; q. N; O$ A. q/ A; | G' l9 C1 K6 U, V5 o9 q
6 t0 X' [! d- G
|
|