|
|
源文件中_Interface文件夹下WndField.cpp文件) A! l8 Z" F# L# ?% n% }1 z4 f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; N% m/ k, Q+ d5 h/ J& e( ]2 [9 _" ~- q3 K- E
struct sItem
% t" g6 e! r8 L. _" t{
$ u- |' H: n( F5 G; N) b# nDWORD dwId;% E a0 P; l7 ~5 f
DWORD dwKind2;
) u( x% G) Q2 @, _7 c0 S5 qDWORD dwItemId;/ q6 U; Q" t2 i( B: B2 s! K
BYTE nIndex;2 `; Q. H* o7 G
sItem(){5 g& A/ n2 ~ P' Q' U! X: q4 O
dwId = dwKind2 = dwItemId = nIndex = 0;
; V. r5 L+ B- I8 x G# w8 h}
/ J- v( |) W, ?1 U" }1 Ebool operator < (const sItem p2)) ]6 S; t% U, w2 P- B" Q9 m
{
" G9 B. ]6 G& H# b( Z9 ` if (dwKind2 == p2.dwKind2)3 e( |- O% K" }
{$ s0 g7 ~, O }! f5 c& P
return dwItemId < p2.dwItemId;
& C: W6 P$ m( m' Y* S' k J8 v4 K }else{3 D5 ?- B) I1 p1 B" ~2 w
return dwKind2 < p2.dwKind2;
" w7 ~2 T8 `; d% W% E: g1 q+ q }/ V% ~% Y8 ]% z0 B/ P) s
}
# c7 `- c3 @- O+ y0 T2 b};& p/ }1 p3 b" c6 Y- [* b
class CInventorySort
, S. |5 B, l+ @' I{
8 f) z6 ?0 r/ O) Z( H- @* G' Upublic:* ?; P! K6 ]& y9 ~5 h7 f$ P
CInventorySort()
, o& g. S, y; U t! p* w* K2 ~{
0 l D, _1 l2 k/ E m_dwPos = 0;* K' W: m7 i& ^0 s h8 [8 [) F4 Z. v
}
: J+ D% p8 P1 q; ?' A~CInventorySort(){}. ~( |- I$ O# n5 j" t: S/ b0 ]
private:
7 x2 ?" j7 G% i5 q# M. L i. `) rsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 D. w" Z# c }, h2 H* {; hDWORD m_dwPos;
1 m+ T1 \& O& J0 Cpublic:
3 Z/ @7 [- d% U! ]! g7 O4 a, j. ?void Add(BYTE nIndex) _+ @4 \5 S" V, x: v
{# e& k7 d* Q3 I. P6 Y
if (m_dwPos >= MAX_INVENTORY)% s7 ^7 V# i8 |; |8 O5 Z2 ~7 L
{
: z( O3 L4 H# V5 K return;
- O2 B" w6 f m a6 j }' r; b" Q' p5 ^: [, S
m_Item[m_dwPos].nIndex = nIndex;1 O! k3 F0 ^+ A! Q/ ~/ Q+ o4 `
m_Item[m_dwPos].dwId = m_dwPos;. m) D" v6 F. {3 W8 H
m_dwPos++;* j& N2 j7 Q7 \4 h
}8 a8 O1 `8 z# l1 R1 u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" x) K) [8 q4 p( R7 @1 `$ b( k
{( h% h) ?9 q1 [* f4 H$ o2 F
for (int i=0;i<MAX_INVENTORY;i++)
: |* Z6 ^% |) g0 i' V) W% b B! E5 U6 g {
/ }/ b! ~# t# d' f4 c2 \ if (m_Item.dwId == dwId)' ^+ k3 F$ T5 a- b
{
1 _# C& [; X4 a% y return m_Item.nIndex;
1 N- Z, k, Y4 c8 y; t, I }5 k. _7 G2 u# p" _# o
}/ a5 X4 ? y! l+ O4 {: Y
return 255;
) k$ y1 v4 F& W, I) s, Y: ~5 U+ v}1 m3 L8 ]# _5 o- U) k
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 h/ O2 e3 o4 O$ {2 _# H+ s
{
% D" [; H; m# O6 R- m2 E& z; D BYTE nTmp = 0;* d% H8 [- p( Q) U
bool bDest = false,bSrc = false;
; y1 l6 |, O% {0 n for (int i=0;i<MAX_INVENTORY;i++)2 S. i6 ~- l" l5 ]6 [
{
" U4 |/ @' ~) y8 a5 q: K if (dwSrcId == m_Item.dwId)
0 }' @7 n9 g7 f/ Q- B$ V {
5 } F' n* Y* X //id相等 则 改变对应的dest和src
! _! H$ @+ }6 f; s nTmp = m_Item.nIndex;
1 D4 F3 w* q0 F ^# | m_Item.nIndex = dest; W# p7 {2 Z1 C7 t* ^8 @. K! o
}, ~9 R2 a; [" _. a; _. t
} _+ s; N+ I9 X
//临时数据保存完毕,交换开始; h7 f/ H" B4 g" F, w- ?' h
for (int i=0;i<MAX_INVENTORY;i++)
7 ^1 `/ A* G/ N8 C X& j {
+ i |( l" o, R$ K6 H8 w! f if (dest == m_Item.nIndex)
& l6 e: i* p, i% G `! s. C: c. B {
8 K) |2 X3 d0 |& ? //id相等 则 改变对应的dest和src* I" ~1 e F+ t. ?& G+ W
m_Item.nIndex = nTmp;
0 } O" O# Y1 C$ T; j' _; | }" b8 E0 s+ W C4 h5 C
}% \8 U3 B& U1 {$ {/ v
}" _; W. k. u k ~. a: [! }
};
[; T% n8 o6 A" C-------------------------------------------------------------------------) W( m, U$ }1 ?8 X! u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 z8 a, G W# f
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- l8 E8 ~1 k: S1 N5 w1 I! \, |
紧靠其上添加:! w* j4 B4 ?& W0 f4 O
if( pWndBase == &m_wndMenu ), m, I8 g! ]# ^. |
{
. _* S; u3 g! \$ |9 } switch( nID )
. n& G- Q; `1 x7 |$ S: U) N+ Q {
) n, r; [% K) S. [3 l case 2:, k/ @9 q. E' ~; @/ o
{* V4 C% s! Z+ _# f6 P+ y3 `1 i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
|5 P b$ j2 U8 X m: J% }1 d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 V. d* h* e- z' U
{
: T4 ?) L. T, i& } break;: D3 Y s0 I( @/ ^7 x2 Q
}
9 r, G/ \% o& J( A [1 T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 L0 O: Q I3 j* M4 D {9 y* B3 {/ `4 N& i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- O, x3 D8 n8 @, b6 d if( !pItemElem )
2 s! ], U2 I" |; v+ z8 P! \* _ continue;
( ]6 A6 M3 B5 Q, N; ^. A if(pItemElem->GetExtra() > 0)
! p2 l" W) y! S$ h7 C' W* N+ N0 G continue;
' A% n, J% |* B, v3 S if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 [" k4 ?1 Z; J5 f) R continue;
2 U% D# t2 |4 N* Y1 {. c1 R) Y if( g_pPlayer->IsUsing( pItemElem ) )
$ ~0 R3 O% H1 f+ B continue;1 |* J/ k2 P: h( G
if( pItemElem->IsUndestructable() == TRUE )) W+ r# T0 H7 r& [3 f
{' [/ q) a' k8 N9 Q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 V6 E7 j6 k3 m, H& ]
continue;
, h+ ^6 \% ]! B! }2 M }
+ l- Q, W# Z, e/ X" G g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 O0 w+ n0 X* i( w% {- S
}
9 e Q: |+ o( F, g% X( |& m S break;# _2 {' w1 d9 L& @2 p# _& ]
}
0 M" p6 G9 x# W. Z$ {& U/ J* N case 1:
( S9 a d$ K, D7 [8 i+ N. M {( Z5 w5 _3 {. C
//整理背包" d$ G& w; _+ b& B/ T2 ]
//////////////////////////////////////////////////////////////////////////6 {: f' w) U/ g1 Y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( z5 t0 w0 V% s M4 _8 I //////////////////////////////////////////////////////////////////////////
1 p6 h7 h5 S$ S$ d1 Z //////////////////////////////////////////////////////////////////////////
( ~$ A* @' }# }, t9 e: d4 W* x CInventorySort* pInvSort = new CInventorySort;
7 u. N; K( ]+ ]& s vector <sItem> vItem;$ O% }& j: x9 g+ _; }# {
vItem.resize(MAX_INVENTORY);//初始化大小
0 A* u" g. r. {* [8 _5 h( Y1 x //////////////////////////////////////////////////////////////////////////
8 ^; E3 r# n" f9 [ //填充数据
& U: S9 F) G2 ^+ S) B) M for (int i=0;i<MAX_INVENTORY;i++)
5 m! w* d9 `1 ^! ^+ ]3 F { ]) w' A" a0 u; y C& O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 s' V% C6 i4 ~. N# [4 O; P if (!pItemElem); S% }5 z- v/ i7 O7 o7 T
{
% W, a# A2 w8 o" e Z9 S vItem.dwKind2 = 0xffffffff;
& A, B2 i% A0 ~; ]/ b" D vItem.dwItemId = 0xffffffff;; ~) g8 B# {9 s
vItem.nIndex = i;7 @& T% D( G% ~$ \' n
}else {
8 T7 }! \' a5 B9 _) x; P" b ItemProp* pProp = pItemElem->GetProp();
0 K4 [9 ^* M7 n j5 e: T; a vItem.dwKind2 = pProp->dwItemKind2;
; `- y5 C- N! R4 @- J+ c6 C6 s4 i vItem.dwItemId = pItemElem->m_dwItemId;8 ?; |% G- q1 ]# f, X0 |
vItem.nIndex = i;
+ l2 ~9 `4 M/ F. A( t8 W+ i" ` }* v& I1 K1 i6 e, ]5 @' m5 D
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 [3 I0 d& b0 Z+ q
}, |" a w; X/ P. M+ A% [
//////////////////////////////////////////////////////////////////////////
* @. o' B# L1 h sort(vItem.begin(),vItem.end());//排序
9 q9 G% C/ g1 u% ]* d //////////////////////////////////////////////////////////////////////////
: j2 z7 e9 H; N7 a { //交换. p6 G+ C. Y8 _- U& _
for (size_t i=0;i<vItem.size();i++)/ ^" {7 r& Z7 c4 k
{
1 r. k7 h) ?( U* c$ R //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 G# V4 M4 `( l6 }3 y& V
pInvSort->Add(vItem.nIndex);* W" F' o5 @8 q) _1 z
}
$ _- F) R# \) W) B7 }7 V. S BYTE nDestPos = 0;
. h3 K8 }# Z9 |8 O. { for (int i=0;i<MAX_INVENTORY;i++)
# T8 x) e# d2 H8 J {7 e. f% N' j, R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, t9 Z( f, {( @) D if (pItemElem)6 x2 y! _7 O1 K/ K( F
{1 X7 I8 @5 ^" g1 y3 v" h5 y
if (IsUsingItem(pItemElem))
6 ]% {/ J* S" N4 N. o {
# ^9 e# k! f' ^) n, F8 J //这个位置无法放
. m) q9 U- E" w- e3 e: t5 `( F nDestPos++;
9 x' E3 o, A2 ?- g7 l6 x }2 k& Q+ ?6 l: `' i( R Z% u
}
1 v' M; S8 @, G3 o" i; _" c1 n BYTE nSrc = pInvSort->GetItemSrc(i);( O7 U1 l& j: I
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 y" ]" {* r8 Y
if (pItemElem)
" i8 o, L: Z, u& [2 _$ o% r( B0 Q {
. @* V* b' c3 s) \! B if (IsUsingItem(pItemElem))
2 p4 S( @, y/ d {$ r1 n7 v' S% j. `
//这个道具无法移动,跳过, h! ~% Z I6 r) c. h! p
continue;! l, c6 S, P. l \6 F
}
6 L: Y* \1 m) T5 G0 R1 t }else{; P8 V/ Q3 L. H( v. S0 \
//空位置 不用动
/ f7 P5 b' r# y! z3 N continue;9 E' \- w" ]+ W: H# C
}, ~% _7 G1 c4 w- I. _
//////////////////////////////////////////////////////////////////////////
1 S# M2 j M; g+ p$ H //开始移动: \; V, U. O- U! Y0 A' u: K
if (nSrc == nDestPos)) W' k; I, X1 |
{
( w0 k* s y; U; z7 R W //原地不动9 [# w( v. `$ ? M! R+ n& M
nDestPos++;
! i0 l1 I3 j$ l3 v# w continue;
; \% i0 M; a8 g! G4 P8 a }
. K ~9 o3 N% H2 f pInvSort->MoveItem(i,nDestPos);
. V+ F" N1 ]9 H6 h: X g_DPlay.SendMoveItem(0,nSrc,nDestPos);. N' j" k6 Q' j
Sleep(5);" C; w$ [$ q; @9 a0 b- a
//Error("移动 - %d->%d",nSrc,nDestPos);
) N; @. K% ]- I nDestPos++;
% V u) s5 B+ x- e9 O }
& v1 T8 V$ u7 ^) e' l //取第一个元素的信息. G9 Z W8 B4 w8 ~8 U3 P/ F: _; A# _
/*: G/ @$ W. f, k. T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 V# }; ~7 a, j" i' T {
: D2 J3 U2 [( H. d6 ?) C# s- p9 q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 d+ c. p+ i$ s8 H9 I' h3 i+ Z/ l8 h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# \% N1 ?! B* \: ^5 a+ |0 b
}( d8 Z6 u1 J, d/ O
*/
6 J/ ~2 m z# l! J* c3 v4 g3 u- P //////////////////////////////////////////////////////////////////////////
* s/ E- X( l4 g+ E; c7 m break;
8 d2 O {) A7 m* R7 S: ~# T" _ }
5 c( ?7 v$ l, `2 R/ E( U$ m# \/ k5 K } ) r8 P6 e7 G' ]/ q' ?" A2 V
}0 z( e( C( i$ L+ l
m_wndMenu.SetVisible(FALSE);
8 W1 e# I$ V4 s+ E4 M
. ?+ Q# h* k7 p& _--------------------------------------------------------------------------------------------------------
$ q/ s/ g' w7 e/ i2 F% M' J% h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ Z9 s6 ~0 X% V9 [2 A( G
{: p! R+ o7 G: q& A& l y3 W0 X5 ^
BaseMouseCursor();
: [! N5 P( y. q( t" R}
6 r% T* x/ r* V. N/ ^- ~5 Y在其下添加:
' R- d d O8 Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) _" W, m- v9 t
{( T0 s# `$ C2 ^! l! [
m_wndMenu.DeleteAllMenu();0 H* H) `8 c! K
m_wndMenu.CreateMenu(this);: P* |3 e5 m Q. F
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. x) ?+ I. A0 W5 Q
- J7 f8 x! S) h; s6 p7 P2 r$ [$ Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): P# m2 h% b% k
{
1 M+ V: E% {, H9 ]3 N //P以上级别才可以删除所有道具4 s: Y2 j5 f7 ]) P' M4 Q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! i3 }, {' K) ~( m3 @$ z+ @2 W}) c$ g- o. M( V2 S) [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ l) p F# ^+ w+ |0 E" [* n; m4 K; Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 U) A$ T7 a/ N( g/ `/ @. P- i+ U3 Y
m_wndMenu.SetFocus();
3 z5 m- H# y+ y$ _* j% A}" F' m, ]# L# U; @, v
------------------------------------------------------------------------------------------------------------
) T4 _) v D" X' G*************************# ~- X0 S. R( G$ B7 m/ i- ]# o
WndField.h文件
3 Q# c- d0 B' |5 {*************************; ^+ ~4 U. p, j: N0 K% R. h
搜索:BOOL m_bReport;
$ p* ~9 A6 V. D# S+ C* ^9 V( |其后添加:% x) A* N) x! T, m0 q- C2 a; e
CWndMenu m_wndMenu;
! y$ [4 v( C+ i/ `/ I1 B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 G1 N& Y! i. Q$ U' w/ i' P其后添加:
, X# W. B- n1 z5 @& }virtual void OnRButtonUp(UINT nFlags, CPoint point);
' k2 a0 _0 S7 E5 h3 y: i3 g2 p$ o& y4 j( j' t9 r/ w! o' s
# K) X* g/ G$ d( S. v# N |
|