|
|
源文件中_Interface文件夹下WndField.cpp文件4 g3 _" w2 P/ l, J* \) A
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 b# k( B- j4 ?/ ^
; a$ c2 R# n2 ] }: s; K
struct sItem/ E- U& C! w0 K6 z0 y8 `
{3 M6 q$ j% a2 [$ U4 _
DWORD dwId;
5 d0 q$ t* P g6 W: o! F0 @DWORD dwKind2;4 ~" W# u4 M' h' A M4 z( _
DWORD dwItemId;
$ Y7 V2 D+ a7 R. S% W$ mBYTE nIndex;
1 ?( H7 d8 u/ ?( C2 o0 NsItem(){6 ~! @3 @6 ]& b- I2 S
dwId = dwKind2 = dwItemId = nIndex = 0;
: a0 R9 d. T8 o0 g# [' s5 h7 D}
( C1 s; }( L% }6 M0 J+ d7 |/ t: q! N Tbool operator < (const sItem p2)" Z5 e, w+ S- T" j, h8 R
{/ F% A2 M$ j# ]6 V' u3 A5 J
if (dwKind2 == p2.dwKind2)& s; q! r9 M0 }( |% M
{
' O; j4 j: t4 W" t return dwItemId < p2.dwItemId;
M$ P" Y# q I. C }else{
& d! J, F& b$ E+ f8 I( V/ V return dwKind2 < p2.dwKind2;/ t. }3 E6 c* }* e" `/ Q
}
& j2 e* O# n4 U: @: `0 B& S}5 D1 X' s* ^ z M2 |8 p6 j
};
7 F5 _% l$ n8 {. ], qclass CInventorySort
8 N, ~; G, s8 L [. N& i( p{
" |, E m( D/ S( n G/ mpublic:
! ^; C; {4 ^3 ?% qCInventorySort()
! F" Q# f5 K. D7 g: @% K9 k0 B{# P. \. b9 g" ]; ~& p$ o, Z* |
m_dwPos = 0;
* w% t( ~; H1 q& C" N% W9 g}
9 G8 K- d) ~: R1 h~CInventorySort(){}2 @: v2 V: t% F) Q4 J! k; @
private:* y% C1 ^$ P9 U+ W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 S5 R: t) W' r. F1 ]
DWORD m_dwPos;4 L% ]" Z# M% U0 |; `$ P- |; o! n
public:
, `* i4 h0 j% ~* R( A6 p5 Jvoid Add(BYTE nIndex)
. a- ?& h v: Y, i! J3 @{2 \% T2 A- F9 _9 ~6 U
if (m_dwPos >= MAX_INVENTORY)
' }5 C9 T6 ]( h8 Z {3 ]/ Q8 t1 |& \! {5 K! S
return;
( k; A4 }7 H4 D% Z. p }) d! ^) E& V5 d
m_Item[m_dwPos].nIndex = nIndex;! t; u/ t* t1 g; W, A
m_Item[m_dwPos].dwId = m_dwPos;
( U8 B7 E8 C V. I* j m_dwPos++;
6 j$ q/ U8 K$ u$ M7 p- ^}
+ U4 o! u$ b! nBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
6 `! P0 [3 @0 ?0 F& l" y( F{
. H" P; b! Q- P9 G4 ~6 k for (int i=0;i<MAX_INVENTORY;i++)" B! Z) l& _7 j5 Z& r, }
{
1 W8 y9 c8 C6 T if (m_Item.dwId == dwId)
O9 L9 M1 ~, X" e {
5 ^8 ]* `% F% b/ |% { return m_Item.nIndex;) N$ d" J' R9 K$ X: Y1 L
}$ x: r' _7 t' x% z W9 B% U4 J
}
8 A3 J. S7 x3 p \5 I; ?9 _ return 255;
# G/ E% b, @, u+ |* g6 V6 R& _}( Y5 X7 r: N+ |8 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# a- K; X/ D3 G% [! W{
8 D1 y+ H/ v$ r( c* E, M BYTE nTmp = 0;
% J' m3 p3 Z2 h4 m- n" _, v$ ~8 { bool bDest = false,bSrc = false;
6 f6 o! @! A' u# g/ o9 u$ o9 F for (int i=0;i<MAX_INVENTORY;i++)
7 w# T" u: o5 F" Y5 V+ t" W/ B; e& q {
3 u: X7 k$ }# w+ |8 G: G if (dwSrcId == m_Item.dwId)) v2 R w2 @* J8 p F) @
{4 f. ~9 l1 b3 p$ R: S
//id相等 则 改变对应的dest和src
# z# P) g* F2 e# v+ X5 k- \+ p- v nTmp = m_Item.nIndex;/ U+ e# ]4 U% o: c, h
m_Item.nIndex = dest;) o. o- q5 p9 k
}
. P3 l( g$ S# l1 E }: r5 ]% \: o' w \6 g' V
//临时数据保存完毕,交换开始. ?. ]$ v6 _8 A& p2 }3 V
for (int i=0;i<MAX_INVENTORY;i++)
$ k7 r3 g! l+ W1 c2 u/ L# {4 { {7 N% f) e. W, O
if (dest == m_Item.nIndex)0 C n; N! o& |) n3 W0 I
{
; M$ I9 t0 C$ r) M' \4 N T //id相等 则 改变对应的dest和src
; l% _7 c9 s3 L" K m_Item.nIndex = nTmp;
: Y* m: _" J [3 X }
3 I5 W. |' G& E. f/ R }
, O/ N% C& A: @}/ {( l4 R, D, r6 R
};
0 Z. i9 W+ w- n% G0 t4 _) ^+ s: z-------------------------------------------------------------------------9 b. o$ i7 O( W3 n8 F8 Y! z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). Q7 E3 Q' J, j9 R( O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* b7 l' W# y6 L! J% f
紧靠其上添加:
( t5 Q' w* a5 _" ~: c' ?if( pWndBase == &m_wndMenu )+ d w6 q; M K0 f/ G! L
{
! R& D2 e- m) r H" Z switch( nID )
" g+ W# b6 r4 f" G2 c" @" K {, T0 U% u; g+ K; p
case 2:
/ [, Q, F5 L9 W3 l0 A: M5 D {
( H* p" S4 n8 u9 T //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" z0 x. b2 {' T7 M0 k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 C/ X e2 t1 k5 J8 @
{% S# h f! B- Q( {" u3 W
break;
) v# P& a; V3 Q0 g2 i: L) N: N9 X: e }
* p3 }1 M9 A9 q3 u4 f- K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ q8 \. y) X+ [- `) l. s {, X9 D* v( m' Q& e4 M; V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); k( L8 P6 e; ^9 G5 w
if( !pItemElem )
7 ?% y2 {9 X+ K, M$ J continue;
1 x/ z; r% Q$ K* D if(pItemElem->GetExtra() > 0)
8 A% j9 Y8 C6 G% q# |7 d0 Z continue;
2 i4 ]1 p/ _; k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & S; v$ B# X a' C" W( X
continue;' N7 l, @3 c3 d, k; o" V
if( g_pPlayer->IsUsing( pItemElem ) )" i2 v. d" f' ~9 t: x: q
continue;9 b% h' a! w: {. x1 e' E& C: k
if( pItemElem->IsUndestructable() == TRUE )
. Y$ W- U5 K" U8 d+ I# n" K( Y {
, e# Z+ C1 o9 W, N2 W% H g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 m! I& S; n- }- m# E* g" w" E
continue;
: x/ z0 z( a& U: G- H% Z4 [0 H }
& U a3 R U; ?/ j$ o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! O/ k* l' k% Y# l# O' D: W: T' | }
5 E* z+ g/ _* C8 S break;
# ^1 ~% M$ s I" F( L; B5 ]) C }2 R6 O: f0 E" I4 \- a8 a6 a3 B0 n
case 1:
; \! W1 J+ z4 L6 Q( r- g1 ~ W {
0 [# H, O2 Z' i* |3 Q- F //整理背包% c# Q/ v) ]; \; w( ]' T
//////////////////////////////////////////////////////////////////////////
( o% }) }. R6 m4 o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" S7 O9 s' S; V //////////////////////////////////////////////////////////////////////////4 k, V# H- b% H5 {
//////////////////////////////////////////////////////////////////////////
8 |/ s3 b! _, x CInventorySort* pInvSort = new CInventorySort;
' \% z, I$ c+ s' ?9 `- I6 B+ `2 s vector <sItem> vItem;
- u# a3 V( L' B( ~7 E- {6 a1 ? vItem.resize(MAX_INVENTORY);//初始化大小
! m3 h3 [' b. ?2 i //////////////////////////////////////////////////////////////////////////) }& R* w" t: f4 ?0 u
//填充数据6 \+ e/ w- X* k. L1 |
for (int i=0;i<MAX_INVENTORY;i++)
: t0 h" ^ V9 n! ?" i {
' f$ H( E1 m( b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; u4 _( \ d; M5 {# g if (!pItemElem)
2 x3 Q- C: A7 m$ { {5 S7 W( m! y. o* |2 R y
vItem.dwKind2 = 0xffffffff;
' C! x) Q$ t; n3 r2 p vItem.dwItemId = 0xffffffff;" u% _8 P% p I9 x) U+ @
vItem.nIndex = i;. o/ |3 k4 k0 E6 P) S0 R2 `8 T
}else {
& J! Q4 i |. F1 h ItemProp* pProp = pItemElem->GetProp();' e9 _" R+ C/ X2 R
vItem.dwKind2 = pProp->dwItemKind2;
$ c' e U0 }( a vItem.dwItemId = pItemElem->m_dwItemId;
6 f! @0 T/ {" [4 H2 Y* A vItem.nIndex = i;, J2 o! A$ A, O$ M0 k
}/ {! F3 r! Y* c
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 ~% ~5 k( h6 a& [ }
8 S* e# o5 T9 G+ K! M* ~$ n //////////////////////////////////////////////////////////////////////////
" u: K$ [8 {" } sort(vItem.begin(),vItem.end());//排序
, ^3 v+ O0 J& X# ?, @- V //////////////////////////////////////////////////////////////////////////" P; l) D6 o! U, e) C
//交换! G2 X) V, g d# d3 C% f
for (size_t i=0;i<vItem.size();i++)
$ p2 f8 B2 }& l1 \: _) T {
: S6 G6 f9 p; j |+ d( O( g2 E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- E/ V- m& O) Q7 W' C+ y
pInvSort->Add(vItem.nIndex);( J9 Y. ]" Y9 e" U! Z
}
0 I: _" F9 z0 p: Q8 A BYTE nDestPos = 0; S2 I% K$ {6 B. \; m2 w( @% |7 ], ]
for (int i=0;i<MAX_INVENTORY;i++)0 d: R0 Z3 r2 g: ~ Y% V
{
0 B: {) m- ?9 n3 J d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 u' a1 c# a' r8 z- i6 ~3 |+ Y if (pItemElem)! z T% j! u2 A
{
; c% S+ F; v: c. L+ X if (IsUsingItem(pItemElem))
' K1 N! a5 ]& u1 G" _3 S, h) x4 I {
8 v) H& W8 h+ S7 B& w //这个位置无法放& w0 c9 `; Q ?% ]
nDestPos++;8 z, u' `7 M% t* h
}& F) ?( A: y4 ]. j
}
- U. D5 W3 l/ y- ]8 Y BYTE nSrc = pInvSort->GetItemSrc(i);; Q* d. K+ ? _
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 r$ h( D& N# n9 |7 r5 U
if (pItemElem)
6 M+ k* K! f1 j- q5 T9 C% a/ n {
* r) E5 q, G" L6 i if (IsUsingItem(pItemElem))
9 x, p; s, u5 i# |3 J0 N {
& ^+ W4 t D; \! _6 k# V: X //这个道具无法移动,跳过
* q' q2 o g0 \* \! D continue;
: K1 S0 F( P# u+ @ }
0 s/ h5 ^2 }1 b. Z0 V& \ }else{" v7 f5 x2 z2 N& }. Q
//空位置 不用动
% i& P3 P" [7 d M continue;( y2 w4 B! D% q9 [: N9 [
}
/ _. |4 U7 ?7 P" f //////////////////////////////////////////////////////////////////////////
2 O8 z0 K; |! r( Y" ` D2 Z //开始移动5 l$ Z- S3 u/ b" }
if (nSrc == nDestPos) A2 ~$ X8 k' O _/ d- w
{
2 v0 {: T; ~( p8 v //原地不动
; r0 d5 Y+ ^* H nDestPos++;5 ]4 E4 B) R! m0 H6 S4 @6 v" o
continue;/ F# {% j) ~2 N
}5 k6 Y! c5 z B! C4 l& A
pInvSort->MoveItem(i,nDestPos);
; z. _6 O9 X5 q g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 F0 f/ L# T+ o- e Sleep(5);$ M) G* v6 f, e) q; }
//Error("移动 - %d->%d",nSrc,nDestPos);
4 }/ I: r+ n) Q' F) }! w nDestPos++;
5 H/ I1 a( ^3 J' ?6 ? }
u, \1 {2 b3 y# e5 d6 V //取第一个元素的信息8 {2 Y/ W" l: S3 F7 P) l
/*. A; s; t) \/ q* Z9 ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- h; U/ \* X) u/ h6 n; `% r- P {
3 a) m5 U K, U( {& b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 [5 q; x4 |2 g# W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); x' y/ |" U2 e4 ~' p
}
5 D9 ?8 p/ I+ v& d4 U8 k */
$ {- v+ d7 V% w% _# j //////////////////////////////////////////////////////////////////////////2 o- g: M) f3 q* ?- p/ F' R' p
break;9 K8 N' u) V/ e1 x; C, F; U
}) [7 b, M J+ @& n& H5 B( ]. [2 Y% X2 L' L
} . U+ Z! J! E; l( F8 l) m
}
5 J. I9 }; C& G$ S7 ~m_wndMenu.SetVisible(FALSE);
* ^9 @. w* I1 G/ ^. l [' W$ n
, n9 {( w6 G. u--------------------------------------------------------------------------------------------------------
# F1 M5 y- o H. j1 a( b; K5 y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ s( j9 W5 T" U& D{6 A, W$ R+ j! b, u% R
BaseMouseCursor();" c% w1 }+ J; H; C/ h
}- t: C! M7 U9 p: D" K/ t
在其下添加:
' y4 O1 ~3 E8 E: P9 \. Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- M) f' F2 q E" A. w6 ^( R
{* q0 l l: Y3 h2 w# U
m_wndMenu.DeleteAllMenu();, [. s, C7 K1 l% ~8 y! S: G. n
m_wndMenu.CreateMenu(this);+ ]7 s2 B: z1 `- m7 ~
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ l) q5 ~" N% C: K* _" t7 ?4 i( }8 S. s. q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ Y/ O0 t9 K( v3 j. q{
6 x" r2 e, ~3 ~& C: y! g2 z //P以上级别才可以删除所有道具
% D( r T: j6 C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" I( Q" q( N- N9 M H: @/ t4 [}! n; K2 Z! W5 |- O e# O
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# I8 C2 |3 k+ F. Q# C; [m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# g1 i1 a9 p* C
m_wndMenu.SetFocus();
2 s% D; T& }! D3 |$ u}
; d Q" `! I ?, Y------------------------------------------------------------------------------------------------------------" M5 z3 x$ x* @; x5 N
*************************
5 O z- M" V1 v) _+ ?$ sWndField.h文件
- J& R+ W' Q/ f*************************- z: E- f9 `5 P5 s/ g# w0 ^
搜索:BOOL m_bReport;5 C1 l1 u' k; r5 `- s1 T
其后添加:
" j- O; A0 P' WCWndMenu m_wndMenu;
0 O9 c0 x1 z. N+ g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, e+ T0 w/ |, P+ \% _5 r
其后添加:* d* B5 S% K1 @0 t# S S
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 h. t! ]! A; p; s. F) K9 P; d9 A5 H7 f6 j( O
! d. I8 r0 y* B/ {
|
|