|
|
源文件中_Interface文件夹下WndField.cpp文件
9 M6 Y7 H3 Z4 r- m# n8 ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- t! A$ X- a3 ^- Q Q7 K6 e" l
0 U2 a1 l! t2 S8 ]$ pstruct sItem' S9 F- \. s# d) v7 A7 s% H
{& w1 K; C6 V) U; k( ~# L2 Y
DWORD dwId;
8 Y( A* R0 H( T# e5 o/ K$ _1 W1 u* ?DWORD dwKind2;+ k- V7 y! O8 {1 M: G( U& q
DWORD dwItemId;
* g& W* O& z q; }5 VBYTE nIndex;: m! Q$ H1 i3 e4 Z
sItem(){) R6 g5 o- _9 N7 H5 N6 [+ J# j
dwId = dwKind2 = dwItemId = nIndex = 0;* j6 n% u2 e! e, k" b c
}
4 c7 U& a( P3 q8 H2 M/ obool operator < (const sItem p2)
* R4 a$ t+ a: X! s{' p( R5 w3 f5 x) @5 B' @$ T A/ P
if (dwKind2 == p2.dwKind2) f8 F. a; D: E% J) H
{# A9 n) B0 I: b1 r5 {
return dwItemId < p2.dwItemId;
! w5 y2 w. ~% f5 s }else{9 P% K- @0 V1 j. B
return dwKind2 < p2.dwKind2;
! B$ S8 [8 Z8 w# y+ g. @1 x% _6 ^ }3 a, v# r$ r8 q) F/ o" J t
}
& r1 r- ?2 X5 x+ l};
$ k, _& O J6 T# l; C( \class CInventorySort
; u6 z6 U+ q g8 A Z' h{
5 A$ b8 \; Z4 l; w" Y8 k- z& opublic:
7 {' j: A4 V& p% Z6 t0 D# d4 qCInventorySort()
. t, |. N! `: r- a{6 z2 q+ l/ n0 E3 b7 _
m_dwPos = 0;
# c! q9 U7 _. m' p' F} j: p* W0 t) P, u
~CInventorySort(){}
! y! Q7 P& H) g2 `8 x) k! J0 ^: ?private:
! ~- H% g2 A3 DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: s0 ^. I! @: c& |# s: w& IDWORD m_dwPos;
3 i* i1 J3 u/ J) f( P1 npublic:
0 ?1 y' x# ? d# u' qvoid Add(BYTE nIndex)3 j" l: ?/ y4 d# N. T2 h
{1 c' L" w7 q i# w& d
if (m_dwPos >= MAX_INVENTORY)
. [- ^2 \" I1 h0 e ` {
+ A0 f, ^8 g' o# c% f return;: y2 Q9 R- T d* o/ _
}. k+ Z1 X. p( ]# d/ a* x
m_Item[m_dwPos].nIndex = nIndex;; h. y7 ~4 ~6 p* w
m_Item[m_dwPos].dwId = m_dwPos;. H p2 o, c7 R# y
m_dwPos++;4 E1 j0 r2 Y) ^. N; Z
}0 I2 y; N0 ?9 R, n" ^$ s7 R: g$ I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( o5 Q- W8 U% S6 P
{7 e7 P; `" I; ~" _
for (int i=0;i<MAX_INVENTORY;i++)) i1 d% w: H6 N$ C
{* v9 ? J/ S! l O
if (m_Item.dwId == dwId)7 C8 K- _; Q, R% q0 C
{7 S% r% o: y. l% i5 r+ d T
return m_Item.nIndex;6 E* Y6 L' w1 S0 z+ |, O
}( N, y1 h9 y/ @& w) {1 V* N' r: P
}$ U4 L/ W, ]' X/ F
return 255;
- ~( k* `$ J# a/ }}
( r2 G: v' M S8 Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 q A" Q4 B* f0 W! R{
& v* ^% s: a7 i BYTE nTmp = 0;
5 ?4 \2 v9 S/ g# h: C bool bDest = false,bSrc = false;; I8 r( U/ v# ]' h
for (int i=0;i<MAX_INVENTORY;i++), i# v: N/ {: o
{
; p; `6 R* N8 n if (dwSrcId == m_Item.dwId)
! }9 m @+ A0 G9 C2 m {
) S# c( b: e0 i* {+ u, H: [ //id相等 则 改变对应的dest和src9 f% O# C; R) X. J* U( q
nTmp = m_Item.nIndex;6 @/ C: n! `7 z8 ?& M7 g/ U& A
m_Item.nIndex = dest;0 B3 k- h( z7 s7 W8 X" H
}/ W( d% R6 Z( ?: A, R2 f
}
; L( o. F2 v3 H1 _* w8 | //临时数据保存完毕,交换开始8 p1 E2 }" R! x, t D& f9 k, I
for (int i=0;i<MAX_INVENTORY;i++) k$ I0 F* i! R
{
7 k( f. U4 I7 g j8 K5 T. s) @ if (dest == m_Item.nIndex)
, U4 m& u* m5 q u3 N" w2 h {
$ i& a, v* w$ N' Q //id相等 则 改变对应的dest和src
' f l2 {( f x5 _ m_Item.nIndex = nTmp;: j" s6 l( ]( f( T5 b
}
( l" B$ f; W" k1 y" r }
) ~( c: @& M5 V8 l}
* z4 R3 Q k4 V' m2 y};
9 ?3 _2 @/ o8 G3 G6 w-------------------------------------------------------------------------* f2 J; ]. d6 J9 \% M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' A) E m; l+ U4 P: _: w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. w# d! K! X' {9 M) j
紧靠其上添加:
( i+ D5 g; ^1 Z. Q' D5 `! p W9 K3 `if( pWndBase == &m_wndMenu )9 A: }5 G% k6 H% D4 i
{; v: S" N: Q2 s6 R$ ^# }. {
switch( nID )1 `. {. Z1 O5 V& e2 E- `* c. I
{" i2 K+ y2 V# i
case 2:
6 p+ x+ Q% u& s {' p1 N) c# B- a d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! P) w; h' [- Y, e7 G if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ X5 p2 H/ Y( `' [ {9 ~3 x- J q7 C% M% {+ f" e; `
break;
" l9 f" M. H9 C, k! J2 `: i' D/ y }9 Y- j9 F( m! f8 K
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& ~2 ?( w) ?/ y) O
{* w0 [3 w* c; I& V, k! b: t. U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 N" F) p/ ?) S% y+ v% U T; a, w
if( !pItemElem )
$ D) }& f6 x2 Y; p3 E# G continue;
4 G3 s) X1 u0 {: M2 n if(pItemElem->GetExtra() > 0)9 A6 p3 D& ?+ L J8 x
continue;( x2 I+ y* i( \* R' M' {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) [" R7 z6 i* m; D' } continue;) R) t# r& X% l/ [6 P2 o$ D& s& s
if( g_pPlayer->IsUsing( pItemElem ) )
+ \* ?* m( v* F, ~+ Z$ x5 Q continue;
! Z: p8 x$ g. p: u! C. X- I if( pItemElem->IsUndestructable() == TRUE )
" m1 j' B; j1 K2 C# n- u! k {
g3 e( ]4 X7 ?; |5 j g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' r5 y5 O8 A% S
continue;$ Z2 r8 \/ C, U1 U- T1 d+ j* z
}
3 Y" ^' Y$ n9 P: `8 X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 d& m8 O& V7 \0 g
}$ D" K3 u6 _: y. A. b4 O* h* s1 v
break;- E% I0 d& I; \0 ~& P" `% A
}: q( w2 Y+ Y( d) X6 H$ K. N3 F7 E* b
case 1:
$ G* k+ K! j( B5 y9 L2 M {
n* s& t% U1 o6 I: b7 O //整理背包
) w, V% ]% u( h1 Z. a% c //////////////////////////////////////////////////////////////////////////' F* e0 E" d' K8 {; f
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% v9 x a A! i* p
//////////////////////////////////////////////////////////////////////////" n% {: V; A" f1 f- _
//////////////////////////////////////////////////////////////////////////
* \! q# J) v+ b$ ^# ]9 Y CInventorySort* pInvSort = new CInventorySort;6 B8 _7 C9 A5 O' [; C
vector <sItem> vItem;3 G6 P' P: S5 @/ d* H
vItem.resize(MAX_INVENTORY);//初始化大小
7 @# W0 E$ z- t" [ //////////////////////////////////////////////////////////////////////////
( h! g2 C% |( \8 q& ~. t6 \( p, x! B //填充数据
- G) Q9 K0 P: y0 M7 ^4 P& E+ v for (int i=0;i<MAX_INVENTORY;i++)! w: W# d @& H# f
{
1 K3 j8 b0 ?. H' ]; x3 E7 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: U1 z/ r- d1 `+ F$ R6 d
if (!pItemElem)
7 D. Y/ ^6 O" P& i( f {
5 z5 x9 J8 F% ^6 k& d vItem.dwKind2 = 0xffffffff;6 Z: f- v/ H% ^" c7 t/ N! v* p$ D
vItem.dwItemId = 0xffffffff;+ G7 P5 a* u5 l$ O. v' \0 K$ N
vItem.nIndex = i;3 a$ x X7 \$ C! j$ g
}else {0 c1 i. A- i% d3 G. @
ItemProp* pProp = pItemElem->GetProp();6 j0 |$ U8 V/ c! I
vItem.dwKind2 = pProp->dwItemKind2;
, O1 a0 ]" Q( C% R8 C$ l8 w p vItem.dwItemId = pItemElem->m_dwItemId;6 [" ?. {7 u6 l* Z. R! l. C/ h
vItem.nIndex = i;
5 ^4 Y$ ]( ^1 D. ? }
# c& N, \; m0 F5 A //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# Y9 R( \' A8 H" d* a, K3 V4 [
}8 C# ?# z2 w+ V, C) l) S
//////////////////////////////////////////////////////////////////////////5 ~ Q7 O' O$ ]: |
sort(vItem.begin(),vItem.end());//排序! C( r2 k# j0 x$ ~9 J( D; l$ E
//////////////////////////////////////////////////////////////////////////: a9 q9 a# U0 l- O
//交换
+ f, N$ m" q" ^ for (size_t i=0;i<vItem.size();i++)
6 R* p7 c, J: S3 o {
8 d% T" a1 s! l- g //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* ?" _' e& F$ }% |5 z- z
pInvSort->Add(vItem.nIndex);1 `* [. s6 I- k1 R6 d
}
+ q5 U( [, A/ E) c' B" ]9 C* G8 c* J BYTE nDestPos = 0;
" E0 U1 D' c3 i( ^ for (int i=0;i<MAX_INVENTORY;i++)4 A e+ j Z' K0 H9 Q' |
{
! y( L9 f/ }* Y5 a( q- v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& c3 L$ ?$ @& Y0 B2 E' O6 k8 y X if (pItemElem)( M$ ^5 ]8 V- z, l! ^) E$ K/ X
{
/ t% c2 t/ c' J( Q if (IsUsingItem(pItemElem))4 Z5 T' A* n- b* a
{! m, l- k5 ]3 z
//这个位置无法放
1 H$ A6 i2 N. P' [% O nDestPos++;
0 w4 p. A+ N- Z9 d8 Q1 T1 t } @0 n+ ?% {" D& }6 |- g$ e
}! j( z! `1 g' q8 a; P5 a
BYTE nSrc = pInvSort->GetItemSrc(i);- |8 }6 I6 E" E
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ L! [7 j2 }" E
if (pItemElem)
. |+ V0 c. w- r+ c% q0 b6 i* h, M {9 X! q, B) f$ B4 x: E. k- S
if (IsUsingItem(pItemElem))
! f4 J6 L5 z& O/ Q: B0 M, P5 r {
5 P8 P7 @, A- z8 }# ^" F/ P; I //这个道具无法移动,跳过
- y R; b- r( \ continue;( m1 {% B! n7 e: b1 s
}
$ L' d4 X, D1 U }else{! U. Q ]: b0 C8 O: ]
//空位置 不用动. T0 [/ ?9 e1 m) y2 S+ V
continue;
7 S* {: V% E4 H4 A8 g }0 A7 n" Z5 N* f8 U& Y* t& p
//////////////////////////////////////////////////////////////////////////
, }; Q' G a2 `" W+ d. _ //开始移动& T( I0 Y1 g+ c
if (nSrc == nDestPos)) r; F4 @' D/ t$ B* c3 |
{
$ G0 A6 R. P4 c6 C* n //原地不动
7 H* `5 ^ J6 b3 e7 I$ i nDestPos++;& J- S0 q$ H$ C/ `5 a* e
continue;6 P# b1 E$ i* g: l: F' u% g
}% F! Y) M! R6 \: I5 [. `
pInvSort->MoveItem(i,nDestPos);8 A( k8 h( A/ L+ A: f- o- j
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' y- ~' O ^4 e& P. x Sleep(5);
; J0 B6 i& h6 d: u+ [4 s& G //Error("移动 - %d->%d",nSrc,nDestPos);
( J/ _- o- X2 J nDestPos++;* K9 b; C- R0 n7 ?, ^7 j3 c7 e
}7 q6 k( y7 L' D5 X
//取第一个元素的信息6 [, f% Z, o4 Y6 y$ Z" K
/*8 H1 t9 |# B- H$ j. P# R+ e4 {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% y5 B0 z6 g. @' l6 J# F {
{7 P$ Z2 [$ \; N# a. Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 Q* K/ {8 ?0 ?/ p7 n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 l9 y C, S1 t) [+ T. u: ~
}
$ ^( J0 }( _5 m2 Z8 Y */. ^9 V H9 K3 l3 | \
//////////////////////////////////////////////////////////////////////////& V3 k5 n8 C9 F1 o6 I
break;
5 g2 P: C1 R4 X }
/ D8 n4 j- y+ z- A o } / u& V: c6 M6 }7 i. j7 a5 m1 O. Q
}
8 o( Y, r" F0 S' n0 X2 _. S! k+ om_wndMenu.SetVisible(FALSE);+ n+ b i1 A7 ?6 u' E0 I% }5 L( D
; v6 T9 r) Y6 Y( G! a--------------------------------------------------------------------------------------------------------% g7 _: b& S* ?. n; z* j% d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 e9 i! O9 D: a/ D$ q( e4 \{- s0 I& ]$ k& i3 _- J7 D
BaseMouseCursor();# K9 u; L0 a: d
}: j F. b K3 y; i8 i% y. f
在其下添加:
q J7 C9 X0 r/ Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 y) W) _- a; X, ?$ m2 H7 O" g{$ h: {: x) ]. c; [! f- Y
m_wndMenu.DeleteAllMenu();; O0 h! q& u& `: ?
m_wndMenu.CreateMenu(this);! U5 }& u' b- N5 r `; `* j/ O
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ | L$ [0 S! V1 s2 e$ i4 U
& N v' G7 {- @( {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( i( ~ B* ^ L" v
{: I( R" U; {. e# J2 Z! }4 h) w: p
//P以上级别才可以删除所有道具6 T/ A1 D: l: `
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- h1 p) ]7 W1 S}
: e H* ?- G/ B( z* `0 e0 ~" @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% a0 L) X) l$ N. s1 w5 M- vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 \( J) m& b! E9 N/ d) @
m_wndMenu.SetFocus();* a" r7 G8 D# m# m( ]
}
' _& C! W, p4 w7 d1 X------------------------------------------------------------------------------------------------------------
% w3 O5 D5 O2 ]*************************; z; D# m8 ?, R& I
WndField.h文件
) a) t# @0 O- z! |0 F! P0 i*************************
7 ^3 }0 I# m; }' A/ x; R* v( o! ]搜索:BOOL m_bReport;
" B; ~3 y. N+ K; C3 q% s. `. \其后添加:
) b" |, N% c4 uCWndMenu m_wndMenu;
( t4 i3 H2 ` N' C: v1 }搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ X( i9 s) j' ^+ Z$ R8 O其后添加:
+ E5 x% C) Z0 Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ l! N6 p% r, ~4 Z
X8 Y1 o ?& q4 i: ^
: a( q2 |' L! d( U7 V% L7 ~% \ |
|