|
|
源文件中_Interface文件夹下WndField.cpp文件
: K8 P6 u8 D0 P8 { Y I搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 k5 F" i/ F1 Q
! F2 @) |0 q4 s6 T, \& Z; qstruct sItem3 S0 ? \" a3 I3 Q. Z/ v; k2 ]+ m* a( A
{
9 b& T3 v) }5 e5 S2 ODWORD dwId;- k- i/ w6 o# ^" m" }0 b
DWORD dwKind2;
* h9 t8 Y, d+ N6 k0 V0 I% M( yDWORD dwItemId;& \ l) a1 J! ^& f0 e1 t' v) |: z( D
BYTE nIndex;8 e, s1 g5 t8 F7 i2 S
sItem(){
8 e8 p+ v. M: @- _" C. _ dwId = dwKind2 = dwItemId = nIndex = 0;
9 j7 Z! G! N1 H b; [% ^; p4 o/ B}/ k7 c$ q% b {3 W' A' ]
bool operator < (const sItem p2): \! \" l) w! m
{
' W, C' \$ I4 H! c if (dwKind2 == p2.dwKind2)
- c: N# e& y+ v, h& ^, H9 ]( c {
6 Q1 @$ }+ F; ` return dwItemId < p2.dwItemId;
) |7 [5 R% y0 ?- Y& A# b" \; B }else{
: e& ?' a& w/ k7 S return dwKind2 < p2.dwKind2;
0 L- G0 R9 G3 v2 [8 V% m }
Z: _& W+ H6 c0 @0 o/ i}
4 T1 P8 o3 m; c0 F" l- H/ _" a% v};
5 L3 ^( j0 B1 I3 v6 p) k3 pclass CInventorySort% D( z0 ^' l7 X9 z6 Q
{
) ]( C* B1 H6 xpublic:) _' I h/ S+ F# n+ N
CInventorySort()
1 N3 K1 C- F6 e# Y6 l. c{; z# A% |6 n" |+ ^) K
m_dwPos = 0;# {3 ^* K9 }* R4 S- r0 z0 v+ r
}
8 {0 j6 z K& ]) v% {- s~CInventorySort(){}- f' X! s6 T# R& d2 g6 P/ |
private:- q' z+ S$ B# S5 ~: ]' Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' D( p8 Q7 Y5 s$ \; `/ n
DWORD m_dwPos;
( w! x1 z1 o2 N1 T3 W; ppublic:
# N- Z. Y1 @- O; L6 fvoid Add(BYTE nIndex)9 p3 u+ W; N# S
{; c/ O4 m8 x4 y' N! W
if (m_dwPos >= MAX_INVENTORY)- O8 ^; U* M9 W( ]5 F0 Y, B' H
{
: W( t$ M5 i. h/ Z4 B4 ?( S return;
* g7 n& U. q2 r; ~1 |0 i8 q4 e }0 o; W( G3 {" {' T0 v
m_Item[m_dwPos].nIndex = nIndex;
/ R# [# p3 ?4 o% [% N m_Item[m_dwPos].dwId = m_dwPos;
& F# i; H/ i: f. l1 M. J m_dwPos++;- [, p M# x1 f( @
} Q. G, V) P9 t, i- q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 y7 `8 Y) Q$ N& t
{
/ g" ~6 j, S6 v5 G; [; y2 t for (int i=0;i<MAX_INVENTORY;i++)" e+ f& X4 ?7 i1 p, z
{2 w. ]2 g: c+ s" u
if (m_Item.dwId == dwId)
0 P9 L1 t% |/ S3 M0 G, _5 c {
4 ?' K: S) a4 F D Q; O return m_Item.nIndex;' w9 v4 u8 p) a: ]: ]
}
3 D6 l) t5 P2 g" p2 i+ j }
5 c! o9 B) C' [2 ~4 g6 U2 k* w return 255;
* g$ v" { l0 N. Y. H" u; N+ n5 S( Q}
$ V( c" o3 W& n, a: I. C8 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ y' \! `* y4 O% X* M/ C
{- W+ b8 l" s* t' [2 K5 a+ R
BYTE nTmp = 0;
6 F* E5 x5 w9 N6 ~& g- { bool bDest = false,bSrc = false;( Q8 n' K2 Y" B7 f
for (int i=0;i<MAX_INVENTORY;i++)* E* R0 A) y \; C: l% F
{
# f, \- M% q K" ] q( ^( O3 E if (dwSrcId == m_Item.dwId)- T* p0 T! }, u& ]+ B
{ b6 t9 K( ?$ O: f; \7 d. e, x# `
//id相等 则 改变对应的dest和src: m. Y9 x! H6 ?
nTmp = m_Item.nIndex;" U2 K) s0 {2 K
m_Item.nIndex = dest;
5 n9 ?! Q# H, @+ n }) \: e6 l6 r) h; |* r% x, r) w7 }, V0 m
}
; a6 U4 n# l# b. ^: S3 ~5 P1 Q8 b //临时数据保存完毕,交换开始
, C' @2 h1 N1 E8 x" \0 ~ for (int i=0;i<MAX_INVENTORY;i++)
* p' F$ t4 r0 c" T: F5 R {7 c k" U6 U/ I* j$ }
if (dest == m_Item.nIndex)
# ] H7 x" ~/ R. \& f/ ~ {
; y6 i* T, l! q% n* _: g //id相等 则 改变对应的dest和src/ j% ^: {( l7 k7 D( X
m_Item.nIndex = nTmp;" }% l4 X5 K/ f/ R8 a
}- R: |1 s: k0 g$ d( |' a
}$ T! j4 J3 C' Q, W$ r5 \$ F
}0 ~1 A( Z+ U7 v6 o$ |% }; G
};
% k% v/ B/ N f. A& ~$ C: X- F: Z-------------------------------------------------------------------------% m+ W$ H U( _; x. X- n8 x5 B3 [% E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ | y! y. M4 X- l1 R/ R搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: q* O" H& \' G/ o& c- `紧靠其上添加:
- N9 b! K' R* `5 j- w! a `if( pWndBase == &m_wndMenu )
9 u) U. V3 G+ j) Z) R9 `3 ?2 E( I{$ E( f2 Y; ?6 q- V5 [) M7 n C9 q
switch( nID ). X0 V( L, j1 b) ^. [1 j: B) p
{
- D+ \; B0 k; { case 2:
7 V* }4 \$ Q0 v7 W- g {; N5 L. {/ X, q, {% S* h& g% a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 T q. {3 m; V8 R. {* @# |5 |
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 V( q, N F% u( q8 W {
6 S8 W& n5 u I; L8 G# t8 H% n break;( B! w$ F- E0 r# ]& t5 t' d
}0 B# ]. a/ F. h8 [& V9 H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. {. x$ A/ F' d9 p {
_; s; P4 l: H b; l5 C7 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); q0 g( H. n2 T1 m, }; h
if( !pItemElem )" M7 c0 @) x3 J$ E) x" z
continue;/ g7 }1 N( E1 e( t* l: K6 Z9 S
if(pItemElem->GetExtra() > 0)% [# ^ z# |. S* n% e
continue;) S, G; K9 r5 ] |6 I) c7 V; b' W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 h) i) X1 t4 ]; y( M( T( _. U" Y
continue;' y, _; n( t/ A! {' @
if( g_pPlayer->IsUsing( pItemElem ) )8 f* {& _; _( f& v
continue;( @" j; n4 n, i
if( pItemElem->IsUndestructable() == TRUE )
4 @" C% D7 ^: t* U( U {0 i' |0 s: p( ~8 e2 Z2 z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" m1 [+ B3 l; w3 {8 V
continue;
+ D0 j+ x& g [: A/ ~3 N/ s# W }; `7 V- C9 b* T, t v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! y0 @: j5 Z3 a) h8 ^1 K }
5 q4 T% a5 j1 O) Y/ S( A: q; d break; I. ^0 p) G b8 r/ n0 g( z4 Q6 r
}
) `; H, c/ g# y3 l/ H( H case 1:
0 o9 e2 B5 B" k1 D' h {" {$ r* {, n% E2 ?
//整理背包
}8 p( w/ q, H0 w# E4 R' a( ]" @ //////////////////////////////////////////////////////////////////////////
, B8 A, g3 s% l! o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( R8 b0 E2 L, b" I3 I //////////////////////////////////////////////////////////////////////////
. B+ ^; r* y; z- | //////////////////////////////////////////////////////////////////////////
$ K/ [) O p- x5 \) J CInventorySort* pInvSort = new CInventorySort;$ O3 F( C5 j. F1 f$ C- ]
vector <sItem> vItem;. N* y' M/ k! `% ^) m6 d8 v
vItem.resize(MAX_INVENTORY);//初始化大小
9 V; O6 |8 E( T p1 i( n% k! w //////////////////////////////////////////////////////////////////////////
8 R4 g F+ ^% M1 z) x //填充数据
8 ^$ A C9 E# X9 Y& S2 E for (int i=0;i<MAX_INVENTORY;i++): V. N4 K m% g+ g/ t
{+ B8 |% J0 f: L5 _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 u5 R( a" l! Z if (!pItemElem)
0 B2 e9 j8 Q) }/ X7 ` {0 J# K* T0 I* c1 `
vItem.dwKind2 = 0xffffffff;2 i9 m. b; b/ m9 W& }% y( ~* \
vItem.dwItemId = 0xffffffff;. W" i$ E- h$ s3 v3 c
vItem.nIndex = i;
7 r! t; L0 d3 z4 c. J }else {
- d: K3 l7 m) T ItemProp* pProp = pItemElem->GetProp();
6 p* u5 K( F# }; b vItem.dwKind2 = pProp->dwItemKind2;
+ k6 p: ?- H s m vItem.dwItemId = pItemElem->m_dwItemId;
f1 H( x5 @) d vItem.nIndex = i;
: y$ N: g! u; [/ i7 k6 d }) c5 D: v- o* K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 Y7 t) ]% T; U) m
}
; o- f7 g0 E. _% i5 d# ]0 A' _ //////////////////////////////////////////////////////////////////////////
5 H9 f# c% b2 |% v; o* R9 V sort(vItem.begin(),vItem.end());//排序8 x1 ], c: D* _6 ]0 ]/ }2 g
//////////////////////////////////////////////////////////////////////////: p0 L( C: L! `; J. r* j: x
//交换; k7 t4 s5 }: z7 J
for (size_t i=0;i<vItem.size();i++)
+ D8 W- p4 d8 r' t/ _9 y s {
! o; O$ j. P$ j H0 E- h* x+ N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 h' s( i& g$ i$ Y/ c pInvSort->Add(vItem.nIndex);7 v/ L+ W! ?% R8 e8 \, n$ a
}0 Z5 y1 {) l" j
BYTE nDestPos = 0;
& f5 L% S+ g- A; Q: s for (int i=0;i<MAX_INVENTORY;i++)
6 @+ ^( _4 k- w2 d4 P. e5 W+ g- B {
! R _$ V+ e* t) Z/ j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# p) y$ J* d* S+ V% E! N. b' K
if (pItemElem)
+ V3 s7 j: z! p0 i {
! ~1 O. K( J" D5 L0 ?) J if (IsUsingItem(pItemElem))7 O& P/ i" R' `3 [: s. x# Z8 z
{4 E; F( @+ h- _) j: A4 d
//这个位置无法放
* r6 p6 W* m2 y+ p nDestPos++;
1 u8 A; V$ m& K# R/ y }
( p6 x$ V, C$ m$ o8 g% l/ Z }
# A: K7 r& C: J% x# I+ V3 T BYTE nSrc = pInvSort->GetItemSrc(i);3 d' l: O: A& ?1 W/ f2 `( L# Q) m# ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 U; @3 z3 w" K# \' @3 P
if (pItemElem)
( K/ X& p' z, x# Y- H: K0 } {
7 E; p1 A8 p% E o) Z' W if (IsUsingItem(pItemElem))
+ b7 f. X6 p3 I6 n4 D {, r& x. w8 M8 Q, {8 D
//这个道具无法移动,跳过
& S+ F" X! N7 Z' X% ] continue;
: v( l/ k& O' w+ l }
1 b9 S+ h% _ p4 t3 N1 ?) B }else{
' w( |8 n* a9 W //空位置 不用动
" }( j) j5 f0 [: X continue;
7 f% o5 o7 A6 U1 p$ p, a }
1 n+ k' T( }+ V8 b' F4 R+ U //////////////////////////////////////////////////////////////////////////7 U+ m7 X! H+ ~5 ]8 Q. {
//开始移动8 b, B+ h5 C2 p0 v5 a4 r3 o1 n; P
if (nSrc == nDestPos)
- Y1 |7 a9 a! N8 S/ }6 Z. H {
- P' N$ z" C, O6 `: s d //原地不动
; [# T$ J3 y8 x nDestPos++;
' g; T; X% L6 Y9 H continue;
) F1 u9 D& f, b6 V$ i2 E: X$ Z }
0 {+ L$ o9 S& } pInvSort->MoveItem(i,nDestPos);6 g1 T& n, d# l$ _/ L
g_DPlay.SendMoveItem(0,nSrc,nDestPos);" l# b" Z& ?% c z
Sleep(5);- E) C- \1 a, }7 E* \. I# f: S
//Error("移动 - %d->%d",nSrc,nDestPos);) K' f0 n0 d1 X% r: @
nDestPos++;) c) A6 S5 h; Y A j9 q
}) v$ k( ?& C! L m' @
//取第一个元素的信息' p5 F- P8 h8 C5 \: \! _6 u
/*2 |2 q- R* O$ U5 r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ G% U6 [: \/ [3 H- j; q1 M {; p3 L& S6 t% u. V1 h! @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; }9 h- B$ G/ t# g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 I. W2 N7 ?, R; L' j
}" ~. z7 F P' ~( Y6 w; N4 N
*/
7 h S2 Y7 P5 c! o9 Q //////////////////////////////////////////////////////////////////////////
3 G+ T5 M( l7 i# K3 l% d$ J break;
2 P* K u3 s: {4 r } l$ {* i: `7 s3 K2 r) P
} * G. \7 Z& a7 S4 M8 T: C! H' t- N
}
$ ~1 I! u5 b4 _3 ]m_wndMenu.SetVisible(FALSE);
) j) l$ z4 i7 K) H* W
; R+ W$ ]6 K2 B5 F--------------------------------------------------------------------------------------------------------
! P/ q: k* Q# R8 d+ D F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# J8 o9 E7 z7 C{
1 C: y/ [3 f# c% d- S4 E( kBaseMouseCursor();
: l1 R2 m/ \, M( l}* b& L- ^; L5 ?$ G! z! \
在其下添加:* z& \8 i E1 P' @
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 w! h, y, `2 L
{
8 V+ M1 Q) m7 r$ \ z) lm_wndMenu.DeleteAllMenu();
+ F" i3 O) }4 s3 ?3 Lm_wndMenu.CreateMenu(this);
7 @1 H+ a z5 ~- Z) u9 q6 Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ ]7 {7 [: n/ x# S H/ n# M; \! k
/ r+ \$ U' {3 g9 Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: d7 Q$ n' T* g) E/ c{
1 f9 V- x& L. ^# f; z9 \7 i //P以上级别才可以删除所有道具
7 m0 N/ b) k9 S4 | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 o# |: i5 a- p; G% Q: h' q4 H0 Q
}3 Z U/ I0 {" A' l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 }9 ~( W3 F$ [- T- Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 }: }* T3 B! ], v. q+ c, o
m_wndMenu.SetFocus();
9 ?. t4 a# r* `3 Q5 I1 r ?}
/ u9 j! L7 w, ^2 x5 J& u------------------------------------------------------------------------------------------------------------
5 ~) w) { q3 q" c- S+ }*************************
: ?0 n1 r/ v! z1 p1 U. F1 A" ~WndField.h文件* ^( @: `5 w& Q) T% C; o2 }1 L
*************************
) y8 G/ C/ w" X搜索:BOOL m_bReport;: M) h) _. s H. i
其后添加:$ I/ M7 I2 a8 q% l- e9 D
CWndMenu m_wndMenu;
k4 W- d P8 V5 ?! B$ D i% G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* e1 j& [9 v) j) g. a6 W其后添加:
& D; f+ x) C0 B# @$ q+ P& K) x4 R* Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);5 }7 z: a. s1 s) {, o' e* S
( l$ u* T* Q& Q- w- V( l" G+ k) Q6 r, \
2 o, h; W/ f$ G1 o* | |
|