|
|
源文件中_Interface文件夹下WndField.cpp文件
3 p S5 R" C; ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% f, j% e0 U S; q6 |
1 d; J# Y- \, P6 m! n* k
struct sItem; Z; k+ [% @+ {; m
{
0 m: I8 Q7 s7 F9 O9 F# D- {; LDWORD dwId;
( ]- [! s4 ?# {8 S( s. S. I9 [DWORD dwKind2;
! | e. ]0 w, K+ F6 QDWORD dwItemId;
& U% {8 m+ X2 n* x8 I W! FBYTE nIndex;
/ k$ p4 A; g# e% {4 u3 S1 YsItem(){
5 u' B7 ]/ n1 }5 w+ ^ dwId = dwKind2 = dwItemId = nIndex = 0;
2 v3 F. Y' c4 j7 d' \: l}" n& C5 x; n7 Z- s4 b0 g
bool operator < (const sItem p2) U% d# y3 ~+ O" j& {! d
{5 C0 W6 ~7 b2 s" X
if (dwKind2 == p2.dwKind2)
) O+ z& C0 H9 j) Q {1 d1 u, |( P! |7 Q
return dwItemId < p2.dwItemId;7 |3 V( H' \+ A. x2 l' j
}else{
- ^! |/ ~$ p% Q7 o$ ] l return dwKind2 < p2.dwKind2;3 D+ Q3 i/ |% }9 S1 y; V& L* n
}
% X2 x% m% C! u) `, n: q}' T9 T& r0 A, \% |$ d' ^$ J, |& s
};0 c; T# @% s- a% j/ H* r# @/ l& f
class CInventorySort+ G/ G) s8 d* _- q, o1 g
{1 A2 {- N6 Z' g" [+ T" r x
public:5 Q8 O) H1 P8 e5 Y
CInventorySort()2 V2 }6 f5 n. b' {" h
{7 t2 W2 j8 _5 F, |) l
m_dwPos = 0;/ K# N$ k: b' G+ ]
}
; ^) i1 a; l8 I5 }; B$ A~CInventorySort(){}
7 k; t# [# w5 M9 G4 Mprivate:
1 K& j2 e2 F, x' X3 ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# X |9 A" k2 s$ p) U
DWORD m_dwPos;
+ R' d# y# a6 j% T) ]public:
" ]/ D. p3 z! l' t* gvoid Add(BYTE nIndex)
9 B$ ?) P8 D' Q4 C{
3 z& K- D; s& R$ N; V if (m_dwPos >= MAX_INVENTORY)
! V3 ]( O3 f) K, J3 A; k {
$ b! N' K- P, [& |8 t- `" J return;1 u: u9 w' w% Y& U: ^ q0 r
}
& M' ]( i6 h! _( B5 ]; h$ \ m_Item[m_dwPos].nIndex = nIndex;
- R' _) `) D5 L m_Item[m_dwPos].dwId = m_dwPos;* z% H$ S5 a ?. v
m_dwPos++;& F& o6 Y" E( ~" N0 ]) `9 y
}' X0 Y& M0 O& E! @3 T6 m. ^: b
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( F! m. V% @6 A+ {! \0 ^3 l{8 F2 O4 R& y8 x/ _
for (int i=0;i<MAX_INVENTORY;i++)2 G* S% ~. ` D2 s2 V
{
6 H2 B. t2 o5 Z" V& g; k! [0 _4 N if (m_Item.dwId == dwId)3 s, g: F: f7 B+ J$ G9 \+ D: N
{: S! B( J: [3 y6 M: u3 x0 B
return m_Item.nIndex;
H2 \! [; _. o }
# R g% Z# }1 x. B }
/ r; b5 c* J: Q return 255;, z6 t3 F3 s' N( i( \
}7 l4 I) |; O( A8 P5 j- c y- j
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% b' n; M3 [$ Q7 d. s{( H8 q; b6 T4 L8 p
BYTE nTmp = 0;9 U8 ?7 U3 `: D+ s" ~8 `* v, L6 `
bool bDest = false,bSrc = false;8 Z9 e" p3 {0 j- s# b' b5 Y
for (int i=0;i<MAX_INVENTORY;i++)8 Q0 n3 m+ T. H3 N; M
{& s& R0 t; z1 P: t
if (dwSrcId == m_Item.dwId)
( Z) }& }% C2 P {* j# K3 G0 w$ U/ l5 M
//id相等 则 改变对应的dest和src% G% V/ d/ h* t; [- H4 z) W
nTmp = m_Item.nIndex;- H& L8 T. S3 L- \1 @4 K! H, U
m_Item.nIndex = dest;
. \* {! c' V) K- F; \5 Z) {0 C }4 ]: A- W2 P2 _. |8 }. M8 h
}- I, ~; `- a2 h/ o7 _& J9 ^- Z# D
//临时数据保存完毕,交换开始3 K" [2 J6 D! T( Q
for (int i=0;i<MAX_INVENTORY;i++)
1 ]6 j0 O. k; B5 M- z& p { q0 [ `/ Y4 m/ F$ l
if (dest == m_Item.nIndex)
8 O% B. F& K" @5 N {9 k9 T o7 @ l
//id相等 则 改变对应的dest和src( W1 {/ h* }: N- J
m_Item.nIndex = nTmp;& L6 V+ _% M" x a% Y0 z
}, P1 j' ]& F. }! `) d4 ~& ]
}
8 }. d' p- c% `; x}
. I5 m3 M w4 r. R+ H. r: }};, j4 Y: F+ |/ L2 p' T/ S" z
-------------------------------------------------------------------------
2 w, Q1 C) [* r* o! b8 H依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 z& H9 h3 S( X/ v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% `! I7 B# ` e2 E
紧靠其上添加:
1 d: W x) _: Y x' Y4 ~; zif( pWndBase == &m_wndMenu )# G" ?) h: C4 _% u, W9 P. E
{: z+ a: L* F( L8 f* g3 C
switch( nID ): O) R }3 S3 O8 m7 D0 C6 @
{: b# S+ n4 M" L, r
case 2: J2 S, M; C; h
{
. p6 m$ R6 @$ w4 U! h4 v! G. l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ k N, K; k6 {/ E- g ]2 [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ q* R8 C h3 ^1 _5 \ w5 `
{
3 B: C3 l- w+ ]& t9 x break;
% S3 O- f/ Z% q& j- l( ~/ x% g9 O }0 @& f9 U6 {6 S- k
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 L0 Q6 b+ I9 M( R
{+ s* k+ n0 K1 {7 D a" w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! L' d6 J/ L" e: b) l$ q if( !pItemElem )
+ C# D3 W9 K9 z continue;( R) U% g6 I$ X- |& f1 e
if(pItemElem->GetExtra() > 0)) `: m8 v' t+ l4 T$ x
continue;. n% r: x F: D+ l0 S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , s; ]% Y6 \. x' V
continue;
2 K# O. F6 u a5 |1 Z if( g_pPlayer->IsUsing( pItemElem ) )
% m% S5 d! m# w# ^ continue;! N% A* c2 q6 i6 m2 t) r
if( pItemElem->IsUndestructable() == TRUE )- y& b: B9 g& q( I2 L- Y5 f
{4 ?) a/ q7 s6 C! I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% V! v3 t4 P l' p
continue;
: E' H9 L& @* h: d1 X- H }3 U ?4 o: G9 W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* g$ Z8 i6 |& C$ y' |( a2 j }3 S4 c& m; z6 E' t! V# }9 W
break;# M4 }0 f' g/ L5 A
}% b F+ U$ T8 y( d
case 1:
" _* T+ G9 c2 ]6 x" J3 N3 ] {
& x2 c0 M' X# p" J //整理背包
; d# Q4 d s6 Q0 z //////////////////////////////////////////////////////////////////////////
* Q0 T# p9 _- o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, S( y L) w/ e1 O6 V7 ^- B
//////////////////////////////////////////////////////////////////////////6 j$ f* ]+ l! |5 Q
//////////////////////////////////////////////////////////////////////////
( r) c4 ?' h" k2 L6 U" V# D CInventorySort* pInvSort = new CInventorySort;
1 Q; N, j1 {* F" v: c; U vector <sItem> vItem;
" ]) N- X# m* H+ ]- l6 z% P5 x vItem.resize(MAX_INVENTORY);//初始化大小
4 h! {, @; E0 M2 f/ [ //////////////////////////////////////////////////////////////////////////
4 x: U- K i9 A- x, n* T //填充数据6 K9 i3 H O& [5 O
for (int i=0;i<MAX_INVENTORY;i++)
* E% x7 b* A u. x {; y- W* E' R; J) I: T! H7 X& d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 w. J5 o% u8 K' z4 H, o/ x7 b if (!pItemElem)9 ]9 j1 h: {' E
{
' ~ ~9 F% L" U) l! m5 q vItem.dwKind2 = 0xffffffff;2 P/ O; F5 V8 k1 ~" S
vItem.dwItemId = 0xffffffff;
6 {4 O' n/ c6 C& s7 q vItem.nIndex = i;1 Y2 j0 a/ ]( |
}else {
+ e; `* x0 y# a) e1 F0 p+ `0 G X ItemProp* pProp = pItemElem->GetProp();
( L ]! ?% M" F- ` vItem.dwKind2 = pProp->dwItemKind2;
. R8 c; ]/ e$ y0 _8 B) w vItem.dwItemId = pItemElem->m_dwItemId;
. L P5 g3 Y3 i" ] f vItem.nIndex = i;) i+ z1 B' Q1 {& \1 {& w. _6 R# ^
}
3 I) v* Q4 m& A& g2 ~$ x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); @3 n K; T& x2 r" g3 q
}
& u; I$ F2 @$ H7 c- b; n //////////////////////////////////////////////////////////////////////////) t+ ?* C0 X \# D% c; F, [4 y6 ?
sort(vItem.begin(),vItem.end());//排序
( Y8 U/ v( Y* t# @5 m //////////////////////////////////////////////////////////////////////////6 m1 C$ A$ J ?) e6 b+ p
//交换
# r7 O2 F2 c# M4 e% j2 r for (size_t i=0;i<vItem.size();i++)) z: n( r( D& n& E8 [
{2 S" O; Y3 _2 g. ~' ~- J/ F7 S, P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, U$ {- I0 E ?
pInvSort->Add(vItem.nIndex);+ A/ ?+ m' }; p! a! ^; h3 ]
}
/ r- ?' r0 d8 ]( D6 G BYTE nDestPos = 0;
& } S9 g) I' T' r1 t for (int i=0;i<MAX_INVENTORY;i++)
# S- K5 R1 C0 X; w {
$ @' _2 b6 R0 r' ^7 D3 y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' G5 ]6 \7 W* Z( Y5 m# v
if (pItemElem)* ]5 r) B; R# S+ x- G& f! u
{
% o8 U. t0 H1 |" `3 T1 v, ?6 A8 I0 q) S if (IsUsingItem(pItemElem))3 o* L/ X: T H8 i+ a- u
{
$ ~$ k' z$ v2 f; D4 t5 f //这个位置无法放$ h* G: V5 O% ]/ ?8 p" n
nDestPos++;6 a: q4 K) {8 i9 C9 F# ?$ R
}9 @4 a) B0 M0 |' F+ x7 B
}; S1 e& b' H4 x, `' _5 }/ v
BYTE nSrc = pInvSort->GetItemSrc(i);% n- c& @9 v/ F0 R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# h+ P9 U5 c# \/ y( Z if (pItemElem)) M0 `: {* w8 M, U1 K0 b
{" [. k- S/ y; c
if (IsUsingItem(pItemElem))8 q; t" n# F( B2 I. J# D- _% G
{
, m4 o$ p2 o) q //这个道具无法移动,跳过
' v) J( i: h1 X% Z; l: T& w continue;6 C: h# C1 w: t
}
. K7 o+ i9 E- a6 ^4 g( C/ H* z. w }else{( m* a$ h. A- }8 D' i ~6 u
//空位置 不用动3 c: E( e! D2 R ^4 Z
continue;/ q o* E, Y& F3 W% w* u7 w
}
- L0 i0 s, ^2 i; ? //////////////////////////////////////////////////////////////////////////
4 Y8 _$ I- W0 z //开始移动2 F( L/ [2 P4 F" k1 F" V
if (nSrc == nDestPos)
) ?! V( B5 _; t# Q1 a o" u {" t# E. K7 m+ x/ o5 j# U& M
//原地不动
' {: D6 O: \* g T nDestPos++;6 K' s: `( N, ^: L0 z6 R
continue;# t( j' H% T1 i [4 w, q
}
% {4 Y9 R! o! t6 X& l e& E* I pInvSort->MoveItem(i,nDestPos); |0 x7 E9 Z$ I/ A3 c
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
C+ L0 i8 z( F5 O) H" T0 O Sleep(5);
' \& p8 g; b1 g/ B+ k //Error("移动 - %d->%d",nSrc,nDestPos);
, `4 y9 ` H. y9 ^: m3 I& i nDestPos++;
; ]" Y+ O# A2 L& o2 D2 w } M1 n5 q: h2 p* w& H/ ?
//取第一个元素的信息( e" l9 t( y0 x+ \: }9 ?" W( W
/*+ s: \6 H; Q2 u' t# N" _+ T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 ?( p: d% N0 N4 P
{2 B* ~6 K; ]) o n8 i4 N! J
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! g8 L* _6 U& j$ i3 O' Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! B* i! Y" \( k7 l }
. f4 B6 V- w( t; G* Z3 n */
; w& x9 m. E4 m4 A, c0 H //////////////////////////////////////////////////////////////////////////
) r7 Z& c( {" V0 ~ break;
. ^" z# l) {+ u! E" J9 t }
0 b. d. ~' l7 C% c; C1 o) N }
$ K8 L/ R6 Y, p7 K}7 @3 |8 s7 Y# E9 Z; x$ V6 J/ ~7 k
m_wndMenu.SetVisible(FALSE);# i7 S4 q) C |, @/ c* t) q
- H) t4 ^$ J* {% Q4 w3 l6 N$ l
--------------------------------------------------------------------------------------------------------1 E1 {; H. M+ ]( r/ |( M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" ~; \: K% e& V7 Z( V+ |. B{
( K$ k) P/ [( A7 n. C( zBaseMouseCursor();, ]: g+ C, A6 `. p( Y( n2 F
}0 ^4 j5 H( T: M' m# H
在其下添加:
1 |5 V! s1 Y# Z( j- tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# W' m1 P Y4 o C9 R) E{
" F3 l+ W% D; Y6 L. Om_wndMenu.DeleteAllMenu();( h* H7 p. `, X$ [
m_wndMenu.CreateMenu(this);
+ b5 q. P3 T; Y6 _3 n }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# |& h9 s# f* @
+ z: D9 @. f/ j! a# u( F. `$ ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! B& P- L+ M/ ]8 T
{
% V3 o1 h5 ^0 @" [9 |; a: W/ f2 G //P以上级别才可以删除所有道具1 u2 R' R/ d& g
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) A- o* r, K2 D) k, o! ~/ X
}
& d- m# U3 e! T0 t, U, H0 o# r1 Qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' Q* E8 ?- x( q! H, `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, L6 x( ^+ q. m# om_wndMenu.SetFocus();; u% y* ^% z G+ p- Y: P
}
6 D3 Q! R$ Q5 `) w$ K: A6 x$ I------------------------------------------------------------------------------------------------------------$ E/ }9 g p1 Z: t0 w4 E% I5 e
*************************
1 t- T Z5 S* R! F! _) RWndField.h文件+ \5 a+ A$ E% y
*************************3 u4 q% o% U" f- Z4 S
搜索:BOOL m_bReport;3 W2 P. W8 Q; g; z* m, ^* D
其后添加:/ ?$ M- A/ L0 `; P' r: g, \1 A
CWndMenu m_wndMenu;
/ F8 _6 Q, @1 z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* z* _. s) w3 ]* z+ z4 T
其后添加:9 R" Q( Y7 _) t: }$ S: V
virtual void OnRButtonUp(UINT nFlags, CPoint point);* f+ D; {0 v. ]7 A3 {
6 @5 V: M- Q' {
- r" ` p/ ? I/ u |
|