|
|
源文件中_Interface文件夹下WndField.cpp文件
- B& E1 o! `/ e% k) u7 s0 i2 k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 X! T% W* K [0 n0 S
4 S* V. E6 B+ S1 ?, Y2 n" ]struct sItem* T% e3 E1 }3 f% D
{
. ` f# ~1 W+ } ` lDWORD dwId;5 P# T" E1 \4 F$ O4 Z5 j9 l% H
DWORD dwKind2;
2 v+ u1 [, w( O/ K( N! d( eDWORD dwItemId;3 {/ t; s9 i" B- J8 J
BYTE nIndex;
" b3 d0 T& v3 H, M a. c: y% FsItem(){6 Z! F5 Z2 ?8 O, A
dwId = dwKind2 = dwItemId = nIndex = 0;
% m+ K) k' O! L$ G& _, `9 X, j4 F}# V* z3 C; T% j2 l' o- |. o
bool operator < (const sItem p2)' c k: s9 P2 R& W' i0 @
{4 }- F7 q( x, p3 ^8 G! D5 k- z& `% j
if (dwKind2 == p2.dwKind2)
# F# a/ v5 l* g {
9 s" J4 X/ u0 _# e: I return dwItemId < p2.dwItemId;7 r! `' K" {1 w5 n
}else{. D1 r3 L8 Z; @4 b- _9 J
return dwKind2 < p2.dwKind2;
" _2 ]* D* a* I x- u. F/ e }& ^$ c# c4 b. L# T9 C/ _
}
5 y7 X6 x0 R! P( t) I9 s5 A};
( B7 f8 P6 S7 i% {5 sclass CInventorySort
0 S+ G9 e- K9 ?; X# ]3 E3 }{* U/ ]" I0 B2 V, N/ g
public:4 I! z6 o* x$ y/ o: I
CInventorySort()6 ?) f. u; a* ~' N$ O: a4 z2 c" Z `
{" h- `8 @2 S+ k( |9 h0 ]0 ~
m_dwPos = 0;, N- i# U5 Q2 e# ]
}2 E" `; T }: B% q; G
~CInventorySort(){}, O C9 ?! [4 M/ f
private:1 c$ |& Z- k) @1 N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 X) H( O, s) C- U- P
DWORD m_dwPos;
7 w0 }; A1 ^5 w% ]& `( @7 Ypublic:! t& h8 R$ t* B u# [$ u) m2 u+ R; o
void Add(BYTE nIndex)% ` A \' \. Z! q5 L$ ~6 n1 s; U
{; X' K" R* {. \, H4 C+ F5 G
if (m_dwPos >= MAX_INVENTORY)- C+ d; R3 W1 o! {8 v/ E! ~9 ?+ }; M% Z
{: ?# [1 I% e8 |, M$ p2 L2 k
return;5 v- Q/ E: ~8 y, d% I
}9 T2 I) g7 h, `
m_Item[m_dwPos].nIndex = nIndex;0 I5 M4 }/ J1 G# a
m_Item[m_dwPos].dwId = m_dwPos;( F$ n1 n5 `8 Y/ E
m_dwPos++;' I: m, F( z9 C# p: G4 D
}
# L3 o, W8 {: ]: @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: F! y0 f' s; Z9 i" ?{3 d( r5 E. k0 [/ ^9 i
for (int i=0;i<MAX_INVENTORY;i++)5 w" Z! \5 V) A' _4 ^7 B* N9 j
{% L3 `# G- h9 u$ j' U: l; r
if (m_Item.dwId == dwId)
; E+ @9 @# T9 i |- {9 K4 B7 s! } {
' y1 c+ _* X. g+ Y$ M' }9 O m return m_Item.nIndex; r" Z/ V+ A7 S" x9 X
}3 G: K/ B3 U- i1 L5 L* ~
}
7 b- }! g) v4 _3 R return 255;
" F) q' y" X$ R5 S) w2 {( b) `}
# b, Z; e p" B2 R, xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) q7 D+ d8 F9 v
{
6 G" ~# y9 h+ t) i BYTE nTmp = 0;" H. ?" }- N% w( r
bool bDest = false,bSrc = false;
2 [; D+ u+ N# x6 \4 P5 u4 g. ]2 G for (int i=0;i<MAX_INVENTORY;i++)$ x! |8 Q% l5 v# L1 a6 K: X$ k
{$ N, v6 N: t9 G2 k8 [
if (dwSrcId == m_Item.dwId)6 F) R# l- q; R$ ^
{
4 Y1 A' j& W- Z5 K4 o //id相等 则 改变对应的dest和src
$ w5 B4 T) M" z' g2 a nTmp = m_Item.nIndex;7 z' s1 I/ U3 z2 m4 I: d! z8 B
m_Item.nIndex = dest;
: _& a2 n+ N; L1 H. ^$ [ }
6 O, `0 q$ v8 r' B. w$ S }. m8 f ~ V, z% i
//临时数据保存完毕,交换开始( z7 A" p2 Q3 s* ]4 |* c7 o
for (int i=0;i<MAX_INVENTORY;i++)
% J1 `. h+ q5 k" s2 E M {
- K% T% F0 w' q. B1 D0 i if (dest == m_Item.nIndex)* N: n) G( N9 o5 d0 U! W
{ U2 p6 }6 ?$ u: r1 [- s) r
//id相等 则 改变对应的dest和src6 e# |* }: p- w, B6 |$ [; H7 g
m_Item.nIndex = nTmp;
/ j& C- b; j+ D. z }& r% k, i* w0 z/ u
}
1 W+ V4 J3 p$ x% }0 N( ?}, n# q+ K0 |% K% S
};5 M8 z; x/ U s0 u( n" \% Q; n; R. U
-------------------------------------------------------------------------
8 \1 ^ l6 X4 t* M8 R% U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 y6 h( V" [, D" S: C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& g U: W) w: c* V% N2 m# F
紧靠其上添加:
7 X& \3 ]7 C$ |- O+ h5 t# {' R4 a3 aif( pWndBase == &m_wndMenu )" p# h L% U7 |5 A0 m0 t
{
1 ?: g( L3 H% U4 o: ?9 u. i switch( nID )5 }2 i7 ?/ l6 ]: |/ {: \ [3 d& ~
{
5 \$ _+ i0 h2 Q8 ~ N case 2: {; t8 D+ G5 Q! t M
{
& i l5 z9 r7 b2 v [, s+ p: w# M //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( O/ ^$ s2 s$ D( E. M X/ Z6 E
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 W) x" V) p6 i" J5 J {2 c! U2 v( f+ \+ g" m* S
break;7 R0 O8 ], a- Z" @" |9 l9 W+ ~
}
. I" q8 B& D0 q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& ~0 X5 t9 j) i6 n4 Q( n {7 O% y. t" x* b4 L3 ~: G D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
D4 A' ]! m) H, }9 W1 M if( !pItemElem )! |; M; y0 M1 s6 Q* x& {
continue;
- J( S5 c' b% S Y6 }# ?2 t if(pItemElem->GetExtra() > 0)" S0 m2 [1 g% f6 g) P
continue;
, {/ p. W% A( P: I$ _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " n) b5 j e6 x2 n" M5 Z1 Z
continue;' ~0 m ~8 C/ Q9 Z- m0 k/ X
if( g_pPlayer->IsUsing( pItemElem ) )
& n6 m$ s0 ]1 Q6 I+ ^0 T continue;
$ [" b% l0 W2 r" U! | if( pItemElem->IsUndestructable() == TRUE )4 _* g# Y2 B( M' X4 J ^' E7 j2 }0 _
{. g: m3 Z- i3 s ?) U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) j2 g! N( T# `0 I, R ^ continue;) H6 w' T9 ~! }5 T* M' G
}
: C, }, {8 C! b4 y% J( G, q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" k) x* \( d0 P: {9 \% I; ~
}! I& {+ x/ `& P6 Y( H- ]/ }
break;+ `0 C9 H+ u: c4 I, t$ Y
}% \* p3 [ R) |" P- ^# X
case 1:# `4 a: ]; |0 M1 L, D! \" x% t4 J) X' G
{; E( z- ~2 W$ _! r4 R
//整理背包5 t+ O6 ^: P7 n! W3 d9 J( k
//////////////////////////////////////////////////////////////////////////
, |9 F% Q# D5 g8 Q t; ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 M' @& }) o, n5 R9 t# I) u/ l _ //////////////////////////////////////////////////////////////////////////
& R' a% w, ~" R //////////////////////////////////////////////////////////////////////////8 \& X6 u3 H# `' J8 o7 ]
CInventorySort* pInvSort = new CInventorySort;
/ h1 U7 C# s5 v vector <sItem> vItem;
5 M. x8 Y' m9 {8 H% c vItem.resize(MAX_INVENTORY);//初始化大小
" O: k( q# L9 f4 P, V. [" J //////////////////////////////////////////////////////////////////////////
* D, ^9 |/ j) L: \% c+ u //填充数据7 k t: l( \' p0 z0 n7 L' f
for (int i=0;i<MAX_INVENTORY;i++)& B& w7 f {9 R& a' q4 a. g3 c
{. q1 P# p8 X' _3 u( ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 W* ^0 L9 Q* w' L7 {5 p
if (!pItemElem) D) S! c" t' x9 m2 q& Q4 m( M
{
- G! q+ D& @. d6 ? y$ Q/ t$ ^4 | vItem.dwKind2 = 0xffffffff;
8 {# j0 j8 L! l* a. I( ?2 K" M vItem.dwItemId = 0xffffffff;
9 L3 A; k: i5 [7 |2 R vItem.nIndex = i;$ q0 W9 ~2 x! ^0 M+ r5 f
}else {% Y9 \* @" _4 _4 t/ \
ItemProp* pProp = pItemElem->GetProp();6 u. e- d/ {, e( ^' A7 J- [6 J, c0 E
vItem.dwKind2 = pProp->dwItemKind2;
3 |' {2 r+ n% y+ f* T: { vItem.dwItemId = pItemElem->m_dwItemId;
! O7 n. J/ A0 } vItem.nIndex = i;
/ ~5 G! d+ r7 E2 ~" v }
. }5 j6 b h- x, _$ b* F y7 Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 P5 ~* z, |9 L- I; g0 u& H }
/ K9 b6 h, }, y //////////////////////////////////////////////////////////////////////////
6 m, ^" h W* @/ A. b sort(vItem.begin(),vItem.end());//排序
) }6 E; I0 a+ J8 }% A0 M //////////////////////////////////////////////////////////////////////////
& Y0 s) X8 _. T4 x //交换
$ m( V$ Q5 @- v0 \2 I for (size_t i=0;i<vItem.size();i++)
$ w! M2 j$ W0 U; k& ?' B {
# p4 o! i1 M( L0 @3 |7 v( r7 a //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 N" G/ ^8 z( C0 A pInvSort->Add(vItem.nIndex);
' l! R; }# P, Q' Y; x- q* t q }
6 ^( h( N9 z6 n: f; v BYTE nDestPos = 0;
7 y5 R* y7 [- J for (int i=0;i<MAX_INVENTORY;i++)
7 |: E/ ~! \5 I6 ]2 d _ {
+ U. P4 Y. d' T+ B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 u# Q: X! a6 c2 q$ P9 Z
if (pItemElem)
* ~9 h4 Q4 k) A* Z* E3 r0 l& I {) x# k+ D! ?" u# u- B
if (IsUsingItem(pItemElem))
2 U/ \7 q% j+ `1 f0 ? {
3 J# o, A, ?2 U //这个位置无法放* `* v% X t ] \/ j- h
nDestPos++;
3 _* a9 z4 ]! J- { d/ u( w7 i% M }9 b& V0 ]: ]2 }0 u
}
& S4 m$ E6 a4 n BYTE nSrc = pInvSort->GetItemSrc(i);
) v' \3 g* b7 R/ W2 x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 }# B& u- U$ j) m! L
if (pItemElem)
# g7 P. w% z4 p: y {& G! s) p" g3 S# \% f# O. g+ y
if (IsUsingItem(pItemElem))2 b% a* q5 ]: _' N( P' ?" l- X
{+ e4 U! D) ?# g6 ]' {& g8 n+ `2 q! h
//这个道具无法移动,跳过: c" v% V4 U) L- h; O* e
continue;
" }% A* J$ Q" |# K( U }
" Z- H3 f. p3 U' l( v4 ] }else{
4 W: f$ f6 ~ ?3 N6 A3 b //空位置 不用动
6 M# s5 K& V& n! f- W" p continue;- Y2 W3 y, y7 [+ y/ p5 j4 K
}
+ R, _: J/ p8 O7 d% ]( M$ t- r+ c //////////////////////////////////////////////////////////////////////////- e/ q+ {3 I4 N+ F9 N7 m1 A O
//开始移动
/ c0 P. _) C9 J r! c if (nSrc == nDestPos)
: K. g# G8 B& c# g3 [& A: ~* I {7 j/ s$ u+ s4 t+ ]
//原地不动3 k7 L5 u8 a4 J' u. w
nDestPos++;
: G1 Y, F7 i" P% [ J- |* c x( d4 [ continue;
" S* F) H5 z+ w! g% l }
2 P' I2 A0 s$ ~8 L" l pInvSort->MoveItem(i,nDestPos);$ X3 r- t. O. U$ V5 `/ ]
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% q; N/ D! m& d: d- O! H
Sleep(5);
8 G* H4 B4 {% G' n, T1 m //Error("移动 - %d->%d",nSrc,nDestPos);. b+ j$ e' {, y/ R+ ~7 x" P2 o
nDestPos++;
. _9 n) n8 W# e3 R" Y }8 [1 l/ K* i5 ~0 T/ w) B
//取第一个元素的信息& Z( n4 |, m- d9 |6 l0 E1 h
/*
$ p7 I' a$ A) l) M0 x) ?! u if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 s+ i& D: G: c
{9 e5 [1 r; i# D7 W/ E
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, v0 D) {1 e" Z% s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( E) B( b% \/ S+ c/ X* Q }
7 V5 Q& g& s' T1 p# d */6 E/ T7 V- O$ m) e& }# v
//////////////////////////////////////////////////////////////////////////- v3 \: r0 Q @! ?
break;* c6 r; v& B \9 Z# N1 \/ B# M( v
}
/ l! K1 `! ?! X% T } # ?: `: |7 v5 S. ?
}
0 C# F' D+ j' bm_wndMenu.SetVisible(FALSE);
! h0 Y% I, \7 j1 |2 _& j7 m* z1 o- M- N! A
--------------------------------------------------------------------------------------------------------
! j9 h8 X r6 K搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' Q1 N/ {' W; A
{
* V4 p6 R+ [) |: v, }BaseMouseCursor();1 X! p9 B- ?/ `) Z; c5 A& H
}
# l$ Y p U, E6 ?* m4 ^在其下添加:+ l1 t5 v5 U4 k; q' Q6 ? S( l/ }2 \( M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ H0 m7 T/ i- e v{! F+ I2 l1 e+ K$ K+ f4 C
m_wndMenu.DeleteAllMenu(); x; V( Q4 v& S+ {7 w; z
m_wndMenu.CreateMenu(this);
7 D& d: m8 y% km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* z! i7 M& B/ I! m
$ H3 B, `% V$ n2 x% i, d5 u! @) ?if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 p4 F2 t A; R8 @; Z- @
{
) y% L) q/ b; |/ r //P以上级别才可以删除所有道具; \$ Y- e3 d# @2 S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( B3 Q7 t# r7 i* ?
}
/ N3 l H7 z0 ]' g- tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
J$ Z w2 w0 u2 Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 R( m% [/ ^3 c
m_wndMenu.SetFocus();
$ O+ W; d+ w+ G/ r' {# {0 |}/ M3 e0 U4 l2 O8 G: H) S
------------------------------------------------------------------------------------------------------------" x; i$ k6 C y* E$ g5 w
*************************% v2 [: ^# U0 i' B; x' T
WndField.h文件
; B4 b- C6 X' |) x*************************" w L9 t L2 E i3 `8 V# V1 a) V! R
搜索:BOOL m_bReport;- ^5 N. v1 q( ^
其后添加:
. ~+ k5 z L) g! G! w" ]8 kCWndMenu m_wndMenu;
# S/ |. A) g* `3 M$ J6 p7 q( Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) }# t1 {: b( F9 J) L0 f1 _( V1 L其后添加:- }0 g5 u2 t- A( m
virtual void OnRButtonUp(UINT nFlags, CPoint point);
' N* T" `) f1 _- t3 j& e4 G7 n7 o5 Y) ]% h) D
6 W/ R8 V9 k) l' X# d9 l# l
|
|