|
|
源文件中_Interface文件夹下WndField.cpp文件
# b, L8 [7 _ }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) S6 i$ K/ u) S- [% s) ]+ d, y$ d7 ^: l6 i
struct sItem
4 e6 S3 v/ r! q; T{; F) p, g ?$ V1 S7 ^
DWORD dwId;
% k4 K8 m; N. B* U: F0 m+ H/ x, s# iDWORD dwKind2;
* r* z8 \4 b0 vDWORD dwItemId;/ R+ Q, s8 j8 Q* I
BYTE nIndex;1 s- q9 H/ Z* M+ d4 P/ m1 H) s7 b
sItem(){
0 q) \# G+ Z- @3 u dwId = dwKind2 = dwItemId = nIndex = 0;
4 M; D7 r# I- d0 T) _0 C$ P}
/ K5 { B c- @7 pbool operator < (const sItem p2)$ E+ D$ P4 ^2 o0 V
{
; Q; m2 Z! M2 C4 T if (dwKind2 == p2.dwKind2)& T: s6 F$ B! L: T2 k
{7 z. J7 u. O& B9 h. \
return dwItemId < p2.dwItemId;
! ]9 Q" V% v( ^$ ~1 V8 j" [' J8 g }else{9 G L! `6 _' e' E
return dwKind2 < p2.dwKind2;
% o7 u+ I$ X8 e1 i" B }
: _; S R& l- z9 H3 B$ Y2 A$ h: t}! C7 b# X! Z! x% M+ I3 R* |2 t
};8 }$ {9 S' g+ C- z* a4 Q1 _
class CInventorySort
. k0 O7 G3 x% P+ O; N{) D4 u" Q8 x& K8 A9 `8 R2 L
public:
! b0 x/ U, Y2 U; ^$ F' l, A" v' N4 bCInventorySort()
& g2 S1 x! s! ]' U{
( z6 _9 P/ W$ W' g0 M8 U m_dwPos = 0;% \* n/ ^; N; v E* M3 x, w" t( n
}
$ i) g, V' _' H1 t8 D3 t* ?7 A7 F~CInventorySort(){}
! u7 Z- }( Z% H# _4 A* N5 qprivate: `/ n. L: D, W7 N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) `* b% n( {7 e) K- T+ T9 }6 G2 tDWORD m_dwPos;4 _7 a M" |3 d- _" y4 W1 H% T
public:
+ [5 k# s( V- Xvoid Add(BYTE nIndex)
! n4 y8 F4 o* w* F{
* t8 w* T( u* l: n if (m_dwPos >= MAX_INVENTORY)
6 J* o) B) p7 { {
! Z2 X3 h" }! x return;
( h) Y( i( b) L8 S- |- B }, N+ w; t, A: f3 a2 E
m_Item[m_dwPos].nIndex = nIndex; _5 Z- s9 i7 s+ z- }) w0 Q7 J! O
m_Item[m_dwPos].dwId = m_dwPos;
- Y2 Q4 |9 c' w9 z; j- O+ n! Z m_dwPos++;- ~8 L# E8 _! B
}$ \, C. P& b! j# w8 ~. W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 ~! M, Q; w& _' H# a
{
9 U* v- I( p$ i) Y for (int i=0;i<MAX_INVENTORY;i++) R' n5 G" X8 x
{$ Y/ b4 F/ h+ R0 t1 J
if (m_Item.dwId == dwId)5 M: D0 L9 T% ]9 ]
{
% c1 h/ c; n4 f w return m_Item.nIndex;
& q5 f9 q8 o/ e3 m3 }7 Z/ w }: [+ q, D c( x1 q# V
}4 F7 `# s0 }9 L' I6 j$ ^0 a; [; W
return 255;
( r- N) y/ O: E2 l% ~$ A}0 G* ?. V- W( F+ ^* B
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ Z$ R% P! ?9 _" K, t# C
{/ z8 |2 u3 ?4 B
BYTE nTmp = 0;
& H/ A6 _& |4 T6 Q- a/ T2 _ bool bDest = false,bSrc = false;) V- x* {" Q3 c9 z1 A
for (int i=0;i<MAX_INVENTORY;i++)
7 e# }, g2 j- z7 _/ v {
0 z4 ~9 h9 O5 N' i- I/ p: x" L5 i if (dwSrcId == m_Item.dwId): K$ T: s) i) K- {5 f4 U8 @, y- U
{
% {- @5 w7 o/ a6 T" W9 C! L1 f //id相等 则 改变对应的dest和src6 c v. u) @; p+ |1 F( _
nTmp = m_Item.nIndex;
; t" u& h2 r, \2 g6 a m_Item.nIndex = dest;
0 W Y, ~ k/ x' O3 W }
& @% n2 f5 o& F: s9 ]. c. S }2 i! y& O" ?7 s+ G8 x
//临时数据保存完毕,交换开始! X: u$ q' W$ q Q4 U
for (int i=0;i<MAX_INVENTORY;i++)% R' h- u0 _6 |/ a; x0 v
{6 \" f; N+ y! [3 w& @! ]
if (dest == m_Item.nIndex)
* Q9 ]9 Z# g" i/ N1 o& _ {( R6 ^) y- I+ x8 }& H: g! y- C
//id相等 则 改变对应的dest和src
4 ^! X; [8 M3 ?' i% O: q& T m_Item.nIndex = nTmp;6 M! a ^5 o* e* t" _
}
2 v- `+ Q' ^% h7 H% c }
3 F, N# o0 ? \$ G! A% m! Y" A}: X" l4 D" A h; p6 l
};
- o9 ~" g& p. w( `& W( Y- u-------------------------------------------------------------------------8 r6 q, q. E/ C7 G0 _& p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ {3 u4 q6 Q' ]搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; B4 w5 ~ x' I( z7 d. _! v% V. I O紧靠其上添加:
5 w# F* b. {2 Z% uif( pWndBase == &m_wndMenu )
4 K8 L& E. {" C ^# b: W{+ [$ }: r( H7 Z7 z" c% {
switch( nID )5 c* P' c5 }% b; |
{
$ g, R7 p+ U g/ y: { case 2:, R( L) l4 F+ y, A
{% ^ p/ ]0 {- e& @' N
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' Y) e `- _! J* J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), Z% y% o. a" ~
{: \8 l# u' e5 G- {' M: x) R3 J
break;
- y' A6 G- L5 R6 U& j' T2 ?+ Q# g: f } v# p$ J* R- _3 h% w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); n: z I& x8 P |) v
{
# F1 N' W% O9 k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 l# `9 @8 w7 n1 L$ I if( !pItemElem )+ ~ j2 d$ ~9 p) e0 C0 A
continue;; n( p% J5 ` |4 v+ p/ j
if(pItemElem->GetExtra() > 0)8 K3 Q) r5 Q4 j4 B& i
continue;7 S: \ k ]! z+ R u) @
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
t& e: a: y6 x* r continue;$ p& z, |' @4 s% F. M
if( g_pPlayer->IsUsing( pItemElem ) )' V; ?) ]0 G; t4 i# J3 d; a) p
continue;
: Z+ k; p2 K+ M% v6 G if( pItemElem->IsUndestructable() == TRUE )! W. h( d9 _* d
{+ Z0 E) B) V% F! p& i6 s
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) Y% z W/ i) ]1 r6 c
continue;, d; K- E R! P( m/ b* }
}% O2 A4 ~# _* U) M: l
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 ?3 n. D( Y; ~. G7 b' `
}
4 |# r3 `7 L% q' b! f9 H7 C* T% E' @ break;
* |7 L" P$ q. p2 ]' r9 x }
2 P. \ K/ [9 c) F! c3 F case 1:0 h! F0 c- O6 Q' u$ J
{# s% T5 z, L8 h' D* l
//整理背包3 d/ m" I' X$ d {- B+ t
//////////////////////////////////////////////////////////////////////////5 o* r) X2 M1 C1 n# y) y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 A; x9 j9 q# G9 |) y8 x0 O //////////////////////////////////////////////////////////////////////////8 x% T5 y2 G: G! l
//////////////////////////////////////////////////////////////////////////, F( H7 j! k- r( J
CInventorySort* pInvSort = new CInventorySort;" J+ O/ q. f/ f. z
vector <sItem> vItem;
# n( f/ z/ O7 @7 w9 _; X vItem.resize(MAX_INVENTORY);//初始化大小
7 X4 n& Q- {# ?# r0 K' } //////////////////////////////////////////////////////////////////////////
4 ~( }5 X# P o u% c //填充数据9 f6 G6 S- h: D
for (int i=0;i<MAX_INVENTORY;i++)
: n8 b; b& u0 E {
6 A/ l/ F; b5 J( k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- j: J1 G: M+ w1 J6 v; P& A a
if (!pItemElem)
8 U. w" b! z9 C. _1 c( j {
+ C+ V! T' `3 g2 F0 k vItem.dwKind2 = 0xffffffff;3 q/ E, ^; D( P
vItem.dwItemId = 0xffffffff;
7 U# j {; U; \, E% q1 k vItem.nIndex = i;( H% f; ]' J( I8 r4 u% x
}else {4 T' x8 j- w& Y b, z$ M( m7 ~
ItemProp* pProp = pItemElem->GetProp();& x5 v; J4 n4 b6 J" f
vItem.dwKind2 = pProp->dwItemKind2;
- F! T1 b! J: z2 w vItem.dwItemId = pItemElem->m_dwItemId;6 |, r/ f$ N6 y$ V, y7 h' Y: x
vItem.nIndex = i;
, H7 k: p) c# A8 o3 D: b: M) ? }
9 _& i& E5 d2 I3 P //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( C6 ~. o6 C" u2 F4 X0 |
}/ b7 h p4 c+ a
//////////////////////////////////////////////////////////////////////////& }- p4 O* s7 O2 ?' y1 V3 f7 T
sort(vItem.begin(),vItem.end());//排序" L9 L" X, p, q, F- i2 u# w
//////////////////////////////////////////////////////////////////////////1 D9 T# f( a6 q* @! q& K
//交换' s9 j( ]7 g/ u
for (size_t i=0;i<vItem.size();i++) I9 i! s5 o) x* G2 h
{' u' o7 j% ?1 e; @* B9 [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 P+ S/ _- p3 X% G% O pInvSort->Add(vItem.nIndex);3 | b2 j0 A7 g' B
}
& i- Q; L- E, v6 u: p$ ]# z- D! T* o BYTE nDestPos = 0;
8 Z, A* j% A4 a& V! T for (int i=0;i<MAX_INVENTORY;i++)
: L1 _ R, ]! n3 Z b {% @; h9 |, C7 P8 |+ s6 M) E) @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 J0 Q* ?* C) U7 O# M/ t
if (pItemElem)
) R% H4 W4 @! r3 p: ? {7 W6 O6 ^6 P, k3 z) H0 o* ?
if (IsUsingItem(pItemElem))" h' E# J" B* `' ?( M0 t
{+ I6 c5 k, H! o
//这个位置无法放
/ g) _4 Q' F1 } Q- b nDestPos++;; p4 m& f* T+ D: d% A
}+ I" O) d3 D. p% ~; c! `3 Y
}- U' {0 R) c9 k* [+ v7 _
BYTE nSrc = pInvSort->GetItemSrc(i);' D: ~; T% _& P& A% C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% `+ w, k' X/ ~$ O8 h1 ~
if (pItemElem)7 T" l9 Z3 }- t- x( |
{8 a& C5 L2 \% m3 R! p1 E6 ~! \
if (IsUsingItem(pItemElem))
9 b4 G8 X2 w2 L' O5 w2 [8 U( l {
9 W: s& G2 P* e; f4 B4 C //这个道具无法移动,跳过
/ V2 l! S/ V! ?: C) Q# a continue;( \& N- d2 k! c/ K! G% b' a4 S% C
}! ^9 H9 v, J6 O: e
}else{
8 P. Q/ y* P( s _9 z1 Y E //空位置 不用动
6 W5 _; }* v' `7 R8 H( d continue;' e. X' E( b( \- N* D4 f
}3 q" _' ~7 h9 ]! d. Y
//////////////////////////////////////////////////////////////////////////5 U, a7 i0 ]/ h' {: v
//开始移动
8 |! e2 U! M# j8 I7 M if (nSrc == nDestPos)9 a$ A. Y6 c; p
{( U+ `1 Z& D1 x! k: s; n% U
//原地不动, O, e [) v) I9 e2 S+ }
nDestPos++;9 @' R2 t# i: V5 R
continue;
: Y7 \5 E5 d* B( | }7 a% A4 t/ o% w$ e: \
pInvSort->MoveItem(i,nDestPos);
( n, e2 z8 i3 t* \% k Z6 | g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; X% z! M; a; J; O# k( S; P Sleep(5);$ S% c# F. T2 O
//Error("移动 - %d->%d",nSrc,nDestPos);8 C5 d% w; y o! \* u1 x" _4 [
nDestPos++;7 O2 f$ [" R9 A6 Q. i3 u$ g) [
}2 H/ Z+ `6 M) x/ O3 Z
//取第一个元素的信息, s% @3 o! a6 f* D7 b1 Y1 o
/*6 v+ ^" J1 \& ~. s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* W, |" |3 V9 w8 W { X6 r7 q- _; ]4 z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 q0 x! d5 M/ [- K. J) g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* k+ I2 b! H, n" ^' g$ |6 s2 c$ f) q3 B
}2 B) d5 u5 V' l5 L# |/ _: U+ D$ _+ o
*/) k* R u7 g, b5 l( u) H/ p
//////////////////////////////////////////////////////////////////////////2 A" O# ]3 u9 n
break;
* o/ q; o, k3 @+ b4 o1 G5 A, C. w }. F! Y+ }. ^+ I" N7 P4 H
}
! ^1 G6 n8 m( U6 _9 q5 W}
( ^4 ~8 L( L% U* N c' s$ N" @/ Om_wndMenu.SetVisible(FALSE);
: L+ h. `4 [: {9 o4 e$ |! y$ U9 D8 k2 y+ c: w$ R: ^- S! y2 c* c- R
--------------------------------------------------------------------------------------------------------
4 x4 E: t& F* `+ u! g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 Y# K, @6 P, M5 _{7 T: ~( m% t W+ W1 T
BaseMouseCursor();; k2 J* X) k2 O* x5 |
}+ [- D6 f7 Z1 l! b" W3 ?$ O
在其下添加:
3 f; z: ?1 s5 B _% @ d' ?5 l6 }void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 F I! m, L) ?& _' m{
& U8 N( l& B2 X3 w& V" Gm_wndMenu.DeleteAllMenu();
C! q7 @6 x5 p2 ~% g2 Zm_wndMenu.CreateMenu(this);
7 t* w; y* R* D3 ?m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: Q& _8 r9 x5 A9 n4 P
" Y, p- d: t& O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 k/ T! M9 m( b7 Q7 H
{9 x1 b& v9 C. n9 C3 a2 ^- m3 S
//P以上级别才可以删除所有道具) Y4 m8 J# }- Z1 w: l. p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 E7 |( k) U/ R! w
}
( L, ~: S4 _+ b A, k0 Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ \' w/ ?% f+ W2 F( s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' H0 M/ e2 m! {" Z- P3 A: S9 B
m_wndMenu.SetFocus();+ w, D5 s1 k( r: ^8 g2 D
}
1 X, l& O8 |% R A7 O------------------------------------------------------------------------------------------------------------: |3 Y7 m5 x: @4 f) ^
*************************
# V& H8 @2 c' DWndField.h文件3 d8 D% ? H2 C6 W# [3 L9 C P0 v
*************************
2 _; P% r, b t! a( w B/ F9 A搜索:BOOL m_bReport;! V, U8 q+ [$ u$ [
其后添加:
+ r/ _* R5 @! i& a4 O/ L1 B {! ?CWndMenu m_wndMenu;
7 K( M3 N( u" i& q. I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); w0 w1 v4 p& f4 g e7 {5 O
其后添加:, D2 {1 y7 n( B8 l4 @5 J0 Z
virtual void OnRButtonUp(UINT nFlags, CPoint point); ^6 t$ P! }% d4 L" x
- B' C& o/ j* o+ n/ N. c! ^9 v
5 t0 p# H2 E- \0 f, h: r |
|