|
|
源文件中_Interface文件夹下WndField.cpp文件8 h$ B; K( R# X
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 w" p5 y2 P ^9 I# Q/ d/ R5 G/ A/ M1 q9 v* t$ P, f8 ?2 ^
struct sItem5 e* r7 H, F7 H3 E" D
{
/ D( l: X7 B: H% [$ H! v% Y8 vDWORD dwId;0 G- _5 `8 @1 t: u
DWORD dwKind2;
1 Z1 X) T/ }& s9 oDWORD dwItemId;
: Z9 c) E3 C5 O7 G& KBYTE nIndex;" v8 ~4 k: n8 a7 z+ _2 X- D9 ]
sItem(){
. w y6 G' {1 h& s0 p1 j dwId = dwKind2 = dwItemId = nIndex = 0;2 X6 j7 m' K1 I4 ]6 M) |- E6 T$ b
}
! [: ]& v2 V# a: ]; r! gbool operator < (const sItem p2)- R7 z6 K! X7 V7 t4 U9 V
{
/ E; _ J, o" g( R4 Z0 i if (dwKind2 == p2.dwKind2)7 ` n& y- P' H- V
{) f" X. q8 N6 v9 U: S' Y. H6 J
return dwItemId < p2.dwItemId;" N0 [8 ^! c) [; x2 o4 D
}else{
/ o9 {2 ^+ ~5 }% w. |6 U+ q6 L return dwKind2 < p2.dwKind2;
; L% r" S# q4 Y6 n/ k }
. }+ @9 Y1 O) b7 c}7 l- q0 k0 c; Z& o2 C
};
( F# b3 ?$ E/ Xclass CInventorySort
. {0 \- Y1 H) P{
2 c8 q* {; t3 zpublic:
& g/ s V% y) n; e' H9 P& MCInventorySort()& u! Q5 v+ ^; {
{
5 Y2 B Y# s3 u" y; ~0 D$ T9 i$ Y m_dwPos = 0;9 g) e1 P' t4 z! f# A
}
4 ]2 R1 T7 Q: f8 k3 e# _5 c4 e. j~CInventorySort(){}$ L; P4 J8 F! h! r5 w' k
private:7 l# G, J$ {* T4 c8 _) \/ j
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ K' Q) G. N/ H2 e2 qDWORD m_dwPos;
; _/ ^7 o, t. F* i5 K2 G: M8 Jpublic:5 X1 j% T, S |. ` e8 D. v( H
void Add(BYTE nIndex), I& Z, d$ |+ B9 a2 H) V) D
{) S# T% [ v- L1 s
if (m_dwPos >= MAX_INVENTORY)/ j# d4 Z. u6 Q1 U+ {: ]: L' ^
{
# i* P. @9 G9 e# p9 v% \( P; o& G return;# r: @; W z3 |
}
+ i7 [5 ^# I( j0 Z) x8 J m_Item[m_dwPos].nIndex = nIndex;
8 v+ D% Z; Q9 f" O3 \ m_Item[m_dwPos].dwId = m_dwPos;5 Y% \2 x f( `; Q
m_dwPos++;
; O. f' d0 b8 a5 |}1 f/ V$ ]6 O) r: ]8 E9 U) J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ G8 M; J5 m( ^. T6 n
{3 b! _9 q0 b! }2 W
for (int i=0;i<MAX_INVENTORY;i++). n" W! H+ E$ U+ D
{
3 n0 U! Y( A$ {9 `% Y4 r if (m_Item.dwId == dwId)
1 K, Q7 I2 ?) p& f {
7 T* j( O/ ^$ f6 q' G- j$ Y return m_Item.nIndex;
5 s& `0 t7 P9 ]1 b* d }
/ Z; x2 p( A5 w, ` C/ b }! q1 ~0 I8 ~1 q7 [
return 255;
( a: I" k9 V* F6 z \$ l}
6 x8 u( P/ C1 a" z2 _6 _4 w' A, qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 T; d5 D' ~& J' [( G% ?! t. M
{
2 w/ J: x/ i" h BYTE nTmp = 0;. t( f, h y+ u$ c7 t! E* y
bool bDest = false,bSrc = false;3 ^$ R% g# Z) ?3 i* }
for (int i=0;i<MAX_INVENTORY;i++)
# J: y# B# f1 W/ `2 r7 r {
, V' A5 Z5 L$ H6 } J) \ if (dwSrcId == m_Item.dwId)
" @/ r4 I2 _9 U {1 P( ]# W) t, s5 A5 N H4 L. p
//id相等 则 改变对应的dest和src
! G$ j" x9 N! I nTmp = m_Item.nIndex;% u. _1 r# q& ^: O( z
m_Item.nIndex = dest;( |/ l# t: }5 t9 N- }
}/ }9 s, o# i: t, ~3 v: _6 ?
}2 \8 a9 G4 G) `6 d
//临时数据保存完毕,交换开始! w1 t; b M5 t8 \6 e1 }6 `
for (int i=0;i<MAX_INVENTORY;i++)
; }7 `* v6 H- ?& G G# g {
) G, p$ i, C) d4 l; P- F if (dest == m_Item.nIndex)
) } H4 L r. y* R {0 T7 M; F1 k3 G0 ^0 t
//id相等 则 改变对应的dest和src
! y2 A& V$ W" G( E0 H m_Item.nIndex = nTmp;
) H$ {3 c9 g6 O$ Q% y }
0 @ P/ a5 d$ G! |4 O1 q }
4 [1 E F2 {* F4 R) {# C}
) M L: v, L- g; V. V: @$ i};
5 d9 d$ x4 q. U$ p-------------------------------------------------------------------------
7 m# d- e. l! I M4 r' n# G1 N( X依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 i9 ~$ y/ }6 p- b2 I" s0 x1 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 F6 X- c5 [0 H" h紧靠其上添加:0 w) g3 O3 h/ _( c l
if( pWndBase == &m_wndMenu )
( \4 s/ L+ D) K( r{
) T' @# f3 M! @5 _2 o switch( nID )
$ p7 Z4 [' L' N {
$ x! ]: `( d- S7 f% s5 V0 H9 L4 i4 L case 2:% Y6 G' [, O+ O. t s V$ ]: x
{
7 O- i$ _- B) s0 D2 K4 J //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 M9 f( m# l! A/ ^$ }" d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# b* Z/ E/ F' `
{8 y, u0 z3 b$ G3 L4 G; M& k. r' @
break;
0 K9 l* p1 p3 y! J) J6 Y: h }4 k; q. V& ?: d3 V6 A2 c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" g3 |5 l1 I, O* S' u0 F {- R) W8 `9 _- e' W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 Y" P8 p e7 L9 y, `2 ?, ?; d5 W5 {
if( !pItemElem )
# \5 K4 W+ M( R# K$ b8 [ continue;
; S+ {% Z" Z8 p/ ]4 ^ if(pItemElem->GetExtra() > 0)$ L# U4 t/ r+ z1 K {1 B/ N. v# C
continue;
! @+ G& E- p/ x& s# u0 I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 d$ A. |# {) b! a, P continue;
9 K$ N' A* i% b8 j7 i. w. J if( g_pPlayer->IsUsing( pItemElem ) )) Y$ i9 T4 m) D$ |
continue;) @+ E( P, m! F" I! a+ s$ W E! R
if( pItemElem->IsUndestructable() == TRUE ), ]& c. x$ E4 H! }- S
{
' Y+ L5 c" C9 B2 ~ v g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 R% n. C9 @0 b5 | continue;+ l0 Y- s3 Q1 X3 M9 F+ I: i
}
( k, N- B( V1 Q. U, `0 } E% X; H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 Q! e6 ~! H' U0 p/ @ y6 a9 M" ] }/ @( x" Z8 X% O% O8 b* D- e# A* }# E
break;
B m' g1 y0 `5 b- C }
- }, Z+ J6 N% r# Y6 ] case 1:
+ e/ @' x, S: F$ q {" e$ l' D. r9 c0 W! r: [& u
//整理背包" {* }- c% e- m/ j4 ^
//////////////////////////////////////////////////////////////////////////9 p( N4 w! w) [9 i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( l" Z; r: c% C( B( M6 y2 c /////////////////////////////////////////////////////////////////////////// q0 K# x" W0 y5 l
//////////////////////////////////////////////////////////////////////////
p* f0 l R1 Q5 E CInventorySort* pInvSort = new CInventorySort;! w& g- p3 V [: f% ~
vector <sItem> vItem;
+ Q( Z% J$ Z& Q vItem.resize(MAX_INVENTORY);//初始化大小
" G" n! {! z& x' m# a |/ v ////////////////////////////////////////////////////////////////////////// M$ P! F2 h8 J* b7 z! G1 z9 t) g6 o
//填充数据1 w) C/ y+ B* k% u# J' d3 G3 d$ w
for (int i=0;i<MAX_INVENTORY;i++)
5 b3 {# e" |; O! x$ N& V% q3 a {
5 m' S' Z; U: k. K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* O2 Y; x( o3 ?% z
if (!pItemElem)6 ~7 Y+ h1 e. |% t/ H& Y
{1 S! ]& f3 d8 g+ l( @
vItem.dwKind2 = 0xffffffff;" J( K; @$ f' S( L9 `, g9 K) \
vItem.dwItemId = 0xffffffff;
4 Q. \8 c u8 i! G" f4 b3 K# Y vItem.nIndex = i;. n, w' q! Z2 |9 G. e
}else {
2 m3 g6 ~" C( D* x) s# r4 p ItemProp* pProp = pItemElem->GetProp();* X6 G' h7 _4 Z4 \# V
vItem.dwKind2 = pProp->dwItemKind2; B- d* I; e' W2 S
vItem.dwItemId = pItemElem->m_dwItemId;8 d, a" t' Y5 K' o1 W
vItem.nIndex = i;) b' @4 z4 W- j4 x
}2 h+ B5 Z0 O! @9 o6 I% \ k
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 ~: _- ^* N, \4 L1 ?1 s }4 B* D& r( [8 |2 f
//////////////////////////////////////////////////////////////////////////
8 v, `1 M# y, F d$ v sort(vItem.begin(),vItem.end());//排序
\0 E: P2 O0 n) E //////////////////////////////////////////////////////////////////////////
* B5 ~6 u$ V5 \: T3 u; t) ^ //交换0 w5 C5 Y( X. [2 {$ H
for (size_t i=0;i<vItem.size();i++)
$ q- Y: O( R* Y/ U: V {0 x4 Z6 M$ A: ~& ?9 S1 ]6 |
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' G% X& i' ?. C4 |
pInvSort->Add(vItem.nIndex);" F1 F S% @; [$ y
}: N1 c+ ]# Y% K
BYTE nDestPos = 0;
E7 u! A& d/ f& w8 K1 D for (int i=0;i<MAX_INVENTORY;i++)
4 B# ^2 K3 m! ~6 }9 m {
6 N% n1 f2 l' S2 q1 t4 E+ ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( B! M6 Z3 ]' N* @. J! @5 y
if (pItemElem)
4 D- F4 o! N X3 m( b& \7 c {
8 L& S0 T- F7 r" p8 _ if (IsUsingItem(pItemElem))
$ K; T7 ^; p/ x* k {
; R9 U% b& p$ w; z) S //这个位置无法放
; L: R$ _6 Q, _) ?8 U& z2 w" u nDestPos++;
- h1 I+ e" R- s* Q: {% w }
" u k2 d a' A: {$ a }+ I) a! Q3 w: n# w8 d8 ]* z, a
BYTE nSrc = pInvSort->GetItemSrc(i);
$ M3 G3 O0 u# \5 M' b4 I( o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ g6 G5 a' c7 D+ y3 w! c5 u) T2 [3 ^
if (pItemElem)
8 |8 j3 g, {* C1 H {4 p4 G& l1 z3 y4 f1 Z) {
if (IsUsingItem(pItemElem))
. g3 `" d7 j! _$ [( L/ z& S! B {& [! k, F& C/ X, J! [
//这个道具无法移动,跳过( v1 }/ M- ]5 S% P
continue;4 y7 N) E/ U+ q1 }8 R/ c. Q
}! l/ `( `; j7 e5 v# o5 K& k; _
}else{
( H% g2 H( \! l- ]2 Q //空位置 不用动
& K8 V k; G6 O' n3 D( w: S3 ^ continue;* o: `3 h2 M* g2 Y8 M7 O
}8 I" `& K+ C3 `
//////////////////////////////////////////////////////////////////////////2 ?$ N; T7 T9 I0 e
//开始移动% Q: x, a9 P, C, }2 R! g
if (nSrc == nDestPos). m1 c. q, Y$ D5 ~
{
) s3 @) u# ^: Z //原地不动
, [2 e( p) V! x5 W& m M9 L nDestPos++;1 V( X9 c R- K7 d p0 Z
continue;
9 p9 }2 Y; v2 I: v }
5 s+ ?0 ~2 M B5 a1 W' }7 F pInvSort->MoveItem(i,nDestPos);& v9 d. Y- l7 {. G+ U' @1 Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 `5 m9 C' t0 H+ r, w6 L4 P4 D Sleep(5);$ R7 y; m1 G# F. w+ F/ T
//Error("移动 - %d->%d",nSrc,nDestPos);0 x" @# U7 P- r4 Y
nDestPos++;' h, X8 d, m5 N6 ]: E# R4 d
}
! S3 Y) c- R# D6 K //取第一个元素的信息
: y7 W: |0 o# b/ V; q /*7 @$ c: G; Z w$ f4 [4 l3 m& ?2 \
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: A, F0 q7 v- w/ g5 w {/ Q4 z4 N/ Q# A
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& g' [4 D, |2 H6 l2 `* N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& s) g4 C, ]9 @. |' u
}% U5 d+ f( T. T. p z1 Y( ~
*/8 G) n R( g+ d+ A
//////////////////////////////////////////////////////////////////////////$ F( G" t" W' f0 ~! h& f& R# A
break;
c! {. t& C: r: |! U }% e) E0 j4 P+ ^! V
} 0 |6 C5 ]1 P% [4 o
}
5 r+ [6 ~5 J$ P7 Zm_wndMenu.SetVisible(FALSE); M0 {$ o" \8 g
; F I4 c- G# G: {0 L/ n
--------------------------------------------------------------------------------------------------------" f0 l; V$ X( [% C/ y4 S
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" R2 Y* i8 Q: m9 {" k! w) E{7 W# ^: H( w |0 l" c- H, @
BaseMouseCursor();
6 c" E$ m9 y: I \ Z) W( {% U& {}
1 P: w# H4 T6 R# n" D在其下添加:
9 W1 ]3 g5 n6 z. u% xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 L- l- Z9 L* n* f, f% ]4 E
{
$ W' S. Y* ?: e4 V$ s4 o a) zm_wndMenu.DeleteAllMenu();
/ h/ q/ ~1 F3 j# _; |- I0 X3 gm_wndMenu.CreateMenu(this);6 ~. c/ S! ~/ ~8 D* a, d, h: ?
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* P7 G7 a2 Q# @* C. ^' c7 x$ r
% R! P. K, Y) f9 `% [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 W4 n8 \' j( C* N
{8 Y i3 d5 h$ C( o T; I- y( I% @) o- S
//P以上级别才可以删除所有道具
1 D, ~% z$ N- u% w) Z' u& F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( h7 g; c$ e% b; C" H}
1 ]3 |" V( W% ^0 h% {) L9 n. M* tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; E( S- q$ U+ v9 E; ^6 ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, z+ `2 N1 L7 S" ^: N- ym_wndMenu.SetFocus();8 F: X- p+ A5 v
}
) l. ~0 }: D& Z$ O" z------------------------------------------------------------------------------------------------------------
/ s0 ~/ K! ~- p6 n a% `: ~*************************
5 |% x4 y; l% k' `WndField.h文件, i% Y" y) R2 x. Q; y
*************************
6 j) Z: |# ?3 }9 T( O0 l& e搜索:BOOL m_bReport;/ P' [. h6 @8 j" _: N$ A) l0 D7 i
其后添加:
+ A& O+ B& D2 z; ]! y2 m6 {8 ]CWndMenu m_wndMenu;
K! `' l5 Y" S7 U9 {搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 ~ ^8 {2 `3 d- R. ~! p* o
其后添加:
1 e# Y# Z$ q. c5 |% s) O# }" Rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
5 S$ m, X8 J7 B' o# ~! V/ ~
8 |" y; p i# u, n1 T a
- ]6 ^6 i# B2 p$ { j |
|