|
|
源文件中_Interface文件夹下WndField.cpp文件
; `7 C! G$ D9 n5 N, Q; V' u5 R搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- ^6 m6 G; Q' N2 x W, h7 i& ]0 d' Y* C0 S
struct sItem$ I. F* }4 N" V9 J3 l; T: Z8 C
{
' r5 g0 n! x3 [$ tDWORD dwId;
$ a4 j' X7 a, T, X+ |2 T6 }DWORD dwKind2;
9 i; N) Q/ k: A8 @DWORD dwItemId;
" n6 `, Z0 ]5 @. U3 G8 ]9 K6 q: R aBYTE nIndex;
" Y) V q: W* ?4 x4 h& M+ o/ d: fsItem(){
: m1 X% g3 G( E( t dwId = dwKind2 = dwItemId = nIndex = 0;
' }8 }" q0 a8 J9 x. @) ]% U}
' D8 R2 x) q4 t. @- W- ibool operator < (const sItem p2), I D8 h0 f ~. N6 B/ t2 s
{/ G9 G4 g) j' ?: Y* a, e% q! p9 D4 x# H9 V
if (dwKind2 == p2.dwKind2), I9 Q$ @( b( e# T: h' O' U d
{
( w% R j$ h, L: x return dwItemId < p2.dwItemId;9 V' `! i- Y4 g( y7 t) {7 a% Z
}else{
2 e( _9 L R4 V. d7 D. ^ return dwKind2 < p2.dwKind2;& x' c4 Q t' a0 M3 k' X
}
# b" K, g1 O# j# D}
) n- q/ y1 f7 R5 h8 C# P( w; u h" i};) |; f$ o2 x- g3 [
class CInventorySort
3 r; V. z) i" M( J{
) G+ I/ |, Y1 N, K: Xpublic:
* W2 y* ?/ O" r( vCInventorySort()
2 L+ m" k2 V+ }0 O+ w3 \ j{
, Q0 [! J8 Q, k, N$ ]1 r) ~ m_dwPos = 0;2 S9 W% l; y9 b) \9 g# I' R* ]# E
}3 l; i w& q/ t6 Y! W, e7 _
~CInventorySort(){}
7 H; o" V! P9 x5 C( Kprivate:
6 R r# Y# ~ z4 I8 fsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" D, w& |( F, J# `3 vDWORD m_dwPos;2 e$ u: F! }: V8 Z4 w3 C: Q
public:
0 v: c u( G3 c7 \7 Zvoid Add(BYTE nIndex)
7 f" S: Q, q& E{/ J9 L$ \$ A, u' x
if (m_dwPos >= MAX_INVENTORY): _9 F0 S) Z/ d' v$ `* @
{
6 _! ^8 |& B8 K8 \* {; N return;
) j# ?, K5 \ g' L$ |6 { }: V( ^! z* }3 ]- B" v- @8 F) Q
m_Item[m_dwPos].nIndex = nIndex;
' n) n/ j- p. l0 T9 A, _ m_Item[m_dwPos].dwId = m_dwPos;
. T6 N( S' z1 w m_dwPos++;7 H; Q0 h( e1 [+ v k R1 K
}
# o o9 W9 ?8 p4 M7 W9 EBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 D- Z8 B5 i, U" j6 X9 j) k% T% n
{
9 Z# P: ~4 s6 J: k: j3 w; j for (int i=0;i<MAX_INVENTORY;i++): F# x" g' M3 s9 y$ R
{+ p' B# }! S$ U* X8 d6 v
if (m_Item.dwId == dwId)
5 M. E# I* u5 h0 d/ \ {9 Q7 ]3 f! [. ?) y
return m_Item.nIndex;4 ]0 t8 J$ X2 D) u: [/ v6 D1 V: \7 W
}+ u8 {9 g+ l2 c" m8 }: r# S. y
}8 j3 N- T" _5 x9 k. k0 P- K( ]
return 255;# U; Z2 i- n Q/ C! ]
}- E: `# g0 q) D G# C0 m" w4 k
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* R& A$ d, b" i; Z' T. |. C{
1 U9 i) \1 {5 y/ q/ t# u BYTE nTmp = 0;
5 a8 ^5 w8 M( F3 L bool bDest = false,bSrc = false;
& T) n7 @4 @, J# g6 ^: I for (int i=0;i<MAX_INVENTORY;i++)3 r& C% V8 n1 q' s8 K9 e
{
1 e' v0 g8 q$ A( T6 P! a if (dwSrcId == m_Item.dwId)
' I4 z: x% H. o) j4 N {' |' u! R# S& p7 u# C6 m5 t0 q
//id相等 则 改变对应的dest和src6 n5 a9 I7 V- x0 A( W
nTmp = m_Item.nIndex;0 M3 S: _4 G0 F- {! ]
m_Item.nIndex = dest;7 }: u% S, l5 I1 D1 o0 M
}
5 g" m8 Z% P* ]' `6 @1 a }. ^+ p0 t3 H& b3 w1 l: }
//临时数据保存完毕,交换开始: {; s8 w0 I+ D) r- w C4 m- Y1 D/ R
for (int i=0;i<MAX_INVENTORY;i++): c1 N. ?5 R A0 A. Y/ {) N! l$ L
{& T5 }0 Y: }8 w1 G* z
if (dest == m_Item.nIndex)
& M8 X s4 ?1 V; l* | {" y! n7 g6 K7 Z* c2 r5 } A5 P& q
//id相等 则 改变对应的dest和src f7 V4 A9 w) Y3 i: `
m_Item.nIndex = nTmp;
6 K/ s; |9 V2 ]$ E7 e }
! I7 C/ }/ [2 r4 w; h }
+ c! p" h4 s, d3 `; O6 ~}
- P% I ]" T- w7 P1 m3 O" N};
- X. O( g; G7 O) D L% H5 `, b-------------------------------------------------------------------------* Y# Y+ }* }- H5 W
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 p- t, S+ R3 V) V1 v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" b2 p" u# p/ g. ^
紧靠其上添加:
9 m5 u( j. j. n6 W5 [+ rif( pWndBase == &m_wndMenu )
2 [9 x/ D5 k. F8 H/ `! R{
+ x9 M5 n1 \3 c2 l$ G; a switch( nID )
, s" i2 a, I2 R* D {
* D6 [% _$ s5 {6 g case 2:
8 O, b) c- w5 H; e) n {4 H- Z) x0 i5 Y' C% Y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 A5 ~: ^ ~8 L0 M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 J5 \& S- P4 @7 f- H Z1 I) f5 ~
{: n4 l# L) b3 [6 X' G
break;
; k% x* o6 N1 P8 y }: n& P# `6 u. H2 `% J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" f9 N8 Z9 L) Y% B' ~; n {" T3 j! C3 S. d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 W, Q/ R3 a0 \5 A* }+ ~8 p" Z if( !pItemElem )! F2 O, I6 ]2 b9 R. m& Z2 w
continue;9 b8 _( o* m$ u! E; o8 M$ I' D
if(pItemElem->GetExtra() > 0)& e' \* y) f' c; |8 j3 x
continue;
% x$ {. ~# M0 ]5 U if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 {* G! K H/ x0 a: W I continue;
! ~$ K: Q4 T- j/ a- r3 T- J/ ] if( g_pPlayer->IsUsing( pItemElem ) )
3 E" F8 c1 W6 Z* r continue;
/ F) p5 f* I% S& a, `2 B2 Y, a if( pItemElem->IsUndestructable() == TRUE )
& @) O' _# T9 I) Z, s {
: w/ O6 y0 b7 E* k g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& ~ s: D7 V! @" d continue;, V% w- L1 Q0 ?) j
}, L: Q% |/ d$ V! K8 Q6 {- @1 H+ F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 [8 O' @7 j! Y9 i1 h4 H/ Y' q+ T
}# _1 i M# m! x( ]' x' R
break;
# a m1 ~+ T) q P }
3 Z. m1 B& i2 r1 A+ t case 1:
7 h1 ?- x5 h- G! W {
+ y/ [) d- @ [" D; R //整理背包
& {$ N. k8 ]! A; { //////////////////////////////////////////////////////////////////////////
& j. D, q' ?. F* [ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! i5 J( k5 I& F$ c) G
//////////////////////////////////////////////////////////////////////////
* j& m8 b$ W/ y m5 b //////////////////////////////////////////////////////////////////////////% i# C( a8 J3 H$ c. R t
CInventorySort* pInvSort = new CInventorySort;+ R5 V, v" H" I+ H3 c
vector <sItem> vItem;
0 F+ Q4 e& {5 ?4 J vItem.resize(MAX_INVENTORY);//初始化大小
! S' l: x0 q# m7 S9 t+ K //////////////////////////////////////////////////////////////////////////
; W) b/ i& C3 m8 N+ d //填充数据
, Q$ V( E5 }8 Q5 h* i for (int i=0;i<MAX_INVENTORY;i++), e9 ^: V; x* |. Y/ i2 y. s
{. p5 D! x5 F' T2 Y3 \0 R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! {& [% _; E' ` if (!pItemElem)
P+ }6 d, F) i1 P- {$ O$ w- m" F {
' \4 N# v$ |; F5 F1 k vItem.dwKind2 = 0xffffffff;
3 j5 O9 }; O' | vItem.dwItemId = 0xffffffff;
1 ~5 t+ T' j( K vItem.nIndex = i;
6 d- q/ T& ]% M }else {
6 ^' p1 `; i$ b' U3 F ItemProp* pProp = pItemElem->GetProp();
4 ^9 v5 k; G9 S5 e vItem.dwKind2 = pProp->dwItemKind2;3 r$ M* B0 P$ I. ]# i% w+ r
vItem.dwItemId = pItemElem->m_dwItemId;- ^4 Q4 A9 G( p5 x: E2 _
vItem.nIndex = i;' B8 Q7 U; A. F4 k
}
1 s. O# p) E) a: q' f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ @9 ^: D1 q3 U @; U7 I8 I
}7 i/ }% u* ]8 A3 g2 [- H' {5 Y
//////////////////////////////////////////////////////////////////////////7 l/ W7 z: A7 u# r) X5 e
sort(vItem.begin(),vItem.end());//排序0 {" ~5 z# o7 a7 ?
//////////////////////////////////////////////////////////////////////////
+ _9 ~1 A: M$ r" e/ _3 o //交换9 l7 m/ Y# q+ @! ^' _( ?
for (size_t i=0;i<vItem.size();i++)
9 b& C E+ E9 f% ? {4 G) p5 T: G3 V% X P( g
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 h$ b5 S7 z. u+ g: X8 [ G
pInvSort->Add(vItem.nIndex);
2 t( y$ l: Y' g) o L) m$ l }
" R# c3 i2 J, N& n4 E0 n/ P6 e BYTE nDestPos = 0;* D& W% o1 q/ M& h" A9 P8 g- \+ r
for (int i=0;i<MAX_INVENTORY;i++)( j5 _$ x5 c0 x3 ^2 s$ j- J
{
( I6 [2 q2 F' k7 N$ i! B$ Z, f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 K9 p/ f. S1 p; s if (pItemElem); R. q4 A+ b/ `0 v! F7 Y
{
h5 P, m8 G( J3 B d. U if (IsUsingItem(pItemElem)): u* j4 d4 y7 B& H$ Z8 [+ Z
{& a9 R$ c! F6 R* n
//这个位置无法放+ |( T/ e' E) u) i( n: x
nDestPos++;
7 J5 l0 d; E6 ] }
' b2 O8 w* k0 I8 R! Y3 z }& r1 x# e$ D8 E, b
BYTE nSrc = pInvSort->GetItemSrc(i);* E& n5 d! B \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 i! A6 @1 D0 O- _ if (pItemElem). S# [8 |8 N0 I8 i _+ N
{( ^# N7 ?2 v! D$ t; [" c3 j" d
if (IsUsingItem(pItemElem))
1 p' {' B4 C* Q { P2 P% B9 V' z) G6 J7 W3 v; x
//这个道具无法移动,跳过/ [$ }# d8 A3 m9 |
continue; B5 ?. L: @1 D; t9 ^ ?
}) c: q& ^6 F; m9 x- Y$ i. S
}else{
* e. m) d7 ^* Q* J: |. L6 h0 A( s //空位置 不用动
9 R' t# [% b- @* }+ W$ s continue;* m o/ `: x9 r: G- J! v; ^
}
$ d+ J d+ W: t0 z7 r: q8 l //////////////////////////////////////////////////////////////////////////
( @9 X3 |$ |9 C5 J4 V //开始移动5 P* o& m- a* D. H3 s) T. g
if (nSrc == nDestPos)
4 j& z! |) B4 x3 `3 ?& L5 ` {
. A9 s K" Q, J; a R; p6 i //原地不动$ L2 ]- U/ ]/ @/ D' F% ?9 i6 v- ~
nDestPos++;
7 t7 k4 c' M& p1 ^5 C$ i! x6 Q continue;) E' z$ p) \7 ]) Q! q2 w7 g2 ?# F
}& s/ m1 V7 K, Y, G W
pInvSort->MoveItem(i,nDestPos);
7 w" m" M! l1 n; M' f) I: d! d& I, Q g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# f( X# o5 g) K. A+ A Sleep(5);
# F5 p% F" \4 v0 R5 p4 R/ ~ //Error("移动 - %d->%d",nSrc,nDestPos);
$ W! ?, S$ U- v" a nDestPos++;( q% l3 p9 u6 b# Z, U% ]# {. d5 n
}+ h8 `8 N* d6 l
//取第一个元素的信息3 Q) e' ?( o$ j; e$ W5 l5 Y
/*. V4 c4 {3 u/ |) ]) q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: @+ N b! j& M7 k' y& ^ {
- h! ^5 s6 o$ }# [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 j7 P: |( l5 V, H2 R `9 I g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 I% P l) B5 l- U& P, k
}
; G/ K. z+ R' V */: I; z# W, V( L! e" B6 Z
//////////////////////////////////////////////////////////////////////////; ?- V0 a* v$ }/ k
break;8 r* B* ~/ J" M- `( g$ V
}
9 U6 v" I& Y' q3 `8 A% r7 j }
. `) Y& _! F0 N; E6 |- _6 F- ?}
2 X9 e$ p3 E8 jm_wndMenu.SetVisible(FALSE);' j& u6 b. G5 n. d, m
1 h9 k a: h0 e" u9 @' t3 l--------------------------------------------------------------------------------------------------------
3 F) h0 L0 A" V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 P0 ]& c6 g& K
{2 ^. v$ m3 f4 v2 M) O6 Z
BaseMouseCursor();, K. ` T, o- k' I3 G
}
( g( j; v' L* L' H4 [( H" k! @在其下添加:
* c+ t3 v+ F: g0 ?' X' M/ f9 b; Mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 I2 U' a/ U9 b+ ?6 g8 q{
- y% w( E7 K2 e3 Pm_wndMenu.DeleteAllMenu();4 q3 ^" u, y) M: t; W
m_wndMenu.CreateMenu(this);
6 B5 z" F) Q' S' k# I+ `2 _& mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ s8 c0 G8 u; d, h
. z* L7 u7 V( w( s* t7 U- ~0 Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) H% M# O: I- x! h- i{
* y/ q9 D7 T& p+ W7 D //P以上级别才可以删除所有道具- M" ^ Z! m2 ]
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 F4 W3 G( p0 @/ y( Y5 E* y}
* y2 i; B5 X6 c) L% }& mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 V: u- Y( ^' w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; M, G( I6 `" g w. ?m_wndMenu.SetFocus();
% }9 @$ b& M9 Q: @ J! i$ v}
2 c, x& d J& g% X* }------------------------------------------------------------------------------------------------------------
- I. b- D, c) O: i& b*************************
, k- i6 y$ I0 a( q+ yWndField.h文件* q: x, y1 T, c; G
*************************
, Q A- F6 {8 P' ]) f* T1 k m搜索:BOOL m_bReport;8 k3 k9 X6 x# G9 c$ d- M1 E2 i$ M2 o
其后添加:3 T: ~$ Z& b5 p. K5 P8 r
CWndMenu m_wndMenu;7 K! ]5 l R1 |& j& H9 J: O0 @/ x: K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 P# `: @- o5 z" v! F其后添加:
1 `" ^: k% B3 x7 s: l/ nvirtual void OnRButtonUp(UINT nFlags, CPoint point);" x2 _! ]1 v3 I" H
1 |0 F7 K, r2 z% n4 I8 y- U9 m/ F' T, O6 b
|
|