|
|
源文件中_Interface文件夹下WndField.cpp文件 @2 o; k. {( r: b' U1 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 _+ ^0 e" n: |& c9 a5 ?) k2 e+ K* ^, g5 E
struct sItem) m! R# B2 w# n) ?
{0 P* R/ X1 G- S& j6 e
DWORD dwId;, u( f6 `# N) C- h$ b
DWORD dwKind2;& x, h k; {( P5 q2 O0 b; s
DWORD dwItemId;
, s8 u: h9 m7 ~" KBYTE nIndex;
6 p* f4 d2 r( QsItem(){
5 ]7 `- Q' U) ~" D- G( } dwId = dwKind2 = dwItemId = nIndex = 0;( f% j9 i% c: P t! w. O! d
}
3 o- q' I4 g: e0 t- Qbool operator < (const sItem p2)
% m- u9 G# B! A8 x. a{( D ^' u. w0 W5 w
if (dwKind2 == p2.dwKind2)* i$ s) ?7 Q: s& u. }. a x0 K
{
% y; w" j1 O) M return dwItemId < p2.dwItemId;) Q9 a4 B) j9 F1 c
}else{" f! E: T' n: S
return dwKind2 < p2.dwKind2;; `" E5 a6 L8 E# j E9 P* f
}# A7 X4 E1 Z& l- T; h5 Z
}4 P5 a( W9 h1 s' C! d! ]# o
};
2 Z9 t3 @! W2 ?7 |) I, Sclass CInventorySort+ N7 ^' L7 A, A
{
. H5 @7 I) @' R* m" Tpublic:( {0 \( m& b) G. Y& J) S( w
CInventorySort()+ U% R+ U" @4 N$ y3 `) U
{6 L* M4 y9 ]# D3 D
m_dwPos = 0;
- ?7 F5 i, L- a. M) a% L5 I$ W}! v4 _+ a! j" n$ p! \+ S
~CInventorySort(){}8 ~5 i' q' e9 Y5 w" G) q
private:$ [* R6 i/ u6 l/ r' u$ a& p, g
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ t" a* c1 A4 l) N- a
DWORD m_dwPos;
, \" p: S5 I5 L7 spublic:9 n/ B s# I1 Z* g. p
void Add(BYTE nIndex)
. D) [$ q. E4 E1 w r{$ T0 o; D8 ^: Z9 N- I7 N/ j. l
if (m_dwPos >= MAX_INVENTORY)
- }+ u; Z: m! y {* j4 f3 ~% C+ c- j' k$ z
return;+ f6 }7 a- o/ g6 q
}0 t1 A6 q# m/ x x) X+ ?+ C y7 X& p
m_Item[m_dwPos].nIndex = nIndex;
2 ? R2 ~7 V* F, f- ]7 k D4 q m_Item[m_dwPos].dwId = m_dwPos;
' L- Y: i/ {. E# | m_dwPos++;
6 g. c; O7 A, O2 l}6 }' q2 }; d# a m* `. J" ?
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& M& Z* `9 W) N# C, r{
8 a: L1 `& D" g& j for (int i=0;i<MAX_INVENTORY;i++)
& y2 a# S; ~/ J) K3 p* B9 d {
8 K: [9 ~0 F2 d1 r6 X if (m_Item.dwId == dwId)
8 s" @6 j2 V6 v; [ {
0 o" ]7 Q7 ]; m, {& C( \! K$ Q return m_Item.nIndex;. L# {$ _! G: j+ X& C
}
9 Y: e u" m$ p, x: h }
) v3 a- |* P" f1 i return 255;
" _ g/ [. k5 w5 ~1 ]# j" _}& U" L& m2 T' _, h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ V0 \+ O0 H6 Y0 L1 c; V{
- C" |, u: x) r5 s7 r% O BYTE nTmp = 0;" z& j7 x* T* `5 U0 _% `
bool bDest = false,bSrc = false;
2 I! i2 r0 L8 d0 d1 D2 q for (int i=0;i<MAX_INVENTORY;i++)
5 g. ]. v. H" k0 J* o! u. c {8 x g" G: C& k0 n4 ?# ]' A3 O
if (dwSrcId == m_Item.dwId)2 k7 G% t$ W( h$ X
{
, f4 ]% a; O( z. D/ [ //id相等 则 改变对应的dest和src$ |" ]" m9 V d4 V
nTmp = m_Item.nIndex;
6 E! [; x# ?& H+ | m_Item.nIndex = dest;
7 p2 k6 [& c4 o' z/ _" N: \4 x }7 R% o) O5 |, i" e& P9 C1 K
}3 p( R3 ^% w3 q: F7 V3 j, U* j
//临时数据保存完毕,交换开始
8 C( M Q; r% C3 b" y for (int i=0;i<MAX_INVENTORY;i++)
/ U& f. v: R0 `0 u w! i. I {" X, _, t3 E( \7 ~* n( L
if (dest == m_Item.nIndex)8 v( r+ O& U' J* Z- @
{
* E x! T! n. Q X8 R' d) O' u //id相等 则 改变对应的dest和src3 X, d' T$ y3 i6 T. X
m_Item.nIndex = nTmp;
: A3 o T- X1 F# z; O2 N& t! q }
# W! T$ P/ R1 w: K }8 N) `1 \6 R/ v
}- t( ? F- ?, w. _
};
7 P7 C- F+ N& O. R+ v* j4 P-------------------------------------------------------------------------' N. {% E3 J& N/ N6 R3 R) M/ Y( d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 c& s+ q* A9 E2 [
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& m5 s5 {/ e& { D- k/ t# I4 c紧靠其上添加:! B5 r# v; x, u0 X1 Q
if( pWndBase == &m_wndMenu ) O6 o$ N1 F* v5 l% i/ S
{
/ f7 F# |5 }/ X0 ?& u- L switch( nID ). N5 F2 U8 i7 m# E
{
" e( p2 {/ q# S* i( n case 2:( @; d0 M7 g L9 I4 ~3 y$ C
{* H: a: ^8 u; X! l/ B
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
`4 _( f( q/ @" `) J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 y9 A5 P {" o" F! I4 g5 J
{
4 Z. F/ `. O. X& n7 o+ s break;8 V$ T3 a) _' K; O6 N
}2 _, A' ~3 C1 ^/ S: t$ E2 C2 _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 c7 ?! H- r- H) `
{2 X9 x4 v) d/ x. ]+ `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 {, } |& W' l9 s2 v
if( !pItemElem )
8 e. h; [# s/ v9 |/ x1 n continue;$ [6 _( F5 j7 p' C( n7 V
if(pItemElem->GetExtra() > 0)# |, c5 y( w1 R9 N* F
continue;
1 r6 I8 c) w$ X0 X" ?1 K if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; k: C6 a6 X. u0 J continue;( [0 q4 o! F5 y
if( g_pPlayer->IsUsing( pItemElem ) )
! L8 p" a9 I9 M$ w; t5 H! K continue;
6 I9 q) _/ w/ g6 r if( pItemElem->IsUndestructable() == TRUE )+ G5 v) O) S" z, S/ o
{
" u/ r8 L" V9 Q$ } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, w$ z% _( X0 c% E. |2 _1 ] M3 o
continue;0 b/ H1 l& E9 D1 u, ?. U
}
/ L; V( Y6 _; T8 K3 R2 o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); s0 H! ^4 `: }6 }) ]
}
; }2 K `, V, G7 k' S: o" i1 G break;
$ q6 W. b: R0 t$ q8 S4 s/ V# V# H }
1 m7 m7 ~& `/ T! L7 c( d6 I9 W: Y case 1:
5 F2 e9 I* [/ ]& x$ }2 H! X) { { o6 [+ _) U4 u# `5 c
//整理背包( f/ o4 @4 X- o9 [8 O
//////////////////////////////////////////////////////////////////////////
4 r8 B/ l, v! X% Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 \- p- E3 n! |& v, [0 c+ G
//////////////////////////////////////////////////////////////////////////
4 Y0 G1 R# E: P0 I! s4 Q5 H. I //////////////////////////////////////////////////////////////////////////
& k5 ]# S6 y% ^1 _5 a) y CInventorySort* pInvSort = new CInventorySort;* n. q2 Y7 p! W- V! C8 M( R2 v
vector <sItem> vItem;+ Z( D! O) g! I. t0 S, I% ~& g
vItem.resize(MAX_INVENTORY);//初始化大小
# r7 ]: [+ ~& q) K* F //////////////////////////////////////////////////////////////////////////; N: N# o' q- i; c/ b/ e
//填充数据
( K; s2 m$ U: j1 k3 Q- m for (int i=0;i<MAX_INVENTORY;i++)2 P6 d& i( N, l7 v- T
{$ M) G3 V7 {/ G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 V, P' n5 F2 T
if (!pItemElem)
4 K) m) X; [) R4 D# e; U {% U# k1 l9 v" `. w
vItem.dwKind2 = 0xffffffff;3 }: g$ \ ?0 S0 k% R
vItem.dwItemId = 0xffffffff;+ m9 f" J; F5 }: a7 I
vItem.nIndex = i; G" d. I* s9 b4 l; O" u, A5 O
}else {
* _& f- ?0 v4 ]3 u% T/ h ItemProp* pProp = pItemElem->GetProp();& b3 K& W- k# ]* A* H8 u& N0 g
vItem.dwKind2 = pProp->dwItemKind2;
3 Y+ t/ Z1 W# v7 y vItem.dwItemId = pItemElem->m_dwItemId;0 J/ r6 s! @8 ?3 ]* l# j
vItem.nIndex = i;3 c$ \* P) n) ~% y k
}
6 h+ T6 r* V* R! u4 d% k //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 K& O# ], E8 K6 |
}; ~% q1 b E) L
//////////////////////////////////////////////////////////////////////////* G# ]% ^2 e& c# v' ~' Y
sort(vItem.begin(),vItem.end());//排序" f: [+ L1 j; S8 L7 J/ B
//////////////////////////////////////////////////////////////////////////; _7 D- U" |: M" }$ {2 `) M- j( O
//交换
! g, e- w( h+ u l6 P: W for (size_t i=0;i<vItem.size();i++)
$ `$ z7 `: C" m& f2 n {
9 t! E2 x( v8 O) x# c6 n //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, {2 D3 A! b! x* _ pInvSort->Add(vItem.nIndex);8 A2 F5 A- P7 j
}2 S4 k( u1 ], V' G# I7 w! i
BYTE nDestPos = 0;
$ f7 R) J1 |- k for (int i=0;i<MAX_INVENTORY;i++)9 \. z$ v7 y" I: ~
{
% a( q1 O2 [0 E Q' w* Z l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' o, D- b7 h# X) z if (pItemElem)" q7 C" k4 N" b
{+ C8 w/ Q: ^3 C6 ?; d1 i) ~7 Y. f
if (IsUsingItem(pItemElem))
2 R7 r2 s' u4 g {
2 W$ D7 {6 S( x" A' w //这个位置无法放
9 O/ ?4 M% C$ d" V+ Z5 ` _ nDestPos++;
y5 S; D1 I' D; F0 Z0 }4 Z$ m# _. i }- v, W! j; B' Q( ~( \
}7 ?4 b- I( A& E4 |2 ]' @
BYTE nSrc = pInvSort->GetItemSrc(i);5 w/ N b6 b& g* |+ z7 C, a
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& H6 G0 }$ O% Y3 h if (pItemElem)
7 S; t; I5 ~% H) U/ z! {1 H {1 w. e* ]9 u( n$ g9 |) S( x. m2 _! f
if (IsUsingItem(pItemElem))
+ B( X* R* P2 v& u7 | {1 q# T6 Q6 ?7 Y: K( V) E' @
//这个道具无法移动,跳过; A4 G0 P3 A. N
continue;
6 o. \+ g7 J& N, L: l" w' X& [6 q }
+ \! e* P" m2 r }else{
l' k& _+ V1 h" N; U5 a //空位置 不用动
: B# W; E! k) G2 f! K1 q0 M: m% R; ] continue;
; \8 N- @( ~% A5 {6 h% x }
* z* y; z. G# D0 q //////////////////////////////////////////////////////////////////////////
- ^# x- m/ J9 w2 M" y //开始移动; f3 _* @ R- B; `+ t# u3 [
if (nSrc == nDestPos)
! M% p5 t O4 f- B/ J- }, w {
1 V* Y h2 n! u# w J! e5 W //原地不动% B7 x4 i$ L6 Q- r" w& B6 l3 O
nDestPos++;
( b4 ^& f7 C" t: T0 [8 t8 g3 ^7 C/ J continue;; _1 r0 ]; O8 M) {4 H
}5 ?1 T$ |! f) z- ?+ s! h
pInvSort->MoveItem(i,nDestPos);! \9 p' X! K4 v+ l3 u, {. C/ t' X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! h+ ~$ a8 @ K/ q Sleep(5);
! K8 y% ~3 x; r2 p, E+ A4 @, o //Error("移动 - %d->%d",nSrc,nDestPos);
% i y4 M; {8 o: F) k. Q# h% v8 M$ w nDestPos++;' ?' _/ b+ G6 a3 |* M
}
, A0 }: h( J( c( B- U% { //取第一个元素的信息& _; {, g6 z3 c1 }( K& z9 l
/** `" V, |; f: z7 y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& D- Q3 S. R) T. Y+ f* e4 Z, }
{
( Z5 n! L6 K4 C e' |8 x, n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 n Z; D+ p/ H h* v4 d, ` g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 V* Y0 B* j7 l; \ }: j$ d9 @+ \$ l! |- n" X1 D! b
*/
- b1 i2 U" @# \ //////////////////////////////////////////////////////////////////////////; P' s4 N1 H" x; R5 g2 I
break;
& U9 {; d( b5 k& J }- {% m; y9 D- U9 `" D4 ^/ Z7 ~- t6 L
}
" L0 r( r" d q}
$ S+ d$ _" S2 }6 a n+ hm_wndMenu.SetVisible(FALSE);. j; G3 d# t% k ~6 j
( V4 j& `3 s( F" s6 B
--------------------------------------------------------------------------------------------------------
/ J& C, }6 Z! d+ e; [- f- l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; G0 T! B+ ?- }: W: J{; a* ^. H# X8 I4 m) U" a/ P
BaseMouseCursor();
* o* X3 i0 @- D; J" r9 N/ s/ o: z}
* A( T, t; p+ C& v在其下添加:2 E/ V7 P: r8 e9 o" c; W2 c
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) f+ y ] m! A, U: V5 D0 C
{
4 o0 j2 m+ Y6 S- Q( X: cm_wndMenu.DeleteAllMenu();5 [8 D- G4 [; Z( Y, }
m_wndMenu.CreateMenu(this);/ U$ U: G7 ^' \/ S- W
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ E, U" ~- y' D6 `4 R
3 c+ s i+ {. q- C# Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- D) |2 b! ~, u& a7 e) F& H
{4 c4 F( I' ?! }
//P以上级别才可以删除所有道具
: v' I6 }- F$ z- ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. \( j% c, Q2 m" ^) H}
, E. J3 ^# c5 km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! e. I3 I, ~+ C* a! d) o/ z9 m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 T ~* I2 @ }( ~: I4 ~m_wndMenu.SetFocus(); Q% E# a9 H0 ]* c( P
}, k6 I5 c7 ~4 r: q* @' a1 J
------------------------------------------------------------------------------------------------------------
+ {1 ~7 C7 r0 \9 h' u* `*************************
; c9 ~; e% Q7 N5 A' Q5 q' @: f! YWndField.h文件) h* T" C1 R( P+ c% U) L" q2 {2 x
*************************. E5 A- N+ N! o" T
搜索:BOOL m_bReport;
$ m) u! h7 N) r4 }. p其后添加: w6 x/ l4 Y) e h( a5 c
CWndMenu m_wndMenu;* e/ W0 A9 ]% G' u% Q& U7 b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" p* c5 J4 x3 m. S0 W8 @3 F其后添加:
8 O! d$ f+ @- B! U/ Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
, Q& P6 o' w3 @: f/ `* L" u R% v5 `. l
0 s5 y% W7 }; y$ m# d
|
|