|
|
源文件中_Interface文件夹下WndField.cpp文件
; Y7 a b" y+ n* @3 y* n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ f5 T8 V: B$ y" d" |
7 ^4 F: N$ _& U/ vstruct sItem2 |0 r% h- W) [
{: Z' G$ @) {0 `4 E/ R z% r8 S6 m& c
DWORD dwId;
! C5 h7 H& k0 [( j2 {DWORD dwKind2;
- f6 |- h5 q5 A. P& u+ }' E5 E( Q1 qDWORD dwItemId;( f, C, ?7 a4 X! T
BYTE nIndex;- l& G% f' p! n
sItem(){
, O+ w/ ~5 T4 u9 _; v- A dwId = dwKind2 = dwItemId = nIndex = 0;
) t0 D) h s! `( [1 N' F}; L, U. m. ]: `2 k7 X
bool operator < (const sItem p2)2 @, `- N8 k$ X6 L0 W
{3 |! e' e D: [# x# u$ W% C/ ^
if (dwKind2 == p2.dwKind2)2 ~3 [0 d0 c7 T9 k, M( `* e4 g; b
{
# l( o1 C6 e$ D8 _ return dwItemId < p2.dwItemId;
' x1 s$ E0 R3 O4 h8 m }else{
* K2 Z, v; {2 h) N2 z) v return dwKind2 < p2.dwKind2;
, d7 R3 `" i" O' E) V }
: G) P* f. j( F/ X S6 c}
- F" g9 j6 p" y' T};
2 A; W+ H/ L. Nclass CInventorySort$ o+ `0 D$ r% I/ y* |$ ~5 t. E
{
- I6 P- q; d, O7 e2 q( qpublic:
; I7 O3 H& j( z6 UCInventorySort()
! }. b& W! K+ G! S{) j0 k: s" \ `0 r
m_dwPos = 0;
* k% I. |& j& z' `/ g! I1 ~+ z* j}; d9 X0 z, y6 M9 n
~CInventorySort(){}
! Y( H. e2 v& G2 u' s. I9 iprivate:9 _8 X) O. M" j4 S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 F" ^9 p: n) R! e; C# F/ I
DWORD m_dwPos;( Y' Q0 T) |% C
public:
9 y0 L9 d- P; o/ {# \$ h2 R5 G# X& avoid Add(BYTE nIndex)6 _7 e9 g" G9 V! {# m9 N p0 l( P
{
7 j q T; d2 e: t& d7 D% N2 W3 W if (m_dwPos >= MAX_INVENTORY)
$ W$ j" t& P. I# K0 U" L {4 Y# k) |* R1 c
return;
3 ^! y! _% K7 x. ^! Y! B+ m7 ] }& V9 r3 j" V9 I$ l* ]! m# f
m_Item[m_dwPos].nIndex = nIndex;1 d/ t" I# @$ C& ]
m_Item[m_dwPos].dwId = m_dwPos;
; [2 \ \# V3 e+ x2 [9 v6 r m_dwPos++;
6 a3 j- }1 q4 J7 y8 U/ ^3 w1 C}; x5 B o/ N0 X+ p7 P1 F. C
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; l- r3 w; R* _: i J' [{- O( _* @ a$ n6 ^/ @" b
for (int i=0;i<MAX_INVENTORY;i++)( T. }/ C( f; {
{
2 H+ U! ?& y% ^ H if (m_Item.dwId == dwId)" _0 \; K% j7 X' }8 D
{/ U- H) V5 w. r6 l3 k* @
return m_Item.nIndex;
/ O3 g( v! a0 a j }
/ F' g! |9 F& D9 A }9 K' ? J( N' L1 L j1 a. _
return 255;
) k& C4 V; p. g, y} a7 D2 Q- ~& v8 v4 ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 G0 ?0 D' y9 A9 B2 h" A{
, ~; j& }6 i( d BYTE nTmp = 0;- }1 d/ h- `$ z3 h. U
bool bDest = false,bSrc = false;
' ~: B2 z" _$ @ D! t for (int i=0;i<MAX_INVENTORY;i++)/ P7 {; k/ x7 y, U9 ~
{
0 K9 f& q# H* }' V if (dwSrcId == m_Item.dwId)
9 k' H! g6 j3 P ?; V- W1 F r {9 i; _' S; T! P5 ]# d3 f9 P
//id相等 则 改变对应的dest和src) j) R$ ^* C E/ y0 ^, b
nTmp = m_Item.nIndex;
6 a5 u3 v( N+ S! N1 X m_Item.nIndex = dest;
& }$ V. C6 p6 C. Y5 R$ C }. \' f* U' }' G3 B
}
0 [: u; u# n N //临时数据保存完毕,交换开始1 D5 i @. i$ [' w* l- @
for (int i=0;i<MAX_INVENTORY;i++)
9 ^& x7 ^5 }; j% b9 ]: c5 @ B4 C, w- D0 j {# \* a8 \0 B. M' Y4 O' U7 @
if (dest == m_Item.nIndex)
( S N4 P% T. M$ R+ j, i; _ {* n( F1 n) ]6 @
//id相等 则 改变对应的dest和src
3 D$ D( X' |, Z3 Z: q m_Item.nIndex = nTmp;
7 l$ m* e; s% j9 I9 M4 g/ F+ g }
3 ?/ q+ T9 E, `0 { }& {# y1 Y0 O! p7 q7 z3 ^+ T
}+ [; Q, ?1 i: o6 s) S
};+ Q. x( A0 b& `& r
-------------------------------------------------------------------------
- D. K5 q1 e: O* ?& J! `9 _( I依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 k( } ^7 [6 `+ i% O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) @0 o. n: a3 Y紧靠其上添加:
2 C4 l( ]' `5 ]2 D! Lif( pWndBase == &m_wndMenu )" m# g! i' E! O
{, L& g$ Z. m7 S0 l- d
switch( nID ). G% w4 |3 R/ F/ o/ _( _/ `! X
{! k+ A. j+ v1 ]2 u" R; [* C
case 2:) |7 C y9 ?# {$ B* m; O
{
; P; e! U' ~9 Q4 k5 F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 e; D s. |7 c9 r4 k if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; t( v, F- e! h1 H4 A {
/ h1 q, ~2 \* T* X break;2 r: _6 F. @' S' R0 J1 C) |4 A
}
! T& C6 k, c* g9 c; [& V* B5 @$ [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) P* U1 L0 U8 L$ M8 G @
{4 M _& M& I, K7 W' r3 d9 Q1 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, q% E% `9 u2 I2 V9 N* m if( !pItemElem )
8 d4 N2 i3 K8 U0 i' j continue;5 L3 o; K4 K1 z
if(pItemElem->GetExtra() > 0)
3 K! U) f& H8 K# X/ Y& Q" R. H continue;- y* @7 A; b, [+ b9 t% ?+ h8 {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 q) Q' ?5 j; e6 { continue;
! [, L% U; V6 K/ h if( g_pPlayer->IsUsing( pItemElem ) )
1 I- V) W$ X5 a/ s; b continue;
) I6 B+ `! u# R& b8 K+ J if( pItemElem->IsUndestructable() == TRUE )
1 b8 a2 s* `$ N2 m, S {
7 g$ K- I a. z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ y0 u" b3 i* [2 F continue;
0 u$ T( |8 M% t0 J) J3 [$ A9 t7 V }9 R; Y4 }9 Z }7 W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, Z" @/ s/ t8 E) |! I1 y
}
8 }* k9 X* ~' U1 x" ]9 P( l break; o; i5 B6 T; x: v7 F
}
* q& w' K6 t1 x+ M/ F0 Z case 1:
% _$ j0 \, W; i {
* L/ s: a1 s t7 o6 X9 d //整理背包
0 m5 f% a8 Z7 k) e5 C //////////////////////////////////////////////////////////////////////////! Y. [ j g7 N" v9 s# ~1 B3 Y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. r) A, `! n7 m: N6 `% _
////////////////////////////////////////////////////////////////////////// q8 A; _9 S( @& \9 O v6 Z
//////////////////////////////////////////////////////////////////////////7 J5 X3 }* A4 w g- T
CInventorySort* pInvSort = new CInventorySort;
, Z8 x1 s( T( n% { vector <sItem> vItem;
, \5 `, M8 s, f* n" `4 ], j% p1 `/ n vItem.resize(MAX_INVENTORY);//初始化大小
. h$ G+ G0 I8 Q' d0 p! P# D //////////////////////////////////////////////////////////////////////////! O# f8 P4 S0 \/ Y
//填充数据$ A9 \+ ^7 L2 S. k# l' B$ X1 w
for (int i=0;i<MAX_INVENTORY;i++) h# M( l' w. r7 O* V5 Z
{7 I; t' U+ B5 W' P% ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ t, Q: h e% N* C/ y" J" H
if (!pItemElem)- z0 b s1 O$ |* i1 u- O
{* J: x# n2 W6 Z& y
vItem.dwKind2 = 0xffffffff;
7 f$ K$ n3 Q3 d6 ^( Y. u# p( q E vItem.dwItemId = 0xffffffff;
5 Z/ W1 x$ h; T; b1 ]' p& x vItem.nIndex = i;1 F I- f0 @2 G% K L9 s( G
}else {/ j: k. a5 A B" L P3 U' g+ B
ItemProp* pProp = pItemElem->GetProp();7 m! v" v( R. v
vItem.dwKind2 = pProp->dwItemKind2;9 _, c+ D3 t% j* y2 W. t. t
vItem.dwItemId = pItemElem->m_dwItemId;
9 U* W. R7 L& l vItem.nIndex = i;0 t% L+ W' f4 a8 j0 `& C4 N. ^, O9 a
}
& u8 X2 }3 V" C/ o" N //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# A9 w, w( j2 O
}
1 C& h p- O2 T* B //////////////////////////////////////////////////////////////////////////7 ?, G' Q, K B, G7 P; O( N0 M; \/ T2 y. @
sort(vItem.begin(),vItem.end());//排序; V* {; M8 ^& T# S) G
//////////////////////////////////////////////////////////////////////////
: |3 o" ?$ Q) `! n9 g" l4 Q: P //交换9 Q3 G8 O6 F" y
for (size_t i=0;i<vItem.size();i++)' Z8 n* ], k5 D' c5 U
{4 \1 W, R3 B0 Z/ `' ?
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 O: ~7 @1 t5 Q0 J) W' q pInvSort->Add(vItem.nIndex);
! u8 V' f: N2 O$ p7 K+ ~% w }" n# x, N4 }7 r+ t
BYTE nDestPos = 0;
1 r) O$ \' X& }# ^0 R, q for (int i=0;i<MAX_INVENTORY;i++)
% R/ }; L( d, r) F1 A8 \$ N. u: E3 M {+ X, s7 P$ t4 I7 X3 [% i/ D7 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% }8 |8 P0 {1 j0 F/ ~% ?% F6 d' h" S if (pItemElem)
' \; F3 e- u, l3 F {4 Y/ ?0 Q+ _# C& z, m
if (IsUsingItem(pItemElem))3 Y4 J$ V0 \" ?# Q( ]3 T" G
{( V1 i, l! z" H9 C
//这个位置无法放& S& E8 t1 }$ E, P2 A: h( \
nDestPos++;
Q0 q) h. ]7 V: s- u: k6 P1 S& I }
. `5 ?( ~7 N; q, E5 {, x7 f }3 {; \+ Z5 b- b. T" ^
BYTE nSrc = pInvSort->GetItemSrc(i);; Q' |8 t/ V; J$ h3 g/ J# p* ^8 B
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" T8 d* }- c3 p0 ^, X0 m
if (pItemElem)# A- `; F2 \9 p0 b4 v- P6 ?
{
* t4 H2 L& d8 T7 N9 ^" F, n if (IsUsingItem(pItemElem))
: C& L! M7 A4 ~1 U- Z1 H {
" A) t* N! K9 L, Y/ [0 k6 u( [ //这个道具无法移动,跳过1 @ V/ K( G) F$ ^& j7 {
continue;
5 ]! W0 C/ r2 ^ H3 O9 v4 y" j }
2 V g# W3 _- e }else{
3 v9 m5 @+ F( p; W //空位置 不用动
@. R% w6 {3 R' e( B continue;
. W3 N* N7 y5 g& g }6 |- }% |0 l0 V9 W4 b4 A% c
/////////////////////////////////////////////////////////////////////////// e$ M8 y" L' t( U8 k' ?' {3 o
//开始移动+ J+ K3 t. H- B V( e
if (nSrc == nDestPos)4 `0 o6 H9 L3 _: O, h
{
% K+ c# X( ^. U* e% ]* r m //原地不动
' b. R# y+ S: J nDestPos++;
) L; ^5 j" O& _7 r" `' V continue;9 w: a& O2 s4 c6 [& i* ?4 }
}+ X- i; {( X* l7 _; P; y( P; z! L9 {
pInvSort->MoveItem(i,nDestPos);7 Y" m( C1 V$ c
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# p. }1 h7 n9 s: ?2 P
Sleep(5);) h8 L, T. z% [ B4 i0 l1 E2 K" v
//Error("移动 - %d->%d",nSrc,nDestPos);; t; s* j7 r. I) |9 T
nDestPos++;
0 K5 F1 ~5 ~3 K& s6 ^; y5 S* J }
7 \" z3 f$ k, g //取第一个元素的信息
, b: b+ w3 Z6 l" s2 W) Z$ q /*! A5 y+ p* |( w5 P n2 O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- C. }( k0 H3 w9 }0 e. h {, @9 b/ c6 p$ d/ |
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 H& Y% I) k- |: _" v8 K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& T, u2 F* W% q6 R9 G+ f
}: s+ u$ l# r: X3 ^( l0 V5 v
*/
6 x# f, C' A& ]; n //////////////////////////////////////////////////////////////////////////+ W/ A8 _/ Y6 V' o/ G/ E
break;' H# `( l# |# a) B6 ] `! G
}! p) R+ N/ Q6 }. f; }2 W
} ( k1 v8 w7 R$ N
}
! N& s0 @+ t! V! D3 w- l0 m* om_wndMenu.SetVisible(FALSE);
. K9 u# x' W2 V! Y& W5 t
5 q7 Y! G, A @, D: t/ B7 B$ U--------------------------------------------------------------------------------------------------------
9 o3 }( S( O9 z* W, W! T8 f1 L+ \搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( r7 {" i4 m1 z: A; n{
) T- V% R; [6 v) UBaseMouseCursor();
, D/ A" I- W7 c7 {! @3 \}
: j6 k7 o. N9 Y2 h0 q3 F在其下添加:% y! |- p1 v, u" G3 S0 {
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# Z& S) R! n+ ~( d
{' w3 G% `! ?) N4 v+ B8 E
m_wndMenu.DeleteAllMenu();
^- H( d. \0 S$ Y% gm_wndMenu.CreateMenu(this);/ {. v# f1 b0 \' s, e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 k/ f7 Z2 W d1 d$ x9 e5 L+ n
5 N8 [0 Q* Z7 r' ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 r0 Y3 ^4 H- o
{) h9 b, _1 T0 T) G+ d* p' y
//P以上级别才可以删除所有道具
" z. }% C* |5 g5 U5 X" ^& P$ f; B/ e m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! k, t' m5 H, ?+ T% s' P, v2 Y7 Y}3 B$ c* O3 v/ \) `1 [+ v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 i% M. s: {$ O& @3 U. x5 } q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
A' j: }7 Y0 Z% N( R0 Lm_wndMenu.SetFocus();
6 g. W! Q" X: w* y* s) c}2 [+ v" V/ F! U9 n% v& i
------------------------------------------------------------------------------------------------------------
0 C) p4 Z% \, b; }*************************5 q- g3 y& G2 I) T8 ~
WndField.h文件- L- x, m; |. g2 a+ g& c7 K
*************************
, u7 d3 n- _7 E x8 p+ Q8 T搜索:BOOL m_bReport;
3 s& h7 E$ n7 [' r9 v7 D8 j( C% X其后添加:- n" Y+ n" _! r# F
CWndMenu m_wndMenu;+ x. G- Q$ y( U4 U2 ^
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% v# X2 e" Y2 h
其后添加:
2 m7 N, r) l9 U9 e$ ?' T' ]virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 i+ [- G' O# R' X; P; n$ }3 U4 {3 Y5 k; _5 V% Z
; U3 w4 x2 h* r
|
|