|
|
源文件中_Interface文件夹下WndField.cpp文件; I8 s7 E8 |0 ?# V
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' z0 t9 n* s& Y6 [* ~
- E' f) Q y. N g( Gstruct sItem
8 a* ~( S0 F" G3 h. h* O+ }8 ?{# e/ J2 ^; s8 R/ \8 F( I/ ]
DWORD dwId;' @2 Z) Q: L& p7 w
DWORD dwKind2;
1 a# u0 ]) r4 wDWORD dwItemId;
3 @0 i& b1 p* W9 lBYTE nIndex;9 \0 n4 s3 w. z \) z+ o
sItem(){9 A7 o4 T5 t$ q+ H" r
dwId = dwKind2 = dwItemId = nIndex = 0;
/ |9 t" P7 r' y1 j5 Z/ e}
: g! d: y2 G1 `7 [bool operator < (const sItem p2)8 R8 T0 W, v# U. K2 \
{
2 G& J' c- s8 P1 J" D) F& u7 z) Y if (dwKind2 == p2.dwKind2)
: I& T* T- K9 n4 }" I" m) ] {
% |3 j* D- g( i# Z. Q* A: o" T return dwItemId < p2.dwItemId;
' [& f+ |) U$ K! y2 J8 T$ t# u6 c }else{
: ?$ C7 `% b2 H( h r! ` return dwKind2 < p2.dwKind2;
/ o: y: r0 G9 y" `5 z; H }
; h' f3 S2 H9 ~- Z3 I}
! v! P2 a6 {8 F7 ^, S: e2 `};# e6 W1 p$ {2 `) j7 |: H" b7 Y
class CInventorySort0 b7 M% P3 L9 v/ ]1 q
{* ~$ J: Q: r1 I L3 K3 h$ i" s+ {
public:
- P% `3 A" r. CCInventorySort(); s" p9 ~/ ~$ _. A6 C+ y, B
{, f7 t. G3 W) |8 k" O% N
m_dwPos = 0;7 j4 e% s8 U. Q3 U" [3 j
}
$ @! d8 `; a. T* k~CInventorySort(){}0 J+ j6 I9 S/ G* ~3 |/ x, E
private:3 @8 |! k# k8 {8 k" \- w3 ~% N2 X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" B8 h( B \* o# S8 B z7 `8 ADWORD m_dwPos;( K6 q+ w% T: G) e6 D. m# {
public:
+ i" z+ A; x/ K+ M' kvoid Add(BYTE nIndex): e0 C3 K4 }9 l6 Z1 e: r. o6 K
{
7 P2 x' V4 x% i2 I1 t if (m_dwPos >= MAX_INVENTORY)
& j6 m! O u7 [6 v" E0 w1 d {0 g2 V* V4 T" O8 k: N- l3 l* ^
return;
7 J0 P) a# G2 c% a, W, t2 Y& r$ t }3 c- J! [$ J) ~9 {$ G4 A
m_Item[m_dwPos].nIndex = nIndex;# w( j- y8 I" Y+ a+ t" f8 N# _& w7 B
m_Item[m_dwPos].dwId = m_dwPos;* e2 V j, w8 R+ K% V
m_dwPos++; S5 t0 A S* H# H7 \
}* I6 q" d5 N4 O7 k2 a4 H- j7 a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' ?: W. p- [/ o: ^
{% ?& d5 h. ]3 a' `9 `( k) O
for (int i=0;i<MAX_INVENTORY;i++)
+ Q* U* e: M9 j$ `4 o( H {1 U' F) g4 }2 j# k
if (m_Item.dwId == dwId)
2 O% v z) z. R, e& C {
. l) i E, r7 n$ M2 J/ l0 s% } return m_Item.nIndex;
7 V4 ~. d% t, w2 S" ?& X }8 R: J. U; X$ p
} o1 U8 X: V7 H, l% [) N% T: U
return 255;
8 e8 W* {4 Y/ \; G" ?) `}
7 R. }4 z8 j5 }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 ]6 C5 ~$ R5 c& Z
{+ \1 U( t/ \9 ]+ y' {4 j
BYTE nTmp = 0;
5 t: d1 n$ x2 S& q" [: X# ^ bool bDest = false,bSrc = false;3 u: t0 |6 z) L7 @. J t; o6 {
for (int i=0;i<MAX_INVENTORY;i++)5 e1 V- Y$ r" }
{
# \; T Q( i" N if (dwSrcId == m_Item.dwId)! H. v: p$ n* r
{& j- }4 b$ n- Z1 F6 Z0 ~* Q
//id相等 则 改变对应的dest和src
8 I+ p* k5 U; m. j8 D$ @ nTmp = m_Item.nIndex;
# K3 i7 T0 }; m4 T' J8 P% l m_Item.nIndex = dest;! j! r& \; n0 h8 ^
}, `( y; ], S" E7 m, D/ I
}
8 P6 f9 ~7 ]: h; m m //临时数据保存完毕,交换开始
' }2 }; S+ `( E# s, D for (int i=0;i<MAX_INVENTORY;i++)
7 s8 A7 a* ?; k! S {* f9 S! l% W3 B! j
if (dest == m_Item.nIndex)% Q% s% M! H4 f& D
{9 \8 ]0 D5 E3 n
//id相等 则 改变对应的dest和src; _2 q+ }, S0 ]2 X
m_Item.nIndex = nTmp;
7 ]4 W1 b8 Q' ?8 v }* c' {& {' m0 S! i7 {& z7 ?% b8 Y
}/ H4 Y. r$ ^0 R2 e
}1 s% H5 S' K: B! `- i% _
};
$ i& V9 I3 Q8 W-------------------------------------------------------------------------& @7 |" |5 P% L$ C5 w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 g" J+ O# b2 F& [
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. m6 K& I% S: q: [" z& K4 {1 [
紧靠其上添加:9 E r6 `) u3 W7 V
if( pWndBase == &m_wndMenu )
8 x; S8 `/ n+ I- D3 E{
0 t& V Z* d! V+ O switch( nID )
1 {$ [* B: U3 i! s, k {
. E' ^4 g: l) a+ B9 c( q; O case 2:
8 m8 g, r$ l) i4 }0 `% F k* P- k3 Y {% N! l2 h( ~4 V( Z5 Y1 D; |
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: t1 `9 B( A. S. N! M. u0 o if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% \4 A* I5 \/ i {
2 J4 A* _0 @) P# n1 b2 C" r break;
5 y. B% p7 X) S) ?7 M$ H- J }
; \$ i: c4 l @+ m8 e for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 q3 E* C5 I( R7 p& x. R9 Z' e
{% R2 X. ?6 b" U: U% m$ A! v, B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! F$ A# {0 I4 z; f, ^
if( !pItemElem )
- j: t% @; t6 m! c continue;4 y6 G$ j- t# p' s
if(pItemElem->GetExtra() > 0)
6 l3 L! f0 a4 D4 Q4 k0 | e: g1 C continue;) Y& j% O/ n; J0 ?' I2 ]
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 i+ v$ @# B! w0 z$ ]: o9 _
continue;8 Y V9 K6 n% w& e' l. v" n
if( g_pPlayer->IsUsing( pItemElem ) )5 c9 e( Z9 Q! {0 ? Y& |. }
continue;
6 Z% J& l; Z4 H0 z# x2 C if( pItemElem->IsUndestructable() == TRUE )* z- H0 k8 J$ N
{
+ I: }: [2 C7 ~4 `: { _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) P; [+ D+ h) m6 [3 l+ T
continue;
, }! L- l/ r7 j0 z4 L }: b+ _& m: N' g7 l; f7 a4 x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); J+ e' h+ a6 J- n9 a0 {# h4 F
}
% P" M: d6 h4 D7 |! F. C break;% ]/ Q! v6 X. `: ~) G* z. H
} }' q5 e) V/ |! W ] Q
case 1:
# E( f1 @) F* Q( m {- F& `- |: I8 T$ h) ~
//整理背包
( z$ \& v- E- q" J7 T# e //////////////////////////////////////////////////////////////////////////
: {3 {5 {- W3 A5 a. d //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" p( p- B" D- C$ O! B. x/ G
//////////////////////////////////////////////////////////////////////////3 c- ~9 t; a6 ~# ]
//////////////////////////////////////////////////////////////////////////; d0 _& @& l' h( p* a/ l% T
CInventorySort* pInvSort = new CInventorySort;
+ C: y R( e& z X* O) ^. { vector <sItem> vItem;- J" B; D' B4 H5 f! S, A" X- d
vItem.resize(MAX_INVENTORY);//初始化大小
7 Q: ?! B2 P, _4 q' { //////////////////////////////////////////////////////////////////////////
: L% t- O1 M$ Z" p% x; k //填充数据# x/ W6 }2 C0 X; ^3 r8 x
for (int i=0;i<MAX_INVENTORY;i++)
) T/ W1 f5 k1 V) r {
) a2 M9 u+ v' h" N. s6 \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 ^/ N( A' ~4 {$ F5 j3 L9 v
if (!pItemElem)& F M- z6 v& c4 V, I$ \
{
/ D0 W1 m- H8 B' \) t vItem.dwKind2 = 0xffffffff;% v |. P' Q4 L( V2 P0 A2 r
vItem.dwItemId = 0xffffffff;: {/ f0 K- O% Y, F' G
vItem.nIndex = i;
0 S& W: u8 }+ y" |" R X: W" K }else {
# M( p; ?: N( p* Z5 S5 W. {# \. M ItemProp* pProp = pItemElem->GetProp();' L9 J9 d) h- b0 |5 F1 |) I
vItem.dwKind2 = pProp->dwItemKind2;6 W7 b) J, b6 j% f) P; v
vItem.dwItemId = pItemElem->m_dwItemId;
6 c+ q9 s1 r/ W6 t; l3 f vItem.nIndex = i;5 L* N3 l$ @& o, _9 d) R( p( N
}6 }& K. c$ T1 _( u3 ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; D' F, x3 }0 L- d }
1 l# x7 Y! `) X8 e/ Z6 Q5 Q //////////////////////////////////////////////////////////////////////////
! b% c; R7 x# u& d sort(vItem.begin(),vItem.end());//排序
/ |4 U2 z5 a7 K# e //////////////////////////////////////////////////////////////////////////
) P3 y) Z% [+ z$ Y* B3 q% S //交换
. d$ @$ c X# g- R C. L0 B3 ]2 C for (size_t i=0;i<vItem.size();i++)& W* i m& X. N) n
{
% b8 R) P/ G0 j# F, ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, h6 d' L# o* X8 ?, G1 B6 Z
pInvSort->Add(vItem.nIndex);
$ H C I# F- \6 N+ R6 g }+ u8 d6 K$ P( I8 I1 \
BYTE nDestPos = 0;
$ w/ \/ O# M0 d1 b! m4 d( S# v for (int i=0;i<MAX_INVENTORY;i++)( e3 ?; ^/ l- v: S
{
1 U) l. K; K. y9 R; ]3 c7 _$ e. ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 R5 I( B# @; V
if (pItemElem)' S! `% s9 H* D
{* v6 _+ J- j+ N5 p- B" w
if (IsUsingItem(pItemElem))1 [7 D. |: J1 L5 J0 u0 O7 _ b
{1 e& a- _/ `. O, n5 f
//这个位置无法放- ^$ t9 r- U' g' k; R% m
nDestPos++;
+ S1 R5 f' W$ p7 y O }
( y2 G' U0 i) f9 \. E* m' ^& s t \ }- l) y5 _1 K3 L8 R9 L
BYTE nSrc = pInvSort->GetItemSrc(i);
: A7 H( u4 N, O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 l+ M- b. f5 `; t if (pItemElem)
% J$ N" A8 i A+ w3 H9 r7 A+ V9 m/ ~ {
: Z1 s$ V' S8 u7 U* b1 U if (IsUsingItem(pItemElem))$ g! r2 M j7 z5 X0 U% x$ x. S
{/ P0 b" Q% Z6 o. S
//这个道具无法移动,跳过5 s9 k9 J7 S1 l* R% D
continue;2 ?, c. f( ?9 s1 @
}
: u& d6 Y$ M+ A. i& | }else{
+ R3 f6 j5 k7 ~: }6 { //空位置 不用动+ V- U% v& V) b0 W+ E3 O
continue;
% V0 F& P. C' `1 Z& e! { }+ P% x/ L7 l3 u; d, r; x7 T3 {
/////////////////////////////////////////////////////////////////////////// S2 O/ n* l! z. R# L
//开始移动
' g- V! X2 z5 u3 d+ I if (nSrc == nDestPos)6 O: g( f' g6 u5 Z
{ u8 t- [/ s3 F, V- G0 l
//原地不动
# O# I* K0 s! V4 @ nDestPos++;/ P( N# G0 [6 }7 U
continue;
5 R% R" j+ r1 K! d }2 j0 l1 n8 c! z- L
pInvSort->MoveItem(i,nDestPos);
3 ^) a5 x. O( I) W( j; B g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 n" W7 k7 \, ~1 t. t! ?3 N0 M( x
Sleep(5);
) h. q6 t+ t! l+ K. [ //Error("移动 - %d->%d",nSrc,nDestPos);5 j2 n/ M" v5 n; Q5 {0 K
nDestPos++;9 x1 j2 @- B) m- K8 v8 O& h
}% S) `1 G0 T1 c3 X6 b/ f
//取第一个元素的信息8 O# _! m" m* n6 p6 L" M
/*
3 I4 B; ]9 G+ o1 |3 c, N5 U. u if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ B7 ?$ B9 B5 D1 O$ A2 Z {8 @8 ?0 G7 O& J
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 r, |1 f0 h6 {0 l g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; J- M/ Q4 q! R0 c* K
}
5 ]6 b" [. w$ F8 f! n2 { *// E- X9 |1 q, a/ M" V- X
//////////////////////////////////////////////////////////////////////////
- L9 V, ^" N4 b6 R m# j break;
2 v9 U9 ?5 e9 ~! n4 ] }
/ e P5 `& f+ L1 Y7 Z) M } 2 r7 e" e/ G0 F
}0 c* D& D" G* O- L" X* k% w
m_wndMenu.SetVisible(FALSE);
# _5 K' r3 z: K9 x, }, \/ A" y' I# ^# m# k
--------------------------------------------------------------------------------------------------------
7 T% D) Z/ Q. d& t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ E& i" Y3 z( Q, ~4 Z
{
& b# U2 X7 P. X2 U0 M9 QBaseMouseCursor();
" L1 u l2 B+ s6 _0 s& r# t% @}/ [% a9 P& @ L
在其下添加:+ d. \' F7 B1 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
C+ S- g1 T: M+ |1 _{
; c; f$ u7 ~3 z2 D$ d$ ~m_wndMenu.DeleteAllMenu();1 R# k! R- H$ v+ v3 I, `
m_wndMenu.CreateMenu(this);
/ T- A3 b4 t, B7 p& Z& z, j/ sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 b- B" _3 B) B3 w5 W
2 C/ U1 F8 m3 V0 Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 m3 m1 [ V6 _+ `; u+ A2 n5 Y{! j4 K, d5 V% I, ], ] E
//P以上级别才可以删除所有道具
& ?: ]6 _5 k& |$ |8 e+ M* P m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* m; v, ?" P* o& s6 `' _}! u/ R* j: J1 J% X) G/ T4 L7 x4 G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 b+ r" H- A+ z. F, @+ g. Im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 n+ G4 c& Z% {/ K1 }% [m_wndMenu.SetFocus();3 u; J/ I( a& i; U* O! z" w
}* O" I/ R1 r0 i$ r5 Z h: t/ M
------------------------------------------------------------------------------------------------------------! t+ z9 G! H% u8 U" |# X
*************************
1 v. A( j) t6 e5 W1 ]+ p- y! tWndField.h文件* Y4 S& G' u+ c) w z3 Y
*************************
/ p1 w' }9 }3 l; c! X$ A9 N搜索:BOOL m_bReport;4 ^& C& G8 J1 s
其后添加:; w! s+ F, X5 @$ M( \( T
CWndMenu m_wndMenu;
5 @% U( M Y( H6 h! D搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; N5 Q, l( i4 s1 A2 f: J- j
其后添加:7 x( P% ^& n/ _
virtual void OnRButtonUp(UINT nFlags, CPoint point);$ B* H3 w( L4 j/ ]
7 Y8 B" L0 W& t- ~8 y: M
& \! L; F+ _, k9 d7 j |
|