|
|
源文件中_Interface文件夹下WndField.cpp文件
0 y. u) y$ |' H$ P( s: j' f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 M: {! j2 |* f
/ w( l1 Q- \/ K( M
struct sItem* V+ l( l; {7 y4 X' o
{
- ]7 w! J( K i( WDWORD dwId;
* F6 z: k! j6 b( y4 N2 {* _DWORD dwKind2;, o5 y& h8 w4 \: N0 V
DWORD dwItemId;
" v7 ? @ }; ^8 @BYTE nIndex;
% K7 D2 o6 C, Y. vsItem(){
( S* r( \ G( o3 |+ z* K dwId = dwKind2 = dwItemId = nIndex = 0; j1 e4 ~* V) w7 ~# V1 ?, C
}
0 o" v# F. i% w' J" ^' _3 gbool operator < (const sItem p2)3 R/ L! V; J9 k0 K
{
1 T+ g" g1 R+ F* z0 R9 g if (dwKind2 == p2.dwKind2)
) n) P! c9 W& T4 i# Q {, @& }1 x$ ?+ c
return dwItemId < p2.dwItemId;) ~ J( L7 g" D
}else{
2 Z! T: T1 Z. [- ^4 _2 g2 g return dwKind2 < p2.dwKind2;8 J5 ?: [# p1 U4 K2 }+ K
}
" _! a8 e- j9 W/ C* O}
- P8 f4 F$ ~" o: K+ `: f};
7 }7 Z* B* ~7 ^class CInventorySort& b$ s/ W C8 w
{* K; [1 |# w1 ~+ ~4 F1 F. D9 _
public:' S$ m8 A) W) Y# @/ r
CInventorySort()
8 N& s( H3 z+ |+ h, ?) R4 U{. r& p6 E, }1 a. u7 R8 _
m_dwPos = 0;
- x" r3 m2 o7 j) o7 G! j}
0 D/ H E2 V, C4 T; K- g~CInventorySort(){}7 t( n3 v. r8 D$ p: A# X
private:8 X# V- J/ T/ X( n7 v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ g* e( C2 C9 x! G+ w3 x) _DWORD m_dwPos;
. l* `% u# t" q' N& D/ p+ Vpublic:: m* Z1 `/ b* ]& |6 R
void Add(BYTE nIndex), q) Y e6 p# Z; {
{ J- \" P! s0 X' G: q
if (m_dwPos >= MAX_INVENTORY)0 Z$ W" i! V5 J. \6 D( ]+ {. L
{( B7 a5 ~, T4 }" u7 f
return;
6 _6 k& ]* l# A- ]% W% M }
* c* y2 y' B' a, \) k& _6 b2 X m_Item[m_dwPos].nIndex = nIndex;
! o$ R4 b2 g1 A6 t8 L- o m_Item[m_dwPos].dwId = m_dwPos;
/ r8 J$ @7 i: f m_dwPos++;1 m K& _" R* w7 V
}, J, y& e# ]! l7 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- s& s) D) D# B2 d& Z7 v
{
& I/ t) y7 P! o9 \+ m# E1 N for (int i=0;i<MAX_INVENTORY;i++)
4 A8 U: f# N# ]2 a {$ ]3 {8 ^+ Z5 |3 I1 {7 D5 A" u
if (m_Item.dwId == dwId)
' `5 v: L# t2 X/ o1 N0 S# l8 C {7 A% V6 G( h* G! L$ q" U
return m_Item.nIndex;
5 K+ ^' u1 w( r# \% e% U7 H; \ }
S' r' A! H) h1 V8 q }6 r! |* O/ N3 _$ w( B
return 255;
5 u3 z7 N, E7 `' \}& `$ E3 L4 Z% q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* g O5 y& G0 G4 X/ o8 e
{/ J1 N8 H- S$ ?# u5 N- ~
BYTE nTmp = 0;
$ u G% R; Z+ x; X3 @ bool bDest = false,bSrc = false; @8 N" v% O# e* V8 s4 t# U% l- i
for (int i=0;i<MAX_INVENTORY;i++)* X0 o5 M" k# K7 F) D: l2 Q4 K
{
, J& P6 e# W2 y' V if (dwSrcId == m_Item.dwId)
H* Z* f! o# T( T( J {
9 r4 u3 ? \- E7 N0 k A1 y4 i' c //id相等 则 改变对应的dest和src. m. ~- [5 I: n" ^
nTmp = m_Item.nIndex;) \0 j; A) f. q2 r+ f
m_Item.nIndex = dest;
# l9 R% p+ O6 u% _( e, { }' W- Q5 @6 w7 H8 h6 h6 E+ `
}
. _! d+ n6 \" T) @# \* Z! J& J //临时数据保存完毕,交换开始
2 A# e' z/ \* L' s. a9 I% r7 I for (int i=0;i<MAX_INVENTORY;i++)
4 g, X' `2 U, l/ }/ E {
8 z* R; Z" l' b( C' J$ ] if (dest == m_Item.nIndex)
3 X$ Y/ U# ^- [8 H* l; Y3 O @ {+ k/ u9 |4 u5 O9 A
//id相等 则 改变对应的dest和src2 v+ ~# B9 w& I& p5 O1 I
m_Item.nIndex = nTmp;
# }: x2 O' `1 A: i }
2 D& ?2 T9 J/ E0 O6 N' ` }
8 f" i, }/ H7 e! W5 Z$ c}- ?, ~3 N) G) K5 W6 k) U7 c
};
- c( t' X! C9 T7 L1 k# N$ X% j-------------------------------------------------------------------------
# U7 N0 E. o' X' [$ r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ r; \9 |1 b# T# P2 F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" _4 V3 b: T3 d7 D0 t( S& H0 e! ~: q
紧靠其上添加:- x2 j) ]0 x: v+ Q+ _9 U
if( pWndBase == &m_wndMenu )
4 S: Y9 S) H" a& ?! H6 n, o{
( Q4 {( h- m" @. H) K9 l switch( nID )
: N3 Q6 e, }# K% v {
- i' U( m) Z8 Z: N7 w& Y1 s0 r* [ case 2:
$ f3 Y2 H/ F" |9 j" _3 h4 y* k* c {
7 o* Y1 o4 N# y, ?; U //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 y3 T. j% ?- {- r, V$ c, L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ n% F3 r+ E% v; _0 Q
{3 O+ h8 Q) y8 w9 ~7 m n
break;/ c- O% p+ L) a6 N8 q. I4 p
}
% R9 [8 C; q+ a- y' @' {. I5 ^ C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# F3 T) ?0 y" s( H { n [- p7 h$ S8 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- o# v" {. o/ T8 m0 } n
if( !pItemElem )/ Y' ~, x# M4 l
continue;2 O! E* A! {7 w1 Z! H6 b3 l1 O
if(pItemElem->GetExtra() > 0)! l" j/ d2 H2 ~( f; n. k8 d; o" h
continue;* B _, ]! X4 x( P5 e- @
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# k2 {9 `, T- E6 E continue;
7 z5 a$ A1 ~1 i& ?9 O [% w7 y if( g_pPlayer->IsUsing( pItemElem ) )' V( g0 }& W8 s, Q7 R6 l1 x
continue;
# s5 B! v* M' t, M7 [ if( pItemElem->IsUndestructable() == TRUE )
/ p: C6 x! |7 a* j0 K' `0 A4 s2 ~ {
2 U4 r8 i( Q& f2 }& d" Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 B3 h& u: ]" {9 M A continue;
0 I) v* K; `9 R$ n8 H/ J }
U [+ O! y' H. z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' D4 c: k4 l% x: O }
2 b% n8 G3 J" d2 k3 k( M break;% K+ ?4 x3 c: W; J$ [/ d. {
}1 f8 U [7 F: Z- R0 H
case 1:
: _7 W9 `( `* s& K {
) \: M3 Y* `: J) r- y' m! W7 `/ l //整理背包
3 A! v* K/ g1 I% r! n4 h8 R/ W //////////////////////////////////////////////////////////////////////////
/ x2 m" o' m3 [5 W' ^: v8 x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 B: {/ F" d4 `4 h8 L1 e0 s
//////////////////////////////////////////////////////////////////////////
. t' }4 ~' m, ]1 M //////////////////////////////////////////////////////////////////////////( I& F" O% n) [8 l. p" M
CInventorySort* pInvSort = new CInventorySort;% o" N5 {" L, ^2 A0 W' p& |
vector <sItem> vItem;9 I; e' H8 I8 V) g1 z& X
vItem.resize(MAX_INVENTORY);//初始化大小
" H: q$ I, { o& H9 ] //////////////////////////////////////////////////////////////////////////
1 P1 q$ O& j" e) t6 P+ B* [1 |" H //填充数据. T3 h. I. b: E7 A2 a6 F
for (int i=0;i<MAX_INVENTORY;i++)
5 r7 i' M5 P/ d$ s0 v m+ t, W0 } {
0 X6 I- e! m, j" b9 |/ C! F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 A6 r2 ]: o8 v/ W0 I1 u7 \
if (!pItemElem)( I8 `5 A% o& O3 o$ I0 |) c. u
{
: J; E( x H& H+ ]2 m- l) N, S vItem.dwKind2 = 0xffffffff;* d, C% z; }* L: f) d5 O' g9 h
vItem.dwItemId = 0xffffffff;
4 c1 O+ e+ a- n1 j' G: E vItem.nIndex = i;
' t! j4 F7 d8 K4 v8 W. X. f }else {
6 K8 ]. h& L5 J2 i# ~' Q& a ItemProp* pProp = pItemElem->GetProp();+ p3 c4 J7 ?! O( b) p
vItem.dwKind2 = pProp->dwItemKind2;, F; p$ Y4 a& ?* L& T; k+ V
vItem.dwItemId = pItemElem->m_dwItemId; |1 P8 Z& z- Q! v$ l/ g6 ?
vItem.nIndex = i;
: b `7 r; b6 i, m* u* J }, U3 I) {8 y6 T9 g0 Q4 Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( P6 ~% z2 B2 R% N2 w0 A }
+ _5 ~" ^* M' V4 H8 X+ t- m. t7 ] //////////////////////////////////////////////////////////////////////////
! t) ^5 S" w9 l( b* D0 S sort(vItem.begin(),vItem.end());//排序0 i* }5 R- p: ]9 q; o
//////////////////////////////////////////////////////////////////////////
- X/ h" ~+ x& e$ Q, c) E5 J //交换
4 j2 b# Q7 X/ c3 J for (size_t i=0;i<vItem.size();i++)
7 m* n, h* q; O* }2 ^" R& v {* k/ F% S9 r& c3 ~
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 u5 S( X% A: @; E# b w
pInvSort->Add(vItem.nIndex);% B* C! }) w$ R* v1 ^: T9 |5 y4 _
}- p5 u4 d+ r" B$ Z2 p
BYTE nDestPos = 0;
2 S w9 Q3 {9 Q2 u6 F4 B+ G for (int i=0;i<MAX_INVENTORY;i++)( ^. i& G5 u3 s, S
{! V: x; D/ m' \9 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ g z9 f& P$ N7 ]' k if (pItemElem), c$ b4 @( ?6 o- j6 w; p- [% v6 Y6 A; K
{
6 R' t" D. u( d- q* R- _1 w if (IsUsingItem(pItemElem))
& v! t# X; R( I3 D; ?/ s, u' A" o {
- K( r! D; X' I/ f* s //这个位置无法放
3 A8 b4 a0 L; I4 D& K3 x0 F* | nDestPos++;& N- }( E$ r% @' L/ o7 F3 `; `% y
}
6 @' ]# b8 T- _9 p( T* a: T3 G2 ` }+ k" ~+ A! }& L* W# m6 {! ?& F6 o
BYTE nSrc = pInvSort->GetItemSrc(i);* W# R" ^3 U( ]$ h9 |8 A) h7 a! H% y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; u% i0 p/ a4 h8 |# v- w5 j C if (pItemElem)' L2 c( b% s& C' O# Q3 A
{8 M% v/ I; t1 d. d
if (IsUsingItem(pItemElem))
' ^# H- R1 h* V7 W: v$ ]/ y {
$ G$ g4 b7 H8 p6 {, f //这个道具无法移动,跳过$ Q8 k0 C1 Y) i7 B2 {0 U! T( R
continue;! A. Y) ~* i, Y u2 v9 M
}- t, K6 k& g8 M0 g5 |
}else{ w& K3 l4 d Q: D, a1 J* m
//空位置 不用动
' e: |6 d3 X3 _ y$ P A continue;
o* a0 a0 P, e" P) x. g, s; P }7 n7 {5 z+ m7 p3 o' E
//////////////////////////////////////////////////////////////////////////
" ]! s2 r) {2 b% t //开始移动% l5 t5 [2 Z# B2 i, I7 u7 Q6 b
if (nSrc == nDestPos)) p% h# [# z- p# ~" a
{1 R, j5 {0 D y. k; b3 w
//原地不动
' v- ]" D! s! L: b: ~# W I nDestPos++;9 U9 X0 Z; r9 u. o% F# h
continue;( q/ q6 s/ A% ?) m3 ~$ K
}
9 m: t6 Q( w S: K1 M6 \" K' S pInvSort->MoveItem(i,nDestPos);. {6 k1 C" N" e7 H- [2 e0 M4 T( A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 a) [/ ?$ C' `' d1 l- a( l: ^8 l) F
Sleep(5);
4 U$ k; e0 j0 K# T9 U" n* X A6 `$ k //Error("移动 - %d->%d",nSrc,nDestPos);* O! n8 X$ B# f4 ?1 _3 l% X5 ?
nDestPos++;, m1 w3 @9 V/ R8 ~0 c. F# q
}
. ^; l# J) O8 {1 V5 f' A //取第一个元素的信息
4 H9 V$ W5 O1 a$ R6 Z2 o9 U. O /*: ~! h& K* `4 ~. z: X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 g" k8 Q3 N% _8 e3 n- {
{1 @- e* g/ l% R- u2 `
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ t$ H' `& F6 d. |9 z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 N- Y, c7 P& G8 V) C4 L) m8 ]
}
0 b9 ?! m' L4 h3 `/ t& f */. L$ w& a3 p: n( P4 i
//////////////////////////////////////////////////////////////////////////
: g! ~+ Q6 [- H0 f. U: H5 }1 s" m4 Z break;
6 S/ D( P3 p; q4 x- }# @ }, Z% r1 V- U7 q2 q6 ~% [& ^1 I _
}
5 @+ S% a* o, v- W$ h6 \; z7 F}9 i% H, f3 o& o8 k! G
m_wndMenu.SetVisible(FALSE);
1 b# O+ r* w7 V- P1 X5 I
, M/ M0 C1 z3 J- U7 o--------------------------------------------------------------------------------------------------------
! B y, o, Y% Q% p" z( a7 ]8 R. l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 d) |# i" [0 q! l4 R{
7 Q, r3 i( ~! Q! R8 kBaseMouseCursor();5 p+ g" w o8 _9 X( [8 V
}
1 i2 q, S" |) l+ i6 |' V在其下添加:
+ X4 J5 u" m1 O- V" L6 Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! ^4 s! S! x! L; y% Q
{4 Y: m% S5 \% i% S
m_wndMenu.DeleteAllMenu();2 l" @0 j' C4 U( c: R0 l2 c, L5 ?
m_wndMenu.CreateMenu(this);
7 T1 u2 W3 {% ?9 `" fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 ?* I, `0 V5 M& e0 s6 a) B7 k
: y6 X$ D: Q% `! F5 \! r1 }! ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ s, s. t: g' v. o) X2 v
{
# t2 ` y) O! ^+ _0 s //P以上级别才可以删除所有道具* O: F) J( H9 z% h; z( G7 ?
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* t" c- |) w& w7 E' m [
}/ f4 B4 H$ F' F+ c4 T5 v2 w, v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 p) c+ K6 O, l2 e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( d! W! ~* @+ L# Rm_wndMenu.SetFocus();
. M% D. d7 ?3 j& Y}$ f. o6 e5 p/ o" @
------------------------------------------------------------------------------------------------------------+ L# J: ^. R [3 Q/ v) u
*************************
2 K. T6 y* j2 kWndField.h文件
% l) L) D4 C( e5 x" P*************************
* K* D X! |" N/ T* K1 q搜索:BOOL m_bReport;) |" g- e- w/ Y
其后添加:) u/ X8 h" Q7 w, z" U
CWndMenu m_wndMenu;6 W9 p0 x. Q. L8 z0 p" y: s2 @
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 J( c5 _# E4 u. B/ X. v* W/ g' E
其后添加:' e' o$ u! ]- E. f' z- ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);
' N4 v- m$ S2 u
: }* O) K4 n1 \$ E- H
: u. R: r) O! N/ J5 g |
|