|
|
源文件中_Interface文件夹下WndField.cpp文件' Y( R0 M) _1 [; G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 c3 e4 j- v8 s% I) f" e& i8 F( Y& l/ E1 `; r* N$ G+ b
struct sItem9 d, @- {% {9 ]6 u6 Y
{" G$ C% i" u3 t) S# u$ {
DWORD dwId;7 b9 H2 Z" \/ B8 l& m) c
DWORD dwKind2;" v% j7 P/ ~0 w4 ?& [( u
DWORD dwItemId;
$ \. D5 |4 D9 n! l2 _) uBYTE nIndex;
4 a. f" T% ^0 h+ [sItem(){
% t- z2 B6 m; A dwId = dwKind2 = dwItemId = nIndex = 0;
4 K. z, C6 X$ K% B}
# l* _9 E; k* L/ P' _bool operator < (const sItem p2)7 p+ Z; f! u' C r6 Q$ |- m7 k
{
! O5 p* m. j. d1 U$ p if (dwKind2 == p2.dwKind2); ~$ C" W( N) g9 _
{
# @* G; r. k6 k" N. _$ t- n3 K return dwItemId < p2.dwItemId;! M5 }5 e# z7 x
}else{" {9 A( u6 D: y# n# r) y' B
return dwKind2 < p2.dwKind2;# h" y4 @1 S' D6 a2 P8 d. U
}; I: a( M5 S) Q% o0 e
}
W$ S6 C# X1 }* r5 j};
4 b7 e# m: N( mclass CInventorySort6 i' c! K; e: x" I/ L$ i4 \
{
- q, ~" e7 `( x' mpublic:
2 F! X+ q+ R" rCInventorySort()
& l4 b3 N S3 @4 t( F" _4 o{. c3 w5 l m& }" I# w6 i: E! `
m_dwPos = 0;6 C! P* L2 m8 D% u4 Z. N3 i
}9 g7 h! [( G- e7 P8 ~
~CInventorySort(){}3 s) C9 t$ p- A' E
private:
) D# C0 R) x/ i1 B6 VsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( S; j8 z5 b: \4 }DWORD m_dwPos;) N( s/ _- \# z- Z, i0 w" k5 x. i
public:
( C# S% |4 O6 l ~void Add(BYTE nIndex)
: G T# A( m% y4 u4 T X/ Q2 }! a{& }5 O2 m+ w4 N
if (m_dwPos >= MAX_INVENTORY)
1 U. p5 }; | r8 V; o% J- T4 f# `* ~% L {
7 [/ O" q6 c Z+ J. |$ E% B return;
Z; r' q2 n3 M/ H1 m }
1 D+ j- I. x' c$ x! m# z. Z m_Item[m_dwPos].nIndex = nIndex;
6 C- L Z' f, i" W% | m_Item[m_dwPos].dwId = m_dwPos;
( a. K) f2 Y* U3 i. W) I: H [ m_dwPos++;
$ ]$ d8 c! Y$ @1 a1 I}% k& Y9 s h1 d$ J9 r0 U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 o+ M5 q( F9 u{# D) N3 Y& X: x5 g$ I* {$ x
for (int i=0;i<MAX_INVENTORY;i++)+ Z% K, b" p1 R& E
{
9 c5 X3 A* m8 v7 W: |) _$ W if (m_Item.dwId == dwId)2 x+ U1 d" B1 R9 |" e
{* @6 q3 |/ o, g p6 s
return m_Item.nIndex;
- X$ C; Q! N Z1 A1 c }4 b5 T3 Z2 s; F/ Q4 F# `
}: O5 R0 i3 Z; [ Z
return 255;
- c( ?8 |* L" b8 e5 h/ z) P}. N" X) W- q% M2 o) _# ]
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. V- \( c b J" S{4 G# K! n8 ]$ o4 N* R
BYTE nTmp = 0;( L ?: F/ ?& W+ k5 P
bool bDest = false,bSrc = false;% g) {) { D; P/ v d
for (int i=0;i<MAX_INVENTORY;i++)
$ M1 n+ u% m: |/ z @0 I8 z ?+ I7 \ {
4 p; L: e8 r4 i- K; Z1 C2 _( q if (dwSrcId == m_Item.dwId)2 t5 F$ w, e1 Z5 t1 n
{
" [; @1 c, k3 n. B% W0 Y* A //id相等 则 改变对应的dest和src6 p( m8 J4 n9 u; ^6 \+ ~ ~, N" Y
nTmp = m_Item.nIndex;% i0 |) [. j4 O! e
m_Item.nIndex = dest;: j. U6 L: h# l. w
}6 L3 `, l$ n9 I' A& u. [' Z* a0 s
}) S% Z9 ]6 T9 K) t
//临时数据保存完毕,交换开始 a9 y, m4 N& Y3 t' s% N; }! [
for (int i=0;i<MAX_INVENTORY;i++)) Y9 W6 h9 P- \( y, t- O8 K2 s
{
5 W4 D* a. E' W5 e if (dest == m_Item.nIndex)! T3 o& A4 C% t# l: ?( f' z
{
, A) y/ Q5 y; |9 k U; ~ //id相等 则 改变对应的dest和src( G! ~! X F* \2 e
m_Item.nIndex = nTmp;
: l* i: ?' T. C }$ {% y1 J' h. x g" L/ R x- O' B
}" A" D$ s% R* A, Z
}
& Q( G2 u; @( U8 V- A& D" [9 f};2 X; P3 E% s4 y d) H+ n# L
-------------------------------------------------------------------------: Q, F/ u# b, q! _% G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& T% }7 b& v7 W1 L& g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 u! B1 l9 _ p" j' ^) ^
紧靠其上添加:' u6 F6 s* v" N' p+ E% V4 v
if( pWndBase == &m_wndMenu ); I7 e- R. a/ _) E
{
! c$ r. b: u% n9 _5 x switch( nID )
5 p- e: v* @* T9 {4 t9 ?/ N {
. A3 W( U$ j8 U* k9 ?6 h case 2:% p( |1 b" e1 b
{
1 z( w. h7 p& V' L. s6 L; {& c //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 N! ` z* N5 N+ A: g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! v! P) [- r1 P; W {
2 e& T' j+ l6 R% z# F d' K; b1 {/ d break;
; w- Q$ e' E4 H" s* r, f }
) N, g, j4 b3 P3 \; R3 N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). k9 P! H6 O* \. g9 t' f( c7 o
{" A" E% ]5 h" _- V4 V/ g; R D5 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- Z5 d7 |7 _7 I1 s- z% |& h4 m
if( !pItemElem )/ S z9 y+ s0 |
continue;: P3 ?6 [5 Y3 T1 i& h
if(pItemElem->GetExtra() > 0), \+ d" ?/ O! I q. w: _/ e
continue;2 S& g: i/ k! t! H# Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( Z8 A% H5 T& k6 e7 {1 o, ?
continue;$ K0 D4 e$ G" I0 @
if( g_pPlayer->IsUsing( pItemElem ) )0 R9 w9 L( [; A: B- d
continue;* C, T I: Z. l
if( pItemElem->IsUndestructable() == TRUE )1 l* h1 C; H! N* @; [- z: c
{8 m$ B% s' d! i# G
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- n! f A, m. c2 d: F; n p' x continue;
! ~ ?$ W |# W, ` }8 P) c* y; [' N+ }# x4 u L6 N
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 {8 x2 h1 N( K+ W" {' O. D }* C F% Y; M4 O) w
break;& ^- F: h3 {( e! e5 j
}
3 v! W+ [& l" t1 A% M5 @3 n case 1:
! L3 [, F) S' g" e% i$ a, M {
& K O5 N e( B2 i9 Z# c/ } //整理背包
- H% x0 j, N- t2 E //////////////////////////////////////////////////////////////////////////
# O/ T. E: T# v8 h* }6 [" m //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. B- q- u% K& p% @ //////////////////////////////////////////////////////////////////////////% b/ Y& f' [6 A" I! `( W+ B% u# `
//////////////////////////////////////////////////////////////////////////
- o+ s, G: }; H7 e CInventorySort* pInvSort = new CInventorySort;2 M7 N9 {& {3 d- Q6 m9 r
vector <sItem> vItem;
1 p2 h5 A! |; U2 k! I! B. r5 F" f vItem.resize(MAX_INVENTORY);//初始化大小
6 y2 g5 \9 M. o/ `" W( b' Q //////////////////////////////////////////////////////////////////////////
) J+ F& F$ m4 H6 t7 k) k W) [ //填充数据. H" ~2 \8 D. a3 [0 a; I7 Q
for (int i=0;i<MAX_INVENTORY;i++)
! O, J! z9 u) d( [" G {
4 u( X" Q _/ i7 X g- s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) \7 P+ |6 t0 |
if (!pItemElem)
! G* |" `$ k/ f1 l. ` {0 `+ i- u* o! Q. r: ]
vItem.dwKind2 = 0xffffffff;
& h: T( p0 f& P: t vItem.dwItemId = 0xffffffff;
; m; {3 a8 E. ]4 ^ vItem.nIndex = i;1 d5 l, ^ T5 L& u; l
}else {
# d7 _4 ]( R2 C v: }; i ItemProp* pProp = pItemElem->GetProp();
4 O! g* w) a: A6 k vItem.dwKind2 = pProp->dwItemKind2;' x( U4 ]7 F( C, H& F
vItem.dwItemId = pItemElem->m_dwItemId;
# X# F. j6 |1 p1 b- r vItem.nIndex = i;4 D, Y: Q& W! [. _ d# u1 b* u8 S8 d
}
- t9 b& k: l7 ^& E9 U3 {" Y# C //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& d( Y* I. P# k0 b, [; Q( }( v
}. X! C* T# U( _: z4 {' J
//////////////////////////////////////////////////////////////////////////- f( g. j6 K0 t8 E& S
sort(vItem.begin(),vItem.end());//排序) m1 \, O) {! I0 ?1 @
//////////////////////////////////////////////////////////////////////////
2 ]% y8 ]" ? }: Z( |. K //交换
: j5 j( L! p: O' s9 T4 ^ for (size_t i=0;i<vItem.size();i++)
$ o y( e& l) z {8 h {
, L. |, B8 i. H6 F* C. v //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: I1 V- Y# U, T" q/ G) m1 w pInvSort->Add(vItem.nIndex);- N7 n" S( n# f' |# a) g( K
}( y- A* h. _" t$ k
BYTE nDestPos = 0;+ e" r" T9 L) H. d6 B4 E7 A
for (int i=0;i<MAX_INVENTORY;i++)
0 j1 I- {0 v' m( W {: U* ]9 ~ m8 |8 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& }% _& e$ J0 c M0 f$ k% `
if (pItemElem)
0 V" S9 f, V" m: z' T {
$ `; V8 {! G6 [1 A' _ if (IsUsingItem(pItemElem))
, b( e! C( E6 U, R4 W6 p0 l {' r% H* \" X( ^7 T: H5 t n
//这个位置无法放
% V* y0 u8 p/ a9 Q- S nDestPos++;; j b' i4 q9 y7 i
}
: D& X1 B# ?& \5 m3 K } s. }* u+ [; h- I6 X
BYTE nSrc = pInvSort->GetItemSrc(i); s4 ^/ W+ X" [# w+ H7 j* ?
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 T g& ?/ S+ j$ w9 ~& z if (pItemElem)4 t, V" @3 O4 r7 w2 l( J0 T k
{
3 x0 t( `+ t. X4 g8 X if (IsUsingItem(pItemElem))
5 i7 C! N& H/ F6 k! Q {6 n: N8 `( V5 a. |$ W+ ~% A# }
//这个道具无法移动,跳过' x+ o& o _" J2 z2 Y& t
continue;
, U6 O2 w0 F8 y( D }6 _8 q7 |% l/ C' u. J
}else{
$ Z) _; T. t* J7 A //空位置 不用动
6 i9 P6 E% d( X% G% R( L6 D continue;8 L6 I) k% A7 j
}* \9 x# d2 ]" T) _
//////////////////////////////////////////////////////////////////////////
: g! P/ `6 R% Q3 O0 p8 ] //开始移动* h( @8 m0 Y8 J- u3 P& ]4 t
if (nSrc == nDestPos)
$ `# ], d+ W7 l7 K' i/ A {4 ? O3 W; r+ U5 K
//原地不动2 y0 X* ?* {( f# `8 I
nDestPos++;) P$ v! ?) N8 W! [ y. u3 r
continue;
- P/ p* f. j! z- V# d- I }
1 |9 g9 D4 ?2 B% X pInvSort->MoveItem(i,nDestPos);
1 ?/ R5 Y' Y7 q. \0 a2 e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 e/ ]' X5 E$ a7 y Sleep(5);# u- N3 f& ?4 O, h
//Error("移动 - %d->%d",nSrc,nDestPos);. p1 R' q; S' c3 y
nDestPos++;
( p: Y2 \% g# b$ o$ l3 ~/ Z }
% T* H1 i% e1 W2 h //取第一个元素的信息4 C' T' q2 \1 B$ B4 y3 U
/*
" j5 x/ ?" p4 W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 `$ ~- E- s, Y5 a5 B! u3 G9 Y {
& i0 v. N" h) W& Z1 a3 T Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 [0 u/ Q5 f* `! |7 v( W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- C) D' F A& f; q }
5 a) @0 ?/ t- O/ c9 X */- x7 |' T. W6 q% j
//////////////////////////////////////////////////////////////////////////% w( Y! e$ G6 y, ?0 ^$ h: ^1 d
break;# k' l1 C; e0 J# X' c t
}
$ w% _+ X1 L+ o7 E' J9 z8 k1 M } . v/ i. Y& r7 @/ |8 A' [' M
}( [) u3 a- T' ~: m- p: x, E n
m_wndMenu.SetVisible(FALSE);) x' P9 @- h% w
" x7 e/ l8 N4 k' ~8 h |
--------------------------------------------------------------------------------------------------------" o d" o' u( z% W
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ s! E9 b% Q, s% y8 O: v
{9 ~9 c6 D8 {% e
BaseMouseCursor();
: f4 l/ o- C1 Z0 b6 @}1 K9 t! b: Z B# I' s3 R$ P
在其下添加:
6 ~3 O3 a" x; d& ^7 k9 gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# O$ h+ |8 F+ O+ O5 L
{
5 O0 @4 L5 C5 }; |m_wndMenu.DeleteAllMenu();# h: v- q! ?- R' h! F
m_wndMenu.CreateMenu(this);; L2 ^& q% ~3 Q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ M0 c; N# g% ^. s
8 {* c7 X+ T- k7 Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! U* w# S. p5 g+ S6 s- L+ D
{ i+ e f! E* h/ G) ]# G
//P以上级别才可以删除所有道具2 Z2 O( B+ {3 l& A3 F# {! t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) O: c$ ]2 S G( _- q}
) D! s& y, i7 l( S& ]+ T9 g' ~5 Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 Q, {0 X2 E# `/ P# F& t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 H/ `' _3 s8 h! {. O6 T+ \
m_wndMenu.SetFocus();9 A2 N; [1 g4 Y3 X
}- Y& q+ e4 U# C0 e+ O/ a
------------------------------------------------------------------------------------------------------------
4 J( {/ v9 ]) o4 C( S*************************
' q0 ]+ A& r3 p3 cWndField.h文件6 p- R! s# |3 x2 k+ \1 f/ b
*************************
0 \) N$ c; N3 O搜索:BOOL m_bReport;
& `6 f U d5 ~/ E0 e8 S其后添加:* O" q2 ~5 c8 _. z. ?3 X
CWndMenu m_wndMenu;4 m( i2 S* C/ h3 [) t3 H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 u, X7 `* [' ~% {! i: r
其后添加:4 ~) ^' e! G, s1 R
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) }" G; {* i) Q3 A# w5 ~& Y+ y4 J. f$ p0 v( k2 d! u% j5 |
5 S* B8 F8 r$ @! H
|
|