|
|
源文件中_Interface文件夹下WndField.cpp文件) \, a# K) f1 ] t
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- ^7 B. ?% Y/ p) b/ Y& J& k {
# _1 D# c4 C4 D; P- hstruct sItem- i9 G. r' q! Z/ ^ h
{8 ^* p: d7 k" [ F: a7 c" o9 {
DWORD dwId;
! J1 M& |: L1 pDWORD dwKind2;& `, o3 v A4 w K7 u+ I# Z
DWORD dwItemId;
: N& |2 t+ W5 v/ VBYTE nIndex;1 G5 ?4 @7 B9 l. ^; J+ l
sItem(){! ~. f) S2 X, p
dwId = dwKind2 = dwItemId = nIndex = 0;
! U* o& Z* \, E6 q: ^$ z1 C}
! N, S* g% }7 Obool operator < (const sItem p2)* v9 o4 v( }/ {9 _4 g: L5 b
{
- J, ]: J) y( C0 i2 |6 l if (dwKind2 == p2.dwKind2)
' j1 a+ p9 x1 [7 X5 {: k {
3 G" l4 V2 T0 u7 X return dwItemId < p2.dwItemId;
. [! h' w2 X; u4 T }else{
0 R1 X+ x, k# p. O+ }" l return dwKind2 < p2.dwKind2;3 ^5 y" ?/ M; X+ c d! T
}. L' c/ Q7 }3 S/ d0 p* N' _# l& i
}" n' M/ k# Q# J9 s4 g+ N
};
! I1 z" m& _, Dclass CInventorySort, Z+ e! b# P6 q0 C
{) g" y' @0 a1 U1 ~0 J* c% u7 q$ L
public:$ n* }, `1 K* l( S- ?- j
CInventorySort()% E/ q5 b( S8 B8 P
{
* p7 A) p: M( x4 J5 M% N0 u m_dwPos = 0;: A# \4 N ^) c9 k t7 a4 x
}
, M* j( y1 t: h. q& v: r; P# B~CInventorySort(){}, n8 V" M' }) O# d
private:+ h9 z& G' P; A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% o% [1 Z( V8 V2 N6 U1 b/ ^
DWORD m_dwPos;
; Y8 h' O& }" X1 Lpublic:. d3 r# J2 B, y4 r3 m
void Add(BYTE nIndex)4 A* W5 M0 L# y- g
{5 W. @" A' N9 Y5 M
if (m_dwPos >= MAX_INVENTORY)- }" F* H& c4 x5 K$ M
{) z k. O1 J6 k/ |& E. D
return;5 b- B6 x+ D+ H7 T$ Z
}9 V6 L4 M9 }! C, K
m_Item[m_dwPos].nIndex = nIndex;7 C8 R7 ~8 {3 w5 e8 l3 Y- j5 q- t
m_Item[m_dwPos].dwId = m_dwPos;& v2 J3 U( b6 D7 F: V
m_dwPos++;
% |+ n' [ z. @# ~9 }}- y8 S5 F6 [" e5 G2 l
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ m6 J) k+ M6 Z% }6 p{# V2 ^: T3 D) u8 ]
for (int i=0;i<MAX_INVENTORY;i++)
6 s& e o/ s* _2 l4 ]2 u4 M# A {( W' Q4 E) F; \: P
if (m_Item.dwId == dwId)
* x0 e: B: {2 v" t* F' h; K# ^ {% R2 n% y/ ?! d; D [
return m_Item.nIndex; V) e0 N+ z9 M; ]4 S* L
}& A _; b. k8 H$ u5 N9 Y
}
& S: L# x4 ^/ |0 j+ ~! U8 z7 Q7 Y return 255;/ A/ M* |: y0 Y2 ~2 Z% p# B' H0 X
}
* c `0 |' w Jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# \6 P k7 n# L$ r{
$ q& g N& W5 }/ D& d# f5 W8 r BYTE nTmp = 0;' m9 C+ ^% {5 J3 g+ S& c
bool bDest = false,bSrc = false;
4 n1 i: b3 J% G4 r& X& [5 b for (int i=0;i<MAX_INVENTORY;i++)
3 i' `9 U4 a6 `6 z' `/ j6 d$ r4 G {/ l' D% h+ A- x2 Q2 \: @
if (dwSrcId == m_Item.dwId): _9 ^' T, M7 P1 Q; B
{8 g0 b2 {! y* q; C0 c7 s# U
//id相等 则 改变对应的dest和src0 M" A- O o Q) O& e* E
nTmp = m_Item.nIndex;3 Y1 P" Z5 E. m A# [7 G5 p9 a
m_Item.nIndex = dest;
@4 |) s9 ^( G }; t8 h, v8 H& P1 S7 s
}* D! q& m0 E6 P! H: _" F
//临时数据保存完毕,交换开始7 H, m( X) e& `6 h3 U. c _, q
for (int i=0;i<MAX_INVENTORY;i++)
+ h, o5 P" e% B9 R6 X# P {/ v1 W9 e* x$ H) b; A6 @* @. l& ~
if (dest == m_Item.nIndex)
! A. H8 @' \8 j' }& w' v9 L {
* K8 }/ k, f7 ~" b& N2 g //id相等 则 改变对应的dest和src( l: E7 Z K$ S3 C% G
m_Item.nIndex = nTmp;7 e: k9 o' z6 a4 @/ b8 I( Z
}* C4 |" M7 ^( {. d
}
1 |1 O9 F! [2 U- c' M4 H1 @* s* P8 G}) d2 C, Q) x7 w) z' C% R9 ~( G3 ~
};
8 G9 Z) ^* Y4 d8 l6 O3 H-------------------------------------------------------------------------% t# R C. F4 `, a- ] L) {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& i5 U. m7 I% z. v2 [' ^6 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
V5 o/ G+ C" |5 o3 i紧靠其上添加:
" A! u( J+ @3 Y) }8 @: i+ Jif( pWndBase == &m_wndMenu )
* _% w" |8 }# y$ N0 U{
; |: Y k7 {3 |# j switch( nID )
0 A2 b* G! r" U {1 [/ i5 R6 c" c. r% M
case 2:* j4 _* m; f/ h2 Z/ N0 ]( G1 }) R( V9 E
{( ^6 H$ |: l h
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 P( {* x% Z5 Z7 Y8 T if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 m x7 K1 E+ @! P2 b: c8 O
{* t; [7 Q9 I0 N+ T1 t! X% J
break;
/ ]- z& w% m |! [4 q! n }! j" Z: M8 z/ Q( a
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 G8 }3 }1 n6 C# l- C) d {
$ V& z& }( w) ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! l7 ]8 n3 T$ h/ o( m if( !pItemElem ). S& O. Q8 F4 ?. E) `$ U
continue;
% [ i+ M5 ~7 C6 v+ y if(pItemElem->GetExtra() > 0)
& `9 a- m5 U0 r3 H* @9 Z; p4 i continue;
) V& o' w8 j+ N1 m7 `6 S6 r( U if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( z+ U' o1 f8 |, ?% X" s; y! P continue;$ r1 f+ ]+ t9 Y/ H, v' N# H" X
if( g_pPlayer->IsUsing( pItemElem ) )5 `& H% |$ b/ I$ g
continue;9 n/ M6 u0 ~- g7 H( F& _1 K4 L4 R7 Z
if( pItemElem->IsUndestructable() == TRUE )
% y% q* l+ d- n: z) o/ b7 ~& ^' T9 s {
1 q3 Q b3 j7 K; t1 y9 \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* Q* v, ?3 S0 N3 ~ continue;0 l2 r* p8 h2 {2 D6 f
}- O' ?% O( ]9 P0 `; v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# d- V2 \( R2 o
}
6 F! t2 _- l: {4 U' \ break;
# T1 b- [: x5 `& f }
, | J# ~! I; |! x1 L; u' B case 1:! h0 ~- U4 V$ x9 Y+ W
{( U- ?# E; b0 x7 m2 [5 O
//整理背包" w+ F- m, b2 D1 k
//////////////////////////////////////////////////////////////////////////" T: a: S/ H, D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 u7 m8 ^9 M! O+ e2 |
//////////////////////////////////////////////////////////////////////////
5 J% t5 T5 t% R- ]% R* B* I //////////////////////////////////////////////////////////////////////////# x" |. c& B/ c" r7 a5 v. w
CInventorySort* pInvSort = new CInventorySort;3 `0 y$ v3 i0 ~2 I M
vector <sItem> vItem;
t1 {0 ^* R$ [ R! Y" s# T vItem.resize(MAX_INVENTORY);//初始化大小
- ]/ \6 n' y& t8 m //////////////////////////////////////////////////////////////////////////
j t! T. d! N$ B" a //填充数据& s& L" g9 O! D2 _
for (int i=0;i<MAX_INVENTORY;i++)
8 q1 E: Z- l$ v Z _- I {+ ]& U Q" `) ?8 P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 P, F6 V0 M( [& e if (!pItemElem)
% V# C4 @( V: [* V {; ?9 S- s. q+ Y4 {
vItem.dwKind2 = 0xffffffff;
7 @2 C q2 i B, y$ w: p$ x vItem.dwItemId = 0xffffffff;
. e2 K! C; t; m/ c0 |* A" c. g+ Y vItem.nIndex = i;" f8 e. \; J$ H! g8 n
}else {$ ^2 I8 {& j: @$ @9 U/ ~ `0 Z
ItemProp* pProp = pItemElem->GetProp();1 {8 E& M" J3 r/ ^- _) z
vItem.dwKind2 = pProp->dwItemKind2;; ?8 N3 X( Q* z2 l7 W6 r1 I
vItem.dwItemId = pItemElem->m_dwItemId;
7 {7 F" A; \/ x U) Q7 m$ l vItem.nIndex = i;
- c4 T3 ]! `1 K# M' n: O }: e- C0 F$ I. ?$ c3 P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); g7 H0 @ ?- M+ @9 i- _# q# `9 D4 k
}
2 I0 Y! S9 v# f. P //////////////////////////////////////////////////////////////////////////
9 g7 H, _$ }- N0 G2 [6 i5 f0 W sort(vItem.begin(),vItem.end());//排序# }; S# w0 ]6 k% S6 r
//////////////////////////////////////////////////////////////////////////3 e' ]% l8 L- C9 ~- f# I
//交换2 T$ Q$ p0 u" e) k
for (size_t i=0;i<vItem.size();i++)
- N0 \" Q+ B, r4 C9 o; _ {
. a: }4 Z# S) e9 @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; D# k! i3 P7 P& c, a! Y pInvSort->Add(vItem.nIndex);
# b8 i D. |: ~ } S0 G9 H8 t/ u$ w
BYTE nDestPos = 0;6 a" S4 y% }! Z
for (int i=0;i<MAX_INVENTORY;i++)
A. t2 f( A3 g& t2 y2 q+ n {
( A, G R: z' T- S! Z9 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 b6 l' Q5 ]+ u# R0 n( ~
if (pItemElem)
^. _( G7 E/ ]! q5 b/ ~2 M {
" d" k" _* j# L4 `. H8 a. t( @ if (IsUsingItem(pItemElem))
' ~% H! P& X6 f/ s! w6 p, K {
/ Q* H2 F; k7 |7 T; ^2 i- n //这个位置无法放* }9 ?0 q. z- R& {
nDestPos++;
3 f4 i6 |2 `7 Y; H }7 b# C& }4 w5 C5 ]% G0 L. F0 {2 q
}
, J3 x; y5 J* z BYTE nSrc = pInvSort->GetItemSrc(i);$ G5 ^7 F# h" A U9 L+ k6 {' M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 ]- {: D) h& X) Q6 M" { if (pItemElem)! e4 |2 Q# b& R9 s6 V
{ g. r1 e1 ?* a0 r( R* Z+ N
if (IsUsingItem(pItemElem))% ^& m7 _* E: j+ `/ Y* d
{
! Z# p3 |1 |$ X s9 M; n* c //这个道具无法移动,跳过5 O" Q& \7 y3 S' ~7 m
continue;
A6 }- I/ Y9 ^% O+ v* Z- L8 P7 ?+ {) N }
: n' g1 ?- o+ P/ g6 L }else{
1 m( k @" k6 H, ^- Z% k' i //空位置 不用动
0 F \- w2 J! d" N0 L continue;
/ u# }4 [: I+ `, r% ?9 N, \ }
$ j% ]2 {- g$ ?* u; a# r //////////////////////////////////////////////////////////////////////////
% r1 A4 _/ Y. @+ H+ I+ n# S2 Q //开始移动
! h4 L* O6 s+ ^& W/ f9 Y if (nSrc == nDestPos): N: a4 P3 K0 m6 e" }& s
{
! L; p2 v* T1 q/ c$ f //原地不动
' k9 V5 D0 }' P( m* w nDestPos++;
! K& R& O: d% _4 g) g; v9 C5 q- Z continue;4 R- w. D( _8 x! b( Y- ]9 V
}
# S+ i, x, |# ]: k pInvSort->MoveItem(i,nDestPos);
6 Z' b# l; V0 ?9 z g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 h1 o% H5 [9 X8 u" U
Sleep(5); K# r' @7 Q' l/ |( W4 R
//Error("移动 - %d->%d",nSrc,nDestPos);
7 u- }7 |! `/ x S& o n nDestPos++;
$ a7 w' H0 X3 `/ N1 u" g }
- W* ^" B2 |8 @- w- _0 \ //取第一个元素的信息, ]% s# m" V4 z/ L. C p: P
/*
( [3 F1 \4 S6 J$ ?+ G, H if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( H# z6 ]0 g1 p" x7 B @* Q* i
{; g) S* _5 O$ A9 U, ^
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# }/ B" l7 V. |6 C, T$ {9 c
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" v" B6 K) x4 l) }) z: b1 f' G, \
}
; w# h' N! B$ M% W7 m5 d# Z% @9 T */
; K0 t" _) h7 B/ X- }& I //////////////////////////////////////////////////////////////////////////
0 C5 m, N5 s a- ~ break;
+ P$ `5 w! f7 z: u" x- M }$ A z; f+ p! r3 P: G
}
1 f8 O8 D* {6 }) Q: V, r' O}4 `; V4 ?3 b7 ~& j. [) |) q+ H. Z+ D
m_wndMenu.SetVisible(FALSE);
, ? Y$ @& k* H3 ^8 F& a5 F! _# v( m
--------------------------------------------------------------------------------------------------------
; w6 k" V( J. c7 A& i/ z8 _搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# |. P3 D# `# j0 A
{' [! X" A. g* s+ L4 W
BaseMouseCursor();
* ?/ D+ @$ E% ]2 j& J, n8 N3 z! Q}& Q) [; t: o1 U7 T% Y
在其下添加:
! I' ]+ w: P0 c7 b% ^3 t ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) g8 n( j/ `* p6 n6 z/ A% H" r
{
) A" F; f [+ [* |2 ~) ^m_wndMenu.DeleteAllMenu();
, p$ @# f! C! d/ e b+ nm_wndMenu.CreateMenu(this);
5 g( O, J$ N! @2 e; V! O+ [' cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: ^( _9 ~& C) F. C% Y
3 t/ k6 }3 Z6 \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 t7 f7 X0 Z* [ `, J2 [
{
& T! g9 z; q7 l. x //P以上级别才可以删除所有道具5 Q2 {: g u6 s+ }
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" [; b1 x1 ^) W}8 I1 i% [$ T* n8 i2 P2 w: Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; s3 q b0 z! q0 R5 L( i Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& `& Z! F. }5 Q; Z$ @$ j6 P- i
m_wndMenu.SetFocus();2 _- J1 @" ?; N9 \
}
; ?8 F) M, t8 k------------------------------------------------------------------------------------------------------------
+ ]+ c: U( x* ~, k6 U0 R*************************" y$ O! o0 u# E7 z6 r3 u
WndField.h文件! m. k1 R1 x9 Y" V, c! g
*************************6 H4 m, e. Y/ J0 ]
搜索:BOOL m_bReport;
$ w7 z- n" `- ]* X其后添加:) z" P) i& O, q+ f3 I5 d
CWndMenu m_wndMenu;
0 X/ j1 P, |) F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 c- c5 n* ^1 z2 q其后添加:
9 Q) J) [+ S$ [9 Gvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ H$ v. { Z7 {( W
) [% x2 \1 M: y. [& G
7 {* `6 f0 ?' N |
|