|
|
源文件中_Interface文件夹下WndField.cpp文件
3 O" q3 J6 i) O" b: A! R搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% `) P3 w6 {# ?% p$ S9 Q: ]. ^
n8 C# w. ~! V$ Wstruct sItem+ P- m' Q# q- d+ ~
{/ a" ~ v5 ^6 H2 I
DWORD dwId;
) D, {+ W( d, l: q7 YDWORD dwKind2;9 M$ h$ P+ l0 ~
DWORD dwItemId;
0 l# L. w" M3 XBYTE nIndex;
2 b, t6 ^2 w& U0 `/ ?7 {9 _sItem(){) m2 S' R1 g( ^. M% B
dwId = dwKind2 = dwItemId = nIndex = 0;$ X2 \1 \& k8 [1 c9 @ U: F6 Y
}
' c8 ]2 [. f( L7 w# z9 ^3 qbool operator < (const sItem p2)
; H: z8 ]% ?2 Q, t{
. Z$ n3 V, C5 ?' W if (dwKind2 == p2.dwKind2)3 ~0 m4 p0 d' ]2 C; R9 w% H
{" ^6 A9 P1 u0 E; O1 r
return dwItemId < p2.dwItemId;! \0 v$ J m' U' ] L; N7 C
}else{
1 n3 h0 ^7 @: }% e) ]9 T return dwKind2 < p2.dwKind2;( ~7 |% w; H( A
}
4 L& m% B" e. E}0 }! }- D- k3 o; s$ H7 d8 Z) a- |
};4 z4 I a# n+ t- w
class CInventorySort- k: R b( k6 a+ t$ w6 b+ a
{& _# D* ]) [0 w: K, C9 P
public:
' i" V( f& S3 [# `9 Q$ U7 c4 wCInventorySort()
- E. q1 M; e! M4 J7 z{
, N: B0 |8 h/ c: J, a m_dwPos = 0;
1 g* J8 T1 H7 i* D}
P! f& z I: b. j. @0 K~CInventorySort(){}
8 [( E; l% D0 ]private:! m9 f6 v, X6 a9 r; M" @4 }
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 R7 @2 ~3 ~6 r1 r9 A% q2 X* d( O
DWORD m_dwPos;5 m, \) u h5 S% c
public:$ w' d" a2 C$ e
void Add(BYTE nIndex)
- D \% l$ w" L{7 @1 R( d. }, o& ]
if (m_dwPos >= MAX_INVENTORY)% X' U1 ]) r, z9 {) N R
{
* Y" H) I" o( Y8 V/ L/ i3 Z. H# E return;: Y2 Z9 l5 J( ~2 G' u' m
}! F# b2 Z% G2 s+ T* I& |. i3 i
m_Item[m_dwPos].nIndex = nIndex;) H3 y8 d ?! t2 c% ?
m_Item[m_dwPos].dwId = m_dwPos;
) N0 f- x$ B4 ^! O m_dwPos++;6 L# R* P) O) F$ a; k! p1 a1 A
}
" }& k$ w: u& H! m, J0 ~0 wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% i* }) i. s8 E% L( _, |
{2 N$ {' W1 ` ^8 F8 t4 ^6 F
for (int i=0;i<MAX_INVENTORY;i++)
& z4 z* G9 ^1 w: z9 D% v: a; W {' `; q: b# D3 Y" c8 P
if (m_Item.dwId == dwId)
% m1 N- Y/ B( ?! ^- [ {/ F, y/ I$ T' M+ F; @+ _
return m_Item.nIndex;
! B9 N& b3 c- M }
1 B/ Q) |) b: `! e1 m. C& e }, h4 ?% u8 D2 k. w. f
return 255;( Y5 y/ X% V% }, z4 Y6 O( \
}" H& S( g7 s: q6 @1 A3 Z/ O, w
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 F7 v, }, u; s3 @- H3 z
{
. i/ t, d: [$ }# P+ |) |! k BYTE nTmp = 0;
5 Q1 [8 Q( Y4 u5 r) Y8 ^# w bool bDest = false,bSrc = false;
9 h; v/ E j+ C9 B% R. A& ~ for (int i=0;i<MAX_INVENTORY;i++)
3 s: r x# p, @ n: E" G9 S {
# S6 I3 v' l* D1 C! e if (dwSrcId == m_Item.dwId)
& }) `3 H1 P% D7 p4 S6 | {
( J, @; e$ m) m6 i //id相等 则 改变对应的dest和src' [5 J/ R4 Z0 J" T0 d9 o
nTmp = m_Item.nIndex;2 e6 j8 X3 y% y2 A
m_Item.nIndex = dest;: f, v/ L2 v- g0 M
}. w4 s: j' I0 i' J* W
}
& N1 H' W. T1 R) F d# I //临时数据保存完毕,交换开始
9 D+ S, c; Y; o, V* f' g2 J ~, u% ? for (int i=0;i<MAX_INVENTORY;i++)' b2 M z; x5 k5 X! I
{1 U3 q7 x; \1 ^* G* F
if (dest == m_Item.nIndex)
9 ?$ n6 m$ j7 ]. Q4 p! ~% l5 X {
# R- C( \4 R9 x# [# K0 S/ P, ] //id相等 则 改变对应的dest和src
( F/ h5 n4 F, z: M m_Item.nIndex = nTmp;
0 i8 n" L8 x+ i0 ?3 c }
" ]2 J( r, j, M2 H }
$ d1 m3 H7 r* |) a/ B0 z/ G7 m}8 _% l2 y% y d w4 k* ]# m! m
};
2 _: o# X0 l$ j; n j-------------------------------------------------------------------------
1 c$ X" ~: n: w0 T; p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 T- v/ S6 S5 v1 x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ K9 K- `0 Q+ h. M紧靠其上添加:
. V2 \7 N6 G5 b+ ~8 Pif( pWndBase == &m_wndMenu )
' ^# Q& \8 P- K9 t$ F" Z; u{% i, v- i( Y) v) ~- q7 T' F
switch( nID )1 G; f: j' H# I7 ~, z' G
{0 a! ^/ E ]5 F2 O- M+ j* [
case 2:
7 B" `' m. u7 Z+ E$ V$ D2 ~) Y {: T& h& ? x3 G8 j) [) Q& k( r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 G% K L% ?0 [! h6 p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 t; o1 l2 x0 d+ [6 Z {& |+ K$ F; {3 D9 ]6 ^1 g
break;
1 F/ j" K4 F# z& G+ M. [7 o8 l8 { }$ p' V$ d3 z& D2 V# Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! U! _$ `- N' Y, ^
{
8 ?( P$ u/ i% W. R' p3 w7 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# F% C7 p6 P0 l* ` @
if( !pItemElem )
) ?3 {" f! I$ K4 _' L continue;
+ C d. r- L C3 L% r if(pItemElem->GetExtra() > 0)
/ @+ X# N, M8 C) I% { continue;
/ t" _+ K2 J* I( Z$ ~; R8 j$ S if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. h4 t# V6 @: x. ]4 e continue;
: P. l2 e. y: G# N if( g_pPlayer->IsUsing( pItemElem ) )! i, ?# L0 ~8 z4 C* C1 h- K
continue;, C( j! e; C" [2 Q! G/ F+ x
if( pItemElem->IsUndestructable() == TRUE ); _% b4 A3 M3 I* |8 w# Y! A
{
9 ]& ?& p7 S" f+ ?0 F/ h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 t" J0 I$ B0 {# Q& J- h* ^ continue;3 [2 F& L( l9 z
}
* J Y1 B( |+ v1 V- o8 [7 u g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 F W, A, X$ K( R f }
4 g! y @. L* m8 ~8 w, h8 q' _ break;
5 l; X E5 o) _$ J/ v b) o0 _ }
5 d+ L2 H7 [) Z% `' K/ V case 1:9 z4 R0 [- E6 X) D6 x# z3 x
{
7 }$ N" g* G$ L; u' z6 R& F //整理背包! g2 E& }* ^" T! n" M+ Y: J: u6 \
//////////////////////////////////////////////////////////////////////////
. _- S( d9 [8 W# _. _, A //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 n, B: L* }5 F7 r
//////////////////////////////////////////////////////////////////////////
& B0 y. L( n+ {0 n3 I //////////////////////////////////////////////////////////////////////////; g( P% ~ S% Z/ Y1 o9 j l
CInventorySort* pInvSort = new CInventorySort;# m/ y; E4 J3 R% k9 A0 X$ y$ i
vector <sItem> vItem;0 w8 l0 l" F* d
vItem.resize(MAX_INVENTORY);//初始化大小
- K: D! i2 ]0 v8 _8 w4 j //////////////////////////////////////////////////////////////////////////1 B5 l, O! Y; q) y, X0 Z
//填充数据
% z- U+ `( M2 D6 C1 O+ b* }* P5 I for (int i=0;i<MAX_INVENTORY;i++)3 p* N# E' c: q, q P* V+ y
{) ]2 @$ V4 h, t; B9 l% ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 `5 d5 b8 ]# h3 r& U if (!pItemElem)
" _5 U( _% e4 p9 ^! ]% O. m2 a; d {
8 R1 F9 g/ X/ T vItem.dwKind2 = 0xffffffff;3 Y ]/ o5 {" i7 \$ Q4 a
vItem.dwItemId = 0xffffffff;
: M# ], S/ Q- ^( a# [# d vItem.nIndex = i;0 m1 T9 H% q" q- S" E
}else {
& ^5 Q) e+ M v+ A o ItemProp* pProp = pItemElem->GetProp();" t2 ]; n/ \: Z0 R* ~; I2 Q% @/ g9 Q8 _
vItem.dwKind2 = pProp->dwItemKind2;) j8 d3 f6 c( k$ Q% q$ O. D" d
vItem.dwItemId = pItemElem->m_dwItemId;: o# D/ C. A( g& H0 j
vItem.nIndex = i;$ K5 ?7 F7 t, A' a7 E
}
) ~2 \; g' \" o6 w8 T1 g1 H //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ p! w, I2 y7 j
}; E0 _- G0 M1 ^0 h4 M9 X0 j
//////////////////////////////////////////////////////////////////////////( p8 q# s8 A0 V$ O& J/ F
sort(vItem.begin(),vItem.end());//排序
6 o! F P5 F+ Z! s7 b //////////////////////////////////////////////////////////////////////////% h# \; q: w* n5 H2 h
//交换( E1 v& _& i, c6 D9 S
for (size_t i=0;i<vItem.size();i++)- \6 ~ u3 u: m1 k1 e
{
4 I y, u4 I% w# V //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 b- p8 K+ c( p, f
pInvSort->Add(vItem.nIndex);
3 u, X( j0 J$ S- c! z% g }
# Y1 q3 q1 P$ L: S' H6 a" Z BYTE nDestPos = 0;' w6 O5 |# S( K
for (int i=0;i<MAX_INVENTORY;i++)
" g, c3 g7 X1 h0 H% D6 V {
, v% ?" r% r5 I# c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 X# ]0 X8 T4 z! |% S* S if (pItemElem)
6 v5 `8 L! I, k7 v; ^ {
5 f2 C# f, R" X Q6 g# u. ` if (IsUsingItem(pItemElem))7 X" X2 G5 r/ C2 \# c, j- n: a
{1 l. x7 Z% A" X
//这个位置无法放
2 L) d2 q3 d6 [! x" P, q nDestPos++;4 k' v* ^9 T' ^8 V" ]
}
) p* M! W5 M! d$ D- H }* k5 w( k6 Q( w/ m$ u0 H
BYTE nSrc = pInvSort->GetItemSrc(i);! V; W$ y+ f# H. _/ X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ _- o" R" j/ N
if (pItemElem)
) \( @# G \) M6 H {
' M O9 c6 ^# ^ Q) H if (IsUsingItem(pItemElem))
- n, N" B* O* F( V y {
% |# _" G$ C; r! _7 G9 ] //这个道具无法移动,跳过
4 P$ V- ^& k+ @7 z7 y continue;
P' F4 G* x+ d" _; }, D }# }, |/ a( m0 ?6 I* ~5 w4 q
}else{) u6 [% l9 m7 B
//空位置 不用动
$ H+ i9 x. b, p+ o2 d. [. Y continue;, j3 V- \5 h( @+ U" K$ @7 n6 c
}$ ^& B0 G* l; o6 b7 P
//////////////////////////////////////////////////////////////////////////
7 m: B& Z( A3 F# i //开始移动9 Q: b. M1 j* r% q+ U4 g4 V0 }* O
if (nSrc == nDestPos)
% l8 T; U i" h) U: p {
, }/ E# T* \6 r: G: @ //原地不动9 V. l0 z+ |" ?5 ?5 u" K: m5 r9 ~$ E
nDestPos++;
. O+ J' s& s4 ~1 s' b$ \ continue;; }% {/ |5 H4 b* |
}
- ~' h" }& p( j @ pInvSort->MoveItem(i,nDestPos);: b9 q6 q: W6 Z: }
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' M: l$ w( I, } Sleep(5);& g3 m5 B! o( J2 Z1 [
//Error("移动 - %d->%d",nSrc,nDestPos);
& [1 o$ S3 o8 E- \0 c/ L3 ? nDestPos++;- N4 [8 J d7 q4 l1 t& ^( U
}
; o, v2 g) T( R s //取第一个元素的信息
& o* N `! G: Q; n5 |6 _ /*3 b0 Z2 q# N# w6 Z0 Q9 J
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
x4 h- D8 O8 A8 C {1 b1 O" K1 Z9 r& A& W! \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
r5 B7 Z$ A% P7 |3 A g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 a/ p5 V1 J' ^. V0 k# i4 J
}
' G2 Y1 V: S8 U' r, L' ?2 b */8 }/ P! M, K' l' i! M [3 O4 G% J1 I
//////////////////////////////////////////////////////////////////////////5 R# k3 V$ F7 L% X) ?
break; p2 l4 }$ M& }' _* A: R
}4 _; O v. r! _9 ?& f: S6 a: }* E- R6 L
}
0 O7 q+ Y* \. Q) l}! M: |$ a* g+ W+ R- e- }" T7 h
m_wndMenu.SetVisible(FALSE);
+ G" S: c! s p- Z3 B& @# q7 g9 a- ]- U/ {1 @$ i; ^1 V
--------------------------------------------------------------------------------------------------------; y. d: l4 n: u
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) v6 `5 H0 y9 j; n{9 H T$ b( Z# F& r5 B
BaseMouseCursor();1 j& Z( | d% X" f9 o$ f7 n0 O
}
. J6 X1 f# O# z; r7 H在其下添加:; Z8 M* q1 J$ U2 J* }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, i$ |, w% ?' a' e+ d3 P+ `{3 X/ ]7 F8 B* x, x& s
m_wndMenu.DeleteAllMenu();! L6 L+ [* a" m7 O6 {* h
m_wndMenu.CreateMenu(this);9 l# g; K+ B! {3 z% u
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& q! v; I( {) h) N# l+ s3 H/ A
% k! ^9 p7 ]6 o" Y* Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 C f2 ]- p0 w0 t2 T. [5 a{
' ?; ]$ r6 e+ ^: d, ]* u1 k //P以上级别才可以删除所有道具
2 y$ Y$ R0 a E! v, v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" n8 o- @$ q: G# Z# U' e+ I3 H& b/ j
}1 Q- X+ |8 d1 E
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 Z2 X$ U! R Y# ?8 _1 @ Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* {0 K9 J+ }7 g4 ?) P! t2 `3 mm_wndMenu.SetFocus();
* x" R; X: M' T4 l& ~( x) ~- g* G}9 w M+ m P0 S) Q
------------------------------------------------------------------------------------------------------------
7 ^: M# G2 J# d% T% s, A) h$ {" `*************************! U& W: f3 @$ d+ v- J" u9 F
WndField.h文件
; p" W3 w2 E9 ]" |7 \: _*************************! W( z6 F1 _, S8 a& X, v; E- a( x
搜索:BOOL m_bReport;
2 |% B( E$ `: j7 J& n其后添加:
, ^# j! X/ g- k4 s7 hCWndMenu m_wndMenu;: n8 k' }5 ?7 n, B" `; A
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 u) ?% Y, X5 J. ~# G) A/ R
其后添加:" a3 i I: q6 c; o) P2 b) f( r+ _
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; \1 i# p0 X" n/ Q* R
! ?) F) d7 P/ e0 t9 K
/ v n% H/ o0 h) q9 q! [ |
|