|
|
源文件中_Interface文件夹下WndField.cpp文件
1 t4 L. t7 a8 v; V" a; h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& D" g' s/ [$ D- B/ N" P2 h
' L, ~, n6 S1 `8 }* ]1 |
struct sItem" X8 y2 t2 \2 k$ k+ x$ b# n
{2 q }# M. ?4 j) u9 `9 z1 A g
DWORD dwId;4 A; `; F |$ b; t# c
DWORD dwKind2;
% @) S' S6 u0 `: V5 dDWORD dwItemId;
5 Y; {, I$ Y+ P' ] pBYTE nIndex;3 _0 h8 L l& u7 x
sItem(){
; b" _8 \' M% J2 u* n5 \; Q dwId = dwKind2 = dwItemId = nIndex = 0;1 s1 Z" H8 k0 y& S
}
6 |; K9 h+ w( Sbool operator < (const sItem p2)/ x' c* O7 g: ?; N$ {5 i
{
9 h6 K6 C) x8 Z) _9 V if (dwKind2 == p2.dwKind2); y7 o* F- X% d W- E/ n# }
{8 u' U* A) m# K. i3 v! W
return dwItemId < p2.dwItemId;
5 s4 z! y( ^) k# R4 w5 r7 k }else{5 T3 F9 M( V) W0 e
return dwKind2 < p2.dwKind2;
4 t. g: O% ?: c: `* g5 T }
E: T' T& h6 k6 [5 `1 P0 o- {2 X}' @5 j9 L' _# {( n# N. n
};; T( p2 B. K* x
class CInventorySort
. M. \4 m% M0 Z4 K& u j{
6 U* c4 C5 J0 g* b* Z/ `$ apublic:
- h9 v6 J: B: \- GCInventorySort()
) g5 o/ f! o# U* s4 a: J. }{, k3 X" L3 l W
m_dwPos = 0;
( a8 V& {) p: @, ~1 y9 D}2 V/ A# i- D* {* S" l: K
~CInventorySort(){}
1 [& e" G* ?- A9 h8 y- Eprivate:( ]2 |) m* L, f. J6 v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 R. l) O" [; d2 h: C0 T
DWORD m_dwPos;% p8 i, b1 d7 a7 ?8 }: S4 A( L
public:+ s6 M+ @& b, W9 h( X
void Add(BYTE nIndex)
6 L' t5 }: T% \* X8 @8 ]" S{
" N4 d. n# V3 w/ p5 N1 x; F/ e if (m_dwPos >= MAX_INVENTORY)9 L: d& c U0 E" V1 @% D& g
{( _0 l6 ?' K3 w1 {, I
return;, U) q7 ~1 d; Y
}
0 z& s" w( k3 ?, @7 M m_Item[m_dwPos].nIndex = nIndex;
% ]( w ~( X0 u m_Item[m_dwPos].dwId = m_dwPos;, Y# Y* ^. L& `# i
m_dwPos++;
( z) k7 ?3 |$ M8 f$ q& n1 ]" X6 \}
0 C7 P1 U8 L& h5 h& T7 _BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ {/ \+ Z# E2 u6 l' u
{
' Q0 m" G3 U' ?2 |9 ]/ Q" g+ b for (int i=0;i<MAX_INVENTORY;i++)
2 R& u/ l5 P, o3 _! H' L" ? {
* G& F& c+ V G8 ?0 R0 o" D if (m_Item.dwId == dwId)
, T5 N' E) b( A* F7 b- v. z {
2 C4 d8 U& i. v; l0 D" E5 J# p return m_Item.nIndex;
5 v v. w7 _9 Q }" j: y& c) |; m3 i( B- x2 b" I
}
{2 y) V8 j0 [% V: n! B( m return 255;
0 L" m( i* a. n* V- s# S8 G}
8 a2 O- n8 O: S) |9 X) Kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% v: ]& w" ]( h A3 [
{( \: m6 R+ g* m6 _4 s
BYTE nTmp = 0; ~* j' A) D' Z, ~
bool bDest = false,bSrc = false;, m( U7 q/ s$ T$ ?, [
for (int i=0;i<MAX_INVENTORY;i++)
8 v$ n! b" v" q6 u% F& m {% ~( f5 y2 x2 f* I8 M
if (dwSrcId == m_Item.dwId)
- B# c2 ]5 L; P# g) `3 f5 E- G! p* i {: d6 n! v* P i$ s7 r( y! ^- n
//id相等 则 改变对应的dest和src
- X3 _$ O% V7 G' {- `: Q7 p nTmp = m_Item.nIndex;
C, A: i$ @5 n0 ]/ H% k m_Item.nIndex = dest;3 {( Z! n# Z6 z$ E# j" G9 G
} u- ?6 F& S. W( g+ w, L v
}5 _) E$ j h2 c
//临时数据保存完毕,交换开始! b2 F1 S4 {2 Z, L) n
for (int i=0;i<MAX_INVENTORY;i++)
$ ] Q1 }/ }5 I5 M {
+ ~" c* p, {1 {0 Q, ~ if (dest == m_Item.nIndex)( `5 t1 m/ u' K2 a: ]9 j6 x
{7 B" W6 [6 \3 j0 e& S2 h
//id相等 则 改变对应的dest和src
/ _9 J7 d2 w! c: M8 v( g( g m_Item.nIndex = nTmp;
1 f5 j; [9 X3 m; g0 W7 |. T; M3 }& f }
) s2 h) W+ C; H' Z; w% k }
- g9 S7 I$ m# n+ x}# [$ W9 T$ h+ E2 M0 G4 S
};# B8 h4 Q* t; o7 @8 B
-------------------------------------------------------------------------
2 q* D/ o4 T+ E; x9 L) f& b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) B, \( l; g- p& l5 q0 i7 M
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 j0 k( X( e9 W8 F+ p
紧靠其上添加:/ M/ |. r* y3 x5 ~3 H* z
if( pWndBase == &m_wndMenu )! A9 Z* \6 c4 ^4 R3 \) {: h; |
{
4 k: H' b& X* S switch( nID )
8 a. O: L# m" D0 b G4 w {9 z) B9 u& l1 I+ ?
case 2:
3 K! S1 g# N' r: J! C* w {; ^; o+ _5 z, e: a1 c* C
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ h0 K) c, [3 E7 d5 w2 M
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). @, Y5 k3 J& B0 Q% I+ T# e
{
* N& v4 v6 K" A6 w7 `5 g break;
, ]) b4 z2 h$ \ }- \( A6 X6 Z. W5 d- W! X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): \; Z( L0 O. [& N: U7 v& N1 [; t
{ q+ n. n2 @- ^- C# v3 L0 c+ J, w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 V) l2 P4 }3 x
if( !pItemElem )
; |4 h& K- W3 ?# ]0 @ continue;
: p9 b3 E& s! F! j; k0 t- k if(pItemElem->GetExtra() > 0). _" D7 H o0 Q# I: w
continue;/ e% m4 I$ x; u9 W+ Y5 q3 z2 u
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 m# h- o9 k7 w1 {# M
continue;
2 H2 J3 Y# r+ \7 P5 f0 F if( g_pPlayer->IsUsing( pItemElem ) )
) p( V, E2 ^) H continue;& Z: ?& U) c) ~4 U: J* C' P
if( pItemElem->IsUndestructable() == TRUE )
. U3 k! ^# h( c3 x5 o- @5 b {! A4 v9 _6 h8 |, h( Y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# Z) c+ g( y1 O( G6 T
continue;7 g5 d: p* t; z& J
}- ^6 z' W. N! j- F9 E3 l# U; m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- p. R2 M4 z" Y
}% }( q# ~- ?) b- s& T
break;& Q! g4 ]7 G( T9 L% Q3 F5 s; F" f0 K6 ^4 h
}! a; _' k# s7 H; u8 B( e2 ^; W
case 1:9 n2 z% i- P, o+ Q' n- B
{
2 _$ v9 x1 t7 O* o, ]8 S% B4 s //整理背包
3 T2 T, w& D4 t //////////////////////////////////////////////////////////////////////////
7 ]5 C7 S9 K H. a //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 p5 l% @4 E0 Y4 M5 [
//////////////////////////////////////////////////////////////////////////
" { L1 s' {) q D //////////////////////////////////////////////////////////////////////////& F) z" \7 K; V) g2 r4 [ l! A" h
CInventorySort* pInvSort = new CInventorySort;
, Q8 b8 s+ \& T, k8 R vector <sItem> vItem;
, e9 a& N/ {9 R9 n6 Y0 L- H vItem.resize(MAX_INVENTORY);//初始化大小% `5 j9 M: N' M3 O8 K
//////////////////////////////////////////////////////////////////////////! ?: T J$ o+ w8 G
//填充数据7 r% K$ `; x) E: H
for (int i=0;i<MAX_INVENTORY;i++). _6 G% G: n' T o, R
{( I3 F, Z" G" [5 H: A3 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 ^! b# C0 r( i" z* }
if (!pItemElem)
- D( B: ~( b& N {
/ N2 G; I7 @, R( G G. ?) V( k" p1 l vItem.dwKind2 = 0xffffffff;
* ^) v, R9 I& V; \& G vItem.dwItemId = 0xffffffff;
/ ]; a* z2 }1 A) ^" S) L r vItem.nIndex = i;6 s7 x4 g7 C3 J1 L
}else {
3 n" G7 d9 G* ]( x# o ItemProp* pProp = pItemElem->GetProp();
" x. U: W* j [% Y$ R5 s7 f vItem.dwKind2 = pProp->dwItemKind2;
' {" A8 C, M- | v+ s1 C" P vItem.dwItemId = pItemElem->m_dwItemId;
+ g2 p6 I0 n. _8 [, L vItem.nIndex = i;, o( m. `" l6 k% S
}6 h% F( y, J5 W3 Z# Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& O, f, C J4 j6 h% M
}
. q: @; j$ s: p2 d# k$ y' B //////////////////////////////////////////////////////////////////////////
5 F. P7 l9 Q1 V7 I% ^ sort(vItem.begin(),vItem.end());//排序
5 S3 f7 O2 F7 V, k- i ] //////////////////////////////////////////////////////////////////////////
" z& E$ l' @; _! s //交换3 d3 a; S8 z# p9 i7 _" h1 Q2 O7 l
for (size_t i=0;i<vItem.size();i++)
8 p/ ~6 y, g% o2 H {& N2 u* x. V A* k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 a$ G* K3 i% Z
pInvSort->Add(vItem.nIndex);
9 Q1 Z- p! I) z M" b) ^' M! C9 h }
8 P m+ ]; N* y4 ^2 H: L, V& Q BYTE nDestPos = 0;
! {9 x0 N% f) j, b for (int i=0;i<MAX_INVENTORY;i++)
/ o5 p+ A# n( s% T {
7 v7 @" G6 C B, |1 A3 z) L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); H9 `8 L2 C5 P
if (pItemElem)
e# W, j# l+ j/ o1 o/ j* g {
: P I X1 f' p; m2 P' n if (IsUsingItem(pItemElem))5 x2 e1 Y% g. u4 d7 _2 J
{
& b p4 g x. F, _! x //这个位置无法放- m! a* G h; N5 t- }. R& D8 b7 H
nDestPos++;7 m' d: I0 j8 b5 J
}1 {# U* f. G/ H' u) \9 {
}, T9 l# ]: W4 D, j V8 {
BYTE nSrc = pInvSort->GetItemSrc(i);! |# d/ c N9 p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 X2 C5 q4 @5 N$ ~6 s
if (pItemElem)
; s, {5 O7 j2 Z {
+ T4 n9 S4 A' z: n' I1 p0 _ if (IsUsingItem(pItemElem))5 H" c2 y7 c9 t! p$ A3 h Y5 k4 p& ]
{
/ I b# V, v9 u; M //这个道具无法移动,跳过
" C+ J& a) P- O: \" ` continue;2 X$ k! O2 y% m% `! F1 m
}/ O3 `8 H6 B1 j
}else{6 C+ j% s W; e; l% ^
//空位置 不用动" c& o3 ^3 B, F4 Q, m. j
continue;: ]9 \$ T3 z7 O( W4 U- R
}; T Z8 L' x y* r
//////////////////////////////////////////////////////////////////////////
|: K8 ]' B0 `, H ] //开始移动
9 M1 F- b; N# o, l( O, t( ?: z if (nSrc == nDestPos)2 w. z7 D: ^* L( p9 Y
{
/ G" W9 _& G. L. S7 i6 S( B3 [ //原地不动
7 n' P! X( C8 M# s. D+ d0 c1 o nDestPos++;1 ^' _1 Z E/ q
continue;
" G; J' A% D s9 C4 d }
" e, t3 `% o1 Y2 O7 Q3 E4 i pInvSort->MoveItem(i,nDestPos);
3 E I4 M% r2 z) y; r g_DPlay.SendMoveItem(0,nSrc,nDestPos);- n& e9 E4 [) T! l4 D ?$ r5 U+ n
Sleep(5);
+ f3 A1 g. m* l; i I* T //Error("移动 - %d->%d",nSrc,nDestPos);. t2 V# q7 z) q B8 B! j
nDestPos++;
\9 [7 C9 f { S& D5 I9 \+ u+ I }
4 A& A* }, C( @3 y) x //取第一个元素的信息: f; W9 U, U" |; A4 B# M0 v& M
/*1 c3 q& _) s- z$ n1 |6 g9 K) m
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 u7 n- @! ] W4 P0 Z
{
& k4 `7 E; S b% ^ W$ m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" Y. a6 U7 h1 }9 b) Y. @; @* `
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; c! D! g5 O4 N/ H' {* l! Z
}! ]( B/ t; U* X& a
*/
* i5 u8 }( e6 K: Y //////////////////////////////////////////////////////////////////////////7 w- y0 y: d! p; m0 f
break;7 @3 G# X* ?: _
}
: D1 v8 U6 u% e( t7 u, }! T } $ y! a: {( p5 K" M7 q, a# ]0 V
}# z0 v' X! g Y
m_wndMenu.SetVisible(FALSE);2 J+ b9 P U6 w+ P, Q* H
9 J2 {" d( s( l* k! N6 u9 J8 W
--------------------------------------------------------------------------------------------------------3 V# S7 }2 Z1 Y' p' t( s: {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 K/ N/ s* N+ O$ o; n5 w9 c+ m{4 E4 r) k0 l8 D* T* K" c4 `3 \
BaseMouseCursor();
7 y+ ~5 m9 x- B; } j}
1 L' V0 M/ A0 F: K/ H在其下添加:- p: W$ q; O- L0 n
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
e3 n1 S5 T" y' e8 ]{1 U; k4 a' s0 e; w# p3 O5 [7 e
m_wndMenu.DeleteAllMenu();
9 @; x- e+ d% R a8 S5 Ym_wndMenu.CreateMenu(this);3 @7 v& c0 l1 ^! R- w% @3 W$ A* R7 L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
c) O! o ?" l O
9 {4 F& [7 a w6 q; X: jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: u( q3 v: {6 r+ @+ ^" H3 y{
3 H! H1 ]% p3 v% N; } x V //P以上级别才可以删除所有道具4 B# G) e0 B& t: K, l/ Q8 ^; K+ t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. i% K A- n" S; ^. D: N- P
}1 e) O1 F# ?; o* H& s. [1 ?7 Z P4 x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! u, n9 c+ A8 L' n& d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, `' j4 E9 ]! Wm_wndMenu.SetFocus();
: |; _& F4 f0 `) |1 y. I% I}
# X: h- p, o$ f------------------------------------------------------------------------------------------------------------( B8 u' u$ d4 U4 s3 l
*************************, K: h$ \/ w2 z# v* [- U6 K* N( P
WndField.h文件
- o5 S) Y$ w _7 O/ O*************************
: K6 f" R! \8 {. U8 ?搜索:BOOL m_bReport;. b# x2 Y! T3 D: R, ~; d
其后添加:7 y- t0 {) X7 ~1 y2 b i% O. F
CWndMenu m_wndMenu;
& B c8 o" P0 _1 w+ N1 S& o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& X# O# Q1 S( l7 Z; O
其后添加:& |2 X E. c+ n# F) z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
z6 K) `- i( B
! Q0 X6 U7 J w8 l4 @5 n7 U8 d3 q6 `4 j2 k# z
|
|