|
|
源文件中_Interface文件夹下WndField.cpp文件! `" X+ C+ m- m& b' f' j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% g8 V$ u+ U0 W2 ^4 f. d" e4 w* @( v B" \8 d4 \# o
struct sItem4 d! s4 e, C/ @3 M3 f/ ]) M
{$ s6 I1 I! b3 Q' ]/ P7 f4 r
DWORD dwId;( x/ _ y& [" Y) A
DWORD dwKind2;; n8 {7 n+ W# L! W" C" K
DWORD dwItemId;0 \. e# I1 C, K: s! _- a% M5 O
BYTE nIndex;
, x1 t1 L. h' B% {) E" I$ T) isItem(){
' X0 p% o2 h3 [4 X' j dwId = dwKind2 = dwItemId = nIndex = 0;
! e0 W1 _+ K6 v}
) ~% _8 J9 t: q% s3 p- V5 c; Ybool operator < (const sItem p2)7 z9 w- n$ E. {: B: q- @+ {
{, }* s: g+ G% u$ e! e4 s
if (dwKind2 == p2.dwKind2)6 Z! x7 Z @7 j2 P
{. M) L5 l9 o1 L% l0 B, A
return dwItemId < p2.dwItemId; ~& S0 }& h" |+ z. Y: O
}else{
% G1 H) b: `: A5 Z2 n return dwKind2 < p2.dwKind2;
6 r4 m! c/ c( d, M }
# r8 E5 @" ^- F, y2 L4 V}5 E1 G" b0 {, L% b
};
# V5 r9 R ~/ A* \, Q* o- c- Xclass CInventorySort
4 q0 L1 @+ q" n3 |- q3 `0 Z{
9 u$ ` e L7 w$ |public:, c `7 z4 Z# O% M
CInventorySort()
0 ^# W% j f) v2 J0 ?) s/ F{
; v4 k( @# g8 d( w m_dwPos = 0;
& Y! h; n& g5 X, \3 X* Z- r. K}' M# T% `* f4 p; S. f4 |6 c/ ?, I/ Z
~CInventorySort(){}# }2 w! W1 x1 U7 O
private:
- N, l$ _+ ?" D. G- P' @7 esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' w& x! w1 z# y# L9 k uDWORD m_dwPos;( N4 s7 O" d9 N' v1 q
public:
8 d& Y" n) D- u9 F2 B0 `void Add(BYTE nIndex)
( F' R H" H4 x4 s* ^- B: y{: T* z& L: S3 J3 T4 s' f4 R
if (m_dwPos >= MAX_INVENTORY)
- @# {* Z j2 Z {+ b" I) b! }" A/ C& \. @" n3 o' P% t
return;
" X! n5 g$ c6 V, p }. h! z7 q5 m$ `4 D6 h0 G) l' v
m_Item[m_dwPos].nIndex = nIndex;
$ t$ E6 w' P+ k8 |! w m_Item[m_dwPos].dwId = m_dwPos;, n0 m8 W) M/ a
m_dwPos++;
- M, N& z8 O4 ~( c2 f+ S4 K: D- M( V}/ i1 F4 _/ j' X. s1 L4 D/ A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& E2 v1 g7 q# T+ b{
) t+ ~* f" M3 L4 I for (int i=0;i<MAX_INVENTORY;i++)
1 E" i$ g# r* `6 P3 B {
( A# A0 Q4 p3 L, C' h% u if (m_Item.dwId == dwId)
- K( b' e$ A8 \. h: \4 ]. d {
* ~/ Z3 p6 T% z* S& [+ L2 ` return m_Item.nIndex;
/ r, U. p9 ~7 j. J2 _ }; W- e0 G& A; H" f/ i
}. n+ R1 w' V4 p& G( W1 B
return 255;8 H* i, @' R! l& @
}! g3 Q/ _3 W6 @0 A. H( D# a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 ^7 B. g: S7 t, O{3 |1 k: t( r+ w3 v
BYTE nTmp = 0;7 Z& ?" k* u0 v# U5 n) c
bool bDest = false,bSrc = false;
9 _ a0 N% i8 n$ g! v1 | for (int i=0;i<MAX_INVENTORY;i++)
7 Z1 ~( H% I& D* J {/ T" x* a2 m2 [' g
if (dwSrcId == m_Item.dwId)* w% m, N2 {9 j' j- x
{7 D/ S, a1 z) c. }& ?5 }
//id相等 则 改变对应的dest和src- d$ \' n$ N- |$ v$ m2 n
nTmp = m_Item.nIndex;
& a8 P1 o* @, n m_Item.nIndex = dest;
# y. I9 c3 d/ j, r }: ?: J& V& j; I% ]
}0 p# ?; c$ \8 I1 ]9 C
//临时数据保存完毕,交换开始
/ g' f0 ~" u! u9 J for (int i=0;i<MAX_INVENTORY;i++)% @/ l9 e0 ?' \- s* Z
{( `+ } ~( B t! p$ J
if (dest == m_Item.nIndex)& x: X: ?0 p- `
{
, z( Z l% P( E) J# t! ^( I //id相等 则 改变对应的dest和src
3 Q1 W; }/ B, D: l+ s8 ?- S m_Item.nIndex = nTmp;
3 s; x, \% S; P- f \9 p }) m) H' l4 f' y8 `5 @
}
% O6 F: T; Q0 Z& |' G: M3 z* z5 D}
7 p. O; S" D5 {2 C( X};
" f8 M: v. b! d. a g/ Y8 D-------------------------------------------------------------------------3 }7 o4 P) k, l* U9 s2 x6 e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ T% i0 ~" d" o P! |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( J* A# ] p( l* Q6 [2 @紧靠其上添加:3 ?; F3 \( M9 k( l. ^
if( pWndBase == &m_wndMenu )5 G! M9 J* t' D/ i6 J; R9 B
{, L8 t9 u/ C/ I$ d& X" E0 V
switch( nID )
( Y/ q0 U/ W2 \- L' [! w {( q7 U( r V2 | v* R: H% S
case 2:
. S1 }4 C# p5 N: i7 f9 V {" X) ~ A+ }1 p( M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. G+ I U/ v6 C+ \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* e7 {" A: @: `( s: P: i
{/ P! ^6 D5 _& q+ c% _
break;8 ?6 e% p* E9 u6 c
}$ S5 ~3 p6 g' l0 |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 `8 p+ R# g U$ C
{, i+ N/ Q/ g3 q; S$ C; s- k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ S% X$ ~) a* r/ {- ^) |
if( !pItemElem )3 r1 l1 }5 m" W$ M
continue;& @6 R* e3 H/ v
if(pItemElem->GetExtra() > 0)" b" u) I) D, b( `/ v
continue;, s. p2 e. ~" G6 F! w; o7 Z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# |% n5 Q4 q5 ^$ H5 n continue;
, @; k+ u% E) a% X6 n3 J& F if( g_pPlayer->IsUsing( pItemElem ) )5 X4 N6 o3 l! s2 i$ l$ _. \
continue; k1 f+ y8 v5 @
if( pItemElem->IsUndestructable() == TRUE )# u* y1 N6 J5 m$ C/ O D9 \
{
9 S Z4 E2 u3 c) E/ K g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) Q, x1 p5 \9 [9 {( P: S
continue;
5 x, f. }6 Y* F* Q5 ` }" A: J4 ^$ F* M. S/ _. s4 `
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; k# h1 ~+ R* c/ x
}3 b- ? M2 ^0 H% A2 O$ m
break;& y o7 p, `$ w4 r; g0 M
}2 s* _8 B; ?* C, C" c4 T% H
case 1:
: x% U0 n) B5 S0 f5 q {
; u! o. H3 N/ ~( y //整理背包
% G- g; \! `8 Z8 J: D* | /////////////////////////////////////////////////////////////////////////// W# |/ M! [+ r1 ]9 g8 p
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; ?4 O+ ?$ {- s8 B //////////////////////////////////////////////////////////////////////////
& P& U: w8 z5 m; p //////////////////////////////////////////////////////////////////////////( X2 x2 ~3 R4 F! { ^
CInventorySort* pInvSort = new CInventorySort;
- ~1 `/ S. K+ \' G, t- J8 R& e vector <sItem> vItem;
- h5 r; d1 Y; Z vItem.resize(MAX_INVENTORY);//初始化大小/ w" A6 E/ A0 A; x! U
//////////////////////////////////////////////////////////////////////////
% {; r# Y4 o3 I+ P) T- L //填充数据6 m6 z! H: G) n- S2 v3 a: [
for (int i=0;i<MAX_INVENTORY;i++)1 }( f6 a, g0 R# o% [
{
+ F, k& A9 C# D3 O" x9 v. ?5 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! r* D0 |$ r$ K' f1 e
if (!pItemElem)% `' n8 K7 M8 ?7 x
{
1 j3 ~ H- o& o$ K( e vItem.dwKind2 = 0xffffffff;
* s* G: @$ k% T3 p9 G vItem.dwItemId = 0xffffffff;6 u5 P2 H J! m' m# k
vItem.nIndex = i;$ c5 l& @) f2 O3 ^$ J
}else {1 L8 ^7 ?% o; ?
ItemProp* pProp = pItemElem->GetProp();
. l* q, ~2 X. ? vItem.dwKind2 = pProp->dwItemKind2;; H$ |% _; L9 g! K- q5 e) i
vItem.dwItemId = pItemElem->m_dwItemId;) \& |5 j, x: P" X. ~
vItem.nIndex = i;, z5 u3 h# ^+ a/ e/ L
}
$ S% L* L7 E; M //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" m' l1 h5 b9 l/ y3 f$ \- [
}* z& a+ m4 P" P. M; P/ ~# j
/////////////////////////////////////////////////////////////////////////// ?1 I/ D3 Z; s% N f9 H+ a8 J
sort(vItem.begin(),vItem.end());//排序
$ {% M% d; }2 D7 n //////////////////////////////////////////////////////////////////////////1 e, d: u- g5 c& `* w
//交换 }9 g% q, a% u& n! e {# A) b
for (size_t i=0;i<vItem.size();i++)3 v' Y/ p9 M3 w/ t. |% X
{
! O" @! L3 f$ j! \# q5 q. I" M //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: t4 u. T3 f/ V2 T- Y* x$ h
pInvSort->Add(vItem.nIndex);
2 B- i, V# u: L$ _0 H, I: C }: h$ |8 I: E- z- ]; m/ \8 F- y
BYTE nDestPos = 0;
4 V# B( R1 ~0 `# ^& [* e' B for (int i=0;i<MAX_INVENTORY;i++). n) @% G& @# j4 d
{
4 J/ V6 r3 s/ `5 ^& v* z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 ^+ }) J0 O: q+ b: O
if (pItemElem)
$ F1 N9 A9 D n1 [/ ?+ z {, E3 Q$ g9 f" Z( ^ W5 g% R8 k
if (IsUsingItem(pItemElem))
6 P8 E8 P' U% Z, ~ {. q2 x7 b$ H9 u
//这个位置无法放1 n) q8 U* z# e1 t) q- W, D2 I
nDestPos++;. w8 ?0 s$ H4 o* L, }; p
}
, @) R/ _- {' R m/ W b% ` }5 v9 P, A6 l. S" R
BYTE nSrc = pInvSort->GetItemSrc(i);
( A; {" R" ? H( u6 s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 M Y9 k- N9 W5 v2 c$ `1 i if (pItemElem)
$ e5 ]: h- ?, w# T {
/ ~# O8 X- q, ^ if (IsUsingItem(pItemElem))
5 m& G7 P0 q6 l* |; z2 A! X {- `- ]0 W9 P- a' T- {6 A; L
//这个道具无法移动,跳过
, K c! F8 h1 ]: H& a& s$ X1 z' m continue;
1 f! o; P; U2 _' ^- E7 }) ] }$ U" O% t: Y( a7 t
}else{
+ w1 s: B9 z9 K3 ] //空位置 不用动
& y) F @2 C; n* O# p9 Z9 y0 q continue;
9 B5 E- b& [- W3 ] J W# L% ~8 @! X J }4 V r) m3 z: H2 Q# |7 n
//////////////////////////////////////////////////////////////////////////
- }& t& K b( n8 v" k+ U0 j% ] //开始移动
2 a2 _. [/ s5 Q- O5 K/ n1 e3 z if (nSrc == nDestPos)
8 t, z2 C& `/ b, P1 o' _0 N/ m {
" A# @* ^' N* U* j$ r //原地不动
1 Q a0 M8 f( S2 C/ V, E nDestPos++;+ ]6 O; L: n# u+ K; E$ ^
continue;: r6 c8 p% k5 o* t' p8 N0 Q4 ]
}
A' ~$ S, q. p- N) d4 @7 n" E pInvSort->MoveItem(i,nDestPos);5 ?# q3 f0 b# V3 m) X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, N# P1 h; J: ? Sleep(5);
+ o% `$ m3 P+ Z' Z: x2 l. ~ //Error("移动 - %d->%d",nSrc,nDestPos);
2 W {* c: O( ]0 O" _& V nDestPos++;
, E8 i% \( q9 P' e2 ?( j }1 b* [$ }8 U9 D+ ]1 ]0 n7 K8 T$ c
//取第一个元素的信息
/ c( ?3 ] Z4 ~# K# \+ u7 @ /*
! K% T& h v. ^0 |6 Q# Y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 p& |/ b+ G8 }- a {0 S. `1 Q( I' m8 p( I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& [2 B( W) u+ m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 p( D3 q8 V7 O& A1 d7 c" C }4 f' D7 x" W( |1 U& ]8 H L
*/
/ Q+ L& @9 S7 s* E; e0 R //////////////////////////////////////////////////////////////////////////
- I$ \( y+ E4 R1 [ break;4 E( { u! z/ R" w2 P3 W; \7 R
}
0 N/ l L8 p0 E. o- h/ o# i0 ]) } } . D+ K& Y% p I |$ j( K
}
) E4 U; a: c9 w$ O/ [m_wndMenu.SetVisible(FALSE);
4 l7 X4 S, v i( |* i: H% V7 q' _/ H. W: }% H
--------------------------------------------------------------------------------------------------------
. D1 u! d d3 X( h, c搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 |$ V* j! v; E+ y4 b+ h{
$ U+ @' i. D5 x" B& W& OBaseMouseCursor();
) F* R( a8 Q" l# h( M4 H" H5 L) w}
) ^/ T ]6 s2 f2 \在其下添加:0 f" H# f7 X! W1 S& W) \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* P+ h9 q+ f1 c+ N- D/ a
{' [4 d! m- q' p& [
m_wndMenu.DeleteAllMenu();6 x( k+ Z- F( f1 S& E/ r& k
m_wndMenu.CreateMenu(this);
7 f* z- E! Y7 }0 ^9 Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) S6 N8 Z( r* }$ K) w, b* m/ h" S5 ^
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- r& c) L0 |! p X$ v) ^8 l
{! _2 c! T7 _ J6 ~# G
//P以上级别才可以删除所有道具
$ x3 k6 e5 ] q. Z- }' W' ^ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 T: _, }; A" s/ u: P3 j6 l}
4 N# x0 R5 Z2 A; a* w. }m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ x- X; U/ Y2 X1 J( o7 C5 B2 ~" Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 S' ^0 q/ F. [0 M2 P1 o
m_wndMenu.SetFocus();3 `0 T6 o0 @; ?
}. ~4 j! [% Y' J; u- _
------------------------------------------------------------------------------------------------------------% o" b- e/ e( g3 |! G% o2 P
*************************+ m0 I7 _8 y ^$ w( J# N& j, w
WndField.h文件
2 l$ M8 W' ?+ X& ^% K4 Z*************************4 E# i7 K8 m7 b. b* B6 F
搜索:BOOL m_bReport;1 {/ F. y6 B3 {% n
其后添加:
3 f; B! q3 g/ U2 HCWndMenu m_wndMenu;
0 c! }0 r% |; ^% ]% a9 L9 m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' A8 b* [( A2 |( q2 n! ~其后添加:- N+ s9 q5 i, N5 L
virtual void OnRButtonUp(UINT nFlags, CPoint point);8 u, }3 E! h7 R7 I; q
! l' h( Z$ z! ~& m( r
F# Z- ]5 b: h& g' C2 i9 Q |
|