|
|
源文件中_Interface文件夹下WndField.cpp文件0 N: b& e% U5 P* R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ O p8 l0 @% t+ U8 G
" m" s4 K6 j6 Y. p& m; e
struct sItem
$ g8 Z- b5 f; L8 t- G1 a8 E3 u{$ z/ i4 W, {$ s# }# A
DWORD dwId;
1 Q+ |$ V7 C4 X0 K) h. A& YDWORD dwKind2;
1 D2 c; A7 M7 e: C, UDWORD dwItemId;$ M/ g7 {8 D; J" i2 h4 \
BYTE nIndex;
, b% U' k* x( b3 vsItem(){
5 ^' n+ z8 ?# [- | C' [2 K* L8 E dwId = dwKind2 = dwItemId = nIndex = 0;
6 ^) X6 e" }* s9 B}. x* O+ a6 B l1 S8 G- b
bool operator < (const sItem p2)$ ]7 r8 P" s4 z' q6 K! q
{9 k' L7 f) V& Y& A+ L- i! {
if (dwKind2 == p2.dwKind2)! W3 y" u, Q# i F% C; }
{
1 ]3 s9 |6 X* [1 s4 T# O- c: Q/ Z0 b2 X return dwItemId < p2.dwItemId;
; l7 d$ Y \$ m O1 W, S% R }else{0 A3 `" B; i' Q3 v
return dwKind2 < p2.dwKind2;* Q9 M& R, L! n
}! J0 O+ b( Z/ V6 x1 Q( _; F
}! m2 }! s# ^5 j: D
};
( {2 k8 ]2 `+ F9 t) B& X7 w& uclass CInventorySort! U2 ?& y) W) R8 s& O" }
{' O, _3 `& z- n( f) c
public:
( n" j% | p# x! g; {2 @4 hCInventorySort()
) N# Y7 M: _, F ]{/ D+ v% I; u E4 i" D% n; \
m_dwPos = 0;1 r- U1 k' K! {8 l1 X
}
9 t' T: V. | t- R( `% I9 i~CInventorySort(){}
: S( C% M( [% h- Bprivate:4 p; X* X# F0 p% ^+ h6 N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; z4 _* x! r- n7 B: ~, H% eDWORD m_dwPos;
1 {0 [8 p0 s' k1 r2 o9 _public:
t ]5 t; W. m Jvoid Add(BYTE nIndex)
* q' W. n6 V4 u{
3 @* e" C, T \7 }4 e- d* c; v if (m_dwPos >= MAX_INVENTORY)5 r, Q8 R- I# t- l: g& {! b$ M
{) C" Y7 g& Y% S" C* J- T6 Q
return;" t/ O, p' D1 Z! J
} H- k: a& R8 V) W
m_Item[m_dwPos].nIndex = nIndex;
: w& I! K" v0 {6 M8 Y, W& H' t* B9 k m_Item[m_dwPos].dwId = m_dwPos;- ^) a5 f( g' Z( a' w# @! x! ~' C6 R+ ?5 w
m_dwPos++;5 ]" E8 i! K6 ~; y. k; L
}1 X) G% O; u. r* j
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ g0 x* Q7 u$ k5 r* P' D; x{ h/ U8 @2 N: o0 O6 b6 d# Y
for (int i=0;i<MAX_INVENTORY;i++)
: S1 Q4 C7 T1 B1 x) h. C* V {7 K2 |$ q- ^2 _5 S2 ~
if (m_Item.dwId == dwId)& h& Q0 l& a1 [ Y d4 w( G4 v
{
+ p. {5 K+ d3 }7 o) ~ return m_Item.nIndex;- D. u* p$ R8 Z7 E: d J" L% y' a2 W
}
3 \) w, t& T) p' W/ a ? n }/ k6 `' o" J, [
return 255;* f/ z1 m) l7 ^& z, `/ L8 ~- o- M
}! {7 ~& @# e( c* M7 I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 {5 g, {% V5 Y3 d{ \5 n$ d! u3 U5 T. ^+ ^( L
BYTE nTmp = 0;
2 S' {6 }" n8 ^6 S4 |7 n2 u: R bool bDest = false,bSrc = false;
8 I4 D) z P8 f! I; { for (int i=0;i<MAX_INVENTORY;i++)7 n' J& t5 @. C) X, y/ l
{- X0 c. X" F7 c* }% P3 ]
if (dwSrcId == m_Item.dwId)
/ P7 t1 G3 u9 i& j { H8 Q, K4 p( p) y+ K% [
//id相等 则 改变对应的dest和src: L0 }# z a$ o6 V
nTmp = m_Item.nIndex;
C. \9 v6 |" D8 @3 \: I m_Item.nIndex = dest;
* u4 z4 j6 A) ~4 X. w/ b( @6 b }. h: r- `9 Z+ M9 h. Y& V
}- `3 j( K, t4 O* b, K& o: p" B9 Z
//临时数据保存完毕,交换开始7 z. a7 d1 D/ t8 }" ^
for (int i=0;i<MAX_INVENTORY;i++)
3 S$ r" Z7 r1 z8 s% h2 y7 s: U, G {/ ~6 {5 w; E4 E6 z* P: c7 V
if (dest == m_Item.nIndex)
. n, x! \2 R% G) E9 Q/ I, } {7 J' Y" i1 b$ W2 J1 d/ m
//id相等 则 改变对应的dest和src
R5 t3 f6 ^: G% | g. O m_Item.nIndex = nTmp; \) B1 d/ g; U1 `! e, z0 ?
}
% N v, m9 c/ ~3 G3 v }
6 H% k* p6 i; q i* r3 u}! t* I7 n3 z6 q$ _' `
};
- W% t0 r3 J6 u7 t* U-------------------------------------------------------------------------8 z3 B# ]1 E S; R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 m1 a2 Q3 X7 \/ A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; [" A# a/ b8 _; |紧靠其上添加:# a5 k+ T2 [3 y0 f! h4 j
if( pWndBase == &m_wndMenu )
1 V% ^. ^! K; A{
; e' b4 D& X2 W# I. z4 F: ^2 H switch( nID )
0 Q# {9 E- B* w {3 q. X0 l) B; y7 ?
case 2:5 y9 g+ z0 [0 z
{5 b: V/ O+ A* I2 S q( t$ t& y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, z; ~5 N- H0 G5 _ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" A1 E, C4 B4 q; j7 t$ Z
{
/ T& C7 J8 f+ u# c x break;( Y) K5 z6 {4 h5 Y9 J& f, Y
}* g- d' f6 ^: F8 R9 Q2 [. y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ R L% T7 {, H$ y) S+ Y( W0 |) k& l
{' f4 T1 \% Y) z6 K n# D- u% a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* F- L2 n8 T. D! H" x6 ?
if( !pItemElem )
4 Z. @$ p$ d; o2 Y6 R# M continue;
( R0 } P5 p1 P% W, b& ]8 r3 d) a if(pItemElem->GetExtra() > 0)
; N7 {9 t" N& m* m- V continue;$ a3 \1 F$ v7 q0 x% S o
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 _! k3 x4 `, j o
continue;* T9 W! m( [$ }' A9 N! H& r. A b
if( g_pPlayer->IsUsing( pItemElem ) )+ q8 [! b; m3 E
continue;7 E. y" y4 x- r: b; {
if( pItemElem->IsUndestructable() == TRUE )2 n) ?; K- F6 _- y
{
+ p& F3 i; g C) P7 b) X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 y1 W3 e4 \: ^6 P continue;
& E4 U6 t% }5 a6 ?- l% ` }" m3 T1 u+ A5 i2 E: p/ P0 y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 ]( p; r( j" y0 Q5 v7 n
}1 r& e2 f0 G' o! y
break;
( S o4 ?! h; i! E O }& U9 x7 ~+ \, c {, B
case 1:
- z; r+ T" k; k1 f( ?5 r3 W {0 F( g7 a" \% `4 X
//整理背包% w0 P4 U- {5 ?# b6 `$ o
//////////////////////////////////////////////////////////////////////////, K) U( e! `) N8 T' y" T: Y3 m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' n# X! Q8 Q8 Z: l; A* x8 r; N //////////////////////////////////////////////////////////////////////////
/ Z( ]: K. c- B0 J- Q //////////////////////////////////////////////////////////////////////////+ I% `( I$ k Q
CInventorySort* pInvSort = new CInventorySort;
- A3 L) q3 a7 R0 @. j3 I$ e, [ vector <sItem> vItem;; [' p8 N' p( H. b6 }4 x
vItem.resize(MAX_INVENTORY);//初始化大小! s; f3 L7 O* r5 i; b
//////////////////////////////////////////////////////////////////////////* N' j7 G- j* P" Z+ ~/ ?
//填充数据
5 M8 [- ]" k" n- ]4 ], E for (int i=0;i<MAX_INVENTORY;i++)
U/ ?0 ^! ^' b! n/ c6 Q7 C1 {0 d {* w+ G# Z" E8 j( } _5 I$ z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ c$ Q" _% E$ W# `% ~ if (!pItemElem)
% g/ r* M; ^) Z3 e {1 I7 T# h7 z6 P5 L- ?0 G5 p6 q+ p
vItem.dwKind2 = 0xffffffff;
) D a5 Q% ~+ O3 I' b$ ` vItem.dwItemId = 0xffffffff;0 _8 h: D& S8 F5 i% W& Z6 h
vItem.nIndex = i;0 U! R, H6 O5 L9 K2 R
}else {
}2 y9 F9 U8 e; w, E/ x ItemProp* pProp = pItemElem->GetProp();% ~- b7 L# G6 r0 }) f" ^6 y5 ?) p
vItem.dwKind2 = pProp->dwItemKind2;
0 M, x( |0 f' R1 y! G% ? vItem.dwItemId = pItemElem->m_dwItemId;
5 o' |- {* Y: J& I7 b+ _4 U vItem.nIndex = i;
. e! O) D8 h) I/ o }
" n; h1 T) D) W0 ?! b4 h9 Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 _( x% Y2 ?' h9 P
}
5 c4 A- M5 s! v- ] //////////////////////////////////////////////////////////////////////////5 v* e: b$ z& h: s
sort(vItem.begin(),vItem.end());//排序+ H! _( i$ Q9 _% `$ a
//////////////////////////////////////////////////////////////////////////$ ^0 \, G4 M, U; z* v5 _% e* T/ o
//交换5 Z- C1 h6 C1 b
for (size_t i=0;i<vItem.size();i++)" E5 z8 n W- H8 n3 L
{
7 e4 ]% R6 J8 j% K% L6 m6 C0 r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. c! O6 `* E% W8 h" f9 u pInvSort->Add(vItem.nIndex);
- r5 p. o6 \# C1 q/ c1 Z }1 Z# @6 T2 v, o! T% ]0 P
BYTE nDestPos = 0;
! q% o# F; V, ]2 P! E for (int i=0;i<MAX_INVENTORY;i++). C& [* ^* I2 m( H& g- l" N7 S/ Y
{
' z/ W1 B. Z/ m* f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 c M( x( N; h( c0 n5 Z& } if (pItemElem)# G# K) K% Y2 q3 J
{. R1 v# M' n7 k- Z6 F/ b, p& K% `
if (IsUsingItem(pItemElem))
' W' C* Z% l. O: w5 }& o {1 l) x! a) k& O8 [% j5 h& @& u
//这个位置无法放
2 U' y* [/ V/ M5 z4 T- I/ Y) w) t nDestPos++;
. l0 Z/ t1 w, K; O! j) M }
8 q+ F2 b; _! S9 o7 ?# ^; |0 { }
+ D3 }: t! p! w7 u BYTE nSrc = pInvSort->GetItemSrc(i); ^* T$ l* ^' q- k% E) C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% T. s1 c) D8 S7 W
if (pItemElem)
. s8 Y9 q+ Z2 h: O {
! }' n1 Y% S2 H- J$ e4 G6 V if (IsUsingItem(pItemElem))1 Z) S% Z, C" i
{
+ L a. c& E& P/ A. u6 D8 Z! E# r //这个道具无法移动,跳过- g* |$ h, v: K- g5 v! `
continue;
) `/ F+ ]& k- `) j }& b) m5 y8 w1 g2 R7 s
}else{" q* P+ e3 o6 R# j- b2 G
//空位置 不用动
' H6 v8 a; P/ h- K( F* F8 p! R continue;+ e! M9 ^. I# w9 |% T; d4 p: ?
}2 }( }% b+ h# P# R
//////////////////////////////////////////////////////////////////////////9 V( [, y. v3 j4 ?7 J
//开始移动- ?; r( B0 q7 p1 s
if (nSrc == nDestPos)
- j5 Y/ y$ Z7 o* b ` {
' y- n* f. s/ r5 s1 d1 |* b' K; G //原地不动( l9 d+ P/ f. j. h7 P
nDestPos++;7 X! \7 Y7 U9 @, F9 Z2 T# J
continue;
' D# b+ ]* [. o. Q0 g; j }
( k0 ?, ?$ }7 A: J9 g# e5 X pInvSort->MoveItem(i,nDestPos);
4 c& `6 Y( m M* `# k g_DPlay.SendMoveItem(0,nSrc,nDestPos);
K- T5 G0 n. F a7 f( l+ g" a Sleep(5);
: l( u- u3 @. T! ~4 e) x! s: X //Error("移动 - %d->%d",nSrc,nDestPos);
) E# C: w6 z' @ nDestPos++;+ N9 Q( F- b, E; K: R. Z+ C
}
' N [, s& e; C9 t //取第一个元素的信息4 E/ e4 e |! A4 ^ F) b+ D
/*& ^( w0 o9 ?/ l; C8 m
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* p/ D( c1 P V# j% y) n* Z
{
' {$ d d. J# O Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' m6 g7 r3 ?- S3 {# L* r8 f g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 B0 r/ c' v& `. r& ]$ {. ?* Q' I A
}
3 K7 y* I& F& b* [0 U */
1 ^5 {% F6 O# s( ` //////////////////////////////////////////////////////////////////////////
' Z( ~0 i& M+ [2 V! M break;" l. l) Q5 h6 q! W. a
}
6 S+ w6 z: G2 i- H* k1 x9 x% o } 3 N; Q% D7 t6 N! \# A! o# @/ Y& n
}
, s( `* [: }% X h P/ k6 ^; jm_wndMenu.SetVisible(FALSE);3 P5 k# C( T% M8 H
) u2 ^% G' y, B
--------------------------------------------------------------------------------------------------------: \1 r3 l$ u Q9 C6 I! C
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 v2 ?! k$ L( N6 g* X) Q- V+ l{
" @, K* w$ D- U4 S+ ~0 w/ ?BaseMouseCursor();. E3 F! ?& {, q* I( `( i
}8 \6 J! D6 e' S/ q
在其下添加:
+ m3 j; R- i: B/ Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 Q# {; s6 f+ B, f8 u+ A{4 j' A+ J1 l V2 ]. V* f9 J# ?
m_wndMenu.DeleteAllMenu();
; s/ H; T9 w u6 N9 s3 nm_wndMenu.CreateMenu(this);: {( Y5 u$ B0 Y c5 ?9 z3 Q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 L& O& @/ _) v' D4 M5 n3 z) z) a7 }9 E$ l: z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# ~, P" D; ~4 g6 o* H9 |' q
{2 P& [( C! \9 b$ M7 X
//P以上级别才可以删除所有道具
4 o7 p3 M3 G( V. Q$ c: R9 x4 W m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 j, \4 r8 w' {+ R}
& ]3 H% g( O" |# }% U3 k3 D7 h, Wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! @) V4 B" M" Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ C, `. c. s4 ^7 {* ?
m_wndMenu.SetFocus();8 b- {$ s4 `/ o
}* V- Q. C# w8 k
------------------------------------------------------------------------------------------------------------" d' B! y9 ]% ?! m3 f
*************************
3 @3 n8 u4 Y6 M) M! \) K: c# C jWndField.h文件
+ Z# ]# @ K( C. G4 K8 X*************************
! P; k) c( e( U( x+ j搜索:BOOL m_bReport;
5 H7 B" o: p1 J4 f4 p$ J" y其后添加:2 |2 M2 ` A9 Z$ H. u0 K! J
CWndMenu m_wndMenu;
8 f8 A& x2 D2 j; S6 y$ A5 d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( U: }; O7 \- E$ B' i* p
其后添加:, W$ w1 P, I$ X
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 C/ L: A+ Y% d7 g, }
- p3 O4 _ W3 {* g1 |; U
3 g% X/ R% a/ e, X4 j2 y; U |
|