|
|
源文件中_Interface文件夹下WndField.cpp文件
+ K$ G# |$ q! u# x4 Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) c! W! f. @- C, P# z0 J
: f) j% Y1 r& B! g$ I
struct sItem
7 c" m# _2 ?0 s4 i6 K+ ]* c{
: {6 K# ~' N9 q1 ^7 HDWORD dwId;
; g: F: Y: {5 A( e3 x+ QDWORD dwKind2;
' w9 m a' R- |: G) ~ `9 [- eDWORD dwItemId;! N: S3 F* N7 ^ ~
BYTE nIndex;% A5 M: L4 J* k9 A5 O0 q
sItem(){
+ l0 F6 Y3 z( w% @ f; d dwId = dwKind2 = dwItemId = nIndex = 0;
9 C! G. t1 ~/ l+ X6 C0 v}
6 r! r! a: x( b% H+ obool operator < (const sItem p2)0 g7 T+ Q; { P* d7 O5 u
{, d4 k5 ?9 {8 \
if (dwKind2 == p2.dwKind2)- ?& x0 `) I" g% ]
{- i- [+ L$ }9 U/ Q
return dwItemId < p2.dwItemId;2 r' k# n$ e2 K
}else{# V2 s' V, F, i! b7 p# U6 _
return dwKind2 < p2.dwKind2;
! Y0 T8 E/ A9 ^" ^' l' H& N }2 p9 s8 ^ j/ m* j5 p# T
}5 M& {% a4 A' I- i4 I8 e- j
};
) I1 H/ @9 j. T" C0 s$ yclass CInventorySort. \8 i. p$ n9 u2 x: p- E) m, @4 [ s
{: }2 p# _4 @$ \$ Z8 W9 w
public:3 G. n; I2 C' v- e8 y) w% y- s, j
CInventorySort()+ I( q& U& V. F! Y3 n7 G- D
{$ c1 D2 V: _. K# j, \" Z
m_dwPos = 0;' J* m' v: l4 u" Q* j1 L
}
7 `" P3 w0 K& H% t3 V* C~CInventorySort(){}' J4 ~% X$ G1 L& ~7 y1 L# B. V9 j
private:
% \% G/ H" _, b" X: OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% N/ n% Q" k0 I; [DWORD m_dwPos;9 O4 L4 E" Q0 h/ b+ Q
public:
; x/ y5 n U: x+ {7 T) x, x, ivoid Add(BYTE nIndex)
/ s& }% P9 v: b; p2 _4 \. I3 ~{1 ]% d) T- d4 B- ~4 G" \
if (m_dwPos >= MAX_INVENTORY)
/ n& S* X7 ]& U- ` K8 ~ {5 X4 d+ U. p* Z* c" J
return;! l; @% L/ C" V0 O4 B
}
& w1 A4 n1 @& h( N8 F9 s m_Item[m_dwPos].nIndex = nIndex;2 i+ M x# t: G5 j/ ]
m_Item[m_dwPos].dwId = m_dwPos;6 N ]; s* u0 i
m_dwPos++;0 y& I& H5 d$ a) E- w3 H
}
' I1 A, p# `8 w( N% _1 ~% sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* i. S% Z) V$ A
{
1 w5 J7 a- ]2 } G5 } for (int i=0;i<MAX_INVENTORY;i++)% m: X$ ]0 T) V1 Q4 m1 n9 W
{
0 W( l* G9 X2 @7 j! J if (m_Item.dwId == dwId)! t5 Z: d0 M: G! z; y
{: c& d9 [9 `0 R
return m_Item.nIndex;: L; o3 @, l) I8 r/ l
}
. `0 b+ J5 P5 d. x5 R# t }9 ~$ J! j: Y6 j5 E4 e
return 255;
7 ], w& G: O" }% f. [* h# @}' g% \5 P |, f9 w5 T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" K# w" {0 ]+ f+ Z( a8 ]2 P
{8 [- ?" j! Y/ `' j
BYTE nTmp = 0;3 b% E* d8 s2 c& K9 o5 l0 e5 S% I" Z8 ^
bool bDest = false,bSrc = false;
, n9 {+ m1 A* x- H0 a$ y% J! z) s for (int i=0;i<MAX_INVENTORY;i++)# V" R, d6 o; c0 R$ e
{
( R/ q( k; P3 P" f! {! e if (dwSrcId == m_Item.dwId)
( a" g8 R& p- ^8 I o/ `0 [8 y {
, B" u+ c. ?$ y% H, K //id相等 则 改变对应的dest和src
. c7 {! v2 A! \* ~: R h; ? nTmp = m_Item.nIndex;
3 j5 P6 M F$ v( j t; ~% i m_Item.nIndex = dest;
4 D) m. E: C. ]3 I6 b$ p" N }; P' d$ O' l; D* O2 S4 q
}2 L3 w$ F ?. e+ x4 q- l1 W1 u
//临时数据保存完毕,交换开始
- X* F* Q+ Q: x6 \ S( g for (int i=0;i<MAX_INVENTORY;i++)$ c2 T5 `; k& h/ }# H% n
{
) ?8 u8 s/ c; y' ] if (dest == m_Item.nIndex)* r5 \( g" Q) l( y* E
{; n0 j( O3 I; t, L
//id相等 则 改变对应的dest和src. n! e; L( R# g7 @
m_Item.nIndex = nTmp;
4 F8 e# ?3 E! W+ W6 v6 H }
8 O& y! c* T7 a6 [8 X. F1 e }
- p1 D6 M. ?6 ]) }}) B7 a1 P; _; u7 F1 y0 T
};
1 y( q2 a T" Q. `-------------------------------------------------------------------------
5 m! C) k/ m' ~3 m7 H, |0 L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) o1 @; F4 M. T6 C! e6 a; ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 s" C. n" ?6 b0 x5 M" D
紧靠其上添加:
+ w2 _: L; H" u) f$ V$ X- N: Pif( pWndBase == &m_wndMenu )
6 X7 l) H' y. O; X) u1 N* [3 i# W{
! z% X# i' ?7 S- a! Y switch( nID )
8 Z9 p5 m' I; h( Z% T {
/ C$ w/ X& d# n8 f U( { case 2:4 x9 o" R6 w. f( K6 L1 u* S
{8 L S1 |+ A& J, E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" E) u' x) G \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# D2 `4 p4 s2 y* K% C {
~) m, A2 e5 t) Y! o0 I break;$ e: ]% C; E" S0 e. a1 [
}6 F0 ], E( P( }/ F9 |2 |' {7 Q& _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 r/ v& x; Z6 E {
9 I- m9 j; ^0 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 B4 } N( o7 } if( !pItemElem )- w+ K- b$ T" s! I5 ]0 G( Z% h
continue;" d0 m7 Y; F4 n! {- r0 `
if(pItemElem->GetExtra() > 0)
0 U* P- v) h2 C- k$ v continue;- w0 k ?$ h1 j' ^% I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . U* r1 K" {1 Y! @$ R
continue;
' F/ _8 }2 c; w; ^; a if( g_pPlayer->IsUsing( pItemElem ) )- }, Q9 Q* j" x6 }
continue;; L. n9 H0 I! Y- K h% H
if( pItemElem->IsUndestructable() == TRUE ). k0 [" B, l9 y! X1 y4 W
{
6 y4 y- a. f6 Z' ~! B) V8 Z5 N! Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* U6 ], E9 I, K! X4 K
continue;" ^ i$ W$ ]" b
}
' [5 [0 N' f0 ?& a3 b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 A4 ?: d+ S0 `9 w' n
}1 N0 v% e0 x& B" V( O9 J
break;
, i ~5 j8 a% S }4 t( \& S. W8 M4 M) H+ X p
case 1:
" \# T2 x; o: _3 @; Z {
( N: e/ F6 R& C4 e //整理背包
& ~, a% e5 X5 ?: H% Z6 M; r% M- E# I //////////////////////////////////////////////////////////////////////////( S& h9 ~2 c7 e" \/ j& l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 s- u* D) h- \6 r9 M
//////////////////////////////////////////////////////////////////////////0 [5 k& Q% Z: x1 |: S
//////////////////////////////////////////////////////////////////////////1 n U$ P- I" w5 Y' J# E
CInventorySort* pInvSort = new CInventorySort;
5 A( q( U) k: I- o6 T vector <sItem> vItem;8 w1 t, e9 y6 \: A1 `
vItem.resize(MAX_INVENTORY);//初始化大小
+ R b9 {, x/ k( ? //////////////////////////////////////////////////////////////////////////
6 Y4 {4 j. P3 ]1 Q/ h$ e3 S //填充数据2 d" B# v8 D* J+ r
for (int i=0;i<MAX_INVENTORY;i++)
; x( ^0 G8 p& j {9 W! d+ ?$ |* R3 }2 |9 _, t- y3 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 F. K- @; C# C% N) }; q if (!pItemElem)
! I2 {0 [' J' K6 x- ?% q {% B- J ^, c( N" B- B: o7 H
vItem.dwKind2 = 0xffffffff;' O- l% V- r! j" Q @9 C) Q: t
vItem.dwItemId = 0xffffffff;
) t9 e: N1 P7 j$ u% j6 o$ P1 A vItem.nIndex = i;
2 a4 ?' t5 z X }else {, ^& R( x/ N3 q- [; n" B* h( q' [
ItemProp* pProp = pItemElem->GetProp();, T5 z/ w- V9 I
vItem.dwKind2 = pProp->dwItemKind2;
# Y& C; ?0 C( w6 m vItem.dwItemId = pItemElem->m_dwItemId;
3 q3 c9 o, m4 B- s c1 } vItem.nIndex = i;
) Q: Q5 p! p5 d9 E+ C }. m3 ~7 a* m8 ?( N' j+ k0 b F, v1 L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& S' z7 I6 D7 L }8 f& A. o. Y+ _& n$ K$ g7 ~& V
//////////////////////////////////////////////////////////////////////////
$ S6 \& R$ b! J# I" L sort(vItem.begin(),vItem.end());//排序
3 q& L8 Q7 W. P6 ?( a6 \/ S //////////////////////////////////////////////////////////////////////////
2 n# T+ _1 V6 r; Z //交换" g6 B* v1 b8 d* ?$ G" W
for (size_t i=0;i<vItem.size();i++)
( ~% s2 X3 E: W- t" Y n% G0 r {
1 R5 L7 E* z# M7 v; v% u: ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- m# ?; Y# A6 {2 E
pInvSort->Add(vItem.nIndex);; O- ?) O" I. Q2 u
}
# Z1 b' c! s. ^2 B* f& f BYTE nDestPos = 0;9 q: R& M# ~1 M6 ]
for (int i=0;i<MAX_INVENTORY;i++)
" P7 H2 S- d- i% z {
1 M" v c% a% r; H [& P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 Q0 \0 @) w; ]' d9 T( H/ }
if (pItemElem)& `/ I1 c: a% C' X
{
1 S! F5 Y2 }# d& ^3 `: f2 T/ j if (IsUsingItem(pItemElem))
0 K* ?! K3 M1 k' _. } {
- O* G8 S( g, [$ G. {( A //这个位置无法放
8 O1 W+ \% i/ z5 Q* ~$ L nDestPos++;
* q `7 W3 P+ _ }' H% {: P( ?9 A$ P) e- I% i$ z
}
4 x, R1 T F. a b BYTE nSrc = pInvSort->GetItemSrc(i);& [, d( }* P* a: |0 s9 P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
a8 k+ t' P5 p1 g; \1 ], j if (pItemElem)
) w) b; P# L! ^8 u* n1 l {
* h+ E( j$ }% p- J6 D& N if (IsUsingItem(pItemElem))$ ?% @8 z8 F$ B- e
{ | q( }9 u8 V* [! i
//这个道具无法移动,跳过
! r- i9 u# |& g, k* p. c3 E( Y1 q continue;" `& W; S M. M( t( G1 G
}2 F5 w/ _, g3 u# U1 t9 p" B9 L
}else{
& F" ~4 ~' q' ^6 P! f- ~: V //空位置 不用动
" x5 A9 S3 ^6 c# \9 c7 P7 l& R1 f/ ? continue;; N" a! p' @- F+ w9 I- |# H, L
}" ]: _% D7 w5 s8 y/ m; ^
//////////////////////////////////////////////////////////////////////////
) {0 F, F4 Y9 g9 S9 U" { `9 A //开始移动
2 a% S2 h( |$ c if (nSrc == nDestPos) k8 u3 O( U' K9 D- j2 M
{' n6 b5 t: Z% x) H: |: T) x1 B
//原地不动! N, N4 P- }+ g: l+ e/ f
nDestPos++;
3 f' s! P" {& f, f+ h, A A3 z continue;' @! z" F: @8 K% C" h7 E, L( e7 X
}7 D! f; H3 B* {
pInvSort->MoveItem(i,nDestPos);
, A! n. `; J1 J g_DPlay.SendMoveItem(0,nSrc,nDestPos);- d) I9 u( z$ T6 H; F' p8 Z
Sleep(5);
$ S" E& r7 p4 ~) o) M) Y G //Error("移动 - %d->%d",nSrc,nDestPos);6 u2 e; u, ^5 D7 m4 D F& Y* M5 d
nDestPos++;8 B& S+ G0 n) }" }6 }' B( ?* P
}
6 {/ N. `$ g8 Q q; R* T3 x7 H/ z( p+ P/ ` //取第一个元素的信息
$ `1 {! C P. Y9 v3 M4 e /*& i2 D4 X2 o4 l: H& ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 A' ~ D4 w- v' H {
( e9 z" l8 o. Z* A+ |8 c& _: P Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' R# o) r! e9 v9 w8 Y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- W% S- `0 B: u* y1 r8 U }- u) k2 Z+ s; v4 ^
*/
' y6 B% k! v2 g+ @6 @& n% r0 v: p //////////////////////////////////////////////////////////////////////////# v3 f& I! r3 ^, k8 e0 F
break;1 N! i+ u I, p8 A' f \; ?1 {
}5 _0 X5 Q1 S W! o& l
} 9 G" i u, E5 M* S* o) V; l f
}' H- e! T% n- C' k6 H5 G# \4 W
m_wndMenu.SetVisible(FALSE);
4 d6 R, g/ L) |' K' z0 ]3 t2 [0 g
0 c& ~* @' b" W4 C--------------------------------------------------------------------------------------------------------4 k* E3 N" B- a5 ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 _+ A3 F8 H: l) j{
* z4 i0 A0 y I! I0 k* IBaseMouseCursor();
9 a2 h. y1 @ z}$ u2 z# |! u# v, v* u% g; f
在其下添加:
# j& S; a+ m; t4 D% fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ e" l4 _% p- r0 R0 O5 o; i
{
- N. t1 V2 [5 ~) vm_wndMenu.DeleteAllMenu();0 j% d: q; e" x- C9 C' D1 }
m_wndMenu.CreateMenu(this);
+ e) i' ^+ K/ g6 s* j6 Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' ^( y. f$ N2 s: b* H
9 k4 a7 |: D. S! K( Y5 l+ Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) ?; f6 W1 f" p) _7 p{& p& ?# ]' }9 G/ m( H( f( n! D+ R% z
//P以上级别才可以删除所有道具
- n; R0 B) h6 {& Y) q5 b$ z m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# B2 r( B7 w; e: p
}
4 f$ B* f! c7 Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. ~" t& _3 ?3 c5 h- i# Q0 a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); n' s& d3 V+ t9 T9 X. E% G) c
m_wndMenu.SetFocus();
+ e5 F0 i+ t: D' Z% G}
$ x3 d- m; n+ i5 c! Y% L+ T------------------------------------------------------------------------------------------------------------0 y; J( A* P( S; d( N
*************************
; n8 m/ \9 |# k2 t) t* u" _WndField.h文件
( E& w. u6 D, }* \*************************6 f7 D& h0 R1 R- W& Y3 `* z
搜索:BOOL m_bReport;
/ W% K) i( E$ c6 ~+ Y2 _其后添加:* l# z6 e3 V1 e4 g- l, H" _" c1 B
CWndMenu m_wndMenu;
& W% o. w7 u$ C. d0 i" u7 k! F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 M. d( ]/ d9 ~/ g
其后添加:- a" _( G) C A' Y2 {
virtual void OnRButtonUp(UINT nFlags, CPoint point);0 D: J+ o, H( _, v
( q( L& ^5 T; v# {
/ P$ c9 p% ]- G, s' x3 {& e |
|