|
|
源文件中_Interface文件夹下WndField.cpp文件5 p O! z& e% [, K" C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& E# m" h( F- K! k/ L- |6 M( @; B; \. R% h
struct sItem
" C* A- m$ f( E{' f8 R a {; W1 K3 k. X
DWORD dwId;1 T8 |" Y: f9 h% V1 L0 p3 Y
DWORD dwKind2;; y2 a7 f8 \% D1 H
DWORD dwItemId;" A5 Q$ p2 Z) L& v
BYTE nIndex;
& i0 W& P" D* l0 IsItem(){ P" B' V+ g8 b s! M3 p9 o
dwId = dwKind2 = dwItemId = nIndex = 0;$ @3 s2 ?3 c5 O4 s$ ?% E6 @
}
/ Y* Z$ Q$ b& Z4 e+ f$ F' rbool operator < (const sItem p2)5 A& {3 b8 x% y' B M* c; ^; ~
{5 C; H( {+ J5 @( J+ G! D4 c& P" w9 H
if (dwKind2 == p2.dwKind2)
8 H2 T0 h6 E& j {. V7 R7 ^+ Z" ^7 K3 [3 j
return dwItemId < p2.dwItemId;; v) O. W- B5 |8 o
}else{: Q1 G: c" t$ Y5 n4 e
return dwKind2 < p2.dwKind2;
. v/ k' m. o! L8 I: `/ M( r }
! t' t3 y7 c% C: s5 @6 z$ r}( v1 i) O9 h% k. f6 j- v6 t
};& k# v j& d0 f" V
class CInventorySort+ c# `% n6 N: {4 _! I
{
# e& r0 }. o7 E- l! Opublic:. l/ U7 f# D' [0 n) s; e' }) x/ k8 c
CInventorySort()
( _3 t1 X. l M6 {0 a{1 l' c9 Q3 n/ Q, e/ r) a
m_dwPos = 0;
& J) V! E$ |0 G+ e7 j+ c}
- v$ Z& R* V" ^~CInventorySort(){}& R- G7 j! t8 L6 l; o; [5 F% M7 k
private:( X N* g; b, b/ w. I4 k+ A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 v2 t. u3 p7 o0 _9 V
DWORD m_dwPos;
0 {+ J6 }9 o. {public:
5 O: q1 c# d* \/ G- J* wvoid Add(BYTE nIndex)/ _! R, Z, {, K* K/ \7 ?: W- D
{
% w/ D& T/ M4 H6 K if (m_dwPos >= MAX_INVENTORY)( b- ]/ d- p6 Z+ Y+ x
{
9 j; U: }5 [' ?" o# h return;! E# D/ q. n3 D ?' \4 G. i
}
F6 s5 Q% \- m m_Item[m_dwPos].nIndex = nIndex;
9 g7 M+ p+ z' @1 l9 m! q& T m_Item[m_dwPos].dwId = m_dwPos;
* M, T; N" o# D8 B* I4 S" s: Z4 P m_dwPos++;, l6 V* w) g c& O; t/ V
}8 ^9 h: _, L! H
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. t& A# L, |/ e
{
! V1 M4 ]; Z E+ Z! k for (int i=0;i<MAX_INVENTORY;i++)) b, ^6 F; E( \
{
# v( o4 |3 E) Q T" w if (m_Item.dwId == dwId)+ a- v4 U# h* v8 h( T. W
{
; d6 y0 o( I+ M; M1 M return m_Item.nIndex;
9 X4 s9 m4 O4 u3 w# ^% K }$ O/ h( C9 e/ g& D! u+ c
}
6 o1 N {. `9 G, m return 255;
3 A( P8 ?9 f0 T+ O/ J}
4 }4 J+ j( s% y8 o6 Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) a6 Q4 A( F6 O. e: S' P+ q{
6 h4 L; P6 k, |- @ BYTE nTmp = 0;
" _- V7 ~ p' [ bool bDest = false,bSrc = false;
" G5 C: H* d2 v# P5 s for (int i=0;i<MAX_INVENTORY;i++)
; i8 {3 ^$ z( e, u# { \, E {
0 O4 q% M# Z* j+ C& g) Y if (dwSrcId == m_Item.dwId)
; `, N# k) F1 B2 D( h$ R3 a {+ N: H' ~0 {0 T$ X9 S6 L
//id相等 则 改变对应的dest和src
7 ?( c7 H& ~: a0 P% A" w nTmp = m_Item.nIndex;
0 X$ u" K, J. s/ j) k m_Item.nIndex = dest;2 Z6 W, Q. W8 x2 |
}( [6 j6 I: f, d
}
$ W" g- u% h3 ~; U9 v4 v //临时数据保存完毕,交换开始6 @* A! X5 Z4 s7 ]: N* }
for (int i=0;i<MAX_INVENTORY;i++)
. H) n. c6 ^* }6 U {
1 q+ ~# Z8 _& X q, p if (dest == m_Item.nIndex)) K7 E/ M2 o5 r% |
{
7 z( b _* c: @; p3 R //id相等 则 改变对应的dest和src
; b" `' C/ _3 g0 Y/ ?% j m_Item.nIndex = nTmp;! k7 s/ ]( G& G. A, o
}
B! Q5 a5 P' M1 u8 i: b6 S3 ] }7 n+ y) o& y( `. X6 M
}
8 ~; b4 k$ e: T# K* n9 ~# t N+ L};& V( d& S* T2 E* D
-------------------------------------------------------------------------
: }: D0 s8 G' n5 B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ K3 S: w" r5 T0 J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" L. ^6 S7 u) Q% ~. A4 A紧靠其上添加:
' l8 |! U: u: ]+ i. d# Iif( pWndBase == &m_wndMenu )* \% E o) e/ [7 Z
{
5 _% n8 W0 X7 s1 ~2 a! y switch( nID )
/ \1 U4 R( x/ \9 `5 J$ S! F" T4 X {
; n3 [* f, P4 d' d case 2:3 p9 y3 r* F8 l: U! ~3 n
{
9 |; ]* E4 D7 l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: |2 ?& v5 ]6 N' I" o1 O0 A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! Q9 E- p7 \8 ~6 t2 j {$ N, V& V+ b" x* R, f. X
break;/ U6 T+ |+ s" o4 |2 R; {8 e7 l( M
}6 Z- r. J- q6 m: R7 e& U
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- s/ X3 c+ d5 {, }
{
0 N1 v! F' g3 {2 g2 p. k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, ]2 n$ w. y5 R& `* u6 q) j3 m9 d4 D
if( !pItemElem )
X- w+ ]! g* [; j0 F5 H$ j; j continue;
8 L6 m* w0 C% V7 w& ~ if(pItemElem->GetExtra() > 0)0 V/ P& ^- x$ j h
continue;( P4 P7 z! Y& c. i/ m# j, i
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 r- S3 [3 h+ d. H3 j continue;
R" h# y/ G+ F if( g_pPlayer->IsUsing( pItemElem ) )6 P# L$ m4 Y, s
continue;
$ Z- f0 k v" n7 ] if( pItemElem->IsUndestructable() == TRUE ); K+ x/ Q# c& O/ V z; S6 t1 g5 |
{, B# }: [4 A; i! e: ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* ?# w$ A( f3 r' g& I; ~5 ^1 g/ G continue;
& ~+ }' ?% b% }6 V }/ l3 s$ J$ ~/ n6 e' K
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- y1 | f) i& Z5 {6 X }, W" i$ N) C; ^6 Z3 A
break;
7 R* y; [" J2 P" G }
4 j' g: c) n; j! i* h/ o, o! a case 1:5 _: V" y' ^7 i# S; e5 ?2 x+ u
{' S4 J; k* K$ q8 C! u( g$ U
//整理背包0 e( Z5 ? O- F
//////////////////////////////////////////////////////////////////////////& Q6 Y+ `2 W# a7 e7 t" i2 C1 s: X# W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 p9 R! s9 m/ U( J$ @' V! m3 B8 f
//////////////////////////////////////////////////////////////////////////& c- _2 o. c* o7 M; G
//////////////////////////////////////////////////////////////////////////
U2 I! i, ?4 K/ I! V CInventorySort* pInvSort = new CInventorySort;
: i$ l t* n$ T vector <sItem> vItem;
. \- K6 u$ }) B7 c7 w vItem.resize(MAX_INVENTORY);//初始化大小! ~* ~2 S) Z8 `3 E; m% w% u
//////////////////////////////////////////////////////////////////////////& b: s) h. ?. J7 W; j( w! _
//填充数据
# K" _; h x9 C% y, W) P for (int i=0;i<MAX_INVENTORY;i++)
( o7 {) h2 f& ]2 n% G+ G {
( O. S# P2 [9 s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) B0 y, K% \, a( V9 T, h if (!pItemElem)
4 ^/ T. Y* n3 [; q5 Z- y2 w {
. r' [; j! n" v& } a0 h/ j vItem.dwKind2 = 0xffffffff;& X! v) N1 F# Q
vItem.dwItemId = 0xffffffff;
- u- g' [8 _. C( l7 Q vItem.nIndex = i;
- @1 }( C( x% `# a8 ~0 L }else {! G$ M6 \: K( Q7 e: B' x
ItemProp* pProp = pItemElem->GetProp();
3 O% [- B3 f4 m4 v vItem.dwKind2 = pProp->dwItemKind2;& z1 g& C6 D: x) t7 \' ?9 c
vItem.dwItemId = pItemElem->m_dwItemId;! z: j9 O" U5 J' \
vItem.nIndex = i;
0 y+ `: g* M0 {# y3 X" x }
( S2 z$ g1 g( w7 N7 v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 }! o+ T4 T3 m1 `% M- e, ^: A* @' O }+ Q: j( d g( q7 e) E- b
//////////////////////////////////////////////////////////////////////////2 W' X# r) }2 ]8 F d5 S
sort(vItem.begin(),vItem.end());//排序' f/ a8 \9 { _# L# v
//////////////////////////////////////////////////////////////////////////
6 V! `1 W% a v1 u! |) S //交换, U0 i% _8 V& g
for (size_t i=0;i<vItem.size();i++)
' \+ y9 ^8 K8 o9 y$ x {
6 z, N1 J T9 m- F; X //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* x2 W9 G+ S- Z: Z% r& @; N. [ pInvSort->Add(vItem.nIndex);! P! e! }2 [# ?; z; p
}4 g$ L C- k; G2 v( N! {
BYTE nDestPos = 0;$ n, J' B$ w" R/ {8 ~
for (int i=0;i<MAX_INVENTORY;i++)3 |) x5 S6 l% j1 r
{
8 d8 u$ Y5 |0 k, t$ _$ g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* }) d3 i. H- s; ?. d. D5 A3 X! X if (pItemElem), o3 T+ z! O: r1 f1 _; ]$ A
{$ W: n5 j3 }1 S
if (IsUsingItem(pItemElem))
3 n1 }6 d; {2 d$ E {# ~* D& l W8 t. Z) i6 T
//这个位置无法放+ _. P* T8 s8 {7 O, T) I
nDestPos++;
/ `. g% M M/ K( X& a& p! k, z }( s7 c* C: F" v
}
0 b# I& y) N: B3 T9 P BYTE nSrc = pInvSort->GetItemSrc(i);
" j) A9 f" ~3 L) ^6 P4 w# C2 `1 s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, P- Y; a8 J. ^ if (pItemElem)$ G* m# z& e( P+ r
{
5 |6 p3 V' V: Z6 W. s: x, V if (IsUsingItem(pItemElem))/ C6 W6 z1 K) d/ c5 L7 ?
{
2 i( w& N: J/ W, Y+ N1 B! `, l //这个道具无法移动,跳过
( X- \, t7 C; a, k/ c3 N N2 Z& u continue;
- ^) b8 h$ S2 s: a B: D }
: j- F% F! M3 A& Z. \ }else{$ M' V4 r% O1 q# B( e: Y3 {! m
//空位置 不用动
+ K/ |) p( U2 d continue;" `5 N9 D7 p8 T' p2 M* t
}
' p, N& i0 Q5 x- z //////////////////////////////////////////////////////////////////////////( e D, m& A( J, A% r& B+ [% }% t
//开始移动
- y* ]6 G! P* q) X" j if (nSrc == nDestPos)
2 Q" |3 h8 d0 b, i {
& |# p, H1 R; W" _) r //原地不动
Y# J- X/ Z" `1 m* G5 O; q8 A$ b' ~ nDestPos++;
5 C( x( S9 q3 C5 H+ N continue;3 a% R+ k* | {9 G/ N& ^# j9 B
}
7 ^" d' |4 |$ g( X+ j pInvSort->MoveItem(i,nDestPos);
' a$ K$ |8 ~6 e9 K/ b g_DPlay.SendMoveItem(0,nSrc,nDestPos);& q2 @" n2 {8 N
Sleep(5);# U3 L; Y7 m# r& ~5 M }/ K% ^0 W& M
//Error("移动 - %d->%d",nSrc,nDestPos);, j) I, O% B w
nDestPos++;
+ r( a! f4 `' g8 Z" B# @ }; e$ F1 c' z' N' n; B
//取第一个元素的信息
. ? S v2 t! t- Y* W /*1 |% Y8 t/ `% w. y9 r& N
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) P# M# d3 C& b: T4 ~ {/ U+ _1 x/ A r4 S9 n: a
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* \" l g1 z9 \6 q, O7 {2 t g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ m4 V: \) z: i8 F8 w; y3 ]6 s% P }
2 l3 I! T. p$ t3 d */
) Y9 _+ w; R, E //////////////////////////////////////////////////////////////////////////5 ^0 X4 A5 S) Y6 V% g# P/ e0 T
break;
: A0 ^1 Z$ O4 D* ?8 d0 Y }
+ |; I1 E% `- C }
' I0 `/ ]! a) A4 h6 X- q$ Z0 t$ k}' L, {( Q2 T9 S3 a" q. m
m_wndMenu.SetVisible(FALSE);
7 j0 C- Z7 K. k# H) Q9 C, F5 Y) [3 G! }% f
--------------------------------------------------------------------------------------------------------9 _/ i; ]. o7 B, q( ?/ r9 W
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 Z& P0 \6 E4 C* R
{8 D' c4 ?; p9 Y) T4 |
BaseMouseCursor();$ I. R( e; x- p$ M. v
}
6 _1 _3 [" @0 m4 r- W在其下添加:
7 k- W h8 h0 L2 \$ hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( O9 K' O8 r( G5 j{3 Q' {* M/ G$ x% D) B" m/ l
m_wndMenu.DeleteAllMenu();# i" G5 T, s& l1 z2 O5 C
m_wndMenu.CreateMenu(this);. D2 _" j6 v1 s: `0 {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! I7 n' a6 ]% q" L/ ^7 J+ S
$ v0 _% ?5 R$ G6 W$ c( Z7 P1 L$ mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 N- X4 U8 G; c' b9 w& Q{! L9 T' ~$ G4 s# G$ u
//P以上级别才可以删除所有道具
! s" N, C! n E* i# X' t) ^ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& B: Q1 K6 c: D- c/ F0 D. z9 [
}
4 K: ]- j2 |2 v+ v3 cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, w* v8 _; b+ z( [1 s$ O. Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 c; d8 C- w& ]' }
m_wndMenu.SetFocus();
& g) f. @! R6 p1 Z( E) [ Q1 }}
: O4 g5 c# f3 F% o9 R------------------------------------------------------------------------------------------------------------# b- D) Z- ]3 \0 g2 R
*************************5 a& S9 h+ J, c1 O8 ]
WndField.h文件0 \3 ^* X/ x" q1 A! x
*************************2 a' k) v8 ?; u( ~6 d
搜索:BOOL m_bReport;* ^3 W2 f5 h# q& t3 i' [ T
其后添加:
* o0 I9 p9 q$ A1 r7 \CWndMenu m_wndMenu;+ ~- S- Q' L6 R8 N
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. T* }) _, A! P* ~# I' F; h- Z# F; m3 S
其后添加:. u* P4 W) _6 c2 B/ Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 K: E$ ~* a8 `
% V; [! q6 @) i& x
: x; N! u7 P4 ]6 Z" q |
|