|
源文件中_Interface文件夹下WndField.cpp文件7 `8 j% S i$ b0 u
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): A, X: w. _% _* g
9 b8 |' J" ]! ^9 ustruct sItem( ]+ r* @% W2 Z, C9 m
{
/ [% Q9 j% `/ K3 Q: NDWORD dwId;
; @0 w: ` e; f9 p# ?2 y. Q _! |DWORD dwKind2;
/ f. }% `4 _' m3 V2 o9 L( G8 L" Q7 xDWORD dwItemId;4 F3 z* k8 I. [1 T8 E/ w
BYTE nIndex;3 Z* Q$ p' p. [. \/ F4 v3 K
sItem(){4 _3 T) u3 r; c! x$ {
dwId = dwKind2 = dwItemId = nIndex = 0;
! I( h, p0 Y* ~4 ]- [% V+ j}
$ _6 _% ^) P9 _7 F7 z' Ubool operator < (const sItem p2)
6 v2 \& M# H, O9 Q{( I9 R6 u! C" Y, |0 ]
if (dwKind2 == p2.dwKind2)
% s! K& @8 ~) u8 J( m { J: n( F) D7 K9 F: a6 \* H+ O
return dwItemId < p2.dwItemId;
& n$ P3 Z( x+ B7 L' Q2 w7 ^ }else{
( a! Z1 F& z- J return dwKind2 < p2.dwKind2;( j7 j( b' Q/ _! o
}3 h: h& [8 J( Y( |7 R" f8 G& V K9 @
}
: G) t6 n! M. g3 ]/ n7 R};
3 T; g/ G6 ?8 Yclass CInventorySort
+ M% N% e* M9 J# Y" U0 w{9 U0 b# ^/ d& Z- x, W
public:8 t( d0 P* N" y) X
CInventorySort() [# H4 l' L: |
{
& q9 i% N( _; ^) g/ R m_dwPos = 0;5 o1 x/ ?/ }/ k# k( V. y0 d
}
7 t: z4 T- x/ W: S9 K) j7 b3 U' _/ T~CInventorySort(){}7 Y/ Z2 o( T7 O/ n2 H% a/ p. u
private:; \) ^. @) Y4 \: b' h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 ?# T5 h: s ~' sDWORD m_dwPos;1 b1 {0 P8 g6 h' M& S' q& b2 ^
public:! C5 _% d- ~9 X5 r0 h! s
void Add(BYTE nIndex)
% y+ Y' g' J, J. Q- D/ p{& w% ^1 N; B4 u. z+ v# N
if (m_dwPos >= MAX_INVENTORY)
6 T( z4 {0 H" u, g; x {
/ ~ [ R6 Z5 H+ S6 r" g6 F2 S return;
) `" q2 A ~5 w+ N: A9 H5 a }
) T( N+ j1 e! t m_Item[m_dwPos].nIndex = nIndex;
2 I3 A: Q9 ~& P. g+ V m_Item[m_dwPos].dwId = m_dwPos;2 n# ^# G( C' K w' }3 X
m_dwPos++;% E k2 ^) V, {3 @9 B, N
}
$ ~/ Y8 G8 L/ ~; W9 K) O3 y# TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; L7 {% X+ p% g5 Y( s/ O
{
& \+ T4 Q9 d+ ^# ~ for (int i=0;i<MAX_INVENTORY;i++)/ [9 n3 y" U: l3 [9 \
{
2 I- D/ `/ z, c( I8 B if (m_Item.dwId == dwId)* ~5 X W" @6 {3 f+ ]
{/ i, r5 }" l- p3 _9 o
return m_Item.nIndex;
5 Q$ q1 {/ p1 I7 }9 T2 c+ f* R }! k3 l8 y/ @- j i
}
/ ?9 M. \) Z" f3 X+ y. H8 K; V return 255;
) @5 i$ M; _) N5 a# M}! S8 R$ k$ k* b: M# |( e$ ~$ A
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- _4 X0 s8 M: k+ P3 A' f/ H( [{
7 h0 E6 N) F9 | ~4 p% G BYTE nTmp = 0;
" O+ M1 [& l1 ^2 O bool bDest = false,bSrc = false;
+ s9 P/ E% J: e1 {7 h; x& n for (int i=0;i<MAX_INVENTORY;i++)8 q% U& o4 y0 s/ |' \6 }
{
1 V% V' ?. k' M/ j if (dwSrcId == m_Item.dwId)5 B- R! U# y9 }6 [8 w+ b
{$ \: ?! j2 ]. P K( }0 A: e
//id相等 则 改变对应的dest和src2 @. c, o: z2 W! c4 r3 _8 Q, a
nTmp = m_Item.nIndex;3 N( w0 l8 b& \
m_Item.nIndex = dest;, `( J2 A5 I: \4 q3 E& \
}
# m A( j* ~5 h0 o }
6 d( y4 ^+ ?. q: {' }* U //临时数据保存完毕,交换开始
7 m0 E0 C4 g5 J. q) ?' v/ C for (int i=0;i<MAX_INVENTORY;i++)
( ^! G8 d# ]" a0 {" c5 A {1 w- O+ e) s; @4 X8 m! L: e! u
if (dest == m_Item.nIndex)! k- V: g; [/ r9 ` x. }' M: N
{
[6 P; K$ n0 b //id相等 则 改变对应的dest和src, t: z( m8 g+ X8 ]+ @4 |
m_Item.nIndex = nTmp;( _$ }. b1 ^. Q% U8 m! c9 c+ a L
}4 F! j) j2 i" c3 d1 q7 L
}. e: o0 o, i' }5 c/ F6 C
}2 W- ?/ D3 f+ v0 J+ o! ~8 r, j! ], V
};
* o7 h9 ?: {) P8 c: L& U( Q-------------------------------------------------------------------------. s8 R3 L& [6 o8 l" @2 u; b: Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), E" r% d. i# ?9 z0 `* S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. x: u: l* @6 i7 v2 ?
紧靠其上添加:
/ W$ D L- F6 S+ v4 sif( pWndBase == &m_wndMenu )
3 ~) d/ p8 c% t5 ?# k7 K{
& p, | C4 t4 m" C switch( nID )
. x* i& L. k2 S4 I {2 U2 U; ~. l" c7 L% l
case 2: U! ~/ y5 X6 b4 r: @# F
{
p; |8 e& Z% T2 j, `9 T% s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 Q5 @& P) G$ K0 O* ]: y% [ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 K: i9 u% q6 X+ p8 F5 T* C {
7 K2 K+ u5 d# M% O+ c5 u5 c break;
3 @1 z$ v$ |2 U6 P Q* ~# _' o1 s0 f }
! t7 e2 e& t) D6 o1 v- O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ W1 v7 I6 X+ f+ H {
: ] J! Y, @/ H0 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( \$ x: f7 J4 s+ c4 \, ^ if( !pItemElem )6 ]) X! a6 v; {
continue;, d6 r) W+ [1 V# l5 Z
if(pItemElem->GetExtra() > 0): X# E! x! G3 w9 a$ h) P7 M3 y
continue;, N' t. v, p. L! n, }' W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# U' g, c) a; W: K) s% G continue;% i7 A1 `: b6 O; g! O
if( g_pPlayer->IsUsing( pItemElem ) )
: V3 o" h4 n% X$ @0 l0 F* o/ @ continue;
! E4 B1 [" R7 ^. y$ Z$ [/ o if( pItemElem->IsUndestructable() == TRUE )1 I* V2 I% H3 h( K
{
, R5 H% F- e- f2 a3 X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ x- e; P" `) }# [, | continue;* e: \' u3 _/ p/ U
}( c6 Y( B& u1 A9 z5 p3 @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 A1 w* `% J1 T& G% w
}+ Z+ V) y, ^$ f) n, j6 `. l
break;
# e. G; Z( k: g6 `! m9 t" | } J3 z8 L7 f7 ^8 `+ _( N4 U: s
case 1:
& S3 F# i, P) Z, y2 W" q" @ {
: Y' h% |6 ]% | //整理背包
8 D2 K7 P1 J- m. U/ I2 W0 X4 r //////////////////////////////////////////////////////////////////////////: W9 k3 j6 L8 ~$ d! j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 M7 ^/ `7 B+ a
//////////////////////////////////////////////////////////////////////////3 W* S* x: e( t% O! y6 }
//////////////////////////////////////////////////////////////////////////% T% p! B9 {/ C8 S( c, ]
CInventorySort* pInvSort = new CInventorySort;
, k s0 s" [- V vector <sItem> vItem;
# p- V* H* x, ` M# n8 L vItem.resize(MAX_INVENTORY);//初始化大小
% p2 b0 d/ P3 h7 i; D //////////////////////////////////////////////////////////////////////////
' ~* d% W9 C* x2 i8 V& J( n3 ` //填充数据 O, p* o+ o8 L6 p* X$ ^# W( p
for (int i=0;i<MAX_INVENTORY;i++)
: D# q6 Z( p g9 g {
) m( T# U3 ^& s9 Q# ?( B7 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( s: y1 E, {! _4 @" M if (!pItemElem)
6 ]8 S* T: q, g7 b$ M; |9 C5 @; Z9 h {
r/ g& k! N: U vItem.dwKind2 = 0xffffffff;
& q0 i# C, n, X3 I vItem.dwItemId = 0xffffffff;
& x) i* g/ P; I/ S7 B. ?. K' ? vItem.nIndex = i;
7 G& P% ]# q0 }1 {8 n2 F+ o }else {8 b' r D- x2 D3 R9 o
ItemProp* pProp = pItemElem->GetProp();
$ f, f9 I& H0 l! X7 T8 M0 ^, ^; I vItem.dwKind2 = pProp->dwItemKind2;
8 h$ ?$ A* s; [) y6 w+ e, ^* K# F vItem.dwItemId = pItemElem->m_dwItemId;
' w0 F! R: u+ [8 L vItem.nIndex = i;* T7 s9 @2 n0 T) {
}
2 J9 c8 R3 @, I. n1 ? D //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; n# H5 K0 w, K) _, I) j }
2 c5 ^" C( k) R" w //////////////////////////////////////////////////////////////////////////% p2 A* h1 }, [6 `' V8 N6 \
sort(vItem.begin(),vItem.end());//排序1 n6 Y" k% R( L* F% @
//////////////////////////////////////////////////////////////////////////
p7 q8 x) L* A. W/ M& c! Z1 ` //交换: ~& L' }7 N3 G) }
for (size_t i=0;i<vItem.size();i++)* i4 m/ d: m/ u1 g& S
{# h' |5 y, g$ L/ H0 t! Y9 ^5 G
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); S0 n q0 I6 G
pInvSort->Add(vItem.nIndex);2 w9 f3 o* N1 [0 A0 |' H
}
. ? b" O8 M& _/ c$ a k# @+ g7 D, X BYTE nDestPos = 0;
y# |5 p6 p O1 V) j' @4 _ for (int i=0;i<MAX_INVENTORY;i++)
: W0 ?9 d5 t7 c, R {" i( P. x1 w. C, Q* }& q7 S: v# P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 \, \+ }2 J1 Q; }0 G$ j if (pItemElem)
# \! ^ x2 X% i) I# d {
' z( i5 ]/ x! I, ^! b; h# X if (IsUsingItem(pItemElem))
?( G2 a; K& x/ e2 |% \ {
& \+ G2 s& P5 Q; Z( Z8 J- v //这个位置无法放3 W/ s0 W. \+ |4 K& u
nDestPos++;+ c) U7 w3 D' T3 |8 Q Q: \$ T) Y
}
: c% K) |9 H1 K }8 L7 F3 p6 m5 s1 H
BYTE nSrc = pInvSort->GetItemSrc(i);
3 |+ ]0 {0 P( n# ~& J1 n* m pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- W2 r) E* F. @) H4 s" u
if (pItemElem)
2 Y9 J% ?% ]' @ {1 K/ f3 P8 m! O* A% ]0 k1 C% P" ~7 D u
if (IsUsingItem(pItemElem))
6 G' f2 m( {1 ^3 \( U. Z: u {6 @& M9 r/ ?+ I1 n" Q- t* l
//这个道具无法移动,跳过- a4 D3 |' E9 L
continue;5 k0 ? j& j# d% U; I# Z) b
} g' P9 O$ |! b
}else{
2 [: O5 A" ?- N3 R5 n# X //空位置 不用动
% M1 m' t! ]5 N7 r% m continue;
6 G* P# {. {! u }
. l3 m P \' n# D' o+ ] //////////////////////////////////////////////////////////////////////////: o! T k. F4 |: L+ G. G
//开始移动5 s0 H7 C7 L7 n
if (nSrc == nDestPos)( Y4 d; p- w- ]! W3 Y! w' p# l
{
- l' i3 \% T) |( W8 y //原地不动
! m: E; ~( n! P7 Y, t. ] nDestPos++;" \: T5 i3 o" l
continue;
9 v% v8 }& C7 \" q. @( } }; j* E7 d; S9 m, R; H3 m1 H
pInvSort->MoveItem(i,nDestPos);
; S8 f" v6 k r9 s, I- e) X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& M! B- L- M8 I) ]6 o* [2 t/ t Sleep(5);
D- H9 b( y' m b T //Error("移动 - %d->%d",nSrc,nDestPos);
# E9 F+ R7 [: Y# @! L1 u1 @+ A4 g nDestPos++;
- ^: J! ?! E+ w6 v( t }
N q2 p9 Z4 z5 g //取第一个元素的信息
- S# ?+ q! z0 {: _+ ~. K9 m /*
Z, K' Y0 {: w8 N w& @ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& W7 T+ M0 ]$ N( k, @
{; _5 `/ N2 { ^. c9 U) M- U
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- ~8 i% k0 O. d( X g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 H/ x, j h5 j$ w
}
: M+ Z; e$ }* Z* c7 q2 U$ P */7 t' |$ u1 y8 L# v
//////////////////////////////////////////////////////////////////////////
8 Q n" y$ K% F/ \3 W, T7 E& k break;! U! ` ?' \& P
}8 m4 L" U% C3 _' H: r; {
} 5 b7 c" ]# M9 R" S
}" B; x* x* w! z! L/ v& e
m_wndMenu.SetVisible(FALSE);
4 D' n( `! z3 U6 D' W7 p$ g( T
--------------------------------------------------------------------------------------------------------
+ Z, t" P+ f# d- S0 c9 S9 k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ G7 w! H% @9 D, A{
' r5 { j* }5 PBaseMouseCursor();
- X O% N) C" P; ^* j( e} S+ M/ [0 U7 }5 O
在其下添加:
5 ]1 I M* e8 S% q6 Y* Y% l9 I! Y% H9 Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 f0 A, s5 [5 i% e2 I{
: E0 E0 r5 |2 H6 U+ W8 A: im_wndMenu.DeleteAllMenu();
) j* O; G# s5 t* L2 n; c) I$ om_wndMenu.CreateMenu(this);* r6 @" Y5 D* S1 c
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ R0 e& l) z8 r* R2 ]8 O7 `2 i6 b. L# U ~
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# ?3 V) }8 m, |8 C( [7 Y{
! B5 B8 _( N$ [. Z" N" { //P以上级别才可以删除所有道具
) \5 z, @& L# d, m: ~2 C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" `6 V2 F. Q' ~' `% N}
, q" E% ]: R$ m+ _4 N, Ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# A; ~0 \+ d& N6 b, H, b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 G$ ^% J X6 I
m_wndMenu.SetFocus();
; }6 _- G* b9 v, K6 @- F0 `& _}
7 o9 V. ?% ?# X& z8 }------------------------------------------------------------------------------------------------------------
7 m4 n. W$ R' Z0 P" D- Q! D*************************
" p; d, L# s: I& ]/ l4 }WndField.h文件
, D' \9 M* ?6 @" D% }************************** ?; L" H3 P w& E3 ^
搜索:BOOL m_bReport;
3 m7 R3 V( P# k, {3 ?其后添加:$ D' J! K, A, n4 K* u7 B, B
CWndMenu m_wndMenu;% O: _3 k2 y! b4 J' {
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 S6 Z7 l2 w& ]. z: q* r+ J* r
其后添加: R; f$ ] f( \1 @
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 b" ]1 v' {) n8 z# ^% o# l/ x% E- N6 |2 T0 |+ Q. F
% _: w. p# ]3 J: U# o' C# c0 H |
|