|
|
源文件中_Interface文件夹下WndField.cpp文件
" p7 E+ F2 D, E3 W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 z' E: D* Q4 F5 I5 D+ N! T9 V' j4 Z
( L# d, }/ I8 ~; v8 v7 H
struct sItem$ H* c4 N3 q* O: W: b
{
# Y6 v4 c4 ^7 Y1 w5 ZDWORD dwId;
) Z' Y, z& O/ j! d |1 WDWORD dwKind2;
h3 x0 ]5 Q! ^, n' E3 T( o; BDWORD dwItemId; ?3 F; \$ m/ f" q) k
BYTE nIndex;
7 |. }$ C' B$ L5 A$ P- `$ zsItem(){
3 R L. T/ }3 U7 [1 J dwId = dwKind2 = dwItemId = nIndex = 0;
- Y# c; ~: \/ L& U* t2 U}6 j6 c( s3 a0 s ]& v, I4 v
bool operator < (const sItem p2)
/ p! ^1 b( S; b9 M. y% q{+ x) y |/ [, ], S
if (dwKind2 == p2.dwKind2)
+ X$ z! v$ @. V( l {
9 l/ r7 r3 f. ?( E& O return dwItemId < p2.dwItemId;
9 X) e9 m, n! p5 L3 j ?# C0 d }else{- X9 d& F, i+ F( r; X4 c
return dwKind2 < p2.dwKind2;
; H! `+ x" O0 [& W3 @. X9 o }9 Q4 }5 i# ~+ e1 g" b A/ H
}& y. F$ ~- J& |- J8 b) H
};% Q6 b) I- P) l: e$ u' a
class CInventorySort
( S6 ^" _5 c8 ?3 ] T{
+ F& Q+ Q7 D: C& epublic:
- m# D( [% J8 @CInventorySort()
7 c9 f) A) j" f7 K0 y7 O6 ^{
+ e& o% L1 A. ] m_dwPos = 0;4 p1 `. T9 ~7 |% }( u) Z' d. ]9 ?* T' y
}# R4 S& ?- u: p
~CInventorySort(){}" h& H u/ h+ b; @! b3 k5 E. @
private:+ Q$ }% k4 n7 g" t
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 w3 {$ K9 F8 i, N. f9 t' @DWORD m_dwPos;
/ c, d+ f8 v' V& W* bpublic:
) Z% y, }5 Y: \void Add(BYTE nIndex)" [9 S7 R0 a* F; z& D, f+ x
{5 a" \7 S' S. y6 z6 _7 T/ R+ z
if (m_dwPos >= MAX_INVENTORY)
0 M8 }3 r2 s8 K( ? {3 N$ `& U r+ Q, h$ X! T
return;, E4 R' g, s i9 N9 W9 D
}+ ]! J+ f& g$ _5 `5 \! z/ l' |
m_Item[m_dwPos].nIndex = nIndex;/ e& H+ X: I+ @# V& W+ m
m_Item[m_dwPos].dwId = m_dwPos;% X2 ~" y0 C8 `& U/ _
m_dwPos++;" e0 `9 @( I, n
}
# y8 t2 i4 v9 N9 d3 @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; t2 }5 \7 p% T0 s i' @3 X5 F{5 @+ c9 S @2 }- q8 F' Z
for (int i=0;i<MAX_INVENTORY;i++)& r1 B6 U; A) `1 Y
{8 I* H2 M+ o$ X0 [. t% M5 f
if (m_Item.dwId == dwId), Y5 x$ h1 ^2 g( A' @
{4 r8 j6 I. y2 Z
return m_Item.nIndex;
% a, K0 G8 y5 d( Y+ W5 u% N. Z }
0 S% F' d9 D! w; `- o X& M }
f! b8 u' i* m2 F return 255;
% z) r; l u, L5 U k0 M- M& b}2 R) B- }8 @: r" Q$ ^$ r6 }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- ?0 ^& `) \7 X# P4 x{
* B) X/ s; q/ D+ R3 P8 y& ~. h! k; | BYTE nTmp = 0;# r7 d- j1 O- D( ^2 H
bool bDest = false,bSrc = false;- |9 |/ D% ~2 n4 z3 l; T
for (int i=0;i<MAX_INVENTORY;i++)
, M8 S% O+ [# h* |) `4 y {4 d' j, @5 A) I! ^6 I. m
if (dwSrcId == m_Item.dwId)
+ u. I$ l; V* X% Y/ ? {( ?3 g6 n1 I" j# e l8 m1 U
//id相等 则 改变对应的dest和src2 W2 X& O5 T4 u' K
nTmp = m_Item.nIndex;) f1 z5 |+ m7 R- P
m_Item.nIndex = dest;% b" G0 L' _+ H; J& H
}
2 ^9 i v1 @( s# r N4 S }
& }# k$ G6 c7 n6 s1 u! M- s) C* t) H //临时数据保存完毕,交换开始
% `6 M2 e3 A2 \% Y5 E% s for (int i=0;i<MAX_INVENTORY;i++)6 d5 N. M' b8 Q2 e2 O
{
+ J$ P" l, Y/ `/ g. C. E if (dest == m_Item.nIndex)
- U2 p6 S5 \2 q: e3 e {, o" h L9 T" I2 r- V( n
//id相等 则 改变对应的dest和src
; Y3 l( V! y: \- L$ }. Y0 B3 D/ e$ G m_Item.nIndex = nTmp;! M# X, \, Y! |. R) d8 ]. E
}( ]7 U( e, _" l0 z- F& r! L
}0 c5 v( ~( M. D! F/ L4 E( ]$ X. h3 z
}
, a- Q* d& ^6 j. F};7 e( u+ F" P3 Q9 x% n; H
-------------------------------------------------------------------------2 ^, @% N( S! j c3 T# c/ S. Z6 ?- o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) ], p& N3 ~7 p% a4 V- J/ u% ?: O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' l" P% s) F; ^" E0 O. u& W
紧靠其上添加:
, B5 l' Z$ w+ _if( pWndBase == &m_wndMenu )! m* _- P- T M4 j; U
{
6 d( Q) g5 Z* W, c: W6 P8 { switch( nID )
: ~/ F$ \' H9 @) \1 n! B {
; y8 b o9 {" {2 [; k- q case 2:1 v6 p' F; V* q' T: N1 | ]
{6 v2 y \) F; ]1 g3 J6 U9 V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 z* P6 C: ?0 V& ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). @& S Y6 y. Q6 G; r
{
! J3 v* D6 r) T9 Y$ o break;- @' k- d# ^5 K1 B: _6 ]; J9 T
}
7 u6 E1 u2 h0 q* k, ^, L8 \( ?, m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- P) X) r6 P+ t @6 l, n {5 H5 J* Q8 g5 t7 ?9 p" y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ K+ \$ N p: j+ q1 I
if( !pItemElem )
' s0 ^) X3 \3 q4 b% N continue;
6 x# b8 R7 d( `( ~' N1 H if(pItemElem->GetExtra() > 0)7 Y p8 P4 G* G: N- E
continue;
% F/ s7 S# q6 t/ \+ ]: G) f/ b6 ~ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ q8 a! @( [, e6 g continue;
! }. ~- I8 M: I; O- ` if( g_pPlayer->IsUsing( pItemElem ) )
. t$ E. B+ Y$ i, o7 w continue;
% i" B- q1 a! A if( pItemElem->IsUndestructable() == TRUE )% b# E* R2 T2 a, J0 R
{
4 G6 x. i& Q; Z [ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& z" e/ r: x* n( D6 b
continue;0 R% v1 o0 Q$ I& X1 W2 M* m
}
0 {& H; F# X: S+ ~# q& `: p& @ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, T) ?9 d$ J' j1 C4 X( f' R
}3 g9 a; u4 u/ ~3 }
break;
+ a- d, z1 ^, X, P }2 ^& C, V1 r" m% ~, O- Z
case 1:
! P$ y- C! x: S9 ? {
5 F n, M3 c$ @ //整理背包
2 [. R# h8 n" E- W //////////////////////////////////////////////////////////////////////////
$ y1 N. n. w' n, D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
Q/ I# ^! s0 B" h; d //////////////////////////////////////////////////////////////////////////
5 r S8 X+ N. o, [! t& b //////////////////////////////////////////////////////////////////////////( W5 D9 B- y) i$ G" U3 a
CInventorySort* pInvSort = new CInventorySort;7 P: }7 U# n( I! Y( U1 R
vector <sItem> vItem;$ m# |: r3 D. B# |( Z
vItem.resize(MAX_INVENTORY);//初始化大小
3 k( ^/ y g$ A; j$ l3 k% x //////////////////////////////////////////////////////////////////////////1 v$ s6 m1 ?$ ^; A0 ^
//填充数据) m) Z( s* t7 N- P+ i7 S# B
for (int i=0;i<MAX_INVENTORY;i++)+ O1 B6 L2 X5 C" m8 }8 X4 D, h- U
{
% `4 e% H; k `. U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 Y/ \1 y: v( \; K0 E8 ?
if (!pItemElem) ]1 j# O8 W; X& y( v
{
8 @ x6 }- ^& A) M) v vItem.dwKind2 = 0xffffffff;3 ]6 y4 @8 ?% h. o) x
vItem.dwItemId = 0xffffffff;
& \& Y; C: c) Z5 y" o- U6 R vItem.nIndex = i;- n: `2 ^/ x' M
}else {
! r/ H: b U; W6 Q9 D" f u# k ItemProp* pProp = pItemElem->GetProp();9 E% r+ b! u& i
vItem.dwKind2 = pProp->dwItemKind2;( W" i) c* o. \$ r" i F) O
vItem.dwItemId = pItemElem->m_dwItemId;; S: c) M" i* N
vItem.nIndex = i;
7 Z3 A+ |% o9 C1 J }7 u, A5 g+ ^+ Z* y3 Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" l9 a" J+ k5 W
}5 h4 H9 J$ V& c: z2 o8 F4 Y
//////////////////////////////////////////////////////////////////////////
" z1 p* Y* q8 s" a# @$ p/ Q sort(vItem.begin(),vItem.end());//排序
. |# A7 _ E0 B7 o7 u. g v; c //////////////////////////////////////////////////////////////////////////+ E% @; g! z, ~! Z D3 T
//交换
+ ]6 I: \& ~; N5 H for (size_t i=0;i<vItem.size();i++)9 C) F7 F, t) q! f+ W4 Y L/ u
{- ?6 z% D& o* z% M) I) A
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! C7 O9 W+ c" `' J! j+ g
pInvSort->Add(vItem.nIndex);
" Z4 Q' r" I+ x4 ` }! [" O! c; F8 |/ ?* F. X) t
BYTE nDestPos = 0;
8 N! y- v! c1 C& S6 ^ for (int i=0;i<MAX_INVENTORY;i++)
$ T$ R/ p" M# U4 s& Y) q {( E/ |' A ]1 {, o, ~6 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; d! q# s. `' w3 K, v if (pItemElem)
7 T5 {+ |) @/ m( C {, [7 p9 D, `6 o" x3 X# L: f
if (IsUsingItem(pItemElem))
. X. N, W1 X3 v! `& u* ]3 v: ~ {
* W- c4 ]5 }+ ?6 ^* @$ B //这个位置无法放 \- _: }& Y9 x r; n3 J" Y* d
nDestPos++;$ j2 l' H8 M1 E: Q( m& @) Q
}
/ w5 ^0 u+ J5 y$ e7 b+ W- V6 L2 X }
8 h. D5 J* a5 k' N) r BYTE nSrc = pInvSort->GetItemSrc(i);
+ {2 w0 {) z2 |- }: D pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, V# D- |2 ?. ]5 V if (pItemElem)% I0 ]5 ?1 d8 Z
{ |/ c1 m* T& P6 C2 z# b% h
if (IsUsingItem(pItemElem))# L: D' ?( \" u4 a+ U
{
' L B# [' Y/ A6 F( \ c //这个道具无法移动,跳过
2 h2 b1 W' g; G3 Y" e# P continue;
( h$ @7 U. S( x }/ y$ Y' ~) e2 D* [! K
}else{
- U# Z3 z1 i' F' t/ I9 f //空位置 不用动2 s$ \' u' g5 V* K
continue;* a8 w9 L8 b5 q- w2 c& ~
}
W/ I* t' @7 ~* u! K9 L2 @% n //////////////////////////////////////////////////////////////////////////9 y8 m ]9 _ J& E) P6 J% a
//开始移动
8 U& J8 v% {' o9 D if (nSrc == nDestPos)
& ]* b9 U+ c0 y$ b {
1 i/ k4 J5 |9 ]+ o //原地不动
. m4 T* f9 m3 o. N2 N: C& q! z; \ nDestPos++;
: |" w$ _) x% F3 e$ W continue;
* ]0 o; a& e3 ?8 U$ p; E }4 k/ d& p* J7 r" k& C
pInvSort->MoveItem(i,nDestPos);
- N y+ [' H) M. V/ U! I g_DPlay.SendMoveItem(0,nSrc,nDestPos);% L: y* `% Q v
Sleep(5);# a# k9 s/ A( w
//Error("移动 - %d->%d",nSrc,nDestPos);
9 L) r; C, U+ G K nDestPos++;7 a, V1 f' N# o2 C
}
+ Q# }/ J! V4 S0 T //取第一个元素的信息
& d3 I& \" E' r1 l- B) M /*
H' i; }7 e. U. E# D if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 h( F! I1 l. P: J# s" p
{
' {, Z8 u. m) M2 {; i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- {! q( }) \, l/ r# ^
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 y0 Q' a0 \2 y$ Y4 R/ L
}
8 l9 ]$ n# d0 z l% b+ M$ t */
$ C" L# N @# R! D+ ^ //////////////////////////////////////////////////////////////////////////5 K Z* |. c4 ?3 {
break;
1 V: Q; p. j+ Y/ R% X$ H# n+ D }
! F, k9 `: i- [ w }
& S2 W! R1 v- i$ r0 g& V* ]}
- d9 c" U3 E' P% D3 ?6 \m_wndMenu.SetVisible(FALSE);( B4 \" I+ D/ d
; C, l A( B0 m/ ~; \* {' h* v--------------------------------------------------------------------------------------------------------
4 S# n: S. V1 e9 X( @; ~( n$ {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 \, `0 N$ ^! C2 _5 j{
9 j( \. U0 v. \- sBaseMouseCursor();0 ~" n3 q2 P8 E6 L! |
}1 W) v4 ?5 `2 D6 D# z" M( Q6 N
在其下添加:' ~* r# a! N/ y% j: X9 y% T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ K' d+ J# F- }" ]' P{
0 V/ h; f w: um_wndMenu.DeleteAllMenu();
( m# M; ^* j+ F' g' M) Am_wndMenu.CreateMenu(this);
9 G8 _( w0 N) n: Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); V/ }. j2 q; ~9 `& p
0 i- @! s. V' X% d1 W* a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
T+ z3 Z G7 L. ], P u{
$ k) r, Q: S; l //P以上级别才可以删除所有道具
# t. e$ l! ^6 D l d6 Q% ^( v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* z) v$ Z9 O4 y0 N+ q3 ]1 `}
% y/ L! e/ u! ]# D dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
D- g2 G2 n9 N/ v% N' gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ k3 k2 Y. A' x( i" y+ O J$ e4 Y
m_wndMenu.SetFocus();) V# f4 L$ q' z1 m( |, _1 e
}
7 D8 g s8 v' W) ?$ s------------------------------------------------------------------------------------------------------------
e0 ?# \ x" D! M% c" f# z- P*************************" u* g. E: Y, L) B' j
WndField.h文件
" `& h% ~" P5 J: |*************************3 L$ B+ T! _, h% {% T
搜索:BOOL m_bReport;
5 D# {4 {# T4 d9 w其后添加:# l: ^8 A4 H. \6 K+ s2 K
CWndMenu m_wndMenu;
4 }- b: m0 k1 i) b7 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) B. t; A; ^: ]其后添加:0 E% z# e' ^# Q. p5 T
virtual void OnRButtonUp(UINT nFlags, CPoint point);; l4 p3 \# `7 _! P( n: b+ h% `
$ ]+ M+ i" @: a* q# {, W
1 `' o; y: Z) E' v7 v |
|