|
|
源文件中_Interface文件夹下WndField.cpp文件
3 k- n3 m6 R Z! q$ p8 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 _! _5 g" E7 V4 w( F- {* J
G& ^- F; {: H2 B6 @) t; _struct sItem
, h h7 _ m5 l: ?) P; b% F. v{
* \! t# A3 u6 `9 e' m' \DWORD dwId;
( Q7 A5 a& `0 B" MDWORD dwKind2;0 K8 P. x* W5 e ]* l& W$ p
DWORD dwItemId;2 O0 H; a3 [) {
BYTE nIndex;4 ]1 }/ A' g$ E- u6 x- Q
sItem(){. n4 i+ R$ S& }$ K
dwId = dwKind2 = dwItemId = nIndex = 0;! _3 p* t# d0 j' F
}
+ w1 v* v8 q% m5 abool operator < (const sItem p2)% f' h- e9 X; @0 j7 Y7 P$ l
{& m7 ]7 O$ L, s. Z# B. J* w3 t6 I4 L
if (dwKind2 == p2.dwKind2)
8 b% q' Q4 N! `& a9 \$ `" ?( h9 t {
3 k. Q) |+ Q+ ?( r0 y) F return dwItemId < p2.dwItemId;: X6 N, d% i5 m7 x1 G
}else{$ I% j$ p9 _9 B) F
return dwKind2 < p2.dwKind2;4 O& ]1 t. s0 s7 ?0 q$ n
}& u8 l' `3 Q4 l5 S
}
% M- P" L& s0 ~};& ~9 @3 ~# ?4 |
class CInventorySort% L. U6 w; a0 e& @6 o% E7 [
{
2 \: z0 B. H* O6 Ipublic:% U# C' z* l0 q; A) U
CInventorySort()
& d. V' d' x6 L9 h) H8 m( S+ V{7 P* s: g' p7 y9 \' _3 ?
m_dwPos = 0;
' M( m9 R7 ?1 S4 i. K}
7 \+ I5 A7 `& @~CInventorySort(){}
, E0 S6 x" T/ n4 Mprivate:, d; E" h+ O! J- v* ~: V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& X8 ?7 V7 R/ _& B# f' _: dDWORD m_dwPos;
1 X, P* C" I- a7 Z. F6 ]public:
' ?+ o: g5 b. h0 ~# q9 ?void Add(BYTE nIndex)
. m6 f% g# O8 H: k{1 |2 d# ~7 T) q+ E. E% p0 h
if (m_dwPos >= MAX_INVENTORY)
# Y7 }# D7 z. z/ y2 Z: F" ` {
o2 ?* @; C- @- E( \2 Y return;
; p( K8 }. z1 P) h8 B }& D* Z* f* J* l# @9 [, i" F
m_Item[m_dwPos].nIndex = nIndex;
( A# j4 y) W n3 D m_Item[m_dwPos].dwId = m_dwPos;; W/ s2 Y7 u5 x; M
m_dwPos++;- d) L- m9 o* L
}; q6 M6 y2 t% h" w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 j( c0 h& ^# k* Q: }( u
{
4 @" I4 T; w8 z& C for (int i=0;i<MAX_INVENTORY;i++)" p* W0 o! F7 g
{
9 R8 U, t$ G h! E; l, b if (m_Item.dwId == dwId)
( v/ I, Z. f, }- X {
$ V$ I7 K* H; G5 v. R. @ return m_Item.nIndex;4 R5 A: r, o! [/ v
}" s7 X/ x; U+ A- ^: F9 B* M9 [
}
7 K8 X) L8 @" c return 255;
9 C _ R) [4 ^* @; w$ ?}3 S& k6 m" _, p. ]% `( i+ S# q R1 C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) G1 `0 B6 \/ T
{) t8 O4 n+ e2 `3 }
BYTE nTmp = 0;
5 T* q: C; i1 S6 D bool bDest = false,bSrc = false;
6 \9 Z3 }9 c U9 O# i" J! q9 l for (int i=0;i<MAX_INVENTORY;i++)4 i* d( t+ H8 Y \
{
& j, `# L% w9 \( ] if (dwSrcId == m_Item.dwId)
& F# f4 G0 H5 p {0 P n7 I$ x6 k6 O
//id相等 则 改变对应的dest和src) o/ }+ P8 W, u- P7 F$ g) Q4 A
nTmp = m_Item.nIndex;; m! _/ [ q+ M% g) P
m_Item.nIndex = dest;
/ C) i- E) Q0 I* q: R0 N }$ `2 r- L* d$ Q( u# E+ s+ [' [
}
! I0 @( P2 S4 N9 \ //临时数据保存完毕,交换开始# w* h; ^4 R+ q& X
for (int i=0;i<MAX_INVENTORY;i++)5 f5 ~0 s5 M4 f! y8 {
{) S4 U0 d+ I. f7 l* _- o
if (dest == m_Item.nIndex) e" H, H7 I( R, h" O5 r
{
/ l9 j% z. j; [* W4 C5 U. T1 }4 @ //id相等 则 改变对应的dest和src
/ Z( U+ t5 z2 a8 N* ~2 t, m m_Item.nIndex = nTmp;
% m: Y+ v! k. p! x2 a. K }
9 Q8 \# [5 n$ X( m9 q! h; `$ a }
. @: @3 {) l E) T}
2 o1 b7 v: O& O0 J9 \; F};
1 q7 q& `# ]! [6 q( p- R. k2 l: ?-------------------------------------------------------------------------
1 l4 g$ [* S$ c1 p0 ~4 w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ K6 w o( M9 u. k9 f! K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 c. J' T3 t) K8 ^; K! M紧靠其上添加:* V6 x- b2 c& T) ]& _3 s0 e7 V
if( pWndBase == &m_wndMenu ) c" I- S( b1 x) K
{$ r, ?& N, k9 D4 v
switch( nID )5 T. c* T6 C/ l+ S
{: U2 G* U% ]7 `
case 2:
L3 [! I7 q& V; E9 ` {/ ?4 R( E5 }0 C& R& S U8 Z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& `% h* @' n+ k, u% H) T1 p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) r* T6 o/ [* {: Y( N
{ {- Z* `! G1 h% l+ r, {& H- f; Q3 p+ z
break;
, m }0 F9 v5 V8 y6 W# d$ m7 q }
! X* e. Y3 S* }6 W5 U- O, r for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 t' D( K" H4 y. {
{. `! h! z! [1 S, ]+ U1 n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 D" S4 `) H$ Q" u q% C if( !pItemElem )" ~$ y8 r, Y {7 k
continue;& f6 W) Z& L V" y5 ^
if(pItemElem->GetExtra() > 0)" j. K" {) c- C$ ^8 o3 }( y. y7 [
continue;
+ y4 z0 Z5 o- f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' z4 V1 j& y) L, F, t continue;. ]+ i( c; F- y# l: u# D
if( g_pPlayer->IsUsing( pItemElem ) ): Y/ E6 N( X1 |* ?. B) \' k
continue;& x8 w) J/ |9 d' D$ s5 c. l
if( pItemElem->IsUndestructable() == TRUE ): ^4 z, Y1 z% T% Z' K* I
{
* M3 ^7 P/ |! R% y) X# | g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. C% p$ _! L- Y
continue;
% F& q8 N7 {% @" n' _) w }
6 L4 v) s! }5 E- f' `3 W2 H% D) d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% C) y$ P; L! Y% r
}
1 _2 w9 u; H. d break;
0 q ^4 J0 k& l4 V4 W( S/ G- n }
7 W) }% O% i% _0 P/ s. @6 m5 b, s case 1:
1 Q. I6 H" o; q2 D {
# _8 E8 e2 @1 d" S* V( v, J) x6 | //整理背包
: J0 {' R. T- J% m/ Q2 P7 A2 ~- Q //////////////////////////////////////////////////////////////////////////
' L: q$ A! G' o, q# S5 O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 \1 T" Q! l- d! R" f
/////////////////////////////////////////////////////////////////////////// Y) p2 _) X) G o% w+ O
//////////////////////////////////////////////////////////////////////////" ^8 \" X) f! J, D1 Q2 R! B! T
CInventorySort* pInvSort = new CInventorySort;* \5 i& n3 U# }7 ]6 @
vector <sItem> vItem;! \; a9 U6 T, x
vItem.resize(MAX_INVENTORY);//初始化大小+ ~* q3 W: p' V* k# O2 |* m
//////////////////////////////////////////////////////////////////////////
$ h2 U, s( Y6 r& F2 e' \ //填充数据
. D7 j5 L: t! u: d8 y C for (int i=0;i<MAX_INVENTORY;i++)4 b m6 V- ?: Q5 R9 k6 i
{
, c9 F6 M1 F8 ~7 U- M/ L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* J$ E) n& W4 f3 U- d; `
if (!pItemElem)
& B8 A) Y5 |+ H {
7 I( O4 Z5 l) W vItem.dwKind2 = 0xffffffff;
x) n: I# [( l) A6 X vItem.dwItemId = 0xffffffff;! J8 N6 X6 x' X+ z9 o0 s
vItem.nIndex = i;. X. N+ p4 U+ z# e& }' t
}else {9 ~. b5 h4 f2 O) f4 T( m! [
ItemProp* pProp = pItemElem->GetProp();
$ C& H! A- v' h. x vItem.dwKind2 = pProp->dwItemKind2;
# Z3 ^' M; `( i" v4 ^! ~: M vItem.dwItemId = pItemElem->m_dwItemId;* h; g: w9 [, Y- N
vItem.nIndex = i;
$ ?& C, W% L" x }
/ m/ J! D8 d% V5 W$ } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. b1 s2 Q/ S U9 E }7 ~# g; N& H1 t& ?7 g% W- a' b- {, n
//////////////////////////////////////////////////////////////////////////
) v b. }' C+ B4 i3 V7 { sort(vItem.begin(),vItem.end());//排序7 _( c1 g. G2 K6 D
//////////////////////////////////////////////////////////////////////////
+ Z: w6 G' T3 c* e0 T# S: w; z //交换
" m/ d) |2 v, S for (size_t i=0;i<vItem.size();i++)
7 H0 ~* K# I$ X# \5 e4 ]$ K { i2 H" \+ g2 r) j* Q; S2 [, _
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' W& w! @0 U3 ?' ]: f6 n pInvSort->Add(vItem.nIndex);
4 I/ R+ x: H; R, N; A+ z }6 e7 d* ]' _3 X; J- Y: V
BYTE nDestPos = 0;' P6 M% ~, ~, \$ x
for (int i=0;i<MAX_INVENTORY;i++)
3 {- Z1 J0 |% e! O; ?# i {
$ O" ?, q" A( ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% r4 L( ?* q$ Z8 u: ^+ W if (pItemElem)
( a, j* n) E+ e+ k; W {
4 e% U3 [6 M1 N' d if (IsUsingItem(pItemElem))
/ D$ b6 J. q- w3 L9 B: R {9 }1 `5 T+ ]6 r, @& y/ P3 U
//这个位置无法放" d7 W3 `& _* l6 o, s; s4 i
nDestPos++;
- \( q. G( c4 D" x, U& ` }9 n1 H: s; D p- r' J4 ~, ]
}- t& v7 n& j4 b/ \/ J6 W
BYTE nSrc = pInvSort->GetItemSrc(i);
6 \! e( L. F/ I) J, j4 D pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. w6 ^! J( F9 o: ^0 d if (pItemElem)
! |& p+ t+ u- |3 C& y+ | {, I9 [2 j1 O4 \0 W \7 N6 G, N
if (IsUsingItem(pItemElem))) X& w& g5 \2 D3 _9 V
{+ ?$ u5 o! W" C* O- r# H2 K/ K6 E
//这个道具无法移动,跳过! @6 o2 {' x$ O8 r5 r
continue;& q' s" Q* I6 s4 q9 O& u
}" K R2 k/ S& E2 R% z% u
}else{
0 \) k4 z) a5 [ //空位置 不用动
" `9 V/ V* t G# H- m, E continue; d6 F; g8 k/ m! u8 P3 U: {
}5 ?0 H9 C* z4 _ _! Y. {' g: W
//////////////////////////////////////////////////////////////////////////
/ D: A( r P! y3 E4 r //开始移动 M8 |$ y4 j- _3 ` |
if (nSrc == nDestPos)0 t3 y; h* Y/ |- R2 m# }% a% C9 ~3 w
{
, o6 ?1 _6 \$ _/ `1 [6 H //原地不动
0 ]3 i4 q- |% d2 G# b$ R nDestPos++;2 b2 S6 [; Q3 F: b' Y/ h: U! I
continue;
- _2 K) a% H, ~7 q" N; V }! x9 B: X9 e' g* h
pInvSort->MoveItem(i,nDestPos);
u4 K) T" b- r% e( }- f g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 [/ R% D6 K7 t# a/ Z: u Sleep(5);% {+ s2 y0 D6 S- m4 W. |
//Error("移动 - %d->%d",nSrc,nDestPos);, N0 ~( }* T8 Z8 O% r
nDestPos++;
5 Z5 O( v7 i1 v4 X* Y' @3 u8 }% N; q! H }, T! q& k+ a5 n
//取第一个元素的信息5 X$ `6 D# }; n9 E0 D8 M5 m
/*# U, p9 o5 E3 \! Q; s9 z; _- |' O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 h7 n$ E! ?0 ?! q. Q' `
{
% A& w1 Z. L0 _/ G& \+ b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 e& Q" ?5 k2 Z6 L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, H- L1 o3 z. G4 _% k/ Q }& `# p+ |! a* T9 w) K- [, j
*/
6 y& i' J9 V% H9 L3 F4 ?6 x8 D1 h //////////////////////////////////////////////////////////////////////////
3 K {8 E% r0 C! t( @4 c) | break;7 h' S. R' ^- H* {- f V3 U
}3 l5 e6 x! ]; K' }7 V: V
} 1 Q k5 [1 ]6 J H5 R& R/ z
}9 m; m: _7 H6 P+ R) S& ]
m_wndMenu.SetVisible(FALSE);: L* A2 ]5 o) a
* Y2 \! { N7 b! J/ S! [- [$ M
--------------------------------------------------------------------------------------------------------
A5 |/ j: e2 O: _: J! B7 o' c) ]搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) ]& o' T: Z/ [. L1 P9 @( t
{
, C# U# {0 r! v) e+ R' @BaseMouseCursor();8 k3 k3 s# f. f9 C$ }) \/ l
}
, c: |6 q- B) T$ W% M2 e# c在其下添加:
% d0 I, O" F5 C! \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# K8 F9 F" V+ S1 y! @
{
% W6 E) n# j4 k4 Y& Jm_wndMenu.DeleteAllMenu();
9 J5 P0 H) v4 J( l* z2 ?8 S% em_wndMenu.CreateMenu(this);( b9 [5 x, j$ O {" c' O# W
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; w4 }/ ?1 J" i% F$ F) _: s+ G" O) a9 @3 j5 }0 r9 {$ j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) M. S5 h3 e2 n" L; R0 e) v
{9 h3 @0 V2 Y. e2 M& B3 a2 D9 I
//P以上级别才可以删除所有道具; p1 W. J' h* f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" ]5 H& N! q* v% C}
! L2 @0 u5 e7 r) d# T) v! q) vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 ?3 N( C; O' S" p9 |6 P$ pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, O: j f/ b1 g. E! d/ R
m_wndMenu.SetFocus();9 o2 R. P1 B6 ~7 ?1 l2 t5 L
}
3 P4 [* p0 H. c, a/ Z------------------------------------------------------------------------------------------------------------1 W8 m4 ]' ?0 E) M$ T
*************************3 \3 _2 W# c; \0 Y7 S/ ]
WndField.h文件$ z m! ]8 c+ b" j$ U( ^1 y
*************************/ m) f4 u ?: F7 J. x, C
搜索:BOOL m_bReport;
6 J$ h: N) f5 b! d其后添加:6 q2 _, {! c6 b5 ]7 g" D
CWndMenu m_wndMenu;
1 u: H8 J( |& c4 M' a搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# b4 T* X6 L! `, l% @其后添加:
+ p5 f3 M5 F2 I0 x2 evirtual void OnRButtonUp(UINT nFlags, CPoint point);: T- T+ L0 F! p* G4 u4 b& s9 H
0 ~' T) a8 \) g0 D" p& F# G2 W8 v
: Z6 g9 p, `! K- q, T9 ~
|
|