|
|
源文件中_Interface文件夹下WndField.cpp文件
K8 j5 R3 u" `. t9 ^, t搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ ]% D' V' f+ |3 R- `) i( ~" {
/ \* U% e, ?2 e: Y! L: istruct sItem
9 }4 d7 x. {, D{
* o! K9 K9 b! k8 e$ c1 KDWORD dwId;8 z, G2 M! ?+ V& ?
DWORD dwKind2;( B9 @8 Y/ H# q) m! h) g
DWORD dwItemId;* e, b+ Z9 q7 l
BYTE nIndex;8 V) z( B: j! r$ Y
sItem(){; @! U( V( K. D# u4 r
dwId = dwKind2 = dwItemId = nIndex = 0;
9 J7 i# U/ T# r}" h+ f7 l$ z4 u; z6 H
bool operator < (const sItem p2)+ O% }" t9 k% p `5 _' n% k8 ]
{
) k3 i! p9 q3 P$ D if (dwKind2 == p2.dwKind2)$ x0 {) _9 J- J$ u% G/ J
{1 w6 n, f- h) w1 x2 O; H" k! c7 L1 W& i
return dwItemId < p2.dwItemId;% m' P( u" T0 P
}else{
/ l0 Y: S6 h, X0 a return dwKind2 < p2.dwKind2;. B# q$ o9 g: |, |9 i
}
9 _, Y% M0 M6 y6 `}" o. x5 i( {! J! W
};8 R1 e! \( J- z+ x& P( m
class CInventorySort
7 }; N5 T1 {; L$ R. |6 ~{
2 p/ |0 w! C$ i6 Z" M D8 Bpublic:8 a3 V+ Y. b! \. I
CInventorySort()
; n$ j$ L9 V" G% [! {9 I{. K. s3 ?* r0 c- w
m_dwPos = 0;
! f+ [3 ?. m8 G- R& g1 N}
/ r$ D# K3 F, s5 ]7 r/ r' n b+ `~CInventorySort(){}* U5 s6 N+ o3 C( e9 @6 l# ^
private:
* K- |( N( C, V6 @) e1 KsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ ^) ^, @! h5 M4 m$ M
DWORD m_dwPos;
3 ^% j% Y) K- ~2 J9 ]public:
7 u7 H# \% ^* {0 v3 \void Add(BYTE nIndex)
) q& P6 M* ~5 I0 U% W8 n- G. `{9 X o# L. g- z3 V2 [6 t1 b Y9 u
if (m_dwPos >= MAX_INVENTORY)- S5 D& }! F& w6 c! S$ F
{
: C- n8 P8 `- h return;
; A ]: y6 E; a. P' J) m }
: `& |( x# k* N0 j5 p( L m_Item[m_dwPos].nIndex = nIndex;/ |) D- U# D+ t: q
m_Item[m_dwPos].dwId = m_dwPos;
. ?- s2 w) w1 Y8 L m_dwPos++;
+ e$ T5 j% p; s0 i}
+ P6 a( S1 Z3 p y* \: r+ F6 GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 c/ ?3 {' q7 \# r{' k5 _$ E% C& ?+ L$ }6 v; a
for (int i=0;i<MAX_INVENTORY;i++)- a- Q7 c% O' g
{" H0 n: M$ x8 L2 _
if (m_Item.dwId == dwId)2 ~/ k( v/ W0 B
{; a9 x% P- u+ l; J9 H* ~5 J1 S
return m_Item.nIndex;) k( t3 C8 e0 D' ]/ }' M
}4 }9 R' g' G$ B1 v) |2 I
}
+ L" {3 S8 Z; N# i5 w( \ return 255;
6 r# P* v. J3 j$ z, v}" k( _2 i+ O0 F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' Y+ N5 @/ c6 P5 \{% ~4 e. s" S0 Q* D: w$ N% R/ @
BYTE nTmp = 0; f" U' s8 z6 C% L0 i% m* f0 ]) z
bool bDest = false,bSrc = false;
9 f5 o4 X% t' f3 [/ `/ ^ for (int i=0;i<MAX_INVENTORY;i++)
1 _* s) N* h! H* F% B) A {4 Z5 p. q i; L9 t3 ]2 a! a6 e
if (dwSrcId == m_Item.dwId)- f) R& `- J' ~3 U6 G7 }
{
' g) v5 ?" k5 _ //id相等 则 改变对应的dest和src1 ]6 p! S9 ? F' {+ s
nTmp = m_Item.nIndex;
& y9 `1 l4 B, t$ L! K m_Item.nIndex = dest;/ P9 x3 I. R! I1 J' M: q/ W
}
# V+ u$ J p# X# R' v- i D }
2 S, r! F) G9 B, y! ~& f& B //临时数据保存完毕,交换开始7 p1 U6 B! s$ n% m. o
for (int i=0;i<MAX_INVENTORY;i++)
, _" g- y: r& t6 a' ?2 `9 L {/ S; N4 W. P: S d6 X
if (dest == m_Item.nIndex)2 c) ]1 M4 c# R5 e; F
{* s% o3 F: F* E3 |0 H$ N' r5 P
//id相等 则 改变对应的dest和src
4 w' M( K$ A, k4 { m_Item.nIndex = nTmp;
0 Y& ?1 p, ^* Z. c; T }
8 Q6 V3 V, h: w+ a }
: |5 n j- g1 G! f}: S/ w8 J1 \4 P3 ~# K) x i7 W
};
- k% Y! f* a% ]- e7 `-------------------------------------------------------------------------
# C; Z/ |; c8 n6 Z- K依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 k, M- J0 S$ \
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 {7 w. q, G3 b+ R7 r. ^4 B* K7 f紧靠其上添加:1 ]# z( }5 Z( C
if( pWndBase == &m_wndMenu )' i& {3 b8 D6 H% Z" e
{
- O+ p+ p3 o! k* C- F2 ` switch( nID )* r' M1 Z' Q- ` |8 ~
{6 m2 E) @' C/ K& w8 m
case 2:
' I' N: ~* B- f( h {
2 _' k; ?& r, Y0 {9 ^* ~( ^, l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 l2 ^/ m8 Y. L3 R
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 I: Q' c! s1 P2 T& a- o S( _7 ~ {
0 x: `. M7 t' h2 x; a8 k# ~) T break;) m G; d# w% g5 V) ]& `
}
: w, j( m. N" T. X, p! B for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' R4 m R( d$ F2 L: o
{4 s A1 R) X5 u0 m8 @& l+ A8 D c& H+ T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' o4 D3 |9 z. N& \ m if( !pItemElem )
0 o6 M+ I: |: C' ^# v continue;6 L2 N" G. w% I; }9 S. ]/ ?0 r
if(pItemElem->GetExtra() > 0)0 e3 {/ E9 p1 c" i7 ^& o
continue;
- X/ o4 B; c5 H5 p$ s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) v) i& [1 C$ e6 o continue;* Y+ u( h% ?) V" B( [7 h7 H4 p
if( g_pPlayer->IsUsing( pItemElem ) )" m! ]5 E8 k1 {% W! o
continue;7 F2 ^3 W* Y( E$ C& x% ~% ~( x
if( pItemElem->IsUndestructable() == TRUE )* A& y8 C* _/ M2 i
{ Y5 M* L9 {8 ^# G7 Z& n8 Y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! k$ E8 P7 o3 b+ J* n3 [9 i* C
continue;
6 L$ \% R9 f& y( E0 D }3 U2 W# r M! e- E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); X7 W: n" H5 e% o1 X) V/ R% }6 Z
}
7 r! C+ x, d- O; B+ r break;, J/ A( {% A$ P
}" A" ]0 q7 Y* r5 W3 i
case 1:
% Z! P8 D! d* ?* T' X8 f {
1 }2 B" G9 x; z8 B ^0 i //整理背包
: l+ e8 @" w7 t4 F+ J# H //////////////////////////////////////////////////////////////////////////
# X& ]& _$ C% h* L) `3 p) ^ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ j* ]- v- p. E3 P( T3 L, @: k //////////////////////////////////////////////////////////////////////////4 l( x( Q2 V# l& q, I8 Q
//////////////////////////////////////////////////////////////////////////
! a) o( \) W9 a9 X& W: \ CInventorySort* pInvSort = new CInventorySort;) Z0 e* L$ }" R: ` Q
vector <sItem> vItem;4 } E. E. c3 ~$ h, X4 F
vItem.resize(MAX_INVENTORY);//初始化大小5 g" |" l. n w+ e
//////////////////////////////////////////////////////////////////////////
1 h( z6 G% i3 ]) V5 ~& j //填充数据
$ w }6 ^( R! G0 E for (int i=0;i<MAX_INVENTORY;i++); f6 I+ Y/ s; q$ F- z+ [: O
{% Z8 b$ @& h# a1 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" G) h; p+ o5 j7 q. r4 ~ if (!pItemElem)0 W5 ~; \. q! r" s
{( g2 E" A6 q" x; N5 ?5 B
vItem.dwKind2 = 0xffffffff;
9 M* G3 r/ j9 {, n. ~" S6 ]* { vItem.dwItemId = 0xffffffff;! V6 M$ |! g0 I4 g8 P+ i: W
vItem.nIndex = i;& `. H$ k' f; f: E" F
}else {) w* I" I3 H1 M& w! W
ItemProp* pProp = pItemElem->GetProp(); T7 ]- T0 b" n" c/ B0 p4 Y5 l
vItem.dwKind2 = pProp->dwItemKind2;* @9 H9 ?, m1 g, `
vItem.dwItemId = pItemElem->m_dwItemId;1 W! E7 F- d# H p& m7 W' k# J
vItem.nIndex = i;
0 d5 [5 B! L" K; I! a& B( D5 i1 V }3 M+ D# _; M4 O
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 U3 r. z) }5 q3 B& g: B3 c. n }
2 \# w9 X8 w$ w* W. m/ N! C //////////////////////////////////////////////////////////////////////////
& _$ }3 m$ Y0 Q/ h: y& A sort(vItem.begin(),vItem.end());//排序
# u$ d8 P7 j% W; B //////////////////////////////////////////////////////////////////////////
/ q3 H2 p0 t% b: E, C //交换" _4 s- z% J. G5 c
for (size_t i=0;i<vItem.size();i++)0 V+ ?5 N' g: i+ _# }- q
{
% R% Y% e! S8 V6 P //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. a# u$ L# ^, _4 M5 p5 | pInvSort->Add(vItem.nIndex);
. O3 F( s$ Z: c2 S6 \& S0 | }
0 [0 r4 U. ?0 s* O$ M# G BYTE nDestPos = 0;3 z% O |# V; v' b
for (int i=0;i<MAX_INVENTORY;i++)
8 [% N% D! X1 a6 h& }# v2 ^3 \ {/ ^- ^( ~. f5 I% e7 ?8 C A$ ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* @9 ~: [& V! ^1 y! g- w x: f
if (pItemElem)
# _1 W6 c- ^5 a: m0 v* G) c {% J a* [" J' Q
if (IsUsingItem(pItemElem))
9 @8 s) b) [. r2 c( _ {7 q3 H9 O& `1 Q% [
//这个位置无法放
6 J6 S4 ~. Q+ ^8 F& E: B nDestPos++;7 S9 _3 V/ Y+ X4 `: d8 ]/ k
}' ] Y9 ]% w- Z+ ]' K
}/ o5 e% P2 _: a( C
BYTE nSrc = pInvSort->GetItemSrc(i);% a. U( s4 M v0 c2 H7 a+ L
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); ]8 i' _5 I: U) x7 y
if (pItemElem)
/ z8 n- n) ^( K8 X. B2 G. B {
0 R- b. {% z: t if (IsUsingItem(pItemElem))
D N" F8 y' C+ O {
8 z* ?+ v0 n7 V. \ //这个道具无法移动,跳过 k3 X- Q r& z2 ?9 D" K
continue;
V; E8 n% t% ]+ Q }
# b+ A9 ^$ P! y) Q }else{/ z1 t- h$ M% p7 E+ [/ i) b3 w+ i
//空位置 不用动
- t/ v; A5 C f: G T' ~4 E continue;
' V2 Q1 V& v& H' T4 b }
4 p( P T$ q9 B9 F3 C //////////////////////////////////////////////////////////////////////////
. ~7 y" X" f1 g$ K W) U2 y6 M7 ?8 ] //开始移动
; W' T( [/ y4 L/ T' n% C+ r8 U4 u if (nSrc == nDestPos)3 n0 v% @( X: P" R; f
{% S0 K* I$ `! e+ j0 `1 L
//原地不动
) S& V0 F& T. k( q6 y nDestPos++; _* B& F& ?8 M1 i5 m. j
continue;
/ ]4 ~ l4 E' n9 M) B }# C0 i @2 N9 r" V/ q
pInvSort->MoveItem(i,nDestPos);
. `8 a+ V1 c8 A) E g_DPlay.SendMoveItem(0,nSrc,nDestPos);, K2 Y! J) g# W; w7 Q2 A
Sleep(5);
3 y/ m' v7 d) \6 Q8 c //Error("移动 - %d->%d",nSrc,nDestPos);
: n4 I( t& w+ E" a% { nDestPos++;
' Z' T1 L6 r$ s" K/ C. d }
. C9 g* b& k( t& R //取第一个元素的信息
% D! h) T5 T1 x4 o /*
( `; M5 L% T3 C1 r. } if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 [2 B2 _( F& b {+ o' l$ Z5 L! Z) P4 F' T4 M
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" D) A5 n r7 T% \( m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! A8 M, h0 ?9 m* V- S0 a- s/ m }
9 q0 v0 m% V) x% E% R */
7 U% t- m9 v: I //////////////////////////////////////////////////////////////////////////8 a0 ~) L# `: }- D0 M. q0 i
break;
' n8 p" a4 Z! ]) Y }& H- u0 I4 }, D' h( d6 p/ s
}
7 u' v. m' o* B7 _! G( o}
: W+ \( f m" @% W M2 X" l$ @$ U& Lm_wndMenu.SetVisible(FALSE);
6 S: f! C% w* V; W) k
0 c9 y1 C0 Z& A--------------------------------------------------------------------------------------------------------9 p( {& m2 m# g8 Y) X) Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- x$ O2 m J! g{
c" L$ m0 p; }& {BaseMouseCursor();4 P/ k1 b8 ~/ e( b: l. K. \ x4 p: W
}# _6 U( `& t7 ?5 u+ a5 R% o
在其下添加:
: t& v# ~4 Z! w* Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% k& l2 s# a& _$ X* U- H{: ?+ Q6 F7 ~6 H* f
m_wndMenu.DeleteAllMenu();+ t# E. w4 _ a: }6 t# h* I
m_wndMenu.CreateMenu(this);' `3 J( u9 n& g4 a2 \( f0 G/ W x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, W; A) R9 C& X. c1 @2 H* ^' o
. L8 r9 i& b8 g, R/ R1 D7 ? Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. K5 {- V' V$ e, ?{
6 T0 p/ e1 ?; u) J/ X# o( H2 `( y //P以上级别才可以删除所有道具( X. d8 e' ] \# ~% o8 q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 K G# W) {3 f5 d) C* b, f}
8 x6 e% i- N/ @6 wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) R {" S3 V' |* ^, @2 {4 vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: ?; T, [6 B! [: Nm_wndMenu.SetFocus();# e) [" d7 ]% g9 Y' u
}
2 m' P# @8 V1 v$ h& b. E------------------------------------------------------------------------------------------------------------
9 ]9 w3 l0 O: _ y*************************2 ~# _- l: ~0 Z% X
WndField.h文件
* S2 m" g8 n/ V9 n# a/ m; L! ?*************************+ {4 v) S; T3 D! B6 i0 h' B
搜索:BOOL m_bReport;
. h7 _1 o0 d" P* l D其后添加:" v% b w, z3 ?4 w9 i l
CWndMenu m_wndMenu;
3 ]- L- q8 V. r" [搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, W. n9 x. k: C7 y3 [. T) x其后添加: g2 D( y$ b9 c8 X+ q) a
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 T* |% z% A' w, J% N: X) e% K
# c4 _7 p' C) `1 c5 G1 Y" T; ]/ B: b/ ^
|
|