|
|
源文件中_Interface文件夹下WndField.cpp文件# Q* M* @ X) x) w) m% _. j) r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& ~+ N( \9 O. ~
$ s c1 O) n) H4 O7 g: D
struct sItem* `+ w$ r3 r5 j7 e& w
{3 a, K4 Y" v0 m: {% f
DWORD dwId;' a8 [7 O) ?7 y. w) B
DWORD dwKind2;( k' ]6 y1 ]; s0 {3 V
DWORD dwItemId;
4 b4 h: P* ^* ?; h3 u( GBYTE nIndex;
1 G; e+ p9 ]7 H" m' w- ~sItem(){
0 s% K1 o7 I/ } dwId = dwKind2 = dwItemId = nIndex = 0;
, y, [% G2 M) z6 N" x. `}* t+ \, c" s6 U9 m9 O+ c
bool operator < (const sItem p2)
/ g# Q M# j: G. B4 w n% X{
9 x8 g- i2 ]7 D if (dwKind2 == p2.dwKind2)( B& q3 R3 S' h. }2 U# V" ?
{1 {3 f1 `7 t7 b
return dwItemId < p2.dwItemId;$ F+ { y% M0 }! s! y" ?- J
}else{
7 ~4 r" `* M5 y return dwKind2 < p2.dwKind2;
' C" K9 f9 c; C d2 G) b0 L" J9 ]! p0 Q }
. Q% j, A3 J' x. A B& J}8 Y2 U- `) U" J) Q9 g3 o6 i5 {
};, u# B0 o4 ]! @) l7 y) E
class CInventorySort
; J! D. }$ t+ b" l l5 b! @{
: }: L% j9 C& dpublic:6 H& k* K" [, A5 o% P
CInventorySort()
% ?# ^0 Y2 e) x% h{
5 ?+ W; }6 w- {, x. p( z2 P9 ? m_dwPos = 0;
9 I2 Q6 k3 y5 T' T! N}; T; J. u$ K A9 ^# M; s
~CInventorySort(){}8 O J! P ~3 y! a: k: K% Y
private:7 ^8 ]6 F D2 A; H, B
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* Z5 }: k0 Z, VDWORD m_dwPos;
& E& P0 S- Z( m- u" g- r- K& w1 @public:
& x& W) H5 b. m- g6 z, e+ Xvoid Add(BYTE nIndex)' @' e* |, E( O& m+ q
{
$ f: C4 M: m* X- S3 j if (m_dwPos >= MAX_INVENTORY); V) P9 |9 q p0 o9 {( V7 N9 B
{
8 p; y- o' N! f! [' b5 K return;* v( K1 w. d7 T* s; e0 T0 R
}
( m" N7 h! U2 k6 O% Z8 ^1 C7 K$ l m_Item[m_dwPos].nIndex = nIndex;
0 x$ t/ _& q' f- j" o) y m_Item[m_dwPos].dwId = m_dwPos;0 u- d# z3 [$ C1 ~7 ]( W
m_dwPos++;* A/ _. V. n5 h8 e5 e* V
}
( Z7 {2 J9 c- Y6 M6 eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- H! D# n+ n; o2 g{
t1 s6 v$ A; w2 q/ z* P" n" e for (int i=0;i<MAX_INVENTORY;i++) A3 D3 |. c/ N
{
9 A+ [* p- Q1 G' d6 F$ {6 L h if (m_Item.dwId == dwId)2 e9 O4 P$ I3 ~$ G, X) [/ t! Q& \
{+ {% ]( x+ r9 q7 Q; w
return m_Item.nIndex;
, t+ n8 A x% Q. j" p }
7 d+ z( C i# ?7 l$ K" w3 c }
; B. ^. Y. N, a( b% b' y$ h return 255;
( ^4 p2 K+ l: w( S1 ]}; @' H# e0 v8 V5 f3 S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# _: M+ r1 g7 J4 r2 L{. @; `& [+ W, c; ]: f( U
BYTE nTmp = 0;
2 n% W6 k5 r6 e: G% i bool bDest = false,bSrc = false;* v; h- N& f( l( C# C
for (int i=0;i<MAX_INVENTORY;i++)7 N$ h) R2 }. U9 P
{
- V5 G4 P& H' b2 q" _ if (dwSrcId == m_Item.dwId)5 U9 H" w" _/ o. N8 |! H M
{, K0 Z( z" ?5 X2 x
//id相等 则 改变对应的dest和src: F: C1 [% w$ h/ X
nTmp = m_Item.nIndex;
! `& G4 w ?7 p' V m_Item.nIndex = dest;; Q* G- I6 [# i# k
}
/ q i2 g0 W8 _( X }: l9 e/ B( {. a
//临时数据保存完毕,交换开始
. s; j# B2 ^1 Q' [. N% X+ p for (int i=0;i<MAX_INVENTORY;i++)
! `9 F- L& y5 O6 \ {
- J3 u, _/ i) }! X' c if (dest == m_Item.nIndex)" V1 H, W& T6 |* M0 a' J
{$ c' h1 Y, ?( F5 O5 w7 j6 b
//id相等 则 改变对应的dest和src/ n4 E9 ] j3 E! l
m_Item.nIndex = nTmp;
6 a; K; D. [! u; P1 O! w }
' c7 W [- }. e1 \3 d }
) m! M0 D% s9 V; G5 G3 T/ @7 K}0 x/ W- [* L- R
};6 D6 f7 j0 \3 e
-------------------------------------------------------------------------
+ T9 N: k; n/ ]( S$ s$ c; i, g& o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 ~1 o. Q: p6 E* Q% S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# J: g2 W" l9 ~4 ` {* e紧靠其上添加:
$ @ B4 o! G8 Aif( pWndBase == &m_wndMenu ): ^6 F: c0 n' O& w. X
{
/ ^" `6 G$ W/ l9 N0 f- K4 q switch( nID )9 ?* o5 f5 ^' N
{
0 R1 @ m/ C$ ~, C3 e! r8 ^ case 2:
% Y7 n2 W+ `0 s2 x {
( @1 F7 o' X; h' h //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' O0 N! T4 y& x, ]: u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! L8 M& r/ @. g" h {& u, p0 f `( J+ u5 r4 W5 v3 r
break;: d# e6 x7 `8 t0 G$ _* m$ H
}
`2 O3 ~; Q8 ]' n3 N: b for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% {6 Z+ Q3 v; X9 H6 u {! W* Z8 R- Y D C6 q4 M2 ]; f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 G- t% l9 g# i+ X0 Z& [ if( !pItemElem )
2 s, _* ~4 l' @) N4 D! L: m continue;
, C% D& d6 R$ |: B if(pItemElem->GetExtra() > 0)+ L @% P- p; Q( w
continue;
. `4 L1 l% y5 o; X6 t: }7 k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( h( @) s- C( h7 e
continue;0 n4 J' `' I3 A# V
if( g_pPlayer->IsUsing( pItemElem ) )6 p7 j: ]2 N/ m
continue;& X, P& q2 Q! y- H4 k
if( pItemElem->IsUndestructable() == TRUE ): Y9 A' j6 h. |$ o
{6 D x( ]- \) [+ Y' c
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, s3 A! ~7 X$ J2 b6 L- }& @
continue;
& K7 I" P8 u6 V% e% r }% t3 u" e4 }7 m, I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 v0 v+ [. D' R: A) d; Y7 _/ V0 H }# [+ c8 j! Y3 u- W0 b5 `/ p
break;
) {& d1 u! A4 X+ u1 o }
T( \: o' P9 y6 [/ V% ]" ^ case 1:4 [$ O: \2 I' z0 e8 r& |
{
9 g- k0 Q' Q9 E' t //整理背包
l" j+ S5 O9 S& W //////////////////////////////////////////////////////////////////////////
( V: k; R0 k8 ~) g. Q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 V+ v' W+ F8 Y( @; q+ S
//////////////////////////////////////////////////////////////////////////8 c# s. f, M. t- O' } A, r, K$ Z
//////////////////////////////////////////////////////////////////////////. E; T1 |* c: G8 t
CInventorySort* pInvSort = new CInventorySort;2 w" a# S# }, n9 t4 P
vector <sItem> vItem;
3 I! b0 C$ I% x { | vItem.resize(MAX_INVENTORY);//初始化大小% B- V1 \! n# m4 r5 X# v* s
//////////////////////////////////////////////////////////////////////////( \6 P- o% L- ~8 d5 u
//填充数据1 q+ f" P# y9 Z5 B
for (int i=0;i<MAX_INVENTORY;i++)
9 t$ Q |6 Z6 Z! Y {( ]0 d- |; ?" `6 a+ i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' v+ H& j3 ]3 X2 _- {6 W if (!pItemElem); Q5 c! O* l) k
{! S- v5 t" c# |" I8 \
vItem.dwKind2 = 0xffffffff; U8 O7 |( s" m: y, c1 @1 G& T
vItem.dwItemId = 0xffffffff;
/ ^- H+ B1 ? [; B6 n' k/ f vItem.nIndex = i;
! E. Y* F1 }) R( p# O }else {
1 [' i4 x; c( \$ ? ItemProp* pProp = pItemElem->GetProp();
9 i; i4 y% c1 t- W0 I) z! l8 } vItem.dwKind2 = pProp->dwItemKind2;
: F& O- m. P1 R. m6 E vItem.dwItemId = pItemElem->m_dwItemId;$ A, O% {) P. i, u1 R1 V
vItem.nIndex = i;
8 G3 u% `) ?7 ^: C! w- r; F }2 H, I+ w) x6 V9 Q. y# P5 x: @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: q7 J5 ^) `; ]5 ~- Q9 f
}
* _+ a1 _3 u7 D5 R. U) D0 {5 K //////////////////////////////////////////////////////////////////////////; B; k, c$ a6 w
sort(vItem.begin(),vItem.end());//排序$ F) v8 [8 }7 M
//////////////////////////////////////////////////////////////////////////$ ^7 ^+ p, ~3 g8 j" Y
//交换
6 {2 U/ P- }1 g# P3 G for (size_t i=0;i<vItem.size();i++)
5 q& J I) n, k/ g! ^, d {5 c V) F, {6 l Y/ j. `' Z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); }# \! S! ]4 M
pInvSort->Add(vItem.nIndex);4 z& k J2 z; ^) V
}
2 G% l4 E; l$ h' b" i BYTE nDestPos = 0;
{2 r5 m p8 l5 r& P3 O for (int i=0;i<MAX_INVENTORY;i++)
& n' ^7 s0 B9 ?4 _9 ?) P0 ] {% E' _5 Y. S" f' Y6 {1 L4 L. _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 T0 Y. K T: n* z if (pItemElem)
7 f8 W2 A, A1 E8 e: F {
( ?, o/ R5 _+ ^6 X4 Z- E if (IsUsingItem(pItemElem))) M+ j& ]# D9 Z& A c
{
: |+ q0 _7 V% l% p //这个位置无法放
, s. T: d0 v) v3 ^" ?" Z2 f- h ?& ~ nDestPos++;
: I/ }$ t5 P j0 ?2 @8 y- T }, n8 ?. K& |1 v0 z% I& Y
}
R8 z" Q# ?5 } BYTE nSrc = pInvSort->GetItemSrc(i);
5 ?$ q0 P5 w3 p' A6 x, S pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# g; ~& w0 ^0 q! ~! ]# q
if (pItemElem)
- b! O$ }; _6 l {4 y! j2 j% r* M- x! V" L8 ~
if (IsUsingItem(pItemElem))) R- V7 L2 E- A! P
{1 S( \$ j4 x6 g# d3 U
//这个道具无法移动,跳过
' r" x6 @2 `3 s* o3 l continue;6 t2 P* P! Q+ C5 y( J U% z1 i1 S& K+ |
}4 k' A6 k) a) }' D9 u; z# A
}else{
5 q1 P2 W- x1 v1 K" R //空位置 不用动
' z1 g8 V! B' j1 y Y9 S continue;
9 j/ x6 m9 U* w$ e }
7 T9 \" d& f' F9 y; C0 d7 J" | //////////////////////////////////////////////////////////////////////////4 }, p T3 f$ E
//开始移动
. L1 P6 E1 ]$ ]3 V# S5 h if (nSrc == nDestPos)
$ ?$ ]6 e1 l1 l3 G0 Q: J+ F {
* }% h$ k/ G1 E# R; s9 w: {4 l& r //原地不动! ?2 z; Y/ J6 @: |$ l! `; Z
nDestPos++;0 m8 a, O$ N0 ?
continue;! P8 z; ^: E/ L
}9 X Q! q, m- I2 d$ k. U6 R
pInvSort->MoveItem(i,nDestPos);: s: e# {! D2 Z v0 M% o8 L: r! g0 q- h
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% k0 ~& I4 V" P7 r& X; o" o* J. @
Sleep(5);
2 q% S4 u/ o: O" s* ]8 w" J //Error("移动 - %d->%d",nSrc,nDestPos);: Y9 p$ ~ p" \& I8 t$ r
nDestPos++;2 G# r) A( `" ]* U. p v2 x
}
& P( Z: {) p h% S8 j8 E* `5 s //取第一个元素的信息( t$ v7 l$ j4 g- s8 h/ f
/*" I' x! J# T" l. Z: }4 g
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* k( `7 D# e2 ] {' R' |8 V$ A7 W
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 v# n- b+ a6 K: w7 w+ q+ t8 x+ m3 A g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 ]2 E; Y s2 u+ v# U }
e% h4 M+ N' [! k, N: H, \) p- n& p */
/ U: f; O1 ]& V- A //////////////////////////////////////////////////////////////////////////- D" B2 C ~7 x% \6 d/ p
break;
* _$ W* J4 i; _8 ]/ I( K9 Y }+ y; b; \) c9 e2 l( }
}
/ S" \4 b+ y/ q7 F}0 H' Y) j" t6 g6 N- d1 L
m_wndMenu.SetVisible(FALSE);
! e' g8 G' L- I q. e& w& v9 B& o; y# o1 y
-------------------------------------------------------------------------------------------------------- r9 w n, w; ~1 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): O5 L; p' ?' u, {
{. H8 c C1 r9 z9 o$ e5 s
BaseMouseCursor();+ z0 s7 X1 u; Z8 o" I. p0 z
}! k: ^5 I- Q, d) ^: c
在其下添加:4 q7 t5 n; I# l
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 k% S* v7 C# b1 y% w3 V- _2 d Q4 V{: r8 O' H! l! r/ `6 U) b! w
m_wndMenu.DeleteAllMenu();
: R9 \+ k! F* i, i: G1 Jm_wndMenu.CreateMenu(this);7 {4 l: [! ]8 K5 G, [2 x7 c
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 A2 O% g! L+ D2 [- n3 e0 ?
7 c6 L d5 I5 p- cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* f# R8 m6 T8 }3 o! K5 |{" _& w# d/ h2 H$ ^
//P以上级别才可以删除所有道具
, E+ h5 f u$ R/ _, ?; e m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% y& ~) j' P6 g9 I; {, h( `}8 m+ m6 h% \* A) O2 Y5 y) m
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: X4 [. Z$ V5 l/ n$ Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. n- `3 P9 T, v G1 r
m_wndMenu.SetFocus();
6 P0 L0 Q' W5 @: _( f. V/ p}3 y& i' a- P: |) {# O# o3 \, Y
------------------------------------------------------------------------------------------------------------ _/ D0 G" u! C% B5 T! K( M7 d$ Q
*************************9 h0 }8 i J1 c
WndField.h文件# f) z6 d, Z" r! p* q3 l
*************************
/ D2 n1 q! B9 K搜索:BOOL m_bReport;
# i. E1 _0 I! b& m2 p J其后添加:
, \* t$ i0 e6 j& M7 ^0 ZCWndMenu m_wndMenu;1 V7 K; x) {+ _4 _+ M( A
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 k& V2 N; c# X4 ^4 b H其后添加:
/ |# `; V( Q% e2 V$ K" K0 [virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 C/ S; q- G3 w* x4 f+ y' J9 T( k+ q% F7 i$ Z
3 A$ J9 v. Y( `% B$ I! U. l
|
|