|
|
源文件中_Interface文件夹下WndField.cpp文件
`& K# b% z. c搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 S" X' Y" A7 O" b( m' F# s3 b1 X. B- j9 T" f# {/ z
struct sItem% y9 v; q) E1 g+ g! ]
{
1 \3 C, W( m1 C8 N3 X5 vDWORD dwId;5 J1 S: I# I! O& S
DWORD dwKind2;8 n; `$ h7 L3 H7 p* _# E
DWORD dwItemId;
" J! r8 c# o: ]. w/ r( H. B- mBYTE nIndex;2 M, t+ I" `+ K: N
sItem(){
6 e* v5 X w4 R0 G8 N6 ]/ a0 [: ]8 ? dwId = dwKind2 = dwItemId = nIndex = 0;7 m% a6 j3 U% k- G* |" E. t+ m
}* l4 [- r$ ^! Q9 M
bool operator < (const sItem p2), \. g. f1 ]6 ~9 j; _8 l
{
" u }8 }* u! p: s8 ^+ K if (dwKind2 == p2.dwKind2)9 r* x! l. v+ E/ V3 L( J
{
! i# u, Q: L! `6 N; O return dwItemId < p2.dwItemId;+ L4 s# X3 f& A1 J
}else{5 T& _$ u# t# b( y- ]
return dwKind2 < p2.dwKind2;
8 d( q$ y& b3 ~, j }
# I% s) M/ R0 y8 O5 h# h}
) X- N" k7 a# z" Z5 ?" p- L};
' s$ c+ `' G- f# J: Wclass CInventorySort6 M9 O: _& W0 ^8 ?" Y" R
{$ X5 E$ m% u" P- j
public:
! J" P- R" N& n9 u! @) E) u5 }5 K0 b+ _CInventorySort()( u$ `* i. ~% a( g- o6 L
{. z% @9 P$ M2 c2 ?+ d& E
m_dwPos = 0;
3 l+ W+ C) H7 D7 i/ ?( c5 o& y! a}
$ F2 M9 @" V& o~CInventorySort(){}. R/ u" F+ w4 V+ j
private:4 [' o* S' ^" Y7 S9 j1 b& Y1 m+ u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( N) z4 r+ O2 ]7 g& c
DWORD m_dwPos;
7 m5 U( u& A6 y+ E- v R) P$ ~public:
$ | U1 @8 F( Y" _( Tvoid Add(BYTE nIndex)8 @4 H, ?8 H! X# c
{; m3 u0 B* R3 [4 w2 F
if (m_dwPos >= MAX_INVENTORY)6 F$ \* v+ F' w4 [# C
{
" u8 F, _/ N m2 Y4 f( B return;
8 T2 y- }) H3 M% I0 _ }
/ J. W( X; q8 n7 d4 R1 t; Z5 {+ i4 d, ^ m_Item[m_dwPos].nIndex = nIndex;% B+ f g7 C, P( s$ G, H
m_Item[m_dwPos].dwId = m_dwPos;
& a, c' L9 o% m1 P; p" o2 e7 k m_dwPos++;
) o e G, n T' u7 H# U}" i5 e$ y/ N$ v% M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 i$ z v; Q4 k" L% V{
/ L/ b2 `4 V, V I for (int i=0;i<MAX_INVENTORY;i++)( C- Y, a( V2 D* r" U
{
; h4 S! m4 \# @5 p$ }1 A+ D; @ if (m_Item.dwId == dwId)
9 D& y4 r7 x( b {
/ d/ Y" s* L! g$ f* y) R2 D& I' R+ \ return m_Item.nIndex;
$ R2 o7 \/ w/ R0 h }, a$ H% {2 h) n( |& P2 q5 }; w
}
, g/ k9 A2 u% S! z4 G" m2 f return 255;8 g3 X1 s) G$ v
}
, t1 n& h; P: |% r# V+ e, {. Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 P9 x- B1 V: U1 I$ X{( f0 Q; c. B( c
BYTE nTmp = 0;* S, M4 ~7 V/ c+ P3 S
bool bDest = false,bSrc = false;0 z7 b! o; s( X8 q3 ~, H
for (int i=0;i<MAX_INVENTORY;i++)
% C7 T- _7 ]0 ~0 a {
" C. }6 x8 g/ j+ W0 b$ s if (dwSrcId == m_Item.dwId)$ U$ v: F+ A: `$ s
{
" N/ P: l: B" Y //id相等 则 改变对应的dest和src7 z, J! ? o" ?
nTmp = m_Item.nIndex;( S, W' ]+ [/ Y: z( r
m_Item.nIndex = dest;
; o( N; P' g# U& t7 `; ?# e4 a }; A' }# A k2 Y7 e4 I/ o
}! u5 G" O0 X% C1 @
//临时数据保存完毕,交换开始, c$ o8 O# z7 z/ t% ~
for (int i=0;i<MAX_INVENTORY;i++)' S/ M6 j$ U, q u! `
{. _6 R. Q- ]7 X4 h$ h
if (dest == m_Item.nIndex)
# h }, t# ^5 p- J {" v: g' K6 |8 I( c% ^9 T
//id相等 则 改变对应的dest和src
0 f' q) \7 U$ d- m- p' x m_Item.nIndex = nTmp;
- C- Z, s4 c! ^/ G% j1 _; _( K( b }
) t# s% v4 }/ a$ O* a; B0 p4 s$ o4 E F }
$ h! z/ g P% C* O6 y) X5 U}
" R: n9 j+ N8 ]. A) b; Z. P};
: A* _; u9 s% S! w7 _8 k-------------------------------------------------------------------------
! R% F( L) _4 k% P( q. \6 l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' u4 w% W4 f: m% F, h& c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 K$ n# U* Q% y& w) n) u" K紧靠其上添加:+ b: N& [0 p: }: W% s; x
if( pWndBase == &m_wndMenu )
8 W7 X2 {" A* f' ^ i5 i7 d{
* p: f# a. u9 [; g" t5 } switch( nID )
8 H+ h+ ?7 {" c c6 s0 | {& {* G6 r# u9 e. V; Y+ z+ g
case 2:
% m5 ^0 ] f8 \3 P Q) `2 @ {2 e8 A2 M2 q/ U' `% Q( h+ W( o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 |; O- ], k1 A, W/ H( |
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 S n9 j/ A. g& ] {. b6 M/ `% e7 x( W$ E
break;7 M+ g! ~& J( U4 D& [: K
}
3 s8 M! w# Y3 T" U" i3 T5 l for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& o5 v) d( c; c' N
{- W; q1 B2 h# w5 R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ U3 p+ B, h y9 V3 |) D. {2 [% d if( !pItemElem )
$ W# d' I7 t- O) w }7 |! o$ p3 { continue;: A; e2 }2 d6 g$ M; ]" v' b
if(pItemElem->GetExtra() > 0)
$ s% _0 A9 G( K! d continue;
9 J* p5 c; J5 v! T: v* R if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ q$ y% h' }0 a7 f- `2 W+ _3 T+ S continue;
3 D" D, C6 [% w) ` if( g_pPlayer->IsUsing( pItemElem ) )
5 C) d2 x% G; u0 _& l continue;
6 V6 W; l* q! d4 g if( pItemElem->IsUndestructable() == TRUE )
6 T4 W+ t% `, } {
8 C; h A) C" ]/ e g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( g/ M k; ]/ S6 X8 t2 \
continue;
& |: H# M: ?3 R! w& _ }
4 E6 [. C+ @- A7 K4 ` g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" C! w. R* x! i" |$ ]" J n. x( v }6 ^3 {4 `1 a3 h U" R
break;5 `) l8 H5 D# ]5 k" S. u* n8 y
}& G+ f' h2 @, v0 q3 L% x- R
case 1:
9 C0 J" M, Y; \" T5 N {9 @0 K1 L9 M8 E6 Q* O
//整理背包
8 \+ T: e% U- l //////////////////////////////////////////////////////////////////////////
/ c+ x. G1 v; d. k( q3 k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- d& P! j7 m- o. V8 [% K3 S //////////////////////////////////////////////////////////////////////////. ^! [3 L5 l C
//////////////////////////////////////////////////////////////////////////& C7 R( P! j- d
CInventorySort* pInvSort = new CInventorySort;
; x8 T% j1 n. j vector <sItem> vItem;/ ~8 Z3 B) K. e; ^! w0 Y
vItem.resize(MAX_INVENTORY);//初始化大小
{* K/ z Q5 b2 T //////////////////////////////////////////////////////////////////////////
- j+ K- `1 y3 H //填充数据1 W2 k( A- b, e1 E( B+ v3 V- l7 A8 E- n- o
for (int i=0;i<MAX_INVENTORY;i++)1 `% R$ r* x; |
{; N. D; f/ b! W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" @% K1 O- i+ z
if (!pItemElem)
, m. l: ~8 A( W' |" C0 T& E1 h; m {! y+ T ^( K# p& r# X# a
vItem.dwKind2 = 0xffffffff;
/ s- n% D) ~/ z& I vItem.dwItemId = 0xffffffff;
# E. r1 ?4 I8 K vItem.nIndex = i;6 }+ [* D8 n& Z+ U9 R% l
}else {
6 B3 q' O; j ^& a2 P! Y ItemProp* pProp = pItemElem->GetProp();
6 d6 P6 U5 w- q: X3 O4 N# z vItem.dwKind2 = pProp->dwItemKind2;3 }( l8 ~6 w+ l5 j+ U1 \4 \8 e. _% _
vItem.dwItemId = pItemElem->m_dwItemId;% U5 P$ X+ ?$ v5 a, y. |
vItem.nIndex = i;7 V. _" ^4 l8 u1 T9 Z' o7 Z# t7 L
}& f* u3 i) n. ]# y& a P, L, I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" ?& }' C; _% F$ h G }
9 ~9 l, I6 h1 \+ G //////////////////////////////////////////////////////////////////////////" }# f" \, E R) K& W1 A5 Y
sort(vItem.begin(),vItem.end());//排序9 V. Y. G# n# @
//////////////////////////////////////////////////////////////////////////$ z% s9 }! l- I: q& H# ^ v3 K- H
//交换
|+ C+ D% J8 U+ c4 Z1 e for (size_t i=0;i<vItem.size();i++)( Y" M% [+ ]" y8 p1 G
{
6 Z$ {6 {! c" r& d3 V //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- @0 a% _6 }% v
pInvSort->Add(vItem.nIndex);9 E; e% f2 Y- r+ [
}, s% y" c* U2 }5 r0 `
BYTE nDestPos = 0;
m0 U3 t9 B" a3 p7 \! ^# k* X5 q for (int i=0;i<MAX_INVENTORY;i++)
4 R% A9 Q$ x# {) T4 _2 `% ` {
4 D, w3 d+ _" X% J' i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 ?5 d( g9 t+ M+ V# m- t
if (pItemElem)
X2 _9 A6 _; Q {% t& }8 E8 u8 o. [' ]( g
if (IsUsingItem(pItemElem))& u1 V% _/ F+ X9 b: R# ?
{4 e/ s" `1 G3 s# g
//这个位置无法放
( W x7 ]2 ^+ T u6 f nDestPos++;6 |+ f% O% V2 B0 O1 B
}
$ Y6 Z: ?. b5 \6 k* } }
$ X1 c+ a6 `3 v$ t: n9 m0 Y BYTE nSrc = pInvSort->GetItemSrc(i);2 h+ Z8 ]: P" v& A) `$ ?1 E; h
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# C/ ^) g! b( F1 M+ ?% F if (pItemElem)
9 D+ _6 ^$ _. `. v/ ?3 F {
9 a& f# u8 {: x+ c; e( y% ~ if (IsUsingItem(pItemElem))* `3 U" b3 V/ K- N, ]8 {2 S
{
$ w/ j6 Y( m& X- o //这个道具无法移动,跳过
2 N2 H/ W- A0 h1 u# E; y+ x% y& u: U continue;
5 ]4 S Q0 N6 V' X% Y$ B$ i5 d; V3 z }
+ [- U" C9 S1 I' p( w! L+ l }else{1 W/ n$ A+ k& f+ S
//空位置 不用动
$ d3 c( N" W# P" Z4 I3 E, Z continue;
5 E7 H6 Z$ Q2 [& y }9 w/ F, \9 |+ \9 N( i& c
//////////////////////////////////////////////////////////////////////////1 Z! x1 [3 P9 ~
//开始移动$ h3 L- B5 t6 \, l
if (nSrc == nDestPos)) X( ~5 ?0 v% x; l3 P+ \" S
{
2 R3 g% r+ u( A4 e, J //原地不动
1 S# j+ A3 w2 e% t& f/ e nDestPos++;& B5 X; _- k( b5 Z7 d
continue;' b2 _3 [3 i* C- A/ k. u
}2 W& z- b' |, S4 Z# H
pInvSort->MoveItem(i,nDestPos);
/ B E8 k9 p2 ~! \2 y* A g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) r5 |- I1 M2 @ G+ h Sleep(5);
; H) R+ b8 v# R" X //Error("移动 - %d->%d",nSrc,nDestPos);, m# E; g1 m3 z3 |- m. V5 ^% d
nDestPos++;/ F0 ]* G9 N1 g/ p5 P9 s3 I
}
& K D" Z9 i6 E- m- ~5 M8 { //取第一个元素的信息
: K! u" t# F' t1 s- ]8 u /*( R& v+ A+ t! `/ @/ {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* N: t# b2 t9 X2 l {
) a7 Z! B% B( T0 j9 D% O8 E1 V Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& t3 ^/ ^0 m l5 |; U0 [, s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 l' i5 J' v* I X3 q. `/ h) G
}$ N! B' h2 x( @0 M9 t2 h" O
*/7 S! E1 u6 Z. Q! S$ @2 H. e
//////////////////////////////////////////////////////////////////////////) W1 q/ `+ X4 b2 B3 J: `( Y
break;$ r( l' y* R% O, R, n/ W( @0 q
}
, m E5 X1 h2 g7 @2 w } / \" B$ M6 i% R! m9 @6 U
}! q7 j' l/ \( x9 m
m_wndMenu.SetVisible(FALSE);8 Z3 X! f% _6 R% v5 y7 u
. a4 A, S5 B( Q9 o3 D' o& B: U" p" R$ K--------------------------------------------------------------------------------------------------------
- ?, k9 b1 H" Z8 L; _0 L: _搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, T, D+ \+ b5 Y0 \2 I# i8 U( S{
3 W2 p1 @, t/ `$ H; r) _BaseMouseCursor();
6 L" i4 H& O9 k3 G. B4 ~}
# K, ^: O. z, y在其下添加:! f: y& J @8 [3 x% D; C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 H2 a2 I9 N" P* C* E5 E/ s
{0 E! N0 V8 G% g0 \, R
m_wndMenu.DeleteAllMenu();5 g6 O# P; S3 j$ v
m_wndMenu.CreateMenu(this);
3 l" C, [0 g9 `5 i$ h/ `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, ] b( t8 Y( O. ?
0 b) P$ W5 L6 a# G7 b) Iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ a& x9 p6 [) Q8 w( A
{
9 ]5 ]) a/ ?% z: z //P以上级别才可以删除所有道具4 i: R% K$ m* K: r5 m. f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 L2 m6 ]/ {5 o2 b}7 q' [' j0 M. {
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 K$ P5 x0 _: sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); S% n! _: U- C! Y c8 c& ~
m_wndMenu.SetFocus();/ K- e- N4 C8 ]! Q: l- P* ]& M
}
3 H* ]8 _# R2 |2 u2 e------------------------------------------------------------------------------------------------------------
% c- h6 r: t- J4 G( h% [************************* ? R+ S9 x- |' u t
WndField.h文件
. M8 [1 y: p* e8 [ `. K' @# t: k6 f- T*************************$ Z1 H: \+ B0 @3 F& L( q# K4 B* E
搜索:BOOL m_bReport;
( n# j: J0 d0 t, z9 C其后添加:: c. ~% `: j5 j1 L
CWndMenu m_wndMenu;
% O/ D4 x1 t0 S& d1 H0 u/ w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- g: f& |7 C% j其后添加:" j% @* F, n, C1 `( o) K7 ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 ^. h+ Q6 z+ y
* o+ ~ i. [: T7 A" z8 R q7 b, Q/ T* s
5 I: y. k$ L* f7 L/ w2 d4 u/ B |
|