|
|
源文件中_Interface文件夹下WndField.cpp文件- W. M" `. }; t: `+ a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). e9 D5 t. I9 Y
6 g8 m C/ S y" g, s6 ^$ z5 Lstruct sItem
. m" x3 K( M% T{
5 ?) L+ T3 m$ B/ I$ S2 v& qDWORD dwId;" M, r* D* c4 ^5 c, u6 B! s6 Q
DWORD dwKind2;" X: X1 U' Q. }- j; Y
DWORD dwItemId;
) V& J" S8 h" n2 cBYTE nIndex;* G7 O8 s' ?' S( ~7 N
sItem(){
; d) V' `7 \ E+ T dwId = dwKind2 = dwItemId = nIndex = 0;( r6 J& K* N- }. U1 _1 `
}
. r1 B( ?) x( t' kbool operator < (const sItem p2)
7 ~( D) [2 T' `0 B, k& |$ V{% C) g/ U; D. U* J* U1 E( L
if (dwKind2 == p2.dwKind2)
$ p0 @$ l/ O5 y. i {
' s$ [4 X2 v0 { return dwItemId < p2.dwItemId;
) `( m# d H1 [7 _8 \7 Q! J }else{& K+ x/ `3 |/ p# L5 l; u) |+ E
return dwKind2 < p2.dwKind2;
# |- X& c7 W1 @" K6 u0 y$ D }
8 J) u. S5 Z1 D8 ~8 [3 k/ h3 G! U7 D}9 \) o" j1 e* Z: R
}; z" o* B3 T- P! |# Q
class CInventorySort
9 E8 x m. N9 s. {{3 X- C% ?- [, `1 l9 ?9 ^8 D" @# R
public:
( p* T3 r/ r2 \2 W0 bCInventorySort()
: ?9 D+ A' [" j& Y3 O( ?& u' g$ ?{4 l! k" S- r: F6 d- p0 B
m_dwPos = 0;
7 `7 v( q0 Q* e9 R# w}0 K' R" U3 O$ ?9 r E4 V
~CInventorySort(){}
* e: I7 ^8 R v" M9 Z2 Lprivate:& G; C& b: J. ^( _5 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# f& I" A7 O2 m _7 q) E) c
DWORD m_dwPos;# d/ g# b { J1 W
public:
# K( L1 _8 a+ k$ X8 f1 S1 E+ Evoid Add(BYTE nIndex)
7 ~2 [9 Z' Q% w{
: q* V8 [* H7 s' V if (m_dwPos >= MAX_INVENTORY) O4 e, j) X1 S# A$ X1 N) U$ j
{
1 x, m+ p8 R$ x return;
/ P9 p3 _+ `! c. \' \ ^0 v }/ ^' H. n( i2 Z( w6 e. A
m_Item[m_dwPos].nIndex = nIndex;
& o8 F0 B0 A6 ?8 q m_Item[m_dwPos].dwId = m_dwPos;" y d: ]" }4 ~) b& M2 K
m_dwPos++;
1 e3 R3 y0 ?+ L7 o5 j}
C" O; I, y3 _" a8 {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 z' I% w9 l" B9 Y
{
7 [) d' K9 X, a for (int i=0;i<MAX_INVENTORY;i++)
- N0 N, {+ o; ~7 p5 G* M# {3 Z {
" k* c2 Y& L) P if (m_Item.dwId == dwId)4 _/ p7 u) W4 k2 z9 [
{% q3 a5 s1 c, S0 k( O6 U
return m_Item.nIndex;
: U. x# |" Z/ M; T) S' u1 v" H }" Z2 r6 p( `: G+ Q! Q4 ^9 K0 Z
}+ `- g; Z6 J& U7 {/ A0 N! c
return 255;! F' n! Q8 O7 Y" ^) ?" J
}
* N* M% x8 o9 d! Z' a- _ Q% i" [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 m! |6 T6 _! D1 M
{4 i% `# |) f2 A4 \% ]
BYTE nTmp = 0;% a6 d- [ B5 S( U. T- E
bool bDest = false,bSrc = false;8 [1 P1 H+ J# E* P
for (int i=0;i<MAX_INVENTORY;i++)+ ~6 b# U {% H4 n8 n' h" E9 u
{: c$ [/ [8 O0 n
if (dwSrcId == m_Item.dwId)
8 V" w5 O! t- y |* H' S {
+ _9 U e+ p" C4 o! Y //id相等 则 改变对应的dest和src, e+ X5 B9 ~- N7 v& ?
nTmp = m_Item.nIndex;
. K* M- o% ?$ [# x m_Item.nIndex = dest;
' _' \! e( {0 n+ N: a, @ }
; V3 F- F( d/ q }
: q- A* |( g6 J F //临时数据保存完毕,交换开始
. @- y p# \9 C _ for (int i=0;i<MAX_INVENTORY;i++)
6 A' a9 J" t; Y {
* z! v" g* u4 J2 t; k* L! b5 G if (dest == m_Item.nIndex)
9 b- ^2 g5 f/ R8 l' @ {
: Y* y$ S, i7 u, R, A //id相等 则 改变对应的dest和src
$ Z/ S4 f* V7 g6 N4 B2 u2 v- X! D m_Item.nIndex = nTmp;* `+ L2 ?* J4 h ]: N Z' \
}5 A4 O, p& B; v S+ H' ?1 t- s8 }
}" S$ Y7 R/ R7 k, n5 b
}) {* D* E' |, w$ f
};4 w; _$ r4 z$ d' U/ \/ D
-------------------------------------------------------------------------+ }% c! p0 F' j* I F1 {9 ~/ d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* z x5 j4 G+ ~" h, O. t+ @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 s% M# s3 W8 N; p- ?$ q
紧靠其上添加:4 e6 x, e. s, n5 D( `4 E1 a! J9 ]
if( pWndBase == &m_wndMenu )+ C: Y/ t, _5 D& A& ^
{' c" T& T. N0 ~- r2 F0 g0 D
switch( nID )
1 d4 G1 z O$ D) H, A, m# ~ {4 q& s* \; I2 O$ Z
case 2:
6 D4 I/ |; o0 c" P1 w( E D {6 _! A: K/ r1 ^- t
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, ]- g; G% r( u8 N$ Z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 Q* }! J% @6 O" R3 T9 r" m {! o% W5 L6 J: G7 D: M
break;& x+ H2 x; Z6 d5 @$ \
}- C" p; v* q; j/ K- Q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 a; f' W2 Q: q/ \+ } {7 q6 n( h% A, ^6 u! l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 _5 l+ l$ h& j' o
if( !pItemElem ): V3 I7 d2 F3 s8 u h+ W# H( w
continue;* Z. g) [* l5 b+ T' D
if(pItemElem->GetExtra() > 0)
! n# s# f- Z- v! o continue;
4 J& }1 j$ L% e, o: {$ @; e. { if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 T/ i8 k7 ~! ~% X/ U5 s; Z
continue;
( F: v" S- M' F7 [, a) I if( g_pPlayer->IsUsing( pItemElem ) )( X% P2 @/ A* D, J k1 ^
continue;/ j' t: Y& y( |
if( pItemElem->IsUndestructable() == TRUE )
" X: H) B. q* v( a/ b {! c/ L+ t ]3 x" P$ i4 W$ j
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! `3 ~; f& B$ w4 h continue;4 V; R. d/ v2 }* L* B
}2 D u6 g$ i' `' V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' S+ ?0 p6 i- t2 A/ j
}
( V# z; g, c, w9 J; w+ r, l break;2 n& A; o5 W+ d! H
}1 x& o# a: B* e8 b
case 1:5 \/ k' s! t2 I7 o Y- Z2 ^2 x4 O
{
( v; j$ n- t" l' J6 R //整理背包
4 s) T l& Y! E* L! x //////////////////////////////////////////////////////////////////////////# S( E8 r+ N0 O; x+ m! g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 | j+ W0 l3 R5 o U/ z ////////////////////////////////////////////////////////////////////////// z- P' e, s" [$ B+ E$ T1 O1 f
//////////////////////////////////////////////////////////////////////////5 X: y* c$ A0 s
CInventorySort* pInvSort = new CInventorySort;
) i+ s1 H5 r1 i5 x2 M vector <sItem> vItem;' J$ F, s" ^$ V) r. G; U- F
vItem.resize(MAX_INVENTORY);//初始化大小) ?2 g& M+ I( j
//////////////////////////////////////////////////////////////////////////
2 ^# _8 t, e, N! p2 E% s6 w6 M, G9 h& | //填充数据: @, N) r) V; M: G2 d4 n U' ?8 O
for (int i=0;i<MAX_INVENTORY;i++)
4 F) g9 t V- w$ l {
1 O$ t1 V% A+ N# R# t5 N9 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 C8 |1 d) |% o
if (!pItemElem)# n% h! B M5 u. ~* f+ k& F4 t
{3 E1 \- t3 u8 k8 ~1 V
vItem.dwKind2 = 0xffffffff;
2 r" ^; b4 n" J+ F0 y vItem.dwItemId = 0xffffffff;6 }, W! Z3 h+ [; c1 K9 Y
vItem.nIndex = i;
9 t" f& Y# u+ z: K( l }else {+ o8 ~: V* b, C" N! Q
ItemProp* pProp = pItemElem->GetProp();
% a9 {8 p: _& Q vItem.dwKind2 = pProp->dwItemKind2;
; w1 [! ^, ]1 M7 R/ {3 Z) r% \ vItem.dwItemId = pItemElem->m_dwItemId;
5 X$ t8 T2 _: H5 G- i: T vItem.nIndex = i;/ S7 K! ]% Q! L" b" D/ i6 p
}9 f% Q+ v9 l' _2 H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 E+ {( \- V. w h9 w/ u E- I }* U5 _, E9 @& c/ n! f
//////////////////////////////////////////////////////////////////////////
* M3 B" p3 ]: R) a' W, u sort(vItem.begin(),vItem.end());//排序
/ j( Y0 q9 H8 f/ y" ~- | //////////////////////////////////////////////////////////////////////////; ]' I9 Q/ `1 j4 C& `
//交换
% j$ N% o5 ~, ?0 V for (size_t i=0;i<vItem.size();i++): y- u+ y% M- P B8 {3 q
{
1 G& c8 U5 |9 q! N- @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 N% e: R% a y8 Z \' [; Q/ ~
pInvSort->Add(vItem.nIndex);4 B. r5 B2 [, [7 }8 k# {
}; z( t! f& D4 f
BYTE nDestPos = 0;1 g9 u Y: j; K" w7 [
for (int i=0;i<MAX_INVENTORY;i++): }# t9 _6 i# P
{
- R. z: ~$ R2 I( f; Z$ t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' B/ H6 l% }$ x/ a if (pItemElem)0 g) t- ~7 N8 K# F9 o1 }' t: u% j$ z( Z
{1 T* Y& L/ e. t4 g
if (IsUsingItem(pItemElem))
) H/ ^# F! c8 G9 b) S7 d" d {
9 X- _4 w; F# b# V. E7 `* K3 a4 L1 J //这个位置无法放1 s: h) P, G& K. b: |( h$ E
nDestPos++;
& p2 `( j2 j. J. {5 F }
0 G3 S6 N, Y' |2 v2 G }
" J% b. W1 i$ `$ s( l/ x BYTE nSrc = pInvSort->GetItemSrc(i);
, e' e' z( x: A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 z! |- v- c& c/ e% [8 V8 ?! v if (pItemElem)
' H! ]: p5 K4 p/ Y# n2 b- ?/ r4 X {
# a, v+ G, B, B, g if (IsUsingItem(pItemElem))
6 g, S% q4 N! A+ H7 ` {
! F! S, Z# z% l* k7 h; Q //这个道具无法移动,跳过 d% g$ b! l/ ]9 Q, g
continue;4 v# \8 {2 p5 Z0 P) Z( ?! V8 g3 u
} w, Z7 o# p, J0 D7 [- J
}else{
3 B, y& R/ k6 \' x //空位置 不用动
/ `% ?" w$ |$ p9 t& l: F0 G( o' D continue;
P+ E+ m9 W5 g, ^ ^+ L }/ S. t8 K5 {% I! O0 r
//////////////////////////////////////////////////////////////////////////- V' y) c( X6 C6 z2 u1 \. M) f
//开始移动1 Q/ v/ p) [8 y; C, F( O( I5 M# ]
if (nSrc == nDestPos)
9 M7 v1 [8 q% H {
: O( ]* |5 {( ~$ U, c0 n //原地不动; R4 {/ f" j! e
nDestPos++;
h4 t+ Y. z3 n% Y/ {% H continue;2 v/ J: t$ C+ V8 `$ y. _
}; H2 o) q0 e" S* Y# R+ x% S
pInvSort->MoveItem(i,nDestPos);
, F8 d$ X. a# T g_DPlay.SendMoveItem(0,nSrc,nDestPos); M0 L: G7 F' N: ]/ C0 @& [: u
Sleep(5);0 Y" U, d3 P0 h8 R
//Error("移动 - %d->%d",nSrc,nDestPos);
: ]/ M( K" t# d9 @) q nDestPos++;9 v9 R* N0 o9 y7 U# b
}
6 _+ m' Q0 O% P; A //取第一个元素的信息
' O$ e+ ], }: W9 `1 M. _/ a* R /*
% y( |( K2 i8 K( W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 E0 s- O9 I5 [# u7 }& `. Y8 }
{ o+ [1 h& q- k- o ?; @( Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; Y6 Z; U( q3 b( J g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 z: f1 c$ ]* Z
}$ J" x, N! I2 M0 d
*/
4 i0 t$ k2 c! k6 B6 r, h! q7 a //////////////////////////////////////////////////////////////////////////
4 o, B) h: w; y8 f8 [ break;
( @ h2 `1 r) \: T: L }
' m2 @. Y1 P. c' o9 \8 q: j" @ }
' j. C2 A# k5 O; x3 D4 G3 z* p}
2 e; l7 O- t$ Em_wndMenu.SetVisible(FALSE);
9 Z- j0 s$ t4 L
# Q. I. ^ N, y- e--------------------------------------------------------------------------------------------------------8 ]& B0 V% |* D ~" y1 K& s. Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 j# `) o( m5 Z7 F# G5 k{
, p% G/ o7 v# c' s+ u: g3 P+ i% ^BaseMouseCursor();# a" Z! z3 Q, ~1 e7 Z* [8 p: o
}' k6 I# E$ S2 d, r9 [0 w
在其下添加:$ [9 B0 K3 t2 b8 B* p* a8 U
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 e6 y' u. B' u, V, K6 o
{& e/ m$ D1 V2 J2 d8 d
m_wndMenu.DeleteAllMenu();! Q( Z! E" l7 T9 l# {3 Q# l
m_wndMenu.CreateMenu(this);
2 w- C/ l( N* X3 C7 @# Y2 vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 q4 g6 G6 N' d
/ ~# Q. ~; |' N) Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 i- O2 N8 b9 z/ N
{2 `2 N% D/ R* T6 R% W T) G
//P以上级别才可以删除所有道具
5 | M$ F# d2 c% B2 M# T m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- X/ s" p; c4 ^# j
}
+ |' I) \1 S' }" d$ Mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* u3 E/ `7 L! q7 L
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* o* F8 K# h) w$ {m_wndMenu.SetFocus();; h( M$ j( \ q, I( r& p3 a0 i
}
+ z8 |" I( J& H+ Q( U------------------------------------------------------------------------------------------------------------
! \# h U8 ]8 z*************************$ X1 i9 w$ x$ n% X: e) M
WndField.h文件
# D9 u" |7 e" a' h. Y*************************5 R4 t* l `. R, ^5 X
搜索:BOOL m_bReport;
6 s( P9 e$ k5 w9 U1 _其后添加:& n! g( R5 W3 v
CWndMenu m_wndMenu;
( e D2 H G* v) k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) _# O8 R/ J: e; E# j
其后添加:, g$ w+ ?+ r1 ~+ s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 ^1 h2 c+ O2 A1 V: Z$ `) q; l+ h' r! d' Z: V1 ^
4 @( v6 V5 Q. w3 L+ \ |
|