|
|
源文件中_Interface文件夹下WndField.cpp文件5 p/ f9 }5 x9 Q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 Q! f. H8 _* ?0 }, e9 O; Y& h4 C% \! F: U, |- d' Q: W' w3 t0 g) m+ y
struct sItem2 a+ d+ U$ ]; K7 u7 ?
{3 T2 _# U4 l0 c8 X7 R2 s
DWORD dwId;- B+ i; f5 h$ n, l9 ]
DWORD dwKind2;. s; i( y) S+ }8 [
DWORD dwItemId;
' x3 o/ D: ~9 i; f" S3 K+ ^# |' zBYTE nIndex;$ N4 @2 |# ^2 Q8 f5 c! P8 W% Q- ]
sItem(){
. U" l2 H$ N; |5 }! ]9 c dwId = dwKind2 = dwItemId = nIndex = 0;
+ t/ `, z* N t1 a/ f2 }. V8 X) z}, T, d$ i8 N0 c3 z s$ A7 V
bool operator < (const sItem p2)& T5 A8 [, l T
{! Q( ?+ h. N+ @8 A
if (dwKind2 == p2.dwKind2)
* e9 P6 K0 ]' Q {# b# J7 w5 m- n7 S3 e' B0 q
return dwItemId < p2.dwItemId;
# X3 |) g) i/ I# z }else{( N8 e( z8 Q, l1 F
return dwKind2 < p2.dwKind2;+ |1 S; }4 v3 I" x- P
}3 w3 J; ]8 D: q$ g! D# p
}
0 P- q: w; r; k4 y! |% T7 d};
' y! \- n8 C5 t, D- L( Yclass CInventorySort
, u! w9 b: ?# t% M; d. h9 w{
( O3 ]& ]2 {# k0 P; x* epublic:
1 K4 d) f7 g; x/ VCInventorySort()
7 g7 `7 R9 o) B ]{1 R' q5 D6 ?; z) j3 @) y. ]
m_dwPos = 0;
. H% g2 e/ L2 Z/ \' h. ]}0 l3 Z# \$ Z2 D+ B& J
~CInventorySort(){}
/ ]0 c8 k- ?1 y T' H0 B8 {; kprivate:
, B& g/ K$ h, l* I6 I, XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 |4 }9 C Y( a1 N& Q7 K5 n; GDWORD m_dwPos; z, i* g2 b$ z; C0 }* s3 T
public:. W0 g I0 t- b i8 ?/ f
void Add(BYTE nIndex)0 m: O( W0 b2 b& p5 x8 T0 c
{2 v! U9 G5 a ?+ ]* ^4 [
if (m_dwPos >= MAX_INVENTORY)/ \3 ]) ~3 O" t9 Y0 x
{
- H1 A6 L: d5 X, a* l return;
4 U' {4 X7 ]4 }7 Z }- {8 N# f |9 N+ p0 y
m_Item[m_dwPos].nIndex = nIndex;
) D: x1 A9 ^8 g; v! a m_Item[m_dwPos].dwId = m_dwPos;' J/ M X ?$ V" C, K3 ?
m_dwPos++;
* k1 [4 m2 a$ h# J( g( z* g6 `}8 h9 c- _( J% _* [' s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
6 V! ` F$ x( D{
, B# G2 b, z) Y! J8 s6 s) _ for (int i=0;i<MAX_INVENTORY;i++)
. @/ H- V5 G3 z1 q {
0 W/ [& Z" n5 R if (m_Item.dwId == dwId)3 v! `, K/ b% J F- j
{
- _" \# A+ ~. s0 Y! |. a return m_Item.nIndex;
% f. B: k; B' Z- Z# f }4 Z8 u7 t6 v3 U j- f" Z
}/ U* E6 L+ z2 e' O' f
return 255;
# q# [9 y1 Q6 B) D+ c. M}
+ Z" e) d% p/ ]void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 }9 b0 i Q3 e- n
{4 o/ e! ]% x' u
BYTE nTmp = 0;
7 [9 i5 G2 b4 F2 ] bool bDest = false,bSrc = false;: V4 M5 z6 c: n9 g. Q
for (int i=0;i<MAX_INVENTORY;i++)3 _2 ?# E2 }9 u+ Z, ^* G
{
: L8 o- t( p8 f! N0 b8 ]: F if (dwSrcId == m_Item.dwId)" x6 Z+ }0 w/ g6 D- s2 i4 _; V
{+ f, S6 w7 h5 j6 H8 C* ~7 o
//id相等 则 改变对应的dest和src# d3 [9 l! a; X) B: S4 B2 V$ r8 K% N$ C
nTmp = m_Item.nIndex;6 I% ^1 R/ }1 J7 B( M4 B9 p/ W: H% W
m_Item.nIndex = dest;
/ ]3 ]2 J" t3 k( W1 @) m9 I9 Q }5 N/ B8 ]+ _' O+ Z
}
- `+ q* x! g Y5 ~1 @5 ^- F //临时数据保存完毕,交换开始
& X( g, q6 R; Q$ o7 P0 w" Y5 u( z, l for (int i=0;i<MAX_INVENTORY;i++)
% V2 ?# c# ^9 N' S( ^% I {3 F1 ]4 a6 m+ o- F2 |" ~ m ~3 `
if (dest == m_Item.nIndex)
o: a2 X; m2 w$ F0 } {/ z, o: s' _$ l9 l6 X
//id相等 则 改变对应的dest和src, C3 x. E2 W8 I3 ^3 j$ d' {
m_Item.nIndex = nTmp;4 {6 z- w" w( y$ W' P6 s/ n3 {& {; |
}# ]0 ]( @; b/ k" t9 }- y
}+ ?2 W" W8 o* J7 H' J6 |
}/ {: B" z _8 j+ u2 x2 ]
};) W: G& D1 r& }5 a& Z
-------------------------------------------------------------------------
* O# j) w5 M6 \/ n, C- z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); M8 ~/ k. x& e* U, t0 ]- ~/ E
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 l$ }7 G. E0 G ~* C4 A* Q `
紧靠其上添加:3 V+ |4 z! @8 ^/ F, V
if( pWndBase == &m_wndMenu )! G9 F2 {3 o# t9 Z
{
/ X- F5 k6 S" [7 d' n/ p( M* z switch( nID )
, c' ?$ n' `% p. Z( s3 l, p {
3 h+ a1 r1 F8 B case 2:
: w( T" v4 f& I2 n { [# i' c& }2 m5 i* Q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- S+ D% X; X* C" Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 N3 g0 F: n0 l; ^' D& v) ?; Y' ^3 S3 o" p
{( h0 h% o" U% h) u" |! A# ?' g
break;
8 ~6 a6 j. v; ]1 E& [; H+ W }
: S- _2 i3 {- ^7 p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 ~9 K' E) L) n; b3 X
{- u0 m" G p1 P7 J+ L2 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% ^9 \$ b) D) C1 V& b
if( !pItemElem )
) J$ t% v" H, F" { continue;
s1 D7 y. ~5 ?9 v8 Q' B- m if(pItemElem->GetExtra() > 0)3 D( U, d9 \. d& P; m+ g- n+ w
continue; ~! t ] b3 b" M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 v- M; X: r" F2 t. C' ^
continue;
" ]) x8 u+ f& R8 a& h5 R, _6 l if( g_pPlayer->IsUsing( pItemElem ) )& k- ~* J- ]1 G, t; K* h
continue;
4 G% ]2 e9 `) ` if( pItemElem->IsUndestructable() == TRUE )1 W4 u& L) a% Y, `2 ~
{
5 F& `0 o0 Y, _& V. [ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ a1 ?. r3 a I- L t4 E1 H
continue;, Y8 B0 ?' N$ w9 Q
}
9 o5 X& h8 I+ ` t g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" T' n+ J5 P3 R8 E4 |
}
+ u3 q1 M @; B1 [: J4 D break;4 x2 m# x3 g+ s
}4 v# W2 ^/ }! f; i! L4 z+ p
case 1:
% J s: z/ Z. p {! E9 N9 X6 L( r% V' ^
//整理背包
) I: k4 {, f' Q) D# H" o& y //////////////////////////////////////////////////////////////////////////
5 O5 Q0 N T4 l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ i! s: W8 R) S4 c
//////////////////////////////////////////////////////////////////////////
- ?* E: N( c6 E: [- Y7 j //////////////////////////////////////////////////////////////////////////# Q3 f, ]' U- o% h, x1 d; d1 ^* n
CInventorySort* pInvSort = new CInventorySort;
" [ }- Q% M5 I7 S vector <sItem> vItem;
2 \- x7 T. Y7 U9 G5 H vItem.resize(MAX_INVENTORY);//初始化大小3 X, T# ~9 w- F O: i7 i( w7 K" C
//////////////////////////////////////////////////////////////////////////
: i6 ?- y5 Q1 T* S //填充数据" b8 q6 p) ~+ W; o
for (int i=0;i<MAX_INVENTORY;i++)
" V( [! E, f- X7 c# Z1 Y2 o {
9 }) @$ t% x! m) M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. p( C3 S* g6 Z4 N if (!pItemElem)) F9 j, t0 d6 ?
{+ k$ h" A' e1 k+ h4 I! P5 i
vItem.dwKind2 = 0xffffffff;
% n0 x; I% }1 M! z1 U; _ vItem.dwItemId = 0xffffffff;( A% b/ x. c- F+ z
vItem.nIndex = i;6 R$ n* v1 w$ M) V$ `4 A' ^
}else {( x- m1 `1 {$ `! p' S
ItemProp* pProp = pItemElem->GetProp();; k! a/ K$ v: f
vItem.dwKind2 = pProp->dwItemKind2;
P, y6 H5 n1 _! i# F vItem.dwItemId = pItemElem->m_dwItemId;
% I+ D! R8 f1 a) H, }% I2 v vItem.nIndex = i;
0 d! A2 k% }+ U }2 S+ w O. @; ^$ D3 D4 F5 @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% T9 N9 r" }' l) ]/ H5 }9 |2 E
}" t6 f t/ I; l5 B' v; V& Z) d
//////////////////////////////////////////////////////////////////////////
) m/ m1 b2 ~& t' d$ J% F sort(vItem.begin(),vItem.end());//排序8 {$ s8 r1 g4 J( c/ I. c
//////////////////////////////////////////////////////////////////////////
* M9 r: F; W2 q$ l3 \6 ~ //交换3 F& G# F) H r
for (size_t i=0;i<vItem.size();i++)
2 m. ?% A! M& {: g1 Y {
3 G$ ^, ]- { w& o //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' N/ }. C4 `/ O3 A7 ^( l
pInvSort->Add(vItem.nIndex);
# W+ c' ^0 k' U/ ? }
+ A% G: [) X. l) q2 | BYTE nDestPos = 0;6 Y& g' J# I+ z/ A; U- I
for (int i=0;i<MAX_INVENTORY;i++)+ {, _8 @( q/ v4 ]6 s& j& v0 M
{4 I$ Z' z: F# |' ~5 k; F+ W! m$ t: q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" o/ `$ m) f x: \2 Z
if (pItemElem)0 c* z4 i+ Y0 M6 P% B
{
1 _. B9 ^$ w4 e. I4 G7 L9 m if (IsUsingItem(pItemElem))
4 [5 v5 ?) N9 B- o {
; V! I5 j+ ~# U: p //这个位置无法放
# m0 W" Y# e$ f7 y/ ` nDestPos++;$ Z, J5 M2 x; {' t5 y# g
}' N0 ~! K/ R" R: U! L. k$ e
}7 h, \6 \ P' q
BYTE nSrc = pInvSort->GetItemSrc(i);! |5 P9 @) K; f p5 b3 e, c3 Q0 Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ g) W# |( q7 N+ Q
if (pItemElem)
, z: N2 } T+ X9 j {) r" b/ ~! \* L6 O6 l6 e9 a8 o
if (IsUsingItem(pItemElem))
* m( l4 b- j% e! s0 \/ ] {, `% P/ W5 y* a8 y0 e
//这个道具无法移动,跳过
" H' Z4 U: \* G/ T$ y1 U continue;6 i# {& C* d+ @ z
}
+ u! c& t O( G* | }else{9 {0 V: f+ U2 N: B! ^
//空位置 不用动
7 U( ]8 u% D, O* p8 s# A continue;
$ L/ W3 H" P2 ~, q }
3 J( ]" l) G4 Q1 D //////////////////////////////////////////////////////////////////////////
) I& e N* R: C5 m( V //开始移动5 c$ C) Z5 F9 T% h7 X
if (nSrc == nDestPos)' B: Z6 m8 R+ d
{# |9 [) }0 r+ s! b
//原地不动3 T& w7 K3 j2 S! F; t
nDestPos++;0 ]4 b% S; k2 `4 E7 r8 _: e
continue;7 f/ o: K/ [0 V# q9 B
}
8 r" f5 r5 X' L2 _ pInvSort->MoveItem(i,nDestPos);
. Q+ p3 ^& m& M2 D6 v+ I3 S g_DPlay.SendMoveItem(0,nSrc,nDestPos);' `( Y" |% z+ S
Sleep(5);
, _. \* M9 S. C& O //Error("移动 - %d->%d",nSrc,nDestPos);# O4 {1 E0 q6 Q4 ?9 M# k
nDestPos++;
" B \; y3 {/ X6 Q6 u8 ~3 L- T# v }
7 t$ M9 f" X% h6 h% q" q4 `6 @ //取第一个元素的信息
! T& L6 P8 E7 F- D4 B /*2 `: ?2 l& ?( Q+ h
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! ~& i' u) z5 \9 K% y; J1 q1 i: |" @ {
+ d' U* C0 {8 [ t0 y) j* l2 E Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 K1 ~" O1 s+ j8 i+ y2 R4 p g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 j% V& V& }5 g }6 n3 Q* C* `) [- v: w
*/( @1 Y* m, B8 i7 C) v! L- V; H
//////////////////////////////////////////////////////////////////////////
' O1 G. A/ l8 a$ T R- j break;
% v4 p2 b$ ?# p* t& `. | }
9 c- a( w. H: E# I1 ~- `5 P }
) j: D5 ~/ ` y' x8 x; z}4 ]& P/ Q9 D' k) g; g) d) L
m_wndMenu.SetVisible(FALSE);
! u0 k" L0 r( s% N( G6 U$ e
+ [ w2 T0 S6 ]# ~- T( n) z--------------------------------------------------------------------------------------------------------7 \: F# f8 o. [) s" G4 }3 V. {. D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 N" q6 b0 ]6 ~& j
{
3 s8 U' B W0 k9 [- s, p8 q! GBaseMouseCursor();1 Z% U; \# |2 o# q( p- f5 w
}7 c9 r9 |" i. y- }7 y
在其下添加:) O& d3 R) G* E6 R: P
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- t1 [8 d/ t( Z5 t{
. y0 Q; q- h" r# x! t2 J3 xm_wndMenu.DeleteAllMenu();8 L# a8 B$ [; {! L2 G G
m_wndMenu.CreateMenu(this);! l% T2 i" N* W; N) o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- K, g8 r( y8 l, r) z( V
6 ^3 `& P' h; C/ g+ gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! l0 E; t6 w2 Y" m* f8 d{
5 |5 n c. }# k3 I9 C4 t //P以上级别才可以删除所有道具# \# ]/ I9 l) N6 H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 H+ Q$ @" r# y- E
} I$ z9 w. Y: p* @' l# {! L4 L
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. e' G* M! Z8 F! k! [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ c2 F8 X4 P% Z& I9 a/ M y$ A1 @6 }
m_wndMenu.SetFocus();* y* a: T8 p4 ^; Q0 i- N+ U3 R: t
}' l% l, \1 }# O* u
------------------------------------------------------------------------------------------------------------
6 T; w5 k5 M5 d*************************
; @2 C" Q; t) sWndField.h文件( j; T+ }$ s& k% v
*************************
# I2 K2 e6 ~6 B$ I) Y) K# n% |搜索:BOOL m_bReport;5 `& T0 Y* W. i1 k
其后添加:4 {2 J' B9 U) C6 J7 U. t
CWndMenu m_wndMenu;
& T c, }# z0 f4 f, c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 y7 ^' B3 [: \ B6 L0 b
其后添加:
# X) ~4 R8 u9 Y( Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
# G" T7 E* Y/ R3 ~3 @6 {6 I, W6 I# r" g+ m! E' J
# _/ _6 J8 |% n: h% V7 d% H
|
|