|
源文件中_Interface文件夹下WndField.cpp文件
' s- s8 D0 {3 b; ^# W$ ?+ u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ F2 z1 T: \' l
( v7 @7 ~2 M$ C9 |+ Cstruct sItem0 _( `- L- V G) j D1 R
{0 B4 Q$ @8 K0 F8 ]# i: K7 F) X" \
DWORD dwId;
4 I5 x& ~, i4 J6 t0 T+ d1 ?DWORD dwKind2;) ~" n2 p) Y! x3 V9 E
DWORD dwItemId;
2 }( r1 }) ?0 a- `' i8 r+ NBYTE nIndex;
5 ?/ Q) {7 N- O4 MsItem(){ u6 H4 i" R! ~/ e( W# A
dwId = dwKind2 = dwItemId = nIndex = 0;4 d5 n/ s: T% w8 |! @
}
0 n8 r( n( I6 i2 e! ]0 ^5 Z0 |bool operator < (const sItem p2)/ Z1 u& a9 ~* g& n& @% v9 j& \
{
+ `7 [/ k; A, _: E1 Y( z) k if (dwKind2 == p2.dwKind2)
6 B& k6 G4 q$ M; F% n {
3 X5 Q; r9 Y9 l" c return dwItemId < p2.dwItemId;% _! E* Q/ w' F3 Y* ]- Z
}else{& o6 A2 a- e/ X7 }# Y6 d- X
return dwKind2 < p2.dwKind2;
1 b; o- \. n5 f }* }( y/ \- {1 C$ t1 h( t' g* Z
}1 D) k. V3 J, y; v# ^( [8 _) \ \
};
2 ^- G# K+ n1 iclass CInventorySort
( Y, e" k8 f1 }' ]1 L H' t- Q{
4 e( Z* a7 y9 r. S8 upublic:
' {. c1 |3 @7 n$ b# O+ ], NCInventorySort()
' `: Q) M; w, ^( Y3 Z# b! t{5 U5 `8 ?! c& ?+ D/ K% G# f) o. p
m_dwPos = 0;/ E' n5 B& d" r
}" G0 O9 B% r y2 T% f0 Y
~CInventorySort(){}7 M' H- T0 g! I m
private:
! p+ f: y: n0 e5 W- {5 X3 g) y. gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
w+ w& W, @ TDWORD m_dwPos;
( O& G3 ~/ G& @; V+ g0 C9 t: m" N; Bpublic:; r" z Q2 J+ V& s/ y
void Add(BYTE nIndex)0 N2 B7 z! u% [. v8 x1 P
{
3 _4 u, b2 o( T if (m_dwPos >= MAX_INVENTORY)2 ~0 ?: J9 t% Z: c( Z8 I, f
{) v O4 P+ y( `( Z/ c* A
return;5 a* _ _. s( c7 b
}
* t+ F8 w3 Y# o( Y1 F! z1 S m_Item[m_dwPos].nIndex = nIndex;
: t3 m, Q' W3 @- J0 i) \0 w m_Item[m_dwPos].dwId = m_dwPos;7 R0 R5 ~6 V: [' L7 n$ v, |6 o
m_dwPos++;8 _' k/ |& r1 ?% r4 a2 N
}5 s3 v/ G8 s5 A4 j* |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! B6 T8 ?5 B8 g{
% }0 t: i5 f+ L for (int i=0;i<MAX_INVENTORY;i++)
" h" a9 o/ |! x0 A+ B, D+ u( T2 o {! N8 X" U$ v* ] \
if (m_Item.dwId == dwId)
F1 y! f0 i) v1 y; s, r {( M% ]1 H, |2 I, [& ^
return m_Item.nIndex;
3 S& N+ S: z. U1 r }
& h& o. A$ d' s4 H2 f/ ~ }
$ Q# L: o( n" D0 [* M% { return 255;% C" m0 G$ J" C5 f
}$ w! J4 o) [1 ]4 M' P9 V+ p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' C" Z: a, c$ Z
{" h+ ]5 ?# m$ k
BYTE nTmp = 0;- O8 K, ^% t6 ~ I& z" x
bool bDest = false,bSrc = false;
0 ^3 l( p# x" T for (int i=0;i<MAX_INVENTORY;i++)" g/ e v+ G9 C
{* O* a2 R. l3 u4 ?5 \
if (dwSrcId == m_Item.dwId); c+ C" N( f6 ?' v+ F* s5 d3 i
{
' m0 z T& U% N* T' n" q //id相等 则 改变对应的dest和src( H* @# O, p1 Q5 u
nTmp = m_Item.nIndex;4 ]+ Q. k: E T7 Y
m_Item.nIndex = dest;; z; w2 l1 V( R# K$ |& Y
}3 _: L% B8 J$ y: V+ N
}. T8 ^5 F- C- y; n! `
//临时数据保存完毕,交换开始
1 ]/ R1 x4 A: v for (int i=0;i<MAX_INVENTORY;i++)
+ e0 x5 D' w0 J1 ? ? X2 E- b {: j: j) B6 C+ p2 @4 g
if (dest == m_Item.nIndex)
# a0 G2 F, H) i R" T {
+ O2 j l1 u7 ^) t4 J% z. i, t! W //id相等 则 改变对应的dest和src! Q1 L8 V* ]- D2 n3 `* |
m_Item.nIndex = nTmp;2 O5 q/ C5 Q9 l0 ]! H
}
( N: p( h" ?( ~4 B' A, f- R }/ ~' d% |; v0 i# g$ r% Y6 L
}
/ J, H8 Z( j* z; |};+ E) Z/ |6 ]- R' F
-------------------------------------------------------------------------- l: f4 J2 z) l7 v+ l) ]/ b3 P
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 d- e" X. A- W+ u/ t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' y* c6 S. a1 ^
紧靠其上添加:
8 d& {5 Y0 J& q4 S+ H4 Gif( pWndBase == &m_wndMenu )
3 \! A- t# d( X{
# P7 d. H5 d9 j. S switch( nID )/ t# D Y4 f, _, i: S2 v8 j
{
! M4 h4 E0 T& X, n$ R; ^" S case 2:- K, q0 I" x% v. a
{
1 t: z% `7 \2 l( x+ O //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ `: m- i: @6 G if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 e( v* }0 m ]# p+ v5 F
{0 }* m2 p/ F: {' o2 a# P* s. I
break;; I8 D# @; p# R
}
) c+ ~6 v* @/ V& t, |1 x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& Z3 x5 d/ x7 i* ?! Y) p {
" u, b$ l" ?6 Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& u% J) r1 p! [9 i if( !pItemElem )' ?3 C7 b6 x6 |& Z4 P
continue;! T) c/ A! `8 A2 s( r% ~" P# \. Q
if(pItemElem->GetExtra() > 0)- a3 v4 h: w! Y% w
continue;
( Z) |' d; i7 }6 Z0 o3 N1 P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 ~5 g! n7 m X2 \, X. T' H7 @ continue;
" w4 P0 ]5 Q9 `2 `# M7 t if( g_pPlayer->IsUsing( pItemElem ) )! `/ D, |& T/ M# e
continue;1 w2 ^8 u# B7 S/ @
if( pItemElem->IsUndestructable() == TRUE )# s/ l3 w9 p2 A8 O+ d5 H
{
9 V _* M. b* d+ I) B: E; \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 _+ Q o* m9 S" E& C
continue;
" D5 B! v* n: N" r+ Y9 N }
0 J8 e1 @0 }' K3 o# h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) Y+ `1 r F( z }
2 q7 r3 y9 G5 x% C. U break;) o9 H# ?% u1 H# J& v
}1 F: y0 e+ D4 W
case 1:
4 z9 y: {+ i0 f) n3 p- O, N {$ Q+ H9 b. a J6 Y+ J$ X n
//整理背包
2 t8 O; J$ {. ~3 k //////////////////////////////////////////////////////////////////////////3 k% Q0 x1 m$ e1 I' M& _' j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% f8 y% g# T& Q0 ^ //////////////////////////////////////////////////////////////////////////
* w5 \; H6 G* d- | //////////////////////////////////////////////////////////////////////////! `# i. \2 H2 @+ N- X2 C& s$ \
CInventorySort* pInvSort = new CInventorySort;
% E/ c; Y& U6 S3 F" q Q vector <sItem> vItem;
( K7 P8 k q( F vItem.resize(MAX_INVENTORY);//初始化大小
$ T" N$ j8 W/ \/ S) _& [/ U //////////////////////////////////////////////////////////////////////////
2 K/ ^& Y q. R$ n/ | //填充数据
/ a3 e! \7 [! b for (int i=0;i<MAX_INVENTORY;i++) D; |$ x' W4 _# ^
{/ ^) z2 F* H0 D, |0 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 B s) W, R" c. l
if (!pItemElem): r3 t" R1 d; T; m3 b* R$ |
{
5 H# b& H$ D( r; D8 R vItem.dwKind2 = 0xffffffff;; { u$ q, G- `$ W% D2 z8 E" ~
vItem.dwItemId = 0xffffffff;5 ?9 L: a g& b! z* n8 z3 H! Z6 C- V
vItem.nIndex = i;
7 V; {. a& n$ n3 ]+ k }else {$ [$ x; _/ q* v7 g, g, t( D
ItemProp* pProp = pItemElem->GetProp();
( p, F2 P' a( g; m vItem.dwKind2 = pProp->dwItemKind2;9 J- g7 ?7 V; N. x& B& d c
vItem.dwItemId = pItemElem->m_dwItemId;% k; s! {9 y) ]& H$ v
vItem.nIndex = i;
2 J! }" g! }- ^+ F5 ` }8 F! ^ z$ d0 ^* F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) c/ \3 z4 K7 C7 M3 I) K8 v4 A }) t1 q3 v4 K8 U. K' N" D! z: y3 K
//////////////////////////////////////////////////////////////////////////1 s# w) i: t1 h
sort(vItem.begin(),vItem.end());//排序! b2 [. N- n# x* t1 o
//////////////////////////////////////////////////////////////////////////
3 g$ H" C) J n. s //交换0 u% B8 ]' ~8 o; h
for (size_t i=0;i<vItem.size();i++)6 j* [+ k$ b. g) R
{
, b/ w2 ` p2 @$ V) |# h6 z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" N! Y+ e! z5 E; Q pInvSort->Add(vItem.nIndex);
n$ F+ W' e) X" A }! Z" z0 h* g) D4 M! `; P
BYTE nDestPos = 0;
' n/ k6 @. h; ~& g for (int i=0;i<MAX_INVENTORY;i++)
9 t" D7 b1 j" p { {3 ?& N& F/ H1 K! q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& t: ]- b; N1 N
if (pItemElem)9 M3 H- {. q8 M4 @. F
{
. {8 B8 U& q d# j7 u9 J if (IsUsingItem(pItemElem))
/ C. O1 [6 d* f {) j( J2 O" T5 ^* p L
//这个位置无法放
6 Y8 i# X# ~( m7 N5 | nDestPos++;& Z0 p0 a9 r( T! w+ D' S
}; |# d$ `* ~1 T& [9 M) {) r' L
}# [& H' _2 Y0 `$ k4 e- j( a
BYTE nSrc = pInvSort->GetItemSrc(i);
2 K+ T3 M( c w- [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ T( F% a l- Q1 h/ a if (pItemElem)
% u/ D% M. U; ]" }6 K( W) } {5 P2 T5 a# N, T' E% Y" ]# H1 d7 D
if (IsUsingItem(pItemElem))* P$ A1 I* g) s, r# a3 y! `% j$ T) A
{) s% b& X, a$ `2 G- f7 R. N
//这个道具无法移动,跳过
; R8 `/ Y9 u+ b4 X- s continue;
0 l. k# `" I+ M; j' u }
: B( R8 M( k$ w* m1 C. k }else{0 B! d: P& L+ ]0 B
//空位置 不用动
" m# {4 }* C% F' v continue;1 n/ L5 U8 Q0 R7 |
}6 E' [1 o2 R9 x* b. ~
//////////////////////////////////////////////////////////////////////////
0 H2 F. e, |4 ~# [# Q0 T( M8 W //开始移动
: r! Y$ |4 f! q: N5 Y* f if (nSrc == nDestPos)
c! [; m! o k {
7 Z5 R9 A! a$ u. p //原地不动
6 B2 C9 w( ?7 a1 e# W9 |& o/ @: v nDestPos++;
: i% a4 ]" @( L1 f) k continue;
7 ^0 @# N3 ^: A% G5 o8 i9 E }4 T$ L5 ~* r8 i
pInvSort->MoveItem(i,nDestPos);
& u- G5 w( Y+ J j$ p+ f% { g_DPlay.SendMoveItem(0,nSrc,nDestPos);: e2 P; }" A& X2 e6 r
Sleep(5);' [" p# T' U/ ?# m" a: G
//Error("移动 - %d->%d",nSrc,nDestPos);0 [ W% _9 W0 m' k$ i
nDestPos++;9 G2 K; O& b4 f9 G( l: o- c
}
9 s2 y& b, u3 }. K* B7 N //取第一个元素的信息 Q: ]6 [4 d* |. U5 b% k
/*
& m3 _- w& L y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 G: ]4 z$ _1 j$ f5 Q {1 c6 @: t$ o; k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ ]$ v! q4 l2 C/ R" ^
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; ?. K; m; ]+ }4 `
}! J' r7 ?9 d3 \1 x- V4 c
*/
$ q) G+ J7 t& C6 W# j l# Y' A //////////////////////////////////////////////////////////////////////////
- [/ H2 @4 t) ?, {0 l+ Y break;* E' ]4 Y9 ^& C* ~
}: _) a0 W" u3 R" [5 z5 |# R
} 2 Y. T1 {; j: Y0 D _, F0 q
}
+ I/ B# J4 p6 \8 A1 O1 t& w* S' sm_wndMenu.SetVisible(FALSE);
) G9 Z9 D, U- i# d: _0 K; i0 K
' y; {2 C$ \; \% D7 p4 c--------------------------------------------------------------------------------------------------------
3 k! X. `, U; o$ X- }; W) w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 `- T5 t& F7 Q& b' N( U
{% c4 E" `" t& l3 @* y/ W/ f2 s
BaseMouseCursor();
% l+ c! V% p6 o4 {4 X# s7 c: c}
8 O9 l% g; z! i* @! J在其下添加:! s o4 N( H/ ~7 P- O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- y. v9 n, t& ~/ G{3 a+ n+ E+ ~3 _2 N; a) V
m_wndMenu.DeleteAllMenu();1 O6 k1 `" ^# G- x9 m$ c
m_wndMenu.CreateMenu(this);2 K5 d3 @' r- N- ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 m6 _4 n5 p8 t, e
3 M$ q7 ?! ~& T. J4 }if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). ~* f. s& o7 O7 _9 M, l) g. j" V8 t1 ?
{" A; j! r9 Q D$ j3 K
//P以上级别才可以删除所有道具
( w) a( [( K# d7 I# L" N) i m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: B, c4 V% }) ]0 q- \}
1 v% { U0 b0 T( u/ fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( r% ?6 Z5 ~% E6 ^# W* k; q8 t8 n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- W& M# W- t+ Q. {) c" m
m_wndMenu.SetFocus();
8 N# C) e/ `& M7 i$ ^}- ]2 V. |& t# b8 p% a, U
------------------------------------------------------------------------------------------------------------2 q/ }/ l! S8 _: t
*************************3 L+ D' ]0 l( l0 _9 b8 s9 B
WndField.h文件: [9 F3 t! g8 ^ s% R+ b1 o
*************************
; d) T0 g* `7 w5 I+ W: d搜索:BOOL m_bReport;
) K1 ^" G) C" Y2 t5 R+ y( J7 M! F其后添加:- N2 N- ~( s. u. c) [) ^6 g! W9 k. u+ Z
CWndMenu m_wndMenu;) K2 T: s8 h6 l+ ?3 d% B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: z2 e( L3 j0 r7 B其后添加:
. z9 `" A- t- l' Q) d% M. bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 R* X$ M0 ]( t+ f6 R0 I2 {3 w( e
2 n/ X5 D9 p, M0 b |
|