|
|
源文件中_Interface文件夹下WndField.cpp文件. f4 k( G3 V8 |2 a7 V4 c
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" x. P& p N( h2 I- |6 E
: @8 C" ^! m. [struct sItem
% p* S5 t( L+ q5 D{
: f( V5 u t. ]0 ?( ~, r2 EDWORD dwId;
& _ J2 z2 d+ A4 {DWORD dwKind2;# }) D" Q3 F8 w- g
DWORD dwItemId;: F% @) G& A3 A/ }( B
BYTE nIndex;
9 c5 k5 N0 [8 c8 b8 P( @ SsItem(){
( [) h6 c9 T1 o' Y) h7 ]6 E" R dwId = dwKind2 = dwItemId = nIndex = 0;
: }: c( S# b! E& w# T, H}: L2 w) w+ S3 P# e5 K
bool operator < (const sItem p2)
* ^1 j$ ]( M! A- v8 X& S{
8 F* Y% m( ]: ?3 ] if (dwKind2 == p2.dwKind2)
, E) k+ S+ H" E2 b5 @( x {
8 H, \5 y% w) i' @. V( | return dwItemId < p2.dwItemId;
, y, ~9 L! R6 E! O( x }else{) J8 [2 S9 k a2 h1 j0 ?
return dwKind2 < p2.dwKind2;
) g0 U; r) U) H' E6 a( r# Y }
1 B# z8 Z# v8 U7 s' X4 S( v}
5 x' d% E! N3 F};
* J% i6 r6 \8 ?% [class CInventorySort
5 p1 t1 X* M1 g. r) U1 M2 N{+ ]/ p0 i1 @2 A( R' ^' i( A7 @
public:, R( _! Y6 O2 p$ p6 ]( c
CInventorySort()0 }# U! J1 I7 x
{; j5 ~' h& j3 z0 \' w, F* o
m_dwPos = 0;! h+ W8 n6 \) u5 d# k: L
}& l4 {1 j# M/ U N& k9 t6 P
~CInventorySort(){}; w R' I' H; r- w N8 @% c
private:
/ x @( y/ `. K# MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ c1 D P. [- a% T2 oDWORD m_dwPos;
+ S' N$ H. O9 {: ~public:" X1 d) O7 i/ d1 d6 K/ A
void Add(BYTE nIndex)
1 Z5 V1 r$ i2 N! R3 _* N9 x$ K1 J* ~{
! [: y* w2 M, Z% B if (m_dwPos >= MAX_INVENTORY)6 f1 Y' p8 J x- z
{
+ Y2 y" v' c+ x- D: N return;1 b$ E0 b$ `# h6 F) v2 Q0 x
}
" X! i/ I3 T2 r, q& W m_Item[m_dwPos].nIndex = nIndex;3 n. k) N3 B7 U2 |# u
m_Item[m_dwPos].dwId = m_dwPos;
4 Q) s; S1 i7 c6 j; G g* I m_dwPos++;
( }: H& l" E5 u6 E1 o8 ~# Y5 d}. a, ]# w0 j+ L* ^; q) M$ {$ j: s9 Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" P0 P- p4 V2 }- U. {( O" j3 p9 v- {
{
) U# G% n0 [" J, A# {3 I for (int i=0;i<MAX_INVENTORY;i++)
- A* v7 Q- V( J8 g7 F- Z {# g. B' g; ^" Z+ M- Y
if (m_Item.dwId == dwId)* Z6 }: T6 h* ?! d5 ^" D- X$ Y3 E
{
, U: u% a6 O+ V return m_Item.nIndex;
9 p+ [" I9 e1 |/ G }
8 i" Q- g: ~$ W6 x }
2 ?# e: V" C! ]" P c' k return 255;
, z: }# u9 A* w8 A2 P}3 _3 J& U: v3 @; o: W3 w" V1 e: k4 I, `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 h( a+ ~2 N, b2 d! h% a' ~% ?{0 s( F0 S2 b8 W& ?
BYTE nTmp = 0;' i: g h! a; x1 h6 s
bool bDest = false,bSrc = false;
/ C8 q) M9 y" R" V, G8 Y; _) R s) I for (int i=0;i<MAX_INVENTORY;i++)
+ B9 p/ m) C; e0 e8 V3 H3 _% ] {
3 X, c! z B" w if (dwSrcId == m_Item.dwId)
0 q) _# j" o9 o9 o7 l5 p7 w+ u/ m; X {; R( j0 h! I( N! L7 X3 t2 s- n
//id相等 则 改变对应的dest和src
$ e6 R# E# i8 j+ k6 [9 e nTmp = m_Item.nIndex;+ k; y f4 T: R+ U6 V$ p+ Q
m_Item.nIndex = dest;! D. p/ x7 J' M) h& s
}
& K I, r' X# B9 x) A3 ? }* t9 |+ C- L+ n$ F5 h1 I9 V
//临时数据保存完毕,交换开始4 c: b) v. H- P
for (int i=0;i<MAX_INVENTORY;i++)
+ L4 V: d# D6 [ {5 E7 i7 m# K5 r3 e0 i0 [9 G% l
if (dest == m_Item.nIndex)" c6 l8 M0 U m5 g( V
{$ ~- |3 e. O+ ~/ b/ `0 ~
//id相等 则 改变对应的dest和src
$ `: Z! [6 n9 l2 T7 n ?0 N" R1 ? m_Item.nIndex = nTmp;
4 i y8 [% U2 X4 F! W- Z }6 [' @8 F6 {+ A& e0 M r* B% l
}: E+ f4 m0 V, M# w4 M
}$ T# p% ?( E: \: q4 V
};
5 b! M/ a! M9 F-------------------------------------------------------------------------
2 F9 \9 o1 Y: }4 l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 e, i+ [, X( m# T2 g: y1 q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 D! O; B: ^3 D9 _, Q d紧靠其上添加:8 q# V9 X) ]! d8 w' ?
if( pWndBase == &m_wndMenu )
3 ^3 g ]# f+ J) V) b{
5 s3 O& t& T% V) k& I switch( nID )
6 C& A0 p5 B% ]) ]$ }8 x1 u {- p, s+ k! l7 E; t- I
case 2:+ w0 _; w6 `/ U8 T) p
{
2 n+ C {: \2 r) |* u& t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 w( p- x" U& B6 Y5 r
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- y+ g- _: Z; N. m! ?. t" @% d {7 s5 A/ Z! Q# ~' d( e' t
break;
T, j# ~3 l5 C# {) O) q( | }
# i* f; T, ^. @3 H* }! s5 a for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' P5 p' X; n# o! y7 X6 q
{: |, q0 ?$ a+ @" H3 i" Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 k* a6 f' v% T
if( !pItemElem )
9 C2 B9 Q0 T; f1 f continue;0 H, V1 A" T' B% Q2 i8 z/ a
if(pItemElem->GetExtra() > 0)
5 S- Z+ c4 ]( H* Q continue;
' d/ F- ^9 i! p0 e, {) M if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ y( Z- V% f( r3 ]# K. J2 | continue;
/ ^ M/ R8 W8 }3 [ if( g_pPlayer->IsUsing( pItemElem ) )
- w# G1 s% \8 V* H" N) \ continue;6 F4 C0 E$ e% n- ?0 V
if( pItemElem->IsUndestructable() == TRUE )$ H$ G$ w2 f) I3 _* m$ T2 Y. F
{" }$ q g4 `, J/ K+ T( b
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 T6 s1 d% \' G) N9 ]5 i n continue;5 e8 Y; J# z, R. H
}7 J7 r1 a) a) ^. c% L
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 R, |' z- I+ t; _ }
8 S$ H$ J% G; w3 ^0 N& Z4 z break;: m) F/ F. x# A
}4 [' t0 s% {' _: f% V8 p
case 1:
1 c1 r6 z- m/ p" U {
: y6 M2 T$ s- U //整理背包: j4 k; P) I3 V/ l/ U
//////////////////////////////////////////////////////////////////////////
' z9 s4 ?. i4 K7 }* N+ F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 r2 y0 N; p& i% D+ ] //////////////////////////////////////////////////////////////////////////
3 d: H! V+ d$ e2 O3 M+ T( c$ l6 q //////////////////////////////////////////////////////////////////////////
! w7 X; O# w* n F CInventorySort* pInvSort = new CInventorySort;0 j V3 @; L. r) ]4 _
vector <sItem> vItem;
% s" b% n2 R7 j8 a5 _+ L' E vItem.resize(MAX_INVENTORY);//初始化大小
4 z5 ^4 d' n0 X7 S9 W6 a7 b //////////////////////////////////////////////////////////////////////////
$ p3 I2 q5 V6 y4 M //填充数据
6 B/ [: s8 l; @. |& f for (int i=0;i<MAX_INVENTORY;i++)1 `( h2 B# R! b3 V3 C% t+ Z( _5 [
{$ _) o3 D( C' W$ \- Z& c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; M& `* {7 P4 ^6 X* }, A- x2 X7 L
if (!pItemElem)
3 ~! I9 J4 I( T. ~, O2 Y: r {! ]8 r' } V" H8 s3 @
vItem.dwKind2 = 0xffffffff;
3 t$ C+ B/ f+ A* b6 T& z+ z: v x; S vItem.dwItemId = 0xffffffff;; d- K4 z+ |/ U( w
vItem.nIndex = i;* |1 K3 I+ z7 H+ c b7 R! p
}else {
" g' y$ ~, l" a4 ]( G8 q3 j( c# f# i ItemProp* pProp = pItemElem->GetProp();7 y8 R' k" K) Y* e
vItem.dwKind2 = pProp->dwItemKind2;9 M2 R6 F' E4 ?: e
vItem.dwItemId = pItemElem->m_dwItemId;
" i3 P* G: p: R) ~, K vItem.nIndex = i;
4 w2 ~8 p& u, G; E; \$ q- S9 C }! ]! t$ N h4 X
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( v7 R4 r( D; X" T) j# j r1 ~ }
, n7 [$ g J3 j; ? //////////////////////////////////////////////////////////////////////////. U! U- ^5 v7 t) c
sort(vItem.begin(),vItem.end());//排序
! P8 g& p- [3 W# c# o% c, z1 H //////////////////////////////////////////////////////////////////////////" P! |( v5 O. L
//交换
; g* U% Q" y4 k# T9 q% A0 A2 G for (size_t i=0;i<vItem.size();i++)# r! ]9 }/ c' W% l2 R, Q M
{
3 x) H! }8 ]" D0 U& w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 |9 l$ ?" \+ I3 ~
pInvSort->Add(vItem.nIndex);
2 I7 Q& d! ?) B2 t! i }
. W) Q1 P4 y' ~4 y; X BYTE nDestPos = 0;) l: E/ H4 H5 n* E+ I: p9 |0 X
for (int i=0;i<MAX_INVENTORY;i++)
( s _. @5 N0 u. j0 S q {! Y$ X: _2 x4 @/ Y. D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: N) ~! ?8 h7 u; D$ W" q
if (pItemElem)
; C% I; Q* s( H b {
Z. F2 P/ D% F4 c+ R: X0 O& y if (IsUsingItem(pItemElem))
) z0 r( A: i" s1 K {" ?0 O1 i* D' h* P6 e# z
//这个位置无法放
- n7 e6 ^% v. e; ]1 ^3 C4 B2 m. G nDestPos++;
5 _4 ?+ o0 K. c# z& m M6 e3 m }: _: R$ X7 y- a+ P. c/ b: g
}+ A7 m8 Z$ T( Y5 B, B" b
BYTE nSrc = pInvSort->GetItemSrc(i);
2 e* P; @. r6 V. O% x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: A; A& w1 C3 R1 K6 i9 _ if (pItemElem)( T" W9 p% i; E0 o1 r# i
{: P/ S( `8 s8 Y/ U
if (IsUsingItem(pItemElem))
7 J7 K6 U5 X, Z0 i% U% C) t {1 ^3 y5 q% E5 t- }1 H
//这个道具无法移动,跳过
" X* J( A$ b1 B. B continue;+ @8 h( g- z8 F l2 b" C" w
}* i% e! ~! b$ g$ T8 U! T A% Q
}else{% a$ _1 x( Z% c$ D5 `! u
//空位置 不用动
/ E% P; c; a* \$ V. t; t continue;, Z7 _& F1 w) G- g; @! P0 I
} O! d: i" j7 h
//////////////////////////////////////////////////////////////////////////
( a$ V) J% v+ F //开始移动
( y( m9 M% {* ?; h* D4 O if (nSrc == nDestPos)
, h- W0 S# {# U1 h {
+ L- U$ ]& a8 Z6 S; J7 `9 |$ Y //原地不动
; }1 y' A. W. U1 w N nDestPos++;
8 \+ ]8 J# O, ~% y: u$ R! v7 g continue;
2 U' l) c. ^+ k: y6 q. } }
2 h: l& P! {' T- r, q6 O& | pInvSort->MoveItem(i,nDestPos);
3 T$ u5 y' k) [ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 v1 c; p& z# T# g, T. m Sleep(5);" y+ Y+ C2 p. Q: y) x' b# }- |9 t
//Error("移动 - %d->%d",nSrc,nDestPos);
5 U# m- l$ M a. c- y" W7 Z" b nDestPos++;
# O* ?: \+ {5 M. R2 ~% T4 ` }
7 P. `# S! x0 ]/ W) T( k //取第一个元素的信息 i- T+ M, z% ^: ^& S8 N/ Z/ J' d8 t
/*
# |5 [ h3 k6 h4 i+ J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# u g# Y5 y, W+ H3 _, b3 y; { {& o7 w& h6 U9 z. F0 z! r' O: ]
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" Q2 ^9 S. B4 N$ G3 f% C g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 e P9 z& y. ^& v0 c
}9 h7 _( V! o p$ b' J
*/ m4 L/ K8 ^* C$ O1 Q5 n- a% Z
//////////////////////////////////////////////////////////////////////////
7 Q2 t# c+ ^9 G! a break;/ ]6 _" e0 ~% O$ W
}6 q: f9 V0 g4 B8 c6 H
}
+ G% R4 g4 j+ v7 U( M/ j% O4 E}
) R p, s4 i& Gm_wndMenu.SetVisible(FALSE);
4 w7 b. ^; u! J {* O# w( b$ V1 Y
6 b7 K# j/ Z b3 A6 V' k--------------------------------------------------------------------------------------------------------
4 }2 D) L5 z6 g- k+ I) V A搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' ~/ C- V5 x; n: ~7 I# g& _2 F0 [+ L
{8 U0 J0 M' O4 p( H# ~
BaseMouseCursor();
3 ?! ?" G6 H. X- P0 k, B) t% p}, o2 b# k2 t' g% y6 O
在其下添加:* J/ E+ H8 p- p4 p7 Z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ |9 B6 L! W! y$ j* M/ E4 d; g{
3 m) A/ X% G) h* Gm_wndMenu.DeleteAllMenu();& s4 C* f0 x9 v9 _
m_wndMenu.CreateMenu(this);, D r) o2 y s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ G2 {* \3 u/ [8 \
7 n! l0 e8 s" D! g# g& s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) p8 u) O3 s) J5 T. B+ E& [* j& e{. ^, R! L5 Q I: o! Q* U& f
//P以上级别才可以删除所有道具$ ]7 U. p; [0 l! @- G3 D
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* M2 W0 O5 U9 S: k8 }/ o* j
}
: u& i! T' ~. `' ^3 um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 p; |! j+ u6 W# U0 s: P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ v! S4 N Q. f N( Tm_wndMenu.SetFocus();, v/ |9 ~. [6 P
}! p: [8 Q2 ]$ _+ D0 X' H0 j3 d1 w
------------------------------------------------------------------------------------------------------------
" r1 @; ~& J4 m*************************. c$ ]' ~5 g1 ~
WndField.h文件6 l! _1 g# } N, Y @5 k1 L0 r5 ?
*************************1 w$ F. s! H$ L x7 q3 s0 m
搜索:BOOL m_bReport;
0 s+ H" x! W& J, j1 z" a其后添加:
: k7 G. O% k3 J' l, ZCWndMenu m_wndMenu;
" i5 a$ ^- {, ]$ a: |: p4 ?+ A, I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ m, l, V6 P& ~5 N' v其后添加:
7 l6 W6 {% j u# ivirtual void OnRButtonUp(UINT nFlags, CPoint point);; ^) \% u& p1 `1 c6 s& s: x
* W l; m3 F. ~ C; |. G6 k) t' Z1 `( B6 R
|
|