|
|
源文件中_Interface文件夹下WndField.cpp文件
3 @- Q' ^4 b; Q* L* w' u# @6 x$ r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; P9 H& s( ]9 ]5 D# U- S* K! Z) o# q2 I7 i
struct sItem* z# r2 u4 W3 j, F5 p0 [
{/ m) l3 ?- _" o* {
DWORD dwId;7 R- R6 O3 X- {9 O7 L. H* Z2 X
DWORD dwKind2;
- F5 o- I. u _+ }6 kDWORD dwItemId;: u6 l, Q6 l3 d- e7 p) a9 d/ F8 z4 S
BYTE nIndex;
0 X: f, U( Y6 s# U8 W9 ssItem(){ d5 H& x' G3 b! e: M7 f* K
dwId = dwKind2 = dwItemId = nIndex = 0;
" m" A5 V4 J" l) P1 F}
- I0 N8 Y. K8 m# W# B; c4 _bool operator < (const sItem p2)( v5 @. K/ A6 o: X
{
( Y6 a. v0 J' N+ T" C if (dwKind2 == p2.dwKind2)* O0 I; i* S2 p+ I1 H. y0 {
{( i6 B! z0 `" V4 |3 T2 h
return dwItemId < p2.dwItemId;: o5 x5 J* G" j& a7 n& N4 `
}else{- {! N. R f5 r
return dwKind2 < p2.dwKind2;7 \/ q- q5 e% g- U) I
}2 V. n9 u! C' A& r
}
( a6 s% B+ H: e7 T};3 X; R W9 M( x
class CInventorySort
3 e; Z4 W3 r& v- Z2 ^2 P6 W7 k0 h+ H{
/ { G/ }, |9 ]! l% J/ L( Gpublic:4 I/ }' u% G6 P" H- A1 ^& u& G, \
CInventorySort()) a6 k( ^" W8 C9 c
{6 c/ k7 g$ d+ V1 c1 \
m_dwPos = 0;' o: F n9 W: M5 p* i0 n
}
/ r3 z, z) o. o0 U+ v~CInventorySort(){}
7 ?) S4 q7 |2 x8 y, c( Aprivate:
+ Q! m. W% m7 o# [% H5 qsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. w, U( S n+ |9 e+ F
DWORD m_dwPos;. j! C$ }# o4 _! ?7 I2 {+ T
public:
& J3 v x( W- V4 D: P! J" _void Add(BYTE nIndex)& g; w; F. t( P q# o
{. B" ? z6 `. T2 `/ M4 Q# W
if (m_dwPos >= MAX_INVENTORY)
8 v1 Y0 e2 K0 C% o* i: u' X {
+ u, Q% E1 Z3 Y return;$ {1 l6 H6 x; d* I/ y# M3 u
}
0 p! p$ D# K: I5 V+ X, _4 \ m_Item[m_dwPos].nIndex = nIndex;
! ?* N, l+ [5 U% A w. ] m_Item[m_dwPos].dwId = m_dwPos;9 d( O3 s; t8 F# r
m_dwPos++;
, i( T' G2 T; i) K" W}5 m" ~6 L$ T. u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 Y6 c5 C& u+ ~' y3 D& o. k
{
4 ?% ]/ q& |. r k( `; ~. S8 Z for (int i=0;i<MAX_INVENTORY;i++)) P( D) Y" ]. c. |+ J5 u* F. c
{
& _& x, O- B7 B8 I4 ]* L if (m_Item.dwId == dwId)
) ^ C+ h5 x8 m% X {" M8 z1 K! V$ A! }& }
return m_Item.nIndex;7 \: \6 N; m" g! U/ a4 _
}4 l2 G$ ^6 m+ [/ v1 \
}
7 x5 a8 [" O# S) M* ` return 255;
: ?& J; h% H6 x1 o}
! W% D$ _5 v5 W9 b* d2 B6 [! Zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, O3 C g, V7 ?$ x$ I
{
2 ?. D' o- }, N9 C4 Y BYTE nTmp = 0;
) W8 u. K2 V& L: h0 g" ` bool bDest = false,bSrc = false; |* `9 Y8 ~0 |. W% t7 ~
for (int i=0;i<MAX_INVENTORY;i++)
. Q, D) x- L7 J: D! D k7 D {& J" h3 H1 _ P5 Q [
if (dwSrcId == m_Item.dwId)
( H! B5 S$ z0 ^' M) p" _: L {
6 d4 R& g& l+ T5 L& y //id相等 则 改变对应的dest和src
4 G- T) l* n7 y- Y$ ~4 m& x2 G5 K nTmp = m_Item.nIndex;& n6 }6 i- l6 Y6 ~% _
m_Item.nIndex = dest;7 f! H) w, \# l t! c
}$ ^+ H/ `& t: b( L( V7 j0 i
}
$ e% _, @- k. W! Z //临时数据保存完毕,交换开始" [" j' Q# p* e/ O" d; s' r
for (int i=0;i<MAX_INVENTORY;i++)
5 T5 Q8 [, e( z: l3 @0 p {3 w. a: [" j! k
if (dest == m_Item.nIndex)
0 E# {/ _$ T1 H* ^. } {1 H5 a* Z& ~/ J( m5 t
//id相等 则 改变对应的dest和src
! n. @! f0 P' K* f2 E m_Item.nIndex = nTmp;
. i; Y) W+ |6 a# B n; R4 s }7 E6 ~. Z2 C$ ]5 g
}
7 _$ X: S6 s$ f: c}
6 L9 O o- b9 k7 s1 y [};
6 o- \ M# j- k-------------------------------------------------------------------------0 ] T0 N: n5 c; {( z* F. m
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); G7 v8 ^6 ?( B' W4 T: f
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 x' f) k2 A* G# \7 a1 E ?紧靠其上添加:
8 [3 h* y; z& jif( pWndBase == &m_wndMenu )6 [/ ^9 B, h4 J8 I4 g) r, C
{0 T# `0 R$ t b5 Q( }# D) f
switch( nID )
/ _$ [0 T9 z8 `; a {! l7 V; U- B+ X8 ^
case 2:
" M/ ]) ^- p% [; s: C3 O8 H {
$ t3 P A. o8 f* T1 Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! }* C" ~ `1 V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) N ? Q3 v3 q. u
{
' d: n4 o( f5 V/ J5 N break;* X% F3 k1 B3 Y3 g* R8 E; ?6 N
}
1 L# I+ q, d9 n8 Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ t+ H3 ~; C- L* Q+ }- T& Z
{7 i" B* J+ \: l! T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ u( D/ E: S: l0 n6 W
if( !pItemElem )
7 p6 k R* q. r& Q& S! p continue;
- V' h, A' b0 ~; T if(pItemElem->GetExtra() > 0)
/ I6 S; `7 S* H1 v; j continue;# W! C x( T0 f. F
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , o0 a; \ A/ l# B# n% @0 [& h
continue;
% i. E, ?. D, g0 `( R% |4 s8 _ if( g_pPlayer->IsUsing( pItemElem ) )
& h, w# e, x$ W% j* ~) j continue;6 M, f- W5 A4 T% l& f. T F
if( pItemElem->IsUndestructable() == TRUE )
& C, J2 q: W0 S' N {
$ B% ` r4 g1 j g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' ^5 ` N2 |3 J" b& n( Z
continue;4 h; t5 h: m, ~* I- u$ k
}7 s" b* d4 n0 H' ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ \; K$ k5 c( H6 e3 u2 X
}
2 S3 }" J8 i. S9 w; N5 F, f break;& \* j( u+ @0 t" }! m) }! o
}
8 m7 y1 o/ B: v4 b9 A' z# u8 { case 1:
7 o/ u: l3 ?1 v: m; `, y& U {
8 `3 m* S0 _- b+ x. t //整理背包$ F: t0 ^, v8 V! f
//////////////////////////////////////////////////////////////////////////
- w4 H+ | E+ u# M2 i6 v- r8 ^ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( O9 ~. Q2 e% n3 ?. V9 X //////////////////////////////////////////////////////////////////////////8 x7 J' ^ v' m# \2 w, z7 W
//////////////////////////////////////////////////////////////////////////* D0 V8 W- t+ J- I6 D z/ Z
CInventorySort* pInvSort = new CInventorySort;
# \& ]- f0 b1 w% \9 ~ vector <sItem> vItem;( x0 |5 R# T$ E& h- s1 |
vItem.resize(MAX_INVENTORY);//初始化大小
# F7 ?" b7 y+ L/ \/ P* l& w& S) i //////////////////////////////////////////////////////////////////////////8 Z! n5 ^; ~4 S, l6 q
//填充数据
% J! S& i$ x% C4 ^2 _; R; v5 { for (int i=0;i<MAX_INVENTORY;i++)
: o* J7 A3 |2 ^! i4 z9 h {
* }5 ~3 t: S* J, G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- i+ y: B+ }) N! R3 S8 b
if (!pItemElem)
4 l$ N1 t8 a. C" |* c4 u {! }* G$ D7 K5 |) o+ I
vItem.dwKind2 = 0xffffffff;
* ?4 ~* b s% N! w4 W6 I vItem.dwItemId = 0xffffffff;
4 W+ \9 O$ i0 X$ ]' | vItem.nIndex = i;. ]( n( N( E' z N& V3 \. @
}else {
/ c- I! a! n) F- x* ?6 F2 Q ItemProp* pProp = pItemElem->GetProp();
& B: l# F0 X$ r4 A2 B: k( V vItem.dwKind2 = pProp->dwItemKind2;
% \5 V0 Q7 p0 M. _ |9 U6 B1 z) e. i vItem.dwItemId = pItemElem->m_dwItemId;9 C( H# C5 x$ y" P7 \% f
vItem.nIndex = i;4 J) X. b8 K2 z- Q0 o
}5 n! P0 m0 k/ t$ o2 j( T& I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 `' G8 q: w1 R" k! H2 E0 z }3 a8 r$ @' J1 C* g$ {
//////////////////////////////////////////////////////////////////////////5 Q: g: K) {5 f( w0 i8 K
sort(vItem.begin(),vItem.end());//排序
8 v% V7 y8 {( m/ z, Q& K //////////////////////////////////////////////////////////////////////////
: N- i, ]( Y9 n7 I7 @) W //交换0 Z+ k) N0 J8 a. p" P
for (size_t i=0;i<vItem.size();i++)2 e* |% u; C+ y7 X4 M% l3 s% B
{3 K- f7 ~6 H% ~+ J: W; K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. k' B% G& ? o' y; u1 y
pInvSort->Add(vItem.nIndex);
5 q/ d6 H3 ~" q: W8 b }
1 `. o$ R* O3 O' N BYTE nDestPos = 0;- N; c# Y/ `5 T! M
for (int i=0;i<MAX_INVENTORY;i++)
& F. s$ \# P: I$ I. R- N, I2 _ {
+ g/ n- g; `* G6 J+ S3 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); @$ k9 L3 H* g& B
if (pItemElem)
. `* u. n1 P4 J* O0 V" q2 G. ~ {- N9 M- J# D/ g; W/ C/ v
if (IsUsingItem(pItemElem))+ K: t0 ?5 L& l7 B t. l
{4 ]; C. f" e4 x3 e+ d. h! a& k
//这个位置无法放- q) g0 M; x: r( H5 t& e# p9 E
nDestPos++;; c1 c" e8 v |. e. k \; O! t3 A
}
& c& ^$ y# |3 k! h4 E* u# q }
* T( E" D% w Y BYTE nSrc = pInvSort->GetItemSrc(i);
* c+ a8 b" o$ |$ @# s6 b pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, z) M% U7 r9 Q: W if (pItemElem)
; d8 U9 s( v4 m0 J$ D* V {2 H m6 p% p$ R$ u( I
if (IsUsingItem(pItemElem))" e9 L# U- O0 r C8 M# T
{
! V- Y( t8 e' L) U //这个道具无法移动,跳过
1 f( ^2 X. O* u( g+ X' P) A continue;
2 |8 f0 _ _! m# p }5 c* s- s0 H! J' b
}else{
6 I6 Y) m2 j& u; j //空位置 不用动
0 ]) U. x, }( x8 Q6 [ continue;
6 [0 [5 \8 P/ O/ [3 V8 o. n8 d4 d }& N7 U6 y" Y3 h; q* M* [
//////////////////////////////////////////////////////////////////////////
+ J/ v8 F |) `" j //开始移动
- c5 d! S! I$ @2 r if (nSrc == nDestPos)4 K* U# p2 t8 s7 T& o% R7 |7 M# O% C
{
6 ]# n. B e W //原地不动8 L/ f: { h* G
nDestPos++;
; b' G/ _/ H& z' Q# r' d, m continue;& ~& J! G; M5 ?0 W6 r
}' T' u- B% F: j9 M
pInvSort->MoveItem(i,nDestPos);
9 k4 `* k4 h9 x8 j g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; ^$ d3 r! L5 p( Y3 c' E# j Sleep(5);
4 x: t/ d# t1 y6 _ //Error("移动 - %d->%d",nSrc,nDestPos);1 K9 N3 e* Q% l
nDestPos++;
6 `( g/ B2 [' F, M5 {9 O9 Y, | }0 L4 G$ T* c# Q, |
//取第一个元素的信息3 {2 R3 g! u: D4 W4 U
/*3 s% b3 q5 g. ?6 n4 N
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 ~* G) r) m6 s8 p0 l" j* U: }/ K {3 g; H! \3 n4 T9 q: w. G
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% ~3 _7 g: v2 ?$ e7 ~: ?$ i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% M7 [: q& Q2 V- j }: I% D, `# d! z6 x y& p
*/
, r% E; k9 x( a o( u //////////////////////////////////////////////////////////////////////////6 y8 k s P& s
break;" @8 U1 M% z' @# w0 M
}& D* ^" X" ^7 g) t' T. d
} + u# a \% \0 e7 x! i, Z
}) f" A7 f8 R( }: _# x
m_wndMenu.SetVisible(FALSE);
0 k9 h- `1 J5 ?7 k$ c
4 Y* U3 X b4 U, B1 [4 M--------------------------------------------------------------------------------------------------------
5 Z& C" M# H0 w7 _' x0 q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! n- `. s( a( x) n; @; a{" j! ?$ m3 ^! Y% r/ F( R, i) M
BaseMouseCursor();
% v7 X& ]9 g- a}
: `! C6 U6 o6 c: ?在其下添加:
' U" x! n0 Y, a) W w" ^# m( tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- R! c4 w6 C) C; ?) d8 @
{) |0 L% X8 l8 f' p/ v5 A0 Y1 L0 P
m_wndMenu.DeleteAllMenu();
2 U% V; w6 m1 M% b+ U% ?, qm_wndMenu.CreateMenu(this);
L/ U+ d2 ?, Q. I* nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ L+ e$ }6 R- I) y/ D2 ?
! I( z" h" |% s9 U. m$ ^$ j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 w; s9 O2 Z, E! P4 z
{
; {0 Z1 _( [+ J4 }3 G7 K& G //P以上级别才可以删除所有道具
' C9 I1 ^' F4 p& G8 \" | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. r; t7 R# x _7 ^' ?}
& Z$ G3 W& {/ z6 p9 l2 u# [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 m5 f S) }) P: ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ v2 M4 }, L% R0 ^
m_wndMenu.SetFocus();
; `$ s4 S; I: W7 {+ _( }! Z}, S' O, U% u: T2 E# |! w
------------------------------------------------------------------------------------------------------------
4 h/ ^9 |/ Y3 E: P3 N*************************
" d3 v2 F7 ]& f1 F3 T7 {" [0 R4 QWndField.h文件* E% {- |4 n' Q- a
*************************
+ Y# h) u" D% G# I! r/ e. e搜索:BOOL m_bReport;
1 W0 D# T: b* _& U1 Q其后添加:
, J* T+ G: V% U! s) @4 CCWndMenu m_wndMenu;7 I9 L$ P7 Y7 Z7 d- Q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 r4 ]- @3 K) C5 l+ S/ Y* u" Q9 K
其后添加:- o* X- L, _. G
virtual void OnRButtonUp(UINT nFlags, CPoint point);0 v+ V L' d2 ^4 z& Z4 D7 S
o& j8 r) F* M+ b3 p8 j+ J5 q; c' _9 O+ i8 n, \' }4 \
|
|