|
|
源文件中_Interface文件夹下WndField.cpp文件
* k" x9 |) G. ], u0 D0 z5 I8 Q4 j) s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, G" C$ V2 U' Y8 F& J& @ `. j0 @: y& s- J
struct sItem! F' f! q# ^+ U- K5 @
{
, X$ G$ X/ ?% ?DWORD dwId;
& ~; C4 E: |; Z' {; _3 N0 l wDWORD dwKind2;
/ N& n5 n: C2 u" g' B2 h dDWORD dwItemId;
5 t z2 Z2 {9 v8 vBYTE nIndex;
" q0 l) e6 a5 f3 t% csItem(){
( Q* }2 Y% }+ O0 G dwId = dwKind2 = dwItemId = nIndex = 0;$ ~/ l0 w+ f5 B ^. w( v
}6 t; q% ?4 E, d4 i! |
bool operator < (const sItem p2)6 R0 e/ o# L) ~7 s5 \ z
{% W4 q) W% k' F4 {
if (dwKind2 == p2.dwKind2)
0 R- S% r! x$ u Z, ^' G {$ R8 l: z% N3 y1 s1 |" w3 t1 b
return dwItemId < p2.dwItemId;
9 P0 \6 j$ U1 m" ~- o. r }else{6 e& k; F1 e2 u. F4 b& A/ D
return dwKind2 < p2.dwKind2;
/ [; ~& e" n2 L. n. d- J. v }
0 i! ~9 a! k- I e! [) A}, N5 Z5 l9 L. W# I" _) ^
};
/ r" L' q: w( Z6 k0 r, fclass CInventorySort
. K5 k, ]1 R; f, r) |6 G2 C{
* k6 Q( h/ ?/ n: a: y1 N# g" {* C; X$ Epublic:
) Y3 |- t/ e# W1 u2 HCInventorySort()
/ Y6 S( e( h4 p7 J{
j, v( w- {1 ~) U- { m_dwPos = 0;
1 B9 t ] Z$ c5 }6 C1 l! E. W r+ @}1 O6 z+ i# U: x
~CInventorySort(){}% f5 W @! n# ]
private:
5 z3 M5 k p8 XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 O8 P2 ?- b9 }1 U# o/ S2 m/ z
DWORD m_dwPos;0 n S+ A" n3 Q* Y
public: W2 D3 h3 o. U1 _
void Add(BYTE nIndex)4 @: O C3 n& j- r) {
{- W- I, h! o9 e# I7 Q
if (m_dwPos >= MAX_INVENTORY): g4 @7 b( E( a( y: f" M; d
{
1 J* ^: n9 j. c# l" c return;
1 j! S4 `% {) \$ @- [, C3 l% d+ c$ e }. z- L1 t1 j5 R7 N
m_Item[m_dwPos].nIndex = nIndex;
5 x* p0 p* n n9 F! u m_Item[m_dwPos].dwId = m_dwPos;
1 o/ z0 U$ x1 Y# I7 W: ^( O5 E m_dwPos++;
5 B) G! ]8 h8 ~4 M1 I: F/ I* q% E0 @}! w9 a& o/ K- O! E4 i
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 r1 ~, z! x; `
{
. s( {: M# w1 ~6 K) G0 ] for (int i=0;i<MAX_INVENTORY;i++)# g) E5 C! }" Q; p
{# @# T: w9 t# z4 e6 j
if (m_Item.dwId == dwId)( m% \5 k9 o8 X2 U$ n
{* a& l3 ~4 F G) C N% O
return m_Item.nIndex;5 X. `: w3 j4 b
}1 |! f( E+ x) R; y
}
+ {( h( H# v0 Q! ~ return 255;
' _1 O) N [0 l6 O2 }* ]}
* a) a$ i* l9 Z0 I! u3 h4 y4 Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. m$ D4 k, G% o$ J{$ c5 z! t, E( y7 R, \" ~
BYTE nTmp = 0;2 K3 v' \, n- W' O# G
bool bDest = false,bSrc = false;
: J3 I( S+ i9 {& V- @ for (int i=0;i<MAX_INVENTORY;i++)- p/ R2 D( j* @! R+ N5 ? }
{
3 ^7 Q: ~5 h8 s( J( h, ~ if (dwSrcId == m_Item.dwId)
) c$ A% h1 u4 l% K4 y {
8 I! N+ U3 V5 x" O5 h //id相等 则 改变对应的dest和src6 [2 W- z. P7 Z5 H
nTmp = m_Item.nIndex;% L$ @" y; L$ `3 w! N3 s. ?* z
m_Item.nIndex = dest; N$ C3 Z a N) y
}' J9 e$ A" V7 f* g- m
}
$ x& Y% y! H! G //临时数据保存完毕,交换开始
. h$ C1 E4 F) |+ i for (int i=0;i<MAX_INVENTORY;i++)4 z4 E) o1 g) q- H7 b0 r
{" C+ w% I$ N; S, Z$ I+ M1 _* P
if (dest == m_Item.nIndex)! Q3 t9 s* Q: k& e) Z6 z& D: ~
{) `2 Y( H5 O- e- G( b
//id相等 则 改变对应的dest和src
; C7 D! y; t4 ^: A2 u" Y. m4 ~2 D m_Item.nIndex = nTmp;2 ~ K1 h! \8 r9 m$ |5 B) C
}5 h) h' e; y% T- Y2 {" E5 z
}' ~/ X( m6 [3 i. L# y( U
}
2 |' R5 C; R; j* ]: J0 ^0 p};
% [! o Y1 d. D5 A-------------------------------------------------------------------------, D# A0 l( O' W; O1 {7 G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) q5 A! m) p$ u {% [) Z" y0 t( @, z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 U F) u7 t+ Q8 M紧靠其上添加:) R) R. H o$ e
if( pWndBase == &m_wndMenu ), S2 b* G- P$ W1 b+ D1 Q8 C5 c! v9 n
{
% z" B; _ O. \, Y4 p/ N% q( r8 J& S switch( nID )
) K% b2 U7 l6 H+ g8 P) S3 `8 I {/ L w3 G7 N1 K
case 2:2 K& `' @3 K: B# v. Q3 s
{9 c7 Z1 w- q2 q) p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); ~: M1 F& }, h& d1 v
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# r6 G& T* D0 _. G9 j8 e, k
{
6 d. n! S+ I1 y( c% Q0 o* v+ B break;1 F+ M8 q" O; q$ C# U
}
. E0 [; n( M9 m# w8 l8 D, J, d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* K8 Y& [+ b4 m0 X
{
' b) q( U7 b: l6 R/ O2 Y ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 k# p: T6 h/ S$ Q. W' O# M if( !pItemElem )" z$ y: J6 P9 k$ z
continue;
6 b9 Y/ h* F+ R: _# F if(pItemElem->GetExtra() > 0)
2 g4 }3 H: Y1 |$ V% v/ Y5 | continue;5 q0 g* h( r( T$ L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . ^2 G/ _3 I) V) ` H; q T* {9 J' @
continue;# i. q/ e5 \; I2 j$ }
if( g_pPlayer->IsUsing( pItemElem ) )! r+ u1 O5 d D
continue;
& B$ N0 \9 L8 _ if( pItemElem->IsUndestructable() == TRUE )
, p5 M) q( A& T# D {, `4 o' c5 @+ {1 [' F' C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) T! _5 t0 e q6 ~
continue;1 W* C) o$ P, |: h$ j6 h
}5 W# p; O! h$ ]! P0 o3 `
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 I# k; N$ y$ H" T/ O) `% `# X+ |% ] }: j% i! ~0 p- Y3 H# h) s4 X
break;5 L+ z9 O, T; a2 `
}3 N6 o5 ]( s; U* D
case 1:
7 @0 h6 c7 Y, j: ?' q. w {4 K: G: ] V$ Q( j3 }( p
//整理背包
! h' @7 l( z5 _1 b$ r //////////////////////////////////////////////////////////////////////////. e+ A7 T0 B; _4 P
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 g9 a) k- P$ ?6 n* i+ J //////////////////////////////////////////////////////////////////////////
7 X) K8 U" W+ t! v* b //////////////////////////////////////////////////////////////////////////
, F \" Q1 k- U CInventorySort* pInvSort = new CInventorySort;
7 m' J- m5 ?/ a; R) h' u9 j vector <sItem> vItem;5 X0 o4 i, I& \, V
vItem.resize(MAX_INVENTORY);//初始化大小
+ W: c; s; {# m( m: T% F, R, R! R //////////////////////////////////////////////////////////////////////////7 [9 A2 h e+ s5 t
//填充数据
# h. b1 a$ W% C8 ~8 i5 s: E for (int i=0;i<MAX_INVENTORY;i++)
$ ^" ?/ O- B0 u0 \( W/ g {
$ D9 h5 M7 U3 Q. \* @/ j* b0 Q( D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, W8 v( k3 \5 ]. k; Y' e! c
if (!pItemElem)3 m1 z1 m" y2 a$ |
{
4 M' T5 X5 b) b: U7 m vItem.dwKind2 = 0xffffffff;) U2 _( J M" z* [& E0 _: D- P
vItem.dwItemId = 0xffffffff;6 z- s7 h) Z! V$ W6 e* b
vItem.nIndex = i;
; n- X9 d8 [" Z) O G }else {% a* y/ P0 v) Z7 x
ItemProp* pProp = pItemElem->GetProp();
' w$ m; l" l* a vItem.dwKind2 = pProp->dwItemKind2;$ q" R* }( @0 z, a) Q) f: N
vItem.dwItemId = pItemElem->m_dwItemId;
# H$ i- S& M' q9 P s( M7 n vItem.nIndex = i;" n- A* I, f0 M* e; f& \& t4 t! \
}
5 l& l# c; P- D' x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) P. s1 k/ M2 T! U9 ~. {
}7 Q! D; O1 k& A1 J% O3 D
//////////////////////////////////////////////////////////////////////////& y' Z! q4 ^& D+ q$ O6 D
sort(vItem.begin(),vItem.end());//排序2 U6 W* y& Z2 k
//////////////////////////////////////////////////////////////////////////
, @$ ]' [ h, c, }/ X( P$ h //交换
- U' [3 b/ C4 U7 G; d9 _1 b7 @/ r X for (size_t i=0;i<vItem.size();i++)' i: n" M$ u' O: `- r# _
{
, g; c; S* C5 ~, p //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ i- Y& Z0 q9 x; v; G- T5 j
pInvSort->Add(vItem.nIndex);3 z2 b; B, }8 i+ ?
}
% X) ]( X) H* |: { BYTE nDestPos = 0;1 ?) |; c" D1 N1 a
for (int i=0;i<MAX_INVENTORY;i++)
- B6 u1 W1 Y2 x8 c7 ]0 X { K! j4 V2 I& U+ S: c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 `# C6 [3 i; O9 R+ U1 Z
if (pItemElem)! B" q0 x6 A3 P9 }* [. h9 D0 J. R
{+ \& `4 C* w7 i, X9 ]8 A* t
if (IsUsingItem(pItemElem))) S9 m5 f# p: W" F8 Z4 c
{- R7 S; D/ H7 p( `
//这个位置无法放. U+ `& I% |6 c0 h c
nDestPos++;
, n6 I, B( u$ ^" T& ? }/ m' i x' f6 n3 L
}
( [! X( [$ H6 E$ v1 O BYTE nSrc = pInvSort->GetItemSrc(i);9 J& M7 B6 ?- y, @1 y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) V( A3 `& E Y i) v if (pItemElem)
2 V1 y. [8 A; H( H# j2 D0 h" H5 j {& y' M, A* u& ]" ^+ g1 h
if (IsUsingItem(pItemElem))
3 U) G' a# R, _% { F {
9 c0 v5 d! k9 i& T2 k! [& S+ | //这个道具无法移动,跳过) m; y/ C& H# m* E- ~
continue;
# o3 d" F2 |8 x8 N }
# J9 j: m7 ~. E* d; \ }else{8 K: M1 @; R& @$ _
//空位置 不用动
d& e- Y% i# v; z continue;
5 g& P7 C0 a) _ }
0 v* Y6 k) i. t v //////////////////////////////////////////////////////////////////////////4 n, i2 W7 ]+ j, t M2 s
//开始移动
1 ^0 t- [. d H0 n9 d if (nSrc == nDestPos)5 ?" D" c0 |3 A: U& x$ F
{, k1 P, m" |) B# Y, B' h3 ?/ ^# L0 s! w: S
//原地不动
0 z: @; K6 C( A% W" s$ q nDestPos++;9 F0 T$ Q4 X0 Y+ `
continue;, I8 X# m8 b1 f9 p2 t- U3 N
}7 N' T y" s3 c4 {2 q7 x* C
pInvSort->MoveItem(i,nDestPos);- @, F8 X( e# i- a" I0 [( X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& q, U( R9 B+ [" q# l) J
Sleep(5);3 p4 a6 p) x% |7 {: o, U
//Error("移动 - %d->%d",nSrc,nDestPos);
0 H1 y# j4 ?4 n, C/ W- T* ~# A nDestPos++;
8 @& ?. N9 r9 [7 P% t, }3 x$ g0 L. a }" _" }! I+ `* A( s( P
//取第一个元素的信息0 C1 D8 _5 Y# P* |- }1 G
/*6 W6 d' X, y& W! v4 C
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): X O; V5 L; W/ j% C, Z/ z7 O
{7 n+ F3 e& y/ e9 N# T
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; G1 o! H& X- p8 L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& J0 t1 ` |9 f4 @ }6 n$ a5 w: T4 x" x5 X* d
*/
1 Z9 _, n! H3 W3 q# P+ w //////////////////////////////////////////////////////////////////////////
# e! D) H( a8 T$ k break;# A2 K. B4 b7 p8 u, r: G! L0 { n
}' d9 |* w6 }- g8 n9 m; H4 w4 q# E* }+ h
} ! r+ J/ ]) x; V
}
6 ?6 N" R! E: K% B2 t% V' Dm_wndMenu.SetVisible(FALSE);
8 j9 m$ g' o7 \' X. F3 S7 U: h6 `4 \) ~+ Y
--------------------------------------------------------------------------------------------------------
2 W0 g9 l" s2 |6 T$ U搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). t- g: s& @% e
{
# U9 O# c: ]; G rBaseMouseCursor();7 T7 [' F3 A+ G- Q9 A* p
}2 }# j0 A, Z! W: F9 n5 N8 w
在其下添加:# {& U6 @ D; c0 f& T4 e, @$ |* z' D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 I. ~1 @: V: i3 s, A7 v/ a ?{4 `( \: W! |% \. y8 h" m
m_wndMenu.DeleteAllMenu();" G) r: H0 Q0 K! _
m_wndMenu.CreateMenu(this);9 b" K$ A) c" J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) h* S+ ~# f- m$ [" b
0 k7 `+ Y4 A! b n/ T mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 N4 T+ L( f& g3 F
{
' m! z' ?4 T+ ?1 U8 x& h K* e3 c //P以上级别才可以删除所有道具
. H$ R9 K4 @3 `) j m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; Z! v3 M; a0 f, P! ?- t5 o3 B
}
( W+ ^* U4 t# x! Y2 Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 q V( U, I7 pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 Z& ?8 I( K2 {1 f; p/ m3 Km_wndMenu.SetFocus();
3 E8 Y' C* S" |9 p4 @# v6 |}
* ~, N/ V! _5 u1 s5 Q3 P$ P------------------------------------------------------------------------------------------------------------( ~3 o7 m% N# T" x5 R0 m2 {( c
*************************
& f0 Y. U5 o8 _+ ]WndField.h文件
- Z! b1 E' }4 P& R/ a# _3 C*************************; y) `/ D/ L. D$ Z* _
搜索:BOOL m_bReport;: }5 D, f- p/ E# r
其后添加:
p6 M7 G/ ?7 L7 p8 V+ q" C7 dCWndMenu m_wndMenu;
# y, @ ^7 d* z' G; l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 m) W) p9 R8 a其后添加:5 g5 r% J5 x" T, j+ \3 u, k \7 w
virtual void OnRButtonUp(UINT nFlags, CPoint point);$ w6 U/ i1 r2 p- U# F6 b8 W
( T; n" u4 \3 G% P
! d, j/ U( y( T
|
|