|
|
源文件中_Interface文件夹下WndField.cpp文件 h4 r0 c- q! i, R6 g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! ^$ q$ |& j$ d5 ` u/ F
2 J: E5 A4 }* @* qstruct sItem1 x) p% M7 y+ q" ?' K Y
{/ f3 F, H# g8 D% q. u9 r
DWORD dwId;5 f4 V9 e! J1 P4 }0 A) h9 Q) {! b
DWORD dwKind2;
4 `. G' o) U; @ [; R7 m2 eDWORD dwItemId;
8 _5 ~ P- S4 C ]# NBYTE nIndex;
" C3 {6 e% z6 L# {2 {) psItem(){
7 X, t) S! F- M; ~) a* V dwId = dwKind2 = dwItemId = nIndex = 0;1 k8 f! l2 c. c* M* T1 y
}
& p5 G5 e/ L4 T( Mbool operator < (const sItem p2)! O" Y3 S- b- @
{$ u8 R# `7 v4 \9 _
if (dwKind2 == p2.dwKind2); w0 d) v) A" t( W. A# s6 i$ _
{
+ d, W! l! r) d9 X7 j return dwItemId < p2.dwItemId;
/ ^2 ]* `! }2 u }else{; T$ D! X2 @+ r# X, y0 ?2 j, n8 m0 m$ M
return dwKind2 < p2.dwKind2;
1 N4 Z) e# R7 |' v6 u3 O }
, [$ Z& I4 _" v5 R2 j}
- U. {* s/ F: o2 j3 f};
! r/ A7 H# D& Q6 \) o. y* Mclass CInventorySort6 [# X" Q: b g* [7 ]
{7 @! W/ i' g+ p" A4 P
public:5 |: m% O1 }% v- O8 m
CInventorySort()
& p5 [9 r$ }( K9 l{
2 d( P6 f% A' q# b! A m_dwPos = 0;
9 {4 g( j6 F/ f. m$ m& Y6 z5 n5 Z}7 ~1 j8 n* C4 I! ~
~CInventorySort(){}
2 m% I& Q+ o! x/ V& R n. Hprivate:
* l/ X x& B4 csItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- W' \7 l, M& G+ u6 G2 P- cDWORD m_dwPos;8 A {( ~5 M3 i$ Z5 G
public:& x* {& N2 w' U8 B6 c3 Q
void Add(BYTE nIndex). i# o$ ?3 k' N) S, {6 k
{
7 W: s+ n Q0 f- B9 p% Q/ b if (m_dwPos >= MAX_INVENTORY)$ p2 O" z, B& D0 F
{8 V$ _. Q8 ?* {1 U& I/ l
return;$ a! g5 R. I' j7 v1 ~
}/ g I+ o" V+ Y( K
m_Item[m_dwPos].nIndex = nIndex;+ `4 u3 W1 B$ Y
m_Item[m_dwPos].dwId = m_dwPos;
$ I0 g* M1 u p0 h& C m_dwPos++;
. v9 f. n# Q1 i* E1 z}
' L! T& ]8 ]4 H6 X: q" D, g' ^; pBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% H! w% q% o; a$ F' h# ]3 [* k
{% X! @$ }! M& F* @$ O$ f: e
for (int i=0;i<MAX_INVENTORY;i++)
" E8 X8 E1 D0 c. W: ^# T {
) U: j& e0 o8 p7 @ if (m_Item.dwId == dwId)) p+ y) h9 M( Y: B
{& v9 U. X' I) s, v4 o+ w" `
return m_Item.nIndex;
! [, B0 h1 m: z+ ?7 Q: @ }
) N8 ?* a& e7 W- f% a" Y" \ }
. }( c% |8 k+ ~) @ U+ O, c return 255;# Q# m+ m9 ]1 c1 S G/ B+ g* O& ^9 Q
}
% N+ |3 e# k3 F. D, @0 Lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 S/ p2 o o# W{+ f+ A2 `% s, u; O/ U
BYTE nTmp = 0;$ G3 g) @5 z9 p7 A7 E' f# j* r
bool bDest = false,bSrc = false;8 P- u; o) I4 l- J
for (int i=0;i<MAX_INVENTORY;i++): n7 z. u M+ A* o
{
% u7 B2 c: ~: r d if (dwSrcId == m_Item.dwId)
) s' I, Z. e9 \1 u9 c) L- J1 U {
) S9 {% K3 v7 u9 p. L/ e //id相等 则 改变对应的dest和src9 w5 x+ s8 q* E
nTmp = m_Item.nIndex;
9 p' f% H0 d+ K8 r$ t0 P4 V' c m_Item.nIndex = dest;
/ j3 Q$ Z; b: q! O }, T* f" v, n0 j3 H' b9 g7 w1 v+ C
}9 `; d" P3 _2 X0 e* P
//临时数据保存完毕,交换开始" n+ B P6 E- \: Z
for (int i=0;i<MAX_INVENTORY;i++)
! D/ L# g S, @' x {) z& v/ T5 M p# ~
if (dest == m_Item.nIndex)" ] m L" Y& J- Q: R
{ M V5 \% [) c& V. T! I. @
//id相等 则 改变对应的dest和src
, j" T# E3 V) K; D# c1 F m_Item.nIndex = nTmp;- D, D- z- X" A. n4 S5 B' c
}
0 o9 c0 l* m) g2 I }' k& I5 c& V6 ^. o. i, h4 ^" e x
}- t+ V/ |, [" }
};1 g, ~7 N& E3 D# o7 N6 ?) D
-------------------------------------------------------------------------. N" f$ Z+ A" d6 a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ D$ `2 F# `! ~0 L$ A$ C5 G1 W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ T* G! k! D" e4 X# @( w. v
紧靠其上添加:
. M8 G& t/ z0 b: D+ C( ~if( pWndBase == &m_wndMenu )- h; ^; F; X3 J/ W& Z3 U
{- v2 `9 u) N+ z( f/ R+ X4 u6 c
switch( nID )7 z$ e6 B/ Y6 J6 T2 d
{; N' V4 q/ p( B' k2 o9 J2 o" J0 w% f
case 2:
: y" F8 \ \% R: h {
9 c u8 n6 m6 B4 x //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 U' a! V2 ^/ n; L8 w
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 m0 t9 U/ g5 W+ `0 k( @
{! [% k8 C% u& z. F
break;: i( ]! n2 C5 Y# [
}
6 ^6 Q' X" r) u7 z7 O$ f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& e8 U, D4 [( B8 @
{
) z5 s0 @+ Y. f! t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ u0 j& E6 Y# d0 _8 H if( !pItemElem )
# w& c, q" H" I, c: ^: P continue;
- }0 G% _8 y: J2 p1 ` if(pItemElem->GetExtra() > 0)
1 I. R( p1 w9 S S6 { continue;. c' i- E5 K! C) V# m! Y c
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ _) \" F7 z4 k% A% a$ y continue;
5 o. d7 C$ g7 d: ~& V if( g_pPlayer->IsUsing( pItemElem ) )
) e$ e) r3 x( n% u/ F& ? continue; a* U4 Z! ?5 m1 u9 `( V: N, H
if( pItemElem->IsUndestructable() == TRUE )% b! X0 t+ m" W# }! Q3 h/ m
{& b+ x1 _) ]' r- y" K$ |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! c- d) M" `8 d3 v2 c
continue;
4 c( a9 o }3 U: Z }/ K- x; O- e6 s
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- l6 Q" M" B; u( u }1 S( [. w' h9 p( B3 k. i
break;
: B( \ p, |0 t8 P( T }
& w+ _6 L1 |/ _2 F4 Z" p case 1:
. P0 u$ ^5 W* \0 F {7 F' c! z) ?$ h! X& ~8 h
//整理背包- P, ^4 O' I- \
//////////////////////////////////////////////////////////////////////////
; V) D5 O$ P/ t; g! ? //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 V9 Q+ S$ _* a/ d, G! b //////////////////////////////////////////////////////////////////////////
7 v% h% F; m0 p" b( U //////////////////////////////////////////////////////////////////////////7 [) L+ h2 N/ i4 T# Z, \8 X
CInventorySort* pInvSort = new CInventorySort;
. C9 p* {$ `% |, W0 S2 R/ k vector <sItem> vItem;! H8 a9 r' P, w0 `
vItem.resize(MAX_INVENTORY);//初始化大小
! M4 T$ r# R) _& A5 Z/ i //////////////////////////////////////////////////////////////////////////6 l+ J/ X9 z! d: {8 Q& Q) r8 @/ F
//填充数据
d' I& q$ l& v2 q1 t! K4 ] for (int i=0;i<MAX_INVENTORY;i++)
( H( t* H8 I, Y0 B5 x {1 Y: `7 v$ \9 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* d* m( q% {! r' E' F. ?9 g2 |
if (!pItemElem)8 N2 l! z0 Q' g, u6 ]2 Y; }# x
{
" g8 t: z" m* R% o" n vItem.dwKind2 = 0xffffffff;" i+ a$ l# r4 R# ]0 [/ G! h
vItem.dwItemId = 0xffffffff;
+ |2 E0 g4 I4 I& D [6 V vItem.nIndex = i;% Y6 b u( l# C: ?1 u) l: F
}else {
% m0 p, q+ C1 F. c# y ItemProp* pProp = pItemElem->GetProp();
/ g& W+ D" x+ H5 T9 z* h vItem.dwKind2 = pProp->dwItemKind2;0 s4 o) T* h( d" t% @
vItem.dwItemId = pItemElem->m_dwItemId;* m6 c- b" I5 o) z! Z* x
vItem.nIndex = i;1 Y7 [. M& O5 f% r
}
$ N, C' T/ m, \9 |) z! _ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 l1 i" i/ W6 X* s1 f n }
1 s" b3 d+ h( l //////////////////////////////////////////////////////////////////////////
0 u- W- g) ~4 w" p q4 g sort(vItem.begin(),vItem.end());//排序2 Y: z& S- Y) O8 _, | X2 j
//////////////////////////////////////////////////////////////////////////
8 l; Y7 T1 ^6 s9 r //交换
6 k+ j5 y( B: c2 W for (size_t i=0;i<vItem.size();i++)
1 D7 E0 l f; d# I; n" F& J {! p* d6 v+ U1 b. W1 O& l
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ n4 U0 z7 @2 V9 c' D
pInvSort->Add(vItem.nIndex);
! `, n$ I& _ s% Z- M& Z: K/ J2 _ }+ z: N% @7 Q! K. o
BYTE nDestPos = 0;0 H' O$ R3 }9 ?7 S+ F* O$ }
for (int i=0;i<MAX_INVENTORY;i++)
: ?1 a+ N: ]/ j( p {
: S' \1 m( U/ x: | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 j1 N8 y/ u5 N if (pItemElem)- }* ^6 }9 j, l: X+ F: S: @: Z
{# f, c' b3 } H$ [
if (IsUsingItem(pItemElem))
& ^5 r( K/ F# a |2 O6 R {2 ?5 v; j1 ~3 ]5 u. D9 R& c# o
//这个位置无法放
) x9 }( a2 D" E' Z* w nDestPos++;
) C& U; u# ?0 l( S/ E3 |$ I }
9 {- y0 e2 i1 F+ u. W }( B+ o) f9 `6 F% C' a
BYTE nSrc = pInvSort->GetItemSrc(i);
9 O5 M/ y t8 F pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' f0 K: x8 L, c" s if (pItemElem)- H5 L& C7 y p7 `# y
{
! N9 |+ i9 _& I0 `, P% _' c if (IsUsingItem(pItemElem))7 }, ?' u V. H! c. i( i b* m; h# C
{6 ^; ?# T7 t4 }+ ]5 ]" Z
//这个道具无法移动,跳过# G( h1 g9 M+ X1 y* d
continue;1 [8 P' H( {' g6 Q# i" K
}
# z7 F+ V% z3 I }else{
2 L% \& _) }! `% V, e4 | //空位置 不用动 q& T; m1 K' @# {- o0 ^. G
continue;
4 E4 z- `2 q/ u! T( v2 D }! t4 v1 g5 n& o4 V; d1 i1 {" N2 t
//////////////////////////////////////////////////////////////////////////4 |5 }/ s9 E$ u
//开始移动
" r }/ Z* g8 l2 c; F if (nSrc == nDestPos)4 r" n3 Q' X0 w7 X9 o: r
{
; }8 Y' ~ a6 \" O //原地不动- e1 N; z$ a+ A/ u& ^ a# h) L2 A0 @4 a
nDestPos++;
# G0 C/ N$ V" M& `4 F continue; H+ b/ G5 L) l, _9 M1 |
}
2 A; T8 j" L5 I# i pInvSort->MoveItem(i,nDestPos);
# P- A. [. j9 j g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 J5 s. q9 ~8 Q) a
Sleep(5);
8 T4 P( O4 w& z7 a& X //Error("移动 - %d->%d",nSrc,nDestPos);& V5 \3 A# A; `# {
nDestPos++;
# o. I, `& q. B }* [! r3 E6 {; B, M
//取第一个元素的信息
! X7 Y. M! y9 d0 i /*
) B5 p0 a; x3 _' S- R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 L* p: p3 a- ]/ M6 g {: ^. W8 s& {3 K. w% e3 W3 l" J
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- Y( U! r- z5 {/ y2 R: ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 S7 H2 Q$ V7 l: u& j4 s% ]$ A% G }
8 U' E, C5 w$ X$ V1 d0 i1 @ */
% z# `8 s6 R* A. p; I7 ^ //////////////////////////////////////////////////////////////////////////; Z" C* b( E' a1 C% ]: d' C
break;
/ L- z! ^; A! ]( W7 q0 ] }7 _5 k! s( k2 S# \9 Y" F9 e
}
1 I4 _' f, r+ ~. s}- B# d- ? ?2 a" B# K9 m6 X
m_wndMenu.SetVisible(FALSE);" V' j' Z& `( P7 d' E2 F
7 y" A0 `( M; x--------------------------------------------------------------------------------------------------------- U! v: z% y$ n) p Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) b2 W+ S+ X i% d/ X
{! h) R9 T' A6 |2 O, [) y
BaseMouseCursor();/ e. I0 f G: f7 T; _
}
, {& ~# }: f/ l2 e在其下添加:
8 E4 h, f" o; t0 ^! i+ w0 wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
E6 D! b$ [3 N* Y( m% c I/ b{
4 g; u- K# P2 Cm_wndMenu.DeleteAllMenu();1 Q: I; m* B& q8 l7 c
m_wndMenu.CreateMenu(this);( G" f2 b9 f( o& [# k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ O( @; Y( `7 X0 s# t' n \. A( v# o+ M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 w3 `; ~7 U, f* l5 z# ?: ]
{- [4 ~; Y! p2 f( ~5 h
//P以上级别才可以删除所有道具
- X" \, Q$ `! \" f0 ~. p# r m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 g) @9 E$ B1 a, }}
3 {4 ]: G( o. _! Q" u. x2 ~ Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 R9 X* q6 c7 I4 H" M' e! F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" ?9 |6 C% Z3 s B- F1 M0 w/ X# U
m_wndMenu.SetFocus();. W3 m# c- G$ D1 a" g/ t! N
}( O2 H- t/ n, `. P0 i# Z& m# M) @
------------------------------------------------------------------------------------------------------------# L( |& @% y _# _
*************************
* C! q( X+ o. S% Q0 e* aWndField.h文件: |' `4 I/ i7 _+ @ r, C
*************************
$ Q( }5 [/ P/ P/ w- N搜索:BOOL m_bReport;7 T, B+ b: q/ Q: o, a: C0 V
其后添加:
" ]. Q) I5 d3 F' q( ?CWndMenu m_wndMenu;
3 D! ]) F( b: y8 I1 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% i$ l# Y* t% n& B其后添加:# @/ C% y, I1 z% M! B9 {
virtual void OnRButtonUp(UINT nFlags, CPoint point);+ K) s$ R+ }- v
Z) X, C) F1 v2 _7 L' f
" X8 _' {' M. w' B F& u% y! U |
|