|
|
源文件中_Interface文件夹下WndField.cpp文件
) r4 O- Q- {# `( x搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 g2 B& v$ Z8 u9 \, w- V
: H! O- r$ R" _' T
struct sItem% W; |7 R* d$ o9 n! k
{
5 B6 r1 U9 \* p. F3 ]DWORD dwId; p/ m5 G% T k0 w$ y
DWORD dwKind2;
' q( j3 ?: X/ ~' V; C1 W- I. ~DWORD dwItemId;
3 i. @' t) |6 i0 L# }BYTE nIndex;" S6 b/ g7 N6 l+ @6 W; l w
sItem(){
' S" [: U. E) m2 E dwId = dwKind2 = dwItemId = nIndex = 0; g; ]/ x, Z& a7 ]
}5 s' n# Z- E1 ~, t$ `! ~
bool operator < (const sItem p2)
. @% L1 O- k/ s# p$ O{
5 G% R( @( K5 M' Z; b if (dwKind2 == p2.dwKind2)
% f# n7 Q& B7 z$ q, O+ ? } {4 g+ U% |# I, l4 A; `3 m8 G
return dwItemId < p2.dwItemId;# m9 f g& q- }3 D" s( \* v8 f
}else{1 x$ @% w' s: \9 H! P! c) @7 y) a
return dwKind2 < p2.dwKind2;, }; y' v; A3 n2 \! _' x
}
( t/ Y1 ~7 L6 l# S9 s}6 M& A$ G% \8 N4 A0 S3 J y1 H3 R3 Y
};
2 M" m# s# i/ v7 o; ^7 wclass CInventorySort
8 r. \. C. k& Q8 u{
5 l; z) Z& G0 S' v* I' wpublic:5 i v. }' D; t6 ?7 H- q# R6 ]
CInventorySort()* v* f2 W8 [- Q. G# d1 T4 }
{$ u. F. g! L" I) V* C! b& C
m_dwPos = 0;1 f5 n- x5 V2 w3 K/ U6 z
}
- U0 A, ~1 Z/ y" p e, u% @. F~CInventorySort(){}* S& y& J1 \" y; R9 D# z6 S* _
private:
0 t& [( e0 n8 G/ rsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( W/ Q( _* L# W0 f" o4 Y5 G8 }7 BDWORD m_dwPos;
% U/ J9 Y" i% ~, t5 Tpublic:
- S* T& K) c( c+ [" ivoid Add(BYTE nIndex)
, X* m; \6 x- s% X7 c/ _{
& g3 }3 h7 e$ j0 @ if (m_dwPos >= MAX_INVENTORY)
2 B% @1 e0 {, r( X {8 ]9 X4 Z$ R: S& m, n4 t
return;
4 I, E$ H* h H- H" Z9 F }
`3 Q- r4 a$ Q& R2 T) E m_Item[m_dwPos].nIndex = nIndex;
7 r+ Z' u: b3 I m_Item[m_dwPos].dwId = m_dwPos;
# V* M7 X1 D1 e/ G$ Z m_dwPos++;! L* U4 u6 J; F ]2 p7 Q( y& l
}
& `, ~9 P$ P2 f" V1 p0 H# ^1 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 T* b5 p, y, x7 |% t3 V{
: S! v& ^* q# q1 y: V, a' m# ^ for (int i=0;i<MAX_INVENTORY;i++)
3 U7 H- @% z, l {( s1 _9 ], E5 |! r! ]
if (m_Item.dwId == dwId)
5 T; A/ B A5 [2 `& {7 N( i {) W! S# C/ p# D1 x4 b0 `" N% Y2 P
return m_Item.nIndex;
. z/ C. h' Y# h6 ` }
# L. Y- q+ v) Z7 l- v }' ]1 d( H: X W4 H' l" J9 W* g
return 255;
* p( u& Q1 q2 v; C2 w. U% R1 {! J}
! U, m, h5 V0 q! `! }# r* Bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* v1 W2 u" n: Z7 R B{
8 o. _0 J6 v; L0 }5 P BYTE nTmp = 0;9 V9 t: |) N9 {2 Q2 \# g
bool bDest = false,bSrc = false;
/ u( W* q2 H3 X for (int i=0;i<MAX_INVENTORY;i++)# t2 N4 Q d0 |, |3 |
{
# t( n7 H3 M+ J! n* @- H4 { if (dwSrcId == m_Item.dwId)
: x) _- N( ~) t! Y {
1 v& u8 e0 B9 ~! g- `. ]& C //id相等 则 改变对应的dest和src) y7 l( Q* T, G* ?4 u
nTmp = m_Item.nIndex;
. k( E# X3 N5 f- I. q# j$ \/ E# i m_Item.nIndex = dest;: i7 Y0 A; t6 V& R5 C2 [2 K
}
' r4 U w- P6 Q$ E }
# _) X4 @1 Z5 g* W' ] //临时数据保存完毕,交换开始
* P9 j9 ^7 ^; i9 ]- ~; d ~+ V for (int i=0;i<MAX_INVENTORY;i++)3 r" N0 m! G4 Z5 U
{& ^% M4 w( e$ \/ g1 b
if (dest == m_Item.nIndex)
* r! p8 ]4 w3 o( T8 f4 J {, D6 L( b2 p- }1 h# g% |. {
//id相等 则 改变对应的dest和src
: `: t# G S7 c( [6 D1 v; x m_Item.nIndex = nTmp;
9 w8 f; V* t- h) V }
- E9 t/ X8 E# L8 O }0 \3 j3 Q) k# l* {" `) F7 c
} J; `2 m0 z8 I- N' i. u& ~
};8 \! P; T( Y% A& Z; J
-------------------------------------------------------------------------
5 f% E3 i! l& H5 ?7 `$ V- n9 k6 E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 C4 {3 F$ u5 q: k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- [* H: H; j. V; N( v; @紧靠其上添加:
5 Z& {! I) Q& `5 N6 v+ `if( pWndBase == &m_wndMenu )/ r. V; a+ r8 f$ ^2 j. w
{
7 c/ v$ o" F2 c switch( nID )8 S+ x8 B/ ~% ]8 e z, }( b/ S! m- k
{
( T1 g; `0 n2 H8 l. E& C* E case 2:9 ~! W7 R+ P" `* z f$ Q. i! V
{) o7 N" x- p) D; E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, U' ^/ T( _4 h5 a1 k if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 ^6 m6 `0 i0 N: D& L, @$ G {+ \4 U# F6 Y1 a% u4 D: o1 @
break;6 }! ^' d" S( O8 H3 J( q% m
}
* g3 u/ |. N3 Y4 _9 z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' o7 m2 h$ q" ?2 d! u0 ] {
. V9 u' J3 S2 D, m2 ]& x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* n) R$ @6 K0 q1 ~
if( !pItemElem )/ B8 H3 Y. E. O: m8 k5 l
continue;/ k* |( p( H& G9 Q! I
if(pItemElem->GetExtra() > 0)
( U3 Z/ D/ v, o0 U- J `; A) V continue;, g7 P. O6 b& s9 |; k
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 n/ y; H# B3 a' a7 z continue;# p* l; B4 h0 m
if( g_pPlayer->IsUsing( pItemElem ) )3 Y" L; V& ?9 V& H* X% i
continue;2 J# g) y* L" _1 w
if( pItemElem->IsUndestructable() == TRUE )
# E& R. u9 ~- J {$ ~. x. c; L$ Q2 b: p& u. Z( H1 J8 A
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. _& k- \. s: N4 [9 S0 c; i8 k
continue;
( h/ ~" K% y+ n }! ~8 [# h3 ^, H `7 {7 o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 ?4 n% x( J9 T( L/ R }
% X9 U s/ m; W. w- }: h% | break;
( Y+ G" z( v/ u: q W V5 I }; Y) P6 K: F; _
case 1:8 }+ W8 M! O. d& f* P& h( x9 L
{
. h3 `! W9 `: }, [/ z" Z; ?+ V //整理背包
8 K1 f# o* c3 k: J: G$ M //////////////////////////////////////////////////////////////////////////
5 h) C: G, h2 S7 T" w1 f //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" u0 I, y& i8 V' B2 r
//////////////////////////////////////////////////////////////////////////& J a& {3 [9 h: T" {1 q* p" Q2 _
//////////////////////////////////////////////////////////////////////////
5 @. w: L+ ^1 X- k CInventorySort* pInvSort = new CInventorySort;4 O" O' d& @$ d$ r7 w
vector <sItem> vItem;9 U7 r8 E- z9 ?- Y2 D% E' F
vItem.resize(MAX_INVENTORY);//初始化大小
2 {/ I+ x) c, z& y. D' m //////////////////////////////////////////////////////////////////////////
& U8 P9 l- p+ P/ E& C s //填充数据 Z# k4 y4 {% |7 }8 _& Z7 M
for (int i=0;i<MAX_INVENTORY;i++)
" {5 a* y7 e4 T {; D# x7 U$ D. R$ H7 X9 `% ]0 b5 i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; K' c$ i0 C+ n( I/ H5 s if (!pItemElem)8 {& w0 }9 g* `
{8 {3 f& l8 C3 k
vItem.dwKind2 = 0xffffffff;
~( V! S2 _& o# P ? vItem.dwItemId = 0xffffffff;
W" {. x; U/ Z# ]- b* u3 Y vItem.nIndex = i;& Z# H( F+ F/ ?0 n4 f4 i. @
}else {
, I, k. R, G, b1 t& _ ItemProp* pProp = pItemElem->GetProp();% u# {9 M$ d" P- Z6 D( B4 ~+ v9 Z c
vItem.dwKind2 = pProp->dwItemKind2; o6 ~: y6 A5 T6 u" S3 L* s
vItem.dwItemId = pItemElem->m_dwItemId;
% ` A5 n4 X& D$ V0 b vItem.nIndex = i;- x4 Z, C8 G9 j3 o0 G7 Q0 L
}5 I2 C0 B& U: D4 }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); r R$ N' o+ ^- w8 e; p9 P0 k0 R
}6 g1 b2 B8 W, a. O- D7 U7 L
//////////////////////////////////////////////////////////////////////////; P) ^( g% a5 \& W* A; K
sort(vItem.begin(),vItem.end());//排序: @/ t% f; b- y% z# O
//////////////////////////////////////////////////////////////////////////
, `/ e, o, A, z9 [ L0 I/ Y //交换( e, e' F) B i2 w3 F! ]0 t
for (size_t i=0;i<vItem.size();i++)
& o) W" o m) S% ?# T {
" x5 v& J' w1 v* Q0 y4 Z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* x2 b# d& p' P1 C. g$ X, Z l8 G
pInvSort->Add(vItem.nIndex);
3 @* B! Z4 G% @# e# ] }
" Y/ }) L9 y) F1 v9 ?, J BYTE nDestPos = 0;
4 ^3 N4 W4 r5 v/ ~: G- l3 u( ^ for (int i=0;i<MAX_INVENTORY;i++)$ A2 k7 o) m1 I
{5 l7 `0 m( H2 K3 W6 Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% k& j5 ~0 A& v' |8 N* K9 i$ z8 w/ e if (pItemElem)' P' Z+ U4 M0 k( s& k5 L
{2 _& [' A4 ~& I% i Y. K
if (IsUsingItem(pItemElem))
/ \: z0 S/ I. F- ~+ ~7 w+ c; Q {' t8 }- }: e& Q( n& G- f% a
//这个位置无法放
3 @4 j% \; i: E' \ y nDestPos++;
; T) T! M' t) U8 {; t1 M$ f9 \# e }
7 g. f ]. E! z( V# E" r5 T }( [( W, } A7 h) a
BYTE nSrc = pInvSort->GetItemSrc(i);; f ?% ^" F8 _( v* p1 |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 P6 v1 M! r2 v
if (pItemElem)1 L( s$ D$ H5 v! f% @4 K2 n
{
: Z# k1 D3 S. z5 m9 @# Q if (IsUsingItem(pItemElem))
8 t) A( O9 J2 Y) z" D {
% W% k8 K1 ] p5 O1 N, d0 C6 t" Q //这个道具无法移动,跳过 h9 x% D0 x0 w. F
continue;
! h5 k8 ]# t, [; O1 Y X }
; }. j, a& ]) H }else{
8 _0 w0 s* Q* u3 R3 ]9 i6 t9 ?% M //空位置 不用动# p% f7 v0 Y) E* L8 {# s
continue;% k2 }/ O% Z5 C! m# V' N# D a
}
( e1 Z9 V% x/ B. a. X' J% o/ R; \! f //////////////////////////////////////////////////////////////////////////
4 Q* D z" ]3 h. B) {: u _ //开始移动
. T1 Q- P" U* T if (nSrc == nDestPos)( d) K& w4 {' P
{
% I5 Z }+ m; x: A8 s //原地不动, h+ J6 w% J) B7 E0 J
nDestPos++;
3 e0 e4 l3 e+ G% Z! T continue;2 [% W7 P; k% i" `$ \$ v) k
}
2 U: z. K7 b) s pInvSort->MoveItem(i,nDestPos);5 S5 @4 ~4 Z u) r9 ]
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% J7 W8 P! j" b3 l) t# }
Sleep(5);7 r' W! g% J) q
//Error("移动 - %d->%d",nSrc,nDestPos);
6 Z! V- X5 m$ b nDestPos++;$ s: y' }/ f+ S' d! ?
}9 |- z5 T+ ?2 y
//取第一个元素的信息
4 ^8 [" _. Y$ p2 u$ J /*+ j4 v* {& m; Z* L5 B
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ X: e8 i7 \* G {$ w0 [: V3 R6 i4 \6 j- o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% Y) i* z+ X) a/ w% R; H$ R g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: v5 K7 ] K9 Q
}: {0 F) C. M* c/ e9 I. N3 J: b
*/
' c7 E% u5 H& s" p /////////////////////////////////////////////////////////////////////////// P. I j) D. d; y3 m
break;( @9 I) g* i9 x( P( v. N
}6 e( o! ^, I" V7 H8 w
} ! r6 C2 I$ g1 ?7 V2 x
}" a7 ~7 }' a' x0 }* W
m_wndMenu.SetVisible(FALSE);4 j5 {8 F: z9 O# N
0 Q5 B% Z/ w# h, S M--------------------------------------------------------------------------------------------------------
; t2 e) G# R( X7 Y8 |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 v% S8 o8 ]( A( n8 d+ z: y- {{2 y+ d6 J; H7 l! A* ~7 A. C+ D
BaseMouseCursor();0 c% D' y1 Q, f4 Q
}
- p4 A0 d# M3 s6 d7 L# N在其下添加:
! W! ^) \% R: D& `" Z% u$ gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 I/ B# G* d. ^4 ^# J. s{
) Y0 ^; d. M0 R0 Xm_wndMenu.DeleteAllMenu();
5 i, ^7 ]! w& i4 O! K- c4 r+ ]# Wm_wndMenu.CreateMenu(this);
& H/ h6 E# Z/ C$ H/ d5 \( sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 l1 j# p. f) e1 W1 V
8 T; X- t" I9 Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 s, C* ]" {5 E8 I( S' T" i: f) b{' D( D, i; }- G
//P以上级别才可以删除所有道具
# y3 i' {3 A& P% n m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- M6 r7 k$ m; C t}, X, X$ e# U2 a: R& d# n* I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 B5 f) m6 r3 n! i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
Y y2 c3 O( g7 dm_wndMenu.SetFocus();* e6 Y* x$ A! r
}
+ n3 H9 d" {% W* u+ D* t------------------------------------------------------------------------------------------------------------
9 V6 N3 [ j! A*************************; I4 _- H3 R! q0 a8 S, c
WndField.h文件
4 J1 A5 \( p" X: d S*************************! {. }4 g( S$ R: n
搜索:BOOL m_bReport;" j4 J$ u3 [) e8 D, ?
其后添加:1 [: k7 N6 T: y* s6 h
CWndMenu m_wndMenu;
& n4 ~/ y7 S* F, Y: }! U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 H! o) ~$ T- q; `8 `- B6 Z6 Y
其后添加:6 B- E$ ^$ R$ [' o
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ J# \8 N5 ]( m7 g6 r A* c
' `. ~; p# |9 T5 N
; i* X: r6 P* p4 y |
|