|
|
源文件中_Interface文件夹下WndField.cpp文件9 ~& i U) \* ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 c5 Y1 S2 n3 u; ~; M* d
) q7 f6 j+ e4 P9 O: M- ^2 F
struct sItem
" [' Z' D, J# ?6 J) o! Y{
4 m; w" }0 ?& X+ V* EDWORD dwId;3 ^( H2 Z, I; S6 Q' F) E
DWORD dwKind2;
, ^- ?% q% ~% m% O5 }- `/ fDWORD dwItemId;3 c9 G) n m9 [5 H, s
BYTE nIndex;
/ D e8 |) r. |( a% o0 p- H5 KsItem(){( m4 ~+ a7 [" Q: D/ J
dwId = dwKind2 = dwItemId = nIndex = 0; G* @* C$ T7 Q o/ s0 J0 D& l
}- a% v7 z' U" f U/ [" ]
bool operator < (const sItem p2)0 d& F/ e8 G& U" o; U( D7 I B
{
! @& g+ ^- V+ m/ m if (dwKind2 == p2.dwKind2)
* A0 ]" f _7 l* P) h, n {- l' U2 M9 ?5 u1 k/ V! N7 H
return dwItemId < p2.dwItemId;
; N) `2 u6 c" J( h9 m9 B! C }else{; Q/ A( K- z, e( R6 p7 `
return dwKind2 < p2.dwKind2;
: [8 S: V1 P. t" J } v6 J, B# |& G9 g. \1 s6 _
}
7 ^: d1 v* X s0 V% r, b* i. @};' `% w0 \( P; Q
class CInventorySort# w: x% }, i* ^
{
1 M: Y* @6 U$ G; C- z7 [public:3 c1 k" u' E" w% n8 p
CInventorySort()
. o9 \# l, J3 I2 d6 u/ |- X, @{* c0 { d; s- a. H% s7 [( G
m_dwPos = 0;
( k. A% a4 S" X8 L" E0 k: z+ f}
- W9 A' i2 ^, O& k( W~CInventorySort(){}$ o" w' I: f8 j: z- m
private:2 G0 K$ p8 C8 l+ d5 H) I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 C: e, ]& K& j( |
DWORD m_dwPos;/ g9 x/ b4 U- f8 I( K
public:; L) U2 h `) j8 x
void Add(BYTE nIndex)( o R: s9 [ g
{
# c9 j, k6 N9 F3 U6 c ^* L if (m_dwPos >= MAX_INVENTORY)
1 N; r9 H. x* O5 z: k9 U# C {" F$ f4 a* N7 P: l1 ]
return;5 ~% ?/ o1 [) `# K3 D
}1 C1 Z) x5 {0 m
m_Item[m_dwPos].nIndex = nIndex;7 {$ J6 X$ U5 [$ h* S& k
m_Item[m_dwPos].dwId = m_dwPos;) f- C8 a6 T! S5 u3 q, R) y
m_dwPos++;
3 z- H6 q- b1 n}
$ [; \) x8 }9 f( |1 aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 y4 M0 I9 n3 O
{
( B G" }2 j' s. X for (int i=0;i<MAX_INVENTORY;i++)
5 F& T! J% ]. B+ R: p2 h {3 w$ N/ B6 X/ R! e& q. y. m; n: X, N3 E
if (m_Item.dwId == dwId)
# h8 |4 T, H( c9 E/ n* \2 S) @ {
8 O1 K- M9 A( T: M return m_Item.nIndex;- ~+ ]/ P2 [: F" |! n# r* o
}
6 }1 V6 I) d, c$ z) w t0 k% A: c }$ Q1 R8 T0 E `: E
return 255;; L* V1 f. K. [0 \
}) `4 j: v8 ~& X% ]# `2 P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! b u- R( T C
{
0 u$ i, H# L8 H8 i* G7 B$ I BYTE nTmp = 0;$ E5 B; @: _- K# f
bool bDest = false,bSrc = false;
- r& U' n1 R4 i9 D5 R, P/ X: G* H for (int i=0;i<MAX_INVENTORY;i++)+ i- m! [: G" h. y; e
{9 ]# X8 ?. u( |4 R
if (dwSrcId == m_Item.dwId)# Y2 ~( k& y/ S8 a
{
% {3 b" Q( i- o" i //id相等 则 改变对应的dest和src7 c x* R! L; ~3 Z/ }- K6 i! G
nTmp = m_Item.nIndex;
- U! S8 T1 N3 j5 Y# l' C' P8 l. ]( x2 G/ M m_Item.nIndex = dest;+ e0 z- f+ j+ Q0 l$ B+ _% X
}2 P* q2 _; ]" z3 E0 F
}
5 g3 y G6 t7 X- Z) O //临时数据保存完毕,交换开始
3 O/ w4 w; y2 L8 U2 }6 N, `2 T' @ for (int i=0;i<MAX_INVENTORY;i++)4 n: ?: W5 N3 v& i
{
0 ]: }2 X' h/ Y% r% R if (dest == m_Item.nIndex)1 n/ O6 P: b1 b
{! ?, i0 j$ V+ \! {" H& Q! O: @
//id相等 则 改变对应的dest和src7 Y- [3 y) w* H# O" x
m_Item.nIndex = nTmp;1 R, m% X6 u) e; o5 N
}
0 U0 p, U. I$ |. m }
" u( v* e' x* u8 R" h6 x8 o0 b7 |2 B}
" r6 j. j* z9 s7 Q ~9 d};: C u/ A) v; Y) G8 n! F) r/ }
-------------------------------------------------------------------------
5 c- C, H1 e# E2 C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 B& B3 J! _ h" e# C/ E4 E1 o% K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- @2 V/ {9 ] e. g: z紧靠其上添加:
" J; ^8 s$ ~$ [9 z7 k( z, G9 uif( pWndBase == &m_wndMenu )
/ I, p& g3 G2 K% {" Y{+ ^0 Z$ l0 }& l, z8 ~% r' T
switch( nID )0 }7 ~, ?! L$ i
{
+ p& ]7 g6 x4 D; n, u case 2:/ Z0 H- k: m# [$ c, x
{
: i& G- g/ a V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" `: ?. C5 l" d9 f- g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) H* [" F! m5 A+ z2 Z: F4 H
{
0 k8 I. ~9 ~/ W9 Q break;
( `# I% a; A( [5 s! G( F }
9 \3 u. v) K) \ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" p3 T* @2 K; ^# L4 ~$ \; s7 }/ a
{% U W; A) L. @0 }- @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- {1 ^# Q% h9 \) ~( u* o
if( !pItemElem )
9 K/ E( @( q8 e { continue;+ l4 `2 e- c5 U7 b4 ?
if(pItemElem->GetExtra() > 0)
( F) B% t1 r1 @. y* y, h continue;9 k4 x& h# R' T" w7 h! a* Z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / l+ O9 M; A3 }3 \% N
continue;9 @& E. g- K; T4 ~4 H
if( g_pPlayer->IsUsing( pItemElem ) )8 O Y4 T& f( s! w$ ]
continue;. f a" X- C: ^/ u" |* D
if( pItemElem->IsUndestructable() == TRUE )
2 C- y9 x& {0 X! @ {
7 ]; u4 o4 i/ i- h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 }- N' Z0 u9 G, o$ M5 D8 ?; ]. @. K
continue;
9 [$ f& R! O; \: | }, m' U& l5 U3 O$ h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 j0 V5 }/ U9 g- D9 z
}- i. a( @3 o% k: ~4 m% Q+ Q4 i" |
break;
( n: v# s3 G4 [: t }1 B: S" T( }! L' |
case 1:* i0 k) L0 H+ L' F, A( q
{
\- {: z* p: E1 l" H) i //整理背包
$ d' Q9 r7 T: q9 B3 @ //////////////////////////////////////////////////////////////////////////
4 Y/ H- r- f6 B s$ E1 Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& L4 o& V5 Y( k! K& r //////////////////////////////////////////////////////////////////////////0 P" l3 S3 n; { G x& `7 E& `' l3 m
//////////////////////////////////////////////////////////////////////////
+ Z/ H: ^+ S9 v, {4 W CInventorySort* pInvSort = new CInventorySort;3 b% Q8 ?/ I9 H0 y$ }; t9 Z# g
vector <sItem> vItem;
* D7 d$ S# t0 x" _8 {5 [; W, Y vItem.resize(MAX_INVENTORY);//初始化大小$ | S! p9 R7 s* J
//////////////////////////////////////////////////////////////////////////
8 ~' n4 n+ l1 e8 M. C, z, {4 n; Q //填充数据& O$ P. V* K8 j) @# q$ n, V
for (int i=0;i<MAX_INVENTORY;i++); E4 y% w7 y* o+ M
{
. K d& b4 D* `$ Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, L% a$ L% R; c8 R1 V
if (!pItemElem)5 [$ A9 Z( P8 t0 N* N$ D
{
, o- E* H3 W. a( X! b# d vItem.dwKind2 = 0xffffffff;
/ q9 ^7 M, P$ r0 j3 P' m vItem.dwItemId = 0xffffffff;' b; U: T+ ~) I0 [8 D; z
vItem.nIndex = i;3 Q) {/ @1 P4 B! f f+ Z/ J/ c7 e
}else {
' T+ P. J% j. P8 ~ ItemProp* pProp = pItemElem->GetProp();; l! e s$ C4 ]7 [* ^
vItem.dwKind2 = pProp->dwItemKind2;
+ s0 ^6 G" p. x; g' x% W2 ~ vItem.dwItemId = pItemElem->m_dwItemId;
( y3 l$ P" K( r, A5 q+ z; I vItem.nIndex = i;
7 u$ Z l* \2 o& r; U }
, r! {4 T; B: b5 ~ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, {7 m l" ] ]; a }
9 }8 W0 z# P3 F- k //////////////////////////////////////////////////////////////////////////
# r i0 ?& v9 ]& c: ] sort(vItem.begin(),vItem.end());//排序
; P6 M7 z+ J0 D. ~ //////////////////////////////////////////////////////////////////////////
/ Z& {/ X1 x8 g* P( P- k3 e7 v //交换
u; k. t! c5 ^' N( @ for (size_t i=0;i<vItem.size();i++)
$ b) f$ h% k R6 o$ T$ w {
6 M% R5 E7 ~: R5 w8 h. A. A% ^" z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 U3 S; K0 P# q( T% ^3 S% k* V
pInvSort->Add(vItem.nIndex);
( O; H1 B' W4 W6 a }
, Q8 W6 a2 B1 D/ Z) ?& T8 K+ g BYTE nDestPos = 0;! Q: H+ Q% p' ]: N& k( v3 U
for (int i=0;i<MAX_INVENTORY;i++)0 O) E, U/ i* u3 ^1 s2 P
{" O9 W2 x a7 _" o: H& ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 d/ y1 ]6 q F8 X$ Y3 W9 m% w
if (pItemElem)
$ b; {( N) \3 ] {
( N1 d1 c8 b J4 a3 n& b. } if (IsUsingItem(pItemElem))
8 R5 S: ^0 \/ M {$ X. R5 Q) T5 P3 u+ P
//这个位置无法放( I' P7 w+ \) M6 u) B- x3 t
nDestPos++;
$ I( c& `% L# A7 K$ J }' P9 c2 m1 X4 K5 Q
}! S h6 Q" o6 U0 f5 t2 J; q9 |& ^$ F
BYTE nSrc = pInvSort->GetItemSrc(i);$ R5 S1 ?8 X c5 k$ z- I6 I$ i0 r
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; c' O; }$ Z2 x2 C( d# i if (pItemElem)" X, t' `/ J N! B! Y! O2 K
{* P6 N. b/ l' z
if (IsUsingItem(pItemElem))
7 V$ x2 S: `1 g4 g# p3 [ {" y- }9 H# v9 O* y6 c6 z% p# y3 N
//这个道具无法移动,跳过
) y7 Y# I6 \ s# E, ?1 ` continue;
& h* J( ?. n" L: W* A0 |% X6 H }: s* j+ z6 R& D, n4 i: p0 j x
}else{. k& [5 C9 {/ V+ ?# S$ R, T
//空位置 不用动
% g* e5 h0 Z+ Z& h7 r0 `2 C continue;
2 T3 A% N; J. W2 W7 d) v7 z }- }5 P; m( Q- S% `. _1 q" ~9 k
//////////////////////////////////////////////////////////////////////////
) \! a2 h) j. n$ c. ~ //开始移动
- P. _* f5 u' u0 R* m2 l# C if (nSrc == nDestPos)
@" F! N5 x7 U0 J1 e) i {) } V. _: @6 Q5 D# f& v) I& a
//原地不动
/ w @. K' \8 C3 U% N2 | nDestPos++;: a% q+ k$ n2 E: h+ c/ T
continue;, P# H5 R6 r8 R% E1 B
}
! Z1 O7 q- s" H% l pInvSort->MoveItem(i,nDestPos);( i% ]% e: Q Q- ^, m- q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 d) d- T$ G1 J" X& @6 o
Sleep(5);8 _( w8 m% ~! o; h( Y
//Error("移动 - %d->%d",nSrc,nDestPos);9 h: I4 o& e& J% w6 d1 a
nDestPos++;" i7 _( T5 q7 ]7 K3 \, h0 L
}
8 v& G$ l2 m- M3 b: Z0 J //取第一个元素的信息
3 t% J- `% q/ [# l$ }: s6 D( `5 R /*
( B' f2 `" C+ ^8 O% ?3 N# N) j: T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 i( n {1 y* ~9 o: l9 t {- Q, C! `6 h" u' {
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 {5 a" Z, c# t, L7 n
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ a5 l3 z' g0 E9 j( V( w }
" P/ B. \' Q4 r, @' c0 d */ g! o5 Z- [+ P( ]6 W; I
//////////////////////////////////////////////////////////////////////////; b9 C" G4 ^# S0 H; c
break;; \! P' A' o A5 ^2 u( B" P; x
}! f8 I; u: t1 P6 ~. D5 s& K. P% L
}
: l. h, w# h6 k7 V/ w! W) |) H: _}
+ ?: f& f7 _, w% Y& ^2 Am_wndMenu.SetVisible(FALSE);
* w) H9 D+ B) A- }" G
$ P+ @, s; y3 |5 Z) z; X--------------------------------------------------------------------------------------------------------
. x$ d' P2 s ~) v. N搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) i% S) r' t) \{6 H! y' r- G# E r6 s
BaseMouseCursor();; q/ j! N, {; p: X0 C9 {8 B
}" K4 g' O5 J7 [, u
在其下添加:9 ^( w1 M" I% S( a3 \8 H3 K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! q: g( ?/ T: U4 g$ J0 H) I
{
8 @. f8 a/ V/ U% L- b, pm_wndMenu.DeleteAllMenu();" g. G3 s- N8 Y. o2 E
m_wndMenu.CreateMenu(this);
5 z3 H+ U" \2 om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ t& i. P" G% G5 @2 m0 ^- O9 b+ F2 y) n4 a: ~9 D' w) P
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! c" H$ d$ F+ l4 ?- O7 d T
{, s) [ @ {3 ?6 j
//P以上级别才可以删除所有道具* J% D& W/ R% A# u2 O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 C- ~& A1 P# _$ Z
}
/ |& A2 z) S* t* ?) N3 Wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 ^' t4 K5 q* Z! c, r9 w# Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- d ?1 N) ?& _ G# P1 P) T" }m_wndMenu.SetFocus();. T1 W7 h2 z: N9 v1 q U6 N2 i
}
0 R4 |) \' f* X% u% n9 |------------------------------------------------------------------------------------------------------------* b3 y, p; G- R$ d4 Z: n
*************************
+ s2 F/ l# n+ H, Y0 R; rWndField.h文件
% m X3 f0 q& l- t5 [*************************! K. @) E- z9 B. ?1 ^& G
搜索:BOOL m_bReport;" Z L' \' w- H5 L) Y# ~
其后添加:0 L: }- Y6 f. e( |( H) c! G
CWndMenu m_wndMenu; k7 C5 d9 T3 P$ O6 X% z% P
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" m2 A4 G) o2 M, V+ n1 h其后添加:; ~/ ]! C8 v" c O# r0 U
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- W# F, a( L9 X; N+ v1 H1 K- p: d# c" l# @
, _# K8 f4 y4 S6 W4 Q( U1 ?4 Y
|
|