|
|
源文件中_Interface文件夹下WndField.cpp文件
; j8 r1 L9 {- k# d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); r y k. P/ D/ S% r# k0 R- ~$ T
2 K; [4 C# q; n3 \4 Nstruct sItem0 {. u$ @- N! Q! W* a2 P
{- ~( U; p7 H G6 v, R3 m) D
DWORD dwId;
, M) g1 f4 E# H1 wDWORD dwKind2;
+ {4 n$ v' c: W R, `+ b& e( BDWORD dwItemId;* m0 n5 `7 t0 I$ r
BYTE nIndex;2 W% p h! C9 ]3 r! c/ y' N& v* X
sItem(){
: T- P4 V, T' P+ d9 a, f# B dwId = dwKind2 = dwItemId = nIndex = 0;; H: n! Q% `% @
}
* l9 V: X v6 r* _bool operator < (const sItem p2)
" x* y" W2 d5 \1 q2 }* N{
2 P. N$ A% U1 l) b- d8 v( @ if (dwKind2 == p2.dwKind2)- h5 l+ Q, `8 H7 P
{. Q5 S) f+ m- s- _/ m
return dwItemId < p2.dwItemId;
! O5 C5 P6 b5 J: p. z% Y7 \ }else{
& K: A; ^0 G& C0 Y6 e return dwKind2 < p2.dwKind2;
* t9 T- j4 g5 m+ B' Z }5 J6 V, {; ~3 N3 P* z. V, K' v
}+ I: \7 U; B; K
};: [8 H2 D) D D
class CInventorySort
( u- T6 Q% g$ H; d{
+ A t! U5 F: i0 w7 N- \: Npublic:" o; Z- B. k; y9 Q
CInventorySort()
* y; O* W+ Y( H5 o1 x$ y: A{* z# [$ S: n- @. q
m_dwPos = 0;' H( w. M {/ E$ `
}
. ~" @% K1 t f+ Q~CInventorySort(){}# L, g) Y5 _! o$ y
private:
' ~6 r7 t f0 d4 E, S, j qsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' c7 I1 w- l9 _7 F& e; x/ m' z0 S5 {0 iDWORD m_dwPos; D2 K( U; I/ V |6 `1 L* @9 G
public:
; l' \1 w+ z Q; {9 Nvoid Add(BYTE nIndex)$ m f: w+ K& }; S/ q; _
{
^; l8 O4 y& W V# H if (m_dwPos >= MAX_INVENTORY)
2 K: s5 j3 P( m v/ c i {
- \0 j& S$ s9 C9 K* \ return;
( D4 `# g" _5 ?+ U7 y, B' z }6 }( g0 O/ S" }# q2 T3 I+ Q
m_Item[m_dwPos].nIndex = nIndex;. L# [) n6 W0 Q4 \9 G
m_Item[m_dwPos].dwId = m_dwPos;: T% d8 k" [# [ R/ P- O g1 J
m_dwPos++;, x* g) _9 T* F$ o* u# L0 v
}
% M* x# A0 p. j$ c" f, s* d! Q2 IBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! ?7 L/ ~4 S& Y{9 {4 ]% t8 k# i) g0 G
for (int i=0;i<MAX_INVENTORY;i++)
7 r: C3 V! \* I& \3 a {9 ~* W" B( g+ [, V2 m5 p2 d) y# C+ N
if (m_Item.dwId == dwId)
+ ^4 j( _9 D ? {* v9 S- L7 h8 i& Q
return m_Item.nIndex;0 Y" Z( l4 ~ G$ K2 k8 [ y' v7 w% s
}
) A+ a2 i; F$ n) e. y, d: Y) `$ h }7 h3 p2 f' _3 `, {3 `) x7 l
return 255;& v `2 q& v9 { L
}1 s7 l, z! p0 Z4 b3 Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( P; A1 O h0 ^* v{
+ Z! I- l# K) d" [! { BYTE nTmp = 0;
3 C6 {: o$ J1 \+ T bool bDest = false,bSrc = false;2 |9 Q' @2 O- r9 f
for (int i=0;i<MAX_INVENTORY;i++)) d& q; X4 a2 a* u) @2 | J _
{% F' D9 R4 g; m3 s; P2 p
if (dwSrcId == m_Item.dwId)
% ]3 f6 n- S! Q- z6 }/ B! n! m {0 C) W) t1 H( B* G* t
//id相等 则 改变对应的dest和src4 \9 |! ?, P3 r
nTmp = m_Item.nIndex;1 ]1 f( C( p+ h g4 ?7 W& r
m_Item.nIndex = dest;* d, _8 E7 _' x* d% v Y3 o5 Q% S/ p
}$ a4 \; z; h& P1 B j: }
}
5 {( N. v/ O! | m1 ` //临时数据保存完毕,交换开始. M& T5 N7 D+ o w+ p* ~# Q- q2 o
for (int i=0;i<MAX_INVENTORY;i++)
: n) ~$ ^( ~8 W: g {" P) m2 K! Z1 t
if (dest == m_Item.nIndex)% Q* f1 ?- K; _/ r
{+ ]3 t& a' i* Z- w9 O
//id相等 则 改变对应的dest和src# g4 ]: R8 w8 Q: H
m_Item.nIndex = nTmp;) h2 V5 W8 q& s* B' P
}
+ e4 b1 y! R+ r9 B9 M9 G+ b }
' A7 \& a Q# d0 F}
) r$ e/ ~* M. Z* u' h T};
9 W g& X( D8 |4 t2 n' z n5 K-------------------------------------------------------------------------
' |- B U6 o5 ?% P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 E! q0 L7 T$ S2 K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! d$ U3 K+ k( x1 z( A$ A: `9 J紧靠其上添加:
( F# y. J! @+ Nif( pWndBase == &m_wndMenu )
; `5 g% R6 y- i1 Y. s J0 |. p( ^{
! Y7 y% o$ i4 c" |7 h( o switch( nID )
( I% }: T2 u$ b/ t# J {
& {/ d: K! i7 u3 H3 H case 2:8 ~$ n8 C9 z: i0 W
{
0 P; K& q- J" s/ s Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 b( `3 |' y2 i6 ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* l; B4 \. V# @3 |8 @
{3 ~9 s) p$ I& G: i7 I
break;: y d$ V1 O1 x% f$ n a' V7 M" Y
}
8 f( E: k" ~2 v0 R( n8 u; m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ g9 D+ r. k1 x2 F, n' W
{
/ V+ X D+ f7 @ l Q/ B3 F* B9 {# y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 G4 Z: ?- A7 T2 o$ a1 F& m if( !pItemElem )
% b% @/ i7 F, M continue;
7 }. |7 _1 Z# \* q. }9 P if(pItemElem->GetExtra() > 0)& } E2 Q( G$ n b& T
continue;
# w+ v% k& {" l6 I' b if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; W' a9 G0 y# r! [ continue;
, L, K \6 `4 S% X9 C. p if( g_pPlayer->IsUsing( pItemElem ) )5 x3 M! p9 [/ ?0 L
continue;# C. H6 a. q3 C/ N/ F, o# K
if( pItemElem->IsUndestructable() == TRUE )* a3 x5 ~& L0 U- V0 }, m
{8 |/ P9 r7 a& |7 J. q+ L2 S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 v+ k6 H$ Z6 B4 t/ ^+ ` continue;
; b- }0 p' Q/ J }8 ^/ U0 v( T2 r) f2 c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 [5 X' w5 W4 c
}
& P/ [6 z7 B& \& t break;
, f: N7 V% M+ b0 t% l }
5 O3 U' ?" {3 m case 1:
6 r7 v% S& O/ Z& F) R# V! G {! v/ a$ m/ F( G `& u0 @; Q+ E! {; [
//整理背包! Q9 `9 U, |5 a& @4 d( N
//////////////////////////////////////////////////////////////////////////" Q" G' J/ X- O7 ]3 r1 ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ L' g1 Y q/ s& k //////////////////////////////////////////////////////////////////////////& p- Z7 W0 Z5 N' u) I2 H/ F+ o
//////////////////////////////////////////////////////////////////////////" ^+ _( o9 ]: ^5 n# k: B2 F
CInventorySort* pInvSort = new CInventorySort;
8 ^, X* j" p ^8 o6 x% i9 s vector <sItem> vItem;
c# ~7 ~9 ]/ y- l: o vItem.resize(MAX_INVENTORY);//初始化大小
7 l( S, |) r% l! q+ i9 @. F9 e //////////////////////////////////////////////////////////////////////////) u* ?0 s& j' H- q- A
//填充数据- {1 {" [8 S: _+ L% E
for (int i=0;i<MAX_INVENTORY;i++)+ i) a3 h2 O" k o# m" q$ U+ I
{8 n( Z. L6 S& ]1 V3 K& Q) G! m6 E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); U2 }& d+ u2 N. m' ` u
if (!pItemElem)0 }0 d; D, N% P! E0 B6 n3 l
{2 {9 e7 E- I2 \5 k& k7 O
vItem.dwKind2 = 0xffffffff;- T5 l( B% [. K7 V5 z
vItem.dwItemId = 0xffffffff;. F: W9 m/ _# N3 z8 U
vItem.nIndex = i;% U1 ?! T; o# m/ m9 L9 s& r
}else {# V8 [' I7 d2 |
ItemProp* pProp = pItemElem->GetProp();1 A7 b% `2 s9 u" B* Q2 k. Z; i
vItem.dwKind2 = pProp->dwItemKind2;
4 e) G) e. o6 Y/ g/ P; h9 J vItem.dwItemId = pItemElem->m_dwItemId;$ c/ e" B) }9 ^( Y a, ?3 y8 f
vItem.nIndex = i;
6 R& ~; ] G! X+ q! P' o9 h' X }1 Q! H }6 b& _7 M: F) H8 q: a) {2 Y# w
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# [$ X# P$ ~) \0 A6 K }
, R5 H! Q8 k1 {/ P: h //////////////////////////////////////////////////////////////////////////" R+ A8 A3 Z; k/ b
sort(vItem.begin(),vItem.end());//排序
4 ], }9 D ?4 r, c //////////////////////////////////////////////////////////////////////////
- O3 V" X7 F' h W: x& ~ //交换
* |% q4 h) v# c8 H2 t1 X# P. p1 A* ^ for (size_t i=0;i<vItem.size();i++)
& {- o3 {; y! [8 \ {
8 H" B, q" g5 S' S //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 J% r9 Q3 u3 }) @
pInvSort->Add(vItem.nIndex);: B H) y6 ]- p2 d+ O# t; M
}6 Z) T1 K U% Y5 k- i# o
BYTE nDestPos = 0;
& {' @( p' R( [9 _8 W7 f9 r% f for (int i=0;i<MAX_INVENTORY;i++)! X$ |5 h3 [5 J
{1 z6 U6 ^9 T- W8 O1 u. i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" a T4 n- a& u+ ]
if (pItemElem)
% G5 r8 k' Z1 N& O! a {
7 p( \( @/ o3 N, a& a" [ if (IsUsingItem(pItemElem)); J8 a& q; q0 a
{
3 V/ m8 O; `# @' F9 _- c6 F4 | //这个位置无法放8 e! O6 o) |+ ]) P: o& ^& O% E
nDestPos++;
; T* N2 Y$ Z1 [9 V! z' M' i- H }
0 d3 w! e) |0 O. c2 j |. M }
! ^+ ~3 V$ L2 S7 _0 ] BYTE nSrc = pInvSort->GetItemSrc(i);% T3 D! Q5 i6 V9 w& H4 p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: ]5 O& |$ r% a N' l6 | if (pItemElem)
3 r3 G5 {3 l5 I9 n, d _# H" G+ M. p% ] {
$ [: L4 l* c1 Y( d if (IsUsingItem(pItemElem))4 A- n: P* a, {' K( V9 J: H( e& X
{
5 |) w- F# O7 R. s& d' K8 p6 w //这个道具无法移动,跳过. F( _6 \& B: l% Z) m
continue;' E" a8 c: p2 Z+ L ]
}. F0 x( ]9 R1 d; i
}else{- @ G: T) B S) H" [9 w) U! T
//空位置 不用动. E- f0 M# Y, Q2 z, ]
continue;+ m( t% l+ g3 J! P8 z2 l6 z8 z
} H4 k M! q% J2 r/ A7 G
//////////////////////////////////////////////////////////////////////////
* X; a3 A! Q; U/ d //开始移动2 Z1 u/ K" U- U) A
if (nSrc == nDestPos)" S4 g. A1 t7 L0 J! _) y
{
5 A$ [2 V; I4 a' l( m //原地不动
1 y6 `9 G- z- C( u, D9 x nDestPos++;
+ S( o1 ]& K8 S, y+ h6 b. ^ continue;
7 K4 x2 s1 ?- w+ s+ n }
; I' z5 B6 J% b: [6 r pInvSort->MoveItem(i,nDestPos);# z" D. M) ^" X, c0 R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& t& A5 k! m& m" [8 c) x$ c( B; } Sleep(5); Y- W3 K) {7 O0 b
//Error("移动 - %d->%d",nSrc,nDestPos);
/ M4 F+ y& H9 e2 R& N. ] `0 i nDestPos++;/ L8 X) ?0 a8 c2 w; @6 t+ ]
}0 I2 k5 u$ T$ ?$ i- d$ O2 T
//取第一个元素的信息4 F) U( N( p# ?3 f- l, T7 d
/*
7 r, j6 I$ D# X if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), \& c7 V9 d7 N; u4 o( s! n/ u
{2 \% ]( O$ j# [) H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ P2 `/ S- t, g0 M, |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ M+ |, p6 R. ?+ G }
0 C' ]4 t8 ~# Z* R/ `0 i0 Q */
8 [" a) T, f/ v) k# B7 S //////////////////////////////////////////////////////////////////////////
7 B8 \4 k4 V) R1 d2 X& i: l break;. i( J& J* V+ k9 Y, V
}" _ ~: L' Q9 L+ n2 [, R
}
5 {6 S5 y( E6 v: I/ @3 m. C" s1 p}
) ?$ \( ~8 l, p( _' D& dm_wndMenu.SetVisible(FALSE);
: C' o i+ I7 v& ]4 C% {; _0 _ _4 |* s4 Z
--------------------------------------------------------------------------------------------------------
9 r) O$ t: x: y- I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! c7 U: J3 R& D- ?1 D+ l- e/ e{
/ I3 u; i% E0 NBaseMouseCursor();
8 Z1 H% n' k* W0 Q, }- Q}0 Q. i/ k R$ b9 x+ Q8 S
在其下添加:( E, |7 j3 }! y# E
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# p, c5 |0 o" j/ T3 ?
{9 {3 x" T2 E9 j. w8 |! b- J
m_wndMenu.DeleteAllMenu();
* ?2 W7 v0 v: V/ k; p7 c2 rm_wndMenu.CreateMenu(this);. G _* ~; W" p* f6 j9 u2 W; l
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( i' }7 Y- K/ d3 R" `
4 g; f+ e$ r7 p0 h! `4 d( v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 h& j2 _/ w3 r4 D
{1 n: B7 k, J f0 K, @! x+ `+ N
//P以上级别才可以删除所有道具& P/ n" H+ `+ T0 n8 a4 u! Z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' K, @1 {7 X8 r9 f/ |8 h
}
0 w8 n) g2 j2 @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 ~# o* t. }& f, Im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
t G0 o: u, em_wndMenu.SetFocus();) M7 W- G/ K, i9 q
}! M T# I3 o3 r6 k8 Y
------------------------------------------------------------------------------------------------------------$ y( z& e4 D" b, [* \3 W* c
*************************
( C; {0 J% F6 N! n$ ~WndField.h文件5 R! _2 |- y. s, q
*************************4 W% h0 c1 [2 K
搜索:BOOL m_bReport;
% O5 g7 Q: m* | o% j2 Z其后添加:
% C! X8 q0 J* r) T3 z. y( K( O" }CWndMenu m_wndMenu;
$ c/ ?0 C! u# e- o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 J' [# {% P/ Z8 w2 j4 S其后添加:4 U) V0 u: C9 m$ ~8 y
virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ f- o0 v' ~+ _: G9 r5 U3 q: q' E2 i G6 }4 {) ]3 X
0 w: n7 l" l, p
|
|