|
|
源文件中_Interface文件夹下WndField.cpp文件% k1 I6 b) K+ W, N. n+ T/ J$ ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* F' J5 m; }4 r4 |4 m2 f5 n9 ~0 ~8 H) M
struct sItem6 x' c7 N0 p& w4 Y! u, p+ p
{
7 O) C) Z) u$ l, V, D9 C7 v# H1 ~DWORD dwId;
3 s, d D: B* n% `DWORD dwKind2;7 x! T, v( r7 `: q
DWORD dwItemId;
- |; E- B, \7 E2 e3 L- \7 NBYTE nIndex;$ u+ D& \$ w- ~3 y. o# T+ h
sItem(){
" _, X) g+ `( T4 W0 Y- O0 w dwId = dwKind2 = dwItemId = nIndex = 0;+ O5 r" I1 p. ~( h, z5 M% ~
}: _ D$ G" n4 y8 Q! U
bool operator < (const sItem p2)
9 ~+ o' D- h8 Y3 o{
* |$ M- {; i; |& Q2 a0 c) N8 B if (dwKind2 == p2.dwKind2)
) p0 y8 e6 `3 s& v {
- }& N f. N3 A return dwItemId < p2.dwItemId;4 d& V, e( a+ |! r1 a c9 h {' d
}else{
! o( M0 `; {' @" D return dwKind2 < p2.dwKind2;
) l- x2 n" V+ b4 R+ S6 d( Q }) } @( y4 p2 {; b; N
}9 O# ^! t. v6 B2 S: T, F5 i# A
};
4 ]) [ M- R$ f( b, c, lclass CInventorySort. L/ W6 [6 i( {5 r& O
{* n, ~+ f0 a0 K2 M/ o# g" R
public:5 M- Z" I; ]( m. M
CInventorySort()
7 E+ T% Y# H: Z" l{8 E7 z, O+ ^5 J ~/ q% `( [, a
m_dwPos = 0;
: i. p% Q+ I2 ]. M}
& n" z8 z4 v- e~CInventorySort(){}* p2 b3 ]6 k6 I
private:
& L/ ^% z& F+ F* v$ zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 L3 p2 k' j8 T8 L* c: V h0 B* V
DWORD m_dwPos;
1 p7 I& f& n6 }: g; Rpublic:
9 l V, y {% e+ I* s S4 {% r) rvoid Add(BYTE nIndex)! `# I% r! q# z2 C/ H- ~
{
" N1 S3 M) V9 X. s if (m_dwPos >= MAX_INVENTORY)
- o- `4 F% n w" O' ~/ E0 S; r {+ {- R: e0 C1 b& g7 }8 k' O- c1 m
return;
+ P- b8 c8 { T" e4 [5 k }
* N( C: n- ]6 z# \! x K$ Z! A- W$ | m_Item[m_dwPos].nIndex = nIndex;( @) L3 _4 z& A2 G
m_Item[m_dwPos].dwId = m_dwPos;
5 V$ f) g7 A' ^. Z+ | m_dwPos++;
( v z: |, q6 W}
R# B; T: B8 @, W) V% ` xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 q& Q- j* S% T* O2 q0 d
{
* }) W! [6 X3 {& G e& p* i. I for (int i=0;i<MAX_INVENTORY;i++)
# P3 g1 N9 j4 d {- G* }. d5 Z$ a$ v0 Q
if (m_Item.dwId == dwId)/ b7 k7 Q$ x( F! Y* E6 O9 x, s
{0 k$ b8 y* k. T" z n
return m_Item.nIndex;/ w' y1 O, Z+ v6 T; \, S( C! e3 k
}* _# e. G7 X: V" T2 y
}
6 {8 X$ b* I9 }4 R( {( I return 255;% ]- k$ l R+ C0 b. @ L1 e' ?4 `
}& c: C1 X! a( S; _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( e5 I. ]" _1 A! _4 [
{
3 ?% S# S# K/ L2 q) S9 o BYTE nTmp = 0; s, a3 c2 P$ i% R5 m; f8 n' u
bool bDest = false,bSrc = false;
1 f% p+ e9 C- [5 Z for (int i=0;i<MAX_INVENTORY;i++)! A' G$ Q# p+ _1 j# a
{
$ M0 k+ U" C' p$ i- [: ~' ?: Q if (dwSrcId == m_Item.dwId)) ^( @! R( u p3 o& K
{% J+ m$ p. p+ x& _& y
//id相等 则 改变对应的dest和src3 ]' b4 s8 d- E) b" B6 {
nTmp = m_Item.nIndex;8 B5 W" E; Q; F
m_Item.nIndex = dest;5 r7 f& a# h+ i, U- E2 e/ n* w% k
}9 a! a: S7 l/ V0 j
}
2 k+ W, U; m2 b7 a //临时数据保存完毕,交换开始
4 P) v8 i- }6 V. M- r# A3 e6 n( p! _ for (int i=0;i<MAX_INVENTORY;i++)# a( N( y8 }8 O. s6 F: b
{
+ l$ |2 K5 H* p$ f; Z7 s if (dest == m_Item.nIndex)8 o& s! V; s- P5 R2 U
{/ x9 z; S8 v) S6 W9 h: h
//id相等 则 改变对应的dest和src
4 V5 S; {$ ^9 h" I( v3 |% V m_Item.nIndex = nTmp;
) ~$ p$ `9 @& G- D }
' m" G+ \- I0 j6 P3 u6 X } M; R; Z/ W* g0 N. B7 j
}0 ~2 r' } _# G. b; N( U
};
- I7 n6 v9 X" @, I-------------------------------------------------------------------------
. w, B3 i$ a6 ?4 x3 V, j8 ?0 }依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): G/ b7 d/ y2 O, M: R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, _& H# J- Y$ z5 b$ J) M4 r2 N
紧靠其上添加:
. @9 l$ ~7 {' ]0 p# cif( pWndBase == &m_wndMenu )
( A% A" p; `7 y4 ~; c" @! O& {{
. i$ g; F! m! H3 }* G switch( nID )% ~) }2 f6 ^2 C" X# t6 l+ l
{
3 h4 g, E/ D6 N, m- H case 2:1 d y3 m8 b' r
{/ L( m2 B/ o' C
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 ~1 S7 N1 q. S- a# q% G6 S/ P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- O: S0 k4 z8 x) G {
$ V3 z6 ~' b$ y9 A" K break;* I* m0 C& e: W3 E E8 E: X- r
}
3 s1 `- e' l2 t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# o. b* c, u9 E; f {% r2 t' w" l; |; u/ R5 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. D2 h* I& y8 g2 B
if( !pItemElem )
9 G4 ]/ v8 F' g( g- c; B continue;
. X+ g/ K* |" j! e/ d if(pItemElem->GetExtra() > 0)
4 u/ F9 i/ ~5 W$ Y: O ?" f+ @ continue;! o/ D9 |% r; @* Z P I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 w6 n, h( t& s# B! c
continue;
5 P' ^& `9 \5 S0 M8 U if( g_pPlayer->IsUsing( pItemElem ) ) | f5 E; n9 K: W5 m0 q
continue;
Z q: d; R; M& P* w if( pItemElem->IsUndestructable() == TRUE )8 R7 I/ L5 S2 @+ M% N2 m/ R9 `, W9 B
{
3 q7 G1 b; c2 M* I4 V% N g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 y" M; W$ Z+ q: s- o9 C
continue;$ v) \; D% X) a: O# b
}/ Y% M) ?- B, k% }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, P9 l# U9 Z. T4 q3 C- u3 F( O
}
5 ~5 |3 k: U+ F4 i# ?; @: r break;
, A( A# W# u1 y9 v5 H6 X }# `/ E+ ^" K* t* T% O2 ^' t$ s- y
case 1:
5 s$ R4 n" I7 P/ h: {7 l {7 w6 j* `* U3 n0 }' ]
//整理背包2 b0 Q8 h$ r! M% d
//////////////////////////////////////////////////////////////////////////9 R) k4 j& x7 I8 D$ S: W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 A/ R) y: o; @6 O& I //////////////////////////////////////////////////////////////////////////
1 O3 N+ [5 {6 K x! X //////////////////////////////////////////////////////////////////////////8 a, r; N/ ~1 k, s2 T! ~% W
CInventorySort* pInvSort = new CInventorySort;
% |+ v7 K2 e5 w$ L8 Z" O7 n3 L( R vector <sItem> vItem;
* a" k5 \* u. Z- V: c8 u5 p vItem.resize(MAX_INVENTORY);//初始化大小
0 b5 F6 j: j. Y //////////////////////////////////////////////////////////////////////////
+ _& i+ i, y9 H, L/ e. I6 a% N //填充数据
* k4 a/ o( l& g: ?& P for (int i=0;i<MAX_INVENTORY;i++)
* h1 @- U4 |; |* j6 g x {8 W, d% E4 P$ r( @8 R: K5 t" h3 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 |/ i& f; z" G" E$ v/ p4 ` if (!pItemElem)7 c$ k' o/ D; `3 F7 ?; ` _
{
# w! ^/ ]. S1 c: ?2 K( b vItem.dwKind2 = 0xffffffff;! A- Y- C7 x/ g: U3 K6 I
vItem.dwItemId = 0xffffffff;) c! h/ P5 w% R/ j8 d7 t
vItem.nIndex = i;
: D* E V) a+ |/ o+ o7 W( k }else {( z1 q) c5 N! B
ItemProp* pProp = pItemElem->GetProp();! _* m* O9 k5 U* v, p G3 u
vItem.dwKind2 = pProp->dwItemKind2;
( t# h8 B. ?: y) ]& ]0 ~# z7 g vItem.dwItemId = pItemElem->m_dwItemId;
( l: i7 g6 o9 ?. L/ f! F* f vItem.nIndex = i;5 H$ G! ?2 A3 L
}. R& v$ O& Z& q' x! s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 j" c% l3 v; L/ F3 s: H+ u8 J
}) L( e" ^0 m$ U
//////////////////////////////////////////////////////////////////////////3 ]7 L, q$ Z! B$ I: g7 t, R: C
sort(vItem.begin(),vItem.end());//排序; [# G/ g4 \0 U n5 p( N% a" ?4 N
//////////////////////////////////////////////////////////////////////////
( G) S( J& a4 g8 G% C+ k //交换
^ i3 c) j( q z8 R; ^; [ for (size_t i=0;i<vItem.size();i++)( [: a5 k5 `1 e9 i! h' c
{( i: ]) `1 ^* o8 n4 F [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ v0 C0 y$ b/ s, E* I
pInvSort->Add(vItem.nIndex);7 S% g# _1 u( B! K) q+ s
}
- d3 e5 ^6 L( n6 B5 K+ h0 o BYTE nDestPos = 0;' N6 ~4 V D6 b9 b
for (int i=0;i<MAX_INVENTORY;i++); V3 G+ c6 M" I; `; N0 ~) k
{
! \, q N: l! [! C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& M9 _; |/ U2 q0 H+ N7 | if (pItemElem)% Q8 B- |1 R+ C% U4 r+ |
{0 b& Y. Q* Y% g: Z5 k" {& ?8 [
if (IsUsingItem(pItemElem))% D; r) ]. U! a$ q* t; ^4 t
{# a4 u$ X5 o4 [8 n" d% _+ v
//这个位置无法放$ a' j5 x# ~$ M2 O1 T
nDestPos++;
" e, S3 R- M& d7 g1 e$ B }) j! |! _$ N# g
}* e8 t+ W0 p" ?" B$ n8 C
BYTE nSrc = pInvSort->GetItemSrc(i);
7 r0 l( L9 a' }, R! J pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& F7 L: ]9 p5 y1 }7 s- u if (pItemElem)& A, H% `8 F" F4 j9 T
{8 p6 u( i3 T, n4 A( Z" }. k
if (IsUsingItem(pItemElem))
5 h' q1 ^; w3 O" ]" S( U1 | ^/ G {4 Z' a7 P! i. I1 J- R
//这个道具无法移动,跳过5 U! y( e2 @0 P) F" a; J# d8 _, i
continue;! j$ }" C4 I+ w- ~" J& Y
}! _) [3 ~% V2 C- C5 W# D4 b `
}else{
$ e7 Q' I5 L- K/ e( C //空位置 不用动2 O v1 d6 s! N0 z) Z
continue;& t& e9 t k. U# P
}
! O4 T. P, O/ j, p- X //////////////////////////////////////////////////////////////////////////9 @+ o4 B( y( C/ y) W% @0 H
//开始移动
6 B. v x' y; g+ @7 C$ W) d" z8 }( V if (nSrc == nDestPos)
; M% Q! M9 ]# _9 \, t6 F5 [+ u5 m {
; F, x( ?6 G* K3 Z/ @/ S' k; ^ @% i //原地不动 ?2 v+ ?# Q9 P
nDestPos++;
. M4 ~1 I/ J+ S3 b6 }8 J" f continue;
8 q9 x3 K, k' a }# x/ S3 C- E; s) A
pInvSort->MoveItem(i,nDestPos);
. \ d$ q( H" S- p! w g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& g4 x3 E# [! r Sleep(5);
$ I, @5 F$ G& b8 y3 d: a9 f1 x //Error("移动 - %d->%d",nSrc,nDestPos);
% @; _) L, P' f: }2 p+ F nDestPos++;$ s5 Q: m7 a# I9 q' G
}
! @2 T8 z. }# P/ ] //取第一个元素的信息! m3 B: g8 C: y# b7 W
/*
$ y- j4 p! [( q7 ]" r3 @ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 u* y: }5 A! Q8 |4 x2 K {7 i* Z4 k$ F/ S* S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 C) h1 N H/ @# T4 j' F% K( \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 q0 j& r8 i5 Y4 V2 \, N }
" G8 y$ P* D% q0 \- ] */
. l/ s+ T% {- I. M; c //////////////////////////////////////////////////////////////////////////
- K x% ?& R9 w5 H break;
; |7 N3 Z& u9 c3 j; l+ U% K }
4 F* ~- y+ n$ {0 r } ' e% f: V; n+ A0 E H
}
7 m$ e7 L( n% U8 J& M+ x* nm_wndMenu.SetVisible(FALSE);
( S6 r) b( m) |. l1 ]7 B% `! M! \. P, x
--------------------------------------------------------------------------------------------------------6 e; W" {' v$ t. R: j4 \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; s ^3 y2 }" r# j{
4 @& G& f( i! k( Q9 v% qBaseMouseCursor();
: l6 j7 v% _- ?6 [# n! L}6 X6 G- L* c! H' H1 F% g6 b
在其下添加:
4 t! o" s* G3 |2 E7 Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ O: V6 ?; K, _- I" M' ~9 a8 X{
- `6 y- R& c) C9 bm_wndMenu.DeleteAllMenu();
2 E3 E# m2 u9 E. l" q2 T* E8 Rm_wndMenu.CreateMenu(this);
6 G7 i' e5 ^: ?4 `: ?+ z% Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 z! [. u( { f+ Y
" j M( e+ B, o6 J. ]1 cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 Z9 b8 b5 f9 d! v3 h5 q& @{
" W2 r m) { m# O. d% s; V) m2 ` //P以上级别才可以删除所有道具% D& d! F1 V9 ^$ U% r0 O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 d7 D' y3 k1 i+ j}
, u- C+ @- s, y# R5 h. dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' _2 M$ x! l! G! [6 N! l
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 {. X5 r: K4 X' U; Wm_wndMenu.SetFocus();3 m* N6 o# q' q* D
}
; E9 [2 Y3 N+ i& Q) s5 H) k------------------------------------------------------------------------------------------------------------% A* g2 ^5 K; X
*************************
- g4 K! Q6 X% c( o7 MWndField.h文件
1 y' ~% X$ I9 o3 P7 o*************************
: G( q* I/ F0 u; k5 @搜索:BOOL m_bReport;9 H# j4 O8 @. e
其后添加:
# w# m1 v7 V9 d! N: m1 zCWndMenu m_wndMenu;
, X7 e" y$ P! _! z3 X2 ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* Z5 ~# T) A6 [# W' I, t( ~& L
其后添加:
6 t$ H+ G( \( Y. G/ A/ o t2 k# Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 q; \- x1 I/ M9 H3 A
. _+ g4 U9 l( c( U* q
# c c2 \+ r* f: W( K6 B0 b |
|