|
|
源文件中_Interface文件夹下WndField.cpp文件5 S7 @3 Z9 F V% M
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: X j, J& e% d$ Y- U4 w1 N# l: j' n% Y$ c, n
struct sItem$ G1 [/ ], ^7 d( u3 h. g. O
{& \1 x& `/ B2 }1 |
DWORD dwId;$ ?) L8 g# K7 L T) M2 D
DWORD dwKind2;+ t$ H+ s% E* J% a8 |
DWORD dwItemId;7 d7 ^* [1 A9 y) l [5 X- e. N
BYTE nIndex;
: [: D. [" Q0 [sItem(){8 g. \, q0 c) {0 s! k. i
dwId = dwKind2 = dwItemId = nIndex = 0;
) H% I+ M- W$ r0 P}
! K/ p7 j9 W' c$ Q+ N+ Cbool operator < (const sItem p2)& ]; H5 @( W( z
{
" Y9 r, P3 ^! z if (dwKind2 == p2.dwKind2)
# w. j$ i/ _9 d0 z' \+ M9 |% ?5 t! o- O. P {7 P9 q/ q+ D3 N3 t. Q. L
return dwItemId < p2.dwItemId;
4 v7 g1 w& P' H$ e* y! m& i }else{
+ r6 v9 t5 }+ i" |" W return dwKind2 < p2.dwKind2;2 K% D$ J9 j5 R) D8 k1 F8 O( l3 p
}# M$ m& d, s1 \7 g; H8 S
}
: ? b- s2 L# `0 P F5 s2 B};' X& Z& q3 I& \
class CInventorySort0 l8 g5 n3 L+ s F- J9 F9 u7 r
{9 m' d* H# u$ E9 p S
public:: ?. Z1 b) y3 ?+ \4 g
CInventorySort()
+ B5 d( _6 k9 ]$ n5 o2 L: Z k8 Y{
' y1 p: ^# g& S8 R, W2 U1 O& S% M, h m_dwPos = 0;
0 g$ m4 O2 Z& x9 i, k}
+ b4 s0 M2 g5 k5 Y, `# _~CInventorySort(){}
* z) n+ P7 A! Wprivate:
( j5 J2 p0 z! ]9 @4 c9 ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& x" I! i1 ?3 [/ l5 W1 s4 S
DWORD m_dwPos;
: T: K \) z$ f1 o m( hpublic:
" V* C2 v. c r. t( E8 r+ g; |. q" d4 uvoid Add(BYTE nIndex)5 r5 [9 }8 Z: \' {6 }
{; j0 v$ b( m( H2 J1 _+ o
if (m_dwPos >= MAX_INVENTORY)
* m+ S7 r# ~. b, Q/ r7 L- p {! M x% R( D! ?* g6 B6 }1 @
return;$ U4 d6 {0 j/ }0 F9 q
}
: A, p0 C N) w. K4 f2 R. M m_Item[m_dwPos].nIndex = nIndex; b- X) h/ i7 z9 a* [# O8 s- P
m_Item[m_dwPos].dwId = m_dwPos;
. F x! m4 A% {8 f/ \1 i m_dwPos++;/ t" V7 s$ {6 F% S3 y3 E* l
}" I6 N/ g, M# I6 {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; y! Q, M1 t1 M{/ r( L0 o8 C: Z# `9 `
for (int i=0;i<MAX_INVENTORY;i++)
& _: r( a% `( h3 I3 b w {* n' N3 ^9 x2 I/ n# x# ^5 v
if (m_Item.dwId == dwId)
8 c9 n5 i% }! b {+ h9 M0 C, L3 M _7 B: L6 T$ ]
return m_Item.nIndex;
: P) O% t7 d4 n+ O# Y% v }$ T* M4 P: W) d. Y* x
}
1 \; w8 |- P4 [7 A1 H0 ~ return 255;& f- r# I% c; p4 V- A
}. q, ~ p; m/ h+ ]: n) e B0 j- x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 k7 a2 L2 d# _4 Y" w3 Y, j8 L3 |{$ h: Q1 X* y. W. d
BYTE nTmp = 0;! R: }; s8 _% J2 a
bool bDest = false,bSrc = false;
4 `! N9 V: R& P5 T F* O$ } for (int i=0;i<MAX_INVENTORY;i++)0 g, N' E7 z9 W# C! o9 n
{% h* }0 @0 J; ^6 O7 X% R
if (dwSrcId == m_Item.dwId)
/ X* n% r. C# R( l9 u" h {! l& q. q- l( J5 g0 C- ~4 P: o
//id相等 则 改变对应的dest和src& x/ a+ V$ @- P0 _# ^. w S
nTmp = m_Item.nIndex;5 f5 G, A) E0 J& I8 l
m_Item.nIndex = dest;
$ C* ?1 N4 s/ } }) L* t+ F2 K% B$ @* s2 }2 D+ y8 E
}8 m& O' F% s" m
//临时数据保存完毕,交换开始; W! Q$ W2 R$ e% i
for (int i=0;i<MAX_INVENTORY;i++)3 ~, F2 W1 K6 i. p
{& _8 _+ H3 m2 F6 v
if (dest == m_Item.nIndex)0 p# {& `5 W& S0 R
{+ R) y3 g: y& C
//id相等 则 改变对应的dest和src" [2 c# Q) |( @
m_Item.nIndex = nTmp;2 e* w& m9 M" `: j, Q, A$ _3 T/ b/ L& O
}
" v R$ n' D: l$ a/ P% y' \ }5 B) b1 r' @* V
}8 J4 ?2 J9 b. {
};
. y# N6 l' H, A$ |( g: [-------------------------------------------------------------------------4 k: \9 x2 r/ e6 u$ @% ]) A0 |: g
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
a3 ~) s7 D, P, }9 g3 M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ u& E' n4 V8 Y! U紧靠其上添加:
& f A1 f G0 W; Cif( pWndBase == &m_wndMenu )
3 i' ^! ]8 Q9 Q. t1 r U! A" [/ l{. V* \6 t, ^0 M# D2 p" r
switch( nID )
, n1 Z* h8 Q) K6 w {
9 d- g& s2 c/ u8 w7 B# L case 2:
( [8 A# U6 X! F0 T- Z {/ w& b1 G+ g0 E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 n1 `% V! O+ [: R' p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: K3 d8 v# G' E {* m! B- h5 d- Z$ h( P4 W- W. q
break;) j5 _ c9 d, O% e7 Y
}+ q; h3 r7 z7 V/ @; G
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 g+ w6 ^& }( {& c
{
5 a. ?2 r1 P. n6 d+ c3 G B8 | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 d% O( @' D1 Y if( !pItemElem )
* z! j9 n+ k q0 m6 K" p continue;% ?" M8 C: Q0 J, v
if(pItemElem->GetExtra() > 0)
, \, ~& I+ c! l+ o! [$ I continue; s9 N% z4 F1 ~5 p! Z! R' ?9 o% j, k" c# a
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 a, [/ x% X, Y! c
continue;4 n9 R: s K3 H( Q1 }( Z
if( g_pPlayer->IsUsing( pItemElem ) )
) N& e$ Z+ R" \/ a continue;
" X' E9 A, ]9 W( ] if( pItemElem->IsUndestructable() == TRUE )
4 y5 q" W7 j: h# B: K {
0 S; o" ?6 w, W* ^ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 B4 u/ ]$ X0 a" H0 X' S
continue;" W. D. j; C. J( \" W+ ]9 V
}7 O9 A! v$ ^- y& q& d
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ Y2 H3 J0 E0 ~5 A3 U0 C% d }
# }7 ^$ {$ C, @) G break;
4 ?3 G! \- `- ], W0 ?5 n; s }/ W5 v# l3 T w
case 1:' v* I6 R! P: e. e8 M
{
: V6 u1 o" w/ @& h# l //整理背包
$ a4 L- `" m' @ //////////////////////////////////////////////////////////////////////////
7 U2 q" p7 {; I6 O( r% O& v //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& f4 A; [1 n- e' R; y# s# a9 w
//////////////////////////////////////////////////////////////////////////% q/ y8 q$ G8 `
//////////////////////////////////////////////////////////////////////////+ G; N0 n b/ N- G, k/ k9 {
CInventorySort* pInvSort = new CInventorySort;% N5 Z* o4 E1 g8 z/ j
vector <sItem> vItem;& v7 X' J4 E; G2 J2 X& U
vItem.resize(MAX_INVENTORY);//初始化大小
! E. s: N7 ^; X& E1 U6 R6 ] //////////////////////////////////////////////////////////////////////////( L& c; m% d; M5 e, W3 }% j' a; e) j5 ?
//填充数据8 P' r1 a( d2 N; F2 e" X
for (int i=0;i<MAX_INVENTORY;i++)
) R1 s7 a) K' e! r& E4 R! y/ P {6 C. a" C: R% Y6 @5 P; M1 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 p1 t" \4 K; K9 H
if (!pItemElem)
. f+ z, q0 U* @# i# S7 O! o- r* f% H {! x1 _& }5 b2 j1 P$ ^+ e) b
vItem.dwKind2 = 0xffffffff;
* H3 W/ k) _6 @$ q vItem.dwItemId = 0xffffffff;
, f) z q/ L6 k) q! a vItem.nIndex = i;
8 S/ R0 J9 p* v3 T0 D9 U, s" C }else {3 Y# a' A% r/ f9 s' O
ItemProp* pProp = pItemElem->GetProp();' {) _2 n- S0 U) M/ q4 y5 b' w
vItem.dwKind2 = pProp->dwItemKind2;; |6 k% x" A- l) T# c* A$ x9 A& d
vItem.dwItemId = pItemElem->m_dwItemId;
, X6 ]" N/ R0 r, U! X3 A6 F/ ^7 d vItem.nIndex = i;
2 M' t4 T8 j, I: D/ @! R0 y9 V }
1 c& _9 X/ L& R7 i+ X //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 T- ]4 T q3 t4 T' X+ }- q
}) V' X) v/ y/ W$ O+ V% |
//////////////////////////////////////////////////////////////////////////+ x/ R7 j% y6 m/ w+ r
sort(vItem.begin(),vItem.end());//排序
; L4 O# `; I) e: J: `6 g9 { //////////////////////////////////////////////////////////////////////////
9 L h, O/ B; b$ n4 D, S* j //交换
4 T5 z4 z% @5 H. R$ |% Y6 n/ [" R for (size_t i=0;i<vItem.size();i++)
' _- m( O1 t7 Y {
@1 |' X6 |, t3 F //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. M" h# m- c% T, A7 D pInvSort->Add(vItem.nIndex);" M% A* ^# D* ~4 g8 ]
}+ d5 U# ~) i5 p- u+ @
BYTE nDestPos = 0;
) f$ B0 a: \6 U, a( |! o% I for (int i=0;i<MAX_INVENTORY;i++)5 D/ k$ y7 @6 Z( x7 I0 W$ F' ^3 g: @
{
+ z. B$ s0 {6 T5 S; e$ h/ @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 N, R& K* L1 e. u; n! k% R- o/ R
if (pItemElem)
* W8 P* J3 V n; G0 ~ F) d& R4 G {
* t6 W m( f; c if (IsUsingItem(pItemElem))
- m; {( n8 b! F% O+ m1 ^0 Y& Y {
9 h" X; R/ D o. o% D9 m* R- X2 n //这个位置无法放& _& k1 d$ d; N: p5 U9 ~
nDestPos++;, `/ o3 W1 G0 ?* v9 M) U1 o; k
}5 N, ?' i- @3 H- j
}9 V6 Y( d J Y& F, }* ^
BYTE nSrc = pInvSort->GetItemSrc(i);# o" Q1 f# A; g7 S( \! @
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" \! l+ [! q4 ^% z( _! L
if (pItemElem)
s) H( l" p$ x5 Q, g6 r4 ` {
& l j6 ?1 W8 `- @ if (IsUsingItem(pItemElem))
- l/ O) H# A' r8 n" H# A* m5 |# U {
: s# x$ ?& O1 N7 g0 U //这个道具无法移动,跳过
9 A7 x2 c9 o9 m% n continue;% [$ J: U' I/ q6 o
}" Y d4 n% A* ^
}else{
: w; |- |- `6 i P //空位置 不用动8 r- W% \* S. @5 k4 S& p2 Q
continue;
; }" O. d3 c' V! {& v3 f }; ]2 |# _3 w9 B' ] x1 k
//////////////////////////////////////////////////////////////////////////
# {" g% F% ~& x% }8 v) \* G4 S: g //开始移动
3 \; {% y- T) M Y$ ? if (nSrc == nDestPos)- ~$ B9 w1 j* X" ^2 a6 M
{# B3 ]. e& y; _9 F }
//原地不动
5 Y# J6 p( C/ B) x; s3 K% D nDestPos++;+ }2 M& W% s5 M
continue;
5 c8 X4 z2 W7 p1 d( x$ ~& I& b' P4 R }& S8 p0 y- Z! {2 Z( u
pInvSort->MoveItem(i,nDestPos);4 J# K- l) @; g ]/ y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" }2 ]4 _: h, {9 R ]5 B' C Sleep(5);
3 W$ H5 u% M; q( t" W9 b //Error("移动 - %d->%d",nSrc,nDestPos);
* ?% X/ g# q" W1 W9 B% g$ } nDestPos++;- G1 }8 r! q2 l
}
! k$ p S6 i* x | //取第一个元素的信息
j% P6 o) N H8 v& C' E /*, ^3 G3 P1 x, B6 }
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 p. @5 y L! I7 w* C1 [ {) ^& z$ s% l% R( f/ h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- {6 }6 w' u" A0 W# d& {
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% f1 O# R/ o& \' Y; ~+ F( C }
# f; }: [5 u% }9 R */
3 V# }8 t% Z7 ?( b$ ~$ |% B$ _ //////////////////////////////////////////////////////////////////////////
/ B8 x7 I' Y/ g' j# i break;& P' q8 v, U7 U2 e
}$ e+ ?. w( q7 ~6 l
} + z G' Y4 P/ j
}& a7 S$ i' F3 `3 p4 K
m_wndMenu.SetVisible(FALSE);* {( z* J$ t) B1 s7 N$ c
1 g* a! Y/ a( A7 T# c8 _: {
--------------------------------------------------------------------------------------------------------6 g2 X# e' X2 j& n9 ]
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), n( z4 r4 W$ u# W
{& Z% U% F- m% [
BaseMouseCursor();
6 _( [ j5 k1 n4 C: l3 Q1 p0 A' K}4 K$ |! v) K8 p1 l/ C/ M6 X4 G
在其下添加:
' z- Z6 O3 d. Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), Y! X9 h b5 a: L4 U5 x
{
2 F7 T; L, z! ~* H& M q5 Ym_wndMenu.DeleteAllMenu();/ Z% v7 ^, K* \! }! d) o5 a; }
m_wndMenu.CreateMenu(this);
W+ ]* n T9 b6 B" om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); E, E: U) w# P" i# E* D6 e! |' ?
+ B, ~: t1 ?' O9 \. Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 ^0 n9 Y* H! n0 M4 w4 Y/ M1 s0 N{
1 Q# m& i: A' J# x/ m7 B //P以上级别才可以删除所有道具
9 k' ?) W* u3 G! b% I2 m; ~- } m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
E$ E' @( R( B}, k d" a3 v6 x2 v k7 s+ B% q1 ?% q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- g: C) {& \+ am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! T0 s4 D$ ^" e5 m( l0 N! qm_wndMenu.SetFocus();: Q0 [/ @- H; S" W# J
}; z- j0 |7 M' W; z5 D, x9 z( }
------------------------------------------------------------------------------------------------------------
, }* ~: F% ~% p f( E*************************
' V0 W' |1 B3 rWndField.h文件
! C1 j! \& n$ p& W*************************% t* C( H$ k# C; a1 e9 T
搜索:BOOL m_bReport;+ ^, g- c; ^! v6 O
其后添加:
* L9 d$ |' B" K/ q/ P& {' ~CWndMenu m_wndMenu;/ T4 e. _+ m% b0 O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' S- K0 h( H; H( i( j- k z
其后添加:
9 ?# r3 u& O3 w- H0 D' Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- Y' {% |& Z0 h) _/ a( Y6 _( [% F! ^8 d9 z
3 b/ j; O( b! Y, [$ }
|
|