|
|
源文件中_Interface文件夹下WndField.cpp文件
( ~- e$ `; H2 l0 i' I4 t4 Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 ^/ L+ } q1 |7 @8 P% a! d
6 Q6 x" Q( p$ ?* O4 x5 I' m5 |struct sItem# i7 Z6 h( P1 y( r
{
# ~7 W7 F7 o6 p& c \* MDWORD dwId;
x; I, z3 j, F* n8 {8 PDWORD dwKind2;
) ]( m9 @& H6 _1 h2 qDWORD dwItemId;
: r; Y3 Y r6 A6 F& QBYTE nIndex;1 R/ S' O4 `7 B; }
sItem(){1 o. s: u$ ]' v* L# a' w9 H4 ]) _
dwId = dwKind2 = dwItemId = nIndex = 0;) G7 V% _* H, w' M) w) G- l) A& C' v
}* B9 I* |* M# X7 c+ Z0 e- ]+ x
bool operator < (const sItem p2). H h& V- O4 \4 [; A4 j
{
# `' u. M6 o; ~: [2 U if (dwKind2 == p2.dwKind2) R/ C& K2 E$ N) Y3 m6 A% E' x
{
0 v- o( N2 D% ^ return dwItemId < p2.dwItemId;
: a, Y9 q! C1 o+ C" A }else{
; U& Q8 }+ p9 Q- [$ r; N return dwKind2 < p2.dwKind2;
. ]4 S9 q3 u" z) Y2 p; n }; ?# Y$ i% E- w3 a4 Z2 R
}6 @; R4 r7 C8 B% S& y/ ~2 g$ t1 n
};
' Q8 N' g% u, \8 Uclass CInventorySort) V+ \2 T$ d; K. l
{8 } c7 m) }: @; E7 g
public:6 m& l' z8 m" h
CInventorySort()' R) ^/ L9 G7 K$ K" Y' N
{
; U" P5 @0 o7 t1 a( S; Z0 K8 U m_dwPos = 0;& H; N3 ]1 f5 l6 }* g' O
}
3 O% R( S0 Q& W. F4 y- P~CInventorySort(){}9 m. B2 }: Y; w/ z9 m7 _
private:
) r4 C) g/ K1 ^3 @: [' R! ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' ?, |) b; t5 o, c$ x7 R$ y9 hDWORD m_dwPos;6 J7 ^: u) K' n l
public:
& \. t; R1 D5 U: S1 Gvoid Add(BYTE nIndex)
* p9 U4 e: O+ l& [6 T{
4 v. h, ~) |. ?- i if (m_dwPos >= MAX_INVENTORY)- |# x; t0 D7 o {2 o3 Y
{
. e: u+ ]* }' ?8 {4 {, b G return;( P& {& R i+ D- f# s/ q: v
}( v( |- h8 T: v; G; R5 q2 @
m_Item[m_dwPos].nIndex = nIndex;4 m1 L/ y1 ?3 \
m_Item[m_dwPos].dwId = m_dwPos;
, s! k5 @5 f3 P1 n) G& F7 P& J5 b3 | m_dwPos++;
' U2 A8 T$ C$ L}3 F8 ^! `$ p" Z, S$ {) t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ A" d/ \7 V5 |" z0 g4 [/ u
{
4 P, a1 Z* O0 Y' z for (int i=0;i<MAX_INVENTORY;i++)7 K: ^- `! c$ V8 L' k
{1 r3 b+ q9 x; _5 {* t& F3 y
if (m_Item.dwId == dwId)( A4 j/ r) C6 Z* c
{
9 f$ u' a! e0 H9 w& E+ d$ Y5 l return m_Item.nIndex;
8 U4 h/ e& u& M6 k2 T( I+ Q, A0 V }: s3 P* P, S3 t. W
}5 Z' J2 X' S/ n
return 255;
+ e$ t* ~" s. M}% i6 M1 Y, i6 |1 q$ ^" v
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 H. g) A& Y3 j/ Z3 K3 g{
& P: w5 { ?, }5 L4 M BYTE nTmp = 0;
/ ]4 @( N( o) q1 V% u3 ~0 O bool bDest = false,bSrc = false;6 A7 V; l8 o6 U0 W- ?$ e. Y
for (int i=0;i<MAX_INVENTORY;i++)
( J; Q! n* Z, H* I% I4 y3 D3 P1 v {
, `. X7 T; j& _3 U& a c: r1 g if (dwSrcId == m_Item.dwId)
# g: T' } D( I$ M# z; n {
' H" c' w1 k, h //id相等 则 改变对应的dest和src
2 X4 |6 R4 F1 ?5 L y( k nTmp = m_Item.nIndex;
2 }: Z, E: C- D6 l m_Item.nIndex = dest;! L2 Z$ Z4 D( A$ r; B# {# ^6 G
}
$ D% j* H8 h/ {5 H' _) F4 H% V: `% K }4 j Z" y3 \& n3 j4 Y
//临时数据保存完毕,交换开始' _$ k8 b: |$ I! L0 @( m* W1 ^
for (int i=0;i<MAX_INVENTORY;i++)
8 b" W, @) g0 K+ g7 s+ p {( H2 q$ E8 P' B, l3 P
if (dest == m_Item.nIndex)
' q7 }5 t: e0 H& \" s3 l" ]* r {
3 S/ D1 T( a1 u2 e) W9 ? //id相等 则 改变对应的dest和src( J9 t2 u$ F8 {8 f! |1 J( c
m_Item.nIndex = nTmp;
0 Y3 W' @9 Q* ?" N/ e/ Q }
. a: i+ |2 H1 K$ y4 Z% ` }
1 s+ a7 ]: v; ]+ S}$ d3 m( `0 O, X
};
$ A) p6 }& u* S-------------------------------------------------------------------------
; g! F& g& n/ w0 A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 j) ]# T8 s$ n! M S$ `
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- j" J V3 g2 b( Y' _
紧靠其上添加:* y/ q, g( U% k0 X0 Y2 j
if( pWndBase == &m_wndMenu )
) B' N; m7 b) [# Z{
2 _4 v" C$ ~7 v& S switch( nID )' {5 h; O( `* U% O# B5 b
{: Z( J4 S+ N1 t
case 2:
2 Z1 a) \4 w, r# T {: s: p$ f2 F: p2 n9 W
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ m. P( s4 }& v3 F& O2 q$ c
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
D. C7 R" c I& K/ K% z4 i {. l+ ~% C8 |9 _' O! P0 U: S- K
break;" |+ t( t4 [" U1 @. y$ E- T
} o6 z+ g# y: ~5 k
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ j, I6 n! y3 J: E% ~
{
2 p( z- }& V! v5 E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& n o7 q$ ?0 h/ E$ g+ h1 d% E
if( !pItemElem )
5 ~% O4 `# H2 {% K. e3 @! K F/ i1 @1 F continue;
. h& s5 M% Q: A3 x if(pItemElem->GetExtra() > 0); y& y! V. `0 z
continue;
+ t0 B1 T. u5 |* t5 @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- H6 |0 d, U& _5 w% s' s continue;8 I! m8 _* l5 s9 g) m# d
if( g_pPlayer->IsUsing( pItemElem ) )
3 ~( h% ~6 A4 D3 @, e# r9 Y4 z continue;. D+ t/ r+ X! Z
if( pItemElem->IsUndestructable() == TRUE )
, m/ c9 k- I& F+ P {8 D! v. w2 O3 @% C" ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- ?, c5 W7 v- q% A
continue;
% e2 J! \3 F% v" m: |1 L }# C3 I% y& p- @/ q! q$ l
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 H. ]- p, a. u1 @ }6 I( p2 o6 P0 j; q$ O6 t& O
break;
0 K& S8 g; o1 t7 u }
8 h5 a0 _+ ^( H0 x2 ^& n* J4 j X case 1:
; G! O- g6 e- ]3 x/ q8 x: ?2 ^ {
9 t: P% z1 p3 Z e //整理背包
" i8 f6 i" n5 x8 n //////////////////////////////////////////////////////////////////////////
3 ^5 H. n+ \" e2 K% I/ j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ f; V/ r3 R% N ////////////////////////////////////////////////////////////////////////// }* e4 M7 W3 {# `1 U+ K
//////////////////////////////////////////////////////////////////////////7 ]1 q5 L8 d1 o+ @
CInventorySort* pInvSort = new CInventorySort;% I4 r8 x- |+ @7 a
vector <sItem> vItem;& ^2 ]( k4 e1 K* W: Z
vItem.resize(MAX_INVENTORY);//初始化大小
* g8 E- V' G1 x" J //////////////////////////////////////////////////////////////////////////- W8 N$ F! h: @* R& P
//填充数据
1 M3 H9 q- ]: W5 S3 F for (int i=0;i<MAX_INVENTORY;i++)
( \% W* a# k% U7 z& w9 ^ {
! P: N% m& [. v' p. Z! T4 Y2 M2 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 |3 s* K0 [6 i* \- v+ \ if (!pItemElem)
4 k9 O% V" r2 q' \. U& k' b {
3 S+ t6 Q5 S, X! I9 q- c vItem.dwKind2 = 0xffffffff;
/ p% Y5 E, G' y# Q vItem.dwItemId = 0xffffffff;6 _, W8 X+ R" D8 ~7 J
vItem.nIndex = i;1 u9 K# y" i: @( @ F2 R. f! m# _
}else {
# p7 w) i4 R- R- J' F; M, @5 C Y ItemProp* pProp = pItemElem->GetProp();. T2 d$ s# [2 o/ g6 j
vItem.dwKind2 = pProp->dwItemKind2;
3 Q0 A2 m" @8 \- l+ N( b vItem.dwItemId = pItemElem->m_dwItemId;- W5 |# e4 u* g4 ~" C5 O8 A
vItem.nIndex = i;- y$ k! e& E" I9 ]2 J* L( W
}0 I+ S* y, d" s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ ]: O! X' o D7 K }) r) u; c9 {: ?3 ?! i- ~% y
//////////////////////////////////////////////////////////////////////////
, f! C, S9 M8 M sort(vItem.begin(),vItem.end());//排序/ {% c0 V9 ]$ c
//////////////////////////////////////////////////////////////////////////" `: x! j. E, W4 Y
//交换1 J8 T5 ?8 ^, w6 y, k
for (size_t i=0;i<vItem.size();i++)7 c j C$ t% B& ]
{: [( Z( d( H' H6 |% L+ J3 J) l
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: G2 L% I K( B( K pInvSort->Add(vItem.nIndex);( l$ P$ ?0 l5 Z
}+ J6 Z) R$ ?. a p$ _) H
BYTE nDestPos = 0;6 Z) r# v& p% [' P
for (int i=0;i<MAX_INVENTORY;i++)
: L0 u! A# L T3 g { {; W/ K; M( g! q. W, P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 j7 G8 x9 _' Z* `3 K; M if (pItemElem)
, P# L5 t1 n- Y/ Z/ H6 W {
, W J7 [2 e ^! d, p9 \ if (IsUsingItem(pItemElem))4 B \% K3 D* l" n- {8 Q9 L" i
{
+ j: \: s1 V& H //这个位置无法放
4 x; X" _, N# w; B nDestPos++;3 t5 F) Z' u: \6 t, y" x& g
}
3 K" G7 T. H0 F- w# o) l }
* f9 o; |0 ^. G0 z6 R9 u9 { BYTE nSrc = pInvSort->GetItemSrc(i);- U+ N( H( N- x1 C# D% x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 ? a. J0 f* Z1 k if (pItemElem)6 S1 H4 E6 o2 \; `
{; {! Y6 A' f) c9 }
if (IsUsingItem(pItemElem))! X+ t; X& ]( H7 I! I1 f" k9 a
{
7 d8 Q1 x/ W9 G* J5 U //这个道具无法移动,跳过: B+ k* x$ }4 \6 @) P7 s r
continue;: { _. r" l/ k. S, d7 o+ p1 [
}6 } K4 ^1 Z8 F3 Q
}else{
l9 A8 ]1 m5 X, n0 P+ y- ] //空位置 不用动0 g5 y+ G' \! Y, T, K# W: ]
continue;
# e/ ~+ Y9 t% n, _: \3 p* D- M }9 y) Z6 I, M8 r6 V; T! f, i
//////////////////////////////////////////////////////////////////////////7 l# @2 G0 f [) o% v, m
//开始移动
4 w2 _+ m2 H0 T$ X$ q if (nSrc == nDestPos)
2 l1 J8 ^& ~" D) i, r {
% @- q0 ~4 L8 V: i" g, ]! w //原地不动$ h; V- H3 I( a' D3 a6 B
nDestPos++;
2 U" c2 ~" U; | continue;3 ?7 h2 k0 v1 K4 G S
}
6 s2 i, l% n% L1 [" R4 R, O pInvSort->MoveItem(i,nDestPos);
. w8 J, L" p, k( H# s g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 b; w3 g. p5 Y" o, T1 Y& ] Sleep(5);) D2 Z' }6 d# o& v' s
//Error("移动 - %d->%d",nSrc,nDestPos);
& k6 H* O2 n5 L2 n& c nDestPos++;
9 M6 r8 i' b& H e/ H1 s+ j d }
@5 m3 K) F3 } //取第一个元素的信息4 s* f/ r/ B- j
/*; v2 Y: H: |3 \( x. N
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ e7 u4 R& d& s) d
{
5 f( }! X0 \7 m' d% G Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) ?; Q7 Z9 m3 v g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 [) `! K" q) k* t/ a) P$ I7 W
}
. U( e F( H! C9 i */* o7 Y7 B% s& q. ]0 A
//////////////////////////////////////////////////////////////////////////
* o! Y& q5 s* @( q2 N break;
1 @9 {+ _$ n$ Y+ D$ {- a" L. e" v }
) b8 @; V2 x$ z3 `1 y# A- C; f } & I5 F* V; z( M7 G. y
}
) u9 B/ U$ S; u t1 J1 q( y4 rm_wndMenu.SetVisible(FALSE);
4 w& l* ^6 d9 s, O# {0 d" ~1 r; R! u% X2 j' C" ]% f1 j/ \4 s
--------------------------------------------------------------------------------------------------------
3 {/ C6 {' L: s' U/ m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 e2 w/ v* a. ?9 g: W
{
; o1 b8 h* M7 I5 O3 DBaseMouseCursor();( A) L5 g: O8 j: b& I
}
8 H9 H# ~; u" _* ^2 y4 m3 v* c在其下添加:3 F& [# g3 k- x4 ]7 f
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 l5 J; L. z$ h0 \' M5 W0 \$ G' Z2 p{
9 {6 Z; c) I3 r/ jm_wndMenu.DeleteAllMenu();/ U: e% ]! c9 L! E* `; B1 f
m_wndMenu.CreateMenu(this);
3 l F; H" g+ D- }$ g0 }6 Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' G( ~+ m6 e; T' }
- a0 X9 f' n- x6 U) o2 lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! ~) f# f$ j, X( z2 P* Z! l{
# k! c/ {7 Q. }7 s, l //P以上级别才可以删除所有道具
6 |5 S' R0 {7 `. J% @5 }& E { m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% C0 \2 A; F" ?3 z1 |+ ^
}( S& s& X. m5 X2 r( b1 [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 H6 z' B+ v1 w7 u j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 b: d+ `7 t8 \% z) Pm_wndMenu.SetFocus();7 ~/ x% v* {! _
}6 d9 A2 K, t& c& Y. B9 V5 q
------------------------------------------------------------------------------------------------------------
. c( c3 Q# R7 ~*************************
. D' m. t, E9 j, |* hWndField.h文件; f, n% d0 w0 Z8 k0 q( ]# f# r
*************************3 F- E# x1 F8 e1 x* b! N( d: B
搜索:BOOL m_bReport;0 V! ]7 Y. }; f6 O& d' s
其后添加:: {: C" m$ W0 |* H' Y+ ~- S
CWndMenu m_wndMenu;
# I2 R! f! R0 F8 U6 m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, p+ e7 Y. t5 R# j* b: d; C, ~
其后添加:# U, @% @. X) j% w1 u' ?9 [
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& g7 z9 L) o* \& ^# R5 L
+ I- B! P* l2 G6 D8 N3 y3 A0 y5 Y5 M* r( d3 m& P- ~
|
|