|
|
源文件中_Interface文件夹下WndField.cpp文件
3 U6 Y6 C7 R! L! S" d( J搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 n# @/ r! Z- L# c% o% B' U8 h3 ^5 N
) L! S1 `/ D4 P W/ G( Z6 mstruct sItem6 t$ W" q0 X7 s+ |
{
1 Y* g) v) s1 P7 O7 i+ b) IDWORD dwId;0 Q+ E/ ]6 j3 F% D
DWORD dwKind2;9 b( |5 c6 m; y G2 r# i9 S6 n) X
DWORD dwItemId;
s7 F( L: j( I! c, r( {$ \BYTE nIndex;& d* b$ J) d5 d( e/ c( v3 ~ e e
sItem(){( a. O6 N! v( M! I* E5 x
dwId = dwKind2 = dwItemId = nIndex = 0;% J! I& L) ~: C/ t$ w! @
}
3 Q9 z1 _1 a% @, U, ^8 ^bool operator < (const sItem p2)
9 g- Q# N" k1 H3 U: W, h{
4 |" n5 h- T0 c5 r* _6 a( Q& ` if (dwKind2 == p2.dwKind2)0 M) k( O$ x% F0 v/ {2 R1 o4 D* u
{/ z2 `. R; I9 F! ^8 l: F7 J, ^
return dwItemId < p2.dwItemId;
: O2 c3 H1 ~. { E }else{. [1 E! T x! }; L+ I
return dwKind2 < p2.dwKind2;5 T, ~% E9 @' q$ I1 l* }
}
- V8 C, \9 N4 o/ u% d}
i3 a& I: w {" B$ \' I};. J! F |) w' ^- O0 q7 ?
class CInventorySort
! K! G& `4 U& V- w{. N' |6 d: a ?( z1 W& {/ y: J! P
public:
" T% |; }& ~8 X' e/ l; ~/ O- s) o9 GCInventorySort(); v7 H5 `, S- _4 o% L4 M' m, d
{% \/ U R7 Y) G) [0 ~
m_dwPos = 0;
; B" t$ @/ U" ^, {}+ I) S( E' |1 l8 S D
~CInventorySort(){}
3 v7 I2 N0 T1 I k. cprivate: {6 c$ C* {9 ?# m4 U" f i0 M" X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- U' l0 f' p6 L! V0 i; I$ _DWORD m_dwPos;
; @( D1 ? _+ t" E, Bpublic:
) }1 i$ {% c6 b @0 N0 }void Add(BYTE nIndex)! `, o2 t6 H$ y# O
{# B2 Z1 B4 [! c# a" X" Q7 N! j: k
if (m_dwPos >= MAX_INVENTORY)8 p, l1 Y5 @2 Z1 e$ Z, w/ X
{+ Q' Z& J1 y2 A' g
return;
: ?6 ^0 W& f. r c- E; [9 j$ Y }+ B$ b5 R# N9 W. y- I# E
m_Item[m_dwPos].nIndex = nIndex;7 t- B( U/ ^+ p3 f( t8 c
m_Item[m_dwPos].dwId = m_dwPos;
6 G3 Z/ Q- \& F- `% X5 n7 X m_dwPos++;" D* A) d& v' a7 e! R
}
& B4 o0 K& e( u1 I2 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, s$ Y# A* ~$ a: g) A; H. C) Q4 ^/ P- ^
{
2 L# G5 K1 F: ?2 ^ for (int i=0;i<MAX_INVENTORY;i++)9 R/ y! @6 P4 K' ]/ i9 U
{
& N& k/ y) i' J- M' f( y9 W if (m_Item.dwId == dwId)$ y4 n1 e5 I& R" d9 C- A/ g& \
{3 ^1 Z- V+ L; B j
return m_Item.nIndex; K- m/ W( Q5 z+ Y
}
, |5 h2 I2 q9 G6 ^( l0 B3 }! S- |/ W }- S, M- j9 q6 Y6 Q9 u
return 255;- D, y" l" M5 Q4 V" d
}7 [% O+ O+ p0 w7 q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& K! D, e4 Q9 W2 y" O
{ q$ Y; \. [1 Z9 F$ D' O
BYTE nTmp = 0;% o5 I# h$ Z8 C6 Q# s3 p
bool bDest = false,bSrc = false;$ a; M7 W5 T# U% k2 T% L1 b* j
for (int i=0;i<MAX_INVENTORY;i++)
& h+ U" ^. @) X! V1 W8 l$ H5 p {& c8 R/ D$ X% |" y+ W
if (dwSrcId == m_Item.dwId)9 Z6 G7 R5 U8 V/ A) `
{
& W% b0 O( J* U //id相等 则 改变对应的dest和src
. a# m7 S. r6 g1 ]: {: G+ d- n nTmp = m_Item.nIndex;! @) Z# B$ Y; [. F
m_Item.nIndex = dest;9 Z! r( D6 }# S2 k2 a4 }1 U
}: y X) m: Y, v
}
; G# ~4 J# V# _' l //临时数据保存完毕,交换开始9 t6 X$ T, y1 `6 W8 X
for (int i=0;i<MAX_INVENTORY;i++)
( W0 m6 I* v+ d0 G {. |+ L& E4 [ i7 o) ?7 J4 v: `
if (dest == m_Item.nIndex)* h8 |- Q; c! d
{
7 s% s9 w% ~ {9 n4 ] //id相等 则 改变对应的dest和src9 w6 h+ W- t% d" }
m_Item.nIndex = nTmp;' p7 d- L7 ~1 ]6 n R
}6 `% N. ^6 H0 @/ h
}& n$ K, z5 ~2 A( C& R1 Y, b
}
2 c! Y8 y; d8 j' m7 ~};) _ m1 p/ ?7 K0 R
-------------------------------------------------------------------------
4 }( Y0 ?. }; O$ c# G: m! _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" ]& b. n, i% H* @- o5 p0 r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 |1 _" |$ U! L# q. {1 b
紧靠其上添加:$ R" j5 E! y( k
if( pWndBase == &m_wndMenu )
4 [4 i+ ]- Q- ?# i( e{ O8 J4 N2 J% |
switch( nID )/ r4 r2 F' d" U% { q0 c* u C. {
{
( B6 n) Y; U2 E) V3 p. ]6 V case 2:2 t, i& X5 j* W3 O$ R- c5 D( F
{3 e9 P9 F/ C* e8 i! }- C. c
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ Z: }% g% h" D# [* { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! w' i" }8 P: S
{
& ]' ?, x3 D- P break;: x: U5 h3 E/ T( v% _
}
9 B7 B \. \5 I; z; d9 f0 G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( x! y! t2 n; g! ]4 i4 m {: a: F1 H6 M/ g+ y3 G/ p, m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 H% W) U4 A1 _4 {
if( !pItemElem )
4 X& A* }* { ~' U; I6 R continue;! n( ?; `: l$ z/ L# @( y; J
if(pItemElem->GetExtra() > 0)& I' U- Q, \2 @7 t
continue;! z* `" A4 D% ~! S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% }: r) C8 g8 @( Z3 ` continue;
j" P9 w2 L2 E+ q8 O$ y* ? if( g_pPlayer->IsUsing( pItemElem ) )0 r: W1 N: H* n
continue;
4 j; L; d( I2 V* @ if( pItemElem->IsUndestructable() == TRUE )2 W: A' @* z6 Z7 m7 D
{
9 E8 c' Y* c' s+ ~7 C: i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ y- P5 Z. @3 X continue;
0 B! x$ m5 k [! h0 l% ` }! {9 `5 u# t' p4 R9 ]
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 P1 ?- L6 I9 Y% x" u8 ]9 ]
} r$ J1 N: y8 t) n8 k
break;
4 z1 T: j. b; g0 b* [ }
" t4 W: K5 b5 h6 A% o" O- O case 1:
( \% ^: c" p8 m2 y$ j Z# W0 @' {( }$ o {8 T: H3 \+ q7 X( `% E+ P" \9 G
//整理背包
1 [3 P3 f1 |3 N7 C //////////////////////////////////////////////////////////////////////////
( g4 M( T" ~9 o: S! X6 |, H4 O' F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 j6 t) ]4 V" X) b4 ]& E# a% l //////////////////////////////////////////////////////////////////////////
9 v H/ l2 k+ W //////////////////////////////////////////////////////////////////////////
8 d5 p% u$ @* p CInventorySort* pInvSort = new CInventorySort;/ s3 S: ~4 y: z3 {1 z
vector <sItem> vItem;: x; m( X6 ~: x
vItem.resize(MAX_INVENTORY);//初始化大小
3 _( ^& a1 A; B //////////////////////////////////////////////////////////////////////////; d, s+ @! Y: R+ {6 U" B
//填充数据& I1 d; u' x/ j: n1 E
for (int i=0;i<MAX_INVENTORY;i++)" A, @3 C- x& ?# c' |9 L# G4 m% E3 z
{" b7 `/ y2 }, Q$ S1 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& u* I# }9 W" q3 y4 @) `6 y) X if (!pItemElem)
, D8 L0 E1 W, y' O; _9 a: m {
1 a2 r8 x' v1 u+ m vItem.dwKind2 = 0xffffffff;
: }$ E3 m5 b& s) k0 V vItem.dwItemId = 0xffffffff;
8 `: i7 Y8 r/ G' i vItem.nIndex = i;# _; {# J* A M6 `
}else {
V. z( u7 Z6 V8 t& {, J0 J ItemProp* pProp = pItemElem->GetProp();7 m( ~1 t# Q' [
vItem.dwKind2 = pProp->dwItemKind2;
# l1 B2 I0 @6 |5 `- z/ c1 ^ vItem.dwItemId = pItemElem->m_dwItemId;
0 V4 f( u' ]7 @9 m5 B& R5 V vItem.nIndex = i;) U6 B& e; \# T" V0 P
}# B8 L9 _7 Y. ~9 w6 v0 J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
J4 ? d% X! M3 A, B3 H }
& \* W* s6 T( D$ Y$ W4 p9 ~) G //////////////////////////////////////////////////////////////////////////3 v4 p; n5 ~. E0 ^% y0 P
sort(vItem.begin(),vItem.end());//排序
' K- @- l. I, Z! G+ v //////////////////////////////////////////////////////////////////////////9 I" ?7 f! } ~8 A
//交换
/ [! |; D2 C# f* q for (size_t i=0;i<vItem.size();i++): k- Q0 o' v2 x1 o. X; k
{
$ ?. L: ] G) T# B. T3 P: ? //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, P1 ]' k6 D) p3 m pInvSort->Add(vItem.nIndex);
! j$ N- Y4 Q" G6 p5 P2 R- g }
- f1 H R% H9 H' Y BYTE nDestPos = 0;
7 J, {$ y# U6 w% l8 ~2 w for (int i=0;i<MAX_INVENTORY;i++)" c4 {; Z ~# K. T5 N
{
8 L( M) r0 ]$ t- [: P( p) Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 } g$ f+ K7 N+ [ @
if (pItemElem)5 t/ t& ]2 G& n' V! l3 ]
{, e. g5 k# h& a
if (IsUsingItem(pItemElem))
$ S1 T: [; i+ q {% G. Z7 F# W6 a, \" l% u
//这个位置无法放5 A; I+ F m0 D6 z5 j' M
nDestPos++;& o& [; E; W+ i% Z! [
}
) g* g! @0 O. v4 v% Y& M' F }
9 v/ m" C4 J- Q+ _ BYTE nSrc = pInvSort->GetItemSrc(i);# A1 R# ?& `* M3 |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 V' W, } n" q& }- K0 P: I
if (pItemElem)+ j* L4 c1 l o
{
/ r! j2 ]. x l. y if (IsUsingItem(pItemElem))
. O0 s, ?7 @$ s {5 [* V& t0 d1 @
//这个道具无法移动,跳过/ |' P& e( n7 M2 S7 N$ |* L- a
continue;
+ r$ Y0 j$ p9 R( t+ f2 j0 k }; u- \, [# G h$ _# N2 O
}else{+ c0 \; }/ `; q* u" \( h
//空位置 不用动
$ b# P: H' A# m3 L) ?3 h( ~. N# } continue;
2 t$ `" l, |, c2 [9 ~, B. E. K7 i# A }; H# F' B4 F" k; h5 Z
//////////////////////////////////////////////////////////////////////////
2 U+ ~5 b: J; c7 g3 g# h //开始移动
* x R' S" [, I; x; K7 p- y: E9 A if (nSrc == nDestPos)% V6 U( r- k3 N7 ?, r6 H- E# d
{) A5 `8 o1 ~1 P, e- U
//原地不动8 o+ U5 r5 d6 i3 ~5 E
nDestPos++;
* @& \2 z: V" i* a$ y8 z0 h @0 V/ g continue;" N. ~6 q$ R+ @! U+ R; E
}1 f! l8 t- T2 I/ m
pInvSort->MoveItem(i,nDestPos);
7 n3 g9 o T$ t4 y, C* \3 G g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. E: l& K3 u1 O! h* k: M1 n Sleep(5);
$ B$ N% q' r2 L4 r //Error("移动 - %d->%d",nSrc,nDestPos);6 J0 w4 w( E% \7 K( r! t: W! C# J
nDestPos++;
& v' r2 _) G0 P }# p }) ?* b3 A8 i4 k9 S7 H
//取第一个元素的信息
+ w# K6 u4 ]4 T9 P8 v9 X /*9 }# y/ J! u( @: M; w0 X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 h% X$ b# I% R+ o' p) u/ j4 L
{
8 d- v2 J/ l( [2 n2 q4 ?3 L( ` Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, `+ F8 o0 U: _& D
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 |+ Q- L x( r& { }3 ]9 e0 ^/ I/ ^- B# [3 B5 x
*/4 i) g* ^* c# a
//////////////////////////////////////////////////////////////////////////
0 ]4 H. m: v' ~0 L8 Q break;
7 h( B. y3 I& v5 w }
7 s: b: D/ A1 H; I/ A }
J- d' X4 Z: a7 ? Y9 i}
( L4 Z; F; r3 \) T+ a% Dm_wndMenu.SetVisible(FALSE);9 }6 p" M8 I; z+ n3 i
; z( \8 I+ B8 z. a- z
--------------------------------------------------------------------------------------------------------
1 i; ^, y: W, o- i7 F4 q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 d! g% v6 M" N. G{" _3 U: i" P* m \
BaseMouseCursor(); j/ d! [1 L* F8 a& }2 [
}- [" h- [2 X2 U
在其下添加:( U' F: i |% E* D/ ?# Y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! x( r! ^! [1 h4 V2 q
{
% B _+ c9 V7 N5 ~. ?5 I zm_wndMenu.DeleteAllMenu();1 z2 Y8 [4 \ @% Z2 X* T+ e& [
m_wndMenu.CreateMenu(this);7 w5 E, b/ z" l
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* T0 S2 O. S8 b7 h: ]+ {" D- b* r$ F$ W: g( n. F
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" `) W2 h: {+ T8 C5 ?
{
g' ?" A* N# z/ \4 r7 M0 [# @ //P以上级别才可以删除所有道具
' ~& \/ l; E$ x4 n+ U0 a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 ]9 f! X5 G: D% ~' ^2 r# P2 D
}& }4 _2 T* b8 @( z$ a$ \
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# o$ _0 k9 P# Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' w ^) O9 v2 K
m_wndMenu.SetFocus();2 L5 t/ d, T4 C. L( P! V
}& [: R' x- Q% ~+ W
------------------------------------------------------------------------------------------------------------
8 H- w% x0 n; n*************************) i/ F/ q. e- R/ p+ ^+ K
WndField.h文件
) N3 X! K2 c, r' T# X6 O* N*************************3 D) b' j: G3 c+ w% c. \( c
搜索:BOOL m_bReport;
- D& I1 F6 K9 F- ~0 B其后添加:/ F% h. f6 Q4 K% i) z+ l/ g
CWndMenu m_wndMenu;0 m+ W: v3 v% J; w8 {9 D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, r; t8 ^% o' u; `其后添加:. m' N6 R: K9 T) i }0 F# P
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 L9 F6 K. ?& x2 `/ v' n
5 r |+ C- x f9 x9 H7 |5 K- P( ]- ]5 _' O: g5 M. _- c9 `
|
|