|
|
源文件中_Interface文件夹下WndField.cpp文件
- m3 D M. l3 X* ]+ L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 a, R$ H& I' S6 R& B2 @
% }0 \8 [" n4 s' i% Estruct sItem
7 ^& t" G ^' o& [" A8 C) B{8 o: c) i1 P9 k! W; h4 y7 K% t) B( d
DWORD dwId;
. n& I `# v8 o( iDWORD dwKind2;' f$ I* k/ x5 T; P
DWORD dwItemId;
U! b& d `/ iBYTE nIndex;
1 `( o, f1 R( o: S R$ z. zsItem(){
0 J3 k% H/ ]7 Q; p dwId = dwKind2 = dwItemId = nIndex = 0;
2 r. \4 }2 [) g* E+ ?: Q}1 G6 I+ c4 q5 y6 J g6 A2 r
bool operator < (const sItem p2)1 A0 A2 R+ ^; ?$ n, O( {- V" i- Z
{6 f3 U/ h O" V2 G1 v6 y
if (dwKind2 == p2.dwKind2)8 G% {5 H' j" P, J* u! ?7 G
{
% o2 N6 \; Q' {+ t4 j return dwItemId < p2.dwItemId;" R& f+ e5 _9 _0 Q+ N
}else{
0 |7 i) U$ H4 z' h: E return dwKind2 < p2.dwKind2;, y' W7 N, Q) A& t
}
" i5 ^/ s; Z, x j' X}
' ]) r4 o; J" `7 M+ e. }1 i};
# r$ s- d" s% S. o- F1 `class CInventorySort5 v5 a5 b; J* G' C, C
{% ?0 E( [% S& v$ y4 b* A/ V
public:
6 D9 W4 Y- C" i y/ i) M, C+ ~CInventorySort()
' n, |+ l9 ~- @( ?- u: X& D- F+ @. R{
& N6 l" g( S% X8 M# ?) Y7 Z m_dwPos = 0;3 H6 E9 l5 c2 z9 F/ [; p% p
}9 A2 `) s$ e5 A N
~CInventorySort(){}7 r* p# u% i+ N$ T* V2 F
private:5 t$ M- X* R& d% q* c5 S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& ]+ g5 q2 O B' h% nDWORD m_dwPos;
# |* h6 f" I2 {1 h Z9 O' Epublic:: H9 M {- E6 o' X* u9 H3 L1 e
void Add(BYTE nIndex)% W7 K; {6 f, o
{
, ^0 v2 b2 n: b7 v& w if (m_dwPos >= MAX_INVENTORY)6 C4 c" \, S; y
{& u$ ~9 @$ G2 e% J. k9 u
return;' Y3 f! Q# l2 W( N: I. G: d# Q. }
}$ Y1 s4 `0 L& g' z2 p6 M
m_Item[m_dwPos].nIndex = nIndex;/ P7 p+ S ]" p, r: z9 B @, }
m_Item[m_dwPos].dwId = m_dwPos;
1 P5 w* T! G0 p( a0 j( o m_dwPos++;
* A' V. b# x6 g7 [ S2 k1 W7 ]- F}3 ~" @+ _9 _% V& n2 v6 f4 J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* }$ {/ |5 h/ N' \7 \. c
{
9 _6 u, d5 x8 q& K* ^3 ~, k& Z7 j for (int i=0;i<MAX_INVENTORY;i++) `1 S7 b* [: ]5 l6 [# ~* m) c
{
) P4 R) G$ p6 s: E( b" o- f! I if (m_Item.dwId == dwId)
) }7 I7 }8 }4 C+ J$ R& L% u$ ^# O {
5 a+ {( U5 R: H return m_Item.nIndex;
! ~4 h4 M% V3 _( w( ]; O( ` }
# V! O: ~ U+ L3 L- {# O" h }
. u8 h* Y; m4 U return 255;% g4 {, {7 x4 K/ p8 l' W7 P1 W
}
+ P: W4 N* d! vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 z7 T ~6 P' _1 }
{
2 v u8 Z9 M* K/ c+ w+ F BYTE nTmp = 0;$ |7 m6 m, a2 T4 `
bool bDest = false,bSrc = false;1 H/ x6 g% W7 V6 p' F8 S
for (int i=0;i<MAX_INVENTORY;i++): d" W) Q0 O6 U
{
1 G! X* m# A9 U* |8 Y if (dwSrcId == m_Item.dwId)) K! _) J% i3 n3 Z" O3 ?
{
4 }. d! x- D; O. } //id相等 则 改变对应的dest和src
! b2 S; r/ ^' u+ s( ~ nTmp = m_Item.nIndex; R5 v: c7 l2 N/ i
m_Item.nIndex = dest;7 Q8 D2 y4 [' A; p9 U( g. H/ h8 d
}
4 r2 U+ M9 D2 [! W' ? }4 ^5 T$ y) r# \
//临时数据保存完毕,交换开始( P# B* p& X, R, x5 m1 h! D& \
for (int i=0;i<MAX_INVENTORY;i++) W0 f% V7 A+ `8 s/ M4 q
{# _ ?$ q% t2 g1 k
if (dest == m_Item.nIndex)
/ b/ m" g' ~+ q& W2 T* R# f2 X {9 G: o& @( t1 b; O; g
//id相等 则 改变对应的dest和src
( M8 F$ |6 B3 f3 Z2 k m_Item.nIndex = nTmp;; `$ b( b F! u7 G7 ~: g
}
5 c; Q7 f, U4 |- P. O }) \: h: D2 a4 [# b4 T" p5 K3 H( e
}- g- x4 @# ?4 A! k5 A
};6 s) I. c- T0 U
-------------------------------------------------------------------------
1 ?/ L+ V& z7 [, H+ \5 p6 W" U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ C; x2 V }/ K1 l6 R4 O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ e2 v% e+ l, x: g6 i1 F紧靠其上添加:$ [( y& R2 l$ p, W% q" i
if( pWndBase == &m_wndMenu )
# c2 p4 Z- S& f! J$ U9 v% {{
2 Q8 b7 z) V2 u switch( nID )
n* b* d8 g" \. {3 x! t {
0 L7 @4 |! w) M g. W case 2:1 F% u* T1 C- f0 ~8 D
{$ x: A; W: X+ x, b/ T, a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ z9 ~3 q+ F* t2 F% J' y1 N( s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 e, m; t E! R3 n) `6 d P
{
6 @8 x( o# V. |& k! d' L# f2 @9 v break;( h F3 Q7 V8 E% `' M' a
}% ]) o( X9 Q' r) n/ _" h4 w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 l! d9 b% a: I {
2 _( G% ^0 p2 x) r z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 M* L+ X2 g8 m: t7 L3 a) v
if( !pItemElem )
4 H$ \ g% K; j4 s1 D# N5 U9 G continue;
9 ` A9 f) Y4 g7 G: E# G if(pItemElem->GetExtra() > 0)
, @0 s) U1 x) L- p* i- G5 s- t continue;
2 j% F n" X4 [' G0 X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . h$ y& \/ g9 C: P3 o( V
continue;" ]& t& g) h7 V/ ?, S6 c/ D0 y
if( g_pPlayer->IsUsing( pItemElem ) )
9 U2 X' R. g1 D continue;3 `" Y" G/ y7 R# i
if( pItemElem->IsUndestructable() == TRUE )/ S1 W5 R# B: c6 T/ v2 }+ w( d
{
# Q: c. h H& ] g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 p$ z7 N: N1 l/ x2 l' {) L
continue;
# t( ?' X; I. C. p! F7 Y7 ? }4 F% t3 p5 s7 w& @3 K
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ C6 ^, P8 i) X0 l7 e }7 m% ~# h |6 Z: }- a
break;
* Y( j0 u7 W# A' @- J }- }9 X9 T) M* Y2 c* L3 M* \+ s
case 1:
& P/ w2 d. L& b7 G {
$ q" f4 B, F' M3 t% u //整理背包9 C( v7 N: D# _1 Q6 ~) n( V+ z8 E
//////////////////////////////////////////////////////////////////////////
9 L( ], Y# U* b) \5 d/ d" B. ?8 [ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: b$ i3 Q3 \$ Y6 s Z //////////////////////////////////////////////////////////////////////////
8 P6 ?9 e* K; I) E //////////////////////////////////////////////////////////////////////////
3 [' e8 H. C! S5 ~1 ? CInventorySort* pInvSort = new CInventorySort;
$ r# U7 g0 K1 w$ t3 m9 P1 ~ vector <sItem> vItem;. V6 [- x& Y8 ~, i/ M4 D
vItem.resize(MAX_INVENTORY);//初始化大小+ Y1 m9 _, F: B J4 d' [
//////////////////////////////////////////////////////////////////////////
2 a4 e& ~( D( p: X. q9 Q" j //填充数据; W) X g7 F$ Y' t
for (int i=0;i<MAX_INVENTORY;i++)
0 W+ M. v7 @1 d# ~- h {
7 u( q! c+ y* K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! }$ O) s0 w3 v1 @* W if (!pItemElem)
; ~- k+ c# i* d/ m! A" y; r7 d {
6 X& X/ @# k: ` vItem.dwKind2 = 0xffffffff;6 h1 A9 c9 c. f, D/ X" n/ @
vItem.dwItemId = 0xffffffff; t/ X; ]: k* w$ I7 {$ U
vItem.nIndex = i;+ \- y- ]- F7 ~6 K
}else {
, _: _% `7 X; [8 f# K ItemProp* pProp = pItemElem->GetProp();$ c0 |( R7 e0 m* j' C
vItem.dwKind2 = pProp->dwItemKind2;
5 I6 m9 ~# d5 `% P0 d3 i/ T1 a- P vItem.dwItemId = pItemElem->m_dwItemId;- d, c- K2 d% |/ ]( B1 f' F( L: U
vItem.nIndex = i;+ u. [1 T* t I6 F: d5 r
}
( ?6 Y3 h2 ~& O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- }6 j; J* W) V% q% }! v0 S# k
}. H; Q G m' v; d. g: \
//////////////////////////////////////////////////////////////////////////
+ a0 v/ W3 t4 a& g; P, D! d sort(vItem.begin(),vItem.end());//排序 [$ b4 }+ w8 t" X4 H5 F5 u e, D% Q% F- z
//////////////////////////////////////////////////////////////////////////
* k7 D/ a, L. o* {& d/ z //交换
6 s3 k7 V: o- G) X& N( f for (size_t i=0;i<vItem.size();i++)
; i) D, R- t4 y0 I& X- [ {7 i. a) e& J, [# K2 D; M9 m
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% r5 ?* W3 K$ F8 V3 V
pInvSort->Add(vItem.nIndex);1 p& T6 @2 W4 ]# R; G
}
/ ]; G+ `) n7 f) n BYTE nDestPos = 0;
* a$ p+ l! X- O- A& { k for (int i=0;i<MAX_INVENTORY;i++)
2 \2 J1 m' b) @ H {& G. G9 u2 d0 ~& c! }: m% q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% \+ E4 @9 \0 G/ \
if (pItemElem)
0 X+ t0 d: m' H5 n @" z {9 i2 R# j! L* w, p4 I
if (IsUsingItem(pItemElem))
7 k+ u, E0 h6 i7 N {2 V3 u+ t4 E! _9 o$ {' h+ [/ A
//这个位置无法放5 t7 h$ v0 j6 j, @6 ? y* C
nDestPos++;. B) V C G( ?
}: O0 e1 I# N! P& m
}
% Z" V4 A L) {" q BYTE nSrc = pInvSort->GetItemSrc(i);, U# h; z4 O% B& w5 v5 A: K
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 h, Y5 [ j+ [8 {# { if (pItemElem). _% o! V: {- _$ V) q
{
& O# m% ^: y0 K6 a; B7 X if (IsUsingItem(pItemElem))
; ?) g- F. f% `; G% j0 ^( _* p5 K {
7 x4 l" ?' j2 K, i2 n# r6 D //这个道具无法移动,跳过
0 Z* Z9 B- {, \9 C7 P7 E1 Y continue;1 X8 ]7 ~ A" J% i
}
" u! _0 _! ]. n) T }else{
) @+ r$ z3 H3 ?$ l" `$ _ //空位置 不用动
3 Q0 b) t" E. r. e; C! T/ I continue;. e, T1 `% k' _. }6 _) s* i
}
: B. o# r) B3 @ //////////////////////////////////////////////////////////////////////////7 {0 H2 U z$ U- P( B Y6 r6 D% A' _4 z
//开始移动
; N* [; R B- Q if (nSrc == nDestPos)
0 @# Z" y; \! O$ g5 J+ O {# l; A, y% X0 @' a/ w
//原地不动
( x' ~- o) d% L Q# R' r( @ nDestPos++;
7 {7 p+ O# t4 e. K b# Z continue;
0 J6 G) S9 J* W- u }
4 Z3 |. X0 k" D6 }# F+ w' e pInvSort->MoveItem(i,nDestPos);8 J9 V8 U& O. M m* Y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
U7 Y' T' X5 q# k# |. u Sleep(5);; W, w! Z) g% h* c& Y [
//Error("移动 - %d->%d",nSrc,nDestPos);1 a. T/ u9 T, Q/ K4 U
nDestPos++;* I0 k0 Z6 o: _; T) F
}) `8 n# `6 U: T2 U4 G$ v* w* `
//取第一个元素的信息, g* L! e& X2 i
/*
& R1 s# _4 G" h Q7 E& l4 B if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 K7 ~3 w5 ^0 b( j' M
{3 ~: b5 v- J9 ^0 k* I P$ q0 Y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 [: K, ~9 s, s1 T+ f% [) j) H
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 t5 n( B, o. c2 X }
. f% E- X3 y3 B8 V; M/ F5 q1 v */2 E) E# z- ]3 k
//////////////////////////////////////////////////////////////////////////1 `2 U' X; j5 k, F5 J, q4 n4 L3 z
break;
# }+ q; Y/ x! x$ o2 C* h }0 R- V0 T0 \$ k7 G# f- f
}
! t1 O8 k0 I2 Z4 ~* V}& w; [5 m& s) l3 e4 r
m_wndMenu.SetVisible(FALSE);
. D! [, w& g8 T; T4 a6 U4 j$ z/ O9 n; B+ n
--------------------------------------------------------------------------------------------------------
$ o+ [4 q2 Q: R/ N- `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, ~$ [; r" d7 w2 N- N{. E* ^8 N" ?% y7 j+ t( B( a
BaseMouseCursor();
) |6 X' s1 V4 Z' }6 V}
0 P0 [( X. ]5 Z* |+ J) `( C在其下添加:
% _$ Q; E! R1 ^- ~) Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 Q; s8 R5 J- s6 x& T% E l
{4 q* V) F. ?! _7 W. `3 L
m_wndMenu.DeleteAllMenu();
9 J" e Q( h- _( r6 Z8 am_wndMenu.CreateMenu(this);
7 T% f2 b- a" Vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! q) L" a9 n V3 y
3 P/ T2 k; S& V' C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: t4 h: n" ^# H& l( q6 [: N& X{* X# R& O9 l( m" }2 B' N, K& y6 x# @ |
//P以上级别才可以删除所有道具0 p$ w' G4 \% U) _8 S- X
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& C; k8 c1 Y9 T& _6 q/ R
}
3 `, D. I! @5 X, { x3 Zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 Z5 Z2 e' f- a u C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& P, o$ m8 q6 b# bm_wndMenu.SetFocus();. x9 v) B3 X' [
}" L. U# t' Z w1 G& Z+ b- ~
------------------------------------------------------------------------------------------------------------
' w' S! V6 v. O5 y8 H" p*************************: A2 M6 K. O5 T9 Y' H7 |/ H
WndField.h文件- Z, d& F) b: {# R9 k
*************************
8 @% z0 s. F6 C* P搜索:BOOL m_bReport;: k& N6 t$ E* u( J \
其后添加:7 }+ E# B% o# c. d, C
CWndMenu m_wndMenu;5 `" O$ P5 l: u4 y9 L6 A& J) R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( i- I( E6 d6 ~1 R; G8 O$ }$ }
其后添加:% _5 V6 x0 U9 N8 {9 X# r
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 W5 n, Y& q* E4 L# ?; [# @: m( T/ b9 f
# o& ^& e( K- m: [9 j' e3 C; x T |
|