|
|
源文件中_Interface文件夹下WndField.cpp文件
+ l0 X1 x6 M5 _0 M4 S3 a+ L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 E/ {2 S4 \" ~- Q" f+ k; O: {
2 P* y; O4 A) y; y- T7 dstruct sItem8 m) h7 |0 |. x
{1 y3 D, V7 x. @8 a3 _" X- @
DWORD dwId;: i0 ], c. J: e
DWORD dwKind2;
5 d) G& K6 h: ?, h4 e0 {DWORD dwItemId;
7 l8 V Q$ F& bBYTE nIndex;; N/ T/ _2 v# }7 _; C: H ~
sItem(){
& S6 \, m/ g% d$ g! u- o5 H dwId = dwKind2 = dwItemId = nIndex = 0;% E* ^- |, Z) U! e2 k$ C! J/ J1 Q
}9 M) ]# S5 o% ]( f: T
bool operator < (const sItem p2)
' m2 k: b( C/ P$ _{& j, B! [) Q& o6 f
if (dwKind2 == p2.dwKind2). L1 F( D8 B' a4 R8 i
{
9 G6 O* w# w8 z0 a) A return dwItemId < p2.dwItemId;
( Q5 {* p/ z" G3 t, ]: r! W }else{
+ d+ w& |9 }* ^ return dwKind2 < p2.dwKind2;
7 W( Y" b7 G( _) [, G, g }$ f& x8 l; f4 j$ A# {
}
8 G9 l6 I8 ?3 R5 X+ x2 s; J w};4 C3 j5 `: g$ b# Y% }" R4 S! }% d
class CInventorySort8 r; g$ ~7 o8 I& V2 o
{9 s6 Z) q6 T4 L; S6 _0 k5 e. q
public:
- y; {7 O! t7 V* @. W5 gCInventorySort()2 c9 M! n2 Q, x, C( w
{
& q$ Z1 {# g# p' I m_dwPos = 0;
/ a2 s3 e6 h0 M0 v7 n# L' _9 ~}& }0 n; z) o! J/ c
~CInventorySort(){}. [& [+ \' a7 A# S" {* ], X
private:
- y; [" q) v% \- h( [, n7 U/ WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ i! P0 H4 {9 _, o1 W, bDWORD m_dwPos;
2 H9 [; u/ y; ~/ S; b& s' @public:+ b/ L$ Q4 f$ `( E" w
void Add(BYTE nIndex)
: F* h1 n9 @0 Z" Y% ^{
3 K( c+ B7 p9 N) f/ x/ |. a n if (m_dwPos >= MAX_INVENTORY)
# T$ {# f4 V3 ~& ^- H {$ Q$ E1 u3 s9 o; b$ D q, U7 L
return;7 ?5 X: B X2 O: U# ?- \
}: L: E- C4 r6 E& l$ q
m_Item[m_dwPos].nIndex = nIndex;8 K8 o: Y: V* T
m_Item[m_dwPos].dwId = m_dwPos;
) |5 B& f8 `1 W: [ m_dwPos++;1 u1 T& N" v3 d
}5 V" R! }4 J* E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ e: Z' t, i" p, |" U4 H: y L: G{9 e* D6 f5 C# ^% p0 ?
for (int i=0;i<MAX_INVENTORY;i++)
, P) i p, B# V2 j/ K0 J) ?& v {
( ]! O5 Y2 p% j4 J1 }: ` if (m_Item.dwId == dwId)0 b4 I- N9 r+ ^9 S/ M. m) P
{
! r/ S! l3 m4 L return m_Item.nIndex;6 F) F% h! i9 M- {: S, f/ V. J
}9 \* y# I; ~, P Q' t
}
! y0 t: ~; V( i5 A: |+ e6 T return 255;7 n3 _) ?) k6 ~' }
}
) M8 l3 _ o4 o0 i1 @void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( B. k/ E! S1 |9 v2 a4 u6 ?, c
{
/ I( u9 S1 f1 L BYTE nTmp = 0;2 F, K! b7 b; S* ~( h @8 r
bool bDest = false,bSrc = false;5 B; d3 ]: k8 q" p" S
for (int i=0;i<MAX_INVENTORY;i++)
3 w4 ^. ?. P* ]* w {6 P8 m1 m1 V5 k/ a2 C
if (dwSrcId == m_Item.dwId)0 k( E' j+ x8 F5 Z: K( ]
{
; Q' c) e2 K$ u& d" O: l/ u A: O //id相等 则 改变对应的dest和src( q0 S$ p& \2 |* V/ O3 m5 o; Q
nTmp = m_Item.nIndex;
1 @/ d3 n2 m: T- J. N- X, m m_Item.nIndex = dest;
6 X7 j5 d& ?' x5 }1 ?0 [2 y/ j3 {) J }
. h9 i) {; |. ~" t& q& v7 y }
0 A+ R" e8 t- K% k# p( U- E3 R$ X //临时数据保存完毕,交换开始( B/ b! ^( I: x0 M/ m5 B
for (int i=0;i<MAX_INVENTORY;i++)# J. l) M7 E# t) H9 U
{% K( b1 k# V4 i- C E, [# U
if (dest == m_Item.nIndex)- k6 V* |. S: P$ t5 A
{
0 m# R" H) }, Z' q8 K; ~ //id相等 则 改变对应的dest和src
& o' X5 G: M+ S/ |% E# R2 E% C* | m_Item.nIndex = nTmp;
; A8 Z0 E/ w, R; t& Q# T+ ` }
r7 r9 ~; V& ` }
- X" Y4 _+ r8 @ @5 L" r}# D! A: F3 y9 \' i; }
};0 l) }# w; A$ v
-------------------------------------------------------------------------) G# Z! `) W/ ?# f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 B/ ~4 T9 f7 G/ I* l m
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 G8 J% z- o! x$ A; [6 R j紧靠其上添加:
1 U" X+ o0 f8 B2 rif( pWndBase == &m_wndMenu ); \+ A7 s4 {- ?5 p/ [$ U
{3 h4 Y7 F6 Z4 o' s
switch( nID )
3 ~/ `3 P5 J$ P X0 E {0 c# B( ]! ]/ ?" u0 z3 u
case 2:7 }& e1 L. n% S
{
7 K9 ]% Q: T" q) k" ]. F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 ~2 X) l, e, ` T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ J. E2 V: B5 O3 O/ d' W' w# F# Z
{ K- H/ w! k5 s
break;
& t8 l5 w7 D2 w) y9 T1 M4 R: M" K }
6 O5 ]( u0 r: @# q; I7 u% z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 D2 j! d; X6 i {
$ p8 s7 H P# S1 x( Q- l, | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ G) S. c7 Y' S& E3 r
if( !pItemElem )
. a3 c% i) d; c continue;
. V/ X: G0 T/ Y0 s6 C' q9 C W9 q if(pItemElem->GetExtra() > 0)
: E+ v( o3 Z, T# i. t2 M continue;
! {3 _, f1 {: h3 y- l- C if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 \' K! Y: ?. } I3 {9 t
continue;
' c2 j. P% {1 q% f4 b- w, w if( g_pPlayer->IsUsing( pItemElem ) )
/ H2 |: D9 o( P/ M* f continue;2 O; ?$ y+ v2 p8 K
if( pItemElem->IsUndestructable() == TRUE )
: o/ H9 ^( W$ M7 V7 P# k( p" i {
; W$ g) y5 n' n; S9 m4 u( Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 X/ K/ H: O: \/ H% E8 ^. P continue;
1 x0 ~$ u P% p4 Y/ u* K0 ~ }& t$ p6 E) j Q) ?% u1 O
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 t3 b) o, L3 U6 ]
}
! v. g8 r9 z: k1 l2 |6 O' y8 M) e break;
/ K3 r/ v D: o4 X' x" Q }+ q$ [! P' L0 D4 E; G8 D
case 1:
+ m v* F* J- D: S- ~ {6 ? a1 o$ P0 q6 N5 |1 n5 S- s
//整理背包4 x6 f8 x5 J# ~' x! _
//////////////////////////////////////////////////////////////////////////
) e* u# q7 Z J. q3 Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 a5 X' M0 ~9 y( v
////////////////////////////////////////////////////////////////////////// i2 w0 S3 w- H' Z
//////////////////////////////////////////////////////////////////////////
I6 `0 f, Z5 i) W+ s# K CInventorySort* pInvSort = new CInventorySort;/ l. d7 ?! A( W9 o1 S; u
vector <sItem> vItem;% B, t7 V1 j+ K3 u
vItem.resize(MAX_INVENTORY);//初始化大小' n! C- ]0 \2 o3 M
//////////////////////////////////////////////////////////////////////////0 o, W; x: a' R; g" l3 v% h: u
//填充数据
- P1 G) X7 y c7 ]) I* H for (int i=0;i<MAX_INVENTORY;i++)
9 O! y6 z+ q1 l3 E {
" Q' S4 ~- T# |) n5 B# k& q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 K+ w# C% o# I2 H
if (!pItemElem)6 y6 y# f- e, S8 h+ i0 G- }. `/ x% i% J
{7 N: V6 ]7 J8 t3 ]1 L) K" L0 a
vItem.dwKind2 = 0xffffffff;
|# a9 T6 K1 j1 J+ m- C8 V* _ vItem.dwItemId = 0xffffffff;* K$ C* k) r: R& f) c6 N: {+ t
vItem.nIndex = i;# R/ n2 s3 I( S
}else {
! {* [3 v7 w9 y ], X" a( U ItemProp* pProp = pItemElem->GetProp();2 J$ \* f( N h) `4 y( I
vItem.dwKind2 = pProp->dwItemKind2;
" b% d m0 W5 H8 X8 j vItem.dwItemId = pItemElem->m_dwItemId;! L" M: f$ r# Z1 {/ p
vItem.nIndex = i;5 }6 F4 R) b2 v3 [. G6 s4 a% p7 Q1 J
}
2 |1 }( p3 K# p: b T! |4 E f* I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 F$ n& g) X$ L$ O
}
% X+ d& H8 I# p! o* O0 ~% O5 g //////////////////////////////////////////////////////////////////////////( }" b: D/ `3 d9 X9 U6 k
sort(vItem.begin(),vItem.end());//排序$ D+ _! K( u! h
//////////////////////////////////////////////////////////////////////////
e" j: p. g B- Y7 \ //交换- J: ~* Z/ D4 Z& d
for (size_t i=0;i<vItem.size();i++)
6 a, H$ E1 ?* k/ s {" \$ Q' V6 [% M/ F( ?( C% f! n
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 D, Q4 I0 e+ | pInvSort->Add(vItem.nIndex);2 w: u/ z# C5 T+ d& d( }) s/ H
}
- b: c5 Z m# K z) }: t BYTE nDestPos = 0;* S+ Z! a+ R8 `4 @+ H3 U
for (int i=0;i<MAX_INVENTORY;i++)
4 [" R0 i7 x: E6 g {
- U% U& b8 D7 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 A. F8 k8 F% u" e: E5 t. H& D; ]1 g* E if (pItemElem)
& e/ t; ~+ C/ `3 g1 R d {
3 X! F# @! m% r7 o; z& j, Q3 n if (IsUsingItem(pItemElem))7 E+ m! ~' k: e5 [1 w; ?5 s8 Z
{6 I! {7 X$ M7 A7 z1 z9 }# o/ T6 m
//这个位置无法放6 T! j: z* x' B' T _7 }
nDestPos++;
' U0 C+ S$ c ~: D+ z& _. v; Y }4 F+ I) ]; t& C/ v. {: z+ G
}
8 u3 p% C( b# h* j2 Q" b" \ BYTE nSrc = pInvSort->GetItemSrc(i);
7 g9 X4 c0 ]) v8 f, w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ D1 ^6 I. T& {4 h5 H$ u1 L
if (pItemElem)
( R, K- v+ `1 e( P- B. }6 E {
* d0 m0 q' {$ R7 a if (IsUsingItem(pItemElem))8 @5 u0 j' Q% N3 v
{
7 f; b( C+ y; H# I) c0 b c! U( h //这个道具无法移动,跳过! i! n: T+ g" f, t% L
continue;% g; c: |5 M; x" c/ A3 ]# T
}& R3 y1 t& |" T" H' t& B
}else{$ m6 L) ^- z& _% |2 J
//空位置 不用动6 y2 t" @& `+ H5 R
continue;
& x: A2 R( Z# d% @7 J0 w }
3 R( } m `' u( J0 K: \; H //////////////////////////////////////////////////////////////////////////
7 Q" G3 T3 ~) s0 L' B: a' \ //开始移动. U& i% n& F; P% u) }! l' Y, z3 e, Y
if (nSrc == nDestPos)3 P# j( I) g8 S9 ^- D) t
{7 d$ M# [$ v2 A% v* ?
//原地不动
/ E% k; q8 s3 N& v0 K9 A nDestPos++;
' Y( U( H( m) M" h ~* Q continue;: h: q" e0 d' k z7 D% q, S+ s) L: y
}
/ f% X# h0 v* ?+ @6 b pInvSort->MoveItem(i,nDestPos);
" R- Y" b9 G( L+ r D g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 m3 ~/ @1 n. @; N* h Sleep(5);
5 Z* W* q( r, |: v9 v5 K* I0 g. R; c //Error("移动 - %d->%d",nSrc,nDestPos);' P+ E1 I/ p$ U# M6 Q
nDestPos++;2 g! X/ {8 p6 Z5 ~/ K" j
}/ n9 v, ?) D, o3 g9 e1 W( [
//取第一个元素的信息
0 l! J |! P, \! l7 Q$ T /*6 Q" ~* L6 T, K/ G# z( ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 O6 D5 W6 C3 l. X: W
{
5 |% z9 p7 E9 n+ a$ ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. h& z$ F4 A m. | g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* N+ ], ~- ~- ]
}
/ Z$ {* y/ N c& [- P0 L- d' J. n */) d$ |' w! [# O8 ~: V
//////////////////////////////////////////////////////////////////////////6 D+ f3 f& x( K& d, v* W
break;% @; E0 X% S) F2 X: t$ j
}
9 T8 C3 p3 U, n0 z- L# B. U! s } 2 w* p; b- K" E. g' A3 U" X8 `
}) x6 N8 a6 `7 r( S/ z
m_wndMenu.SetVisible(FALSE);
1 Z( A' [9 D- l5 P( c5 h8 R8 T( E% W* ` ?0 w) |
--------------------------------------------------------------------------------------------------------! G+ t& y" { {; s7 g6 C
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ }+ U( S& W) ?- b9 _& q! \
{6 l, I. {* F! P- N0 w
BaseMouseCursor();
9 E, t; F- L# ?# c. D: b8 [7 W}
- h8 ?' f8 e- B: Q在其下添加:$ ?' Z" M; v1 j. C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) K9 D5 a+ K5 G5 q* h( r{
$ Z X C' Q2 {0 H' Y; G1 J; b2 a! Qm_wndMenu.DeleteAllMenu();. Q8 p8 D: O1 S% l9 P
m_wndMenu.CreateMenu(this);2 U# T# ^& @' {) d" [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ ~' X2 |8 I, f- j, `) N& Z
- ]- N' \1 q! b# _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' m: K& K% @% z: E{; b% g* o2 H3 e
//P以上级别才可以删除所有道具
5 }, n- s; x3 G5 Z/ g! d# V1 R m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: m5 }# D; B1 G$ T! M! q8 [
}' |; q5 n. t* D3 ~4 h6 S4 \$ \
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' a+ E5 i; g, S8 q/ a9 ~0 f/ d1 h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& Y4 v( y1 ]! ?& P j8 f) ?% Q( Jm_wndMenu.SetFocus();
1 A" R5 F, Y w* o! U O}7 d$ S1 e% w! |0 f6 S' f$ Z1 W
------------------------------------------------------------------------------------------------------------8 ^4 H& f: n% ` O% m
*************************
; ?9 f/ h! m9 ^' DWndField.h文件
8 `; U' }8 R3 F" h7 ~- S" U- O* @2 r************************* ~9 S; G8 g0 R# n
搜索:BOOL m_bReport; s6 o, t8 M( j
其后添加:) O; ^: Y. ~1 M" x- r
CWndMenu m_wndMenu;
# f1 `. s, w$ Z7 I7 {/ H搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 r& P1 J" ]2 C7 F. R7 I2 l其后添加:# N Q6 v7 n. s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
$ g3 {9 D; N" B3 U+ t0 L$ Y: Z: n. u! C' q c, m% d/ P
5 j4 |8 g2 Q8 F! Q# [
|
|