|
|
源文件中_Interface文件夹下WndField.cpp文件
* ^$ e; }7 f) u# h* |' Y. S2 ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: l$ t7 K+ _3 X) @7 V' t" Q) a
: k+ h8 u5 p0 Z F+ w9 Istruct sItem
* l9 s: |& ]9 K, N" e' L+ l{
9 ]' W5 ?6 ~1 ^: R+ X& CDWORD dwId;
4 j! V' d5 u9 K7 B$ mDWORD dwKind2;: E5 B, `3 W/ R8 E6 ]2 m
DWORD dwItemId;$ b% Z+ J( p7 M4 t9 j. y
BYTE nIndex;4 R3 t! K" N% A) p- K8 S# e; ^
sItem(){8 R' }& }( |: M9 K. Z
dwId = dwKind2 = dwItemId = nIndex = 0;
$ x/ x$ r% i; p: g1 w}# S: K6 i+ |$ b3 l
bool operator < (const sItem p2)
/ ?" H# V1 K+ t{+ s3 N' a( m( T W9 l
if (dwKind2 == p2.dwKind2)/ C* V& X) t$ _# X/ m+ Q4 ]
{: T, H) ~' f- x. |2 ?6 _
return dwItemId < p2.dwItemId;
6 h( V/ c$ _8 D. X }else{' }* t6 N# g7 g2 [# `- A1 P
return dwKind2 < p2.dwKind2;* }& t" L6 w4 T4 \) M' `1 G3 Z
} d4 l, V- ^0 T: d1 V/ |: ^2 ~) z
}
+ Q/ x2 p0 \# r, G8 U, h& O% K};# J9 @- w- t) R5 m$ u
class CInventorySort$ J4 m; g- c, f" Z
{! H. q0 ^! B" O P Q6 f) M- t
public:
% Q3 z% \$ c- I& ZCInventorySort()5 P7 P r5 q5 a. G
{
7 g) D r: N8 r+ o: E5 Q/ u+ T m_dwPos = 0;
: e$ A' ] n/ r7 `9 C% y* f}( j! T& U2 F5 `% t+ u6 q3 W/ o7 p
~CInventorySort(){}( I# }! P" T# T3 u* a
private:( W1 \9 p: S, r2 E1 _2 T* c
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 F3 |+ J, \7 B
DWORD m_dwPos;! R% C0 i3 O: u X
public:
+ y2 {, |# j3 ]* x# u) Ovoid Add(BYTE nIndex)0 s% W* ?+ g5 a! b
{
/ N9 }1 o# D3 r' H. h7 k* U if (m_dwPos >= MAX_INVENTORY)
+ M" ?, z+ q2 R8 j, W7 W {8 b9 J V1 g! k+ F3 O* e- F
return;
6 r) O! i" B/ S5 U H } D' C, V. b# X i
m_Item[m_dwPos].nIndex = nIndex;$ L5 ?, f8 A0 J1 Q& t! U0 ~
m_Item[m_dwPos].dwId = m_dwPos;9 }& D0 ?0 J" o
m_dwPos++;# w" z/ ?$ E6 @0 u& g+ |
}
5 K- s, x T4 Q# f2 c8 YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ ]! ^5 ^. r2 c/ l# C{( c/ c( L5 o6 {2 |* p! D5 _
for (int i=0;i<MAX_INVENTORY;i++)4 U. A; C6 W3 l5 w4 A
{/ z" I# F& Z( ^' }
if (m_Item.dwId == dwId)
* b! k( b" ?. S+ [7 j) ?5 X {
) Q+ i/ }3 N1 g$ }! T return m_Item.nIndex;
/ t( U: ^, q" b8 v6 M9 h }
+ o' }) e X4 i }( {. F- h- w* c* |
return 255;) b! @1 f8 U q. |" m
}( X; s* O' D. \0 [3 y ~& c
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 Y* b9 H! J+ P; _
{
) _ J* J* p6 r( J) ~# P- k0 k BYTE nTmp = 0;
3 o4 L% z+ p1 f0 o# G1 U8 A, A4 m bool bDest = false,bSrc = false;* \( i2 z1 i3 ?$ t; v% P
for (int i=0;i<MAX_INVENTORY;i++)% _4 z, ?2 W/ U( a* _+ x3 V7 D6 \
{
- L! L7 t6 }5 u t3 n: b% h if (dwSrcId == m_Item.dwId)
& F9 `5 x3 ?! M: m2 K- L {
& ?& b4 p: v- i' A& i) _7 N& ^& w //id相等 则 改变对应的dest和src5 x% n- O. {, G4 X, K7 M: @. g: G
nTmp = m_Item.nIndex;
* n: ^1 x3 @# `" a m_Item.nIndex = dest;. G* o9 w. ~2 R9 s- |
}
/ N+ ?/ R+ q6 r6 w9 \( I }/ ]+ Z, a, ~1 @7 ^! l, g% T; W
//临时数据保存完毕,交换开始
3 d7 A1 k! |* v* y# P3 ^7 w for (int i=0;i<MAX_INVENTORY;i++): B: X$ q- B7 p, s7 G
{) `8 X7 x) W9 O: W r5 Y
if (dest == m_Item.nIndex)6 g% T) }/ Y, l! F
{
! J. _4 ?% k N, m3 ~% J( ^$ f! ~% F //id相等 则 改变对应的dest和src. E- r: o% ]- [0 h, g
m_Item.nIndex = nTmp;/ h1 M, G$ A4 R: d; b
}
- @8 v) T- j8 E3 I3 b" } }9 ~1 Y6 f+ t# U3 g! [9 V; ]1 f( F8 h
}8 R- e3 ?$ g7 N. _+ j. g
};2 q% @! O' U* }+ r
-------------------------------------------------------------------------( L/ f& ~2 M( a8 d* N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& ]. ?% f- O1 _7 d$ U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# n6 e5 o+ n# M8 w紧靠其上添加:& y9 h! j! [3 Z4 ^8 n( y8 }( C
if( pWndBase == &m_wndMenu )
: e2 E L4 N) {{4 y. s. o6 I/ Q( V2 l% g
switch( nID )6 L9 J& H2 C8 Z e' h
{
/ q, V. h8 I2 I, Q case 2: W ?! O. c7 U. n$ F0 e
{" }& ^2 \/ k6 |2 Y8 `* B2 [- p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. M. }; }% F4 f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# H. |: _$ t( v9 v! l2 N {$ e( M, E! \1 w& j6 b l+ T( B1 _
break;) V8 d6 s/ v9 t6 y8 B. o
}
2 o8 p6 X7 [* n$ a/ E6 y, R) f2 r for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). z% Y; z; k( U& K7 }1 T/ m9 n. x6 Y
{
3 L1 d0 c2 V1 B" [; j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( \' t4 X4 |! @/ ^% E if( !pItemElem )
: d9 L3 e# g# V' x! d, E; v) w continue;
, B; ^/ U5 _# \ if(pItemElem->GetExtra() > 0)
! p3 N; A8 G( j1 Z0 e continue;
* M. O2 Z+ | x/ @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ S, l) E5 }' t# R. J( K2 m continue;+ [% {" i4 m p! t/ S% _' w
if( g_pPlayer->IsUsing( pItemElem ) )
9 s, v- m k4 N/ U continue;7 Y Y% q: E0 o9 A0 Q: f6 N" T
if( pItemElem->IsUndestructable() == TRUE )8 {6 R8 M' D. W$ ~6 b4 W5 G. x- s
{" s y2 \1 i1 K. `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 \9 Y4 J! x' H& x3 g continue;
# ~* ~9 j9 b4 ~* {0 }1 j }
6 n' i1 N# e0 l) ^. [& H% ^" ~ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ ^+ B; H3 O. Y* r5 `
}
9 R4 ^5 Q @* d5 v break;1 O7 g# y+ J! s" v3 y; o7 m( X
}
. i F/ J- x9 k9 S' [; n case 1:
4 t9 G. N( q' H) {$ l {/ h0 ?0 ?* o8 }9 \7 h
//整理背包9 V: k2 N, z: y
//////////////////////////////////////////////////////////////////////////
* b N2 R5 F* ^2 j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ Q) v9 G) w9 N) W& K9 H //////////////////////////////////////////////////////////////////////////
. i+ |3 Y9 G: ~; t) }! x- C //////////////////////////////////////////////////////////////////////////
- U, E( {5 y; {& J" l CInventorySort* pInvSort = new CInventorySort;# z g8 g" R) ?5 I! d+ n! F7 l
vector <sItem> vItem;8 r- I, L7 n+ [6 _
vItem.resize(MAX_INVENTORY);//初始化大小7 }. A' Z0 N$ J. r8 ~$ y4 ~! v
////////////////////////////////////////////////////////////////////////// ~3 o8 B( P* [- h. {
//填充数据
) J- p5 C- H* b2 G2 V+ T# w: q# a for (int i=0;i<MAX_INVENTORY;i++)
# X) ]0 V* P+ F n, M { H3 y2 A. l' C' I( ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% w n O1 J$ ]* x2 t. a9 O* x7 \ if (!pItemElem)
' B9 k' v; Z% B* \0 S3 B% [! Z8 ~ {
: {1 R- Z" L! L6 y vItem.dwKind2 = 0xffffffff;$ f3 x9 a5 |1 J: L
vItem.dwItemId = 0xffffffff;
$ z0 A( G& O9 L. H1 r$ J" O vItem.nIndex = i;
- y p2 j) q, P }else {$ @$ k! X; e# _8 b4 L+ ^
ItemProp* pProp = pItemElem->GetProp();
( G D' Y- Q# H3 ?. S2 M e vItem.dwKind2 = pProp->dwItemKind2;
2 U$ C8 _( ~: y* H vItem.dwItemId = pItemElem->m_dwItemId;' g7 ^+ y& z G; r: {5 Z/ T
vItem.nIndex = i;
- A* k& H3 k2 y; V$ m' v }: h/ S8 [3 M; ?# i+ p. S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 F: H! d& O% g3 G" u5 w# ?
}7 _' i5 j( i( o# F
////////////////////////////////////////////////////////////////////////// G; F2 w7 f* }7 X: O5 b* R' ]7 d
sort(vItem.begin(),vItem.end());//排序
1 K; \) d8 z4 S! D8 @* j- z+ I1 g# B //////////////////////////////////////////////////////////////////////////
" N5 r f0 X$ x' A5 k) g //交换1 s0 a1 b" `! t! J
for (size_t i=0;i<vItem.size();i++)8 w7 r) j; \* P
{
. w: g5 _0 Q& _! M# m //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ f8 U$ t: _4 P4 `' ^- N9 t0 ~ pInvSort->Add(vItem.nIndex);
+ H& v& M* Y9 B! {. a0 O% V0 c( Q }; T) [6 G# B+ c! j- Z
BYTE nDestPos = 0;
7 A/ R0 a) m, f! c* Y5 ?3 E6 ~+ n- r for (int i=0;i<MAX_INVENTORY;i++)& Q5 [. X0 _8 y8 p) ]
{
" n6 h5 o2 B4 \! \0 h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 c/ c: j9 s5 o+ Z5 C; k Z if (pItemElem)
$ a. _& T E0 B t* v8 J {3 F+ S: Z) {4 _' q2 b3 z
if (IsUsingItem(pItemElem))
; ]/ C* } j! r0 I" C* @# p {
1 D# E. k7 o+ H- r2 d1 B //这个位置无法放
) i& T8 @$ h. y- i nDestPos++;
$ ]- ?2 h2 E$ |* \ }$ e9 D7 B; f" N! Z/ _# m
}
7 i1 B# m0 Q5 d# O, y) f- Y; O BYTE nSrc = pInvSort->GetItemSrc(i);6 P5 }! c6 f" l" y; T
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 r1 o7 P+ G$ S/ t4 ~ if (pItemElem)
; v4 _7 ~# q' ]) t8 @) f. ~ {
+ G% e' p: X* p2 O$ x; g! S1 N8 `. E if (IsUsingItem(pItemElem))
. r, P9 T# c# h' i& E3 T% M {
% p2 Z( C9 F# ? G* P% S6 Y //这个道具无法移动,跳过+ Y+ w: b" J/ w3 |* s+ Z
continue;) |( T8 q* k( r& Q; W6 G8 k+ `
}5 g" I! c" H/ S( F4 f- C
}else{! ~* v! u" A0 ?2 T; E5 c6 T0 e- T
//空位置 不用动
: P) m- Y+ \/ }& R# E u) k continue;2 l6 L7 r$ w5 p$ c' t, I
}& ]# O3 B) ?) \
////////////////////////////////////////////////////////////////////////// W, w, g c+ c0 w- g4 g7 l1 n
//开始移动
2 T# O0 ?, q" f& D/ l8 j2 p if (nSrc == nDestPos) A1 b$ L; X S O1 m
{ a5 O9 G. A0 k7 a& {) T# f
//原地不动
2 u* T( `# T$ f- f2 B nDestPos++;; T7 ^5 r! [7 |2 j
continue;
8 Z8 n. A* Y9 B }
, C% _ i V- E3 J9 F$ ~! R2 X pInvSort->MoveItem(i,nDestPos);- h4 Y; J: u# @6 K+ f8 I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. x8 Y; v# i$ A) g
Sleep(5);, Q' o7 X1 q4 h2 R. d
//Error("移动 - %d->%d",nSrc,nDestPos);
( R" L% h% E3 v$ x nDestPos++;0 t; n9 R$ l8 {
}
) j: e! y" D& U: E" o7 v! n/ f _ //取第一个元素的信息% S: X3 F* T I0 M% h4 O
/*: C. Y t7 ]* F+ X! C5 r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, c' @7 j5 S- X7 m {
$ q$ m: M$ d4 s Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 }! w& I( M/ l4 }1 g
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 d( g/ Z9 @% Z* O: C3 B }( S% f9 f* m0 I6 W5 V
*/5 \) y6 e5 K+ n/ }( p
//////////////////////////////////////////////////////////////////////////
# [0 B2 H1 @- f5 W; u" E/ i break;$ H3 V6 G9 \( U4 X
}5 f4 q3 }! k1 _7 u, ]
}
. u+ B9 z/ c' q9 O) i" S/ Z}
) K) P0 e- E! L$ Y2 Mm_wndMenu.SetVisible(FALSE);
( \4 c- d+ |! B ~0 @
; D2 k X( P- b6 v& `3 @- ~--------------------------------------------------------------------------------------------------------
' c& t8 t; F/ M; P# h. q/ }2 H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 n, o% Z( K/ J" |9 E5 b4 z7 |
{$ r5 F: i& @* _' \- |5 B
BaseMouseCursor();: K% a, Q9 Z q
}
. x i/ ?% {* n5 R9 O在其下添加:
! g5 d& E+ ~# G! u( a. ?void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ h* {: Y* \ ^, b{
- b. c" t. [- t$ G1 V6 {4 p/ Em_wndMenu.DeleteAllMenu();2 U. Z. K$ S. B1 `- h. c. {
m_wndMenu.CreateMenu(this);
$ Y- B( n5 W9 X1 ]/ U) B; Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 d7 _9 v9 S( M3 [' J
. m) k* _1 }' L! w1 o( {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ q) G% [" ^+ `8 x9 Y# L {{7 {( j2 S1 t( Z2 I* B- j0 n
//P以上级别才可以删除所有道具* u9 b d% x- \3 [8 ]" g
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 {/ q% U0 ]/ ~# b; e% }( l5 `
}
+ ~9 x4 Q3 X! N; D- k% n7 pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) p5 `- z( h/ F8 U zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 O! p; p+ U: a0 N1 P+ L$ V! D. ~" N
m_wndMenu.SetFocus();8 [% A( k( @8 I& Z1 f& [0 e' Q7 r
}. \6 @- p9 ?& o
------------------------------------------------------------------------------------------------------------
/ [) Q! I; `& {! S6 J2 F% Q*************************9 @9 W$ t1 e- F4 l1 s( Q
WndField.h文件: Z* c+ j7 i0 ?+ c: R
*************************
( G7 P2 i; K4 V" N' r搜索:BOOL m_bReport;
7 N1 p3 W" K: T, X! X4 D0 u b其后添加:
$ u& ]# t! K* [0 LCWndMenu m_wndMenu;
4 c5 A) D/ j, _1 r' a搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% r; Q: A1 r3 \$ I0 ]3 f
其后添加:
: J4 I k. b% u! t- fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
% y; b$ X5 n+ G& `4 e. z( L% f4 \8 H1 z0 s/ ~
2 c# Z% l7 a/ Q1 F- h+ l! a |
|