|
|
源文件中_Interface文件夹下WndField.cpp文件
+ n* L! ^) a, Q! O搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ y; w1 z' \: O5 o8 r; ]# z
! Z0 o! Y2 G! i" h. y' ]
struct sItem* }& v" Z( N! z9 N7 N
{
6 a3 L( }8 n+ }1 t. [* m+ I7 [DWORD dwId;
; w0 [" t w6 y! u& }' wDWORD dwKind2;
; R# L' |& n6 ]1 P" F% [. {DWORD dwItemId; W, j9 W2 g8 J, \3 p0 P
BYTE nIndex;
9 b4 @* J. M/ m! _8 R) esItem(){
: X; `( m3 {1 J" s. V! E dwId = dwKind2 = dwItemId = nIndex = 0;& A5 } |2 b7 |* [4 m/ Q. \
}: |* R" ]& Q( p1 D3 b2 o
bool operator < (const sItem p2) z, ?' ?) L$ b3 b$ p1 F- I
{3 u! g2 ~+ M" z+ s0 J) \, R ~! N, H
if (dwKind2 == p2.dwKind2)2 s8 o5 \1 a, P: g% Z0 P/ ^
{( E: D! I9 V( P% B# |
return dwItemId < p2.dwItemId;
$ @; r7 Y, S; A4 n( J; f' X1 ^ }else{
" Q( G) \0 i8 q1 f return dwKind2 < p2.dwKind2;& ]' Z0 s& k7 f9 e& y& G# L1 q
}: i: G# I+ @4 j$ g
}
6 M( e. x; p4 C5 k! g1 m};
- p$ B* P5 M) H3 ^! [) j3 g6 _class CInventorySort3 ~+ y6 {. ]' n8 f
{
5 m1 H1 D- Y% o' N7 Z7 Apublic:& p9 o0 k1 K$ W% T3 d
CInventorySort(). u* J1 ~" G, E
{
6 z5 A6 b3 C1 d4 r; ^ m_dwPos = 0;
) e! D0 O0 Z5 w/ ]}; F3 p8 a) \3 S1 ~: Q$ [) ~
~CInventorySort(){}
, R3 X6 s. [* ?: q% A" Oprivate:
: R) ]6 n) M$ ~: J4 ^* k6 S Z$ isItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! T& \5 y- [# A+ G& x" s% f! s1 TDWORD m_dwPos;9 A+ u i+ i4 u. U0 _+ l
public:2 m) O/ k. m" B! y
void Add(BYTE nIndex)1 r6 O( N4 v+ \, _( r
{
8 @% K) p1 z9 C8 _$ H if (m_dwPos >= MAX_INVENTORY)1 u0 F$ ]$ [& e6 t$ R4 j
{& D% w- q/ P+ N2 k4 m( r- _& [
return;3 w! e: k' ~# [8 `) k7 b7 D
}
4 G" U+ A4 l+ F( Z m_Item[m_dwPos].nIndex = nIndex;
* p1 d5 X! ^. Z$ x# q& S m_Item[m_dwPos].dwId = m_dwPos;) ] b: c: z) t
m_dwPos++;+ @- y, ^; L, |# W0 R
}
- B( r9 j6 r9 |/ }, N1 w- j; nBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 m \2 ]4 b- B
{
9 v: d& M: r: ]/ d for (int i=0;i<MAX_INVENTORY;i++)
& Y# W) n- p$ M- Z6 N! E" H {
- c1 h: J- q0 i if (m_Item.dwId == dwId)
, D# L$ f- E0 T3 ? {
3 a# x& k2 X, f* {0 M% { return m_Item.nIndex;
3 z$ v$ V5 W. j4 D& t; h% ? }# K' M5 _- m2 [" o
}, P% p* u4 \; S) g6 ]
return 255;
R( @. ?2 ^! C4 g9 N1 l# p* ]}( ^! s* Y# @0 B3 M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 |# d" x3 H1 H5 b: P" H: y{
/ c* w7 j. u3 t- P% P+ Z BYTE nTmp = 0;
& Z v7 r: U; s1 j9 K* A0 a bool bDest = false,bSrc = false;
5 ]5 @0 g2 ~9 T/ n5 e for (int i=0;i<MAX_INVENTORY;i++); ? j5 T9 T9 P, [
{, s4 W" V4 A6 r6 K2 i: R
if (dwSrcId == m_Item.dwId)+ b( O8 D8 v( P; u* J- a
{4 C5 ?/ W( F: f7 B' Y3 `
//id相等 则 改变对应的dest和src+ D `; D; @' X; h
nTmp = m_Item.nIndex;
* H3 K& a6 g: Z o m_Item.nIndex = dest;, E$ Z5 K% X N) d: P+ o; d
}
! ?& G) q) d3 t+ Q: E+ ~ }! h! g& c) c, H7 r
//临时数据保存完毕,交换开始
! t- H; }, Z4 F5 k7 f6 y8 E+ B+ [ for (int i=0;i<MAX_INVENTORY;i++)
4 Y4 O+ v! T% Z( ~* l$ u9 R {2 h; ^1 p. ?, r2 l. e. y" r
if (dest == m_Item.nIndex)/ l$ U1 J. I4 ~* M! O( v/ k
{3 j: A! o% P B/ c1 C9 s; c
//id相等 则 改变对应的dest和src
( d% P6 A# C: i: B m_Item.nIndex = nTmp;
2 m8 ]! y2 J) R }9 v% e, K4 U7 W# H" s
}
" A' n1 j% ]5 `2 C, q5 ]6 V}, G; r; Z* q4 z: r+ M2 u& v
};
- W+ X. e. W( n# B/ r-------------------------------------------------------------------------
9 V! g9 l- H% N0 ~6 c3 T/ @% K依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# S" o2 x* x, A4 R4 d, c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ L9 c5 q* ~; c! s+ U+ r紧靠其上添加:( n+ e; V5 p: O& B/ s
if( pWndBase == &m_wndMenu )
6 v! h, P j# R; ]0 R S1 ^{7 y4 e( e8 d2 J9 u5 y' h: z
switch( nID )% l; W2 M0 A: H/ W9 H
{
5 g5 Z3 }. `4 `5 M: ^ M case 2:) o2 Q' u( n, _9 ?4 W) m& D% b) C
{/ w+ D; u/ Y5 v
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 c3 ^- ^8 ]+ \% G n1 C) y0 w8 } if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 c/ w2 o8 }3 r4 q* @
{% W1 N; @ q5 M: d) h, \$ K9 f
break;
: y" X8 f' W V4 | }( @/ i" y' p' t+ G2 r. b6 e
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 |" `( W: {2 O8 m4 E+ O {
, ~1 H$ |) y3 W+ p; |# }) F: k4 Y1 ]* a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* ]3 w; B% G' ]: B; { if( !pItemElem )
3 V- d* T( e( w6 `' Y+ U9 ~ continue;. f0 A4 n$ v$ N9 E; q9 J! p
if(pItemElem->GetExtra() > 0)
: m* {9 x: P+ o t+ K1 }6 g continue;
8 p8 r, m$ ]$ m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 n( h' V3 c# |/ _ continue;9 j" N( V8 K9 I5 [6 X- Q
if( g_pPlayer->IsUsing( pItemElem ) )
3 B) v$ q; ?4 F6 R j6 n8 A2 r continue;, D# `3 E2 }: {. H# e |2 o6 e' X( ^
if( pItemElem->IsUndestructable() == TRUE )
2 K9 o, t! G5 a2 L- o {
) M: }# g2 q7 E" N( `5 J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 Z9 U* U3 ]% s% V3 q0 l4 Q% u: j continue;2 k, P! ~# a. S6 H; w! t5 s! t$ t
}
* O @1 a8 ^. @/ Z2 Y- }2 R g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ y5 M) H! u* F) Q6 V }
7 ]' Y8 G6 h6 g5 t- p) n break;0 c# u$ n, E2 ^
}
) P' K+ j: A T! |- K7 n case 1:* [+ m& x1 X H& Y2 N- [7 x! J
{$ N0 q- M0 z( v; l1 [, o6 O0 M8 f
//整理背包3 |+ [6 F2 o7 t, q% E5 Z0 H
////////////////////////////////////////////////////////////////////////// q+ l/ N2 F/ s! G) s6 u9 x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 A7 A' S7 W+ q$ P. Z: z" Y) r1 | //////////////////////////////////////////////////////////////////////////( z# V. E. x7 h
//////////////////////////////////////////////////////////////////////////
. j6 i, F) K. i, w9 R% F. ? CInventorySort* pInvSort = new CInventorySort;' b/ [) Y. k# f! O
vector <sItem> vItem;
7 n/ U9 {1 O7 B3 z* K# R vItem.resize(MAX_INVENTORY);//初始化大小$ r: e3 n9 `5 P! Z! ^" V
//////////////////////////////////////////////////////////////////////////
- k5 a. ?( u) y; l! K //填充数据( L% |% x, ?# G3 P9 T
for (int i=0;i<MAX_INVENTORY;i++)
) b6 n8 A# a n* c/ W {
* L7 V5 w3 W+ T9 W2 W3 A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; h' M' L1 n4 |2 \# {
if (!pItemElem)1 N/ ~' y6 ]( w5 J
{
! Q; A2 k% K0 u1 H3 W, y! s- a vItem.dwKind2 = 0xffffffff;
; h1 s# S- G7 h2 V vItem.dwItemId = 0xffffffff;
+ O8 l4 s1 M! D6 F/ q# G. m9 O2 H vItem.nIndex = i;! G, H9 U! v/ h0 l6 ?
}else {. j0 `, b4 t, D
ItemProp* pProp = pItemElem->GetProp();6 y1 u& [" ?( J6 ]+ ~+ {
vItem.dwKind2 = pProp->dwItemKind2;
- A+ c- l4 F% x, Y' s- A2 j vItem.dwItemId = pItemElem->m_dwItemId;
# O- {! F& i/ @ p vItem.nIndex = i;
% \6 J$ ?& |: [0 } }- P4 z9 ~7 K7 P! D$ [9 L+ ~% b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 _! [' T+ |! N' F7 _ }
% y( r5 Y" }1 S# h. q" ?. J- x //////////////////////////////////////////////////////////////////////////
0 r; [6 s, t) @* g' |$ C- x sort(vItem.begin(),vItem.end());//排序
7 i5 N- i4 p* K5 C+ k0 e //////////////////////////////////////////////////////////////////////////
' Y% m8 H( a1 E# m. s8 U9 r7 r1 K/ v# q //交换
- g$ j1 Y c& q; {# A5 {: | for (size_t i=0;i<vItem.size();i++)
. }! |# V* S% C: w. C% {0 F {
+ H4 ]) b7 R# j9 e //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); j: [7 }; d8 ^4 w
pInvSort->Add(vItem.nIndex);4 |3 H# R# E8 b
}3 J C, W6 h8 L! x9 D! s0 ]
BYTE nDestPos = 0;
9 a+ G+ d4 X3 R4 q$ | for (int i=0;i<MAX_INVENTORY;i++)! n" r2 H3 E" q
{- X# y4 L8 s" n; `& B$ V1 L) @; o# T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: e: ^3 W2 q% m# X8 \4 \ if (pItemElem)% M3 w4 E' [5 \5 w
{
5 b4 h7 v7 ~0 j- O8 F; |& i- M if (IsUsingItem(pItemElem))2 c: e" E$ y( k9 k7 D, F% G$ N, K! T0 c
{
/ ^* V( G" f' w( ^3 }% E //这个位置无法放
' g7 b, v& u4 d nDestPos++;
& }5 W3 ^& h) c2 q4 E }# U7 c5 o$ l( K
}
9 n+ P+ W) H. }6 q& V) l0 f BYTE nSrc = pInvSort->GetItemSrc(i);
5 l/ E" c$ a. j4 x& M- \% D pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% j) b% b% I# v0 l9 J$ m* q
if (pItemElem)
- G9 |! V L& L) _1 _9 D1 q {
/ ~/ O* i2 ^4 S3 r if (IsUsingItem(pItemElem))1 O. N. L+ q, w0 I2 o% d
{
0 E, W2 t3 S; a) I e& B' \ //这个道具无法移动,跳过9 [7 H4 R. ?4 t `
continue;
Y# a; d. q! @8 I2 }7 P. t }- \+ ?6 C# Y8 i* n* Z# [& [
}else{
. W$ c$ y1 l7 w. u //空位置 不用动" I: V/ ~/ U9 Y \# t% p: T
continue;
$ M1 j1 ?4 {! M2 }: ^4 @# R }2 M( _' ]0 z/ D" S' n
//////////////////////////////////////////////////////////////////////////0 X+ b# a+ i0 m' c$ C
//开始移动! Z+ f% ]$ n. P) c" u9 T; [" p
if (nSrc == nDestPos) `' m( C3 F" B/ `7 u
{
/ f1 D. |2 ]3 I1 I2 m //原地不动0 U; ?( ^1 U* N+ ~3 c, M
nDestPos++; y$ e2 L& h6 A7 \# x' @9 m9 l& `
continue;
6 `) F: U; @" R }& q% j" Z# L+ T i+ |8 {
pInvSort->MoveItem(i,nDestPos);( w0 O5 Z$ L P8 ?. {, D
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, D/ f2 {8 V0 C: m3 x' u1 k Sleep(5);9 D2 Z9 ?0 ^- ~/ F( T9 p" o! r! e
//Error("移动 - %d->%d",nSrc,nDestPos);. p2 M: d9 E/ }5 ^; o" @: S2 i+ D
nDestPos++;% X( V/ \/ N6 U& O5 @! I4 F' K
}
: O( p/ ^+ B' l; F; i1 M; t //取第一个元素的信息# m. q7 O1 w& K2 P' V8 }6 v
/*
/ c3 C+ T$ i4 l, Y+ W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), ]: y) ]4 Y5 O
{
D9 ` |: m* e: O+ W0 P2 m# a Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 I; A( \3 {* u; Q% L6 R g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- M7 j6 Q8 o" P8 X& b' d. g }
{; l) F. C- v( u2 N+ e) ? */9 v- T* @: j7 V" q. ^3 H: O
//////////////////////////////////////////////////////////////////////////* C4 V4 ~3 D0 n9 a5 Z3 u5 s! x
break;5 @- j6 {: h1 K
}: B C: [! k& Q) K' p* [( I
}
" Q1 q$ H' }: H& i+ W, H}
: K: \1 Q3 N n' s2 O. H) zm_wndMenu.SetVisible(FALSE);8 s: U0 u7 m" u! }2 A
4 c2 O; @+ |, ^; [; z--------------------------------------------------------------------------------------------------------
) V8 i0 [" X5 _* d( L$ l2 R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% E0 ^% G, r6 Z( a) H: ~3 b{% H8 Y' l( k8 a) | |
BaseMouseCursor();
4 e; z% E% ]5 T: i% r$ q) w}4 v! Z; s. r, c6 N' b" N! }; O$ ^
在其下添加: U6 K$ k- X& a/ p q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 o* L. _; _: |, |8 m0 d{" `, Q2 E$ Q; v& o# @% L- z
m_wndMenu.DeleteAllMenu();
" J# ~) T( z, R7 x( I2 \6 `m_wndMenu.CreateMenu(this);
5 g( }' o3 K) n* cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, R; b" Q z! j$ V
1 V# {8 o: J9 n& K- k3 Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), X/ L9 B: R7 F' R
{
' }$ D3 |9 G8 P! R& q; G //P以上级别才可以删除所有道具' \' z* \" A" F) d) a1 R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ O6 C& _9 N8 {/ [' [3 t* p}
: l) }, D4 d' b1 Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 N' Y# [% L! N$ Y% i6 Y1 e6 E
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 M M, C0 s1 S; rm_wndMenu.SetFocus();
' C9 d6 v& S$ r" ^}
) r6 r6 E5 w% }7 g------------------------------------------------------------------------------------------------------------* Y3 k. g# |1 F# W6 P/ C8 t" ?
*************************/ g1 `& S [7 u- w2 m6 [1 }" n
WndField.h文件* O4 G6 C& j; o. n M2 r y& U
*************************+ @9 @' |0 A0 H
搜索:BOOL m_bReport; T" O3 D9 t: l. N! V' U5 F
其后添加:; S' l0 S/ a& ]$ A- `. ~
CWndMenu m_wndMenu;
) J8 I4 x, b5 h2 u; W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" A7 L8 {: D" Y5 r5 L7 S' G0 M% w
其后添加:( `) f8 ]' I: `9 t% @8 b
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: E. h' L/ T5 g2 e0 @9 J7 ~% p( O5 E4 O+ n2 N% K1 o
3 U' A0 Z. x2 z |
|