|
源文件中_Interface文件夹下WndField.cpp文件. N% G7 L5 u$ M% j; B% y4 ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; B( Z3 u, [4 r4 Y$ h1 N/ Z# J9 e. X( t8 r
struct sItem: i% I; G* f; j% Q# `3 L8 C* {
{- P: v! X& M5 I+ Z0 U4 m
DWORD dwId;- F: B* b7 U. [7 b; A! E* v1 y
DWORD dwKind2;1 X2 Q) a1 [2 {
DWORD dwItemId;; J- t, C, J/ u
BYTE nIndex;
* w% t8 y8 k# D' u& A9 V$ D# wsItem(){. p5 b) ~4 [7 z& M
dwId = dwKind2 = dwItemId = nIndex = 0;
7 x- l+ c* U% z/ \" v7 j' |}
6 ^5 S/ \6 u t b. I1 Vbool operator < (const sItem p2)' _7 a2 b) q+ x; O. q
{
4 Q; ] w- E% g, A. ~ if (dwKind2 == p2.dwKind2)
1 R# p& L; z& O( f0 W. y {+ \- R# Q, s) \) r
return dwItemId < p2.dwItemId;2 z) x" {+ F3 N+ s$ ?! ]# i5 ~
}else{8 i: I8 i: l7 [/ n! {" o
return dwKind2 < p2.dwKind2;
; @2 b+ S! b0 M3 h$ J* x( n }
+ |$ i) H+ u" }& R M6 v9 a}* C% ^5 u' f9 |) h: n) U+ |% S
};
* s6 `0 Z+ j3 p' K5 L4 S5 Hclass CInventorySort" O# b. \& U* s$ i5 F
{/ B4 O* j+ K0 [* `
public:2 a4 ~) N0 f6 B9 {/ A: `
CInventorySort()
+ O" D/ G, l+ @{
4 u+ {* s1 B" v8 g m_dwPos = 0;& s' Z. L9 r: I* q
}1 F6 _: I3 f) f
~CInventorySort(){}! q# c/ ]) ]: g, |: |0 `
private:
, Y1 X" x! e0 i* \4 b- \, b: y+ vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! K% X8 C$ h: B- v" X6 tDWORD m_dwPos;
* m2 q* w8 Y& O6 t# kpublic:+ V( r8 v( }+ n- y# O
void Add(BYTE nIndex)6 L1 n' }7 T: c. b# W: s0 F; }
{/ i0 _( {) Z0 N5 l
if (m_dwPos >= MAX_INVENTORY)2 y4 w4 s; y- T7 ^ D
{
5 @9 ?8 @2 X0 K1 X) r# z return;: ]4 L& z7 R4 x4 `
}
* W5 o. ^5 j: e( V, v; k/ f m_Item[m_dwPos].nIndex = nIndex;
9 }; W* V/ o* p( Q% G m_Item[m_dwPos].dwId = m_dwPos;/ q: s: m6 S6 ?, N4 J: I9 Z$ a& H* _4 R
m_dwPos++;
; C1 U$ S0 P1 p2 j}
* m7 Q$ d2 [4 Y9 n( fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 B4 C- B# K6 H{/ ]7 R7 m6 t, f
for (int i=0;i<MAX_INVENTORY;i++)
' m6 L3 f( `0 A2 u" d+ v" [ m4 i9 n0 H {
( z; M* d$ |2 a6 ]* V+ }% c ] if (m_Item.dwId == dwId)
- B$ l5 O1 ?7 ?& F% T8 I {
; M. }2 z8 _8 P( P return m_Item.nIndex;5 E/ g( E: A6 q% A, ~
}
( E" f! i6 C# H }
. Q0 g8 ~6 o: M( _" U2 K7 [$ _ return 255;( o9 k1 `8 C: _) y/ |. C5 n
}
5 {; z# N Q( t, t( `( {& W+ I8 `( wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 e; k: @7 A+ r- F4 g+ {' e{
2 l8 M4 T' X) i3 ?1 ^ BYTE nTmp = 0;
& c: F1 ~: C* Z0 _. Y, l bool bDest = false,bSrc = false;/ b) s% D0 v* N* O: H) o3 B: N
for (int i=0;i<MAX_INVENTORY;i++)
7 x4 L- f% P8 z {" B/ `. R6 j* H$ { n' t
if (dwSrcId == m_Item.dwId)
+ K# C3 Y6 F! P6 m+ c# r {7 C6 W* i5 G+ P! N# D
//id相等 则 改变对应的dest和src
1 F, l" c3 k# C- g5 c0 A2 ~: G$ s nTmp = m_Item.nIndex;; A, [$ R5 r# O' r7 d$ c
m_Item.nIndex = dest;
V* G- m8 D! f) H+ ]2 E }
8 M( j: O7 e3 b. N( j0 ]- N }
0 w/ R, ]4 m8 X: E+ g; u //临时数据保存完毕,交换开始9 s: ^2 f* u# G8 n, m* {
for (int i=0;i<MAX_INVENTORY;i++)
# R2 \6 r8 M) O) U, O! b- }4 O {
; e+ O$ @. F7 \1 u/ V4 e if (dest == m_Item.nIndex)
5 g7 G- A5 a3 R! c2 w {4 a# ^9 b0 o" u& L
//id相等 则 改变对应的dest和src" a e( P$ ^: x# q
m_Item.nIndex = nTmp;2 H0 l- [. U% W8 T& p# {4 ^3 V
}0 R% X3 L7 V6 r# {/ M
}% ~% V K6 x5 S9 q2 I5 P7 S2 q3 W/ \
}
) u% M1 x. n5 m5 r};; ~8 a$ U+ M6 U( ]
-------------------------------------------------------------------------; U& S0 _7 t; A
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ S: g, j2 V/ q2 [! G4 D0 m搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 z; P3 B L5 G9 {" E9 Z% S! a) p紧靠其上添加:5 `1 N, z9 r* d+ v/ h. k
if( pWndBase == &m_wndMenu )
2 h; \$ g6 ]2 r& x0 M$ s0 \. r- t{
3 V7 M3 X: {; n$ u# S switch( nID )+ W( o7 _" D2 p; F n( H' Y
{+ \ K: d9 p/ |) R/ B
case 2:9 N' t( M. O/ g
{
) D6 ^* ^( N" h/ A: |& ~ K //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( Z5 r2 X& c' r1 U* H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& F8 t- V5 ?2 [/ B$ q {3 k, I1 x/ t! R. M; ~( z
break;1 j: S0 t* y- q/ o
}
3 G6 C4 K( S5 a8 G5 S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' p6 g+ v: u/ W' Q) p
{
c7 e/ Z* Q- p6 q2 y$ q: Q1 g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 u& t1 w O% r8 N3 M R% L0 X/ b9 b if( !pItemElem ); C. ` M) ]/ S/ G2 ~3 ]( b" r' X
continue;+ Y) m9 j' J# g( a
if(pItemElem->GetExtra() > 0)1 E; Y- H& b _7 t
continue;; K4 c' R4 ?4 ^2 K8 U' `% o/ E
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + B, {( n; q+ r$ p/ Z5 D! R w, v
continue;7 d$ j' e- e, H7 g- z
if( g_pPlayer->IsUsing( pItemElem ) )3 X w/ \/ u6 Z9 R
continue;) N' i2 x0 c1 G0 O
if( pItemElem->IsUndestructable() == TRUE )# _! N" j, a2 h3 g% @' \ l+ W
{" ]2 v+ T6 g( ^0 G S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% j9 {6 n ?0 m3 W: ]
continue;
! g! a Z5 i7 M }
3 N8 R7 G1 z' l* J7 G g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- @( {) {( F8 x4 v( @1 \ }
e' z2 S7 q3 l( s4 |0 E8 O break;
: y) g2 O# n" T0 K, p }
/ \' u0 [) ]; U case 1:
7 K4 Q c0 F) ]# E" M5 L# a8 M {4 s9 E, a/ T1 h% m$ F
//整理背包. B2 Y6 b% @- ~4 K' W' p
//////////////////////////////////////////////////////////////////////////5 J2 |* T, }3 x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! x( z6 Z! M# U( a1 i0 R
//////////////////////////////////////////////////////////////////////////6 k7 ~) c* b) u, ~% X* N
//////////////////////////////////////////////////////////////////////////
* u* R# \; w, U2 f( u CInventorySort* pInvSort = new CInventorySort;
9 T+ l: M" u8 @0 Q5 p vector <sItem> vItem;
1 t& {0 P3 x/ r6 l vItem.resize(MAX_INVENTORY);//初始化大小4 K2 `* R" A/ q; N+ n5 U
//////////////////////////////////////////////////////////////////////////
' B. H$ j9 j( Q8 G- P$ B //填充数据
; R' `1 L% i: o' A+ ? for (int i=0;i<MAX_INVENTORY;i++)1 w" H: s2 y1 f4 _$ i$ j$ V" Z$ s0 j
{
, M6 O$ d7 ^; ^' T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 k9 q. h, j8 q. Z if (!pItemElem)
; S9 @/ ?' g8 X" K' y {+ V3 }, v8 u6 [- f Y4 p o9 q
vItem.dwKind2 = 0xffffffff;
% r( I( y/ W' X* P vItem.dwItemId = 0xffffffff;+ Q& p& L v G1 i! j5 g3 {
vItem.nIndex = i;% s1 P- J% t# B3 z
}else {
; d* ~, P/ W5 H; E ItemProp* pProp = pItemElem->GetProp();2 a. V- r% M- I+ X
vItem.dwKind2 = pProp->dwItemKind2;; |1 W( m( i; U! N: W
vItem.dwItemId = pItemElem->m_dwItemId;
. D. J$ a+ {/ M ?. o. @ vItem.nIndex = i;
8 x3 M2 S9 t+ t& D' E" Q v }
+ T$ F3 M) }) h7 [# h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& t& X& @0 L/ e
}! z8 s, J5 a" K J$ q
//////////////////////////////////////////////////////////////////////////
2 o( u. B/ J" y# M* ~+ j sort(vItem.begin(),vItem.end());//排序6 ]6 U" I- w1 ^# n5 f, Q
//////////////////////////////////////////////////////////////////////////9 b! P w) }- X9 U
//交换/ g2 @5 ^0 z* v. m6 Q H
for (size_t i=0;i<vItem.size();i++)
/ `) O% u+ _3 X# J {6 n# d5 r+ S& j7 f: }+ S
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( n* u% t, A6 Y* V4 s# m8 D
pInvSort->Add(vItem.nIndex);
1 n- _/ r! M% r }
6 L+ N9 v- d' j% s7 y. I BYTE nDestPos = 0;+ d% V- C T2 E/ y% q
for (int i=0;i<MAX_INVENTORY;i++)
2 a. h/ z; ^3 a2 ]) N- G {
4 Y' Q+ z& h4 _& u( q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" |& [1 ^ p0 n& d+ s if (pItemElem)9 I* g& l& B- t7 ^
{
! a( [9 d7 [7 P3 o8 K- R' A' s if (IsUsingItem(pItemElem))
9 b7 X$ o* l1 F0 {( R9 O4 {& |0 f {
5 g% f$ M' p2 i' y J1 ]0 ^ //这个位置无法放9 ^7 X. E; Z7 f# y
nDestPos++;: C0 @7 B S2 {' O( P# c$ f
}% c6 W, [4 B+ c8 }1 [& }
}
6 R" Q$ ~2 l! K J BYTE nSrc = pInvSort->GetItemSrc(i);0 r, ~" P0 u' u( m: O, u
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, |' A5 l& f% }( e1 ]
if (pItemElem)
* [( }. z/ P2 }& w. k: a {7 c! c: w2 u6 o% g/ i" E
if (IsUsingItem(pItemElem))
/ a6 q( R8 K( s& ^+ q: q {
5 n! z2 F# z+ D7 |7 \* h //这个道具无法移动,跳过
. u B- W. ~% B3 o5 s; h% D continue;
R/ l" T1 O6 {: b4 ? V L }
& B3 a0 `3 G& L" S }else{! _1 Z2 P8 t7 z1 i
//空位置 不用动% w( ?: C* r K% w' t
continue; @( H$ K/ [& U7 W/ P2 f5 }
}' r" u" V# k7 k; Q. h( N" T' _
//////////////////////////////////////////////////////////////////////////
. r. i. N+ m( ]% S0 h //开始移动
, W# H: h9 D* ]8 N% p" ~, X- v& V7 v if (nSrc == nDestPos)
% W1 e9 m* ~; \/ R( ]! u* d {: R6 J3 J/ {' r- Z
//原地不动
! L$ i7 T+ f1 Z5 o; H8 `7 l nDestPos++;2 ]9 X x. e/ ]/ w( e
continue;
. I, p$ n# [2 v }. m( n5 I3 M2 D0 q) z2 ^6 z
pInvSort->MoveItem(i,nDestPos);
% m: z5 L: p" a! `5 U2 t g_DPlay.SendMoveItem(0,nSrc,nDestPos);) ~# G( r4 J* K
Sleep(5);9 Q, `% q% i$ E6 u! N( `
//Error("移动 - %d->%d",nSrc,nDestPos);: k" p$ b4 \6 H+ w8 e! m; i
nDestPos++;: g* }1 V% w; Z! a- I: T
}5 `+ R) s+ }3 {% l: p1 b; D* r! |
//取第一个元素的信息
- W+ U" |5 i5 J' D, X' D3 S /*
8 l+ i5 k* ^8 @1 Q if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% }. v+ ?, H. a0 t. U# D& r! g {1 Y9 Y* U. K8 k9 Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: n- c' n( R# K: }; L! w. w" Q. g
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! F, {4 B4 t, x# c }
0 { p) I1 m- L8 x1 z/ i0 E */! ]& {( V! m: m& Z
//////////////////////////////////////////////////////////////////////////
: l# u/ \* h/ i& Y1 }0 D# w4 l8 O break;
4 r( B% q& B6 A2 W/ s* ]( V }3 I$ G$ A+ C7 i5 N
} . ?4 N) C( b. _8 z! Z
}
9 e8 x- f6 j! v" I5 h9 ?0 Wm_wndMenu.SetVisible(FALSE);
# Z, U: l+ T+ C9 F r) F4 W8 W9 p% d) z9 u9 _+ w
--------------------------------------------------------------------------------------------------------
! J9 l* R- w" o# g3 f7 R' x$ s搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 }: B- [, u/ P6 F
{
% {- ?& c- R7 q' q; t8 }5 KBaseMouseCursor();
& i/ | a+ C# f; _5 Y}# u V8 L# p3 a: s- v3 f6 W: |
在其下添加:# E+ \- V# \: f
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% G7 H- b6 G1 u6 @' F; l{" i/ K% Q5 e' j* I1 v
m_wndMenu.DeleteAllMenu(); U* T9 L( l9 @- k. T+ v
m_wndMenu.CreateMenu(this);& o8 p- x( p( u6 o& \5 I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) z9 M2 J9 k6 W( e/ K! a% K* a; q9 t+ H
( y% R$ ?+ ]9 h4 N4 V# [6 F
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 u2 T1 i8 y6 a2 m) K{
) }0 Y: ~ C- e8 W1 L- Z, _/ O //P以上级别才可以删除所有道具) c9 m" |1 {/ e4 F9 I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 l9 K6 j, K1 P# ~% w
}
4 g$ [! e) Y6 |' ~, lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 ?; I5 ]) h9 n( l4 l4 U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ C" f5 d+ B; Em_wndMenu.SetFocus();
. n* ]5 d' u# M4 d* B, f6 s0 X' P}7 N# o P- V( |
------------------------------------------------------------------------------------------------------------
% S _: B( {" p*************************
+ K0 Q4 f" }& t( i7 w: z# eWndField.h文件( C0 v: q( n5 W; L
*************************
. O. Q8 W/ E, W$ K# v2 I7 F/ }搜索:BOOL m_bReport;9 R/ t0 M0 X; \: Z3 |1 \& }
其后添加:) M$ |8 L0 \' E
CWndMenu m_wndMenu;% D, i1 B( C2 ?# P: V/ K* R% F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. H$ r- M6 \3 M* B; Y其后添加:
/ x, p) Q6 E9 S5 P% Y6 }+ r! O- ?virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 J( u4 h9 d. V* E9 u" }3 u- `8 a' }) d% b
4 N2 L" A/ E0 d) Q* T; b
|
|