|
|
源文件中_Interface文件夹下WndField.cpp文件
- y$ `( N4 H0 q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 f1 U$ ]9 W# W1 ^( \! U, v
4 j9 H5 @3 Z1 l) r
struct sItem
7 M# u4 O0 d) C9 s' z- {{
3 Q- o0 a; \. b/ h2 NDWORD dwId;: L4 J) f+ Y$ W/ N! o3 k* r, M
DWORD dwKind2;: R* v: S# j- L
DWORD dwItemId;
6 g/ [$ L$ a3 N) A9 Z# z2 tBYTE nIndex;
, ^0 u# t: `8 z _sItem(){
3 o9 I: d4 M& _4 `6 v% _3 i' O dwId = dwKind2 = dwItemId = nIndex = 0;, ^1 C& l" E5 l8 Z
}- U# R" L2 N# |+ j% Y! e- \9 m
bool operator < (const sItem p2)
5 }' H m) \' D) C. V{$ }1 K# i' W7 I% z: e
if (dwKind2 == p2.dwKind2)
( e2 g" z; a: E0 v: D3 S4 n$ C( Z {
5 s, z; x9 j7 l: M' ~% B8 V return dwItemId < p2.dwItemId;8 k: ~7 o) t' [6 F$ [4 k- g
}else{- t G, q/ u: |
return dwKind2 < p2.dwKind2;
" P. x7 r7 {4 p- E) Y9 w! g0 | }
& k4 q" i, E; i: X}
3 w* ~8 C! u7 H( h2 a3 M0 m& b& G};
' z" p2 H! q4 o- v$ {9 Cclass CInventorySort
+ i* F7 d# o8 O/ v9 e5 @{
* T4 A; d9 g) B- ~: N- apublic:
e4 h% c0 P" ?5 Z7 a$ V5 LCInventorySort()
) _; F/ E. N" G6 H4 _' ] b{
% g+ V+ J; z3 q6 H$ O0 x/ s m_dwPos = 0;
0 X& |7 G _$ g1 ^ a8 c2 Z# q+ c}+ k* G' C- `7 X! U
~CInventorySort(){}
! S m7 t! |" Cprivate:
; R# W, Y( w4 q, Y+ G0 wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ n2 H1 } w8 N. S' }8 j. H1 VDWORD m_dwPos;9 v, u, Z5 j6 J: k# r& R8 _1 u( Q9 c
public:
6 b" F; y" k O! o; s: Q3 ?void Add(BYTE nIndex)
7 g( @2 e- k) j# s) |{6 C8 G4 l4 E* _# {: y' d! r7 m
if (m_dwPos >= MAX_INVENTORY)% K8 U E; E7 ^
{9 l b4 Y' f% H) q
return;* e+ ?$ l4 p/ n2 h# }
}
; l8 j) [6 W8 c7 u m_Item[m_dwPos].nIndex = nIndex;
& P" U; L7 r8 d7 t2 I4 f9 n m_Item[m_dwPos].dwId = m_dwPos;! q7 s$ b- y8 @3 {- ~6 ~* H3 ]
m_dwPos++;
% I2 j% M M. f+ Y; {} n% u2 `4 h! B
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! _# j8 X# o: S, `{
S b, L$ q8 a7 a, d2 a for (int i=0;i<MAX_INVENTORY;i++)) t8 ^0 X1 w8 N5 f/ V5 C* \
{' v7 k3 k, @. ]5 g8 m
if (m_Item.dwId == dwId)
9 P0 i0 B# {% ?$ w0 B {
2 @/ i: Q( p& ]4 B# |0 j7 a return m_Item.nIndex;
$ w1 x* P9 `* [& r }
8 Y% s v1 Z: T! D% O }( _2 h& @ s h$ m) V- m; U
return 255;1 ^% g5 T/ ^% n6 g9 I: z' Q+ t6 f/ y) x
}
6 Y+ R3 @0 N- B6 I6 w4 evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. `( x: }2 s0 }
{. x0 T+ E O. r" E( {6 w
BYTE nTmp = 0;
/ u6 o; e! e5 G: b6 P9 n bool bDest = false,bSrc = false;0 E' K/ t' B6 h8 X8 P- \
for (int i=0;i<MAX_INVENTORY;i++)3 c3 Z( z2 S( m( X5 o! {. `- _4 U
{6 C/ h+ d' w, V) i: [
if (dwSrcId == m_Item.dwId)
9 I4 V, U$ i" ]+ y3 B- G$ D- X" v {. K4 L! d( x' a
//id相等 则 改变对应的dest和src: @' I; m) L; l0 B
nTmp = m_Item.nIndex;8 Z4 B( ~' E2 h+ S
m_Item.nIndex = dest;
; c7 I! f$ c n4 @$ W }
e1 q \+ [. [ }
- k7 ]9 M/ u3 X6 s; K, K- O //临时数据保存完毕,交换开始; T! W5 R7 T/ F
for (int i=0;i<MAX_INVENTORY;i++)* k& H! x( ?5 P6 t& a/ m
{$ p* ^& y$ x0 i/ C
if (dest == m_Item.nIndex)
: H6 B& {$ p6 y1 x) e7 L! C# N {
/ k/ \4 L" ]; M$ u* H //id相等 则 改变对应的dest和src- p1 q1 ~, _: ]$ ?
m_Item.nIndex = nTmp;/ T& |' z3 S% k: t, R
}
, Y; i2 l. }/ ~- a4 K }$ e8 v. a' d* c* e) n; Z+ S
} r- n, U. R1 K# I6 u- A/ a
};
% V! d7 N1 ^8 a0 N W l-------------------------------------------------------------------------
5 D( |# Q& M; Y4 d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 `- ?8 l( [, O& W* g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 |% R( X& `$ P* a4 |
紧靠其上添加:
) h8 U7 Q7 y, W c, f! \if( pWndBase == &m_wndMenu ) f( `4 Y' ~' T. f
{
7 x9 E3 G a( |+ V" a! x switch( nID )
. w* W4 U$ W1 A; r {' k1 ^6 [1 P# ?8 [% m
case 2:
$ o# O$ U& T0 q, a( w6 @ {
1 o/ b& C& Y1 M# x% M3 ?0 f- C //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' I4 m4 i" j* p s; r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* E; W+ e3 w8 J/ v
{
7 ~! W% ^/ V0 x+ r* |( h break;
; M; ]) O2 T! G2 ]7 j- S) p0 L }- a6 P) X1 j; V v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 E" f% K, _6 j" X
{
8 k8 K, m' n$ g9 U7 P5 d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 J! C. S$ _& W0 s0 X
if( !pItemElem )0 K2 D" `* S' G% ~" N
continue;
' `9 V8 J- f1 L' E+ g, X: Y if(pItemElem->GetExtra() > 0)" G0 z% P0 z' c6 @6 x4 ^
continue;
1 [4 q- z3 w$ A if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 U) |6 i5 Q" `0 q0 p. W) j& H4 [ continue;
8 f# ~0 }7 l$ O C+ K# X$ u: [" A if( g_pPlayer->IsUsing( pItemElem ) )! G; _- j6 K9 y9 L0 M7 e
continue;/ h# U3 Z3 b$ P( Z" W
if( pItemElem->IsUndestructable() == TRUE ). x) @$ W7 D$ i/ |% Y/ ^ s
{& _$ u% S3 p- E" S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 o' a2 U4 {" S continue;
: _3 n' T2 l/ L- W0 G }
: B8 c0 J/ w" x; Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( O. _* Y5 ]# |, J
}
% T. w1 |1 ^. G) f0 @ break;
4 j) E/ I* G+ I: [6 Z }
7 T* H5 J) ^; `/ @2 V8 S case 1:
' T, i$ p- \( g& ~/ ]" w' P( Z {
: r! D7 A G2 g% T, \ h! @! l //整理背包
8 k& M$ j. p# R+ ]' y, K/ K5 h //////////////////////////////////////////////////////////////////////////
: e- p7 g3 N2 e$ x! L) ^& e //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 P I6 ?! l0 q! |5 I+ _# W
//////////////////////////////////////////////////////////////////////////
0 }7 X. y( v% [. R+ |+ o, W6 o% C //////////////////////////////////////////////////////////////////////////! c2 o$ r7 r) b- O2 Z- P
CInventorySort* pInvSort = new CInventorySort;
: ~! J' ?5 s! b' q! k$ d2 m% V* Z vector <sItem> vItem;+ w" t& ]) t* M2 ^2 a j; f
vItem.resize(MAX_INVENTORY);//初始化大小
I. V' u8 z7 Z. `5 Q0 ]5 F: s3 J //////////////////////////////////////////////////////////////////////////
) f' ^, P. y6 W s //填充数据
: i7 Q9 G& X; f* D/ _ w for (int i=0;i<MAX_INVENTORY;i++)8 A% f% V/ U8 Y; |
{( @1 T" N1 k/ C" D! H. _, K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 S3 S2 |& m s& T% _/ s( a if (!pItemElem)
& h1 I0 ^1 C0 U {
/ i$ q, P B, X* j1 v$ R vItem.dwKind2 = 0xffffffff;
. r; X; B& v" C# R vItem.dwItemId = 0xffffffff; _: `7 u/ }- E+ M. B2 H
vItem.nIndex = i;( T. i# q; v) o+ u
}else {
2 f. z1 p* S6 h9 F% r% }1 n ItemProp* pProp = pItemElem->GetProp();" a: u- r/ V# J* R
vItem.dwKind2 = pProp->dwItemKind2;4 Z. |9 ]4 ]9 W0 Y& i
vItem.dwItemId = pItemElem->m_dwItemId;6 S& R6 ?2 G8 f: A
vItem.nIndex = i;4 P0 O: y9 \: V; ^4 C4 B7 Q$ p
}
6 W% X% w/ [/ O0 b* Q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& _" j6 v+ ]8 z" l8 N& A, @2 D }
8 \% |" x! D% A( v/ n2 R /////////////////////////////////////////////////////////////////////////// d, n- a8 g* p& j' |
sort(vItem.begin(),vItem.end());//排序1 G& A1 y9 H$ m3 i% }
//////////////////////////////////////////////////////////////////////////" Q- D& n4 O% q* B+ d) T( C
//交换) j6 e! [& \# ]3 S9 F
for (size_t i=0;i<vItem.size();i++)
- O) @ S) D* D+ o1 t. y$ k U% v. M {
7 s+ V4 ?& I3 U/ t" R" Y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 J0 V: H) u5 z( h$ k$ n. m pInvSort->Add(vItem.nIndex);$ ^) b( U' `! j0 \- k, X6 j
}
+ a2 [% c6 s) f: @7 l) e+ ?# ] BYTE nDestPos = 0;
2 [1 C5 D5 c$ W4 q. | for (int i=0;i<MAX_INVENTORY;i++)
; r5 D6 B; T" @5 { {" e) L# D. s7 a! R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 m8 W4 J5 c8 N
if (pItemElem)+ \1 u% b F- U0 o$ m% s
{& O& c" q- B: j. p
if (IsUsingItem(pItemElem)); ]$ S4 e8 d; s" X: W, Y: J
{
+ G( i+ V) i/ C& D //这个位置无法放7 j( o7 v( P2 p
nDestPos++;
" O" s# U/ I. y2 m) }" s5 ^ }
* i; U) {5 H4 Q/ n }% l! r3 Y" {, u6 f
BYTE nSrc = pInvSort->GetItemSrc(i);
A4 r; {5 a! b! g$ K. z& x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: Q8 @) }$ b& o% i5 \ if (pItemElem)
4 W6 w" W& r( x! l9 S Y. J0 `# |* O/ G {
2 ~. v6 D, t) F! F if (IsUsingItem(pItemElem))4 |3 S0 g7 P- D# k n2 d
{
9 t% I. n- u: w5 F9 ? //这个道具无法移动,跳过# X+ F/ ?# [8 h
continue;
4 B( A/ ~% C- r7 ^+ O! D }. e7 S r+ S) u; [6 ]
}else{
/ I6 _* M+ D- p$ T2 {: {+ ` F //空位置 不用动
- E/ A5 `0 ]! t( a3 c! g5 L, S continue;" l8 c! D7 W5 f) s8 }
}, r6 B2 l8 ^1 B6 v7 l" y# k# f
//////////////////////////////////////////////////////////////////////////4 i4 s f7 A/ P! y. t3 G
//开始移动0 j) e6 t, j9 v9 ]4 V
if (nSrc == nDestPos)
2 \' ]# f/ j/ e( a2 L {
/ l$ u3 K V6 S S+ a //原地不动( e; o7 c1 ?& N# j
nDestPos++;
2 T" p( o W4 T" l5 M. P: J continue;
' p' ? }* e( g E: ]% l$ f$ w7 f }4 V; x" J) \6 G0 A; t' z; `
pInvSort->MoveItem(i,nDestPos);- p, L# w" w$ M8 Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 }6 D' j7 n+ ?7 b: F- w, z
Sleep(5);7 V+ q" P8 Y( Q1 F6 @: N
//Error("移动 - %d->%d",nSrc,nDestPos);
+ \0 A* n( y2 z/ B) N3 c nDestPos++;
- R9 o7 G, P: k* V @ }# G. e+ @6 Q5 J
//取第一个元素的信息/ w( `" U# T, M/ B( m( R- A! K
/*
7 O! l& S6 V6 f# _ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 |. f' {& W5 M* M {
7 d5 n, a0 Q" o* h* X, o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 T. D; K a/ e2 Y% E1 Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: M8 ]+ J$ q% y }
! W. b* N; T8 `0 ~6 }+ L */
4 G! f+ @4 g Q8 | l //////////////////////////////////////////////////////////////////////////0 g: n2 H. g7 @! W( I) ]
break;; _* G5 \ R7 D8 o
}& V5 {- |) w9 E( w# B p8 h
} . K5 u5 H- Y4 R; A
}$ s, _& Y. z0 r* W4 V: q1 i! v* Q
m_wndMenu.SetVisible(FALSE);$ N8 f r9 ]/ Q6 a1 a
4 m/ P: e2 a9 A- P
--------------------------------------------------------------------------------------------------------( Y/ h+ K' z3 b% _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 o/ g. t' u! ?+ g/ H N1 z x{0 ]/ c D5 Q1 S9 m
BaseMouseCursor(); m' O( g* {7 L* n0 P* a4 ?& `6 E
}1 g5 l3 A! }- Q
在其下添加:" U. b' d0 \' s( G2 P, p+ K* s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); g& x' q7 p9 Z* G9 ?( T
{
1 t4 I$ q% o Q% }m_wndMenu.DeleteAllMenu();+ S" m/ G8 @& R5 |/ `# G9 n+ N3 T
m_wndMenu.CreateMenu(this);; e8 w4 v8 A, v: A& s& ~7 x. ^/ |
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 u- N5 g, u3 H8 Y. O& V9 o' Q% _
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ b; a1 Z; n# {8 S& I0 _{
. D- A' V; V I9 B) Y //P以上级别才可以删除所有道具
) B/ ~. t$ c# b" W9 C9 ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 E! v( k8 b; o4 a0 X8 J; \
}
( q' G8 ]1 h, Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) m) v0 k" Y$ q( N& e/ @1 R4 H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. w j+ k. R5 D; d6 Nm_wndMenu.SetFocus();
! D% L+ a& r z; k}
6 j* M2 R, F: \- o' o0 N------------------------------------------------------------------------------------------------------------
: b9 y' e6 S4 O8 ]# `*************************
# A& M/ J9 ]% A3 |' |" c; F8 MWndField.h文件
+ `* t2 b5 G( a*************************
6 ]8 ^: n( U8 h0 ~' }+ T搜索:BOOL m_bReport;1 h. f9 v2 B4 N* G! C. C/ O
其后添加:
5 |$ j- X* {; ?CWndMenu m_wndMenu;: P0 b4 K, P4 ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ e- O" }" j, b4 K其后添加:
! S/ l" ~! P# [5 J1 @: _virtual void OnRButtonUp(UINT nFlags, CPoint point);$ r7 c' z' Y6 T% N
/ B3 g# n7 _8 D( {, s
/ s, F3 i* R; i. }9 e4 s/ Z A
|
|