|
|
源文件中_Interface文件夹下WndField.cpp文件0 ?; L* [8 A, X4 @2 I: Q$ t
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! n7 i$ V& l* V1 C) g- K
: T R# G9 o& t7 a3 f/ Ostruct sItem/ ?7 H& K! V5 P/ v3 X7 i& W m
{: R! d3 |' d! c+ H
DWORD dwId;
6 J) Z& N4 A; E) U. [DWORD dwKind2;1 ?3 V2 f% c @/ J
DWORD dwItemId;( L; r' J. X$ V/ {% D+ j, x
BYTE nIndex;
* V0 I) {: O( _, qsItem(){
# b' J9 J2 F8 \ I dwId = dwKind2 = dwItemId = nIndex = 0;; F% d" m8 C2 C# o
}
# A) B; K# c1 k. U( L0 Rbool operator < (const sItem p2)
! v' K! l. s7 K, u5 P{
; N K7 }. D3 O5 y if (dwKind2 == p2.dwKind2)% `% ]# |5 ]0 E9 `
{
% O0 y( k. h$ q" O- A return dwItemId < p2.dwItemId;
/ S" H1 e6 s7 n7 z! i, a) @ }else{% N- Y3 a) C1 @( g1 J' [
return dwKind2 < p2.dwKind2;* y; h+ K0 p! ~4 W, O
}' i! L: ~! v( g: v; m
}
& w( v, b1 K! n& v" _};2 U7 k* a% n! X* ^
class CInventorySort
" F2 x8 Z2 g# e* O* Q+ B{, N6 E, B. e% K/ x" Y7 L
public:" M" {3 a) |$ h+ d
CInventorySort()
, v6 F/ B* k" h# _( Q{' \* ]4 s/ h) @
m_dwPos = 0;3 f+ |' G# |8 W1 j! v
}
" Y1 k: E% k) K7 z( \ _& [~CInventorySort(){}
( P' b3 _' Y9 Q# n$ sprivate:
2 x# a' ?- K2 Z5 e4 DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 L# R- i- ^) ^+ \' S7 ]+ b5 ADWORD m_dwPos;5 Y5 U- F; }4 _1 @' V* g2 y$ j* ?
public:. G! f7 j S. u; g
void Add(BYTE nIndex)
+ K" l# u5 l: {/ z{
! \3 W9 l+ u4 t; S& Q$ x/ m" ^ if (m_dwPos >= MAX_INVENTORY)
9 t {# ?4 [7 j3 [& C! Z2 w7 l$ h {
! K4 n- M/ U; h return;
. L' s R" k* g2 A* Y) } | }
1 _! z* h& _8 q m_Item[m_dwPos].nIndex = nIndex;
1 @* ~' h" P( O: X. J2 w! q1 }. Q) G m_Item[m_dwPos].dwId = m_dwPos;% b" e; b) w7 N- b6 D
m_dwPos++;) i2 E% Z8 e7 m. W( @7 E5 b
}: M4 x& I: t* G/ K
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# J( p3 ?9 M/ \1 y9 @{1 [7 t# p$ j4 a6 n- _! s; o% u% ^
for (int i=0;i<MAX_INVENTORY;i++), X3 R1 R2 ~& o
{
9 E$ d. d* G4 y1 f# b/ _ if (m_Item.dwId == dwId)7 S1 N4 K# L: X. X, G0 r' H
{& }; ~6 ], n/ ?* r) G" a
return m_Item.nIndex;
! g: @) M- n1 S2 Q }, X; U$ f& x8 p; {
}- u/ S) N2 X4 s0 J0 S r/ l, p
return 255;* t* g& M! t" t) L2 O% c- @
}
y) E) j) v. G* U( ^3 pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ d0 V' @( m( f5 S{
# g' t( `: y, a/ y7 ] d$ }- e BYTE nTmp = 0;' ]5 m8 y/ c r2 C
bool bDest = false,bSrc = false;
- `7 {7 g& S8 g7 }+ v for (int i=0;i<MAX_INVENTORY;i++)8 e5 M8 @, O( t: }/ n1 |0 e
{' |9 b$ w# G5 g( \5 q
if (dwSrcId == m_Item.dwId)- I! T8 {( x) K. J
{
; ?3 f7 e' t$ F$ `1 u6 q" y //id相等 则 改变对应的dest和src
8 {) K% w; I+ N$ A, @% S! X- w$ i7 z nTmp = m_Item.nIndex;$ f5 W: Y% T& g8 h% M7 w0 j
m_Item.nIndex = dest;
' v. D& h! H& E/ e ~, I( b }
- B, |* t: C6 t! K2 \1 b, k }
2 o1 {4 } u6 S //临时数据保存完毕,交换开始
2 C& l3 S8 S5 S T for (int i=0;i<MAX_INVENTORY;i++)
3 W) W; V- c/ H {
( b4 P0 z5 a8 {( q- \ if (dest == m_Item.nIndex)0 T; ?' R0 u6 n5 @" x) o& w$ O
{& k* G& {9 ?) l5 F$ w' C5 X
//id相等 则 改变对应的dest和src% i9 J$ ?4 C! l" X" P7 j- U D* R' J; I
m_Item.nIndex = nTmp;
$ u) ~- P5 ^5 Z/ K; [4 W }- D" N m) j2 c$ E5 \& T) ?$ e
}
6 d. X/ R! W- y# O}
/ W1 K9 s/ a* N};. t% L8 @7 c) x" s9 _
-------------------------------------------------------------------------
- j: \2 ]- _7 G# K& ^% a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ }- d% C9 I; l" r M4 z5 D- B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! U+ U! v6 E H' ]& p8 P
紧靠其上添加:+ A& X' {' d$ D& o: c" a
if( pWndBase == &m_wndMenu )
" N2 J' w' M4 \% k# j5 t9 z{/ x' X) ~! ?7 p6 ]( D* T" _
switch( nID )
/ Q4 G, b* @ v3 s {
8 L0 L2 s9 b. H- L case 2:
9 [; x/ J5 O. I! l" |( _ {# o7 s n- u% k( C
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. c3 }7 z2 }+ H0 i) H' D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 X% z) O5 p+ [0 Q4 S3 N" z& f- h {
# |8 u- n) h; P4 o3 h break;+ M1 a3 D$ Q; A
}: n! e/ X% u5 B4 s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), v8 z0 R7 Y2 `! N Y* W1 H
{2 S3 l/ b% w. ?: N- ~2 u$ D5 ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 ` r# C! J) @! F8 H
if( !pItemElem )
( z' k: V' P# c' k% h continue;! V I. s2 I; N. b5 h
if(pItemElem->GetExtra() > 0)$ b& f/ `6 f" K' c
continue;, `( I: o' ^1 b( ?
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ ~) q7 k5 z8 h: g continue;
" v1 I# y, d) @) P2 E7 } if( g_pPlayer->IsUsing( pItemElem ) )
8 y% y2 _0 |: z8 J+ ^5 B continue;* L( ?# O: i0 z( F
if( pItemElem->IsUndestructable() == TRUE )# O2 d" |. i+ w1 o
{6 g) h0 q" W: r! w3 O3 ^. {: c
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ e7 c* N; w7 n$ }1 L0 N
continue;
, ^! \7 ]- p$ r: K: C }, N3 s, h( N* D. l$ B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* l( M4 S2 u' @& H5 E
}* D/ M1 |* Z1 V$ V0 B
break;/ Z0 W) ]" @9 p: u9 Q
}
' U. [! [ F& ]% A# H case 1:7 ?+ M; ]1 o$ h% `( k
{
! P: @& i- I. ?4 Y. I' l //整理背包/ z- q% y3 z& e0 i; a. E5 z- P3 r
//////////////////////////////////////////////////////////////////////////% p' P9 p# e. t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, J, D; F! B( E" w# g% C, z: k
//////////////////////////////////////////////////////////////////////////: `- {6 _' N* S' `; _9 o
//////////////////////////////////////////////////////////////////////////
! R; z' }6 \1 f/ A8 N CInventorySort* pInvSort = new CInventorySort;
i2 U( [: v$ d6 ^8 `) J: |7 { vector <sItem> vItem;
# M4 e* B- S: z3 o vItem.resize(MAX_INVENTORY);//初始化大小
5 W( G; y9 u5 d% Z1 L //////////////////////////////////////////////////////////////////////////
7 ~/ E. B7 Y, p' _ `5 |1 ] T //填充数据
% l8 t$ ~/ H- D" c- ]3 g+ t# ~9 I for (int i=0;i<MAX_INVENTORY;i++)2 \/ D$ @/ \8 y7 ^) U+ @
{5 {" Q; g, o1 E$ d4 ?% f7 n1 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 T" d6 x6 W) z5 S6 b* R2 S7 X
if (!pItemElem)
( u0 m: A6 c( n1 u8 V {7 [; R+ x' Q7 g) x' z
vItem.dwKind2 = 0xffffffff;
# u& @! X; m6 \& I7 ~ vItem.dwItemId = 0xffffffff;' A9 Y7 F* n) _/ ?
vItem.nIndex = i;
$ w- `) N7 J0 X3 B4 v1 Y }else {1 p0 k! x: T7 }) p" p
ItemProp* pProp = pItemElem->GetProp();
2 d2 H. G/ j8 i' f1 V vItem.dwKind2 = pProp->dwItemKind2;
( _: F$ V0 H, M$ R2 g/ J8 T& O vItem.dwItemId = pItemElem->m_dwItemId;6 ^( n, w! r9 D2 q
vItem.nIndex = i;% J" T* g0 u0 H; ]' _
}
8 r9 G2 x* B5 Q- ~- F4 _ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 d! a! ~& `# K2 s- P0 {; ` }
7 Q6 A% N, m9 y' @( c# G6 W+ g //////////////////////////////////////////////////////////////////////////4 m! w; K. C% n. r4 p0 s
sort(vItem.begin(),vItem.end());//排序" G" M& J, t; l5 m3 E( B
//////////////////////////////////////////////////////////////////////////3 r3 Q! x( F# D) w
//交换
# v+ m: {+ H! |. }+ c7 ~! l for (size_t i=0;i<vItem.size();i++)
* b% A" t$ c" m3 d2 T6 _; o7 \: _' u {
4 H' X7 o8 T( } //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- i6 s3 h9 W" O% I7 q pInvSort->Add(vItem.nIndex);9 n% ~4 q. `$ b Q, j
}! ` }! O: k& Z6 l- P! L( E
BYTE nDestPos = 0;
R' [0 y7 ]9 \& H2 }3 S+ R D( ` for (int i=0;i<MAX_INVENTORY;i++)
: i( e- a& V4 M( @! F: R {
- B* z( U" a9 Z7 E/ \* G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ \" ^1 a9 K: y+ A. Y6 }
if (pItemElem)
& A6 f0 M' I/ w" o( p5 X. w# S/ g {: ^2 D J {$ V- e$ ]+ i: Q
if (IsUsingItem(pItemElem))( k: o( O. X1 M# v* h& ]
{1 Q: Y' M M% ~
//这个位置无法放+ i8 g' |( c- F$ M
nDestPos++;1 h5 e8 X( e9 S
}2 N8 e8 I- |3 Z v9 o' d
}' o2 D# T0 h* f* m) g0 H
BYTE nSrc = pInvSort->GetItemSrc(i);
! c! S8 F0 \9 ^+ f pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 U0 t t! D8 {: P# \ if (pItemElem)
J# @5 ^4 g9 a/ f; u3 h! D {8 Y8 |* S1 n' k$ e
if (IsUsingItem(pItemElem))
) ?, k6 ?* L. h* b. o) R {
+ m$ O7 d1 i5 o$ |' ~ //这个道具无法移动,跳过
) R* v6 D$ Z7 e c/ [4 M continue;; I# c; L. O. ~3 M& B. p5 T) Z
} H6 a' [7 X& h
}else{1 b# [; F7 x4 a# f: @* o, N+ j% s
//空位置 不用动
8 R1 f$ ?7 d7 S, _' m continue;
8 \6 s% A; v+ p$ x9 U, b5 h }
" r% n6 x! P; D' ^$ s //////////////////////////////////////////////////////////////////////////
5 r3 I- ^& j1 t. T //开始移动
2 r5 e4 p8 Z" z) {* B5 @ if (nSrc == nDestPos)& S7 v6 V$ }) h7 P1 y# _/ u
{8 R/ O7 ?! C5 p. [8 V
//原地不动. j, Q" J' E8 k3 t! i! \& F# k) o
nDestPos++;: `; w7 B% l6 R: y: Z% n1 H
continue;
% \& k( |; k: _. a% K! Q6 T }
# C$ L( c& t) c( E pInvSort->MoveItem(i,nDestPos);
% g' P* H; M+ u8 C* z ^# i+ l g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 W- j" K& A" T; ]- e1 B
Sleep(5);! a. ~8 n2 G% l0 }& G3 e
//Error("移动 - %d->%d",nSrc,nDestPos);5 u6 j& l7 \5 a& t# L$ C: Q5 ^$ S
nDestPos++;) Y9 {7 q( Z2 u3 B* L" s3 I
}: \9 X; V- [; `, u0 Q
//取第一个元素的信息
- |' G: R3 m/ U) l6 j Q3 n: J, v /*6 R6 i* w" g* T: _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 u- T; j5 L! L {
- l' [ T6 o& x4 n G h; i4 S& ^ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; Z& `8 A3 \& i) a4 p
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 c% j1 U4 c( T- \& u4 { G }; A* n4 q+ u, z5 R
*/
( _! Q6 _5 |- j& v7 B+ D7 ` //////////////////////////////////////////////////////////////////////////
/ B. e' L; F3 _/ m4 j( {/ ` break;
" Y: U4 d. D/ C5 Y5 r. M1 N2 O }% _5 \ q3 K* ?9 Y" D1 r
} % q6 ~( t5 k9 |2 V+ e
}" c- ?( {* y/ m) W8 O: l
m_wndMenu.SetVisible(FALSE);
* [0 Y/ q* @8 Q! @+ i% x1 _# `3 j( m8 V; _' S
--------------------------------------------------------------------------------------------------------# l( g, R1 N+ D' X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' a+ |# C1 F- F$ d& U
{
' K/ a- o) S8 aBaseMouseCursor();
/ W5 n- Z; j2 k* }7 t8 Y}6 ]4 b8 i- ~' |+ P% O7 Q
在其下添加: |4 d* x) i Q2 d- }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 D! ~( F. j3 z ] F- F
{
1 i |7 O7 n) E" ]+ N' x4 Z0 |m_wndMenu.DeleteAllMenu();
' C& \6 e1 I3 V, @$ h# S$ q. @/ V& i- }, ~m_wndMenu.CreateMenu(this);
8 g: ^. r, J9 l6 wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& N4 `) M0 e* F9 R7 W! |4 P6 H/ Y6 G- J! V& k* l2 Z% I5 s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ O/ N0 A& M; a8 Z7 D{1 ^% T/ O0 L4 ~. P j# O
//P以上级别才可以删除所有道具
5 v7 e& m. r6 ?- \. Q, ] m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, m9 w i8 |& a& g+ T: e}
* W' @! Y8 z }3 x5 \" ^8 Qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" K% j8 f: o9 i% z6 l8 ?' ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
h: b# w0 i( f. \7 s& M0 Mm_wndMenu.SetFocus();% s" d, G( }4 z6 m; E" [& H8 W7 D
}
3 s" B, A4 W/ M2 K) D------------------------------------------------------------------------------------------------------------0 \! w- g+ A2 P/ S! ?
*************************
) N$ M6 @& P" V! C; n. [) O }# sWndField.h文件. V: h4 G( G0 K+ U; q" [% {4 Y! N
*************************
. c N0 q6 ? j! s3 L搜索:BOOL m_bReport;3 I8 S- b) w. D) k
其后添加:/ G; Q. J9 C2 X2 n% q. T$ o
CWndMenu m_wndMenu;
8 n; @* s( ? _4 l1 L搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ L/ }& N2 n5 [0 u其后添加:
# U- j* |, h1 D$ I0 Y8 S$ C0 Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);+ J: b# E% Q& D! q) t+ _
) t$ A' }9 p& Y& a# b3 E- C
% E' @/ `, U" @( T7 s7 d0 y& x0 w |
|