|
|
源文件中_Interface文件夹下WndField.cpp文件
2 W% |9 v+ ~6 |; O9 t- Q, `( K( U搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ \. u& n- _0 O/ e
; S2 [+ } V* e8 @& |9 e4 x" ^- m" Wstruct sItem
3 O" h# c y: q) r) ]& W; Z{
/ T, P' g- F& S) Q1 u |DWORD dwId;
1 Y% o$ f( W4 {' sDWORD dwKind2;
5 h+ C3 b# N5 I; U" Y; \% K0 X! cDWORD dwItemId;
* U. L5 z! C$ D2 q* UBYTE nIndex;0 ]# X8 K+ i# s
sItem(){" O" x9 ^+ [! m/ y
dwId = dwKind2 = dwItemId = nIndex = 0;
' C6 V* {! V9 q" u) o4 X}
3 Z5 T2 U f; O9 l* `& Dbool operator < (const sItem p2)
& h% j. T7 n/ n, u' Z9 E C{
& Z4 [1 |# u( Q9 U' [+ b1 o if (dwKind2 == p2.dwKind2)
+ H: L7 `) K) M {) k2 N x0 l& ?: q4 w
return dwItemId < p2.dwItemId;0 b( S% T- t/ f& y
}else{( _* Z2 b8 t9 l/ X' Y6 p+ p
return dwKind2 < p2.dwKind2;1 b6 P$ \! M5 R, n4 F- Q
}
, ~9 f% S4 E) y1 z5 [}
5 a3 Q. m/ ]' J5 a};
0 s6 O% h0 L* e+ l& Fclass CInventorySort
" P9 r2 b# j% r$ S{
- n# G6 G$ C% Y o; U7 hpublic:. C6 l2 `; q" o0 G3 @. G; A
CInventorySort()
3 _, y1 Q, F9 ^8 Q6 g7 J6 S{
/ I- j( U/ g! A: c8 m m_dwPos = 0;
. C, g% y/ ~2 ~+ e' T) X}
" p; l" b9 t( ] v: s" }/ }2 Z~CInventorySort(){}+ w, f6 [* s# @+ |& d2 G1 h
private:
' ~5 h: l6 q8 o `sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' w3 w3 l% u7 X' s
DWORD m_dwPos;
* |/ S3 a- y6 x. A. N- ]5 `. p$ ]1 ipublic:- a0 ]* J+ J$ d
void Add(BYTE nIndex)6 S+ h2 c4 s' J6 Q! M5 \+ i
{
. V; T" b$ E0 }& ^" w) n% _ if (m_dwPos >= MAX_INVENTORY)
( ~+ N. \/ m2 v1 Y {
: g- `; Z$ d5 L) F4 J return;8 V$ P0 ]1 ^3 L, |+ a( r
}. ~! y5 C; m# m) |, B2 _
m_Item[m_dwPos].nIndex = nIndex;
8 ^, C( d0 b, b! S2 V m_Item[m_dwPos].dwId = m_dwPos;! Z8 o* t; m4 ?& {( P, ]; \
m_dwPos++;* `9 W8 U5 b1 x/ {9 N
}
1 x0 x' W( }- {0 z5 D2 `; `BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 q1 V4 I8 L8 @{
" Q p; C; ?. ]8 e for (int i=0;i<MAX_INVENTORY;i++)
3 m1 |. w Y& P X7 K. h {
* i9 ?1 S: y% C, [* J if (m_Item.dwId == dwId)
1 [' H) B1 e) C" M7 j, t {
8 C: F2 y$ n( p0 [; n) H5 ~ return m_Item.nIndex;, J) m7 k9 Q5 i. [! V' P! S
}
) |) p, F; C4 O- j# R }/ U, X5 ]- T7 P+ V) N
return 255;
5 z9 |8 p$ n5 S b0 v4 ^4 h6 }# X}
0 p/ B) Z: q( o4 A- a* qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; a, B; G! v9 @" N* F
{) `% `2 i. G" q
BYTE nTmp = 0;6 U0 X/ l- | K( V
bool bDest = false,bSrc = false;+ B$ t! z; v, V# Y7 P
for (int i=0;i<MAX_INVENTORY;i++)4 ]# m5 I, h( g; p8 y/ F0 q- t
{+ D( w7 m$ ?1 k( ]' C
if (dwSrcId == m_Item.dwId)
: h6 v; a9 Y8 d {
/ B. d Q$ u3 u. r% D. K/ `& J //id相等 则 改变对应的dest和src
* @' C" ^9 \: p& O, ^& a, r7 A* X nTmp = m_Item.nIndex;
( H0 ?- \1 y( X$ P7 O m_Item.nIndex = dest;& B0 o2 a" @% \3 g) I' ]4 X
}7 ^, |* E, K7 _0 }
}
+ |' O) Q6 j7 ~7 @; B //临时数据保存完毕,交换开始$ F) ^' m5 J: Z2 `$ X% b$ t: l$ }
for (int i=0;i<MAX_INVENTORY;i++)
& l9 I9 L; a' L0 S* ^& H# T" C" A {
; y4 J& |7 C5 V if (dest == m_Item.nIndex)
6 @4 e/ |1 Q: i3 n( H {2 G- t1 O/ \/ h) |
//id相等 则 改变对应的dest和src
' w8 F! x# U% p( ?2 R( W m_Item.nIndex = nTmp;
- O6 f; ~( ]4 o8 a7 G }5 F: U+ b: I* f7 q2 z( V1 t
}
* q) ~4 F, N% k7 e: D}
0 ?% M3 w L$ U/ d};$ e y* q* h/ @. n
-------------------------------------------------------------------------2 A- D8 S$ `. X* N4 I, r
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( E& \3 P- u7 C2 @
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, ^4 G! s( m% s( V. w# B
紧靠其上添加:
6 O0 ]6 ]$ i: K: B7 ?7 C$ W& J, m% dif( pWndBase == &m_wndMenu )( U! [9 c, n" _1 W0 t) ?
{
* E$ }: |0 m2 y1 D0 I/ I" ~ switch( nID ); ]4 ^% v8 B k6 U
{
; E$ o$ g2 g1 ?# e( m0 } case 2:$ W/ {( x0 o- K2 A- b
{& r- ~) l& R4 I& P* W
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 c" i7 ~8 y: G( ?- d5 \" N% I) Z1 u0 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 G, X1 G6 T5 U; d1 ~$ ] {9 C. i l# L/ H& F, Y5 @# E
break; N) x4 X& J4 k. X% l' A
}
, n# C) `/ i) V6 C, E for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! P* B) s, Z7 m. U. G9 ]
{
2 g" x5 A1 H) z7 f; @' W- g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ \) a+ e$ B) F
if( !pItemElem )
( q) w: F4 P2 E& p continue;
6 N" r1 m2 T& ^5 I3 F% W9 E5 S if(pItemElem->GetExtra() > 0)
. x1 }& g+ {3 K+ P' e; i continue;
1 [- `' x$ j3 v* {( t8 j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 X7 V/ c9 d2 D& X+ z7 u
continue;7 S: ^7 T; w( H' N( T9 ?7 G; G9 R
if( g_pPlayer->IsUsing( pItemElem ) )9 `/ H& R5 f" @0 ?' E; q
continue;, @2 l- L# M9 S0 n4 }# Z+ t
if( pItemElem->IsUndestructable() == TRUE )& P( k1 z/ _5 Y" z9 j# \9 L9 y
{
% _' E2 A: G6 \2 e' F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: f1 C$ N. p. h! q& S) B' f7 M continue;0 |$ J1 Y# J0 e
}
/ t+ D4 ?$ h. ]' k, X8 f g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' F+ W/ f; _ N4 O7 w7 W }9 A0 P; p+ D5 Y/ W3 t
break;
) C; O: w; X6 Z# Z- L+ q* ^/ E }
5 D* w* B; n/ k' b' g case 1:" y/ ?% n6 l) d, z# S
{: c8 d( ?% L1 K4 d+ U/ a3 }# Q7 R. J
//整理背包8 ]6 ^! T/ h6 N( z a3 ?7 {& e% W
//////////////////////////////////////////////////////////////////////////$ x5 o( {; d6 n! w' _+ T' Y6 X, ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. ?3 M7 }6 K" I. Q8 H
//////////////////////////////////////////////////////////////////////////! P$ Z, H* b) Q
//////////////////////////////////////////////////////////////////////////$ e) a8 g9 S: c, z0 X1 S( D- @
CInventorySort* pInvSort = new CInventorySort;
% ?: ]6 B7 Z! }! U- K% \- \ vector <sItem> vItem;! p9 L$ O# C0 V
vItem.resize(MAX_INVENTORY);//初始化大小
7 J# k/ {) A* W3 P //////////////////////////////////////////////////////////////////////////7 W4 U/ M+ X$ o" k
//填充数据9 l+ L4 y; m$ r& x5 {/ J
for (int i=0;i<MAX_INVENTORY;i++)
# |3 J+ h' ~5 o. J4 I/ ]7 b {3 t% z% O& e( r! i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! F {* i" i2 o0 M/ r7 c4 O if (!pItemElem); H- z9 C# W3 d6 K
{
& R, e8 c$ ]9 r! B vItem.dwKind2 = 0xffffffff;9 F* Z* ^$ F2 j% B3 h, Q
vItem.dwItemId = 0xffffffff;# p6 J3 N& [; Y
vItem.nIndex = i;. R: Q* D3 B1 H2 F; ~3 h, u
}else {% n5 i& Y6 ^3 d7 o
ItemProp* pProp = pItemElem->GetProp();
8 j$ j. Q2 E) Y0 C vItem.dwKind2 = pProp->dwItemKind2;
/ S6 `# v7 J m0 b vItem.dwItemId = pItemElem->m_dwItemId;. Q( ]7 M1 K/ d, }! N& ?* w6 N
vItem.nIndex = i;
: k8 n9 l1 H4 m; I7 p }9 ?5 y5 x- ~$ I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ o" S# L0 H! O1 C+ S+ C
}: P. p, B/ [3 l4 x
//////////////////////////////////////////////////////////////////////////0 S5 w+ r- [# d( h5 u: A8 a
sort(vItem.begin(),vItem.end());//排序7 M6 L8 k2 j4 [* i
//////////////////////////////////////////////////////////////////////////
4 t& }& O: a9 d+ G* [- ]* B( T //交换 }1 B) p. U* y F# X9 V3 s' r
for (size_t i=0;i<vItem.size();i++)
8 m9 n, h. U7 N$ P2 O) @/ e ? {
9 }# E& x. e) B0 o9 K7 b: D, O2 Z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 T- q7 T% J# x( e, j pInvSort->Add(vItem.nIndex);
! E8 N5 Q/ u. u% a2 q) y }
- i6 |8 `3 l7 G7 U( m$ F7 J% y BYTE nDestPos = 0;
2 P8 \8 y9 u2 s, t for (int i=0;i<MAX_INVENTORY;i++)
, @* d1 q- o1 z {% } ?" A8 ?, a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# |+ ~# f0 y- c9 S/ r ^
if (pItemElem)2 K6 w7 Q( V8 D: _2 r0 o
{; {4 ?2 u, z: R0 T' t0 R
if (IsUsingItem(pItemElem))9 D+ X+ {2 ?" W6 l5 H& d0 d: x
{
; f. @: o3 C9 W$ k! {1 K //这个位置无法放
: H2 H& W: q' F' X" }' Q0 W nDestPos++;7 n' t. M5 V: {/ T& X4 l
}
- z% e. F! ?9 b }4 L: W" W) K' f+ c& A$ j& a
BYTE nSrc = pInvSort->GetItemSrc(i);
/ `' p4 a+ ?/ V7 ~$ x7 D4 ~: I; x9 g pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ t/ f9 g8 ?6 P" ]* L/ r
if (pItemElem)4 ]: E0 w+ K/ T
{
) w# a' a) o' b2 |7 S- `8 Q, I if (IsUsingItem(pItemElem))
1 ~4 A& }1 _' K5 ?& [ {
+ o+ `# t* \* k9 ^ //这个道具无法移动,跳过, o4 J7 B0 x+ J9 t( z. J8 \
continue;
+ @. U: S# T! t; o }8 }9 i+ A2 l1 C; s
}else{
% c3 C4 @- S* Q+ k; e7 X# l8 \0 e //空位置 不用动
# T. _. K- _1 k& M continue;/ n* j @, F" ]1 M, ]7 |
}
, {4 Z) t8 w0 F. P; h* ^" d9 B //////////////////////////////////////////////////////////////////////////
0 h" d4 q6 V0 M& s [: M, ? //开始移动
: G: K4 D; V; ~6 D0 M( Q if (nSrc == nDestPos)- }& Q) K4 i6 x9 ?7 V2 C( q8 L4 ]
{
& d$ R! b" U3 l- R //原地不动
) p5 u+ n l/ }- ~ nDestPos++;
/ ], }2 [9 F# y0 u/ J, H. ^ continue;1 H/ H! D9 j" f# w' h
}9 \0 \/ I2 o" Q7 O. T- W3 w
pInvSort->MoveItem(i,nDestPos);# O# y# y# ?9 q# W, |# m
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 z! t; `) z- p; ^3 k3 e Sleep(5);% @, H- X- O* l9 o( i9 I
//Error("移动 - %d->%d",nSrc,nDestPos);7 j6 j) J- j0 m2 v, C
nDestPos++;& U5 K8 t, r# `) G$ P1 A3 s2 L
}. ]% W1 b" Q9 a8 F! \& Q
//取第一个元素的信息( b! W& j0 w$ e1 N- _2 @
/*! L2 i" X) j& J! j( l1 | v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): n- q7 P$ a! y: P' {' H" u& H
{
% W. X' Y( G5 G8 v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' |; z+ W! r9 V' V# }1 A g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- ?8 P7 f8 o% x$ q: p2 t# ?
}; p# ~7 f6 A4 k! c# [$ A
*/0 B1 I2 V0 Y2 @5 _' V1 [
//////////////////////////////////////////////////////////////////////////8 t7 R& m& j7 H9 ^( S- a
break;$ s0 s+ k& O. O( s
}# Z1 ]6 ~( T' D& D+ B% j
}
/ a( c# X( p! g9 d5 P}
+ ^- z) W2 P0 R. U/ a$ rm_wndMenu.SetVisible(FALSE);7 ]! A& Y" _+ z& p
. p7 c7 |' A6 d$ G7 e3 J7 N--------------------------------------------------------------------------------------------------------
' X- S4 i% C( \2 g: f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; {8 w+ ?/ A) p; R0 h; k p{
, h4 C( o1 k" `BaseMouseCursor();( `6 d: i, u4 c6 g1 Z% V5 I
}4 o0 ]0 X/ L0 j( I5 _8 ~# U
在其下添加:
s% K0 U# k- `' d, t' x. S X7 |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
g' f: C. V: _6 R{
( n0 d+ J5 N) v ]$ cm_wndMenu.DeleteAllMenu();! a6 }$ y! v A9 k& K" K! R8 m
m_wndMenu.CreateMenu(this);' _: s) f" h/ C5 ?! X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) z- I) H" O' B: f. a% @2 j
7 I& q( A! M, O$ I6 h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ }7 ^0 w A3 z& k{! P" }2 C0 z/ t' u# x
//P以上级别才可以删除所有道具0 @) n5 u# @1 k1 g5 X' S; T9 G& q, P
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ q) C: R8 d, W8 m" |3 \2 ~
}
. N% w, w, A1 N) W( ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ N: I+ b7 a" T4 h! Em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) [1 d$ z( m. b, l6 y7 d5 Wm_wndMenu.SetFocus();0 B4 `- w3 S H' N T
}
( t% \8 j9 C) b------------------------------------------------------------------------------------------------------------0 y# l: e! k8 b# c) h
************************* W5 {3 N/ _+ E6 L* v! b# X
WndField.h文件7 q9 e4 K' A% [ g0 t
*************************) h" \' _. C' X! e2 z3 N, `
搜索:BOOL m_bReport;3 K! q9 y) |# a" o
其后添加:
# \+ k" m' K( A/ ~1 P" r: r3 MCWndMenu m_wndMenu;2 Q& s& {! n' E5 X4 [& F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* H+ q' r2 s% a, W
其后添加:
0 O- B* Y) O Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
/ F+ v" s- b% |
# a A0 x7 h: u% K7 C, _- P. i
6 F8 [! O7 |" j4 u) | |
|