|
|
源文件中_Interface文件夹下WndField.cpp文件
& a+ a& m* i! I, Q9 b2 B+ N, L$ M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 {$ {% ]9 A- ?) d" Y
; v+ q: z/ f! L9 H3 V& ~7 |
struct sItem
5 K) f: b9 D& J3 W/ C{
, w3 L9 c- c; ]5 O; o' E9 R) [DWORD dwId;
& F4 I) y$ X2 y! |; a. ODWORD dwKind2;! H8 E# C2 e2 d: A) H+ @
DWORD dwItemId;
' s, |- M+ P; ^9 ]. XBYTE nIndex;
_) W4 O" e0 g$ e5 s+ N) p8 U# JsItem(){
/ @# U3 B2 x, b7 M- O7 ~- K dwId = dwKind2 = dwItemId = nIndex = 0;
0 q. O% O3 W/ g5 D" T# d; r6 X}
1 L0 c& t' \3 G1 L" bbool operator < (const sItem p2)
0 Y L4 ~2 a& s. p# R{
, C3 V9 K8 s( e7 [' n if (dwKind2 == p2.dwKind2)5 B- E. y7 s/ R1 U) N; F
{
6 ~" ~1 |( m& Y3 k return dwItemId < p2.dwItemId;" A0 l( G! ^: E: m9 z! K! s- i
}else{
7 f: H% O. k' {$ o( ~7 S- w return dwKind2 < p2.dwKind2;0 U( m" M0 m; P' {
}
, `3 G1 @- G2 [7 _4 \( Q}
! i9 _) J8 U: Y% k% C6 W; l$ V};. D; d1 V2 ~$ N9 T% K
class CInventorySort* x, V4 R. L' X5 G' j& g8 {& t% p& J
{
, o Y: k% i. C2 w7 h y, e$ _' Npublic:
) c. y- r. J& e2 YCInventorySort()* } W3 p% h6 Q, _$ J* X
{+ s, J* S3 j! y8 A
m_dwPos = 0;
$ S& p, T5 X! ]. Z/ w}
: S# |: p6 I) n! N7 k* v( i. R. [~CInventorySort(){}
$ u& f- x. [6 |+ A% Bprivate:
" k0 m% S. i) X2 A8 usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ f* n, S2 A' O" \5 ^* l, K7 Q* ZDWORD m_dwPos;
1 ~3 p0 ] @- [9 P7 h1 |public:# O% u+ F6 ]# V
void Add(BYTE nIndex)
, _1 g+ F' U; v( [; I{
( M- r: E' s A+ X' K if (m_dwPos >= MAX_INVENTORY)
7 h* k& f# J8 b( d3 @' ]& v" p {7 L& m6 N$ i" ?% {" f
return;7 u* \( M6 P7 S G! y
}
) b: t j5 D& l- ` m_Item[m_dwPos].nIndex = nIndex;$ ?6 X$ h1 ^: ?" n
m_Item[m_dwPos].dwId = m_dwPos;% b8 N% |! _5 D9 [! g Z8 v' u& Z7 p
m_dwPos++;
) O) i6 z8 b% H h0 \( i}
" Z- g9 t/ E" c4 \$ H# e3 JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 ^: y5 k7 Z1 v' _- c% i* {{
) N6 [ W& n2 `! K4 f" y for (int i=0;i<MAX_INVENTORY;i++)
. O9 @) p5 E9 {. _ {% Z3 T2 \; q% J! M0 q7 k1 i6 [, l
if (m_Item.dwId == dwId)
; V8 L& ]" Z$ ~% n; ?0 a {
' w* S: |# `: r2 x& E return m_Item.nIndex;+ f9 M6 _: E4 c+ v
}
- B/ e7 j1 [& x2 m+ C }& z% n) P' A- Z. H6 c# ~
return 255;
5 x/ W5 |# G5 u}
6 s; h- o: t; Y, r5 p- Ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ e5 D, X4 z4 y- e8 E
{
9 J1 U; |; ?% L7 Y) ` BYTE nTmp = 0;5 }/ P/ Z4 S( X+ [# t* q4 f
bool bDest = false,bSrc = false;
$ m' C" h& t) k W& O; Z! r for (int i=0;i<MAX_INVENTORY;i++)
$ N: Z+ A1 y0 B. a {: T, K& I$ V7 U( N
if (dwSrcId == m_Item.dwId)
: e! }, J3 j v0 x1 l {
4 F7 T$ b0 e* B1 N) r3 h //id相等 则 改变对应的dest和src6 p% T8 ~ R* h
nTmp = m_Item.nIndex;% E+ d' T5 v$ m* a3 w
m_Item.nIndex = dest;
/ q% }8 j* g& l) a* ~$ S, c5 Q0 L }( V% |& O1 ?2 J b7 A% j
}: K/ k |! v: j+ L. ~1 ^0 l B2 u
//临时数据保存完毕,交换开始
( _, c* K, [& _8 M7 h9 _: S/ n for (int i=0;i<MAX_INVENTORY;i++)# p9 U6 z6 P/ Q/ g
{' I- N1 ^. U6 C' X& o! u2 p
if (dest == m_Item.nIndex) l0 G) l) Y+ z7 [; j$ w9 s0 u. j
{
- d8 g4 W& a* ~7 { //id相等 则 改变对应的dest和src
8 R5 \9 U" q5 V* `5 E; }2 I m_Item.nIndex = nTmp;% L9 k7 X- J' q$ X
}+ f$ z7 C: V }7 z8 r3 s+ o
}
- F) W' v8 l( P" K/ V& l6 I}7 R4 N. B/ a* L$ `- l
};4 C2 A) ]2 f; ^6 S2 R
-------------------------------------------------------------------------
& v! k* N9 B% w" D- k* ]依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
f; j3 K* v. o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 r' I$ ]$ q& d* d. ]
紧靠其上添加:- |2 r! E) o0 k: d0 ~8 g: m
if( pWndBase == &m_wndMenu )
0 q9 ^! A1 j0 p' o{# M0 B: r: S0 \6 ~; R$ g* w
switch( nID )! h3 _9 b3 b8 X8 B7 B
{
# x* m! A! G) ]/ Q case 2:
! c( `( P8 C7 P" E {
; _3 l5 h/ o8 K% T* G5 e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! y1 n! k; G I' N4 v' n$ ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: o7 }5 C% K9 N/ Q' l$ C {. B! G6 |( ?; ~; M
break;' f2 Y7 ]0 S5 ]/ i
}
( n7 ~- _ l: Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% U; {- X. [; v$ s {
3 `& y/ {0 s$ X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# u9 @* a, J0 _) `6 n" X
if( !pItemElem )2 {- I7 @9 f. w' j. {3 d
continue;
' v. U; _8 @& S, Y if(pItemElem->GetExtra() > 0)
% [, p( N. O- H1 {3 g) Q$ { continue;
9 J/ _( `+ W! A( O$ Q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
J- f0 y/ L @3 n continue;
# T( Y/ I* F! `* V$ M6 e if( g_pPlayer->IsUsing( pItemElem ) )+ G4 X; ?# q& R
continue;
/ N$ L+ a+ n* O& B& p0 | if( pItemElem->IsUndestructable() == TRUE ). V; E/ e' ?4 X
{# h) v: N: W) {7 {, k3 c
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( k# ^; d) U6 R R8 @
continue;
4 z! O7 |5 w4 [/ `: v1 D! f# g, i }
! Q- i" C9 f( b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& V+ K: ]- R6 v4 K& M. M+ u7 Z
}
5 p% N# b4 }3 I+ b) v% {6 O& F5 j break;
( U( y& b* h2 d0 w7 o8 F }# W3 l& ?6 `: d z7 ~3 z9 q2 i7 p( _
case 1:" D( c) V$ n* i
{
8 K& q$ m" j; Q# A //整理背包
$ s: ?- F6 l* m' }) }; F //////////////////////////////////////////////////////////////////////////+ s9 ?7 \( w! q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 |" h# b( U# S0 `% Y' w& g; B
//////////////////////////////////////////////////////////////////////////
0 }: l3 u- i; L$ e9 g //////////////////////////////////////////////////////////////////////////7 Y. Y! X* f3 Z0 N" j
CInventorySort* pInvSort = new CInventorySort;/ E$ W G. d+ F% h5 ~
vector <sItem> vItem;
2 F1 a5 V- h' @1 ^ vItem.resize(MAX_INVENTORY);//初始化大小+ U- z6 {* S( G0 b/ |3 |& o+ L
//////////////////////////////////////////////////////////////////////////
6 S. Z+ w# m2 X* w+ `8 x //填充数据5 k1 o1 r% c8 B/ M, r9 r- K8 L* e
for (int i=0;i<MAX_INVENTORY;i++)' e! B2 R3 |' z4 E6 l. r
{! u$ A3 p1 y, W7 v$ Y3 O3 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 ]4 H+ ^! s( @% R+ F$ t$ d8 B: } if (!pItemElem)
4 i# u) V4 ?5 @' x {
# p+ Y. q4 C3 d: n5 a1 M vItem.dwKind2 = 0xffffffff;
* l7 m q; S# z- o vItem.dwItemId = 0xffffffff;- v. b8 F6 S$ H! N, J3 u" U7 A
vItem.nIndex = i;3 y0 o; d) g$ U( S9 V
}else {
/ @6 [9 s% t& [+ t7 H ItemProp* pProp = pItemElem->GetProp();
. \! \+ Z4 g& Y+ M: B) _- B# M vItem.dwKind2 = pProp->dwItemKind2;
& z: j9 G7 I* J$ ] vItem.dwItemId = pItemElem->m_dwItemId;- p# b" F2 _2 e9 b
vItem.nIndex = i;
! m1 [& U6 L' j( _+ w }
9 ~6 X" h, q0 N& d: K' l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! C$ Q& W# V. {" | }/ n& i0 C3 Y; T1 ~
//////////////////////////////////////////////////////////////////////////
: n' r6 E* E0 r sort(vItem.begin(),vItem.end());//排序4 w& @* D$ ]" c0 M$ W5 z) k: B; l
//////////////////////////////////////////////////////////////////////////
$ D* U1 H% H2 m! z //交换
. H/ y# a, ^. @9 k; V for (size_t i=0;i<vItem.size();i++)1 \7 l( p5 L6 Y% b
{
: P4 O. }, D, y8 ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 }) B* n( s$ ?! G$ s4 W
pInvSort->Add(vItem.nIndex);
1 B1 U) o' u6 X) O3 ] }) q& R( c2 q; H1 U i4 J7 t4 j
BYTE nDestPos = 0;
" F: U# G1 l1 g* E1 z for (int i=0;i<MAX_INVENTORY;i++)
! P0 \, ~7 p8 v( M% q, c { n. V: }( ?4 L. A: L; G) ?- u( ]' ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) C+ P3 }! j) p1 }) B! z if (pItemElem)# g! z/ N) m' \0 }" a) Q
{
: E8 m* t0 m, {7 j* _ if (IsUsingItem(pItemElem))0 c N! [" ~" K9 |
{
& h8 m, w- ^. E' l; s //这个位置无法放
; _2 J" u/ Q7 y* n0 ~* ? nDestPos++;3 ~+ v' z, \2 K; ]1 Y) q
}
, a) b: y) Y$ g* j5 g7 Q6 N z }
- z$ ?# F" q' g3 r BYTE nSrc = pInvSort->GetItemSrc(i);
/ D5 l$ `0 \! t ?+ J3 g+ m pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. R& n1 b2 N+ S if (pItemElem)
0 p% U0 s& X' ^; H4 S {
, N, p4 l1 j9 ~ if (IsUsingItem(pItemElem))
# A' b" r) d& ?5 j% r2 ^5 G {" e9 l6 E- ]$ o: e7 z" A* c
//这个道具无法移动,跳过+ J Z4 p* e5 c9 e3 O; K
continue;9 A Y, x+ r. w7 O
}
" Y F& a/ ^1 m r }else{. P/ w7 n. B" Y. M
//空位置 不用动 T: T3 O1 |3 c# i9 s/ j- C( K
continue;* [! Q: r: |' ]3 p. g) n8 x
}
( y( P) m% {2 D7 |; o5 h //////////////////////////////////////////////////////////////////////////
8 ^ @' z( q( M' Q+ ?) J* } //开始移动
6 w g# E: \4 ^: |% T( }. h( l! C if (nSrc == nDestPos)
8 y4 P7 B# a5 B. j {
) E7 D0 r# J) K$ G1 g/ z- O- d //原地不动! K' H7 l+ B$ }' M' R5 m M
nDestPos++;4 }: t3 e, d' E/ D
continue;
0 S& f3 `: e9 ]$ J9 i" J7 S& U* S8 z }" X7 R, y1 n, {/ Z M9 S2 j* Q
pInvSort->MoveItem(i,nDestPos);
! g& U2 o. R( b2 n H' ]+ F g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 X. [& |9 W' T% _% a2 W Sleep(5);
! `9 p6 z9 _9 ^9 x4 W [ //Error("移动 - %d->%d",nSrc,nDestPos);% N) N& ]: z# r. i5 Y
nDestPos++;
' p- |2 R; O! l# s5 b$ A }" I" d8 e& t. l2 g
//取第一个元素的信息% A+ {6 _1 X& e$ s) _- w; q
/*4 l. x# H3 p% s. B; u
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 q- l% V: e: Z B
{
- F6 _' n' C: O0 \; d: ?0 j# ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* p. o* `3 K4 ?$ n- g9 v$ `, i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% B# F# r/ b8 u4 a* ^' K n0 @
}
, H' Y6 ~- `# I: N */
; ~, @% [- v% i6 `# C //////////////////////////////////////////////////////////////////////////
/ Y z8 W4 _) \& K- Y7 k break;4 y' J+ b3 @0 s! _6 i8 [
} f9 Q# Z0 c0 Y8 e0 @/ y
} ) q: J) V2 v8 t* V; E% o3 C
}
2 Y* M3 j. @) [# {* p! Um_wndMenu.SetVisible(FALSE);
$ f q, m3 Y: O' L* `5 t3 F( A5 r# W2 B/ R, ]8 t. y, x' i
--------------------------------------------------------------------------------------------------------* u$ Z& h9 N9 _" ~
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 ^: z- b4 O3 [ R: C2 F{
6 w! T" u" t& k6 W# V! }0 F, sBaseMouseCursor();- F6 w7 ]- x+ M
}
& [" i- `1 ]' v( M6 G在其下添加:; {* R" y0 w; r3 I; I0 m
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& q1 b$ c; G% r1 h
{
- H( U ]: v: _% w% _m_wndMenu.DeleteAllMenu(); {- s+ _2 r" F
m_wndMenu.CreateMenu(this);
/ w F+ N* w0 p( L2 `$ `. Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); a' x# w( ~# Z7 V! u
+ S5 ~" k! `" h3 Q( g2 M5 H( W9 O0 a/ G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( k* x( x" L2 ^- t9 ^$ ?+ Q{
% K8 b! D# g% g, Y //P以上级别才可以删除所有道具
3 F+ V$ [# n8 w7 @' D: T6 t Q3 _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 p# ]6 ]; v6 l( _" m; z! l( D
}4 O- I; w% |3 {$ v9 T
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" O9 k: i5 i k( t3 z/ um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: T' X+ Y$ ]3 g3 t
m_wndMenu.SetFocus();
& E! I* N2 e8 F+ n6 T8 i. ^}/ s' s. ]. H& A- e0 ~5 p
------------------------------------------------------------------------------------------------------------
' V: d9 |5 _; t( J; c*************************
+ u: j; r# n4 M+ \WndField.h文件; i6 J6 o/ P3 [; A1 C# y( u# E* {
*************************7 t" I; b' Z8 i7 |3 k( d7 s( B
搜索:BOOL m_bReport;
2 g- r7 c- G% d E/ d其后添加:! R, J- \0 Y$ M+ P* {& ?: b; r
CWndMenu m_wndMenu;
3 d7 s% V; K, X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ ~- M( h( B3 E6 d3 J, R, m' A$ x其后添加:9 b4 D0 H1 g* S- l9 ?3 g8 U# M5 J7 O
virtual void OnRButtonUp(UINT nFlags, CPoint point);) \4 O! q8 | l' {
/ I3 O% i* Y6 U5 U" d+ ?; v. j
6 a$ e' z2 y' u+ c* E3 t
|
|