|
|
源文件中_Interface文件夹下WndField.cpp文件
6 N0 Q2 L# m( o3 u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' q9 M9 z+ B# G; a1 Q! m
8 I# G: L" l3 o; S) P4 q( Mstruct sItem$ j5 ~! ^( h& s
{
9 M/ @ v; J9 f2 w- ZDWORD dwId;: _" _# W8 n& I" a$ F# @# n
DWORD dwKind2;+ ?7 l2 @( U/ |7 O2 n7 S2 s+ j
DWORD dwItemId;$ R8 h' T( G! n6 I# n, O- d, l
BYTE nIndex;
8 M+ I2 D3 c8 Z" O. g! tsItem(){
% b: X6 ]7 S) _0 z1 G( s! Q9 v5 `( Q dwId = dwKind2 = dwItemId = nIndex = 0;% G. |, ~& t8 p% _: y- y( C
}5 ?, k/ ^/ o0 g9 M
bool operator < (const sItem p2)
: f3 k+ C, U1 K. t/ z( B{/ T2 I8 h: b, Z6 C9 M/ m0 W- ?
if (dwKind2 == p2.dwKind2)
- t/ G1 H/ T$ x% C1 H# u {
/ k, T& \2 L1 F/ y+ x return dwItemId < p2.dwItemId;
g# d0 Z' v! I2 i0 z% r }else{! v$ y7 c3 i) I, @* v
return dwKind2 < p2.dwKind2;* | u0 n* s' \
}, ?- @+ v1 j/ N/ }0 }
}
1 e( j& i) ^1 c: O) V/ Q5 w3 X};+ }& H8 P+ |* L% L) ]* d8 q4 P" `
class CInventorySort
- j. P6 K) J# M, m8 ^{
4 o9 M! q3 P- m( Gpublic:
) M: H5 Z5 ^" ], Y; F- xCInventorySort()+ f1 k6 Y3 W* u8 m
{" @ P7 q0 |! r% n
m_dwPos = 0;; v* C+ {* K! J+ `- S' E
}8 I3 h/ B4 X$ g: i$ G
~CInventorySort(){}4 G1 f3 C' t2 `; @# C7 g
private:
0 S) _1 X( _4 J1 B$ `9 JsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; T) L n% p" K7 t% @# O4 mDWORD m_dwPos;$ H+ h: o h: t, M6 x, I* X
public:' v2 `) C! @6 J- ~. ~0 @4 u
void Add(BYTE nIndex)
: g- E# q% V6 H{
- S' D( k5 @1 { _( t if (m_dwPos >= MAX_INVENTORY)
2 k6 x7 a5 K' ?" e {
% n' [* [6 b& z: i9 B* K return;
" r: p3 w2 e7 C4 W1 @! m }
) F( o" Z; B" r( q: T1 c1 z m_Item[m_dwPos].nIndex = nIndex;
, M! V" b5 Z" b- ? m_Item[m_dwPos].dwId = m_dwPos;
8 q" E- C8 w0 `3 u, F4 v, J m_dwPos++;4 V% x7 i( m; m' ]/ i
}5 `: V2 s4 O' `1 P
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: k8 F( W& y8 C9 W{
1 D$ X3 x0 r$ ^. R& F& l( A& r1 n for (int i=0;i<MAX_INVENTORY;i++)
9 {' _0 D: v, \; h- @( ] {
4 d! R4 _# N9 ^ if (m_Item.dwId == dwId), E+ x: Y5 F5 V: M
{) B+ _/ b" M/ K& {; I( n/ N' P
return m_Item.nIndex;
8 \$ W) H& q2 U" z0 \- B: h }1 q* r0 F+ H8 F U
}6 B. s6 O% ^2 V% Z
return 255;* Y7 ?4 U9 R- a- A6 M: f! c
}
9 \ E$ R9 D. v1 k/ Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- p# L. G: z$ B2 G3 Q- u+ F
{
7 ]0 O6 Y, C' { r% {' F. P( |. J BYTE nTmp = 0;
3 F9 [- P" @: O bool bDest = false,bSrc = false;
" ?0 j. b: k; a for (int i=0;i<MAX_INVENTORY;i++)
# [ z5 I, M2 X- K* P0 F4 k {
0 o* l, P% M- y3 s* j3 d* i if (dwSrcId == m_Item.dwId)
4 D6 J" z9 N4 |3 S0 e" [ {; r8 v# P8 ~# K6 [! |; C, x
//id相等 则 改变对应的dest和src
3 K% E8 w+ G- b% Z M0 k' Z G% r nTmp = m_Item.nIndex;* @' L5 R' W3 O& F; Y1 f9 r" D
m_Item.nIndex = dest;- [: m! J8 t2 L- I5 K. H
}2 d& {: s$ ?7 X3 a$ Q
}. F7 C; }0 I/ q, y
//临时数据保存完毕,交换开始6 k- e: F$ S& I% O
for (int i=0;i<MAX_INVENTORY;i++)
) O0 z/ ~: H0 j" `0 {- o9 r) Y {
; h! H7 F" o. [' z$ D( w if (dest == m_Item.nIndex)
; K* e0 }' K7 ~) g$ ?; b7 H {0 V3 v, a5 P! I
//id相等 则 改变对应的dest和src3 J" v* Q8 T. m' `# i- v
m_Item.nIndex = nTmp;0 U }( B5 f$ i) T8 i; G0 @7 |
}0 }! W6 z5 A+ u. }) N% l
}
# _3 @ |3 X" O0 C$ w}
( o% T9 R( N% A6 i};, _6 f1 W7 `/ h$ ?- Y
-------------------------------------------------------------------------
0 r; f& X% a2 n9 Y; b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 S6 H4 F. m; l. w+ u搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ i* i" Y" ^: }3 p2 x9 T
紧靠其上添加:) h& x$ W* w n, D& W
if( pWndBase == &m_wndMenu )
" K/ @9 K3 e6 j& h* }{
1 Q" ?7 d0 B. `% I9 p$ q- T; L switch( nID )4 i1 z& E3 U$ Y6 j
{9 N& J. `- Q0 @8 T
case 2:" R Z8 S. n4 e4 X- C- Z
{) g6 }6 b& N5 f4 A
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 b0 s5 x- e8 [1 I" a$ ^ u* Z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 w- _. A4 N9 e4 d# a" K/ G, f5 K
{
' O2 [5 h3 @$ u! [; b& [6 o break;
! R* Y% C) m" ^, x8 r M$ v }$ B, Q/ N, a5 v6 `0 j
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 b$ \) |+ A# {& g) s* o {
) N2 }# U8 R5 t* j x; S/ T6 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% V/ Y7 _2 m. X) P- } if( !pItemElem )' H- ~& Y1 x$ m$ ?( p
continue;2 a* V1 H! Z+ y( o
if(pItemElem->GetExtra() > 0)
+ N1 Z3 S6 Z8 S7 z" X1 a' @ continue;
8 H# B2 H0 ]3 W; C w" e! H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
]2 V6 _4 t' A: u6 C7 D continue;% l. a6 d- u0 L2 \# M$ o. _
if( g_pPlayer->IsUsing( pItemElem ) )
; d2 w- C+ u1 @* r4 U continue;
) |2 U4 E# h0 y if( pItemElem->IsUndestructable() == TRUE )1 e, `1 a6 V2 h2 V7 L1 w$ N; I
{
3 ?7 z z3 V- g2 O9 z# b g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: ~7 g' E! m2 }+ J4 M( I, F0 ~: { continue;
. M3 b/ |: b: l B: j. @; l# N. q }
/ ~% N, T5 i1 @! I& Y( h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ s" S5 e# u! w
}1 D8 C$ Y& r8 i7 u: E7 y7 o) t) K
break;9 e% ~, ]$ _: r# G9 Y" B
}
/ V, c5 p. i' k; l3 b7 L case 1:0 W% H$ P$ o6 X# x; i7 G7 L6 ]
{4 c( g6 M, z" v0 c9 D! [. \% E5 J
//整理背包7 p7 z( D. p. e0 ?) A
//////////////////////////////////////////////////////////////////////////- [" J" t0 K0 I# X. u$ l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 a! W/ M& _' {4 y( h& k" h8 Q/ f
//////////////////////////////////////////////////////////////////////////
3 L. D1 o7 w/ o //////////////////////////////////////////////////////////////////////////' K; O: |$ f3 `3 j( d/ c( F! q* f
CInventorySort* pInvSort = new CInventorySort;5 _* b4 D2 d7 X
vector <sItem> vItem;
+ D k* W0 L: r2 n vItem.resize(MAX_INVENTORY);//初始化大小
`" s3 Z. @+ ^7 H //////////////////////////////////////////////////////////////////////////
5 e0 r! V7 Z7 q/ j4 [2 p7 R; c //填充数据1 j- @' E* U8 Y3 M* A. y: {
for (int i=0;i<MAX_INVENTORY;i++)
4 W- v3 _! E2 i" r. B0 |& `. O {! i" {/ J" ~0 r7 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ C2 ]5 h) S) V6 B' W5 H
if (!pItemElem)0 D% d' ~) U2 z) H! x
{$ R% B h4 i# p$ Q+ v; H5 U# @
vItem.dwKind2 = 0xffffffff;
% q$ t; a2 Y( @+ t vItem.dwItemId = 0xffffffff;
) \7 V0 u# X9 a" ~+ t- f vItem.nIndex = i;8 w2 L3 ^2 x2 a0 G0 Q; y1 ?' Z
}else {; `4 b- ^. t9 d& A" ^! m
ItemProp* pProp = pItemElem->GetProp();
1 b6 Z; B$ }. ?% l8 i4 p vItem.dwKind2 = pProp->dwItemKind2;
( F0 m% w+ y8 ^) \3 k vItem.dwItemId = pItemElem->m_dwItemId;" y f! Q1 W) S! [- T2 X0 U9 T
vItem.nIndex = i;$ Y2 m/ Y& A$ `4 ^- K* s
}
p2 n+ f0 s: W1 U h, Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 e% p+ n/ u. p% `$ ^1 k2 t. G. v$ V+ e; j
}
. T/ ?/ O, V X. v8 j/ C$ k //////////////////////////////////////////////////////////////////////////" Z4 g4 b4 S C# f+ O
sort(vItem.begin(),vItem.end());//排序, R& G% x& ^6 p
//////////////////////////////////////////////////////////////////////////- m% l e) m4 C
//交换
9 t+ V; Z/ j! T% b3 d6 Z for (size_t i=0;i<vItem.size();i++)4 h% M* [* r3 J
{
' m# p. f+ I" U. v //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 c* z3 B/ S7 @: |& ^7 n2 J pInvSort->Add(vItem.nIndex);3 ~3 B3 I' ^" U2 e$ l1 q
}
6 ?) k9 j- b: E J BYTE nDestPos = 0;
0 @: w; j7 W+ b$ d4 | for (int i=0;i<MAX_INVENTORY;i++)* R4 Q- f9 z) ?8 A7 i# q
{5 |: {/ Q+ P; A, x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ s' a- X& o4 M if (pItemElem)
4 b0 a* d0 U# Z* w% t' |9 [7 d {8 |9 U6 R0 z b: N3 I
if (IsUsingItem(pItemElem))3 R* {4 l, V% e& v
{! v9 s8 l# ~3 Q: v5 g: B! X
//这个位置无法放
5 }0 Y# K) K1 Z nDestPos++; Q( R2 n3 t+ \- ]/ S
}& M" |. U3 }0 A1 A
}; u: v: o9 g3 r3 M6 }, J6 c
BYTE nSrc = pInvSort->GetItemSrc(i);
) M; Z4 K$ A1 f! r2 `) M pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 l+ _ a- O+ R- e
if (pItemElem)
, e; |2 d, B% H( T; I {9 z) B( b' \- H% j* V( @4 [
if (IsUsingItem(pItemElem))
+ d) a# y4 `( R! F {
) e3 E- ~7 X) X* s' C //这个道具无法移动,跳过
. L6 r9 H( e& Z' g' a- A# W continue;
3 ]* f, d! T7 a- S7 x$ A }
) e& b3 ]7 X' V4 A |6 c }else{2 @ }$ e' ^7 U# |# J
//空位置 不用动
8 Y* g; w5 e5 g: g6 P* v8 ]- W continue;1 D; X- x C0 L5 a
}+ A8 ?4 |: a+ O! K2 t
//////////////////////////////////////////////////////////////////////////
" Y) k B! L0 G# ~ //开始移动/ k( f6 Z+ C! z+ v
if (nSrc == nDestPos)
' @7 q4 s/ t; _3 v {
7 e& r, g5 _- \8 D, { //原地不动& i$ {) ~& f- r; d* }. ~; u
nDestPos++;( H3 @2 x: u, d+ X
continue;# |0 C5 t$ G: H$ g: {; E! Q
}5 K* R$ e. r1 V
pInvSort->MoveItem(i,nDestPos);
4 n) p0 N0 o! X# u( X g_DPlay.SendMoveItem(0,nSrc,nDestPos);( z- Z6 v9 }& F' I
Sleep(5);, n2 ?8 T$ c. f! ?
//Error("移动 - %d->%d",nSrc,nDestPos);
% X1 A3 O" y; {7 P$ w nDestPos++;* s0 S) T/ Q4 |( c: x& c; y- p4 ]
}
" I o/ c; @& M; H, a5 Z5 Q; x7 t2 {# ? //取第一个元素的信息% e! f; ]$ P" m# ]; K8 u% e* {
/*
0 l% k& D, @. r+ W8 k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& B, ~2 h! d8 l P, j+ G! o {
$ s" c: b$ u) C Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ D: I0 M. ?- {; B+ M# m4 O* Z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ \ I0 r9 a$ l z! R+ L
}6 ]7 } ?9 ^. |7 b
*/- @. i+ f/ a+ z* w* t4 E
//////////////////////////////////////////////////////////////////////////6 E( e% o9 Q0 y \% d
break;
, z. o8 i5 s$ s0 q* O& q& a }! t1 P/ J' \5 h) t
}
0 w8 S! u: Z: Y0 _; _3 p}
% V2 E2 u M! j! L' R t4 u, Qm_wndMenu.SetVisible(FALSE);
! o. M" t+ e" [; I4 {* D) \
: T( }* v/ y4 y% T9 ^% b1 j8 m( b--------------------------------------------------------------------------------------------------------
1 l& P0 ]6 T+ I. D y$ i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 D( C9 I- z; ^
{+ I9 f) l; K; t
BaseMouseCursor();
4 B" r" v1 C P. U& E! _} a& u+ n5 B& @9 X$ J" ?, i
在其下添加:
& x- b, g4 g) g& |" @8 ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# C8 h- `6 w. D0 L O* E. m{- G0 h$ ~! |! e, k+ N0 ?) }% R
m_wndMenu.DeleteAllMenu();
- c8 P, o, M) [* `0 ]/ ?m_wndMenu.CreateMenu(this);
. c" f$ Y( F. y3 S8 p/ lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- Q, m b- K( O7 E( F
$ F* b; ^# C _$ ^+ r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 X2 L T5 p! u k1 {, _) L{
% w' V8 F( B+ j9 g //P以上级别才可以删除所有道具# [3 l0 o u; b9 H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 O5 Y& O8 N6 p0 M/ W0 H}
6 i6 p5 _7 O3 M' ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* J1 _$ V3 J/ l/ am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 {$ Q$ ~0 H4 \m_wndMenu.SetFocus();
* X6 e* Z9 b( f, d/ j2 S5 {}
+ f! E+ C) Q% {/ J6 I------------------------------------------------------------------------------------------------------------
2 U8 I: R% V0 c/ f*************************
7 a3 O( |( U: j4 m1 B/ W: CWndField.h文件0 f9 f7 o1 Q# G; H; Y4 i
*************************
! k* g; ^- P# z" R7 Q- c6 ]搜索:BOOL m_bReport;
" z$ y) I; ]& R( h0 N. p8 e其后添加:
% H8 E' d/ v0 Y" N1 @) K% }4 fCWndMenu m_wndMenu;
7 v) P" \0 O. S' F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 ~ R, w. R4 s4 {1 l1 a其后添加:
! c# q4 W9 i [1 M2 P4 `/ ]virtual void OnRButtonUp(UINT nFlags, CPoint point);
+ J- b0 _ N" g7 N, j- _: K ]3 b! `
/ z8 g+ ?0 f; ? T |
|