|
|
源文件中_Interface文件夹下WndField.cpp文件! ?- z* \5 K: h' s* }8 V3 x2 P/ |+ n
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
Z+ D6 q C% ^' f
6 `! e/ f( F/ [; ]: K" x7 qstruct sItem
0 K8 ~4 j7 @% Q+ [, S{" Q- a* Y/ r2 n% k- a
DWORD dwId;: ]* k: [: ?5 ^% |
DWORD dwKind2;
. J# o! o* X; I* M; s/ |$ ~DWORD dwItemId;
; m6 [4 e% B& r! ^) U4 I! ~' FBYTE nIndex;7 E8 S- g1 J6 s8 I6 h
sItem(){
. t% n6 b: s# T; E8 l& A dwId = dwKind2 = dwItemId = nIndex = 0;% S* \7 g" G1 t3 w' j& u3 \
}
" l% {1 U, t' [9 N9 j0 `bool operator < (const sItem p2)
+ e$ N2 m6 A9 L3 Z{
9 u& H. ^5 c1 w0 E! w( z! u if (dwKind2 == p2.dwKind2)
& E; P$ S8 v4 e {2 F: @0 G) v& A; `& ?5 h6 q+ I
return dwItemId < p2.dwItemId;
' k- }0 G1 Y* i5 N. Q: y; ]% |7 ] }else{* B8 |) |- f* P# I
return dwKind2 < p2.dwKind2;
! k3 ~- H" ] V) { }
$ t5 G H: F9 ^' g" H! h}
# v! j: E1 c% @$ T};& [# H! h) J$ e1 W( H$ k
class CInventorySort! B5 ?, d( F0 z+ ^) z+ q* _8 R/ G' T+ c
{
a0 g/ L" a: t/ Ipublic:
/ b* u: u. v5 `* l! GCInventorySort()- g1 C- q- O; P: Z7 |
{
4 @3 \( P$ D# f/ H) M, y m_dwPos = 0;
; P7 V) g. F6 W9 I' z4 q- p% M3 G}2 W, Y4 @7 C3 z9 e+ E$ s
~CInventorySort(){}! }" h! ]6 n' l4 T" i! z- y
private:" F" T9 u1 R U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! h: k2 p5 G, v% P! {DWORD m_dwPos;
- o$ n" o" h/ ?- ppublic:
; {2 l# a9 Q# Bvoid Add(BYTE nIndex)3 O' E1 {! v2 ~$ Q
{
8 f/ u) J& |/ M5 [8 } if (m_dwPos >= MAX_INVENTORY)3 Z# H& E+ Z$ w+ T; r/ _* x8 n6 n
{
& V& w3 d9 P8 N7 d$ u return;$ p! `) C _- Q) Q- K3 a, t
}0 A; o; F, ^/ ]+ _% q6 y8 n. \
m_Item[m_dwPos].nIndex = nIndex;
1 F$ c. j2 k0 k4 P- R: K" c' I m_Item[m_dwPos].dwId = m_dwPos;0 K3 g( x' }2 ?6 t
m_dwPos++;/ k" c" V- X* s7 }
}% Z0 ?3 h. H5 C
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# B# Y4 H" c* g5 B V5 f{' b) o- ], O5 \' g
for (int i=0;i<MAX_INVENTORY;i++)
' n \( M b( K. p; [8 m! k+ G) I {$ S8 N& T" v! U
if (m_Item.dwId == dwId)& d1 d+ y0 ?% \+ N/ C9 a/ ?$ H
{: V) b \+ T% u' A( U
return m_Item.nIndex;- r/ @0 M$ N- ]/ Q& k" A0 V$ L* j) _
}
& m' B/ m8 y R; U, i' ]$ M4 l3 K3 ] }
- W& d1 X% `/ C( S* C o0 x return 255;- X' {" q9 ^3 t3 {
}
9 _2 U" W$ c- _- g* I+ T0 f# G/ ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! Q' A) j) _8 i1 }) c* X
{
' V0 z6 ?& c6 y: D. ` BYTE nTmp = 0;
3 Z8 A' I1 `/ ]# U7 k. | bool bDest = false,bSrc = false;
l+ |0 K& T* h for (int i=0;i<MAX_INVENTORY;i++)0 k+ C; C0 F4 O: h: R$ Q1 d
{5 K. x+ q6 S3 a& a6 U
if (dwSrcId == m_Item.dwId)2 ^9 j- J, J5 {3 [/ c/ H
{ c' z; Y$ E- D# \, |/ t
//id相等 则 改变对应的dest和src
W" n* f* j* { nTmp = m_Item.nIndex;
8 P) Z/ x H* r7 f0 r' s m_Item.nIndex = dest;
2 \: H' q. r1 B5 ~3 P }/ H' x3 E/ T- d
}
& C6 h6 h1 {6 ?. u% o2 G1 E/ ~ //临时数据保存完毕,交换开始
, w8 p( y3 ~- d& ~- H1 _; y for (int i=0;i<MAX_INVENTORY;i++)" T9 G% k: Z6 w* X
{
4 n- a, A- ~. c7 d% e if (dest == m_Item.nIndex)
. U* F3 L* Q( v8 V3 C- M$ S {
9 a) Q E4 v6 q- T' L5 z //id相等 则 改变对应的dest和src
, Q+ J0 w( o2 G3 V m_Item.nIndex = nTmp;, a V" b0 o+ ]5 Z& X
}& Z& S: |+ w- r6 \, }
}& w# K, N$ Z9 x6 S0 g, J
}
g% A; A0 ]: f2 U};
, Q* P4 V8 Z- R- S L1 m$ k% Y5 o8 F-------------------------------------------------------------------------
% W K1 r+ k3 x# A2 s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 S; _, R& i4 W/ o
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' b. v @ d( Z( x1 R6 k/ P, \8 N
紧靠其上添加:
8 E& d3 e5 n4 R% a: N7 `( aif( pWndBase == &m_wndMenu )
# {% s3 `' b- X8 p; Y$ ?- i0 {{$ X+ a: K5 h! t! ^$ ^
switch( nID ); j5 U. x3 k/ Z" Y1 F
{
& r! F+ H2 P! D& p case 2:8 f1 H! W* B. `5 M; B! |
{7 W Z6 f, v* C! F6 Z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 P6 [. s4 g8 Y4 R; g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* z9 F7 s2 L* l3 c6 X N
{7 @; N' u6 ~/ t$ `# n
break;1 v, Y! R, Q1 `' K( i
}
+ G+ G8 b, j& V; W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 p4 A3 A+ A% |7 ? {# M6 |- @3 q6 J0 s2 P. L4 I: k9 s! d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 U" Y8 }! m' i+ O9 f if( !pItemElem )
# \ [! ]! H6 r( s continue;
: o Z3 m. O1 `$ Z; B! w6 { if(pItemElem->GetExtra() > 0)
; c' @2 [8 x8 v5 f- Y continue;5 ^9 s% w* z, r& F' J& I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 n+ J1 v+ j3 p# B continue;
. g- g0 u3 r' X) \ if( g_pPlayer->IsUsing( pItemElem ) )
" P& F7 F, ?: Y4 k. S continue;( Y7 [3 r" J/ q
if( pItemElem->IsUndestructable() == TRUE )# E3 T/ l% H* u2 K# J
{
0 B% O: w# @8 ?% y0 Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: y4 B/ m: ?1 u& b! u
continue;2 X2 Z- c) U8 Z7 G' m# v
} P, l+ C4 X5 |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. T# G8 Y4 V5 Q% {. N' m# v
}" V. m4 i6 t( \
break;) c% ?- o# r/ I6 D) ?3 p7 l
}! e% |- M1 o- J
case 1:
, T- X/ k- c% W0 z; l9 T { T+ W1 m* R" Z. D
//整理背包
" Q' R, e; S. A) S- ~. a6 R n7 a //////////////////////////////////////////////////////////////////////////
. c6 a* c* }! z/ q x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, v5 {9 V, h) \/ W7 [ //////////////////////////////////////////////////////////////////////////
' w. z( H9 j, h' Q' B9 K+ q/ G /////////////////////////////////////////////////////////////////////////// O& Y0 `' C2 J/ ?) w/ s
CInventorySort* pInvSort = new CInventorySort;
$ n9 @/ d6 a+ z8 k# z vector <sItem> vItem;
3 x3 ]. q0 [+ P! b3 y* T vItem.resize(MAX_INVENTORY);//初始化大小
% p! X# `$ V% X //////////////////////////////////////////////////////////////////////////
7 N# k+ X! u C //填充数据4 \" \" K( }) j1 O
for (int i=0;i<MAX_INVENTORY;i++)# j' Z" e8 i, } A
{+ L% R! ]3 i- `$ G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, u1 c% O7 Y7 U if (!pItemElem)" y$ j- L" ? d8 G0 n
{9 z( \& P+ ?( z$ U! T
vItem.dwKind2 = 0xffffffff;# D9 D. A. O! x L$ B- {& r
vItem.dwItemId = 0xffffffff;$ A0 o' u% Y0 O2 R8 V5 e$ o
vItem.nIndex = i;
. x2 E2 r" u: c# b9 I/ b, e }else { F+ [; j: [! s% z E, p- Y
ItemProp* pProp = pItemElem->GetProp();8 Y; ~4 e- T- D$ H/ a
vItem.dwKind2 = pProp->dwItemKind2;& X- _( T6 _2 ]+ l- g
vItem.dwItemId = pItemElem->m_dwItemId;
) w( l9 ]* ~: p! p0 D. |3 o vItem.nIndex = i;
+ F9 g5 |5 \" A, @ }6 j. D0 r; u7 |
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 E3 A4 Y* R* y2 ^ }
8 \ K+ B1 P. D3 ^6 y; ~# u( Z7 O. [ //////////////////////////////////////////////////////////////////////////
) |7 P! P, h( s C# C sort(vItem.begin(),vItem.end());//排序& |3 m" v# l; x
//////////////////////////////////////////////////////////////////////////
/ b+ d4 a4 D+ W //交换" {" L# ~: G& u
for (size_t i=0;i<vItem.size();i++)
$ d! N! W! O2 k3 z1 n {
, E' P$ M$ u1 w# s d( | //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 N; J7 Q3 h8 X0 L; H
pInvSort->Add(vItem.nIndex);
! ^$ r4 s8 c$ H" H* L' G" i! {- b3 p3 p }
3 T0 U! D- X3 p3 x9 J+ C/ v BYTE nDestPos = 0;& @$ h' ]1 h) ]
for (int i=0;i<MAX_INVENTORY;i++)8 J, X$ i8 e" R- o4 y" C9 h
{
x0 d7 X. k/ s" L2 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# Y. M% X; w4 L) ?
if (pItemElem)
W5 W2 t3 R* v* k5 m$ g {
9 y J0 E" D" f5 } if (IsUsingItem(pItemElem))% H1 l' H6 @3 K: w. M( J/ k
{
3 B& Q; E# E7 l- C //这个位置无法放
, M/ e; Z' j4 V3 u% o5 y) I1 \ nDestPos++;( c& D4 ^+ C' Y) Q) m/ B4 Q
}
! M# E0 k" d4 y! ^) g0 r- m2 x! U }6 ?2 j0 f6 k" ? y" F
BYTE nSrc = pInvSort->GetItemSrc(i);
* F4 b: R& Q# I! Q3 a pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' h& w- x: z: z( k9 K2 \5 D* Z
if (pItemElem)* b% V# X: }6 h/ E) S7 n& [
{5 o! l) { R0 N0 w
if (IsUsingItem(pItemElem))
+ [, v" q; |1 u& Q) B( [ {# v! N, }: r; L+ h6 ?) q. q1 Q
//这个道具无法移动,跳过0 s& l3 t0 |: q" F) H# L
continue;: q5 c* u6 \9 P0 B
}
& }3 J5 E( \% K' _8 q8 Q }else{
# n; n4 e" y& ?3 d //空位置 不用动- _/ t+ o1 [& T, E7 {! q: k
continue;
5 v/ w2 i* [2 y+ D- U/ | }* G3 J3 e8 [; o3 W; {
//////////////////////////////////////////////////////////////////////////* Q1 c' V( e2 ]9 D
//开始移动( }% i7 u Q7 B \
if (nSrc == nDestPos)
6 j2 T# E- R, X( o {: p# i4 i4 s- R5 h% e( c$ U
//原地不动
/ K+ u# J4 U, b! }. w t$ x' [ nDestPos++;) G# w$ F* j& @
continue;- P5 ]1 c$ n) }: E
}' {+ v% b( ?9 x6 p2 Z
pInvSort->MoveItem(i,nDestPos);
- J! j2 ]: {& R9 {: Q g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 W+ c, l9 n7 K- H9 r& a Sleep(5);0 O& H& E! C8 N# u# f1 I A
//Error("移动 - %d->%d",nSrc,nDestPos);
3 H( A5 b8 }, P* I nDestPos++;
; [, `. q+ k" H7 [- [/ | }* d u/ m. z* `' S: W
//取第一个元素的信息3 W3 o' S% i# K$ B6 U- p
/*
2 _8 m) w$ r! h I1 E4 o if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* X$ _3 t3 W0 B) w7 q6 ]7 f {
8 B) h6 u, a8 ?% y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 J' f3 ~* v2 h0 R* a J g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. U; t5 o! s9 V
}* B) r9 W7 h) z
*/( L: c* u9 h$ }1 c6 p
//////////////////////////////////////////////////////////////////////////
4 W. G6 w3 ^( q, q$ V) l break;& W) s7 z: f4 {
}& |9 g6 H8 j# ?2 n5 p# R' f4 H
} ( ?5 j& [' A' s5 `2 A' A
}4 }/ b, g1 y% c8 Y. \$ k
m_wndMenu.SetVisible(FALSE); n+ ~* B3 L9 a" K
2 y5 W% Y5 |& Q- F% z8 f
--------------------------------------------------------------------------------------------------------% w& }+ j" N- ]. H
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 x6 I8 x7 x' s+ x6 Y, [4 ^3 L' A{
8 D! X2 `4 I7 x9 j+ C" ]/ g% H- tBaseMouseCursor();
2 j% x( ]! G* h* [- g9 z u5 t}
$ s% g3 G4 `' `/ [7 f在其下添加:* I8 I( N* S+ i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 B) l& b. u' p' i5 Z" k f/ j7 A{
" B; t6 i, n+ j5 e9 }m_wndMenu.DeleteAllMenu();
6 J+ i+ v2 h! f8 ?m_wndMenu.CreateMenu(this);
8 t m- Z* N* ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* F* P+ F' N& |: _
& R5 O( w( X( G4 D6 j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 ?" Y9 M: W* ~) v$ q{1 q$ m' P; n8 B; [& [
//P以上级别才可以删除所有道具, E6 C8 m$ e- h. e( h! i
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ C6 N6 w' T2 s$ C2 c5 Q( t
}
( f) ]0 p) h% ?- A8 ~. Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, m3 C1 Z' N7 e( G4 q7 j9 Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 w5 p& F+ ?6 Z; K- N1 Hm_wndMenu.SetFocus();4 Z# k6 E) [/ q' B! G
}
7 N" ?- p& t, K1 L. D4 `, P: k' b------------------------------------------------------------------------------------------------------------
; k( W. _0 |5 M. Q% m*************************
5 z1 }" Z- s9 m3 s. ?! DWndField.h文件1 c# N9 t6 C) a' b) p3 T. q7 Y' ?
*************************' I+ A, |& H% K
搜索:BOOL m_bReport;
1 J% D3 W" ^0 U) z4 o/ ?其后添加:' d% W' `% Q \7 i% d2 J
CWndMenu m_wndMenu;5 |3 x( l! Y! G( g2 `$ e
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; V0 ~2 k$ m# w7 P& i) K其后添加:& O& I( d2 H8 ?$ {
virtual void OnRButtonUp(UINT nFlags, CPoint point);( b& z# h* b! b3 Q* ?) T4 i8 |
T: C; m; O( r+ J
$ b+ c6 T. Q8 m! @6 @) z. P |
|