|
|
源文件中_Interface文件夹下WndField.cpp文件3 O! J8 y* r; C4 s: |4 c
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 G+ S$ I7 v7 B7 I
8 N* A, |( f: N8 j4 Astruct sItem y, y3 T- H4 D5 ?( o- z* X
{
( ~/ V6 Q3 Z! SDWORD dwId;6 c" W* ~: }/ v3 C; o' h' B
DWORD dwKind2;
' _% E% R8 n7 g( b. n9 d/ zDWORD dwItemId;; h" e, `4 x6 F) L
BYTE nIndex;/ ^4 x1 {1 r7 q" a! m0 E
sItem(){
w9 S3 X" x/ V, s% B dwId = dwKind2 = dwItemId = nIndex = 0;# H# O$ _% e' ?# o+ C3 Y) n
}
0 a2 `" _, g. R0 l2 C- ^bool operator < (const sItem p2)) P5 R" O2 k# W7 K9 p" f0 o
{4 k9 t& z& q! m9 e
if (dwKind2 == p2.dwKind2)1 W3 X. {, F5 n
{( |+ M; P8 J5 h) P+ B
return dwItemId < p2.dwItemId;
/ d! ^5 n y. Z1 | }else{
" O! p5 g. x( f: \- r return dwKind2 < p2.dwKind2;2 M s% D4 O" I! v! V8 h8 t
}" t! K' T: ^1 F' s7 i
}! X/ E1 `/ ~: [4 ^7 |
};8 g/ S1 I Z. C! r. z
class CInventorySort* D* J; e% U/ B3 o9 K5 Y+ M
{1 ?% b6 B1 u7 D
public:" `& @0 R% X9 e# T. R% g$ f
CInventorySort()
( M6 A! `+ Y" p9 n{
" q v9 O, x3 X+ ?$ w m_dwPos = 0;
7 j/ F9 u, y! S7 f* ?}. G' B4 S9 ^- w8 k
~CInventorySort(){}
; Y) B; i5 J" w4 n8 r) X, sprivate:
. W- H4 ~# Z9 _, q/ }( Y4 l( LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 ]) F- a4 N: }; ~# R' l
DWORD m_dwPos;
: T7 \# B: ]2 \ w1 P* @public:
# ~0 @: E" t: G y( b& Pvoid Add(BYTE nIndex)
) p$ ]# N- O6 S. O& |{/ D! J5 y( `; [4 l8 r3 d1 b! |5 Y
if (m_dwPos >= MAX_INVENTORY)
& [$ D. [: K! u- Z$ O" t6 f {* |% F' S! s* Q1 x
return;
2 V p! |+ s% P/ M1 \) c5 A }! T1 i8 O; n6 {9 X( q6 I
m_Item[m_dwPos].nIndex = nIndex;
; s# P* k6 B3 q2 z9 B# e, P m_Item[m_dwPos].dwId = m_dwPos;
/ D, y% N% n# u! |, D4 q m_dwPos++;
2 X, \+ H. \( A7 G, ]+ Z}2 [# I) A0 u& g& k) I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 u8 j6 y: g$ Q
{" m' D% B3 S+ S3 N8 v
for (int i=0;i<MAX_INVENTORY;i++)
1 e/ Q. ^+ K/ A/ f {, I1 g( I5 X& |( @2 ?: w& Z
if (m_Item.dwId == dwId)$ e+ N" u. u) W8 _8 B, u- g1 D
{( D5 w, G) E( h# ]
return m_Item.nIndex;- x8 h3 B2 j7 O9 w7 c
}; t9 Y1 G" P; r, i4 n$ T" ^* T
}
7 g8 u. ]' H! G( D: }. W return 255;
2 H! L. g# o! x" O1 V. M2 f( d( D}3 N. s1 A+ ]! Q! B2 f! |7 Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, @1 w$ l6 K Q* |{" S2 V7 k3 \. h9 b8 {: p* ^
BYTE nTmp = 0;9 i+ y% K) a: V; S: r5 c5 N
bool bDest = false,bSrc = false;) M [6 S2 k9 j$ x
for (int i=0;i<MAX_INVENTORY;i++)" B2 \ M- {* L8 a
{$ H8 p$ n6 S" m
if (dwSrcId == m_Item.dwId)
/ s4 \5 c2 O5 f0 ?6 T" s2 r {
) w* K* x, D& o5 [/ r1 S //id相等 则 改变对应的dest和src
# o6 S9 n; }1 r c! B nTmp = m_Item.nIndex;* B0 ~% q' Q; ^ t9 o) a+ n1 g
m_Item.nIndex = dest;! }4 @4 G; A5 `% u$ M
}" @# l* H4 j4 i0 K/ {8 K
}
4 I" J; \) Q% Z: s //临时数据保存完毕,交换开始
/ h$ E W Z% j% L for (int i=0;i<MAX_INVENTORY;i++): C0 A' O7 p. A) m
{% n9 U+ j0 W- A
if (dest == m_Item.nIndex)
/ Y7 Q0 d) @0 v* `: s" I {8 Q+ \) R2 Y5 i) Q2 q4 ~
//id相等 则 改变对应的dest和src+ |2 C" V2 s# c+ u
m_Item.nIndex = nTmp;7 V* P8 \0 G3 r
}
8 e1 a9 F/ K1 L. U; f/ f }* p* R! g# o% ^; m, r/ C
}, b6 P% _: @ P
};
3 i$ I% T. x% s) V$ c, P3 `-------------------------------------------------------------------------
2 |6 x* S! M7 [2 `0 @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 H4 R2 q6 f' [ l
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" u1 C$ N) _( B* E+ ?2 Q$ W紧靠其上添加:& P% H# q/ D& h6 L' o
if( pWndBase == &m_wndMenu )
: W/ m0 `. P6 j9 p8 T1 w{
; w/ u+ x7 } m ?0 O switch( nID )4 z/ F9 F8 k0 |6 [! {, ]8 S
{
% |' E& M# ?; c case 2:0 L' b0 J. \, a, q) D- B
{
- D" `+ c) R8 [. e$ U& k+ D* V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 Y: }3 p, T6 y; @. {4 T5 m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) T |! A4 v" ~, n+ _
{
; i3 ]) \& ]( p( x0 \) M: v( j break;
8 Z7 F5 ^4 U& @3 a4 s: U7 r }6 v$ {! _3 ^0 F
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) n5 |4 d) K1 C" W; _/ H+ @6 p3 I
{9 r2 {2 }* ?. j1 c) R6 e8 {9 ]- i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ o3 H3 p0 s2 w' M+ x9 j( O) I* T
if( !pItemElem )) ?1 q3 v* c0 l* O3 `0 q+ D; S/ ]
continue;
9 S7 e4 E1 N/ J7 T6 W if(pItemElem->GetExtra() > 0), I$ w7 M! ?( c4 Q0 {
continue;+ B' H. {: ~' z) d5 I- b0 _
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 S3 d' R! g& P9 C) f
continue;
1 H, _( a3 k, ^. C, E, d& `2 o6 f0 u: V if( g_pPlayer->IsUsing( pItemElem ) )0 J( _+ Z% P0 S3 {0 `1 r
continue;. Y9 B: i; ~/ X9 f
if( pItemElem->IsUndestructable() == TRUE )1 M" ~- H! r/ o1 o' ?, X
{
. d+ L( V9 ^" _# a g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- Y6 h7 s# K$ S1 Q$ d continue;
1 n: e( r! C. ~6 t. \ }
: m. g9 e) O* G5 e. s, h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: k! ~; a7 w/ F7 V' \+ e7 m
}
% ?& |. B; @0 O/ Z5 ~3 a break;
6 m5 V8 z8 U3 t% f }
. Z* L# `& G6 u/ X% { case 1:/ }# M4 K# [3 M% H) v3 B) s
{1 b: d' w' u s1 J7 i. c: L
//整理背包! r3 Z% l3 n/ ~2 h/ m9 V' x% b
//////////////////////////////////////////////////////////////////////////
; f, M0 D$ W: |7 D, |3 S& l* ~ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 R F( e7 s8 W. K- l
//////////////////////////////////////////////////////////////////////////
- N8 H8 O: a# y" e9 t* {. g; D //////////////////////////////////////////////////////////////////////////
2 S2 H0 G) C+ t _. C8 M CInventorySort* pInvSort = new CInventorySort;
6 g1 I* b* o, |: ~ vector <sItem> vItem;1 Z! s/ ?% ]; M0 ~
vItem.resize(MAX_INVENTORY);//初始化大小) o+ G: N1 n8 W6 }- o
//////////////////////////////////////////////////////////////////////////4 l$ C% ~- Q& O4 F3 U& }
//填充数据: Q4 T! |: q+ f
for (int i=0;i<MAX_INVENTORY;i++)
& z0 I2 Q) n6 Q, ?. K {
- U& j4 G3 }( K1 \$ \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: Y, a7 j8 E5 O$ V if (!pItemElem)- Q- b' ^% D, m6 p
{
/ L) {. K" D* b4 r1 w vItem.dwKind2 = 0xffffffff;0 P0 c# g4 H) u0 l; o
vItem.dwItemId = 0xffffffff;& j7 _& }. ` e+ L9 m( ?3 G3 n
vItem.nIndex = i;
& i& l8 ?$ K) e }else {
2 k) b o, {8 ` ItemProp* pProp = pItemElem->GetProp();3 Z+ j8 s5 I, M; y
vItem.dwKind2 = pProp->dwItemKind2;
g' X1 S2 g+ R- ~8 P, L vItem.dwItemId = pItemElem->m_dwItemId;. I- h" M1 H+ B/ s0 d/ |
vItem.nIndex = i;/ F) @: `* F* T0 h! @8 A! [
}
3 a( I7 `& z; _1 i! Q9 B //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: e2 ?# \4 h! }: ]3 E+ |
}
/ @2 H3 ]! s# i& z$ M/ j //////////////////////////////////////////////////////////////////////////
9 u* K: ~8 g7 F% Y sort(vItem.begin(),vItem.end());//排序
/ _" ]. P4 d9 k* k- o6 R; ] //////////////////////////////////////////////////////////////////////////
. e5 m2 Z F+ l O //交换
% S7 ]: e X+ B* k/ z for (size_t i=0;i<vItem.size();i++)
/ u( \" k2 v) X; X {
% b, F6 W6 z& C6 U7 ?9 @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 p" O0 k {2 Y: q1 i pInvSort->Add(vItem.nIndex);
2 T, i- l3 a. y* G. t }
4 d* F: i7 N/ R" e: G8 |0 x BYTE nDestPos = 0;( d Q0 Z7 a; [ r
for (int i=0;i<MAX_INVENTORY;i++)
% k: e, T' F, ? {* P( c1 X. I; p" j1 [8 j1 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 d) F+ ?. T" q/ l2 L0 y$ z( n if (pItemElem)
& o' m8 L z9 R3 i" G% ]7 a {
' l! o1 o& U% i" C5 ]9 G4 ? if (IsUsingItem(pItemElem))
; }( D1 c$ }' x$ m; g# ]7 b {" K) S6 a% F' n* j
//这个位置无法放
8 H$ ?0 V1 w+ U% B5 @% J nDestPos++;
- e* ]8 r( z: ~: o }
# d) |: X5 K8 k, E/ z9 K" k }7 s8 e) S* s0 ?- I6 h8 j
BYTE nSrc = pInvSort->GetItemSrc(i);
2 P; w/ B2 O; b( ^% \7 K! A: H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& \ h3 Q$ s. Z' ?) H# J
if (pItemElem)8 @1 N* L" [& m" Q; o
{6 }7 v# k. ]9 A! q" a
if (IsUsingItem(pItemElem))2 z) H7 Q: Y# V1 @/ L' F: `
{
2 j W) p( q6 C! {- R //这个道具无法移动,跳过
6 u! ~' Y: z) K- I0 a" n. H continue;
2 N" b( o: ~' a2 w8 F) `; o- s } v- I' a7 C! r V) z% Y ]
}else{
8 w9 ] H4 \$ K/ e9 J' w4 s3 ^ //空位置 不用动
- M- `8 |- t; r6 \ continue;
9 q9 b) |/ z! w: } }
; D3 o# `5 I4 C m //////////////////////////////////////////////////////////////////////////( Q) u- Y m! q2 r" p8 {0 |1 `
//开始移动
" c$ A/ H1 c& n3 p if (nSrc == nDestPos)9 s- o6 |/ O2 N, Y; x
{
# P3 t4 x: h% V; b$ v //原地不动
7 ~8 {* T4 }: k5 V! N nDestPos++;
3 _0 k3 F+ P3 _ L8 [' n. G4 m" Y continue;
' j+ K( [0 ?7 D Z+ Y# a }! ^: {* f( P- f* e6 F8 e& J
pInvSort->MoveItem(i,nDestPos);5 W6 g v4 I/ [9 O( S$ k% h
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 @' |$ M' t5 x) I9 h Sleep(5);" V' K- i: C- c+ B1 Y; U
//Error("移动 - %d->%d",nSrc,nDestPos);
, z4 g, \/ f/ c% Q9 w- f- {' t3 w nDestPos++;
! y T; l+ X3 v3 U: e4 K1 w }
8 P5 Z4 E3 e' n //取第一个元素的信息
/ o# l e- I4 d" B; h1 \5 k3 q /*
7 A* c/ v: g& c if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ X v' {. Y9 B# i0 T, ^
{6 n- y; @( C5 r, |2 O5 y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! W, v" y9 h: l1 I7 h" V6 C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 [2 M+ o9 q; ~ }) w1 G6 o9 h% E$ z' [5 [
*/
+ [; A# b( \7 i; j9 o //////////////////////////////////////////////////////////////////////////
6 G- P% a! o0 I5 ~' G break;0 M* x# M/ [& N) M# Y! N
}
6 Y) s }' s$ L% M) e( D } 9 H/ ~1 f0 ^$ Y. \) i. c
}* v+ m4 D, @ B- c* ^1 P& V
m_wndMenu.SetVisible(FALSE);- r9 L5 l8 V }* _+ |
0 d g( |# ~6 T
--------------------------------------------------------------------------------------------------------* w k" [' k2 O5 Z6 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 [/ T+ \6 g: S; ~{
7 J& |' a2 o- W1 yBaseMouseCursor();2 J* Z' x* i [+ ]6 S
}! y! f- Q# L' R, d t& q% h
在其下添加:0 e! Q; ]0 [$ z+ g& }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 v6 Z( |# }9 t; Q r$ d7 z$ M- u
{
: o- e: o& v# }; q. K6 J6 g3 Om_wndMenu.DeleteAllMenu();
) k) Y1 B0 ~" a; X$ A; |m_wndMenu.CreateMenu(this);2 p. M8 s6 R1 O
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 M9 Z* k- ]% l+ B
' Q9 Y6 D% d0 b6 ?2 R1 ]+ \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( }* T4 j0 |- a8 l{2 x- S8 [. Y; T
//P以上级别才可以删除所有道具4 b, V( _2 M, Y2 ]& h
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 t0 S: ?; v* k% Q8 t& U
}8 [* x9 ?4 `/ b N. C8 l/ b
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ D1 p, c/ D! g9 E: |& y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 G4 [0 X. I. l3 Z5 xm_wndMenu.SetFocus();" h# X, D- c$ v" c& d, A
}
$ V/ L& ^* [ h# @------------------------------------------------------------------------------------------------------------
* F6 ~0 v8 h: i0 c*************************7 B z2 A! t3 U( k9 n( w/ `- e
WndField.h文件
. D+ Z+ E/ a; i3 O6 v1 u************************** t6 \* D0 [) m6 C4 i3 d! F
搜索:BOOL m_bReport;4 j% `* ^- [3 B- j/ Y* h
其后添加:
8 v1 q: P9 Q3 l/ JCWndMenu m_wndMenu;& e& o1 m! f3 o+ [4 ~+ u; L* H! ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 Q6 b h# z* l/ c: y* @
其后添加:0 [; Y, m$ U& H2 I& M4 D
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 u% Z: w$ i8 J6 r' j7 C7 ~8 R0 @5 R, i+ F+ N" G$ m! C6 E [7 h
0 j: Z* K% I8 C5 f" F( V |
|