|
|
源文件中_Interface文件夹下WndField.cpp文件 K$ L( ^8 A4 I; c
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 ~8 K2 K6 {* v* I3 ]9 C+ F" m! L9 H3 G G
struct sItem' F% k) B( }; S) n; v
{
1 e6 q1 t; B$ Q# UDWORD dwId;
9 z0 A! O4 w# {$ E% K0 _DWORD dwKind2;! g0 n* N9 h% o1 q
DWORD dwItemId;
# @" K8 R8 x$ W9 hBYTE nIndex;% O; }1 j* S9 G8 _+ M
sItem(){
) H1 t& ?/ ~; t$ k dwId = dwKind2 = dwItemId = nIndex = 0;
9 M/ O+ A7 o8 h% Q0 C3 V1 G4 \}- B" {* }( F; ]7 ?5 }6 k4 g
bool operator < (const sItem p2)
+ F4 k% g2 {0 I& x6 n4 w& O% ?$ ~* U{
8 m, Y8 q6 u2 `7 Z if (dwKind2 == p2.dwKind2)
, ~/ P& D6 S7 ]/ ?, y' n# R {
Z6 N* v6 J" ?9 }. p return dwItemId < p2.dwItemId;
! a" k$ _ b# _' V4 j }else{4 c) I2 k9 R8 T
return dwKind2 < p2.dwKind2;( D& n7 ]! d6 G7 C
} `% ^$ l* x' Z' h6 W+ H9 t
}% J# {% e& w. C( d$ F
};
% m& W# W# C; C% w( Jclass CInventorySort
2 o* y) j1 y, w- K{; ]3 ]* R# M" k# E, o1 A; {' A2 Y8 B& p
public:/ N' E# X# K( i
CInventorySort()/ k9 t5 w) u5 e( M s( Q, r/ `
{% f5 \; [- {6 E; a4 F' I6 f$ \
m_dwPos = 0;' T1 c9 u) t( ^) `* ]
}$ s; r' D C* ]" _4 c
~CInventorySort(){}6 a, X/ p+ i1 l: n( f1 p
private:
$ [3 Z- y; f. R% j. DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 z, G1 u& ~# B8 x/ }
DWORD m_dwPos;! c) J8 L" N2 }8 C
public:7 H# F( ]& p- R: V9 M% ^5 A' |
void Add(BYTE nIndex)8 z2 y3 X4 R& T t5 g. w* I: f
{
/ }7 k: P) K- K, m/ `- W S! U if (m_dwPos >= MAX_INVENTORY); g$ s @* z2 b
{
h) E0 [. X4 A9 i' M, h$ t0 `' J return;) m6 N/ N' `! T1 G* d8 ^( ~) V
}
' D2 G3 y) T- P/ [# x0 L* [ m_Item[m_dwPos].nIndex = nIndex;
! \- }" c5 _" g! p+ { m_Item[m_dwPos].dwId = m_dwPos;
$ `3 Q- M- {: p) f m_dwPos++;
5 A) H5 F5 k7 b1 J4 L# H* d}
7 P: o& P+ @" i L3 i' P i- E) nBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 c+ \5 _0 r# e# c' U Q( n{
: I! B5 t [( b" y2 f9 r for (int i=0;i<MAX_INVENTORY;i++)
& { n& {6 \6 I {% E" K* ^/ s# f& H- W: \
if (m_Item.dwId == dwId)4 g% G6 ]8 @5 \. j2 }
{9 M3 I9 X5 h: _$ p+ I9 |
return m_Item.nIndex;7 e* B% b$ C3 p& Y# c$ m# ^! @
}
. {! ?, k6 W5 B& S }" ^! ]7 S, K8 ~: T( Q$ f1 n
return 255;' Q5 X4 U* ?, I1 P' e! W+ g
}, T0 j$ D6 o' x1 m% Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; W J0 K$ \3 c( B. d
{
4 ?2 P/ V, |9 m& m6 X, i BYTE nTmp = 0;
$ Z) f. J9 w6 k, n3 x# m) } bool bDest = false,bSrc = false;
- I$ M! M9 S. {7 v3 l I for (int i=0;i<MAX_INVENTORY;i++)
( f. B \0 u, a {$ e- d# I* R G: o! C" D* M# I
if (dwSrcId == m_Item.dwId)/ @3 \8 M2 X; \1 B8 _! I2 W
{5 v& `; k) R+ h; l- e8 d* X$ E/ [
//id相等 则 改变对应的dest和src
. t8 W$ J+ d8 W* B/ y$ W) a nTmp = m_Item.nIndex;
$ D S: b+ C2 s4 ] m_Item.nIndex = dest;
' m/ |6 w' v0 @ }
$ j: ~& j7 ]- H0 `- W1 C }
5 H9 ~" L* l% ?$ b. M& ?- _ //临时数据保存完毕,交换开始& N9 m2 i5 `# J5 a H6 c# o
for (int i=0;i<MAX_INVENTORY;i++)& o9 y" z; y( |7 R; Z6 r
{
) w) \& E9 w* S. p. C if (dest == m_Item.nIndex)
0 J, c z- t+ \ H# H6 t- k {
- S; y# L! w! B% N) C //id相等 则 改变对应的dest和src6 R9 X6 O9 e' u" G4 c5 F/ H
m_Item.nIndex = nTmp;" o3 `) v, p+ N1 g/ t
}* E3 d, O, m( s! J C8 V
}" S& ]: c& M7 k3 \: H+ h1 N
}
" J3 t7 |. H9 F6 R: m4 ^};2 e' c4 Q0 |1 x1 V* o; u" A
-------------------------------------------------------------------------" P* t" B" v2 V- G' W8 R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, U" F9 y2 j9 V7 @2 A; l9 s搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 {7 V' Q7 O6 ^' @# x
紧靠其上添加:
5 n# H# ~7 |. [ x7 v( fif( pWndBase == &m_wndMenu )& E* `& j4 \5 i
{
8 i, T. j x5 G/ g# W8 y7 B5 ~7 @ switch( nID )
# |! ~+ E4 @6 G* Y. K7 k! S0 `1 C {
3 t) ?! @3 p- k0 ?8 y0 H case 2:, ~9 H" B! J4 r/ @% L5 B
{
n; s( l8 Z4 P! D, Y l, K //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); Q# ?. s0 k1 p7 }0 K. x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- q @* t/ A9 o/ s2 q5 ?& | {+ q! Z! M$ W& b/ b. A! O
break;
2 D' G$ t7 e( R$ W- A# G- e }
/ q$ t3 _. R' M" g0 e i3 B for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! X# h6 i- `- d* }
{
- ^. }. ^4 l2 y$ W9 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 R* v5 \' u* }/ \
if( !pItemElem )1 p5 s( n, o+ A- x# X x: H
continue;
4 L5 ~2 {/ Y) k4 s: g6 z) I- C7 P8 M! B7 x if(pItemElem->GetExtra() > 0)
8 W* q4 Z) L4 R& v6 {4 \ continue;
& t+ w5 O H! c1 V* y9 I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 W8 c" J, t$ U2 U$ B continue;
4 I" r5 g4 G/ w m! @ if( g_pPlayer->IsUsing( pItemElem ) )) q. p" _' Y; ~
continue;
0 W9 L6 l( `. o% D if( pItemElem->IsUndestructable() == TRUE ); V5 I, [( p4 k }
{
% n0 ]0 P" H- R- T1 j& }, x g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, \1 ]1 w0 k- u% K+ x4 N; C continue;2 ^& e9 j2 V0 v9 _+ n* [
}
' O1 w: n( k* ]+ s8 x! S g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' ~+ @! X2 r4 c3 P8 B4 Z; `( d }
% T' W, O/ D6 p6 E) c4 r& \. N D break;
# ~' r) i: c Z& h$ J- Q6 Y# E }
: a4 p$ E# W5 U, K# C, r- N: C1 o5 N4 Z case 1:
$ L+ n. w) y7 Q& w9 q {
& H! R2 C' Z5 k( o //整理背包
: i( q" G! g( s6 G6 O! y6 I& a //////////////////////////////////////////////////////////////////////////
4 ^2 k# G0 m2 s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ ?- ?1 E, b! J! [& Y' X
//////////////////////////////////////////////////////////////////////////
' t; z# H. O6 `) Z& | //////////////////////////////////////////////////////////////////////////
+ Q9 {$ G- g- p. v2 Q CInventorySort* pInvSort = new CInventorySort;6 ~' z" X4 A A' y/ Y
vector <sItem> vItem;* C& A+ @0 Y% [) r, q
vItem.resize(MAX_INVENTORY);//初始化大小4 V6 T# o6 Z& O2 \
//////////////////////////////////////////////////////////////////////////
9 F' K; o& ]) C% r+ X3 h* R //填充数据
+ o k4 Y3 | S( m for (int i=0;i<MAX_INVENTORY;i++)0 R! i" |! }& k. P; o" }2 [' E# S
{
0 s) h# G7 q8 B: c* w: g3 z% o7 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! z2 I) ?. T' y# r. H4 G2 ]" p if (!pItemElem)
3 _0 [: Y. g9 u$ \# @! h, T: t {3 u G6 T8 }7 V* v% _. g8 x% a
vItem.dwKind2 = 0xffffffff;
5 X# ]5 {0 P. S) z vItem.dwItemId = 0xffffffff;
" F" }# R8 g( B( g+ _ q& p% i; `2 P vItem.nIndex = i;6 f% [5 }" d: u5 i
}else {
( r1 g, f% A9 J2 r$ \ ItemProp* pProp = pItemElem->GetProp();: i! N6 O4 U: T
vItem.dwKind2 = pProp->dwItemKind2;3 P% f' C) p: y! {( [2 \
vItem.dwItemId = pItemElem->m_dwItemId;" R; r0 @4 @ J2 |/ T0 r
vItem.nIndex = i; B; K8 {7 D" S5 Y6 r+ I
}" _+ Z* s1 }' W! t
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. e8 n$ d# W" i1 r' Q" M }
% w3 i( ?: O6 u) `* O; U //////////////////////////////////////////////////////////////////////////# e0 t2 \' n' b; V6 A
sort(vItem.begin(),vItem.end());//排序
" O3 g8 F# n& o //////////////////////////////////////////////////////////////////////////8 h* s# {1 h/ [/ V
//交换/ Z' }" S( u4 S4 f" L1 B5 D
for (size_t i=0;i<vItem.size();i++)
# w6 t6 l* B% @( w {
# O& G7 Y6 y7 v //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( L1 P. z' b1 r1 H pInvSort->Add(vItem.nIndex);6 ]7 c: B# A9 s! {; p
}6 g# Y2 o3 ]8 l6 `" a
BYTE nDestPos = 0;
: C) `: [ i) b* u/ p for (int i=0;i<MAX_INVENTORY;i++)
6 b1 ]3 f; P: t3 y' I! r9 q" e {
9 A q# m$ R. F/ C2 S* {! q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( g3 s5 i) [8 R, T8 \
if (pItemElem)
: N- K# S, }: }) W* H {1 ]. T. h9 ]. ?+ m* T* h p
if (IsUsingItem(pItemElem))! O% A" w. U; f" f: i; o
{
2 A& |6 k+ W" ]# |: m, I- ] //这个位置无法放
6 M' u% o, E* Z nDestPos++;1 T1 J* n2 N. Q
}
- a/ Q7 F0 E/ }2 ]: y( I% S }
9 Z* d' X- c9 ~& w BYTE nSrc = pInvSort->GetItemSrc(i);; W, x T( t! J- W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* q! L' N X4 p9 A
if (pItemElem); Q* Z1 h' R' z" o h
{* |; ^5 t% A- T6 W S0 }/ p
if (IsUsingItem(pItemElem))) @* G1 a+ G- ?2 Y- F: ?
{
8 P5 q) m/ s* E4 ]- h //这个道具无法移动,跳过7 I [+ R- l. K/ w
continue;
" P# c* a; H' I J2 w2 t' t }1 e: E n; H, e% A8 l2 k$ U: M
}else{' z6 z& s; Q0 s
//空位置 不用动
9 a! V7 `& t |$ A9 U continue;9 ^8 i3 M0 s4 A2 y6 B2 Z3 J
}& d, ^3 i/ t5 f; i
//////////////////////////////////////////////////////////////////////////
* c m( I& N$ p& {, M6 h //开始移动
* ?4 f2 M& w6 |) y0 r if (nSrc == nDestPos)2 O" u' Q. z8 Y4 ~: S; t
{) T/ s! e& I; G* W. Q7 u! d2 H
//原地不动5 M4 Y3 Z* R- ?+ [
nDestPos++;5 F. [5 x# W8 X+ ~7 m4 ?
continue;9 n, ]1 F( ~% S6 a$ k W5 C! Q
}
- g3 ]7 D1 C' J pInvSort->MoveItem(i,nDestPos);( M* V) {' r3 P# }0 c) q9 M
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. f% I: w$ E3 E5 s; ]6 r9 Q
Sleep(5);4 y E E" h! [. |/ K
//Error("移动 - %d->%d",nSrc,nDestPos);
9 J6 X1 ~3 y# {1 N3 I0 N nDestPos++;
% X1 p4 }" [4 L }9 a% j) h2 D7 [4 n$ \, r
//取第一个元素的信息
9 `" h+ r2 I9 I: r9 ] L% Y% @3 P /*
7 w# f) B% i' a* J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 U: {3 e4 n# p2 |' J {# n/ k0 }4 _3 `& l9 w& A: I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 k* L: E5 Z* q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 ]* ^0 J% Z& P, e- e, z+ d/ c3 y }8 z( R+ @( o: I
*/% ^' ]- M' ~- Y- d; J ^
//////////////////////////////////////////////////////////////////////////
7 p, }3 V; F X: R3 g! g8 O6 s break;
3 R9 m0 [" ]6 o. c6 Z8 r }
5 d. {/ R' u; {1 t$ ~ }
( l4 {) c' Z/ M: h4 ?}
0 R; n; q7 J; `m_wndMenu.SetVisible(FALSE);2 l- p ~6 f; S5 O! `8 c7 x
. ?/ k0 l" k. H. F7 b--------------------------------------------------------------------------------------------------------
: y: l, d( h6 ^9 B, m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 t- v# L+ U7 N# S
{
9 P9 U( f2 h- D- ~BaseMouseCursor();
# v5 m: S; ]) V}: z( q) J# L% }
在其下添加:, S' u9 B* i0 J! q4 x
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( n/ M" N! J3 f8 c! c1 d$ h' y
{
" [7 o8 u1 E3 N ]m_wndMenu.DeleteAllMenu();
, U5 d. i% r+ u5 s* gm_wndMenu.CreateMenu(this);% y; A& p9 g* ?9 N( b! ^
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# Q) L0 _5 b- ?0 n0 M! e9 B) J& ?3 G
& ]& p/ z$ x/ E7 \6 w% r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) Z4 i9 Y2 X( {/ u{% S/ k3 n6 c- R4 ?2 \; j* V
//P以上级别才可以删除所有道具0 U. M, ]. S5 @. w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 B$ T# S6 l9 H1 V& [ w
}
4 u2 c- t7 Y5 V+ sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" F% y: R) L- f: c& f. g7 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. {% V8 f. q1 t8 {8 Bm_wndMenu.SetFocus();2 i. X. A1 ?' h6 g
}
) c5 G" I7 e, U. Y8 I- S8 _8 w------------------------------------------------------------------------------------------------------------
& J) a/ S$ i& ~( S2 i% {! c*************************
% f! J; }6 j$ W1 g5 q2 ^WndField.h文件
, H! g/ Z' |3 U& j+ s ?*************************
e: y# ~4 ~# P3 s( O4 _搜索:BOOL m_bReport;. K- T0 v4 K0 K" M; N
其后添加:
' a( w7 |! r+ s1 v7 A' O2 k* TCWndMenu m_wndMenu;4 Q2 }* d J+ b, [8 G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' [' h( q: L; V6 i' s @4 ^其后添加:
$ m- F' A; R3 lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: N) N; }/ o; I, b+ [: d2 g R
8 g; b# D* ?' B
* i$ I: F1 d1 K# |9 a, R! C. B |
|