|
源文件中_Interface文件夹下WndField.cpp文件
3 s+ x9 I& A3 m: }+ L6 b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" }1 Y% K V) C, C# E, T: J
; |% R O. \. M6 J
struct sItem! `. j: h2 g3 L( B0 t
{
$ ^; S' Q2 \8 o+ F4 E& t+ ?/ jDWORD dwId;" U6 @" `; Q5 [( y2 m
DWORD dwKind2;" l, R6 E1 _& m, C
DWORD dwItemId;
6 p' d! C5 b: x% J& _BYTE nIndex;
3 n; x0 W1 V5 B# X6 d+ ksItem(){
( a* d8 D2 u1 _% N dwId = dwKind2 = dwItemId = nIndex = 0;( B1 @6 }' P, N& g+ P6 Z
}8 ]3 I' o- F3 r) x. C1 [
bool operator < (const sItem p2)0 }; ^% b* P+ \; v7 o
{- q1 |3 i: Q# e# ]
if (dwKind2 == p2.dwKind2)
4 x+ P" |" A, N8 B0 W, P {0 A5 k* G4 N% f1 I6 s" j) d
return dwItemId < p2.dwItemId; }9 X' G# f5 r
}else{
}9 ~2 m1 V- k9 m+ {! [' O return dwKind2 < p2.dwKind2;
8 u. Z* R9 P1 G+ R3 a& H' R$ ^ }
3 k" {' E' y, ~}
. Q4 V" i: q2 |* v, y1 m6 O0 V! Z};2 D9 X! N. C& E+ ?: s* J9 G
class CInventorySort
6 }& e# f, a# C6 I: T: P& N{
+ U h- y# n; E# m$ }public:
h$ R1 R% q# T5 S7 Y3 ]9 oCInventorySort()
) T3 Z7 a W- }{
% O9 p( n& `) b/ s m_dwPos = 0;
! V+ T9 ?/ v: M! K) n" t) t9 M}
$ l4 K: F% w/ A- F- V& J& n( ~2 c~CInventorySort(){}
* _4 {8 d( ]3 zprivate:% l, w4 X. ?! ?6 L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 q) x! z, t+ Q" z
DWORD m_dwPos;
' y4 [" ~& I; g/ gpublic:
D# A) v3 M! K8 A0 F _' I; [void Add(BYTE nIndex)
* z8 X; n/ M1 V{7 h& s* z! P6 v7 v) z/ G
if (m_dwPos >= MAX_INVENTORY)" \' R0 ~- c$ B: K9 w0 x
{
9 u8 s- N. Q1 C6 P8 w% E# Y return;
! C0 y# W2 o+ D }
. w( N; @ Y- ^( u m_Item[m_dwPos].nIndex = nIndex;4 j- U1 |' u* v- p
m_Item[m_dwPos].dwId = m_dwPos;
7 n0 w& Z$ s- }5 ?0 v' k$ j+ y. H9 ] m_dwPos++;
, N& ]$ r1 h, h2 B5 P. C}. O& G! y& w( r
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 m e( }& F& r, Y `( W+ }0 E{& b9 r5 {/ n: V- N0 E7 ?, k
for (int i=0;i<MAX_INVENTORY;i++)
, x7 B( @" s9 K( v( j7 K {
8 ~) a' O, T) k; Q1 j if (m_Item.dwId == dwId)
* x+ l& j0 q" C; o0 G {& Q) |- u/ ^9 S8 v. d" Y
return m_Item.nIndex;
1 ]$ J7 u) A. Z$ ? _ }0 Z# ^; x4 } b4 C0 ]" M0 g% C
}. v( P* }9 R: E9 x0 O
return 255;
; }3 d# }% z0 W4 s5 U9 ?; T5 S}2 M/ D8 J" ]9 Y9 t# q2 P2 C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 q% @4 r$ K8 b- C" W7 d0 H{2 P: P) q T# D$ v$ r% r, M
BYTE nTmp = 0;7 p" a: f! n2 V( H: Q- l/ e* ~
bool bDest = false,bSrc = false;9 \. T% T1 Q. M- D, w4 E/ e
for (int i=0;i<MAX_INVENTORY;i++)# n$ X4 L; O+ y9 g% j
{
2 r$ f# H4 C$ [2 l if (dwSrcId == m_Item.dwId)
% s& F/ K _/ U) m/ v! P/ C {
! p0 S% g- O# b8 B7 ~ //id相等 则 改变对应的dest和src
. P* p3 L9 O0 j. t" l2 x0 h nTmp = m_Item.nIndex;
. N6 {8 r0 f9 k8 v& [8 ~ m_Item.nIndex = dest;" ]6 }0 ?" C. M& y, Z
}: u" j d1 G" p! E' [! y5 Q! V: g" b; g
}5 {- ^9 }0 j5 Y2 m
//临时数据保存完毕,交换开始. d8 }. g# }3 u4 n- J
for (int i=0;i<MAX_INVENTORY;i++)' i) G' z+ C* r( U6 x
{
7 U9 i, e8 | ^2 k$ I& V8 T if (dest == m_Item.nIndex)
; a; z& ]& X, Q; R% t& ` {4 u8 S" _5 V! F& i+ o) B
//id相等 则 改变对应的dest和src
- b# F/ v7 x; |+ } m_Item.nIndex = nTmp;1 q! {6 G+ Y; ]
}. M4 s. l) d9 z' d+ I% e
}3 A8 ]. Y) j+ d6 I
}
0 d3 N; F' i6 E, v5 J};
6 m% C, N, D( K7 e: Q-------------------------------------------------------------------------
$ A' ]' M' \% x/ g# X依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% G' \$ c6 l3 ^9 q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 h2 \" S6 }1 Y0 q紧靠其上添加:1 P9 U9 W; c. ?" t
if( pWndBase == &m_wndMenu )1 F9 }* z1 G9 M, w- l0 O6 D
{& D7 } b3 x' l5 \& a
switch( nID )
; l/ l4 v/ w: i% q! |, l& X4 F* R {7 t# t& `! @/ \$ V! m
case 2:
' w0 _3 V5 I$ }% s4 h {
/ g# c8 X, H6 S% d* ?; ?" N. e# p, C //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! M% O2 ~* l! a# j0 q. W/ I3 s
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 X' y8 V6 u6 V& p1 t: C( `
{: x$ l- g) P3 t) j- W$ H& K
break;" d6 x2 }" R4 v7 j" h
}8 m: h5 u0 ^: a) Z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 x0 Y F( }; m% ~9 Q) ^
{, l2 J5 |' a, O v3 W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 i9 |+ |8 d7 j
if( !pItemElem ): x8 _% ]1 L6 F) M' K+ d& Q( B- ~; h
continue;) u' }- [$ l1 v: E" ? b6 I
if(pItemElem->GetExtra() > 0)
! n8 D% g( T# C, y/ M continue;
* ^$ {0 |- [& H! h) m; ~- l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % `* ~" E) `) \7 R# s, K
continue;2 _+ ]1 U) \5 m5 @
if( g_pPlayer->IsUsing( pItemElem ) )2 e, b9 Y& @* c# K" u9 D
continue; ^& Y1 y i- H8 s; i6 t
if( pItemElem->IsUndestructable() == TRUE )( I/ U _: V: N1 a) Z1 t
{
7 a4 c, c0 h1 A) K) K g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* t& V3 Y2 X+ ^, Z! s- @# W
continue;; z* X; s. w/ v; y+ z8 \ o& J
}# i( X/ g# d! b! M( @6 t3 d- @" L
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ ~" J2 Y; {" L0 v2 b. o+ E
}
5 ^, u( w6 `8 b7 D break;
, t9 @: W5 \& q" V0 s }
^8 T# e, s- h/ O, ] [" t: \ case 1:
5 a/ h9 y. H" X1 o9 T0 X {
$ e9 E9 q f* a/ `% | //整理背包( t( U1 }1 M( @5 e6 B
//////////////////////////////////////////////////////////////////////////. G( J4 x0 d0 _) U' G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- w e' w/ p( \* L
//////////////////////////////////////////////////////////////////////////
- C* C# P, t( v+ U //////////////////////////////////////////////////////////////////////////- {# _6 d% o3 J6 o2 S; v
CInventorySort* pInvSort = new CInventorySort;( y: ?; L2 A7 [
vector <sItem> vItem;
$ s/ X* }: X/ a2 j# C* s. t" d vItem.resize(MAX_INVENTORY);//初始化大小. A: T8 H% Z, O' s& ~$ g
//////////////////////////////////////////////////////////////////////////: X5 t* O/ D# i3 t
//填充数据1 Z* B5 c. x( p4 S7 r! E1 q
for (int i=0;i<MAX_INVENTORY;i++)
5 R( R% @1 u4 A/ r' R: L {" c3 _/ y$ o: r3 T- t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ k! B: r+ O$ U% Q( O" P if (!pItemElem)
% T* s/ s0 T1 B- p3 Z( e: t {
7 O; K* u0 ]. i% [! p. v vItem.dwKind2 = 0xffffffff;- j r, Y* {& A2 r/ |7 G7 f$ K7 R
vItem.dwItemId = 0xffffffff;
6 {' t/ q- t' H& x1 k; {" Y vItem.nIndex = i;, \# X1 G6 i6 h: o8 r& S
}else {" p" V* f- _! \$ U* ~: I
ItemProp* pProp = pItemElem->GetProp();
& P7 @8 K: a- C k+ t vItem.dwKind2 = pProp->dwItemKind2;) w8 W+ e i) M% \& M
vItem.dwItemId = pItemElem->m_dwItemId;, t' G9 ^5 x1 F p9 s
vItem.nIndex = i;+ h& o/ s# t1 c0 [; d
}9 Z: v. b( x7 l% u% ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ B9 d* @$ T9 A }; U- _4 ^; m# J- {9 c
//////////////////////////////////////////////////////////////////////////
% P" t; Z; [, W5 }$ b" j( V sort(vItem.begin(),vItem.end());//排序9 `& M9 a1 o3 R* |# M$ `
//////////////////////////////////////////////////////////////////////////8 J7 K" e, s' l) U8 p* v
//交换
1 G( T' \- A! E" v9 ] for (size_t i=0;i<vItem.size();i++)
1 y9 \- ^: ~$ G7 G4 T {
( B! d! t( D" `! t4 P4 Z: ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' u+ V( M* F n* A e& I pInvSort->Add(vItem.nIndex);
7 J' U% G7 W' o6 ~8 ?1 n: C }: p) A" @* I; O$ {, e; ~
BYTE nDestPos = 0;8 i! t6 E* j0 s
for (int i=0;i<MAX_INVENTORY;i++)5 w# C) z! F7 J4 N. k" K
{
8 r- F( h y0 q8 Y" J8 | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 j* C9 r5 a2 \, U8 A9 ?/ A* p
if (pItemElem)
2 j! B7 s( {/ I/ z {4 D* U8 G' l1 F+ b6 D
if (IsUsingItem(pItemElem))
- r5 Q+ O9 T T& z% q {
8 ~& @* ^. G2 b; n //这个位置无法放5 B2 S9 n3 K! s' {' }
nDestPos++;! V" ?1 p" `2 }# U, y+ x' x
}
) P0 F! r# V& L& n, \ O }
9 q9 u2 |, T7 R9 b BYTE nSrc = pInvSort->GetItemSrc(i);" S( w1 R, a2 u4 h: c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
p$ k4 q j1 A/ ?2 i if (pItemElem)' @4 W0 m+ u! o; d2 q
{. Y6 b- G! k% M5 @9 y* @
if (IsUsingItem(pItemElem))- M) R7 u8 J: c Q, Q' h4 u( @6 s
{
' j: \. D) ]0 z6 Y3 J1 l# F6 { //这个道具无法移动,跳过* q2 ~* ?; _* ~3 f$ ^% ?/ |
continue;. M: H0 ?" k0 i- t0 b% |
}
1 U' M# s& I: _: D; o) O }else{
" ?2 D* @$ C1 z1 m5 k- G- m //空位置 不用动7 Y3 H1 }3 }' d' w
continue;6 g, p/ ?9 ?- M f2 r
}
' d% d! J; P+ V5 v //////////////////////////////////////////////////////////////////////////" y0 i9 {3 f1 ?0 n
//开始移动9 g3 R* D* ^7 C- T% \; ~
if (nSrc == nDestPos)$ a4 b' v' t7 d4 A) z* Y" p# K
{0 Q/ U9 g5 o9 _( j
//原地不动% k6 o6 G" K P- {
nDestPos++;
2 Z' c+ ^' h k1 D7 a: Z! @7 z continue;6 k7 x' t% I3 _
}# ]+ A5 C) d8 z
pInvSort->MoveItem(i,nDestPos);
, g% ^9 q, G8 `8 X; {1 B6 z g_DPlay.SendMoveItem(0,nSrc,nDestPos);% ] Q j! K3 ]: \2 C& |1 \
Sleep(5);
. v( V8 Q7 Y! p# O5 o5 v5 x //Error("移动 - %d->%d",nSrc,nDestPos);
?/ A) [& A8 \- l5 p% z' A nDestPos++;, k! m2 R+ W$ r7 g, O: [
}1 z# l- p0 h* I
//取第一个元素的信息
8 q3 v4 K, y2 U# {' ?1 p; M! q* h /*
, ]6 s# Z1 Z& K: T$ o if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% r' |% w6 a. _$ s7 s6 d {
; l2 R# Q( Q$ Y0 M2 n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 n, |9 C& o9 e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. ?. H |* J: c! v; u; e W
} q% S8 y( M( \. B& ?
*/# Q8 G# w x8 D) n
//////////////////////////////////////////////////////////////////////////
& |' N" l [1 j' I1 F break;" V( j2 U, @: N
}
! X$ W" v6 T( }9 p% W } 9 h3 W& Z. d' e! G
}
?! f' s# @: D* V7 v+ q* Xm_wndMenu.SetVisible(FALSE);
: u+ [( h1 O: y& S; Z% z& T" F- r u: L+ w4 k$ y7 j
--------------------------------------------------------------------------------------------------------* _$ N) c+ @& H% h& @& |2 r' p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# k7 O6 d) q5 T- r{
; M1 P. V* L4 u3 DBaseMouseCursor();2 W) i- P7 i1 ^9 J1 A) Q- R( J( B
}* a, t4 k. x( t: v
在其下添加:
5 b: q" S6 O0 }; D m0 j4 j- vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* r2 L2 _# T: \" H' g1 r) _. z{- G; Q& P' z: T5 t$ o* k% l
m_wndMenu.DeleteAllMenu();
, y; Y. q7 f0 m/ t: @m_wndMenu.CreateMenu(this);
) Q, M9 D6 O- i( c% q+ _ _/ o3 qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 a+ q. ?, }3 e* I; w4 X0 C) `4 E" x3 u# ?* T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ |/ N7 ~4 u+ U
{4 O$ ^& f1 N* ]
//P以上级别才可以删除所有道具
$ k3 `0 l' T2 m. N m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ [4 X0 V" e. Z
}
" C8 F5 a7 F- d+ sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. k/ ]) ~' b# R/ I t, O# |4 T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" o$ |+ \. b0 y0 B8 g' e) U
m_wndMenu.SetFocus();
3 J7 q; _" |' b" W+ D: [}! ~3 Y, }: X' H8 J; \3 S/ n) K
------------------------------------------------------------------------------------------------------------
4 O- R$ [$ @! b) c' o3 |*************************
M, P* i* ]" @# d4 V( VWndField.h文件
; d' E6 ^% W- i! `*************************
, }# P z8 k) P. H搜索:BOOL m_bReport;! w: l1 ^% a- s0 i# h8 m- a) D
其后添加:
$ Q0 B: ?# |1 \1 d( WCWndMenu m_wndMenu;9 h2 d2 V/ ~0 h. n& @' A
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: ^+ e2 F" ~( o# u$ q6 `其后添加:
' _, r% `. ]4 K J" }" vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: X! M# `# v9 g5 X6 H: v
5 x& r. V+ D; C- P9 a! F. G7 Z& _/ t; s$ y& \
|
|