|
源文件中_Interface文件夹下WndField.cpp文件 R, ^1 e9 b, B9 d! f6 o
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) _3 G( v2 \) C- I: }$ E
7 Y: A* d) m, F! i4 Ustruct sItem5 I5 B* G( [8 T: s$ x; a6 P. @
{
" h2 F/ B1 [! S9 aDWORD dwId;
& `! e* ?# k& |- v1 @DWORD dwKind2;" T! S8 [% A4 Q P
DWORD dwItemId;+ \3 N, s4 U: e3 s. a+ e
BYTE nIndex;
' d8 a8 i, w' Y5 nsItem(){
$ d5 x4 }" H4 r% M dwId = dwKind2 = dwItemId = nIndex = 0;8 e! y+ |! D6 W0 {5 P! y* f' H
}/ f) s6 _% C7 D+ x4 I' V! Q
bool operator < (const sItem p2)
& d8 A% I, a! t* l{0 p# Z! H% b% K2 p6 i, B
if (dwKind2 == p2.dwKind2): H9 p9 L a. }
{
. m3 i9 x9 |: b% Y% M return dwItemId < p2.dwItemId;* K' v9 g4 Y) m) i$ U
}else{
' z# d1 _+ p* N) j return dwKind2 < p2.dwKind2;
0 E$ K7 y D, e }
# C* m9 U9 i! ?/ _}; `6 e& b7 O, j: F# K
};
- p2 T6 w' g9 R% i5 Wclass CInventorySort# p8 B7 J4 }7 P0 [- P/ F. a8 j
{& J/ P# w; i$ o6 w/ `8 ^
public:* q3 {: R3 m8 h& J6 r( ?" I4 o2 y
CInventorySort()
8 l& ?2 F. {* D- T+ G{" G5 P/ k7 X( A0 [' }
m_dwPos = 0;
( l: U* t$ c9 E: ?& [}' R& j$ X$ b, h# N
~CInventorySort(){}5 e2 e' z; O* Q
private:
" f& O- y- ]1 [4 J: X6 K+ R. T" asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
S" X' V6 ?: [6 R3 @& VDWORD m_dwPos;0 h% I* @4 A$ \2 S
public:" s+ ]+ \' q v) S
void Add(BYTE nIndex)8 T% B J) O/ r+ e# @% g! Z
{
9 u' {8 ^, {" {- g" u if (m_dwPos >= MAX_INVENTORY)
8 p# f( g. x. v* A( S {
; @- L3 o. D4 n. b return;7 ? O: x0 m5 W/ U4 N- X/ |
}, P' [# G# `* a0 A3 ?& j6 I
m_Item[m_dwPos].nIndex = nIndex;
2 j7 p6 Y4 w$ p$ f m_Item[m_dwPos].dwId = m_dwPos;% s; s" g2 m& z- v3 F, f# D; e
m_dwPos++;% E4 ]! a. F4 H: N0 ~9 l {
}
6 f. Z' H' r, b6 t! cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 F* y! Z1 z5 r/ N t5 W, p
{- d' y! ?1 X% |2 l# a- K: O [, r6 z
for (int i=0;i<MAX_INVENTORY;i++)
" B% U& |% |( M0 i0 i3 N; d {
/ L9 a! K; Z e3 m6 O if (m_Item.dwId == dwId)
, M3 N& q3 d6 {& i! q {/ i2 T$ I& B' Z$ Q5 E1 a: g0 ~, z
return m_Item.nIndex;
/ [: [) |5 y+ T% D }- a4 W& e4 y6 c6 H4 g
}" V- A; d4 [, S7 C) Z6 {
return 255;
) ^6 U: H6 W" e}
* ~- S; X' a! X/ nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' W' Z" J1 M* ]( k2 @# W2 {7 A, ~
{1 A' a% R' U. [/ {2 C$ X' w
BYTE nTmp = 0;
8 I1 D1 i" d/ L$ r+ D bool bDest = false,bSrc = false;& c) S3 f9 q P% @( {
for (int i=0;i<MAX_INVENTORY;i++)
1 J% r% G+ j( ^: d, Y$ r {
6 v5 P# W( C; B* I& s' W* Y# [0 j$ ~$ r if (dwSrcId == m_Item.dwId), I' @ i8 v) a8 N( W. [
{
0 v' ]8 ~; D* b! p F: D1 I //id相等 则 改变对应的dest和src
' ]4 R0 e& g6 ~8 P# E nTmp = m_Item.nIndex;: D w9 q: `1 r) E3 A
m_Item.nIndex = dest;
# S. W% D& J. t6 D }
" }, t5 e2 ~* K7 c" O }
3 F/ c5 F( V" e8 D, B% w //临时数据保存完毕,交换开始7 W% |, a. D8 A1 |
for (int i=0;i<MAX_INVENTORY;i++)" Q3 z9 c! _3 C7 K! c8 C3 Y
{
' A4 D* e2 k- `. E$ _ if (dest == m_Item.nIndex)
" l. K O( s8 _ {2 m$ |8 B; `* \2 z% \+ M# n9 b4 |
//id相等 则 改变对应的dest和src1 K% W/ W- G0 B9 t- ?
m_Item.nIndex = nTmp;
# p( S# A; {) w1 ] }
; g) J* I. N3 Z& Q- z }3 j$ v$ B7 U2 Y9 w; A" T
}
g$ `# d8 S, V' g; f; _' R};
% Q* T' [$ Q4 J% x1 X8 D+ _% G-------------------------------------------------------------------------. m* t" @% k5 \6 M# _5 e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ {! w( i# b, h搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ k5 j1 j" i2 [, I; }; y紧靠其上添加:
& Y, K! Z( I. C* Yif( pWndBase == &m_wndMenu )
( }, e6 k. Z3 r6 j" m{
4 \; v) |6 k2 p& E switch( nID )4 M5 g0 r9 F% |! n" G
{( Q6 `8 e2 n g- S9 {
case 2:
5 y0 H& J$ ^6 i {
( m3 Z J7 h& j) H: Q( }, g9 |7 U' P //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ S! O2 ]; P: a M" ]
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 k$ V: I9 y P R1 g {
4 V# T& O* y: Q8 | break;
; x" x+ k4 w0 A3 @ }; }3 q' x" l/ S6 ?8 f3 x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# i1 Q! C/ I$ A7 f) E& C; q0 A- W4 H- f {( ~. P, B6 J N8 ]- u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 P7 D/ ?: j+ H& a* D! H8 L
if( !pItemElem )
$ @6 z% M* S; ] continue;; F' j# W: o' y. l& z$ ]
if(pItemElem->GetExtra() > 0)
5 @( p7 M, @2 K0 a% `( t! ? continue;4 U( n5 h+ ]/ y2 x' P- `; H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# F( m( u; S1 ?7 Z. z continue;( S' g! Y% F. r0 Z
if( g_pPlayer->IsUsing( pItemElem ) )
! @# h8 q1 b0 z$ r) g7 B continue;
7 V% {" l% Q; m4 z/ S z" `7 c, W if( pItemElem->IsUndestructable() == TRUE )3 P$ F0 g X$ t! h5 \) ^# c' M
{2 q- K: q1 o M5 s: Q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 j$ x# V5 x1 Q continue;% \/ h' H, p0 \, V
}
) _3 O/ l; f$ o1 h4 k8 [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 a$ a' I' ?1 I }
* |4 ]- A2 ~$ e6 Z y( r break;! ^2 v" p( K, K0 ?
}' Y* ~# J1 j# i
case 1:
% \9 L) K7 V! J9 R+ K {
& R+ Z ~- I2 w0 {& P. U! m. b //整理背包
3 H. | t& x1 m0 X7 `6 R- V" @0 l //////////////////////////////////////////////////////////////////////////3 Q! v- P8 [) V
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) o& b; A' ~3 j$ T0 v& }1 J
//////////////////////////////////////////////////////////////////////////
" ]# ?0 C) [& R R- z0 ^2 P //////////////////////////////////////////////////////////////////////////5 I) m# @8 B! y X) |& o" A: k+ J
CInventorySort* pInvSort = new CInventorySort;
' r$ A7 M+ W" s) O+ c) x! T5 h vector <sItem> vItem;
, l2 I; q2 |( L+ | vItem.resize(MAX_INVENTORY);//初始化大小: X4 G5 p0 F" i
//////////////////////////////////////////////////////////////////////////6 M8 W: a! X3 L! I& K
//填充数据
/ Z* B7 E: a" ?0 J; K for (int i=0;i<MAX_INVENTORY;i++)
3 ?! {; V7 b! }) [! H {
2 Y) @8 k" h: L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 s% r7 \$ N& s& O$ c- B if (!pItemElem)) t; `/ r }2 @3 \% ~3 U
{
, J* N& S4 g% D" d vItem.dwKind2 = 0xffffffff;
]0 K3 x d, M( K vItem.dwItemId = 0xffffffff;) t5 W$ t* I' j8 Q: S( J! `& S. w; K
vItem.nIndex = i;8 E- q% \/ y, i1 l! @
}else { S+ {! C$ K6 {' p
ItemProp* pProp = pItemElem->GetProp();
8 F1 [6 x- A9 X( h% o' v vItem.dwKind2 = pProp->dwItemKind2;
) F5 X# M6 m8 ~/ L8 L/ C) c vItem.dwItemId = pItemElem->m_dwItemId;9 _% s; ^) Z' n
vItem.nIndex = i;
! W3 ~# _6 ~) J& t }
! U6 K2 X2 Q( C: i) q, |% }' ^# Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, m1 r0 W2 t1 V5 \; `/ x( G
}6 A) i& N1 p+ {9 A
//////////////////////////////////////////////////////////////////////////
0 ^- `4 \0 d! [+ z2 b) F sort(vItem.begin(),vItem.end());//排序- R9 Q+ Q. Y5 g; K
//////////////////////////////////////////////////////////////////////////# h" Z) f; _+ Q, y2 x9 T9 ]
//交换; e1 X& V4 d: u+ R( T% H2 w
for (size_t i=0;i<vItem.size();i++)
|/ n" f# g; J; ~ {- E6 M. }( a) K+ V
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 J1 U8 K- h" A, b pInvSort->Add(vItem.nIndex);) m0 u1 i" t3 p$ |! y+ T) N: C5 Q. `
}' H! S' u6 m, U: J( M- [) j) c
BYTE nDestPos = 0;+ q. `0 @9 r" }$ x
for (int i=0;i<MAX_INVENTORY;i++)+ G# x7 }0 f* }+ C
{
" r- n- T* m/ a5 k4 }' G5 [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ [6 \8 O9 Z6 `+ Z) x/ A7 T
if (pItemElem)
) _7 Y, E3 p) r% e2 }$ e# A+ l {, F4 W3 ^( m" O* H' Y% H# A Q
if (IsUsingItem(pItemElem))
! U4 X# \6 J$ h# J3 K- R# i {
6 r* x0 P! p) L' F7 v //这个位置无法放7 t! D: |9 c0 \: D$ Y
nDestPos++;
, T" m4 ]5 r; T& p3 o7 S5 v9 R, } } ?! R: B0 o& H; x( M9 L' d
}
# p( n: a$ k" G {. T4 ~1 ` BYTE nSrc = pInvSort->GetItemSrc(i);
: O1 e ~3 R) e7 ` pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
h! `$ L8 \6 M# W& o if (pItemElem)
5 W0 W2 K- ]. Z( s! `& i- B0 P {9 c& E: Y- u" [: U7 a2 m: Y- o
if (IsUsingItem(pItemElem))( S1 \1 B6 l* _* k) `. W
{. d6 [3 N# y" E2 N. ~
//这个道具无法移动,跳过+ Q' o! ?0 }( c4 W) Y/ O7 F3 V
continue;8 P6 C. \, J8 g6 a
}+ ^* A$ U, z6 k, j- c1 a
}else{
8 b; y1 ]8 w/ K1 Q. Y //空位置 不用动
) E. @+ T" M+ ]. A) }4 ^0 ]& i continue;
8 O/ Z. h) i- f9 I$ E* e }5 H) _) g" c8 z$ R! n0 S0 ]. o4 U
//////////////////////////////////////////////////////////////////////////
# R. l0 [, Q3 c& U' f5 h* ^3 } //开始移动# x. Y; @2 i7 z
if (nSrc == nDestPos)
5 f u) M) |$ K! r& { {3 V( x6 l3 c( g# [& w
//原地不动
z, T- Q" \) Z4 g; S: s nDestPos++;" z0 A, p7 Q- j% B4 A" j! p
continue;
2 ]" H8 n# C" z }
$ G4 x! i. o f) @, t9 W b5 W pInvSort->MoveItem(i,nDestPos);) ^- G- }# E9 A4 `. Y, |: e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( z1 M# Z& o' J" k. J5 P Sleep(5);7 ]0 D- Y" {3 ^& ]* s/ N1 s, D* }
//Error("移动 - %d->%d",nSrc,nDestPos);
9 Q) g! F: g9 G2 v8 N nDestPos++;- J* w* q. Q) O, Y+ b. s
}0 k% `/ f6 S* l8 c9 Y1 ~5 m) N
//取第一个元素的信息
3 l: @+ T% F" t% f /*" w# v2 H4 f5 v, m/ F* a
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# m, k# _' C/ e% P7 @# N! t3 r+ f
{6 h' J& u7 A, J+ g7 C% H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ v& T' f+ ?/ V' ?& C1 V& D1 N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 n9 |# _7 f% [6 @. o/ ?
}
8 U5 q+ G' w1 e) s/ @. n9 _ */# f. F0 o8 e+ x% F8 N3 p" m
//////////////////////////////////////////////////////////////////////////1 u y6 a! ~6 G+ y
break;
1 _2 g: K: T/ q( k" g+ w# r }
# w9 ~5 A, J5 J: c3 l } ! r9 Q* p1 g8 G2 l: K' j2 f! c2 o
}
8 |! S9 K+ y1 xm_wndMenu.SetVisible(FALSE);
9 h) l( Q0 u2 W# h) G6 ^& }
! u5 I* n; ^, S" x, j--------------------------------------------------------------------------------------------------------7 O7 @2 d" m+ ^6 S. i
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ k, f9 o4 h; X8 ^{$ X* U1 w2 I: v b6 P! v
BaseMouseCursor();3 W" `9 ~, m; Q- B+ @+ l
}
( f: \( L1 f$ a5 A9 I在其下添加:. s$ k. T2 p7 L) ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 |' w4 \ b `
{' D& k9 ?. U7 B# Z# _% M0 \
m_wndMenu.DeleteAllMenu();; P7 D4 K! \2 s" }' v1 T: ` i
m_wndMenu.CreateMenu(this);0 k- x% ~' M, o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# Z$ |- L" K$ z n
2 I2 X, ~: }7 L2 X# \
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, T) S$ A) ~2 v. Z$ {{# o/ h A/ | U& l# g/ a0 Q
//P以上级别才可以删除所有道具4 F9 H" `' ^% h& T" U
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; Z8 }3 d% I, M: U$ a/ C* u8 ?9 ?}
1 F8 B. X" e" m* ^; N* Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! E$ M/ V. S# c, ]$ km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 [. Q. w: D6 l! D2 u4 k1 _! C9 @m_wndMenu.SetFocus();" K0 P- Z# s: }. o4 e8 W
}
0 x2 V O3 w: c, n------------------------------------------------------------------------------------------------------------
) p q" @- l6 R- ]# ^2 r4 ^( E*************************, S& c, O5 ?0 W" z4 o, I+ m' \3 B
WndField.h文件5 b( t- D! A+ J; T7 { S( [
*************************
4 p# q! l! w! }% e# L搜索:BOOL m_bReport;! t- T/ q' _9 g8 R3 k
其后添加: l" o( l9 F/ ?
CWndMenu m_wndMenu;; l* a9 g e g
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ V1 W9 O/ g+ f) D其后添加:. [. C; f& N. N
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 b2 q/ Z! ]" b5 B7 ^' d6 J: G5 a( {( B- q- K1 K
2 ~2 I% f; e \* H1 | |
|