|
|
源文件中_Interface文件夹下WndField.cpp文件 B6 S2 a5 i: x8 J) g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). r1 F- g+ ]6 g0 Q
: X# o Q( o/ |( Qstruct sItem
Z3 G8 k$ j" D0 d{
. p4 u3 o( l* `2 k& HDWORD dwId;
0 \6 v: E4 h( k/ n- rDWORD dwKind2;
) K* m) A$ M6 _; A1 L4 BDWORD dwItemId;
( V# j. `- O& W7 E8 cBYTE nIndex;
4 y5 }8 G1 I: E, n+ IsItem(){
C* g P3 U( o0 f( Z6 z dwId = dwKind2 = dwItemId = nIndex = 0;
3 s& e" j4 ~& G; x4 |}
$ p7 k" u8 n4 N/ Y( Obool operator < (const sItem p2)
! X; c; ^+ z0 w w{- O! e+ r6 q' G, \, ]) ^0 H5 p m) _5 j
if (dwKind2 == p2.dwKind2)
- l$ u4 P* E/ l% S {1 h2 K, O, A3 p9 F% A% ~- V; L
return dwItemId < p2.dwItemId;
+ Y+ z4 g4 x" p! W) e- T9 N }else{- R& |2 e5 C _8 d2 R+ M$ r7 v
return dwKind2 < p2.dwKind2;
- r# B" B% y! W1 O }
" J2 O. w5 H9 _9 ~5 C0 U& [% k}& W8 V6 A- V* `- P
};+ J g7 s( Z5 C S) T; Q
class CInventorySort) I& i$ w5 G1 j% U+ B
{
y1 g0 x1 j, Lpublic:4 X# E$ Z, V: t8 P1 w
CInventorySort()- m6 W6 P4 {- N0 I+ L" J7 A0 m
{
& m9 S8 G9 h' d. l, }1 o0 S. [2 z m_dwPos = 0;5 n3 `2 v+ q9 ^: {
}
( \8 F: \& [) F2 p- u+ d5 a5 w~CInventorySort(){}
8 x# C! V3 k: c5 ?+ m6 kprivate:
1 ^2 X L, j1 L" s8 M; bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" s; v$ i+ i8 ]' F: ^
DWORD m_dwPos;
0 ]$ O+ c2 K* W+ cpublic:: o9 Y7 d, }( x8 c( ?
void Add(BYTE nIndex)8 ^0 {9 _, ?# Q" I# d
{
" n( e# F3 [0 n if (m_dwPos >= MAX_INVENTORY)( F& I2 Q6 U2 Y9 B+ M
{8 t7 W7 U9 K8 a2 F& g
return;
; Y" n: B' d' J" a# f" Z }9 [0 M7 R% M5 o _6 o
m_Item[m_dwPos].nIndex = nIndex;- h1 X( ^3 M: ]( j+ Z4 ~( P/ z( R
m_Item[m_dwPos].dwId = m_dwPos;
* \: B |* k: U. X m_dwPos++;
3 T) ~3 S4 f% T3 i/ N$ e( S. A S6 t}7 w& {- j/ o% ~5 M! ?$ a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& h5 i: P8 D, G$ M& Q5 X{7 g* e+ Q. J5 D
for (int i=0;i<MAX_INVENTORY;i++)
+ X! ^ K3 A8 @' V, r* R3 C& V {8 {2 P- ^ ]! b2 L" e9 J4 b2 `
if (m_Item.dwId == dwId)8 V# ^5 x! S7 `3 o% P4 g
{
: ~/ ~* a, ~8 L return m_Item.nIndex;( l' M# m" I, D, `7 _
}
9 V7 y' q7 O6 i$ z }
4 T2 B- ~" M7 K( T return 255;( w' ]. g& h" ?* T8 ^$ a
}+ U* O4 W3 t" A' j& j* C. H3 S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 b. G& U8 Y+ r8 K X{
* q5 {2 P l; S* N! ^/ k, O, p BYTE nTmp = 0;& g& i$ h$ v1 k
bool bDest = false,bSrc = false;+ r/ V; J# s7 A6 T
for (int i=0;i<MAX_INVENTORY;i++)
4 a3 j, ~5 z; ^' q$ y1 i$ @ {: e3 m% |, u& ^3 n
if (dwSrcId == m_Item.dwId)
" J/ q( K6 B. ^' K$ u6 h {5 f% v. P8 n5 {- Z
//id相等 则 改变对应的dest和src
2 N3 w7 S/ Z8 L% [5 W nTmp = m_Item.nIndex;) _9 |( w7 v* f( L0 O
m_Item.nIndex = dest;
7 \2 \& e; Z1 _9 y }& [/ d. d# q" \" g9 d* H
}
) m B8 l _7 C- q. d i //临时数据保存完毕,交换开始
' j0 Q8 Z3 |1 n) [# \ for (int i=0;i<MAX_INVENTORY;i++)
* g ]; P* _' Y: ?( ~8 G {5 A3 D) Q. x. W/ ] [ o% I% e( W! F
if (dest == m_Item.nIndex)$ y9 ?% H/ B, C# G
{
& h. B6 |/ h4 J //id相等 则 改变对应的dest和src4 i! H3 b4 M* d1 W
m_Item.nIndex = nTmp;- n1 |0 X/ |# p) S. ?& p
}
, d, r! r3 ^9 @5 Z# n( v }
* S0 N. t3 c! N/ R}& d( C" X7 {" F2 Q
};
: x, U# v" ?, V7 f* G-------------------------------------------------------------------------
% e2 n; s! Y7 G6 p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ O( p* {4 j6 X6 T+ s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) O' J8 Q' f" K. o2 E7 \
紧靠其上添加:
; m) }; @4 J1 O+ g+ gif( pWndBase == &m_wndMenu )
: _2 J; y4 \+ Q: C( e4 |1 S' L) _{
3 q6 x, X2 s J- }! m switch( nID )4 Y: q; \; S" w
{- Y) D8 s! S5 f: G! i% Z
case 2:
L/ Z+ ?7 Y1 W/ p" N+ b& \ {( V2 z; S5 b- _! i3 E4 i% ?- R
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" d. X4 _, d M. P6 ?% K if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 n. f; @) Q9 @% x {3 a7 b" u7 \3 M2 U+ D) n$ ~
break;" i+ d+ B% ^4 h9 O ]& _& C
}
( h8 Z7 J. u# v for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ {; o7 J, Q b1 i- u: B8 J {. m: c" s' D. |' l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' h$ l# [, X+ \3 ?/ Y
if( !pItemElem )
g) {6 I1 `3 u! r5 T! C continue;
' I+ a/ c3 Z" I4 Y- Y) U, w9 n if(pItemElem->GetExtra() > 0)) `7 [8 f/ z6 u/ [9 T9 p
continue;
* b x$ @, M7 T) b8 @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 X' F1 @* W/ G* m, u A6 H* P
continue;8 k `/ t6 i5 j
if( g_pPlayer->IsUsing( pItemElem ) )
9 y& ]8 N4 i! s- s; @. H continue;
' u) A% U0 Y8 K! R if( pItemElem->IsUndestructable() == TRUE )
# @" R: ?9 X( ^* P3 T {6 V1 G9 M5 `0 h3 P, r/ O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. G1 u% w6 r5 g4 r. n' F
continue;
% u9 D' y7 S/ s1 o }
$ w" X0 ]: v$ d" y7 f8 i1 A7 C# L g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! C/ C% k; O+ D& W+ x6 m }& n9 m. r( n: X# J; }
break;+ t, Y, f9 F/ R, L% e- n. o
}8 R3 ?$ b/ s P+ H- _6 r
case 1:
( x9 C7 U, m- i5 D2 [" u {( e( x4 b5 w4 F4 [
//整理背包4 J7 H8 \- v2 @ A% y
//////////////////////////////////////////////////////////////////////////# A# w# R P4 |0 B
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& t( f* F# ?$ d2 K) z t- P //////////////////////////////////////////////////////////////////////////, P& F" @, g; Z' O9 l1 W
//////////////////////////////////////////////////////////////////////////
# u6 ^: d! @7 C# \' \ CInventorySort* pInvSort = new CInventorySort;% m+ {3 W8 n, ?! e/ i8 ]
vector <sItem> vItem;
6 V2 k$ a' Y& `/ M2 L0 _ vItem.resize(MAX_INVENTORY);//初始化大小
2 ^8 [9 u8 p2 B3 ?& Y7 S //////////////////////////////////////////////////////////////////////////
8 ^% f( p( ~9 t6 a! G& k //填充数据 j; M4 q4 D/ G! z0 S" }+ K
for (int i=0;i<MAX_INVENTORY;i++)
% M, m; G" |+ y; x5 p- r4 i' ^ {6 Z% S0 ~# c% M" w% K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 r/ a1 J# _4 }+ z5 e/ H/ t if (!pItemElem)
' i5 _, r7 z5 k) J {' c9 K! h1 [/ L, I c
vItem.dwKind2 = 0xffffffff;; K" h* {; M: j, ]9 E
vItem.dwItemId = 0xffffffff;& d6 R& f1 _) i
vItem.nIndex = i;1 J1 w2 X& _: `0 F$ _ d
}else {& Z% U l% c% m! F8 o, z# Z
ItemProp* pProp = pItemElem->GetProp();0 L5 X0 T8 D$ n& g
vItem.dwKind2 = pProp->dwItemKind2;3 X; E% E- U8 B& d! B: G
vItem.dwItemId = pItemElem->m_dwItemId;8 p) c$ [& W- `' _7 w; [
vItem.nIndex = i;8 p1 h" Q$ j, e2 L) f6 `
}
3 b% q- ^8 h2 w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 g7 B @& r3 N ~7 n& { J }
$ l' K: {) a% K" z //////////////////////////////////////////////////////////////////////////, g1 c4 }, _% X* _7 f
sort(vItem.begin(),vItem.end());//排序; T# M: F, S. u2 u8 q
//////////////////////////////////////////////////////////////////////////6 r9 {: i, e6 Z# I' c4 E
//交换3 L* i- s" ^( ]8 X, D" R& a$ Y
for (size_t i=0;i<vItem.size();i++)
) P8 ]2 o5 v. k( j9 n$ b {8 B: S$ S+ m2 \ A8 l
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 U% }# u: e6 b9 n/ u% O! c% v* r pInvSort->Add(vItem.nIndex);! l- C b2 q. C1 ?% x
}
* D, K: F% R* m$ C0 i; J4 N BYTE nDestPos = 0;; X7 h. k0 N. Y" [ v9 _2 i
for (int i=0;i<MAX_INVENTORY;i++): q9 T8 }% J. }/ Z: E$ s" }
{
: P% m. P4 ~, f( p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( L2 _2 h' i1 m. D6 S& Y1 E7 v
if (pItemElem)
W3 H1 Q2 ]1 t4 K8 c% ] {
9 U' ?8 V' N$ k if (IsUsingItem(pItemElem))
* _$ i) b' S8 v) }/ O1 K {7 _6 G7 R5 i2 I$ r
//这个位置无法放
( r8 U" ]5 S! y1 [0 E) e& P* O# C nDestPos++;
6 I2 O) m1 O$ q- i: q }
- M: o. `- \3 v8 ]! d5 j( D: l9 V! p }
/ @. s2 V6 Q( O% z BYTE nSrc = pInvSort->GetItemSrc(i);$ H" x& a8 L& f# a- P2 n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 g8 F! g# a- G. g) V3 f4 S if (pItemElem)' F( {# a' l8 B) g
{
/ q8 A% g3 F( b5 }2 s" \ if (IsUsingItem(pItemElem))
! F6 Z+ R- [5 H3 T+ ^, B0 G7 D2 b! Q8 K {5 ?* s% j; `1 n% F9 {
//这个道具无法移动,跳过
4 I& @& z4 @( \" p0 U" Y continue;1 r2 r# D! i! m- }' f2 [
}. Q7 y/ f. |# n5 N6 S
}else{3 y7 ]! I: i! n2 g( ^' {/ @
//空位置 不用动! O' K; m1 O2 H u
continue;8 R# V; x0 U% s6 W# R3 Z
}
3 H: n$ Z3 \# Q; M //////////////////////////////////////////////////////////////////////////6 M( o- h* _5 |/ R
//开始移动5 I' v7 y' _. g+ K, D- i0 H
if (nSrc == nDestPos)
+ o! w( y5 b0 F& w/ B {) k# n L& I6 T7 V* ~ s1 p
//原地不动% O5 c# B- _# `5 e
nDestPos++;, N- }. Z+ {1 S# I& @% H9 e
continue;
8 A# Q/ O P' d }3 \: n5 | E; U3 R$ m5 ^
pInvSort->MoveItem(i,nDestPos);
, J8 p# t; u4 R7 d* l g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ ~& B7 ]* ^, b, t+ p* ? Sleep(5);
- Z: s3 |, d9 _ //Error("移动 - %d->%d",nSrc,nDestPos);
; ?& @) D; j8 d nDestPos++;
) w+ T. m, L% z% g2 b7 F ^ }
0 v* M* D, Y! q; }+ I, M6 V. e" O //取第一个元素的信息 ^0 y: P) l7 `: e" G
/*
* a* a2 w9 p) a if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ D! t3 b5 W1 }( f' u, n: e) t {5 f& [1 E$ g# b
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" ?5 s5 M+ [: n$ j g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 b. C# [" \9 P" `/ Z" d }
- |* ]; B0 o7 b( a) }. j *// ?" t+ \+ l" A4 ^. |, ~
//////////////////////////////////////////////////////////////////////////
- T' V- q1 T/ }) q2 P2 o+ h l- b7 ` break;
+ }! t: Y6 l8 m" A7 @ }& n. n$ K* ^9 X2 {5 |/ G0 Q
}
( Q' C- }: u- t h3 M/ t, ]}
- n! V% e4 B0 g, Em_wndMenu.SetVisible(FALSE);) v3 g( v$ \2 {' Z. k
' @. C, t" r' S
--------------------------------------------------------------------------------------------------------
$ E$ U! t% u, ~6 E) h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 B# C. Y6 t* n9 g. N7 s{; x- c, I) l9 H% M5 [
BaseMouseCursor();
# R7 Y$ u) w' y& i6 F}( ]9 s3 Q& |( x' E
在其下添加:
$ d# G G7 f& N8 evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); `' t# t$ r% ?$ Z P B3 u
{- Q1 k* V2 p7 O/ E: }6 X$ v7 D
m_wndMenu.DeleteAllMenu();
) V, w" L, G- ?) }9 P) Tm_wndMenu.CreateMenu(this);2 U1 `, I5 C d; Y3 }: k) j" `4 t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* H! ~! x1 C# A* p' V" h
! {- T% d8 L8 x, ~7 [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 a$ v& Z* y$ P5 ^3 h
{
' j+ B8 P3 I, m8 Y9 R //P以上级别才可以删除所有道具
2 J Q2 I6 b. ^1 X$ t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 K2 h' M/ O, ^" r# u% x7 j) ~}
- z, @0 k7 k# F, R6 ?. k/ Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: X0 Z9 A: q% k
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 r* r6 l |( K8 q$ W( ?m_wndMenu.SetFocus();# f9 H0 P$ R3 N2 T# V
}
) r: M1 @5 f F6 z. L------------------------------------------------------------------------------------------------------------/ H" B1 {9 \: }% ?! |
*************************- I6 n; t* f0 u: a4 N3 t5 r
WndField.h文件$ s! {7 \& |5 o$ N
*************************
. @& E5 _# D3 J; g/ }- `搜索:BOOL m_bReport;
* z4 O) ~: x8 X. \其后添加:# u. E/ D6 o5 _# {; d
CWndMenu m_wndMenu;2 @$ M! L% S y3 Y# X" A
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 L1 t6 _) M( ?7 x3 \2 Y( ^
其后添加:
- z4 m! W- M& i/ uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* {9 v6 B/ w& h1 n" x
5 S B% G8 R$ g5 p2 o1 Q6 M% \( N% k) A' z
|
|