|
|
源文件中_Interface文件夹下WndField.cpp文件5 V( G& m" y4 T% [) r8 p) Y2 M
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 X, B, Z- f$ |3 z# Z
8 Z, } G& l/ K" A6 \struct sItem
; V1 D7 Y, D5 h; P- J6 c{
o$ _4 e' f wDWORD dwId;
' c) Z( U$ O* G) y' |4 `DWORD dwKind2; n& _: I" r/ }
DWORD dwItemId;
9 {1 ?& ?& D6 i4 BBYTE nIndex;' ~+ r4 w1 }1 S, A
sItem(){! ~3 i2 _2 y1 _9 ~
dwId = dwKind2 = dwItemId = nIndex = 0;
- {% ~! s& i, r}, J, a/ U3 y5 P3 N- j
bool operator < (const sItem p2)
5 D8 q1 O- q( G{
0 M& u+ u& U( J f7 U+ K/ \% M if (dwKind2 == p2.dwKind2)/ S) }: Q4 n2 A* A
{1 ]# |4 Y4 }! v( E
return dwItemId < p2.dwItemId;
; A& Y0 Z9 E) q& A }else{1 Z8 S0 {2 v: g/ N' N9 i% d- H
return dwKind2 < p2.dwKind2;
' Z" X" |0 m( o7 |' D& T }2 v0 j: F' y, v+ L. |7 u* v) @
}
0 a" \* n Q) Z. f};
/ C: H0 u4 F0 ~& xclass CInventorySort: b# s) [3 W* U* N9 b6 ~# i
{
* U3 z5 k5 b& G/ |8 zpublic:
f5 K, q0 h" M# o" _/ OCInventorySort()
+ K6 n' f9 E5 L3 w( w3 f) L{$ l; S0 r1 {+ W: y, N, L) b
m_dwPos = 0;* {) b% A2 x4 g4 M7 a7 `8 g5 \) A
}
1 ]% d4 k" l6 q& y. J3 W1 c8 j+ u~CInventorySort(){}
. d& d$ v2 [" Z: y* Dprivate:
# X( e0 k, ]! zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: r' Y# h4 l: K& K0 i4 CDWORD m_dwPos;+ @/ V: |+ B# ]% b% d
public:
7 c) {9 Z, R& W8 ^, z7 I5 m3 Lvoid Add(BYTE nIndex)
* d2 G9 \* R( k4 @{
/ ?- l6 q% h" z# J u% e0 ] if (m_dwPos >= MAX_INVENTORY) L2 A0 K8 g8 x( h& A
{
& k2 m, V# X8 P! Z: ?3 x4 H return;' ^1 R# \( T! E
}
9 S+ N$ X0 X8 a& a/ O m_Item[m_dwPos].nIndex = nIndex;: V/ u$ x# B' L! k2 |) @8 Z/ Z
m_Item[m_dwPos].dwId = m_dwPos;
3 S( Q" f. F3 }/ R m_dwPos++;, p+ h4 `6 r. E, g* i
}
. u# x3 [4 c2 w: L$ s% z; }. f8 @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: L0 e" Q3 J4 } I
{! t2 J4 I7 n, ]" o
for (int i=0;i<MAX_INVENTORY;i++)
+ u! T1 G- V/ {- J {. K8 H" |. `/ j4 e9 V8 A
if (m_Item.dwId == dwId)
( t0 D. Z2 I. h0 b' ^( {1 L {. Q1 j7 |5 i4 n' P
return m_Item.nIndex;1 V [" e! A8 C# R F' G
}$ B; s0 R7 m4 z- K) r" J2 N7 u9 b
}
- x$ B% f. v4 K return 255;
' p1 |+ P3 B4 L4 `. ~ c}
: w5 c0 d! m( j/ q, y8 Lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) l8 c1 g' X# I{
) E7 U# \9 g8 `! @" c BYTE nTmp = 0;
0 a# ]0 M. e# Z! |$ P bool bDest = false,bSrc = false;
- f# O- s# {2 O9 g9 Y& p for (int i=0;i<MAX_INVENTORY;i++)) v* q8 U- P) Q1 M& b
{
- J3 x( ^ Z& z6 w; ?) r, A; M if (dwSrcId == m_Item.dwId)( W9 T) c- P5 |* ~3 `4 D
{
; a( C6 F' k- e1 n6 j& u0 w( s //id相等 则 改变对应的dest和src! I( g+ B8 N# P
nTmp = m_Item.nIndex;+ B1 ?% O5 ]5 ~$ [- O) O0 q
m_Item.nIndex = dest;
; N6 r- T' O+ ~- P }! e# F6 ?# E- s l( z7 b
}
% }3 w" e- X5 O# V. [( d //临时数据保存完毕,交换开始0 x8 f. E; F1 ?/ b1 y, w5 V4 M) \$ N
for (int i=0;i<MAX_INVENTORY;i++)
: i0 \+ t( X7 M: S9 k+ S' [% u {0 |9 e& `5 D& u9 u
if (dest == m_Item.nIndex)- [6 m$ T" |* B4 E9 I
{$ [; k- s4 j' w! Y Y3 f" @
//id相等 则 改变对应的dest和src. d2 c8 K. d' V8 b
m_Item.nIndex = nTmp;
+ j3 ]7 ]! f5 a# x. S+ |2 I }; X/ ?) H( i1 I! t; h
}( p5 |* R# e8 x, h
}
9 S/ d! {- Y. x* o1 S y6 g};
: C0 f- \2 _0 k" q$ ?-------------------------------------------------------------------------$ @6 t: a) R: ]4 Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; C8 X7 l) l8 Y; T; |, M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 J9 K# h5 R; h. F
紧靠其上添加:( ^2 H0 Z! ?9 a3 ]1 L( E5 ?
if( pWndBase == &m_wndMenu )
) G3 M$ N& f& D G6 v{6 |5 W* j4 N. q- a
switch( nID )6 T0 i1 C" R) ]6 d2 u' P( e6 U
{2 D# U+ _5 h2 _
case 2:) L8 f6 z' J, p5 I( i8 `: `: D
{
0 M% \/ T. }1 Z) f( ~# ^2 V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 j# h4 h. @+ k4 n$ V: t if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 E) Z9 J& L- i; ?% z" H! b3 z
{- i D# Z2 M n6 W6 T5 D! R7 c
break;9 M& K+ t7 t7 x" E
}
% R. b8 X9 J. K$ z8 o+ G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 i7 _8 y* \% G" s( l
{
) \/ w1 M+ a+ a: u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ E, l" G' A" W. I. @ if( !pItemElem )
+ f9 {( u9 l! P' t5 j* u! g continue;
0 {1 y0 L& ~7 p) p% R7 j if(pItemElem->GetExtra() > 0)# Q& J: n. ?) h
continue;
6 ?, S$ |/ b8 g" I4 }1 C* J: _1 _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! \5 f! u5 r, n, E& | continue;( b) S; p1 T! J3 p8 J, i7 l
if( g_pPlayer->IsUsing( pItemElem ) )
4 _0 J5 }( ?2 J continue;
# W6 P+ | e8 s5 k6 z if( pItemElem->IsUndestructable() == TRUE )$ m( S! {1 |! L# l8 m8 Y3 ^ w' R$ l
{
: Z" C9 u' j/ F# q" v g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 C' {9 N6 O# W/ D! [
continue;
. v/ L6 j5 i. Y. \0 ^7 ` }, K; q5 ?# w8 _, X; c& ]# {0 Y' c; |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" S( |3 L& \+ I+ [
}
* a: E, X- k2 A' i. D break;# a1 ?, L; R6 e' c
}' o: r( h# m j' ~. x7 Q6 O! k
case 1:
8 F/ |" U6 w' Q: C" p o9 B4 }) C- [ {
( j7 L' j2 `" |4 X' t# @, ? //整理背包. U! N9 K6 l/ }6 z
//////////////////////////////////////////////////////////////////////////7 n9 f6 ?! i0 p9 W# o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* q- w) ] k( N- P: _; W/ P% U //////////////////////////////////////////////////////////////////////////
) l! }- Z0 y/ k- R$ M6 f6 j1 U //////////////////////////////////////////////////////////////////////////
8 {4 L& \. Y0 Y& s( O CInventorySort* pInvSort = new CInventorySort;
$ p$ \' o: v# w, i+ g vector <sItem> vItem;
. r( v. L% C; ? H# [- [# n vItem.resize(MAX_INVENTORY);//初始化大小
* D* k3 j5 G! H8 A2 r //////////////////////////////////////////////////////////////////////////* i( [, I( i0 U% \2 C
//填充数据
$ `% x. h6 p) b# {& F7 z, `9 y for (int i=0;i<MAX_INVENTORY;i++)
2 m3 d" l3 l$ }6 ]8 F8 [3 H {' U- U4 z; F& e# _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# X/ \$ r8 g! j# z if (!pItemElem)
5 B* u7 h3 v# V2 v' Z( k: E7 D {
, g" F8 M. a3 f) D$ K/ I vItem.dwKind2 = 0xffffffff;
5 I8 z& m! g T, Z7 l7 s- \ vItem.dwItemId = 0xffffffff;8 u {# ~' |# t. Z# F! B1 b
vItem.nIndex = i;
; m) y/ b* M. ?1 u }else {$ J* l: R8 j% b6 Q0 v1 e( i
ItemProp* pProp = pItemElem->GetProp();/ h/ v! x2 n, S3 t
vItem.dwKind2 = pProp->dwItemKind2;
6 r8 C' r' Y, x' E9 x. x _" Q/ k vItem.dwItemId = pItemElem->m_dwItemId;! T* W$ S; b' R( k
vItem.nIndex = i;
- v+ f, A4 P2 B) X1 | }3 V$ x8 \3 j. k2 \. y$ a8 s1 r3 L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( t6 p. Q; G+ l# j" x1 w$ e' ?2 { R
}* N4 f; n' p( m: i+ L6 b
//////////////////////////////////////////////////////////////////////////4 c4 h9 Q+ Q' k7 Y# w# @
sort(vItem.begin(),vItem.end());//排序
@. N6 m8 }% q. ~6 n s //////////////////////////////////////////////////////////////////////////0 d# R. k/ I0 l5 Z; Y! f
//交换
4 f' J& _5 O7 z0 Z& G1 k3 r for (size_t i=0;i<vItem.size();i++)
7 ~; e' I* _6 b; A {1 c: j, T l7 ?+ j% F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 o6 `% z) k4 z& l# \' B pInvSort->Add(vItem.nIndex);* m& X" Z8 O/ `9 e# V
}
+ t# j5 K5 _# G( O% B& x BYTE nDestPos = 0;9 k- D/ |2 i6 d W5 o
for (int i=0;i<MAX_INVENTORY;i++)
/ H. _# R& d& `' }0 g {5 z: }8 Y* B; V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' g: p/ ]* K5 R8 @5 z* Q if (pItemElem)3 O% ~8 e) w H+ g
{* A6 \, d6 j& A, X2 G! k
if (IsUsingItem(pItemElem))
5 q4 k' r8 O, G7 u7 @% P3 {3 D; a4 P {
5 z- _9 z- x- v- L5 F //这个位置无法放
6 v- C1 n3 F3 k+ q nDestPos++;
7 ^% e8 P7 b, K* b }9 D1 e) l9 f) \" O! K
}& t& a% y# K# v* C( B0 r3 [, O8 ~
BYTE nSrc = pInvSort->GetItemSrc(i);" d: g) h9 l* M& O6 @& Q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 o- H) b% u; u6 _7 P if (pItemElem)% S8 r I7 v u$ [6 x3 X: r
{* v U; @2 J: q# c" W: a
if (IsUsingItem(pItemElem))$ T% @3 E% }, _1 V; q. _3 b
{6 i+ \" O+ U% ?8 s- T
//这个道具无法移动,跳过- F' X4 N- g( h# a9 \" k { W
continue; s9 s5 a) H7 i0 F9 {3 H
}- L' [7 B& u5 K* N/ ~+ L8 X( D9 U
}else{) I' l- T6 E. h" y; y1 a
//空位置 不用动$ \$ C) ^2 B- p: `7 e: |8 L W# b8 M
continue;- f3 u j) i9 O& c- w5 m! E" r$ `
}1 G; J$ q) @3 _; H! K6 }7 S
//////////////////////////////////////////////////////////////////////////
K5 W8 ?8 U* Q7 X //开始移动; b" p! [5 z. H8 h% R
if (nSrc == nDestPos) f- ?+ {: v, g- Y; O
{
- G2 _3 ? g9 \+ C! o( N" W. F //原地不动
1 L9 t9 Q" h" j4 g+ E a3 q nDestPos++;; h/ K' q, `1 b2 [/ d0 m
continue;0 A6 M3 a* K4 g5 S$ p
}4 F; N( w: v3 B6 Z2 ^% R, i
pInvSort->MoveItem(i,nDestPos);
* z- v m* ]* a' U- K& g) } g_DPlay.SendMoveItem(0,nSrc,nDestPos);% ^# o7 f3 ?& Y9 ^/ i% x
Sleep(5);. ?8 a: B) i3 s7 W" P
//Error("移动 - %d->%d",nSrc,nDestPos);
+ @9 v8 Q* p% u nDestPos++;
0 W1 E& Y9 ]1 \( A }
* D/ c# D+ U* p4 E1 f7 Z W //取第一个元素的信息
( O; d+ C+ D* t- A /*7 v9 ~/ J! T0 F% O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' B& u. S- t# N
{9 l2 Z. A' L- Z9 A2 c0 k2 x$ i
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 X$ [0 A3 [ a+ [* j5 _7 Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, v: I3 k5 p# E# y
}
. x8 _6 B, f( _9 Z5 x% e; Z3 i# `' h */" d! t0 z' s1 e9 x( e0 R% O
//////////////////////////////////////////////////////////////////////////6 z& _: ?. x' d$ S+ T
break;' f0 E" U* B3 G, R. b5 V* O# z
}- s4 a0 ?6 n0 U( [
}
' M0 a" e3 P. Z0 A}
& S0 u# F/ ~! k8 i# q7 T; fm_wndMenu.SetVisible(FALSE);2 E7 D |% M" b' d& f; p) G' D: E
* X( r4 e0 M! y ?--------------------------------------------------------------------------------------------------------. _" g2 L) @; r5 X' ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): }" V6 W F$ ]4 r
{
* Z( \% Q& V" G0 h% H3 [+ XBaseMouseCursor();8 c; r7 ~9 k1 `# F" y5 e! s- Q7 u
}
r& J" }5 ]% @+ F在其下添加:7 f" L# G x, n, C6 k
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ z5 k3 J1 Q, k$ X% T) e{+ n8 K3 v5 }, ^9 h/ o
m_wndMenu.DeleteAllMenu();9 m v4 j3 i2 X
m_wndMenu.CreateMenu(this);" ]; k* t1 p( i2 D3 ^! h( `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 |4 T7 o) p4 n. z6 _1 M
: f* ]' r; N# o. x$ O+ \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* u* O$ _/ P) N* Y) K{
P# G! K7 g: Z" B, r/ I% T: H //P以上级别才可以删除所有道具% e0 } r; n/ ~, s: x: T
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 d ]/ }' h/ \
}
% D: j) i$ n9 v8 Zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 H2 g6 h8 r0 g+ H" C( X" @m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
K( e, K5 |! X2 o- R3 G! f2 Fm_wndMenu.SetFocus();: B# R8 f2 x2 |' f6 r; @; P
}) d4 C' [4 J a/ S% }; q- [
------------------------------------------------------------------------------------------------------------
7 J6 ~! d$ z3 z2 E$ N! S& d*************************; \4 {/ g! i1 U" c0 S
WndField.h文件
* U1 t0 [9 y2 H) ]1 \*************************& S' Y1 o7 I5 T! _0 b7 h
搜索:BOOL m_bReport;
; y1 ]* [0 P5 l: A. `* Q其后添加: @5 k q! M5 g/ M2 K# f
CWndMenu m_wndMenu;
) J& A( {' i- V! ^7 ?" M2 p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' w- ^* K& B6 p0 U. z( Q4 F4 [
其后添加:* ^ m* X/ H" b; ?7 M9 T; }
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* L9 s6 r3 _- w- m& u% f% d0 |
4 S1 I' ~) D* n7 {( E; c: N: n- h* ~7 e* q
|
|