|
|
源文件中_Interface文件夹下WndField.cpp文件
' U& |5 E' J( y9 ~4 R搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 X7 b8 D. O5 J3 N2 m+ G
; l1 X- o1 U! i5 E0 O2 M1 y. Bstruct sItem
/ F# b3 w. y( M0 Y1 O4 O* w* G1 G{$ Y4 j9 {# D5 h6 N1 M
DWORD dwId;/ T# X3 Q- `7 e6 N
DWORD dwKind2;
# B2 p7 O; m& oDWORD dwItemId;
6 x6 A. r0 u% j0 K0 h" f1 {BYTE nIndex;* f' N8 Q8 n, |- h; ?& J. Y
sItem(){
4 j$ p k" R! y" C. I w) t dwId = dwKind2 = dwItemId = nIndex = 0;* `. D7 w* y. i1 Y6 n
}
N3 ~0 N+ [. b$ x0 s2 ibool operator < (const sItem p2)
! U( j% {; s7 [) T{" h0 }/ C3 S! f2 U# x' |' O# y! x9 F
if (dwKind2 == p2.dwKind2) @: o9 l4 d& E9 X- M; X+ @* I
{! C5 L; ^, q) n2 T$ ?/ A
return dwItemId < p2.dwItemId;2 d% e8 Q6 i3 G! ]9 W9 x
}else{9 Z: X9 h2 D5 u J9 }+ y
return dwKind2 < p2.dwKind2;
9 p' S( y& h; V* z) P% ] }* g4 D' S2 a) u" X
}
) a! z' _4 F; [! c- U' p0 t6 ?" f};, p& @* P- R d/ a/ B% S2 P {3 x
class CInventorySort* D, j5 ?7 G; J* J/ P- ^
{
+ x0 a2 j0 d: a9 {) Hpublic:
6 u s% L% O" Q& ~( A$ GCInventorySort()5 M# y6 m6 {, \9 `/ G! U0 |
{8 W: p8 f/ q# B) Q! e; U" j
m_dwPos = 0;
1 Q6 r2 J( b e, P. J4 u3 Y}
/ T, K# D& U1 G- t~CInventorySort(){}/ T2 Q# A# m9 Z9 J t* F4 i
private:' s, o/ m6 A: h3 r8 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% f$ W/ {0 I5 T; ^& ODWORD m_dwPos;
$ K2 s8 |/ Q/ {. Y( }0 ypublic:
2 G) X1 Y3 S* c! [, ivoid Add(BYTE nIndex)
- K+ B5 F" B' D# [{
4 `% s& Z7 A3 V9 P. [( k if (m_dwPos >= MAX_INVENTORY)
9 N+ _: s: L: |; `' n {
, V( Z& `" ]" p) I* i& k/ t return;
8 [$ l0 I2 ^& H! n5 ~7 x }% L) c, ^; f( V" q. W( [
m_Item[m_dwPos].nIndex = nIndex;
5 W$ X8 G9 N2 T6 F- a m_Item[m_dwPos].dwId = m_dwPos;
* F; P' ?+ y) O8 n! p m_dwPos++;
9 G* b( M) r6 e3 P/ a& l0 i0 ~}! p2 ?4 V+ W0 ^, u% n ?$ ]7 D. m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" T/ { L/ ?* e) ?2 d8 z8 _2 v{
" f9 u4 ~6 h ~" u" P for (int i=0;i<MAX_INVENTORY;i++)
5 L R( X- V& K7 W' C: g, n8 _! Z {" y; l: c( p2 x7 h. q" J: P
if (m_Item.dwId == dwId)4 y. v; M% Q: H& _" b" ^& z+ l$ q
{
/ C; U8 l6 ~. V8 p return m_Item.nIndex;- m! B5 m# N! U4 n6 S4 I; M
}
8 h$ H! \# B3 c$ p }
+ N4 k$ b5 l' p a ?/ f# o return 255;
" E) m9 c' [; Y" V! A1 l" B8 @& G}% {4 d3 l' x4 R) K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: d* p6 T3 Y! j{* Y$ L- G g. \) |8 Y
BYTE nTmp = 0;
! g W9 Q6 o$ ? `3 Y9 W6 v( l, @ bool bDest = false,bSrc = false;: f9 p( {; d. P
for (int i=0;i<MAX_INVENTORY;i++)3 m, P; m. g' x6 @& u
{0 a( ^ Y, X- C7 c
if (dwSrcId == m_Item.dwId)7 B2 f. [" H( M; \' P8 G! F
{
+ U, d0 A7 I( @* P //id相等 则 改变对应的dest和src
4 R& G0 }! C0 b. h( p2 F1 g nTmp = m_Item.nIndex;
( i$ }- Y6 o$ m, A. r- d( j: z: \, q m_Item.nIndex = dest;4 Z) c/ k8 n: G' u7 ~
}
' @8 L! A9 E9 T3 v# p+ N( X- i }
: q3 h- C d5 y2 \. _8 ` //临时数据保存完毕,交换开始
: Y9 J W1 G4 k7 H8 I1 n for (int i=0;i<MAX_INVENTORY;i++)
2 L( _, T6 ~% B' F3 g! t3 y {; J- O5 O& Q; y) U
if (dest == m_Item.nIndex)
, g( m; j( r5 v) \1 K {/ ?/ M$ O8 w" l
//id相等 则 改变对应的dest和src S0 ?1 U9 E8 k7 e# a
m_Item.nIndex = nTmp;% M* m8 S$ m/ H- Z4 S% y
}) J0 [5 ~2 r1 a9 q% o2 }7 t
}, \3 b4 z% B3 Z7 P' V
}/ Y, r* P/ I7 m2 C- F
};
! ^* {3 F, I5 _! ]. k' ]% T+ n& ~-------------------------------------------------------------------------$ j3 C0 G6 c2 \9 n
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ u" U/ @. F5 f0 y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ I2 c$ D& O4 k! l, _1 H紧靠其上添加:9 d7 t- N; E1 \+ l( ]
if( pWndBase == &m_wndMenu )0 k. ~; ]4 P( T+ a, V
{
4 o0 I, y9 v+ p0 l1 Q& t switch( nID )( `5 [4 [, K6 C
{
0 I+ S% L/ X1 P+ m* Y case 2:
3 M+ m+ x! O6 b) e/ h {. p( ?; J" M/ A6 p' t3 |
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( a4 i0 A6 ]! a" e; _# S if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 r; h! s5 R$ j. }! p: G
{/ ^+ a1 B5 n/ d- { ?- ]: U
break;+ G8 W; k8 [3 U% v; Y4 ]
}
8 r7 o; I0 ^) \ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 r) _# P3 N6 x
{9 \, d Q S) \3 M' p `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 X& M5 Z/ L$ i" H$ C4 D0 C
if( !pItemElem )
5 R- Y2 o! z# ] continue;
! {8 a3 ~ k/ _0 T if(pItemElem->GetExtra() > 0)7 u" f+ O8 B/ E' U: M/ F2 J! e
continue;
& J9 b1 g7 O' I1 U if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 l& |8 \6 i" o2 l: o/ ~0 A
continue;
4 X; Q. [0 X. E1 n2 I( x) f if( g_pPlayer->IsUsing( pItemElem ) )# c+ P& ^& P; r& R
continue;& c A4 @6 I5 ?7 p ^; v' @; O$ m9 u
if( pItemElem->IsUndestructable() == TRUE )
; b" X4 Z' ~. [ {
" Z4 J- N9 O/ N4 b8 x* J/ A g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 c- P( J( j0 ^* Q2 D
continue;- d" X* R4 C) c/ ^& j
}. j* _ p, s* c2 w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
Z9 ~* m6 M) W! C: k0 k }
% U/ c* x+ g3 g/ Q8 o1 N break;
; I' f2 H |! J8 V/ k$ d' P }" S7 s9 ^. d1 h6 `
case 1:& X1 H6 j5 ^1 E( d
{* w+ ?/ v. m2 O, G- D
//整理背包- v& \9 a0 [& i
//////////////////////////////////////////////////////////////////////////
8 d* A# q8 U0 [$ G! P, g1 J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 q. y7 v! O3 ^ e$ q; g5 n" {9 ? //////////////////////////////////////////////////////////////////////////0 \1 I B& p+ o# X1 \6 N* n- k
//////////////////////////////////////////////////////////////////////////
5 b. c% c) k5 p1 e1 \ y CInventorySort* pInvSort = new CInventorySort;4 D* m0 G' E" Q7 q' n( H
vector <sItem> vItem;' {% N8 z+ ]. {) _) O0 l [2 J
vItem.resize(MAX_INVENTORY);//初始化大小6 b# Y1 e6 O+ l
//////////////////////////////////////////////////////////////////////////1 w. e) z9 T& [. H9 f2 t
//填充数据
$ r) y% T/ H, W" W7 r/ |2 i( g; O4 [ for (int i=0;i<MAX_INVENTORY;i++)2 v0 x" r4 |' G# ]) D
{
a' F$ {* O& o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ @! C2 D" }# { if (!pItemElem)
# G6 X& K2 F, d/ }+ s {
! E- f6 a0 i& @5 h$ H# _ vItem.dwKind2 = 0xffffffff;# J, v% ]: u; ^! F/ E
vItem.dwItemId = 0xffffffff;
7 Y9 J& D/ B5 z/ k- Z: m5 ^ vItem.nIndex = i;
2 R: M2 I8 H% c. N }else {& K6 } m: p- p" Y+ n
ItemProp* pProp = pItemElem->GetProp();7 l, Y* S1 n) [+ E$ c4 E
vItem.dwKind2 = pProp->dwItemKind2;
' w6 _! _/ v0 f: ]! E7 ^! M vItem.dwItemId = pItemElem->m_dwItemId;* g5 {- K& z# e5 c6 G2 w
vItem.nIndex = i;, Z4 a: k( V0 i/ K
}9 }1 c/ X4 m2 w: Z& X
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 e$ g3 l: R, G9 _% f! @0 P/ D/ t( z
}; m: R2 W( [ c; \" A; L
//////////////////////////////////////////////////////////////////////////
- u3 r2 X8 H9 ~) u6 S2 l' \1 K! i sort(vItem.begin(),vItem.end());//排序8 W6 i1 O1 K8 Y" i( ^
//////////////////////////////////////////////////////////////////////////( k, |5 @8 H! @% W3 J. j) V# a. a
//交换
' I/ T0 [+ W' \) b+ C. z; P( ~, _ for (size_t i=0;i<vItem.size();i++)# X' t3 j# z; N0 f2 O6 I
{' W; R! [& {! N/ w7 k/ l$ F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 X. e) [4 x( e, @" p3 Y' D pInvSort->Add(vItem.nIndex);: T9 O, @7 `7 a; h
}4 M8 }3 S5 Q2 x
BYTE nDestPos = 0;
# @) a. ~ H3 M for (int i=0;i<MAX_INVENTORY;i++)4 j% d! V$ k. D6 e, b, J
{
, ~6 ?! ^0 y4 d Z* q+ c; A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 p+ ]3 ~, y7 T; C& G
if (pItemElem)$ w2 c4 p$ c. i
{
0 u, X5 K) d- A* t- }& [: J+ Y if (IsUsingItem(pItemElem))
, V7 M+ A$ q( j9 k! w" ~2 q; T {, T& W$ y- B4 v6 Z# G3 O; x4 M& R
//这个位置无法放) m0 p" b! f1 L! ~4 ?
nDestPos++;
" C" k r% P# {0 t- Z" [ }
9 |3 g( n7 ]' a3 N) ]/ c& k1 D: E }
$ _9 E0 v- @8 n4 J! _ BYTE nSrc = pInvSort->GetItemSrc(i); {4 c9 _7 _$ p$ ?$ G' H* ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 z% V- W& C( v& h2 K' y: ` if (pItemElem)4 S4 _4 X' h0 Q/ O1 ~
{
: B) T7 R/ d( y+ U; J if (IsUsingItem(pItemElem))
; v7 t" w8 T" G W {
5 [) D5 n" s: y0 ^ //这个道具无法移动,跳过
5 {3 \2 K% s1 ~ F$ l3 p continue;- \2 ~& y9 w8 h: E! g1 r7 \
}8 s( _' i( l* b
}else{
; M5 n8 g- o' J //空位置 不用动' }7 [2 L4 E) g
continue;
% Z5 E$ _; a' U0 [3 i8 i }9 a; [" d. l2 C. v# h- f& J( q
//////////////////////////////////////////////////////////////////////////
! q; L) h& f* U3 M# S) @. H //开始移动5 s5 o$ q; m# ?: L {: a7 N
if (nSrc == nDestPos)
- a! }/ X! ]' i( `! d {
+ E) q+ E5 c9 V; a2 g. P //原地不动
0 W3 t7 |4 x. p# s: l nDestPos++;( a$ t0 ~5 c, X \
continue;1 ]& _# A; |+ \6 X
}
# {* n( c q1 x pInvSort->MoveItem(i,nDestPos);
: W6 I+ |" d/ X7 ?7 v3 G% l g_DPlay.SendMoveItem(0,nSrc,nDestPos);! T! j4 z9 [$ j0 c
Sleep(5);
; g& x: |. B( s' t$ v& H //Error("移动 - %d->%d",nSrc,nDestPos);( g; J$ J8 j) B
nDestPos++;" U& a1 d: l$ \: t+ V# d
}8 Y( K; t% t, D" {; r
//取第一个元素的信息
8 x0 v# l( W6 @6 E- t- ] /*/ r1 {6 C! P9 u0 s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 u" a n9 a& B/ G- F4 a3 A' e" \
{0 K B7 E& ]3 ]% @# ^
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 ^ ~8 t2 \5 k$ b' Y: n
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 e8 N# Z0 u. n8 K5 T+ S3 _5 ]
}7 O7 a+ L' b* v' Q" B0 T
*/8 h4 r- ^ w: @+ w# ?3 B
////////////////////////////////////////////////////////////////////////// _! e2 Q' W) S! B
break;
, B) \; B0 K: z8 p1 B }. F4 f8 x. U4 a: x
} + u0 `* n* C' b9 p6 S
}" _7 g, D" s. W
m_wndMenu.SetVisible(FALSE);
4 Q% ]5 v7 p% u" N
; F$ ~+ g( k& g" ?2 Z1 f--------------------------------------------------------------------------------------------------------; d, r7 r/ s# d. Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; v% c- f5 f6 y+ {4 A{5 i/ @6 P9 V' Q( M# L
BaseMouseCursor();
- z" y' Y( s, \: c0 j' b}
, u8 I+ S* j6 d9 T在其下添加:
$ v$ O: P# U7 F Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ i% k" F% g2 B1 H{
/ l$ R K1 \9 s! ^; V/ ^# w/ b/ Nm_wndMenu.DeleteAllMenu();
- E3 F1 g9 i u+ V0 L C9 F+ d4 I! Hm_wndMenu.CreateMenu(this);5 T6 e" p* F7 c( i* s( l# K; [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. X1 l* U y. X) `- S+ a
8 Q& [8 G L4 \( r/ R2 Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 Y* ?! S! Q: \: l. z1 _" R
{( r' B* _% X/ ]% l# R' b3 j
//P以上级别才可以删除所有道具5 b0 `2 i% P) j7 R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ G) h, |: E& q2 n- F" u5 O* ^( ^& h/ W
}/ t5 x, o* O# \5 i( Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 b: X$ x9 ]( w% E4 Z' \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) g' L* C1 o9 o+ b P5 ym_wndMenu.SetFocus();- W2 w5 H- p# p" X: H' t: K3 L: F
}; ^9 o% k% p9 P+ w. e6 k# C
------------------------------------------------------------------------------------------------------------ x8 U# t( r5 \' [- @* i& D
*************************
5 k, b4 \! P* E+ A' w uWndField.h文件3 P7 ~ m- _! g0 n; y/ `: Z* f
*************************7 w/ z& @- L& b9 m- N
搜索:BOOL m_bReport;
$ m6 V8 o8 N+ D: ~# q+ h0 O" ]1 Z其后添加:
6 o! X6 ^; Z% Y, K1 xCWndMenu m_wndMenu;; |* y! t+ q) M+ r
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* O/ G4 T& P; d q( I$ Z2 X0 O8 m( c9 ?
其后添加:
" D0 I7 o0 J* q% g) Q# Z2 I1 u* Ivirtual void OnRButtonUp(UINT nFlags, CPoint point);
" U0 J. D' D: ?1 {, n1 X
5 p# A h# o9 N( }% g- R: p/ w8 Q; Z1 ~! t1 z0 u! ^( t
|
|