|
|
源文件中_Interface文件夹下WndField.cpp文件
$ A- g: X% r- z; g9 j B! V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' F& t) a& n/ N7 I$ q
) e6 {, Z' t- U4 B8 T! r
struct sItem# b7 K6 J) U. [. [ [4 n0 n! _
{- V+ P6 b) N: Y3 z& L
DWORD dwId;; W. ]) X9 [& A6 X6 m1 B. [3 T
DWORD dwKind2;$ @' k: W+ T3 e* K' L5 f
DWORD dwItemId;
2 I! _' N3 O2 z H7 H; H9 V2 ]9 LBYTE nIndex;5 E2 r' c% c# b
sItem(){
% ?) r' z% p4 v dwId = dwKind2 = dwItemId = nIndex = 0;5 {+ W% [+ j* O
}
2 ~' w1 g0 i& i& V) m3 p6 v3 Nbool operator < (const sItem p2)
t8 s) h1 T. K{' b6 T; W( g8 L! g3 o2 P
if (dwKind2 == p2.dwKind2)8 y8 W( w& y9 u9 O2 g
{
0 c& l8 n& t" U* E6 @# | return dwItemId < p2.dwItemId;
3 L! g$ @# R$ J9 b }else{! T8 h, p; F% u* a' p$ ^
return dwKind2 < p2.dwKind2;' ^- J+ |; x! T n* k) t
}
5 r# g* p) H2 U8 _/ a, A- p}
( Y; y6 _0 B* k+ E7 W0 M6 Q: G! L2 W};
+ b! ~( r; K8 Q' Tclass CInventorySort; v& k, q* S7 g' R& T4 A4 Z
{
- g1 m# V! A' U" g% e7 g, p" jpublic:8 f6 c+ A0 h& d, B4 p- ~
CInventorySort()# y8 b5 H! C7 ~0 J/ T9 Y9 |8 d# ]
{2 M% p; m: Q f8 H
m_dwPos = 0;
# a- @4 g, H* }' ~8 p* \} C& W- x- X! u- G: @$ W5 W+ Z
~CInventorySort(){}
- D2 X: q0 H. M# w0 |private:
! u# Q% w7 T0 T4 xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
W5 r% F. I2 G( ?0 M& aDWORD m_dwPos;/ G y6 z% W3 ~2 B+ g* S
public:
, U+ g$ ], G" e3 d) E3 Gvoid Add(BYTE nIndex)9 q, y+ U7 ~' t( H. E
{
" a0 e) l+ z( T% v: y P% V" {8 r if (m_dwPos >= MAX_INVENTORY)
) ^7 M8 ]4 N4 Q% o: @/ Q9 ` {
. F# G' q' Q( v* J3 b- S. D( D- _ return;
8 B3 t+ E h; f( z- C }+ k" K, n1 H4 }% j
m_Item[m_dwPos].nIndex = nIndex;' r4 s; b$ @! h2 w- e
m_Item[m_dwPos].dwId = m_dwPos;
2 E: p$ Z5 N& j5 o% Z m_dwPos++;
) Y+ k, O( ]# I- Y( v9 M4 p5 ? }}) [, B c/ b2 |7 @, b5 d
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 C s8 {# g( y4 [{1 Z. Q3 s4 N' j @9 p+ o. D" }
for (int i=0;i<MAX_INVENTORY;i++)# R' m# l: p/ L, K5 W: B
{
7 s0 s' U+ I/ h* m& m/ f) V if (m_Item.dwId == dwId)1 Y* T0 v; C$ ~5 V
{
2 ^: a5 j0 d7 k. I! D0 b return m_Item.nIndex;
) w3 b9 P0 Y; T) R8 [) {9 \7 F6 P }$ i" E2 B3 @) c2 t% ~0 ^4 h
}
: k7 g: y& V& L8 ]8 R; N; m/ e return 255;$ g1 \% K! K* G; R$ ?$ O: D; K% d
}
1 ~2 S) g f3 ?; }% i/ B5 \: Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; s i3 O3 w& w{0 Y l H* J4 L5 j& i1 N9 L
BYTE nTmp = 0;
$ c: Z0 A% `6 }( q% \# A bool bDest = false,bSrc = false;
* p) e& ?6 i) |1 Y2 ~% _* L6 F% _ for (int i=0;i<MAX_INVENTORY;i++)% c b4 U( Q: N1 @7 |8 v
{
: m6 |' w3 a5 D' k$ Q7 X; j if (dwSrcId == m_Item.dwId)% h) ?: `6 B' j# r* B3 L
{& j. D8 [3 x9 H) h% _
//id相等 则 改变对应的dest和src5 G* l( O; }- N/ p8 B2 [- L
nTmp = m_Item.nIndex;# T0 [0 ^0 J( ^" _, f4 ^
m_Item.nIndex = dest;- V2 n0 |& _6 {* P
}( |* U. j) k$ _& M% H# ]6 c+ H
}; }' I9 {, s+ I2 M( O' ~8 N, Y3 {# Z
//临时数据保存完毕,交换开始
! j4 e/ x( c+ p$ ~4 w: P: V for (int i=0;i<MAX_INVENTORY;i++)
6 W. W+ A4 t2 F% ?, L* z5 q, ]5 v# ~2 H {
: X+ g, C2 W$ r7 D7 P1 @6 D3 Q. z if (dest == m_Item.nIndex)- V. O @' \% x5 `
{+ G W# a. J. I/ m! G; r g
//id相等 则 改变对应的dest和src
& n- N- t/ u7 u& u2 ] m_Item.nIndex = nTmp;
0 t6 D( m. i) M8 V }
, P) L( o3 B0 ^1 ?0 y8 Z }
+ d1 O V+ X. J0 |1 D, Y* H) B, S}
# u' t4 m$ Q: q* U/ N/ H};
/ B# A/ I: M. t. D8 f-------------------------------------------------------------------------& P$ v8 @7 N8 J- r4 e8 S5 R2 _4 ?
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% b! ?# J$ d" F- U
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, j3 f. b9 v9 K! I, E% Y0 |' o紧靠其上添加:
. l1 h. u* D( [2 o# T5 ?if( pWndBase == &m_wndMenu )- H$ {( k; z1 o: z' @
{
; O- l& T; Y/ B( N5 g2 E8 T switch( nID )
( b2 [% |# N+ v9 ]/ c9 ?! Y {
N7 T% r5 N/ T% E2 }2 G. u case 2:2 X: \; ]4 q: d; }# V
{5 A2 X4 r1 B! @2 H
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 b; o% k$ B/ N' J/ g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. ^0 J r: X$ E; V) Z {
" x% `4 s9 i+ x$ n8 }, X break;
1 u, E* d* S# K: A! j, w7 I }
9 y j3 `5 d; S$ a, f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 n: D Z( }0 o
{ X/ H! j, F% B; g, E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 B7 _% B, a; R" p% J
if( !pItemElem )
3 e; Z0 V, t0 A# P; E7 j: M( Z6 ]/ D continue;
7 M! B+ S. j+ S9 P( F; k) m2 Q1 w if(pItemElem->GetExtra() > 0)
' L, S' k9 J7 Q# C continue;
# r0 z: U7 Q3 j+ o if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 ]/ ~- S8 i! H, i [* _
continue;
2 `/ \ N" a, J& f% t5 c if( g_pPlayer->IsUsing( pItemElem ) )7 y3 N0 m& e. N a: O
continue;: I5 S6 U0 p0 }% r8 o# `
if( pItemElem->IsUndestructable() == TRUE )3 z5 m$ g2 _0 h# ]
{
% i" D% Q0 A$ | g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 N) s$ r; a {4 y( c! I
continue;+ c3 {9 k4 E9 B% y/ d) ~4 ~
}" o2 R& ]( }* B e; c3 d1 ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- o2 Z& \- b, |
}1 u- L* S& W& y* F# j
break;
m E6 |$ }4 _* e* q2 e }1 i9 N4 o. V! s. O4 u" g
case 1:
$ m2 N! l ?( g( R; I/ _8 C {
( [& e; e- @6 P //整理背包
6 g) ]& F& }# W/ i5 L //////////////////////////////////////////////////////////////////////////
) J5 E% H& j& T4 b7 m8 B //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. q* n0 {, Q* N% }$ \
//////////////////////////////////////////////////////////////////////////
+ L6 e2 W/ B$ m- C- t# _ //////////////////////////////////////////////////////////////////////////
. A9 e8 X. ^- j1 v8 n4 \ CInventorySort* pInvSort = new CInventorySort;
/ Z1 T% ?5 m6 y7 `1 S vector <sItem> vItem;
. @9 Y* f9 ^! _; M, x: o vItem.resize(MAX_INVENTORY);//初始化大小0 [9 o, ]2 Q* l6 a
//////////////////////////////////////////////////////////////////////////
: D: E; L; w5 }2 s7 T: M //填充数据0 k/ H R, t5 E4 e0 y% [
for (int i=0;i<MAX_INVENTORY;i++)
0 ~$ @: m1 w0 D) Y" q, H! O# i {
, O5 p! [' V1 `/ O3 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, ?4 T, L0 c2 d, ] if (!pItemElem)
$ P% v0 Q' Y* l7 n; r& C+ G {
0 o4 M/ P5 K+ @; K( q0 D vItem.dwKind2 = 0xffffffff;
. A7 D( N- K( m U K7 l; D x vItem.dwItemId = 0xffffffff;% t8 @ i; f, k5 }1 M
vItem.nIndex = i;. ?" X2 x N4 i" q1 i
}else {0 }5 s( R' @- I+ K$ u; P
ItemProp* pProp = pItemElem->GetProp();
) d0 g6 O$ |# {/ `4 \ vItem.dwKind2 = pProp->dwItemKind2;8 o% {, ?) G9 F3 E8 K' C
vItem.dwItemId = pItemElem->m_dwItemId;3 D9 I- I+ W% B5 u
vItem.nIndex = i;
9 E3 }$ |) Q% m }
8 {, h" k g4 q5 n% l7 D //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 z; y+ a3 Y- H/ I4 T
}" p) r4 i; }* b
//////////////////////////////////////////////////////////////////////////
y+ L+ A1 f5 m0 J) C sort(vItem.begin(),vItem.end());//排序
1 h t: c% x% X( {. k0 U //////////////////////////////////////////////////////////////////////////
5 H+ q1 |% i2 i6 n1 K* [ //交换
4 R/ ]) ~; Q! |6 }; i% r for (size_t i=0;i<vItem.size();i++); l% l0 Q- |1 z6 r1 @& B. n. ?
{
+ O- b, D8 P8 B- ~5 h //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& R" I2 C$ w5 s" W5 }( { pInvSort->Add(vItem.nIndex);
7 X3 t. K) Q9 K }. f; w# } j2 s9 n3 e
BYTE nDestPos = 0;0 K. U6 T; ~# c/ \: v
for (int i=0;i<MAX_INVENTORY;i++)+ X# w$ u- Z E$ d2 ^$ d1 K9 Z
{
/ \& H4 e1 @, T5 Y e2 J. q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 p" f( P1 d! o+ ?$ o7 K if (pItemElem)# y& N: {. o: x4 d. n% _9 f4 h
{1 N. q8 p9 ]& y7 q; @/ W/ x4 p6 v' \. D
if (IsUsingItem(pItemElem))9 l B) E7 N% E* h6 @/ F
{
; f, g5 t# @. |3 ` //这个位置无法放
( }3 k: I1 R8 x- I3 G! p# o; @ nDestPos++;
) c7 R8 k/ Z$ E) f4 W, S# @ }
3 a% G9 L- Q& j+ X }
9 @7 O3 n" Q; ^" G' n0 b G BYTE nSrc = pInvSort->GetItemSrc(i);
& U, V% v. p7 Z j; X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 J Y* Q/ {% B! N9 e$ `( _
if (pItemElem)& Q6 J1 ]( a( u" f7 |# f
{; M7 W8 r- \6 a( C; n3 j6 X2 h6 D; w
if (IsUsingItem(pItemElem))* n+ k! C4 H! c) y' {6 W
{
3 o* R. s6 p y //这个道具无法移动,跳过2 k& N3 ^3 b. n- P8 [7 ?: Q8 {0 F
continue;
& m3 |$ c. }% m- l5 J' V2 U }7 y8 @" W1 e* a
}else{* l [5 [* j2 @4 S0 k; l. Q
//空位置 不用动
, ?- ^0 q: r1 N2 l+ u continue;
2 w) k0 g4 y* y }- Y& a. Y3 G: j7 F2 L5 F
//////////////////////////////////////////////////////////////////////////
1 v. `3 C7 Q! j: H# p) _: u //开始移动! r5 w% T" ?3 T: ^* h2 `& c, v, E
if (nSrc == nDestPos)5 g- z+ ~# L, }1 }
{
5 E; @) x6 Z0 v //原地不动
( R: N9 x* g6 z4 A3 h- t& p nDestPos++; P5 I. {. m( \ K) I z" f! g3 t# e
continue;
+ X6 P' t% r% g# ?. w }0 G7 Q" j/ i8 W( v* m0 r
pInvSort->MoveItem(i,nDestPos);
2 m% N$ V7 b6 L8 W* _) n# Z8 _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# o) B* ?9 j, @$ j Sleep(5);
( U7 g: y0 ?. s0 u4 u- N8 i2 L //Error("移动 - %d->%d",nSrc,nDestPos);
0 u M7 c7 w2 P) I. V: q- q9 o nDestPos++;9 @5 v1 G; Z2 u
}
( _: \- U6 G* C$ @+ { //取第一个元素的信息3 H' _- S0 q+ O+ N4 U# C
/*! e- v2 z, ~9 R7 ~ k+ l1 P
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 u" o. u; Y2 X& G6 M$ c/ ?( { {8 C% j0 v: E5 W
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 j+ F+ G6 @, I8 Y3 w' Y1 F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ v+ h) H7 _; |9 X% p }
% x+ @- D( z, O r */3 q1 ~& W- a1 b' j- e' I3 h
//////////////////////////////////////////////////////////////////////////
$ X% i7 V) v0 r5 Y! a% h break;
) T5 k! a, E# \' ~% I1 ~: Y, p }8 P1 g$ {% u, U! c
} ; W5 d4 T3 W- t4 |+ G3 i: b( V1 T7 N
}
) v' J+ M1 {" |3 X2 fm_wndMenu.SetVisible(FALSE);
- v- e5 R0 T$ L% B9 H6 e6 y3 y* C& [4 F
+ T! Q2 K6 z, \) W% B--------------------------------------------------------------------------------------------------------4 e3 S/ ~* x6 i6 ~/ D/ f/ n, S: D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# R) d; ^+ h+ [, @0 A7 A$ b{
! Y: O6 y" [$ L/ {3 ]5 W) aBaseMouseCursor();
+ u/ y! V# O) {! r2 h}
4 ?0 o8 A( }2 R, J在其下添加:
; |. i3 v' `9 z; fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 @. [. i, j3 @% v/ P6 k" x: u. O
{- j* R6 K F, M- K9 \1 f: R' K& l
m_wndMenu.DeleteAllMenu();) R0 J0 S* a! ~
m_wndMenu.CreateMenu(this);; A9 A+ L& R& A; \" ?6 [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 f9 C, Q& N& E3 L( Y% Z0 N$ @, ?0 a" w0 V4 {$ s+ M8 N v) f
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( K! c! J2 _; ?3 \8 ~. T6 m# K9 ^, l7 y
{
% i0 f8 c: y5 v //P以上级别才可以删除所有道具' }' h4 C5 K' a, N- v; D# |1 c
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 Q2 A' `- I7 N. C}3 r5 {4 j* v1 ^8 [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* F' k- }0 K( r/ c; T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) d8 b- O( m; `6 k7 c# h5 Z$ ^2 zm_wndMenu.SetFocus();4 x W: b& c. O% @/ ]7 W- E
}
' P- A' o" m; y# S/ E------------------------------------------------------------------------------------------------------------, C |9 T* U2 O! _
*************************! x: p* c5 y6 w: l$ V' c/ s
WndField.h文件7 P9 ]: [6 z; `; B; Y4 m/ @9 \
*************************
. U+ s2 a. A: e$ X' h搜索:BOOL m_bReport;
# j% y9 k7 y4 M( O, ]( _其后添加:
; E2 {; B# N4 w3 X# QCWndMenu m_wndMenu;3 K7 ^1 y7 u! i
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 v6 [) L( d v# ?其后添加:. C* G! k" W7 w3 C
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 J. _$ p$ b @( V- W1 h) A
3 _6 V% t5 j/ G& ^3 q2 O6 e( v
. p; u' p- T, Q9 b! H Y+ d$ C |
|