|
|
源文件中_Interface文件夹下WndField.cpp文件/ ^1 \4 K2 c! R3 x: k+ i
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 @% }% T+ C8 Y9 X4 ^8 X
0 P$ p' L+ E. q ] V3 D5 ?( qstruct sItem. C$ }2 R0 l/ Y) R: x" n+ X1 B6 Z
{7 Y# n1 w! ^' R" f& s% Y9 m
DWORD dwId;
; N8 r- ^: b3 w' _4 ]DWORD dwKind2;
! Z1 c9 _& V8 Y4 f2 ~+ S+ H' xDWORD dwItemId;
p% e+ L6 b) [4 {BYTE nIndex;) m( N V& p- R8 H
sItem(){
' L) W$ E( g7 J ]: P dwId = dwKind2 = dwItemId = nIndex = 0;! N# T |: G/ i: y. z9 {
}. @4 H& j8 }: T. j. X
bool operator < (const sItem p2)" M) H! {0 H4 S6 S/ F2 Z# D
{9 B. l+ j: b" X3 K) ~9 C: y7 K
if (dwKind2 == p2.dwKind2)
6 W7 T) B! P) J2 N1 ]! o1 P: W {2 P, r% w; t" N# M8 J7 q
return dwItemId < p2.dwItemId;5 N: F; U7 H7 I3 Y6 @, H+ v- l
}else{9 h4 ]9 [3 L( J3 @9 J2 Y9 U
return dwKind2 < p2.dwKind2;
. ^$ V) z1 U3 v5 s" ~ O }" r" h$ s s9 Q3 k+ e! Q
}
" Q G+ i$ L9 ^2 O/ k/ |};
& |6 P! [* u# u$ Mclass CInventorySort" v) t n/ D. R
{9 R1 p( K7 [* j
public:
0 G5 d! ~: @* S5 B5 l( r3 r/ SCInventorySort(); m1 ~0 ]+ e( z7 r2 U" e- |
{
* N1 |; T+ D9 \0 m* E$ a2 J5 Z9 [ m_dwPos = 0;
0 U! M$ x- l* s* `( L1 X}
5 ?* W6 T3 o1 x- H0 d' `. b1 L$ } T' Z~CInventorySort(){}
i1 b, U" W) y# _; N, kprivate:
3 m# e& [! i; g" f. B: DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' n _. Q+ V' N# I5 G& C2 Z
DWORD m_dwPos;+ e% L+ Y5 H7 ^, S( G5 X; N6 N# E( e
public:
* o ^; F, X9 @3 [void Add(BYTE nIndex)
, k4 n2 u; G- Q, q$ j# Q{) }: S8 J% z, k
if (m_dwPos >= MAX_INVENTORY)
& ]9 w2 i( G# `/ a {& p$ ] L" X6 ]& I
return;' ~6 _. Q; y- K, o# b8 W, z6 `, ]
}* R5 p7 H- I/ O; x% H; t( L
m_Item[m_dwPos].nIndex = nIndex; R* r# G5 ^6 L. a y; d8 ^8 Q
m_Item[m_dwPos].dwId = m_dwPos;
2 P( [0 R! S* L, x m_dwPos++;; y+ e }; G0 l ~
}. ~" O$ _+ d8 M6 ]; H
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% R. ?7 v" s: U4 |% ~4 T
{6 _' I2 `; f1 A' B5 u
for (int i=0;i<MAX_INVENTORY;i++)# N( V% @- T, T& h' p
{
, V2 n+ b3 Q l7 j& A if (m_Item.dwId == dwId)7 P+ K/ ^5 g. c' g. D t
{1 n9 G+ J; X9 W2 F
return m_Item.nIndex;
) t) K# ?4 E+ v }( K0 j x! Z T3 o
}
* N1 C. i# X5 F% }3 N return 255;
9 F7 p# c. ?! A. l0 d& V3 y3 j}: x" t, |6 X2 z6 [" {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) n! ^7 ~1 v: ]4 y; q' g{
7 Y4 _* A: a' R4 j# z4 ]: R BYTE nTmp = 0;, o0 O, ?) ?2 [7 Z
bool bDest = false,bSrc = false;
$ c% {4 ~: u* V- i. p: Y$ I' s for (int i=0;i<MAX_INVENTORY;i++)
- F o$ j5 o7 l {
7 ]" {" h& v( G# d if (dwSrcId == m_Item.dwId). U% k$ Z; ~0 B6 u7 |/ V+ b' G' |
{
- q* z7 q: f/ ^) Y //id相等 则 改变对应的dest和src
9 W, X7 J0 g- B. O' k nTmp = m_Item.nIndex;7 G+ c- _$ L, {* P$ i! @& D- q# R
m_Item.nIndex = dest;& N, G& g# y3 K, ]* h+ L) x
}
' S. B5 w9 s0 g( W2 x' F4 G5 K }
# r$ x9 i. m, v$ a; E+ {) S //临时数据保存完毕,交换开始/ x2 u# g" P3 }6 `8 k
for (int i=0;i<MAX_INVENTORY;i++)0 w% d3 U( Z/ r0 ^6 [
{
& ~* ^/ I0 Q9 F) y if (dest == m_Item.nIndex)
/ ~' i) b- }% F7 Y, D {" Q& O( L0 d9 c" P
//id相等 则 改变对应的dest和src
3 c" n6 \' Z3 T! C m_Item.nIndex = nTmp;" z5 q6 [ I3 }( d% ?
}. _4 J9 y& i9 L6 N) T
}
0 C5 m9 k: Q! S9 g/ o# D2 a8 S}
: p1 [& F4 U! P. w/ A};
- u% O' `3 @8 l-------------------------------------------------------------------------8 j6 E' d- \6 z8 P
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 d) x; @$ T8 g! y8 m/ t# C. E% T1 [) c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ q# b: {7 R7 [, A, r: ~: N0 u
紧靠其上添加:
$ o+ x6 t0 ^* O. C; _9 d* m" q8 y/ ?8 f Jif( pWndBase == &m_wndMenu )& W4 G( c3 m" W, h
{1 P1 P I# _$ n4 u
switch( nID )% B3 o& r! }* K/ J* c3 f0 y3 u
{
) j" d4 @& b2 a# L. T case 2:. B# k- Z0 h0 ?) _' {. Z& t1 F
{
6 X2 X/ X3 [: ~: [. U$ d }* k- i //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 z' n0 F9 p% A! E1 ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 v9 S! W9 m' J8 B7 Z9 z/ Z {) G3 q0 g v. h m
break;
& ^0 Z: _2 m$ {+ Z7 T+ Y9 F) |- d }+ T O; V% [8 M! [
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( \, W- w4 j. \1 ^ {: N6 f7 F- B, ~9 A, Q* C; C i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 [2 [9 Q4 a' V+ u" G. f) t
if( !pItemElem )" n' |3 h. D" `5 o: J8 S
continue;0 I% }+ j) k3 {, Q7 B" E
if(pItemElem->GetExtra() > 0)
; c6 _ O) _5 Q% n continue;
2 b1 b" U* R) { if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 q. q! r* O* J! K5 G/ g9 @
continue; M" J, m! {. A, B& X! S5 m* L
if( g_pPlayer->IsUsing( pItemElem ) )
2 Z: A ]$ L2 k) e continue;
6 }% U* |6 a% F1 Z |, ]5 u if( pItemElem->IsUndestructable() == TRUE ): `2 o+ d+ Z4 K7 \' T+ R' \/ |
{6 k# s' I6 i6 e/ ^+ f
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# Q- U: C2 r. S/ E2 k, C4 \ continue;
6 r6 y! `" p+ P+ A& x& J; T0 R }
9 r3 b7 h, m7 X3 |% n; q! L' q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 a8 e5 |$ D, P1 U5 U% L3 U: C
}
& n, @ u# T8 l7 K2 ] break;$ j9 Z- g* P0 P8 l8 _' h/ k; G7 \
}
6 O) Z& k& ~' W( I* A; i' f2 S6 o& H: F case 1:( x" G& C# O. f v; k" Y
{ ?+ ^2 h, V/ @0 v6 O
//整理背包
+ J2 a) h2 z( V; g9 X3 y4 @$ A* {, [ //////////////////////////////////////////////////////////////////////////7 \( g" g7 B' d# x- C4 F
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 Q. b$ G9 J1 q/ c" w& Q //////////////////////////////////////////////////////////////////////////
o' w: h- r$ Q% R x //////////////////////////////////////////////////////////////////////////* {! `1 H7 o1 t
CInventorySort* pInvSort = new CInventorySort;4 ^, k, n8 b3 m6 x9 K5 W- s
vector <sItem> vItem;: g) o: L( `5 b3 O. L2 V
vItem.resize(MAX_INVENTORY);//初始化大小7 |" C: \- E. g2 E$ A! f. A
////////////////////////////////////////////////////////////////////////// x1 L( ]: N- l# G) I
//填充数据
2 i$ @" |. h; n. \% B4 ~0 U6 r. K for (int i=0;i<MAX_INVENTORY;i++)
) V' z0 d2 Z/ d; p8 V {7 r5 L" F: U% z! L( j1 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) @( j5 e8 z9 y+ @; a) R W
if (!pItemElem)3 Q5 B" F" o4 i# e0 h: o
{& u, D1 O) h! \( `5 q
vItem.dwKind2 = 0xffffffff;. P# o) h4 b: L1 ~- g: \( j, l; m) Z$ X
vItem.dwItemId = 0xffffffff;
% x8 }) s0 a6 h, [- D7 u8 O, ^5 _ vItem.nIndex = i;
4 k' G `! n+ V1 W: n }else {) H b5 }& l; c4 c8 E
ItemProp* pProp = pItemElem->GetProp();
$ d- R$ D; W/ R' ?/ g0 U vItem.dwKind2 = pProp->dwItemKind2;
. o* ^* C9 ^, e5 t3 l" t* R vItem.dwItemId = pItemElem->m_dwItemId;: p8 q! Q' o" V) j, m F5 x
vItem.nIndex = i;3 J9 A2 Z4 } R( A" y1 r4 e: f! \( p
}
6 a" k! K& m3 E y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); f/ n X# d3 o; I/ @3 i- z
}
+ d7 t, }5 S1 Y$ A8 M) O E //////////////////////////////////////////////////////////////////////////4 q- z( i# @# s1 f( R5 t8 b( ]/ f/ {
sort(vItem.begin(),vItem.end());//排序
0 v) A+ k2 H( ?0 t7 J6 F' G. M //////////////////////////////////////////////////////////////////////////6 ?" j5 M: k- \2 L
//交换+ |' O( u+ q: u4 z! ~+ c
for (size_t i=0;i<vItem.size();i++)0 A3 F3 I( X, [" [2 f
{" L! I; h" W7 z* O
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% ~/ _3 I) s+ W: H2 H
pInvSort->Add(vItem.nIndex);2 y5 U2 N* t3 \. k* s2 @; S7 n
}
. ]7 F/ ^0 S3 n BYTE nDestPos = 0;
1 {$ ^) a7 K; h }* H2 Z: m: r for (int i=0;i<MAX_INVENTORY;i++)' q8 h% Z `: F; P1 S
{9 |1 m |! E4 C2 b- f" x. _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 X) p; J! n5 v T/ k/ m! i. A if (pItemElem) Y8 X4 i6 d- R0 f% i
{
' P* L& {: a( Y: f% Q; g9 x) M if (IsUsingItem(pItemElem))
; o. D/ v9 \1 q {
& e, X, B! ]; B$ h //这个位置无法放
' w# X" E* A1 N8 ^ nDestPos++;
W I7 x0 \, q+ N }+ l1 M8 V" v5 G- `5 q" m! q& {
}! t' v0 _$ P! i) ?/ L
BYTE nSrc = pInvSort->GetItemSrc(i);
; I J5 ~/ m% @! v& `) u7 H" n$ ]2 N) } pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# ] s9 r) U' i
if (pItemElem)
: ^# F) y* F) P+ o {
) h) q8 o. N" @& y i! u if (IsUsingItem(pItemElem))2 N8 P9 p4 [' P( e7 u5 H( W$ T
{
" H3 E" n% x* L; B8 d //这个道具无法移动,跳过
: W; [% O- `0 B! Q5 k continue;
" f6 z/ l1 J U- ] }
1 M0 l. @5 g& B& g+ G8 z1 B }else{
/ Y3 U$ D# M$ d/ A5 f //空位置 不用动8 ]$ p" c8 O/ [# A: n) O! d U
continue;- l* Z, `1 K2 Q( o; K
}; a% t! ^5 ^5 D
////////////////////////////////////////////////////////////////////////// @' H# l7 l/ B9 x9 G+ l. U! Y
//开始移动: w& E* X( R* N8 Z, M5 d3 M
if (nSrc == nDestPos)* L3 M: p" K* A3 H0 Z
{
1 h. S0 a. j% l1 @) i+ M //原地不动
6 f9 T8 L" t9 Y% [) h# A+ h nDestPos++;
; y9 O$ ? v8 w# ?) @ continue;) b! {7 v, v4 r8 n) ?& T
}& N2 P" o( [: T4 w8 R
pInvSort->MoveItem(i,nDestPos);# c; Y0 d4 k6 b! G* U- Z+ x. o
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 m$ Y2 n/ l$ p6 w2 _4 O! g
Sleep(5);
/ o$ q, R* P- n7 c8 [ //Error("移动 - %d->%d",nSrc,nDestPos);
a p$ l; _7 B) u( q( v3 j- ] nDestPos++;3 |4 }% ]* R: X$ m4 a9 p
}
9 U- A/ l0 x% _3 _" y' S7 C# V% h4 i; _% ^& x //取第一个元素的信息
5 O) t% O% F0 m) G5 z! r+ z9 r0 H /*8 _% |# X7 C9 Y7 J
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 j( n; r/ Y" Q' n( B8 w
{ R( l- ?' t6 E2 k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( t4 N e/ b5 k0 t; A g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* t/ L1 @# Q$ E1 o+ k! |
}
+ l6 @1 v1 V8 x( M- M */
4 n. @2 T; n- H7 k( k //////////////////////////////////////////////////////////////////////////
' D& K% U6 }9 }* _* i7 w! a9 C break;3 k# C: K) X: l* X3 T' g
}
, q$ B6 Q. x4 }; E C } - z& }# n7 b7 Q$ d
}3 @, U# j6 y2 y* `
m_wndMenu.SetVisible(FALSE);
* ~+ Q6 `0 U" S' r: {6 O) c2 `5 @3 ~( V* h9 Q7 f5 O) Z
--------------------------------------------------------------------------------------------------------) }0 m, S; @6 ~3 L1 c# v
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ h" g: ~+ ]4 z3 B% j3 L9 X$ a
{
; p0 B0 J: L9 Q4 sBaseMouseCursor();
" X. }) V; D+ X/ W8 b}* w. X( A1 J7 e m4 g, i$ x
在其下添加:& {6 V: c; D! M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% U* m- ^( f2 s; \) R# Y{* ?+ g% v$ ~6 ] O7 b$ {
m_wndMenu.DeleteAllMenu();. W( ]* L" r8 P6 _
m_wndMenu.CreateMenu(this);/ C) h8 T* z0 ?& _; p" \$ a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# t. N4 V9 [# q2 T% T. v- ^# O) P; g% E4 @7 o5 s4 P& g( b8 p% @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): V' s; K* k# h+ K
{6 B" q2 j9 g% i3 A- |$ M
//P以上级别才可以删除所有道具
. Z, W4 v- |6 x( N m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
k2 G* @ O8 f+ t: u}
6 e* o$ t7 x2 [. @; f# Gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 i$ c, p$ }) C8 i! G- P% e' am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* y# o" r+ W/ {% e, b6 Z5 _
m_wndMenu.SetFocus();$ r( U$ h+ Y3 Y% n
}, F3 ?( G5 K, o. x2 L( l
------------------------------------------------------------------------------------------------------------# D/ s% n) {/ ?/ g1 K
*************************/ D! p" N; ?8 g
WndField.h文件
7 N2 ^! M& G7 F*************************& t1 G. \$ t: q) J' n4 j
搜索:BOOL m_bReport;& r) o% T. p$ T) F% P4 g
其后添加:) T2 d' k1 _+ z$ M1 z% g+ M/ Q
CWndMenu m_wndMenu;
7 R7 {. C# I9 c# J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 F! W4 ^4 C/ Z5 R0 ]6 b; h
其后添加:
/ u" \3 {# f% {% I; j- w6 Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);* ^+ X l8 \2 ~- b( {
L$ K3 ~3 S$ `) p S
/ p6 i' ~+ T) b" H9 ?7 Z2 o |
|