|
|
源文件中_Interface文件夹下WndField.cpp文件8 d& t- r4 g# y! ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, m8 Q( i, V7 E0 x' w
% s' t7 M9 q: |' zstruct sItem' T: {! C1 X: s: m; K
{/ i9 B0 C7 J5 i3 C! }
DWORD dwId;
1 f4 n! t. y$ I' b! P$ fDWORD dwKind2;1 K' T) m7 M7 a
DWORD dwItemId;% R% M) a$ m+ m5 }: y
BYTE nIndex;! R# L2 z( h4 o0 ~7 o
sItem(){
. R2 w/ ~# q* F' Y( Z dwId = dwKind2 = dwItemId = nIndex = 0;
# L a1 Q9 ]/ i& A) n( z7 ]}. }# w! h6 `, z1 b, {# @
bool operator < (const sItem p2)
. W0 R* I0 r8 c4 V' E{# {- a$ O/ X6 N: s' L
if (dwKind2 == p2.dwKind2)
4 t4 R2 b% A$ N# n+ l {' m+ U* R$ f, [2 Y
return dwItemId < p2.dwItemId;' s, r* R, h, n& T
}else{
: I. I" R3 |: W; E3 J return dwKind2 < p2.dwKind2;
4 `$ d4 V2 z( @5 {4 ~ B! z }! B; e2 g4 W) J4 x* l1 H8 I2 \
}
e# F( k2 d2 P; `};* n/ \. |' s1 ]. K0 r4 I4 e6 O
class CInventorySort# L- u/ q- b' W( `5 Q7 I3 a/ c- `$ H
{- J8 u- E3 J: m4 O$ u
public:. F( e* f) ?" ?& {0 r+ q; y
CInventorySort() d O. T7 }" t2 s' b0 r
{0 [% n, l% `4 u% t. e1 Z
m_dwPos = 0;( {+ |$ ~0 E) G. {) k
}
# d# f6 e, A. n( X; p6 I1 q~CInventorySort(){}
7 N7 f2 y. G( `* X+ l1 t ]4 xprivate:
$ N9 a& G1 F2 F/ u4 X7 BsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* [5 z! O* \) u6 L+ ~: D
DWORD m_dwPos;
( b) q4 W+ ]7 g& Wpublic:* ?' u/ Q, w2 j0 D/ _
void Add(BYTE nIndex)& u/ l: N8 j( k2 q' G0 U! a
{5 q( J0 c$ F% R% g
if (m_dwPos >= MAX_INVENTORY). T) a, f; N! T5 h
{1 A9 R5 N: [$ _# F7 d9 r9 m
return;
: G/ P- c5 I; r, e3 M! h/ L }
# O& L5 ]: w; b- X4 Y6 \0 R m_Item[m_dwPos].nIndex = nIndex;
$ H8 W1 P' I5 W! f( l( Z+ r0 \ m_Item[m_dwPos].dwId = m_dwPos;
5 f) a: G3 A- z( ]) O m_dwPos++; v+ \: q4 v+ W
}7 a; T) V; i# P- @# O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& _. p1 y0 F6 z' H{. R/ A( W: F- S: Z: _" Y/ I8 b
for (int i=0;i<MAX_INVENTORY;i++)/ s7 ?# k9 Q& O4 ]' B/ ^
{
9 Y- B3 g \. @& a* K) @ if (m_Item.dwId == dwId)
j# ]# a; Q7 m- L$ P, a- u! i, {2 P {
. O& r3 `+ l( I* Y! }4 ^ return m_Item.nIndex;2 _3 F1 M5 j# k& G: z+ E
}
/ w% u2 E; s: {) i: n$ M3 N }
' }" z* B C Z- R; _( n2 b& \ return 255;
# [* t* d% G. b: w! ~# \}
- R$ H7 U: O |8 x5 b1 Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ h' r7 [0 m3 Z2 N# H- s
{/ v& b! J5 }! F1 J
BYTE nTmp = 0;7 x. s" K( A2 d. g
bool bDest = false,bSrc = false;
8 F& ]* F, J l! a for (int i=0;i<MAX_INVENTORY;i++)
0 N# Y. R w5 _+ L% c% j# g7 ]* a {
5 G; |* b+ i' a- f1 G8 X. A1 j if (dwSrcId == m_Item.dwId)8 L" z0 K" p. K8 G( ]5 V
{
5 M- {: f6 O9 m& @ //id相等 则 改变对应的dest和src; ]; j. L; ~7 |6 i
nTmp = m_Item.nIndex;3 U8 U" g. a0 _6 m1 g5 F/ j2 a
m_Item.nIndex = dest;
' M5 D; h5 i) b" j9 Q6 m }& h' ^) N0 w% {* r0 b2 x6 K/ Q9 v
}1 w& b' M1 [/ H+ ^& v5 z( t
//临时数据保存完毕,交换开始2 K# W, U2 W) C) F# a( ?7 w2 V, |
for (int i=0;i<MAX_INVENTORY;i++)1 E9 S1 D. Y8 H! }+ \
{" |" k3 A! ~0 t/ c+ [4 D% ^2 j
if (dest == m_Item.nIndex)7 J9 Z6 }* }8 H. V6 I
{
* n$ I. ]" _& R* t. F6 {4 H8 ] //id相等 则 改变对应的dest和src: \" Q8 Z6 B }7 v
m_Item.nIndex = nTmp;4 Q% t0 _- @- S9 a
}
5 n% j$ g: H7 ~% U }
; _' J: M: ]9 P6 y: _$ r6 Q7 H) l# m5 }}1 z9 b% t7 D. G$ B
};
8 X' b4 A& E3 n# L6 {/ \1 L-------------------------------------------------------------------------9 J. H2 ]. ^' w w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 m! H8 J( a! Z/ O3 G1 D% H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' D& L2 S# X2 ]% I3 ?# @2 B3 @( m
紧靠其上添加:
( M7 _- ^# n7 { E7 _if( pWndBase == &m_wndMenu )% o0 V9 n0 q. p- ]4 T% n/ Y
{, I9 E3 A0 P8 p9 M {$ Z. y, g/ I
switch( nID )' P6 g0 i) C! Z4 I& J: l9 p
{
4 X" m! O; L. C4 G' X$ F7 p d case 2:
- {, x, {' n Y {- V$ P7 O3 h) l0 ?
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# m/ i2 l t$ J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ q( P! H! l! {, E6 o* t ]& y {$ y4 P6 c; g) T3 k. u, _
break;
6 ]& ?1 Z; J. Z4 D, Z; w }% S# D% \% p% C2 V: c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" V& G* E( v. Y2 Z' j/ q0 A {1 C2 ?! {3 T/ B* K1 h- y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- O/ z( T% _; B" K a! ^3 y
if( !pItemElem )- O5 g+ E" b1 w; I7 Z$ H
continue;
6 q8 l# }; W0 t3 Y if(pItemElem->GetExtra() > 0)( e; g, Y3 {8 U
continue;
! ^( [9 f! a% R4 ^! x( D9 D* x. @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 [* ?- B' R$ w6 q2 {# l3 ?
continue;. O z2 u* w$ [7 l7 F% c
if( g_pPlayer->IsUsing( pItemElem ) )
j8 ]; g+ i* u/ |% i( b continue;
# Z( n5 |# o7 l4 a if( pItemElem->IsUndestructable() == TRUE )* m) s/ e; Q W
{
% n6 n/ C' |: n) n g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, n3 c! X# _/ E) B$ C continue;- J2 M/ }; \. m# W4 G
}3 G# ~$ t% l2 K# Z% b
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( G5 p9 t/ Y8 A: W7 f$ {
}
. V" A" z5 y+ m7 F break;4 n; [1 K" b0 U& a3 e: f
}
% e$ s$ U. T2 b' j case 1:
7 Z7 L7 [: n1 b {
Y& r/ u5 P2 B" {* U1 I //整理背包
) T1 L# P( d5 b; { //////////////////////////////////////////////////////////////////////////
. t3 q3 s0 `( K8 h4 l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ W+ G$ J0 U( ~. ~
//////////////////////////////////////////////////////////////////////////
1 w' P, w: {8 |1 E! X /////////////////////////////////////////////////////////////////////////// {/ F" l- N: R0 C% x$ U
CInventorySort* pInvSort = new CInventorySort;
' e" W2 {+ N/ s: t vector <sItem> vItem;
, `+ N2 j! P* {. W+ l/ e6 G vItem.resize(MAX_INVENTORY);//初始化大小
! X8 N& m* U; B8 o0 g1 u //////////////////////////////////////////////////////////////////////////
8 T0 p0 ^+ s0 P" x //填充数据
) _% q( Z, H, F1 y. o/ P1 y for (int i=0;i<MAX_INVENTORY;i++)9 Y" T7 s( F+ H7 A
{
Y4 E4 P& C7 \: r* j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, F) J8 h7 V/ l' M
if (!pItemElem)
- v9 X8 a' d* H% [& q% p- N" P {: ?! f% ` p7 L$ H
vItem.dwKind2 = 0xffffffff;/ c3 R" t0 ]0 |: Q
vItem.dwItemId = 0xffffffff;, B0 @8 M7 ^3 F4 X) U/ q: V
vItem.nIndex = i;* z! F2 w# D3 ^# G b4 C* ?
}else {
0 z7 }$ L5 R. m+ @ ItemProp* pProp = pItemElem->GetProp();# ]8 z: o0 H- n% T; n1 F0 I
vItem.dwKind2 = pProp->dwItemKind2; B# O0 o0 @& m9 j2 L$ \- P7 h
vItem.dwItemId = pItemElem->m_dwItemId;
! N; q% q8 F3 v. ^7 O: @1 E vItem.nIndex = i;+ L5 x: W) h) v4 |. ^
}4 N, y' R% J0 y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 H0 k$ L1 A9 \* s' a( O
}$ T2 l3 O: ?# X) _1 |0 J v
//////////////////////////////////////////////////////////////////////////# \* z: ~8 P1 ^+ _2 [
sort(vItem.begin(),vItem.end());//排序- V8 l }' w2 U7 m$ d
//////////////////////////////////////////////////////////////////////////) j/ c9 _+ ]3 V0 K; C
//交换! `% f5 K" k# P! Q& h2 ~* B7 u
for (size_t i=0;i<vItem.size();i++)
' g! K. h$ Q; f" E$ K {. I: T+ s. C6 P' H
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( P0 G* K. |! L& W! m0 K
pInvSort->Add(vItem.nIndex);% n6 f: ~9 t; S" v" K- Y# o3 T2 m# j& d
}0 b# N* q0 Y9 D( ?
BYTE nDestPos = 0;
: L+ U1 n2 N# [5 z- l for (int i=0;i<MAX_INVENTORY;i++)) o5 h. i+ i6 N6 l5 K
{
0 v% s* W3 U! ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 l3 @& n; K6 S y# }& M% b' V5 ]3 { if (pItemElem)
v6 H8 N" s" r5 ? {# c! Y! N& _1 A/ j6 E
if (IsUsingItem(pItemElem))5 i* u- w0 l+ R3 k
{
( G, p2 e3 {$ t& W //这个位置无法放
8 C& z- c) k/ Q* C nDestPos++;
$ w, Q: L6 E6 G9 u }) x/ k, _6 b: p% ^, G3 {
}+ C8 f! \" }) i2 H m! v( a' D7 H
BYTE nSrc = pInvSort->GetItemSrc(i);
- E4 c+ ^2 s" a+ T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, A) o$ ]1 g6 \ if (pItemElem)3 H9 Z% d5 _% Y3 ?8 R# ~( @
{1 J9 S+ E Z2 s
if (IsUsingItem(pItemElem))- ]/ J7 u2 F7 s% _: w
{
9 T0 P& p5 G( X% `/ y6 z //这个道具无法移动,跳过/ t/ a; V1 G) g7 ?* _2 A3 `3 M. j
continue;1 x* M$ T% R$ u! o- s
}% {4 |) E7 f' |
}else{! R4 K6 u- |8 {5 a; M) \) s8 h8 ~
//空位置 不用动, q' ?2 ]* Y5 A
continue;" E3 W2 @1 t* F% |1 V3 n9 D
}
9 r! A' |$ m* _5 v" [2 l2 u //////////////////////////////////////////////////////////////////////////, w! S1 j3 w Y6 @2 _
//开始移动$ g/ h# i" T1 h# T' ^3 s
if (nSrc == nDestPos)" u0 T! Y+ d' n9 O @* G
{
: q* Y6 w4 D/ }9 [ //原地不动
$ f7 v) r- P2 R% F( n& [ nDestPos++;
1 _, J9 o4 |8 c continue;. k' w2 _4 ?2 U/ W9 z* y3 G- x
}- _& l+ h1 e0 K4 F3 ^. H/ r
pInvSort->MoveItem(i,nDestPos);
* ^; W8 n' T9 V: V8 ] g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 l% d* ^4 _2 i' J y& F) | Sleep(5);, K* h2 k/ f" h' v+ ]" ]
//Error("移动 - %d->%d",nSrc,nDestPos);
1 D8 x3 j- X# \9 J# ? nDestPos++;
7 j7 o/ l& `' \ }$ k$ p: N) i }, O
//取第一个元素的信息
% C& ?; s1 }6 U- p /* w: S- c6 p3 p9 N! r; G
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( F* t+ M6 S4 @" L4 d: E
{3 x& d/ e0 |2 \& Z& v l+ h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 d D$ S3 O) ]# L& o
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ x- G# z6 k3 {
}
( R6 g1 I" | M. Z& ~ */
2 R' b: s. [. W$ e. ]/ ^6 L0 V5 s4 z //////////////////////////////////////////////////////////////////////////
- Y. H6 j/ `3 N: D( [) `$ U4 Z break;+ N6 @4 V+ M( F! X
}
! u% G2 d- g5 J8 L$ u! _ } ( A. v- o& s: J$ |7 `" c2 i; a$ n3 N
}/ t/ n9 f9 U% U; _. v g
m_wndMenu.SetVisible(FALSE);7 A4 W; Q; a( I
0 y, B- J, r# U" d% m! d5 U
--------------------------------------------------------------------------------------------------------
4 E" I9 U4 ~! \( C9 x9 C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! D$ t- {+ E0 i. {- ?{
# c+ T. n- y- f8 ?" J; N7 b8 H5 pBaseMouseCursor();9 {9 ` _/ t) X+ m" P- k
}7 l# x, \( r( I3 ?
在其下添加:. k% n+ n: x- L- s F5 X5 g T( M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 C% k% ^" ^2 Z& f0 w. m Q7 G0 C{
( s2 v# V/ c4 W+ b1 M% r W0 C( @0 Cm_wndMenu.DeleteAllMenu();
) ^7 M' q4 w+ \m_wndMenu.CreateMenu(this);
2 u" [# L. e$ Q$ a/ H' X- q5 \. h7 ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 G$ O# ~' J7 ^8 L) l
" K$ h* ?/ S) V3 E: M5 [& {( Z; k# sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( L# ~4 S6 J+ w5 N9 ]{
) D- n2 `' W, S% n //P以上级别才可以删除所有道具3 f+ H' \1 J5 l% g% C3 \6 @! C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 J$ d6 H, ~ ~: A
}0 p6 \# w% m; `4 U4 ]7 B# B* a* O
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ {+ D/ E* t# A0 Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* O5 }$ z4 [9 j3 d! }7 m" U9 Vm_wndMenu.SetFocus();
7 S# q/ ~/ C8 i7 w: }" M+ Q}2 o9 J% t6 b* A# K
------------------------------------------------------------------------------------------------------------1 V1 |- ^9 P/ ]/ I5 q
*************************( X& j3 K7 q D; n. g
WndField.h文件
6 q# E9 o! L$ S4 J9 P6 ~*************************
- |0 u+ t6 r( D9 i; y搜索:BOOL m_bReport;
. s# \) k0 d* W' n$ m其后添加:
. W5 b+ e$ S( L+ V3 T1 \. vCWndMenu m_wndMenu;0 w6 b4 } Q3 Q' `; B$ }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. l" A, n9 S- T# P& c
其后添加:
8 c( t1 q& s7 j# K) h8 X5 z. E! ] Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
( L/ S3 Q; W3 S u" z; M0 G' M0 m+ L, [
4 U, r. s2 _6 p/ M
|
|