|
|
源文件中_Interface文件夹下WndField.cpp文件$ A& N& @2 g# Z& z$ g# }
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 l' h& I' r5 Z. H+ |, [8 R! R4 h0 w$ A3 [
struct sItem5 D7 T% E; Y( G: G7 o
{
! t/ d8 `$ E1 v4 `: EDWORD dwId;
3 }# y& i2 T9 `; RDWORD dwKind2;
9 e$ N3 J o- h1 |; U: qDWORD dwItemId;, P$ L3 w; }1 G1 ^% K! t
BYTE nIndex;2 i" p2 t, z/ p
sItem(){
& V( o' e' m- o6 B% [+ j7 X' _ dwId = dwKind2 = dwItemId = nIndex = 0;3 J+ T' M6 J: m: W
}& [1 `; _7 f% @" z8 U6 B
bool operator < (const sItem p2)
% _: E3 L ]) v6 f{# y2 E7 [4 f1 ]& K
if (dwKind2 == p2.dwKind2)
4 x; q1 C0 y' r2 y6 b0 t' m {
$ o; N! l0 @' { return dwItemId < p2.dwItemId;
# U2 F% ~2 v/ \; G) W" l( ] }else{& Y2 [' e/ U: i
return dwKind2 < p2.dwKind2;( W) u5 t5 ~; t& U2 z+ T, s
}8 R: l0 [9 d0 U
}( a% ~8 ^8 i/ e# G( x
};
+ l* O3 `( D0 i3 r V9 X P4 r1 oclass CInventorySort: {; |1 ]7 Q8 [5 ?& M8 i
{/ }# g7 o. P+ H1 d- D. {
public:1 U8 i/ ^, ~( z8 v
CInventorySort()
$ U# A' Q) G$ s" ^3 V{
; R7 V6 o I; {* v m_dwPos = 0; o3 h: Q' b+ l& w
}2 {$ _- @3 _8 g* e$ A7 Q' g; V
~CInventorySort(){}
: k5 i: ?9 x9 L- @" }& @private:5 {$ _# Y) O8 n/ `2 Q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% Q; ?% a7 T& y6 p, QDWORD m_dwPos;
8 H9 ]; ?! ?% Xpublic:
% i$ m2 S( h; |% ~# {; H" p/ mvoid Add(BYTE nIndex)
* f5 @1 C S6 B% E: [2 W{2 f( S! A+ G! b
if (m_dwPos >= MAX_INVENTORY)
: |+ V6 `4 ?- X {% e2 h; Z. `5 C
return;% y! K Y! I$ e% @
}
8 l! U: X8 i. `% N/ M2 {9 r8 U4 E8 e m_Item[m_dwPos].nIndex = nIndex;! u! o6 \" w3 t/ [) V d
m_Item[m_dwPos].dwId = m_dwPos;; ^/ H9 \3 R. ~( E9 d1 w: j
m_dwPos++;
5 i/ _ D+ E) F& M. V4 l% {}( J/ Z f2 p7 [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 J" K6 _, ?# [
{
4 J/ Q$ y: [6 l( } for (int i=0;i<MAX_INVENTORY;i++)
( A2 K3 v" {0 |( W% K( F' B {
: D9 G) O2 X$ K if (m_Item.dwId == dwId)) |/ X4 N; p7 j- {; F0 u
{1 k9 N% Y% S1 H+ D. U% I9 X- l+ D
return m_Item.nIndex;
' W6 z# F0 J& C2 J. w }
, Q( Y8 a# ~# I6 H# H, h }
% V- {7 k8 I: ] s2 {+ c2 ~ return 255;
5 K6 _4 C; F! }( o6 N}
* T8 M9 Y5 \) J* }3 Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, M& ^2 ]3 Z( |4 }0 C6 l. o! A{
; y- a. m) ^8 H$ j' P0 `9 [* X BYTE nTmp = 0;
7 m8 g# v% D% }" m2 ~4 V4 S bool bDest = false,bSrc = false;
~' f' h, _; q* q( q for (int i=0;i<MAX_INVENTORY;i++)
+ R% z: j- ~7 h/ \3 x3 s {
/ Q' b4 J& D6 W" Z if (dwSrcId == m_Item.dwId)) B5 V' v% a3 y( ]( ^& I
{
) N/ ^0 _% J1 `4 N" b3 g8 H8 [ //id相等 则 改变对应的dest和src6 X+ `: m: c3 W) o1 ?( m' G& E8 R! V
nTmp = m_Item.nIndex;
5 [# Y0 a' M1 C4 n% x* L! a, v- m% J$ m m_Item.nIndex = dest;
6 T5 A" ~' \8 w3 S- Q }) X* v& K; F3 M$ Z: T! ~
}
: U4 @4 T7 N6 i6 [3 R- M, Q) R$ @ //临时数据保存完毕,交换开始
- O: C4 M& O7 U. S/ |" K for (int i=0;i<MAX_INVENTORY;i++)5 f0 i+ v& {/ B& \4 X" T' ^
{7 R! ?7 C4 @( T- p* |, r7 a6 d6 u8 H
if (dest == m_Item.nIndex)
. P2 @/ y) W" p$ u7 K0 d4 c {
, D9 G: ~8 w$ q: f+ d. `- i7 G5 ? //id相等 则 改变对应的dest和src
0 _4 O8 V2 z2 x, D1 i# Y& v/ w& U+ Y m_Item.nIndex = nTmp;
; a6 z4 I5 e6 X" D2 C }- ^$ D; \8 [; |% x S, ~+ p
}
! C& a0 n- Q( g4 A+ x}' e4 R7 `' r1 O* T W2 s' Z
};
7 r ?! G( Q% b, {' ~9 _-------------------------------------------------------------------------
7 l6 K- u5 s! H. S% r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 B. w' _; ]9 r3 w! J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 ^2 ]: n3 [1 s0 t- u) i0 ]紧靠其上添加:
2 z4 l! ~6 A! F5 `7 L" B; @6 a. Oif( pWndBase == &m_wndMenu )8 K9 `- B/ {+ j! W6 v
{
v3 Y8 Y. N: M1 D switch( nID )
8 M$ @& R/ ^4 y7 N {! @' a5 |/ l1 `/ v5 T& a5 O
case 2:: m+ _6 ^( C/ P: s
{5 W q% ^5 a4 C" f/ {
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& Z$ g: m, y* p9 q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% H+ k% K ^& G" V {
5 \. l9 M z, G" \3 O+ \ break;
' v5 a1 u4 d5 d+ B) j }
6 Y! }2 d. z n0 H/ h) P1 A for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 [7 B& S; t) \6 r; i7 R$ j {4 L; g+ ^7 O! ]. _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, a9 S9 i. L7 v
if( !pItemElem )8 |- q" z- N' I+ @! s( B* p8 H
continue;& \& Y! j: z3 h5 A2 s* F
if(pItemElem->GetExtra() > 0)
: Q3 i# U+ p l! G% `4 _5 y$ L continue;
# l. V0 ^( p% r0 Z. P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & w- V. h7 B# H+ u# D+ E4 h' u% X: W
continue;
8 m! ^9 N/ u! f1 p& G* a if( g_pPlayer->IsUsing( pItemElem ) )& b0 V# I( c3 T) |! J& ^
continue;
2 |% D( O# v, e( ?1 N5 _7 V/ K if( pItemElem->IsUndestructable() == TRUE )
! I3 ^1 `* z7 Y* |- {; p2 g {
+ n3 T* r4 A8 \, u8 K+ q1 E g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& G, S3 ~- H# {3 Z
continue;% V0 b/ ^: W3 a3 V3 m2 L
}
& S# }4 y1 F( ]! f* w. H8 d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 E& [' V2 j7 a# D
}# m; B. N' b! r) f. l/ j
break;: H7 o6 v* P+ E$ O9 w8 T3 o
}* p4 ^; [* F1 }2 G/ T
case 1:
' ]& m% F4 a6 \ {. ]1 T% r0 c) n5 J3 i
//整理背包9 `* l' ]7 Z7 I7 O1 T. g1 L$ B# D
//////////////////////////////////////////////////////////////////////////
; G" r, o" {3 U% [' U //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ d* {- J- ]( S% A5 d7 n3 m //////////////////////////////////////////////////////////////////////////
' w, G& i: `& A //////////////////////////////////////////////////////////////////////////
5 m$ o, i$ z9 g8 ~ CInventorySort* pInvSort = new CInventorySort;
& N8 q3 s& |$ ]9 w vector <sItem> vItem;9 \% u9 q% Y- N" t7 L3 U
vItem.resize(MAX_INVENTORY);//初始化大小9 e! Y* S$ ?4 Y( S8 D: A
//////////////////////////////////////////////////////////////////////////
9 ?- Q+ h8 t7 z4 f x //填充数据! t7 N% j/ E- E8 J0 r. y0 J# f
for (int i=0;i<MAX_INVENTORY;i++)
! m( M7 P) @8 _6 c! m+ q- i {) W1 H# j# ~, a4 A9 m* r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; c: N) ?9 `3 ?% A0 G+ ^8 c& M* s
if (!pItemElem)
/ n; l8 i. t1 Q) n9 M; p8 m2 b {
% I3 V8 }7 C2 S/ b; j vItem.dwKind2 = 0xffffffff;
& l; z9 g# i! R8 N: h6 S0 c( y8 \ vItem.dwItemId = 0xffffffff;
' k* `, o( [% r. E vItem.nIndex = i;9 O7 a$ V8 N$ g
}else {( w5 u* s2 i6 `/ D7 k9 x8 Q
ItemProp* pProp = pItemElem->GetProp();
0 Q- ?- q$ j% k# z3 m9 b' k vItem.dwKind2 = pProp->dwItemKind2;5 Y' ]/ |) W1 u" L0 g5 a' `
vItem.dwItemId = pItemElem->m_dwItemId;! t- J: J# e3 [4 y: Q7 c) S9 E
vItem.nIndex = i;8 n, m d# H2 U7 W$ Q
}- ]: `, ^$ s/ |4 z( V' W: Q$ r H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 h8 g$ c- M, L4 f* N }
" g ^) G @; P2 a) {( M //////////////////////////////////////////////////////////////////////////
. Z( a1 P. l2 D, B: `4 D& k) \# l sort(vItem.begin(),vItem.end());//排序
% j! a3 L4 G2 g& g1 W' u' O //////////////////////////////////////////////////////////////////////////# ?1 f" N7 W, q) J, P1 A" u
//交换; x( r* D {% F% p4 w5 X2 N2 L4 ~$ r
for (size_t i=0;i<vItem.size();i++)8 A D/ m8 i7 }2 K# O
{. W3 e5 T1 \: f- J( _: G
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 g) s z( H& K% P s
pInvSort->Add(vItem.nIndex);) W7 m6 i% u' J/ [5 c2 ^3 U) s7 h
}
9 {5 \4 G, r4 @5 f, \+ O* h BYTE nDestPos = 0;
" O% [- H' Z/ A: ], y' D% } for (int i=0;i<MAX_INVENTORY;i++)
2 X1 o2 u6 n5 r8 b4 B2 E" L {
7 r: [+ X# `* n1 Y* x3 ~' C6 c( I7 H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 \0 J0 T# e) S# d, Y if (pItemElem)
5 X: }. x: P, \ {
$ K3 q1 H) Y4 B. k if (IsUsingItem(pItemElem))
8 P+ ^* ^! U: O' J! o {8 M# H" k+ W% G: N; @2 |
//这个位置无法放
# a# b4 f8 v. L- r nDestPos++;( {3 _4 _- S4 [- I! D) S) B. s# L
}) Y& c" I9 ~* P0 |
}7 [! q3 G' w/ O- h- K: Q, t
BYTE nSrc = pInvSort->GetItemSrc(i);1 @$ }( Y$ `# g0 `
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* O4 F0 u4 T9 B; _2 P if (pItemElem)7 E5 E. n6 P h2 F, E( i
{
7 w% [8 ?6 a% B; T0 a+ B if (IsUsingItem(pItemElem))
0 L) U; [( K6 W; n( I- ]5 z {4 g# Y& P5 S. I* b9 E
//这个道具无法移动,跳过 h: a% i" W' i" @1 w8 o! n' Q' n
continue;& X+ g( e4 ?% f+ D- A, ~
}+ c8 E+ g; V P' v" t) D9 [
}else{# y* G3 W$ R+ I: ^7 p; a
//空位置 不用动6 N8 S1 K- |9 h! p9 Y
continue;! A# ^/ L d0 N q" U# e- N
}
+ p; b# B! F# C" F: p. D //////////////////////////////////////////////////////////////////////////6 p9 G2 B, G# X0 ^' k
//开始移动3 P6 ^6 Z. R, e' q, ~
if (nSrc == nDestPos)
" A: r, Q1 v3 Y) ] {
( ~" ]: R9 F- M) ~5 i //原地不动
: K/ X. K( N% Y. U- ] nDestPos++;
4 G& S; E* U8 T$ ^( h h* w continue;+ B/ x& P2 Q. s% Y
}
1 U6 s! G E' [1 y; V6 m pInvSort->MoveItem(i,nDestPos);
+ B& c- t" W2 D+ v z g_DPlay.SendMoveItem(0,nSrc,nDestPos);; z5 B$ A1 p0 z% ?
Sleep(5);
/ y/ G% @/ }4 ?/ h6 {9 X+ N //Error("移动 - %d->%d",nSrc,nDestPos);
9 ~2 A5 [9 @) H u4 P nDestPos++;
, q& q( C# s2 ~3 M9 ~1 U. z }+ Q; b" E$ T: O* ]! b
//取第一个元素的信息8 o" \ l8 V4 f4 x+ C/ |) W
/*
, n2 B4 c2 c" ~6 @ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# s/ @9 V9 W5 d8 t6 o9 X( V: q1 I {. q$ f+ g& d- N& |# D" V1 I# K. N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& ^/ {" s$ _9 X# E& ~' y ^5 f
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) }7 q1 z9 u: | I- [+ _3 B1 _1 b
}
* K" k' f. b+ U* ]0 t* x1 ]( W */
" u! {4 l$ R3 k N8 c4 U% B //////////////////////////////////////////////////////////////////////////5 g, }3 h) o" v6 q
break;
$ X2 n# [2 X. A/ p$ B& w: W, v5 \ }- I( _2 n$ U6 |& @- f! Z3 `
}
0 F7 [ e& q' _3 W) @! ~5 F) u}* X7 L! |! x1 [! |3 J2 k! a
m_wndMenu.SetVisible(FALSE);
+ z4 E: h L+ [
3 @% A. P( A0 F0 v4 Q$ g! U--------------------------------------------------------------------------------------------------------" o4 `* m/ Z: j0 {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% c0 F- P, i, D* d6 [{: r# J& t' ]0 h# y' D
BaseMouseCursor();
: L5 _- K# n" X6 |4 K* e! M}
! {1 ^; H* \3 Q6 {8 U在其下添加:. Z% _' _- M- Q- @% b; M4 w$ @
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 G1 d7 }- l$ u/ G4 u. S
{
5 N0 z! V1 }0 E, a9 Xm_wndMenu.DeleteAllMenu();4 J* P) p1 l2 d1 r9 M; x& H' Z) Q9 h
m_wndMenu.CreateMenu(this);2 D" I: K8 m" q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) T1 Y2 L8 z$ ]3 i( R, A
4 Z% ~4 D3 V. m# }' ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 T# i3 p- G' [. o i7 t x. f{
. ]) B0 `/ c; ~, O- b% M //P以上级别才可以删除所有道具
. x( g: S8 `4 d9 Y" l/ M! j( P a5 F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- c9 @' d" _3 i- X! b0 A X% h: r7 k}5 Z( k `. `1 u4 R
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 u% A% I7 R9 W3 L+ t- jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' f$ k! h; d# E1 Y) S/ v( Bm_wndMenu.SetFocus();
5 z* \% o; ]+ c, [& v; q}, Y! t5 J2 T4 H+ m: }. L
------------------------------------------------------------------------------------------------------------# j0 ?, w5 [8 ?
*************************
7 s8 h c- ~* O+ f% P u: C5 _WndField.h文件
! A( K* {! u; D7 n3 l0 r( s }*************************. V5 Z6 q3 Z: ?; W
搜索:BOOL m_bReport;
- q& K [5 D1 f s; L( C其后添加:
- ]' t0 C0 y9 H8 s6 P( fCWndMenu m_wndMenu;
' s, z: E& _% Y) W4 g' K搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); E, P9 E. w* D; w% M8 o; t/ `: ?9 ]
其后添加:
% @- ], O7 a5 u. z$ X4 b Cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
& [1 t/ g7 x2 i1 e2 R1 X) F+ T5 |4 S$ M2 `% P# K, y. T
* K% O6 Z/ `* S2 u/ ` |
|