|
|
源文件中_Interface文件夹下WndField.cpp文件
i' k$ Q+ `( e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' |& N+ E+ D- E
( U6 y$ N9 T- B5 m8 k
struct sItem
2 m% h4 b ]; T) `. o5 I3 \6 z" g l{
- v1 i5 M5 g+ e# m& S/ ADWORD dwId;
. l9 b3 c1 F* \5 E8 h9 k0 d# XDWORD dwKind2;& G( v- `( h; O" z( A s* Q! F
DWORD dwItemId;
& G( q( i2 i& _; V K% oBYTE nIndex;
4 V }) A) M5 V% j) i: A5 I$ zsItem(){
! I5 S$ n8 h, g. d) d9 G dwId = dwKind2 = dwItemId = nIndex = 0;4 B% v5 Z4 u4 n' S; ~
}
* i! T4 E) U' Q4 i/ [6 Y1 t. u/ n2 h; W( Hbool operator < (const sItem p2)5 K5 f! O3 Z7 o' m) M9 w) v
{
3 R8 \, O9 G5 }+ A/ l if (dwKind2 == p2.dwKind2)
) _! s/ q/ b* O7 J7 W {8 q/ l& h' P+ S! H9 t! D7 Q8 W" u
return dwItemId < p2.dwItemId;
0 H8 ~* b+ R7 P8 K! S0 K/ \8 F' { }else{1 w9 w& ?, x2 @; H- k
return dwKind2 < p2.dwKind2;
* _5 y. N. V! S' H8 g }* X. j( p. }9 I
}
1 |6 R8 j# ~4 I( n3 s2 W};
' |- F6 I6 w9 K, k& G0 f/ [class CInventorySort7 {( W. E, m( \* N( U; ]/ Q
{! @! C2 i4 H$ p! ?4 t
public:4 @/ ?5 `& x; B1 P6 Z4 ~4 G5 V
CInventorySort()) O, i2 u8 z3 y* C
{
+ O1 l8 d) `8 o, U m_dwPos = 0;6 W1 @# l, t1 R. e0 P+ A
}
4 T$ I1 X. P# Q) b~CInventorySort(){}
6 `' Z+ ]' F L4 d1 r. Rprivate:; P+ N T# z% E0 _: l R/ A7 `
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: G$ R( y; t/ e) C
DWORD m_dwPos;
( k S! F9 K/ r9 s; Hpublic:
) K' c2 { V; uvoid Add(BYTE nIndex)5 l( q: _& n$ w* K8 y
{
9 m) s5 M' M, A& a% q G if (m_dwPos >= MAX_INVENTORY)
. p8 w' G- T o, G4 [% | {, R) Q2 J" F- }: K' n
return;$ o" t/ [9 R, @1 I
}
# U3 E* f2 o3 [2 s5 J/ O5 b m_Item[m_dwPos].nIndex = nIndex;+ T/ n W. Z6 b5 g2 m% n, j8 _1 t
m_Item[m_dwPos].dwId = m_dwPos;
5 D1 o9 E( `' W) Q! z1 d m_dwPos++;
6 {, l" _5 Y7 s1 U* f}" t( Q" n: R3 c# ?
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( E0 j: v: t1 ~; O{
) v: [# d' H: g8 t. I/ s. O2 k for (int i=0;i<MAX_INVENTORY;i++)* t% I6 M u4 L, N3 z
{
7 B7 B, r9 A% l7 j* w# o if (m_Item.dwId == dwId)+ w& C: Z1 J7 w% f9 J
{
% E7 r9 e8 i0 O4 N8 C- l0 O return m_Item.nIndex;* V9 d. B5 Z9 H: `& L) F& k
}- Y$ z' ~* g+ s/ ^# y
}
7 {( r; V `- s0 ]4 b$ j# G6 c x return 255;% ]- B7 U1 C9 I# t/ w
}
& N+ e+ x7 H" R6 X: Gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- @- Q& [8 R1 q1 i{
1 e: S, x: R' } BYTE nTmp = 0;
7 l0 |2 [" l, Z/ T( ?# L% M- R bool bDest = false,bSrc = false;
- W( S. c6 {' K6 U% X8 C for (int i=0;i<MAX_INVENTORY;i++)
9 Y: p9 a+ n, M* t, ` K9 d {9 o6 s; L2 j# v1 p; l% @$ N( ~! F
if (dwSrcId == m_Item.dwId)
4 M* q. n9 T# c {
: m0 G$ L7 x" W M //id相等 则 改变对应的dest和src9 @& G, F$ a" W
nTmp = m_Item.nIndex;
; O! q" @# e( d# r% { m_Item.nIndex = dest;
h7 \& n( t( u }: e' Q: X a9 `2 y. r" s( o" o
}
% Y4 _1 I/ l6 O/ t& ~- C# a; b //临时数据保存完毕,交换开始
: ?7 X) q F6 |3 ]2 X0 S* A for (int i=0;i<MAX_INVENTORY;i++)0 b9 Y# F* |+ a9 ^( d
{% i$ g4 k( y5 G3 z- l; l* v
if (dest == m_Item.nIndex)5 ?% e" Z* @. W6 k6 K
{
! {0 L2 X/ o. h //id相等 则 改变对应的dest和src
% w- N7 p8 i( w m_Item.nIndex = nTmp;4 j: B; h0 `( @. t
}
! Q7 {5 o- V2 U# k6 R }6 A* k* Y* H0 \: T _
}2 A7 s' d ]( K8 z# G7 B4 d% n
};# k5 V3 h3 l! N) c4 N/ |& p
-------------------------------------------------------------------------9 y- z9 v; Q5 u- i4 E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 Y$ ~6 g2 x! l6 L3 O9 |2 d7 [
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, F( V' i1 ^# R [) [! t紧靠其上添加:
2 ?3 b" p$ t1 b+ ^3 k3 M7 G ?4 r6 \& tif( pWndBase == &m_wndMenu )9 {4 }" M/ R5 P' ^( O: |
{
& t' n8 A" E8 v# x: j, t" V( E switch( nID )1 a a/ X& `1 b6 N/ z# i
{
. E4 A* y0 O" ~; y& m. R4 M8 H case 2:
) Y: V( y x8 x( {4 c {: f0 z4 _5 T! i8 p+ n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 ^& m& L9 O6 H( l
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 C2 @2 Z i% T, w3 B7 D
{
% d) G, T6 B( F0 j' v6 ]2 _% Z" P break;/ S) F7 I3 f0 F
}( `9 v7 n D& c$ K. i
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 M/ W' i K3 y x! q6 b9 G {+ \! }! r/ R3 D- a& G: H( \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); a& _$ ~( [& R" j/ ?
if( !pItemElem )
0 D1 e4 \; E4 M, C* Z continue;
' G- w4 r! e5 W if(pItemElem->GetExtra() > 0)
0 ?9 x3 d1 {5 o) Z continue;& F# o. g: h* A w
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # @2 D& f" P! l* q$ R2 `
continue;/ b) F6 F6 u% _% X3 B
if( g_pPlayer->IsUsing( pItemElem ) )
/ h$ E7 b0 o% a7 ?' p continue;
/ t5 @( K" Y* o0 W if( pItemElem->IsUndestructable() == TRUE )( o2 \2 d& o8 L" R$ e' w7 X
{
/ i6 T3 K- l3 w5 _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" m$ H a7 W6 I$ Q
continue;
: |- d) A5 a' b }
" q$ K% ~/ S4 }6 n% w# k g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( ]/ j$ D. z8 n ]3 z
}
" T+ ^+ n6 A% |/ m$ n5 ] break;% F) ~/ k* ]& B6 Q
}$ T% H- ~! P# B+ k; u- _
case 1:
: G( M9 ~3 z4 E7 g8 X {. w; H+ l' S+ W/ F
//整理背包
4 U T- D; E/ C9 k8 A- ?8 y/ | //////////////////////////////////////////////////////////////////////////8 p; h. ~; Y \
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ h! ^( ?. M. k# _5 {- S& u //////////////////////////////////////////////////////////////////////////
: g6 _, v9 X. ~. j) v S //////////////////////////////////////////////////////////////////////////6 j9 G0 O1 v; R
CInventorySort* pInvSort = new CInventorySort;
1 l+ W8 k5 r1 T" M$ r* g+ k# C vector <sItem> vItem;3 L, L, t4 U4 v; {' x1 d3 f
vItem.resize(MAX_INVENTORY);//初始化大小! [* L3 t7 B9 S# r
//////////////////////////////////////////////////////////////////////////
2 F2 ?" O0 i4 T- Q- a- x/ }" e1 \ //填充数据
I) C V8 K+ H: A+ V. T! N for (int i=0;i<MAX_INVENTORY;i++)
! }* ]$ @! l ~ {
" Q! H4 p, e) l% g* r; Z. ?! n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- Z7 z- L# S7 G$ W
if (!pItemElem)
# v2 u% A2 y% a: H4 u {
$ K: P5 J% d- h# A8 ` vItem.dwKind2 = 0xffffffff;
6 Z$ T5 ^. q* _0 Q/ U vItem.dwItemId = 0xffffffff;
) L" L! E* l1 c- H: a! k vItem.nIndex = i;
6 ?/ G; ^& v8 Z3 r8 ] }else {
: K. ^) f5 W: k' i' f8 g2 m0 c ItemProp* pProp = pItemElem->GetProp();
$ e5 a3 h" E; P) Y$ p$ }+ G vItem.dwKind2 = pProp->dwItemKind2;+ t+ ^% q! X6 f9 \ \; H
vItem.dwItemId = pItemElem->m_dwItemId;
Y9 W- L. q- u: m) j vItem.nIndex = i;/ ? D& j7 k& O w1 b4 P6 Q
}
& m5 g( V0 q1 j //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: \7 X7 a' L7 R ]; i
}
2 M9 J& M) u5 T; T //////////////////////////////////////////////////////////////////////////
& r7 s" \& g, L! S& X, J sort(vItem.begin(),vItem.end());//排序
' I$ B, h6 E; d+ W: G% V( I //////////////////////////////////////////////////////////////////////////" Q1 z$ ~! R+ G& A
//交换' n: o* {+ q$ i% z1 ?& ~
for (size_t i=0;i<vItem.size();i++)) L7 e$ I7 L/ P; L5 o" W) Y
{' Z7 B5 d& \# e; \0 I
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 T) z& Z6 ~% k pInvSort->Add(vItem.nIndex);+ U. Y$ T3 o% F5 X9 W; W
}$ B* `7 S6 P0 y6 b9 ?
BYTE nDestPos = 0;/ c* k4 H% [$ z n7 ]; V
for (int i=0;i<MAX_INVENTORY;i++)0 t/ V: x, N0 Z, @* q% C
{3 r+ P' ^0 K' @" H; M' |1 U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. v! w j9 }& w1 _$ K
if (pItemElem). @" t) R" f! ?' j$ K; p9 Z. d
{
/ q' N+ U* u2 E0 o8 {/ s if (IsUsingItem(pItemElem))
4 s( G) h' Y$ D( V; u7 i {) R! r- \ b3 A0 S
//这个位置无法放7 h4 D/ }; C1 S
nDestPos++;
2 u+ I4 U* }- b% g& w" M }% v+ n" @8 f( u( b6 y. p- n
}
3 p: a9 [3 H, V: b BYTE nSrc = pInvSort->GetItemSrc(i);
1 G- [8 ^4 ?9 M) |6 L8 R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 K1 u! h+ O6 [- S7 n- v if (pItemElem)% n7 x& m, x5 s
{
( A. q) ]9 ~* A) |8 H if (IsUsingItem(pItemElem))$ u4 U! W8 l7 A/ f7 U
{) D9 F) f+ w7 @$ R% E
//这个道具无法移动,跳过2 u4 U( h& V1 _9 X/ {! I+ p" E
continue;
S) E$ k' D' }+ S% m' V! b6 d5 b }+ w0 G9 z# [/ [3 E
}else{8 Z' ^) r* C) Y
//空位置 不用动
# P! ^0 I7 \1 c: a# E. s continue;" b9 j. s" M7 `
}9 O E) f8 N' X9 [- I+ k, G
//////////////////////////////////////////////////////////////////////////
( @3 ?$ o( B- c i) Q9 L //开始移动
( P: h( Y( b# T8 w if (nSrc == nDestPos)
7 F; [+ X7 i( U0 p0 V0 H {% W, K* I0 B, A: _; i0 v% H7 Q
//原地不动/ x y) u4 b4 f: ?+ ~
nDestPos++;
4 z( y3 Y, B8 b- M continue;" o' x% X& E/ x! m3 [1 q# Y
}
: m# I, x; i+ b/ v" A pInvSort->MoveItem(i,nDestPos);$ J' y7 K7 ]4 l# d/ X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. J' R X6 C1 {3 k; Y, M8 B Sleep(5);
) p5 ^6 ^- o O4 Q+ ^: U //Error("移动 - %d->%d",nSrc,nDestPos);
$ ~) W8 O; M% D" M7 ?. i6 t. Q nDestPos++;# w+ s1 b- S8 h( x, f$ N; B- t" l
}
3 ?! E- Y% \* f* ? //取第一个元素的信息. m y" a2 y* n) e& a& u0 a
/*3 [9 t# ]% N% Q6 A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 b8 X5 K% ]0 ^. R$ A3 C
{
( F8 z- I9 F0 R- w5 P {+ } Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 u4 ?" V0 ]1 |4 I# [9 y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% ]& H' o0 u3 x! e$ R# l }2 p- h7 k# w, W- \0 Z
*/9 P, \6 t6 r: m9 U& ?, n. W0 q
//////////////////////////////////////////////////////////////////////////0 v$ o) L8 Q5 Q1 L+ v. Q( z5 ~; C
break;
* x+ H; X* m. Z/ R% I7 U }
3 p4 w0 d5 i) \5 i" B6 [ } 5 U% g7 q9 I' G. l: E) K+ { |- J2 y2 _
}; l% Y5 x9 |* y' X$ s/ {
m_wndMenu.SetVisible(FALSE);
: ~& ]1 I8 h9 g% K( c
, j- k) ~; v3 E( A* P/ R--------------------------------------------------------------------------------------------------------6 z5 I/ x" T: c! g
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" O/ K* Q3 B& b; F/ b, r
{
' y/ X/ h5 ^5 y" l. C+ X, HBaseMouseCursor();
5 d& Q: q& I. _! j}) r. _$ o; `; c" l( B
在其下添加:" o3 b& A. g( m' J, ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! P2 J: k0 s" C& E1 H/ W0 l* K{
* h/ g4 o4 v" q9 f, pm_wndMenu.DeleteAllMenu();
" k! l* e. l2 I- O4 F8 km_wndMenu.CreateMenu(this);
/ N5 T+ W" D6 Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 d# A/ ], N: j$ x( T5 p4 A
2 A; W" x: z$ a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* y0 s) u( o, d{
! o% G0 d% i4 C0 @8 I: l, D H //P以上级别才可以删除所有道具8 M9 D6 N' X! N, O# V) E/ f4 G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" x: `* a3 d3 ~}/ U$ p6 W$ e9 L5 ]
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! K; e/ L, @& \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
G( d7 L2 v2 h8 }$ e: I" s jm_wndMenu.SetFocus();
2 q* z) e6 {; v4 T7 a}" x5 o2 o6 r$ P; _% \
------------------------------------------------------------------------------------------------------------6 k/ H1 \; F. c" Q7 H
*************************- ]6 @0 J3 B' T, o3 D8 p, o+ A7 m) X
WndField.h文件
# A/ I* w, ~( n*************************
* ~% U) a! k" m( t3 ?搜索:BOOL m_bReport;1 d3 q# l7 `0 h2 O$ i
其后添加:$ @+ Q! q9 F9 J1 J% i
CWndMenu m_wndMenu;
, ?( a2 y9 v& I, o0 I4 Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: U, O4 Q1 @' E3 { y其后添加:
5 a- N8 ~. C7 F0 V( mvirtual void OnRButtonUp(UINT nFlags, CPoint point);. P8 f! ~- p! J+ K
& ]5 I- @' q! B7 I! L3 H- \; z+ B" J; M
|
|