|
|
源文件中_Interface文件夹下WndField.cpp文件$ u3 P6 ^2 f# ~+ |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! S2 \" d) G* B
( i0 D% Z4 @% I$ R4 L6 [* T! Gstruct sItem
! h9 O! H& i- C# |' Z$ q( r: B{3 y e( k! m) _+ Z4 ?
DWORD dwId;
6 c- S9 l8 l+ P. V- i9 ?DWORD dwKind2;
/ X2 p4 j' |9 p! t. ~* O3 p( LDWORD dwItemId;
1 k+ c" l0 G4 U6 @* O2 s$ kBYTE nIndex;9 u7 F1 G& @; P1 j
sItem(){
- E% Z6 J9 I+ q2 L. I* w7 p dwId = dwKind2 = dwItemId = nIndex = 0;1 ?( f5 J+ ]- }; T
}% u3 _! Y" p3 N9 n$ G7 a2 c
bool operator < (const sItem p2)
& V! c" R( o" B/ m7 Y{# z! `* H# K. f7 i4 E
if (dwKind2 == p2.dwKind2)
2 m! f# o. x% b* v {8 g2 Z. I3 ?# Q2 l ^; Y
return dwItemId < p2.dwItemId;
$ a' O7 J, i0 P. M+ J4 l- l; ]) | }else{8 Q$ Y7 m2 v4 s9 k1 g! X Y+ |
return dwKind2 < p2.dwKind2;
4 B' G1 n% \/ N# ] }) I) L9 f% l" w/ a6 R6 ? H. i
}# D5 i9 w8 t* e; |- _
};
; B4 s- J% z- s) W0 @class CInventorySort
4 |! Z1 f1 T; y% E/ G) S Q ?8 r{' ^* b. b: ~ J; G# ]" y
public:
: X) G& }: U# }, N) c' r5 SCInventorySort()
. {8 n* U0 m3 Q; d. d1 `# ]{7 {) f( k- }* ^8 l7 o+ J, V
m_dwPos = 0;# G9 e2 s' n& e a1 V
}
3 A+ A% g" _2 S. F~CInventorySort(){}( C; K( a& m9 g5 j* H
private:& ]! M, }: y4 ?' ?; L* L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* m/ r) }. @% S9 K. e" ~
DWORD m_dwPos;; ^; |! m5 P" C8 u! }0 u
public:1 ^$ s; ^0 e ^/ h+ G$ M. |
void Add(BYTE nIndex)
$ Q% K2 e$ X) g- A* I1 W{& S( y7 G: R: d9 c
if (m_dwPos >= MAX_INVENTORY)$ n& `1 Z! @) x+ C
{$ F8 t- n( \2 @1 m
return;. ]% C+ n% a7 L3 I' q3 e
}
; @) \8 A6 x1 W5 J* Q$ J) ]" H p m_Item[m_dwPos].nIndex = nIndex;
0 T1 {% d) y+ c$ K+ f3 f# E0 Q3 C) v m_Item[m_dwPos].dwId = m_dwPos;, u' O) u1 u' J" f4 L) P4 \% j( s
m_dwPos++;) G/ l/ Y: L6 z. V! g
}
2 ^5 X' \3 \( W* ~7 `BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 x+ M# [9 K; d2 b7 s( Q6 y# k" G
{
5 F) L: U: P9 w for (int i=0;i<MAX_INVENTORY;i++)- I0 q; k) ~3 Y8 J- r0 a( I* a
{0 i, c+ t1 b9 S7 ]0 W
if (m_Item.dwId == dwId), T2 f* e% w, H/ G2 W
{/ B8 I8 w8 M& [/ i/ I9 |; D
return m_Item.nIndex;
3 b! Z+ ]3 U; o" x7 M& e }
" m( W; L2 {8 B }
[& Q3 V, J) b4 U' y1 _ return 255;
9 q( S0 S6 b9 K! Q5 w}
7 V4 t( p$ j3 q4 D. T9 J$ {$ Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 N: W4 g5 b' D* m{8 K" R4 G; H1 ]! P
BYTE nTmp = 0;4 f; P5 O6 D+ z
bool bDest = false,bSrc = false;
" q0 d {( M+ M* |9 k) X for (int i=0;i<MAX_INVENTORY;i++)7 ^7 D( z/ Z1 q1 v( E3 X& e) y! `
{! J% _% F, y1 i$ Q7 Q( l) O! s0 r' D
if (dwSrcId == m_Item.dwId); P2 _- L# q9 b5 @! c: ]
{. B1 i; V" M5 I. L5 }
//id相等 则 改变对应的dest和src
# g5 P+ E( u# `2 g) V! r9 Y nTmp = m_Item.nIndex;
( e, Y8 {& A: C, v0 E# N1 T m_Item.nIndex = dest;
; ] x- h+ U# }& w# y! F6 q }) }& {& j: g4 k; q. f# x
}' W9 C8 V; c( X' A3 P
//临时数据保存完毕,交换开始
; h9 ? D% S& X2 g' w7 x for (int i=0;i<MAX_INVENTORY;i++)
8 p- |% M" u; x7 o {
. W! O* m8 Q5 f" _ if (dest == m_Item.nIndex)* i" F: u" B0 I5 K: W
{6 R+ p3 k) B" B" f3 G4 }; A. ~
//id相等 则 改变对应的dest和src. ^% @; j1 ^, ?0 v
m_Item.nIndex = nTmp;
6 n. X2 n R- a }
1 I3 `8 t; S# y1 n9 ]& [ }* J9 q& i3 ?+ H: H- A; @& v4 k! W
}
+ ^/ i6 m% b. W( O2 N. w2 e) p" {};1 u+ x& |) Z4 ~9 k" f2 I
-------------------------------------------------------------------------, \8 T6 s' u" G( @8 y4 W5 Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 V( a: |/ W0 a; B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 R' ?) z4 j% |* f紧靠其上添加:% Q( L& K1 L }' M0 P
if( pWndBase == &m_wndMenu )
$ t" V2 H, I3 v0 t# q{
) ~- l+ n s8 {5 t# i switch( nID ). p% R3 C+ ?# {7 x6 K2 |2 j% w C, \
{8 X& L; R1 J9 H4 \4 ~ E
case 2:
8 y+ w* L% ]9 {/ N+ C4 B {
* s! m* O* [3 f: y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! H; ?0 b. M* ?; m) O$ [: N if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) U3 f8 L3 Y- r [# e
{
+ U9 r V& @/ w& w( f break;
4 p6 M# x+ o5 O. a0 ]! S( \ }$ r8 [5 M. G; N3 T( v( ]; ?# }3 R q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
B, {2 F3 |3 F* U {
+ u# g5 J% d2 u/ K3 ?& K* | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ r0 {7 F7 X1 Y0 }) I
if( !pItemElem ): d1 d( W$ H) J+ Y! i
continue;
' P& b. f7 s$ i if(pItemElem->GetExtra() > 0)
1 w1 h! E2 b; S continue;
% i& h& b2 n- ~& D- x3 U( r if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' J( x) Z1 V j: V9 S1 I1 Q+ ]
continue;
3 {; a9 R- o. k. t. K5 p( z) { if( g_pPlayer->IsUsing( pItemElem ) )
8 W5 G; A! S& t* m) ^- m continue;: F3 b) a2 j+ Z. e
if( pItemElem->IsUndestructable() == TRUE )
% M) \& ^! y7 e9 ] {
" j( B* A" |) P# K& h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ _; B8 [6 u8 y4 y+ P
continue; n$ H: d* r4 q) W
}
, Q8 c8 N% W& A2 i. { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 ^$ n0 \! j! J. X1 ] }5 t0 P ^- i4 q: ~. Y; J5 b. A
break;
) ^! |# `7 K9 w7 H } [8 _2 P" ^3 R: M
case 1:
6 U# H4 d: X) p$ V/ ? {
& x9 e6 V- w) U //整理背包: Q2 b: [" k, [) D
//////////////////////////////////////////////////////////////////////////4 B1 S5 b/ G8 o' K2 h3 n
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 ^9 O) k1 J0 @, g' o+ C3 q
//////////////////////////////////////////////////////////////////////////
4 b t/ L* Q: a //////////////////////////////////////////////////////////////////////////
+ z! _& Q) k' U; S CInventorySort* pInvSort = new CInventorySort;
8 j) y* v' I2 E0 Q& j) I" ]/ ^ vector <sItem> vItem;
! e& c4 E0 ]5 }( n( b vItem.resize(MAX_INVENTORY);//初始化大小
6 N ]8 [# J2 Y5 F9 N `* ?7 { //////////////////////////////////////////////////////////////////////////: I' v/ q; r6 S+ N2 W. i
//填充数据
5 j( \3 Q5 j* e9 o0 n. n for (int i=0;i<MAX_INVENTORY;i++)
9 n1 ]# ~6 Y+ C {
d# C, B; B1 H- N' f* P! W- O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
k9 n) U( Q( b+ S! G4 ?6 s if (!pItemElem)
# }9 T! l$ L) x' j' p1 c6 { {
8 L8 q* w% t9 i/ @2 U% k& E vItem.dwKind2 = 0xffffffff;
% }0 M4 C2 }- \3 E1 S vItem.dwItemId = 0xffffffff;4 i! P9 f& \1 u; }! h
vItem.nIndex = i;
# X" d Y, G Y }else {
: e, e8 f# r8 o3 `, F: l! Z ItemProp* pProp = pItemElem->GetProp();
) ]5 p2 U) P9 r4 T# \' A. N( M vItem.dwKind2 = pProp->dwItemKind2;4 A) l1 @9 ?* n: M5 h8 I3 U7 {8 A7 W% g
vItem.dwItemId = pItemElem->m_dwItemId;
8 g) X2 U; j3 J: X: b+ T1 x vItem.nIndex = i;
# D5 S4 Q1 Q* G+ P. R( M8 s }
: q# |' k* m4 G8 a //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" A, U+ f, G p: F
}
- Q- s, q! f9 M* d: l6 E+ ^* ^ //////////////////////////////////////////////////////////////////////////
: l5 ^5 B$ D2 F* p sort(vItem.begin(),vItem.end());//排序
# y$ w7 }5 j, q' t) {; K- p: I //////////////////////////////////////////////////////////////////////////
5 Y+ s& C6 Q/ P7 R" d/ J( p //交换6 c, m$ O, m" Z
for (size_t i=0;i<vItem.size();i++)
9 r# _1 [4 m& c3 b4 |% Z+ P {
- d5 y* t# }$ p9 M! r$ c+ f //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: n5 [& T3 ]9 z8 @; E7 H% B- f+ d2 E
pInvSort->Add(vItem.nIndex);' D, ?0 H8 P5 u5 u) O, I" `
}
' q3 F: ^+ y c1 K BYTE nDestPos = 0;1 ~# c0 y) _* }$ ^" |
for (int i=0;i<MAX_INVENTORY;i++)0 ^2 V2 n$ g, P' E( q
{
. J8 k! t+ i- v( U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: D! o8 m: z0 Z% x if (pItemElem)) q: l# L* ^. j, v: I, P# m! ]
{
! g+ D! N& B" c if (IsUsingItem(pItemElem))
2 \% d0 i& F' e2 E# g9 o {! J5 q/ E# v- X, G( s6 R# J
//这个位置无法放
( p _8 Z5 u! Q nDestPos++;
5 p9 ]( H' A# r9 m K* R& D }
, |" |2 y, A; h3 ^3 x) S @$ y }
( R3 }4 M5 O [: I9 s BYTE nSrc = pInvSort->GetItemSrc(i);, F0 j8 p4 {% b1 |* I R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 {8 m8 }: u1 p
if (pItemElem)3 X0 ^7 x, q2 K3 J
{
# C: c' V' ~7 O* J$ d, [, j' N5 f if (IsUsingItem(pItemElem))
# i, \, M+ w# x; \6 g' K0 a3 g# a {
/ B* T& n& z8 Z3 u7 R. T+ ?& o- ^ //这个道具无法移动,跳过
; ~/ e; u0 _# u% J4 g continue;" @* [8 H9 c: H' [6 n2 k9 Y* K
}
& Q3 P& Y9 h. f }else{
0 g- _; z! q7 ?# X0 `. S( r h //空位置 不用动
* E+ `# E8 t, G+ o/ l3 s continue;
/ t8 m0 m. u" Z( B( J3 c6 h8 ~! |; A }( }* P9 w3 I+ _ J+ Z5 j; \
//////////////////////////////////////////////////////////////////////////
! J1 O2 h' M& V0 a3 c; i) N! C //开始移动
: e9 ?+ _7 l1 ]% q& J& g$ G' J if (nSrc == nDestPos)" [: m1 T2 F6 a" d
{: o6 O$ F' Z+ {
//原地不动5 o$ m$ e8 r$ i6 r a3 Q4 ?0 K8 e
nDestPos++;" T; {9 R; p2 a
continue;: a0 h1 m! K4 F" R; j9 G$ S- r
}7 u9 W2 S* \+ J1 ^$ @9 ]
pInvSort->MoveItem(i,nDestPos);( C$ k/ |2 F7 J/ l: f2 A1 a
g_DPlay.SendMoveItem(0,nSrc,nDestPos);) N$ b# ^1 ]: B+ `8 S" ?* r
Sleep(5);( O) a+ Y" e' e* F- v. y3 ~* U
//Error("移动 - %d->%d",nSrc,nDestPos);( n: B/ Q, R1 M/ g1 c3 M
nDestPos++;# i) _- M: I3 ~/ H: `
}2 ]- a2 \' K2 h/ L% J
//取第一个元素的信息
4 V+ j V4 h: E8 \3 [# d /*; Y7 ]' m. M _2 ?9 |" B; j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ k# j$ \6 [( m/ \" k0 H7 q
{
* @3 j2 e8 q4 u7 n: d7 | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ @- h4 s+ G" e; K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 K( ^% g9 U6 j: U( m }) I/ r) w9 ~3 _4 ?
*/* Q4 Q! e( }1 r) |3 ]
//////////////////////////////////////////////////////////////////////////
6 `3 Z/ N6 _+ Q3 S- j8 g break;# p- N; \, n" E: G6 u
}
- O1 |* ]: V, ^+ P, \ }
/ h. w6 ~3 F S& _( v- i6 N}4 p; [; Q7 O# n( s, I" _
m_wndMenu.SetVisible(FALSE);
& i2 {( R5 d4 o6 p1 o& q$ k5 q( X2 D9 j& p3 Y/ _: C. s* F7 V% v
--------------------------------------------------------------------------------------------------------
' y8 G$ e. F+ Q7 w5 y, i. {3 G+ ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ m) @( a W: r5 c* K
{
; v$ A( Q7 _9 n5 ^# R/ e. EBaseMouseCursor();8 X2 J" |. e* J- j: C6 o
}
4 E9 T) h; Y' W/ \在其下添加:* J/ p, P5 X5 Z0 B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
}) j, w6 w: g{
) N2 p$ S! b! C8 X/ z/ k6 Em_wndMenu.DeleteAllMenu();5 {# a2 [" e7 S& t& f$ Q
m_wndMenu.CreateMenu(this);% B6 a+ C% \3 A7 X; V$ y% v0 N& Z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); Z! M1 i! X" }; ~. i
. R1 _9 v5 v5 _! A9 q, ~* m/ p
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 @& P3 o" T2 R' m; a& g/ o
{
* {; G9 T0 s6 S/ G //P以上级别才可以删除所有道具# z S, [& n" b# W3 a( w$ W" B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- x8 U s' N% n6 v
}
7 C5 r4 y. c U1 q. J. Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- Q1 G; \4 q1 u* p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 Z+ r1 X H3 v& ]) d! _m_wndMenu.SetFocus();* B+ n6 }1 X2 f- B$ L7 O& u
} h% P( p2 U$ Y4 F2 X
------------------------------------------------------------------------------------------------------------# ^; x1 r& w2 L: |. v3 f6 q% z6 g
*************************
! y* s8 X8 _8 j0 ?4 p# d: a9 I: OWndField.h文件
; R) [& o7 R' Y% h0 N1 D*************************0 I2 B: i' s U! L+ Y2 h0 a
搜索:BOOL m_bReport;
+ L& x2 a4 p* Y. e0 E其后添加:
9 N" e1 ~8 d6 y( f! bCWndMenu m_wndMenu;
/ O6 H' @% |9 n6 g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ b: |) n+ s- z
其后添加:
" P: @; d/ e: Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);) K* J( z% J" C/ p
% ~/ p% h9 ?: Y* I. k, h( O$ |+ z6 c0 d* E7 H
|
|