|
|
源文件中_Interface文件夹下WndField.cpp文件$ R) [% P4 l2 n: B; @
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* u8 I' R: Y7 @) }0 u4 E7 ~$ J4 f( [6 j1 j
struct sItem- d* \' f0 N {# }. P% ~) q& \, ?# o
{1 l, N" g0 K0 v" [& f; K
DWORD dwId;
( F A( A# N e7 H6 R7 x2 T/ FDWORD dwKind2;4 q1 O! I- { f$ y% l& ^
DWORD dwItemId;
7 o; L$ Y8 F" G6 xBYTE nIndex;. T5 s1 |7 N, Y! g
sItem(){+ \. `) ^1 H9 F. _1 u% d, k% E
dwId = dwKind2 = dwItemId = nIndex = 0;
: I3 C; {, z& }. n* w- Q q0 K}
9 {9 v. U* D- Tbool operator < (const sItem p2)5 G0 g+ A8 t5 W9 H$ f# S
{8 z' y* `5 K2 e, X8 p
if (dwKind2 == p2.dwKind2)
- ?5 ?$ g+ P& ~ {
9 z z) T; S4 x( \ return dwItemId < p2.dwItemId;1 ^+ D/ x; d7 T/ s1 c" v
}else{
& W; P' q+ H7 ?) W: r/ \3 C return dwKind2 < p2.dwKind2;- S" a; a5 ^! V8 T. }
}
5 a3 H& f# m5 V5 n D* w}/ V! n" J; h% T* q0 M8 C
};
+ g, [6 H$ A$ s7 hclass CInventorySort% i& j0 |9 }: N$ o
{
" h$ L, X, G/ }public:$ q$ W+ V( T `. F) W' ~
CInventorySort()# {1 c7 l ]; ]* d- C% X
{
4 V# ^, W& ^3 L3 e7 Q m_dwPos = 0;" M6 e, v. A6 O3 `6 S" Q/ A* Z
}' V* e; o1 t7 ?
~CInventorySort(){}
& [7 G% z& a# ~9 z) Z2 d8 x: B0 Eprivate:2 J7 U+ \0 a8 f) l, `# d: L& a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% _' c) {1 j& c; s
DWORD m_dwPos;+ \- I" ]% v; l$ S
public:. J8 D1 {( K1 T- L2 ^0 A
void Add(BYTE nIndex)
/ t; B x, a" d0 [+ T( i{( Q8 l3 W/ r. U7 a1 u; I
if (m_dwPos >= MAX_INVENTORY)
# ^/ y. c, ^8 Z; A/ ^/ M3 l {
- N2 m5 Z! A/ n( c; K5 L, o4 L return;& l: T( w* P( d$ R
}
9 a0 V; f( C& ]: @" C/ ]8 C5 J4 Q/ @ m_Item[m_dwPos].nIndex = nIndex;
0 P. P( @0 A* h8 u' T, l m_Item[m_dwPos].dwId = m_dwPos;' T9 ? {; t& R
m_dwPos++;
; r- Z5 ^( z0 F+ W}
1 A. h S/ K. b# NBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; F9 J6 B, o5 b/ F) D2 B3 a* U
{8 V" ?6 y O4 P7 g6 y7 ^
for (int i=0;i<MAX_INVENTORY;i++)
+ ?6 @% U0 Q+ o2 a {
' i2 _. w+ [' ^$ T/ C if (m_Item.dwId == dwId)' [% V3 H' l6 S- T
{
; u: L3 u r& K. B& M; e( h) h0 N return m_Item.nIndex;
$ m- o! p5 n: y/ ]* K! a; c }) [+ j6 P& H% B" U5 u
}0 Z3 l+ L" s7 m4 {4 t& u/ B
return 255;- R9 x3 s: B2 E1 k8 D
}
, v2 G9 L/ M# X( l. p; d3 ]( Rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# e. t/ B/ E. N5 r
{+ Q [7 i! E( n0 D# @" H8 x3 c
BYTE nTmp = 0;
6 m/ r2 ?7 C- a( \7 g+ V: P bool bDest = false,bSrc = false;
. c4 S+ C$ F% \( u- q6 X5 J for (int i=0;i<MAX_INVENTORY;i++)
, \6 T6 A: ?9 |" j$ {1 X4 W {
7 g" ^, x# q3 y, f T4 ] if (dwSrcId == m_Item.dwId)' p; X% a9 Y8 ]* A% [" d: o
{
+ E% l$ L1 i* [% M- W( ? //id相等 则 改变对应的dest和src% g0 G! D. s$ `* @9 e
nTmp = m_Item.nIndex;
6 s) f0 @0 D ?" a# V* c m_Item.nIndex = dest;
7 G) i$ @# j$ l. V$ }, c }
9 S J3 v' Z/ m0 |# |( o }
$ X# I. }, E( \0 J: |: @4 x //临时数据保存完毕,交换开始
6 w0 @3 P, N! |3 c/ Z1 Y for (int i=0;i<MAX_INVENTORY;i++)( ]# n0 I. {( D- W
{( \. h& g" @$ N" Y
if (dest == m_Item.nIndex)
! U' Q" c) L# X, U j1 _/ s0 ] {
) X* X, F Y1 X0 t* d //id相等 则 改变对应的dest和src
; f% h- W3 Q" ^! L m_Item.nIndex = nTmp;
' X; k$ [. ^( n% f9 N8 l1 ?( X }
2 l" z3 O" b! M0 V4 u" j }
/ ?/ K, A$ l" m1 ~" ~: G' E}
( `9 }# f& d9 z E% W9 ^};
& p, f1 V% ^2 ^" Y& Z: P( t-------------------------------------------------------------------------/ Q+ w% Z& t2 Y5 a/ f; v! N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). K5 S3 _6 _) e* F. c3 e( I' ]* _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; H) f, H8 y* L/ ]% a
紧靠其上添加:3 N4 W4 ?: d" ~8 J+ l
if( pWndBase == &m_wndMenu ) Y* X( I5 `0 R+ {3 J. b2 z( D
{( I+ N: h( K5 O
switch( nID )3 J( L9 z) o0 n2 m/ ^( f* r$ f
{
s5 B- l* l7 L) @' V' L' R2 k. r1 D case 2:: L5 v" B ~2 Y3 Z9 v5 p* b5 \/ H& G) R" N
{- }0 P) [4 C4 @$ q+ q$ G0 f
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; }5 I% ?3 x3 r4 U
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 j: ]2 x. \* `0 E: w% S9 m {
: l& P9 x& Q# b. J, |' o( |# u& P" N break;
F; _" x- _1 P6 \ }
1 o y4 @# ]% w$ E4 x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 U, ~0 H- i% S0 d% _7 o {
" E. C5 C) X( Z0 \( M' d# N' S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* x. A6 q1 ^) p% M6 N, r. L if( !pItemElem )
/ _4 b, ~) ~, }# M continue;6 P7 e; S" l: U C' u: V6 J
if(pItemElem->GetExtra() > 0)8 b# d" x4 \: V( k
continue;3 i% z0 z) O- P8 ^; y- P( z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " @6 ~6 I, _. Y6 ?
continue;0 J8 y+ q X0 {$ ` t
if( g_pPlayer->IsUsing( pItemElem ) )2 f0 x6 p; P; v: {! Q- u
continue;
# t; z2 x6 h# ^8 }+ { if( pItemElem->IsUndestructable() == TRUE )
) T. x7 r. i, O* y$ j; P, L3 ~ {
' Q8 j. y$ r. ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 I7 n0 P0 |$ y: t' n& { continue;# Y& v* z/ s8 V
}
' g# A+ F( _# Z+ }# @# P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 P4 ~- y4 o" N8 P. h }
! V6 `$ R# q- V; } break;
' O9 O7 \- C1 G9 P* g5 q/ Q1 j }
, D( ~' I+ [6 ^" W6 Q5 L c case 1:! L3 \& ]. p8 p
{: L+ j! h4 s. D( s
//整理背包
4 k- V; W3 u; _- _% c q //////////////////////////////////////////////////////////////////////////# ]6 b2 B7 F( y& y9 x7 m. k$ O
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 |& n. \" g( E2 o( B1 V
//////////////////////////////////////////////////////////////////////////
- o+ E' n; _6 m) [0 G5 w( i //////////////////////////////////////////////////////////////////////////0 D7 _# y) F0 i p/ [
CInventorySort* pInvSort = new CInventorySort;, r- A/ r9 f5 I5 D( o6 L5 p% M
vector <sItem> vItem;
# t2 w: s* Z; W3 P4 Z1 a vItem.resize(MAX_INVENTORY);//初始化大小
/ |3 f7 j5 B( Z6 a# G+ y5 W //////////////////////////////////////////////////////////////////////////* ?( f6 u8 D; ?) [! k3 ^1 @5 x
//填充数据
# U+ G! U" X# [3 a `" i9 d for (int i=0;i<MAX_INVENTORY;i++)
1 S& m9 K0 Q7 X4 ~& |" o5 j+ _ {
- J- S, R; w i" S& ]& y7 b2 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: B# l' R7 R& h4 s! n4 E- q
if (!pItemElem)& C. o2 z$ _, R. L/ O/ t; p& l! C
{: Q( t" E* s; u
vItem.dwKind2 = 0xffffffff;0 L8 R8 M) J- o. M d( ]
vItem.dwItemId = 0xffffffff;/ F+ a9 ~; w- V4 _8 T
vItem.nIndex = i;2 A n" _( j! t0 U% K/ _
}else {
' `% x2 E2 F7 n, F ItemProp* pProp = pItemElem->GetProp();/ _8 \0 _3 j, r
vItem.dwKind2 = pProp->dwItemKind2;. k9 r; H" l& S9 g
vItem.dwItemId = pItemElem->m_dwItemId;% F6 ?$ n6 s- k0 w" [
vItem.nIndex = i;
4 e: o0 {& l+ n# l4 _9 z }
! l4 z# t, _6 i+ f6 ]& _ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 t$ b: }$ h N) o; J
}
9 A; }6 {/ k! f1 p, a. F /////////////////////////////////////////////////////////////////////////// M/ a* s* b2 q# S9 R
sort(vItem.begin(),vItem.end());//排序
! r+ I4 E0 f( S/ y K //////////////////////////////////////////////////////////////////////////) c$ N7 `" n4 \; c* ~2 m9 ]
//交换
x% W; [1 i- p& C for (size_t i=0;i<vItem.size();i++)
) b. k* a; R: J: I {
/ _6 A9 C; N4 v4 p0 x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; m1 F* n, N' C/ y3 _
pInvSort->Add(vItem.nIndex);# C3 e3 b+ x" c3 c8 J& X. i
}
6 J- K8 a8 e9 M1 y1 Q BYTE nDestPos = 0;
" H: X- m5 d$ ~$ w for (int i=0;i<MAX_INVENTORY;i++)3 b- c* L# n# j! |: o) y3 x
{
7 G6 }* O# ?/ ^% w9 o( c* X% }6 U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 Q" t' S9 A6 H, k" {6 ~& ]6 M if (pItemElem)
8 z" u: _) @: x' z/ G1 w# \. H1 m {
# A& h k( U% g' w& ~% [+ U if (IsUsingItem(pItemElem)). F* ~' `2 O6 a6 X h0 L w. i6 N
{$ c7 i: k; R/ f! [
//这个位置无法放( o$ V1 A& l% a) G5 _0 l* {
nDestPos++;( c8 I3 n- s5 S" z% ?3 @0 e
}
! y' r! `# V# }5 ?8 u, \& [0 p( Y }! o6 H" Q/ d1 d' y
BYTE nSrc = pInvSort->GetItemSrc(i); w) g# e L7 G1 {( x f, K/ R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; ^9 ~3 i1 \, u) t$ a& d+ t if (pItemElem)
- j' A! B; K* f# I {
4 K9 _* C7 I4 R) ]! k& c$ J if (IsUsingItem(pItemElem))
, Q, w$ o/ Z7 w1 E4 R- i& G {& c' q: P, v& ]) `
//这个道具无法移动,跳过) s9 t: G- z8 ~" Q% l
continue;; e7 M5 y' p! y% q$ t9 ^
}
3 _3 N' m2 N$ y+ R& n" p }else{1 O+ ^2 R/ F( M0 u( t7 p' X& D
//空位置 不用动
9 _! ~3 Y. |% l* T4 S4 u9 ~" Y continue;
9 y* B7 m! Y( e }3 t$ Q' P! q0 O5 e
//////////////////////////////////////////////////////////////////////////4 H) V& `- o4 H0 D
//开始移动
' \- F1 d, e# ~: S: _! l8 \ if (nSrc == nDestPos)6 C- J7 a% e# \ T- Q2 U$ M
{
1 |. I1 f% }: O: f9 J) A/ }: |4 | //原地不动, R' }1 D) H2 \" ~4 d5 y
nDestPos++;6 Q( O& A2 B j! c: \3 j8 d
continue;8 ^) r) A3 i- V- _. K+ Q z
}
( U5 o4 ?( X# g pInvSort->MoveItem(i,nDestPos);5 u8 }$ b5 P3 O/ a \" u- A* _( p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 ?. O: @' B' \ Sleep(5);
3 ?! B1 g2 c8 d/ a6 x' ?- Y //Error("移动 - %d->%d",nSrc,nDestPos);. W* N. m* @% |* G% u$ X. q( u) v* ?
nDestPos++;
* e8 }* \& k) P2 j. Y' y }6 \3 M6 q$ b2 G
//取第一个元素的信息: y' {) L( q/ v
/*
- G* ^, n" ]7 x4 c7 j' K) k' j2 E if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 f9 x" L9 r7 g" s" I8 b9 N) q- } {
6 e v: X, y7 s1 B6 J: ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 k# m |9 w) s6 m( |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: F3 @7 I8 F# f }
5 {+ ?, |' ^; }" ?/ [$ p5 @ */4 S" `1 @/ i' o2 w u* m" S, K
//////////////////////////////////////////////////////////////////////////& f2 U! c5 c- H ~
break;
' H) ^9 A+ j; m# e" C }
. q6 t1 @" L( l) K- h2 _& U }
' L% K. U. w/ ^. w}! ~+ @, F, ]) {; v7 _; w0 s) H
m_wndMenu.SetVisible(FALSE);
6 _& z: h+ G% w, K
0 M$ N) x: @$ A. T--------------------------------------------------------------------------------------------------------0 p" |* [9 S0 p7 N/ i. E+ z% C
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 d6 Q% c8 _ M1 a9 q
{
' E! L0 _. h% K, c. \ J! X$ `BaseMouseCursor();5 `6 l0 d& t" x, X, G! _' S
}
# U# G. i/ H5 D$ s* ^' Y在其下添加:
# Z! H; b, V5 Y+ v, c Svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ J. L% b8 C! U2 l6 S O) q% b0 P{4 E/ A0 F9 J" Z$ d! t. G) V* h
m_wndMenu.DeleteAllMenu();
" x7 h# D" k. Qm_wndMenu.CreateMenu(this);) x; {4 ~3 _ j2 f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" ]8 t6 _' Q' L
/ v* _$ O$ V3 m( d" C. [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( u- v& \2 k' i" ]# I( B1 m
{- H: U6 B) @8 k# `5 r+ k
//P以上级别才可以删除所有道具3 i: P, h! ]' f9 e+ q$ L
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 b# Q9 w: E3 T! |}
) Y+ ^1 M y! t$ U* u( ?' nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 S! K0 y- [9 }; j$ e( c0 pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 a$ _ W8 F( p& n( ]! b! Tm_wndMenu.SetFocus();# ~3 W! _3 d( B+ F' j& _
}
3 J' K S* H, M8 ], V7 A8 W------------------------------------------------------------------------------------------------------------8 k3 p; r4 q' W6 n( m' f
*************************
, Z! }1 k5 F# ~WndField.h文件
. Y+ A0 F/ L. N/ C*************************
4 b) h. P2 W; g# w+ O搜索:BOOL m_bReport;
3 h- o' G$ Y% U- t4 t7 c其后添加:
. _8 n s3 g5 S' cCWndMenu m_wndMenu;$ S" R! j1 \& U9 F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 D$ b: g/ l2 P. Q
其后添加:8 u; I' B: ]* Q1 k. q7 a
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 M9 U0 q. a7 d9 y* m3 D
" r' B8 K2 e' ~) S1 ? X/ k- g
) V+ M4 p2 R1 H' a$ `" X |
|