|
|
源文件中_Interface文件夹下WndField.cpp文件
6 a0 i {' x _0 v& [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& p) ~$ m+ S# J7 d( L) p
! j" }- K3 ?# T
struct sItem4 t9 j) ?: p- {7 c$ R6 b
{9 q! Y. x& D( ]; T; x9 F
DWORD dwId;
3 M R; n/ ?" a. hDWORD dwKind2;
! `2 ^* T: j8 T7 n4 YDWORD dwItemId;) Y7 e+ }5 I7 m" R8 l& i8 q1 j
BYTE nIndex;
1 O+ s+ k, E, x% H; _sItem(){+ M- L- C. L4 z: C- S' M
dwId = dwKind2 = dwItemId = nIndex = 0;
) w: p4 e# {' |# t# A, {7 K! A" ^}
" U+ s& v( v xbool operator < (const sItem p2), G) g" B, b P* K. J. h
{
7 I% f2 Z* D6 {& V9 x# [ if (dwKind2 == p2.dwKind2). N3 H$ Y+ P1 U
{
+ s! p2 v/ m9 s) w V return dwItemId < p2.dwItemId;$ a; p4 e) @: N: f, w4 c
}else{) @( @& Y% ] t
return dwKind2 < p2.dwKind2;# |, s' |9 x5 w* A4 V" e* Y
}
! w$ q2 D, U4 u6 |9 g0 N+ e}* n4 s3 Q# m9 d& \7 |6 {/ v
};
8 D% w7 Y* m5 l9 k0 Rclass CInventorySort
! |& U& u, |) `/ B9 o U4 N{
$ g/ y3 w0 o6 g' j& B9 Dpublic:
/ Y9 C8 P, M- `! i" P+ _CInventorySort()
* C) ^5 G/ U# x; Z3 o{
; T: c( O Y" S3 [$ r) ?) ` m_dwPos = 0;0 X0 F/ P* x) L
}
/ A6 H4 \' H$ ^$ y~CInventorySort(){} A) ~* ~9 J- C2 S% K; G4 ~) V! {0 h; k
private:4 @+ o; e' f$ o9 X9 g
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; }/ F% Z3 T# ~9 NDWORD m_dwPos;4 }8 I& r5 |" o: U
public:9 g5 h& }$ ]& y) O3 d. _3 J
void Add(BYTE nIndex)
D- Z1 `# k1 w7 L8 k3 D{" v, V' a( t9 Z& ]; y+ t7 ^ R b
if (m_dwPos >= MAX_INVENTORY)+ H8 z( q9 K1 c# }/ Z* _
{- o* k9 v# ~7 G
return;8 p) v _' Z( S& B6 E- {
}
3 z7 t# A* m5 i* f4 Q) _ m_Item[m_dwPos].nIndex = nIndex;
; ?+ q7 @4 o- R( X& C7 A: V1 @5 ] m_Item[m_dwPos].dwId = m_dwPos;. r4 D5 _4 B, h' m. [
m_dwPos++;
& A c+ h5 H) B# |}- z. K% E* U' N( Q: S W# U& c
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 f+ ^/ W. }9 w1 C
{- R7 L0 I: {) N, Z$ R+ F
for (int i=0;i<MAX_INVENTORY;i++)" _6 e* F: Q* Y8 Z& R3 Q2 J
{
$ t! d2 ?7 g6 A, U if (m_Item.dwId == dwId)
% J6 C4 ~$ j8 p+ \2 y/ m, V {5 c3 s# c+ G- i
return m_Item.nIndex;
8 z% L$ m$ L$ B: k }6 j8 x; w! c# m+ d1 w% R. Y
}
6 p, j4 R, b% L5 D u! k$ X s return 255;
/ ]8 g% }& q5 d( E}+ F) v7 |" F- S, Z; H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 T7 S7 n" C# J/ q{
6 C- _5 U; I4 S4 X6 I6 V BYTE nTmp = 0;. Y# ? x/ f+ g+ L
bool bDest = false,bSrc = false;
g4 [- a$ `1 }2 p* a$ U for (int i=0;i<MAX_INVENTORY;i++)' m6 M: o6 W! K( d
{# a% y5 t, Q4 z: t1 N5 u
if (dwSrcId == m_Item.dwId)
$ z1 n7 [( x N+ |4 H4 u3 C {3 ?0 D" d& y2 ~+ P2 ]7 y3 s
//id相等 则 改变对应的dest和src
6 m, F$ E, F# a; t3 [5 k0 v' U nTmp = m_Item.nIndex;
9 Y* z5 K$ v2 H8 h9 R& D m_Item.nIndex = dest;) k1 V* q8 @: @/ R0 ]( |
}
# K6 Z: a" h }0 N' X }
! c/ u( d, \4 z //临时数据保存完毕,交换开始
5 v* [! X" S5 x" t. H/ [ for (int i=0;i<MAX_INVENTORY;i++)/ u0 F/ V6 K$ x
{
3 q9 j: ] d1 b if (dest == m_Item.nIndex)
6 w& n: Q0 V5 s' \0 m {! N U' Z8 G/ ~* R7 Z- O5 C
//id相等 则 改变对应的dest和src
u. x. Z d# P m_Item.nIndex = nTmp;8 l$ B; Y+ K. j% F, Z
}
; k. x+ L' V1 V2 ` s# J6 Y }
6 d6 M0 u7 F( m- s# i}
) w% W, l7 E, Q1 o8 w" J# n# v};0 V5 n9 L& Z& k& f) {( `) N0 U
-------------------------------------------------------------------------
- O. l' r. i4 _/ }依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) R% j3 o: j, ] [5 x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- K& a( x7 d% Q* a+ U! |紧靠其上添加:; A+ d: A l' f2 C4 [" W: C
if( pWndBase == &m_wndMenu )5 c* G( q3 l! B
{+ p( q& X, i* J5 D) j% \* V( S; z- Y
switch( nID )6 X u u, @. }* { N& U& [) g! z
{/ f$ N2 H9 W; d g6 d' Q0 {$ g
case 2:
: L$ w/ U. W: P! L5 o. B {- z. a7 t" j0 c- U V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, s9 v; ?. C6 g1 G7 \& E' ?9 x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 U6 Q/ Q% ~' n, C& p7 X {; t8 x7 P4 K" c+ W) ?5 J
break;
) i5 W+ W' f% D }
- {5 Z9 _, ?5 a* i9 S! \! V8 v for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- r+ E8 [, ^/ ]0 v' f
{
# i: g3 R, y7 j6 o* |( F: ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 M" y2 Z% Z# o( ]' f# V if( !pItemElem )3 P, f, H' {, R& C6 ?( V1 L2 S
continue; `" c- f% E4 y! z/ p
if(pItemElem->GetExtra() > 0)/ V/ K! i; B2 X/ O) k
continue;2 [- S9 Z+ U4 |" m' w8 C
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : ^% T5 k: U1 D( S1 ^
continue;
3 |9 n# q% F. F if( g_pPlayer->IsUsing( pItemElem ) )
! I- F! E) n; |1 b( U5 M3 o& f! ^ continue;
. f3 `! A6 z( i, z, L2 R if( pItemElem->IsUndestructable() == TRUE )
# z& Y8 u7 l; l, u' w: P) Y {
" v" o2 i: U! H# C2 H( M! | g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 q6 P' l/ k0 L% _, j continue;; G* c; l _) y+ D& j6 q8 n
}
) e$ c9 f2 {4 B. b4 W9 ~ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 s/ k7 J/ Q' N+ z) [: M
}
: M7 \# Q% f+ I6 d6 [ Y1 R' T. [ break;
8 j# _. O- f. o) ?4 U }' F3 ]5 k8 o0 Y6 A7 Y3 m9 R% Z" V
case 1:
F6 p' c0 w4 f$ |; L {& a C0 N# d7 u) T: s- W: C
//整理背包' ^4 ~( N, |( h$ w' R) t
//////////////////////////////////////////////////////////////////////////( Q, a- C4 D4 N) A. d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% L1 @2 T% S! i* L; l( u& B
//////////////////////////////////////////////////////////////////////////
% z7 G9 p- A/ e( M8 p8 P/ F //////////////////////////////////////////////////////////////////////////
7 B1 Z p m6 D1 H6 f4 b3 M CInventorySort* pInvSort = new CInventorySort;7 |" a8 M! v! M
vector <sItem> vItem;( c, [8 N. Q1 D( \+ J0 r: e
vItem.resize(MAX_INVENTORY);//初始化大小
7 j6 O$ l" P0 l( X9 u+ ^ //////////////////////////////////////////////////////////////////////////
5 p$ p7 y6 |! v. M, q# d //填充数据; N& H' `# A% f3 I. n$ _- x* E
for (int i=0;i<MAX_INVENTORY;i++)2 ` k& ]+ [' @/ ^' z) Q, t* L9 c7 G
{
) R1 |9 W& w. x g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! v' A( {5 z% T3 t0 C$ f
if (!pItemElem)
+ A5 d N/ S5 y {7 H% S" H) Q$ C/ b" Y, N# i6 Q
vItem.dwKind2 = 0xffffffff;
& V1 q4 X c# C5 T vItem.dwItemId = 0xffffffff;
! K6 v5 L0 B7 j% ~; T# i9 J vItem.nIndex = i;) i6 B$ o& s# X, H2 z
}else {
! @, G. A* m1 |/ ~ ItemProp* pProp = pItemElem->GetProp();
8 P7 l( F8 V: ]5 Z" U vItem.dwKind2 = pProp->dwItemKind2;
; \. G3 l! S3 k! ^6 s vItem.dwItemId = pItemElem->m_dwItemId;
`6 u5 ^ I3 i$ y& ] vItem.nIndex = i;
( d5 v4 c0 `1 Q; q9 W/ W' K4 f3 E }
1 ~' V7 |5 s8 _$ R7 {3 B //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# a, L& J0 s m
}
( U: K+ x: x* q* O* a7 e //////////////////////////////////////////////////////////////////////////
6 k$ e9 j) y1 R0 a sort(vItem.begin(),vItem.end());//排序
6 |3 j' K* m+ Z" n0 q4 t //////////////////////////////////////////////////////////////////////////
& N+ g* F# R1 e! A- i Z4 P# l //交换
/ F5 s! M0 g- u' } for (size_t i=0;i<vItem.size();i++)0 J' y' v% x4 n; B7 Z" P# \
{8 K# ?' p# f/ z; l% ~/ _) y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ w3 g; V4 R, S pInvSort->Add(vItem.nIndex);
( U* c0 b) X8 j }5 S& U( w" m' Q1 j/ h3 j' x
BYTE nDestPos = 0;' [' D6 {* ^% v! W( h
for (int i=0;i<MAX_INVENTORY;i++)7 O$ d* f% j: u# ]" d: C- W
{) x% D" C6 ?& W; v2 X) T1 {& f3 u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 H. T1 r: g1 P2 ^" k' `0 J
if (pItemElem)
/ X) [9 s Q! k' ^- k( Z {
# j2 K! @$ F% c2 P- X4 H if (IsUsingItem(pItemElem))
2 N! c) X' p$ @1 N; ^7 \+ V {
' g/ i- M, a) A //这个位置无法放1 ~2 H8 T- H4 ~. R8 d
nDestPos++;
! K1 ^6 d2 e3 ~" g' _5 E: x }
8 U. e; h7 p; e3 y0 W }
# a- d# r l& t, h. t BYTE nSrc = pInvSort->GetItemSrc(i);9 V1 B+ W; b* ~* q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 \: u9 {5 {8 t5 G if (pItemElem); u6 q8 j9 m. x [( L8 g
{( c9 y( n, Z& L7 V2 c
if (IsUsingItem(pItemElem))* }/ L( w4 b3 W* Z+ _
{2 ~2 \ I3 q* `5 n+ u/ O
//这个道具无法移动,跳过
3 }: F! ]: w0 Y7 E continue;
9 |) q$ k" G+ F) C( C }
) z# s% e) `) | }else{6 [) C D2 B- a8 a% p! l- j, m
//空位置 不用动/ a0 O% J) M2 ~
continue;
^2 i% y2 S0 ]+ I2 ?; p }! ^" F0 x+ p5 W5 @- e9 B
//////////////////////////////////////////////////////////////////////////
; k( I- M* Q9 _; {! z2 |# p //开始移动* z" x7 K. ^# F# G- T
if (nSrc == nDestPos)4 K1 I, j1 F$ t7 ]3 f: L7 `, t
{+ K/ b8 _/ X8 t" I p
//原地不动' {( ?6 X: r. E% ?' P
nDestPos++;
* h. y! Z! m& B9 J% J/ y7 ` continue;( Q* w$ {" P7 r$ m9 ~
}
5 w0 D8 g! Z* G. J( Y$ G& }) T- b! y pInvSort->MoveItem(i,nDestPos);
$ K# `5 b: D- L. T |7 F g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 M1 O& J- R4 c" w2 W3 m7 j
Sleep(5);! A) S1 Y' \7 \* L" V0 v+ i6 ?3 O; W
//Error("移动 - %d->%d",nSrc,nDestPos);
3 o$ a" Q: h4 h* | nDestPos++;! f- b" l4 h3 x' C
}2 f7 W) |, n' I/ z- ^
//取第一个元素的信息
2 t. ^4 b, | L8 h; i /*
# \$ B& _. W% n9 k+ a9 b if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 ~1 P p/ }3 i$ ~! k {
/ z& u& V4 g* Z3 A% t' R. U3 I3 n Error("Move - From:%d,To:%d",vItem[0].nIndex,x); }4 q: \! L2 a( u# z( [
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# U6 p' w3 J; w2 R4 n3 K
}
/ p, s; R1 w4 ]3 J$ y( _2 V% D */- }% j! x. x5 K) F
//////////////////////////////////////////////////////////////////////////
8 [% {' F% R% B9 M. J0 C break; L! i( y% R- n! H) l
}; E: O5 D4 Q* X3 U# y+ b5 H# x. E
}
8 b* d5 S! D# B}) Q* S2 \% A" y& U* [% }
m_wndMenu.SetVisible(FALSE);( \8 d8 y( `+ i$ C/ z& d
0 W! F) }6 l( |& C) ~--------------------------------------------------------------------------------------------------------7 N( D; O3 b/ o" M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 f. ~- K; V$ t, r$ u! a{% v- |) |# n8 e T2 N1 V
BaseMouseCursor();0 M0 N9 x0 x1 a
}
0 O+ _2 D) D# P) ^ G4 t在其下添加:6 H2 }( ~+ f3 B# Z y+ q8 F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 U2 p5 [! U' \/ K, d8 E9 R8 S{- p' Z' x2 C V( X3 X' z
m_wndMenu.DeleteAllMenu();. W5 m L0 T5 R4 P$ O, y6 F
m_wndMenu.CreateMenu(this);
' N3 W. E, U( I. F. l8 B D0 ?m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; L/ K a! O$ q4 [; Q2 f1 p3 L
! C, ]$ |% b( T) i- Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ s+ a. A( ^( G/ l; i) h3 A{
& m# I- x$ |& u) U5 x //P以上级别才可以删除所有道具
4 E" t: U% `& R# W: j8 v0 Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; l! H s8 N2 |. l' P% r}
Z' H7 e3 d" g J! Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 }* y9 d- r& z0 q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! w* O1 J" ]7 t; w. ^ Xm_wndMenu.SetFocus();
8 G- T$ A9 V; L/ D, k% H}
. M3 e) j" P- s. @* Y2 W------------------------------------------------------------------------------------------------------------9 Z. e1 P0 n: G V
*************************: y9 U% U @8 F* a* J' A" B( O
WndField.h文件6 B, b: _2 \5 S$ ]" x' t
*************************
% C/ d6 m, r2 T y搜索:BOOL m_bReport;+ a. W+ v% \; F6 |0 k y, K
其后添加:
% I/ P) k" {" ]8 d7 G: HCWndMenu m_wndMenu;
8 V* ]9 C4 a8 n: T+ e" v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. }+ m4 r- Y: v
其后添加:
* V6 |3 h4 U4 I* |; \/ V; _virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 d# B2 F& {* X/ n" Q! A: r
' g" x6 A# E3 t$ B* M \3 x* P4 }
9 l" G, f: Q1 W' c |
|