|
|
源文件中_Interface文件夹下WndField.cpp文件
3 X& E+ @, e0 ^& |' d( L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ a8 |3 {, t( z% O) Z, u. W! V, s+ z4 X: U* ]& M
struct sItem
( H. V; _) I8 M2 M6 p' b; c{
" R. H* e$ u S/ B7 jDWORD dwId;0 G7 p6 U1 ^7 I
DWORD dwKind2;
3 ^3 L( g8 i) T9 bDWORD dwItemId;
2 H1 T! K, U* S) H6 oBYTE nIndex;
/ N& ]! y, B3 x2 E- y8 M- @$ R) _sItem(){8 i4 r7 }* W* d$ t! [
dwId = dwKind2 = dwItemId = nIndex = 0;
0 \8 d; |5 F, b}
) x4 ` Q+ H7 [bool operator < (const sItem p2)
! u6 I' e/ L, e{& s0 Q3 e) U2 ^# H
if (dwKind2 == p2.dwKind2)" i! b+ u1 D& y: U: Y& R
{
6 u) m' g2 I F* B return dwItemId < p2.dwItemId;
2 x/ ~3 ], T2 h0 a }else{
' `0 `" K/ o* {/ \3 q, M0 ^# T return dwKind2 < p2.dwKind2;
, O6 D' w, X" k0 p I }7 o6 X' A8 s p `* D9 W; w! C
}$ C3 L; a ~+ z
};
0 I4 N# E* Y' Z& B4 ^$ Oclass CInventorySort( ^( v; ^' g7 H) E4 u7 [' v1 ~
{
; S6 T' |0 K( F2 } D9 X; hpublic:2 Z' h+ g+ R- c! A, ~
CInventorySort()
2 a1 {) K* g9 Y# O{% n$ D6 |" q5 j% D) F, z! a
m_dwPos = 0;
Y; l: v" S2 h' s, |6 c}
3 F% Q; e1 t/ O+ h; H~CInventorySort(){}
1 G2 E/ G" z/ e" Q8 lprivate:. b8 Y+ Q; n" Q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& j# a" p( ]6 V8 R0 b, ]8 k
DWORD m_dwPos;& M) `8 J8 N2 S
public:
7 b1 ^& ^& N$ K4 v$ R9 Avoid Add(BYTE nIndex)
2 @ h: P! W4 q+ V$ B5 b: H8 F{
) x% x/ H I4 Y- F; V if (m_dwPos >= MAX_INVENTORY) w- M5 i7 G' h G! ^6 N
{
' y; m/ e7 m. C9 e: } f7 j1 ?5 F% F return;
5 c9 m. P& P9 o" n- X5 {# }2 D }" r6 V9 i$ M1 R: G c9 j
m_Item[m_dwPos].nIndex = nIndex;8 \) B( b6 a# k* M- l% p
m_Item[m_dwPos].dwId = m_dwPos;
) y: z9 T: J, d+ T0 k2 @ m_dwPos++;
8 h2 j6 M/ d0 w5 N! ] Y- s1 F/ D}
9 E) s% k. i5 E( hBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) g/ y7 T0 E$ H! o
{- Y+ G" \/ u( ~6 c
for (int i=0;i<MAX_INVENTORY;i++)
6 \ @7 d3 O6 o: a {5 ~/ S: f7 Q# ^9 d( W; P; P2 I
if (m_Item.dwId == dwId)
7 T+ x9 I. ]7 @* ~' E {/ b& ~ c9 F' d6 Z- u5 M
return m_Item.nIndex;9 D3 u r, B& q! n) T6 e& p# p( W: Y
}
: B5 T3 |' Y7 n, }1 ^ Y6 V }
* \" P5 l7 N) c: l" M return 255;
) Z& T8 L# W+ J+ S: F2 I; |}- Z8 w: x& q2 F' P6 ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; U! L# }* X- ^! b; `1 u# @' s M
{+ P3 N/ V% e! e8 r. L3 ^; q( I
BYTE nTmp = 0;
1 v& ~, a& l0 P9 Z& d3 X bool bDest = false,bSrc = false;
' g+ [5 h G Q* k for (int i=0;i<MAX_INVENTORY;i++)1 O* z7 y8 q1 X8 g* V9 ?0 k
{
; ]& o0 p3 z I0 o if (dwSrcId == m_Item.dwId)3 g6 _) K+ o+ y( k
{3 |# h! K f, a' ^7 p3 }; ]# C
//id相等 则 改变对应的dest和src( V( |3 x0 r0 k8 ~, G
nTmp = m_Item.nIndex;. Y% C8 k! F+ w5 Z
m_Item.nIndex = dest;7 a% d( V# h6 n$ c' D1 x5 B4 |
}/ t: i. f* `! a! ^. K* t& J
}9 ^6 e5 A& I, u7 y" v
//临时数据保存完毕,交换开始
' j$ j, ]5 D- b0 ` t+ s for (int i=0;i<MAX_INVENTORY;i++)
3 D+ g, k) i. _+ e9 K$ e {
. m8 D, v# P9 n" _4 X' q if (dest == m_Item.nIndex)
" G4 I* j8 X1 O4 Y6 H1 Q9 Q+ Z {0 _% s( r+ f9 q7 L! J% p v
//id相等 则 改变对应的dest和src6 q5 c: t. c; Y% l
m_Item.nIndex = nTmp;( V# y. f2 `6 G7 q( G0 j% L" A$ m
} W: `7 a) c' X' z
}
`# E% x' v: c$ U" p! ]- @}" o8 `. n. v1 G) @- \9 e! a6 n. C% R5 X+ i
};5 R3 p1 z' o1 ^! M* m
-------------------------------------------------------------------------
+ p9 u4 z( b4 U3 g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 [2 j: ^* P3 }* v$ _搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 R* T; R6 C- x7 R
紧靠其上添加:
. T' K4 }1 s; [: sif( pWndBase == &m_wndMenu )
+ r* ~/ V0 S+ W8 n+ K3 v{
9 _3 [, e% E* ^4 ^ D5 L switch( nID )
h5 P& n0 u( y, E/ p% l) {, H# }' J {
( j, V! m6 O2 Z1 { case 2:0 E2 A0 d2 a6 a$ N% t) X* G2 d
{: s$ Q Z( ~: j2 z1 Z, R- j
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 n' P5 V h/ @& b1 O+ ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) `& K/ T. O, X {
6 O( a' ]' N/ c( I( d2 R0 h% `* E break;2 a/ ^* }# }2 y0 J. O+ G E% g
}
$ ^* z+ T& _/ ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- S R/ X0 b" {$ ~" w" N n/ f' i
{
5 T( H1 [$ S$ l! M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; H9 V1 |3 M1 A8 w
if( !pItemElem )
' ^4 T7 ?3 p" {) E: V continue;: ~$ J+ Y* I, v
if(pItemElem->GetExtra() > 0)
: A% r A; P& d3 @- H/ l+ ? continue;9 I; b$ L L' T) U; [! J9 J: Q4 Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : c: g) T: [9 S9 H8 Q0 N3 X
continue;
' e/ @3 w# Q$ s% T. k if( g_pPlayer->IsUsing( pItemElem ) )
9 [+ t0 a1 _0 X) S1 N4 d continue;6 {/ s6 L3 ?5 n, N5 W
if( pItemElem->IsUndestructable() == TRUE )
! o) O; e, }& P8 m6 H5 R* D {
8 r6 o- U& b$ t% [8 ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 r5 d8 w Y0 i' c7 U continue;3 g) N5 X9 ~, C" n5 X
}# w/ W# C% i, G! ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 h9 C/ G- o4 Y l$ T. M }
+ C0 I! Z) o1 M$ y, F break;
2 l( e' Y4 a* W0 a5 M1 w9 ` }
6 f, Q) z3 ^4 A1 l, V case 1:
6 h4 _: ~) O0 e$ a! g" e$ Y; J, ?' S {& C5 E5 B$ q% n2 J7 L" z3 l
//整理背包
0 P% q6 @( ?) ` //////////////////////////////////////////////////////////////////////////& f& A9 h+ ~* q" Z5 C. b1 k
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; ] Y" s# f, H* G& U( e. o //////////////////////////////////////////////////////////////////////////+ r ^% }# h2 z# K
//////////////////////////////////////////////////////////////////////////' {! S" k) c# l) P; R
CInventorySort* pInvSort = new CInventorySort;! }# n8 |6 O5 ~& N6 I
vector <sItem> vItem;
, Z4 v. Y1 b" a m6 ^ vItem.resize(MAX_INVENTORY);//初始化大小# a' q( z3 {' E5 s+ t1 K
//////////////////////////////////////////////////////////////////////////5 O$ t/ z0 Y& z( K/ G1 P
//填充数据
7 W q0 f" f" G9 u0 ^6 S! R for (int i=0;i<MAX_INVENTORY;i++)
! T; ^3 i v% Y; y% [ {4 Z7 J6 j) b* K7 c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# A( v5 E4 J% w7 U* L if (!pItemElem)
0 L- f# i8 P: ~- O) ?/ I% @& I {
- |! }7 a. v3 C* F vItem.dwKind2 = 0xffffffff;
! H9 A# s* L9 G1 _' k$ f vItem.dwItemId = 0xffffffff;
. V, `3 ^1 L0 p# [3 p" y7 [! ~ vItem.nIndex = i;
' h5 s. ~- D5 r/ M" T" U% ^ }else {
+ ~$ o* P0 ` V. X, p9 }) x$ n ItemProp* pProp = pItemElem->GetProp();
8 m. W: ~ Y* f5 v3 L4 a6 m" t" B+ w vItem.dwKind2 = pProp->dwItemKind2;
5 [ v. A, |: j" T s5 E0 n vItem.dwItemId = pItemElem->m_dwItemId;
: _1 w. u6 H, y2 O8 @% m vItem.nIndex = i;* K# V$ n& e& W$ d6 C1 _# P1 }+ ]
}
2 I0 r: ^& U+ s- L0 T& s4 I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ f. j# e2 _; c& K
}& \/ r) j; T* m4 Q
//////////////////////////////////////////////////////////////////////////7 d% Q. C/ g0 v" {" e
sort(vItem.begin(),vItem.end());//排序6 u; H* F( B0 G+ B
//////////////////////////////////////////////////////////////////////////- a, B! d" G4 b5 c* w4 g+ n
//交换8 m4 N% |" {) O
for (size_t i=0;i<vItem.size();i++)
/ K/ M" p2 A9 G7 G9 D {
1 M+ o/ ^& y: s* b //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 S7 ~) H3 ^* W6 U( g
pInvSort->Add(vItem.nIndex);. ]& X/ Y0 \4 g: |3 b' H
}
0 g7 b6 X; \9 D- E; x# d- k BYTE nDestPos = 0;6 F8 v+ s: K1 ^3 H Y
for (int i=0;i<MAX_INVENTORY;i++)7 r0 ?* R% S' B
{# R& I6 @7 r5 Z+ K K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ U; h8 J3 N1 y% j0 Q$ K5 a
if (pItemElem)9 Z) v& U- T4 u9 C
{
5 G+ `! B8 Y" U6 L$ Q6 K- ~ if (IsUsingItem(pItemElem))
8 I+ N' d8 [0 d m {4 M( W: h8 U6 Y2 J. \( O
//这个位置无法放- ~$ {, g: \1 }+ M4 S! c {1 T
nDestPos++;
. N: w3 q; o' F% x }
% x1 e# J& C+ O; f# O }
% M: {- @: p* C! r. ?" z: M9 _ BYTE nSrc = pInvSort->GetItemSrc(i);
3 S& T9 Q4 e ]5 b- @ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 ` ~$ Y& n% \& Z9 m0 q
if (pItemElem)6 e% d& _% i1 z- Y
{
- p" J' U: j. @: W M if (IsUsingItem(pItemElem)). |( Z% |& r! `0 M) l, s c
{' E0 N8 N" b) [1 t' X' M# l
//这个道具无法移动,跳过
% R( v6 N7 G; @5 K3 o( Q$ a continue;
) \6 g2 \" p' }. F" R }
5 F' B/ A! e+ P4 I! {5 k5 R }else{9 Y! ^, L* v# q2 e- A
//空位置 不用动* k* T5 L. i. ^$ i, @6 ]" {
continue;: b" v8 A: F9 {. \( x9 T: f
}* }, k/ E2 \- C
//////////////////////////////////////////////////////////////////////////
! q4 y9 k, O5 o" H) C: r //开始移动8 o% ]! T4 _5 N2 V/ `2 y" `0 B
if (nSrc == nDestPos)
1 C4 F" o' g$ c+ M) v9 p( p, j {
& H: l, c, c' G //原地不动
4 S3 K, Y8 s4 m5 F" j b5 P nDestPos++;
4 O. |, l5 ?- g continue;% P3 T# `1 Y4 N! N/ t# Y* V: H+ o
}5 l" Y9 _ [7 p ~" ]
pInvSort->MoveItem(i,nDestPos);) ^& j% z4 s/ {/ l* v) p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( [; }: E7 i7 T0 D, H Sleep(5);0 O- f! ]" k: v O1 T$ {1 |
//Error("移动 - %d->%d",nSrc,nDestPos);
1 T' p, M6 g5 u% p# n' m# F1 @! ~" f nDestPos++;# A6 \7 K( P/ P5 R* }
}0 I% R [9 \9 M% |, \- t
//取第一个元素的信息: U$ N7 k" L; S% n
/*
/ y5 J X- U! {- y2 ^& e% g if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 X! ]% [5 G) G$ a6 m {
! F8 Y* @& G+ W4 A: \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ n5 ~. B( d1 b% B3 H8 B g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, T6 i7 O! H2 s& X, z8 S2 p }
$ M3 t8 g: d, s" d */
& D1 h0 r4 @4 g0 R; O5 H: [2 t //////////////////////////////////////////////////////////////////////////
/ f' m4 k2 |5 L break;
" a% b/ s+ V$ |% S }) Q+ K8 t3 R$ M7 M5 @) a' S
}
) j! @" O; W- Y6 }}
5 f# Z4 K2 k) t: C: ?, [3 Km_wndMenu.SetVisible(FALSE);) F! p4 ?2 Y! ?# @. G; U
, g9 r) _& z+ `--------------------------------------------------------------------------------------------------------! h: ?; X4 m; N: b; a5 p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 l% N& Z. p+ P9 l. k0 b4 k
{
6 H- R- x. I) h6 f% u' f. VBaseMouseCursor();
+ t: N$ r2 a0 n+ Y- b8 t$ W- @9 o}: \( }5 e$ g9 c8 k1 o0 ]
在其下添加:
7 ]; t6 @5 V! Evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- G! T% d4 s; R1 B; j{( D5 S1 u4 W/ c
m_wndMenu.DeleteAllMenu();
; X) ~7 k6 x- ^: G7 @m_wndMenu.CreateMenu(this);
4 w6 _# Q" l7 E* b% f+ g* Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 G4 X% q! ~7 A) Q* V q: w* V# J9 }1 ^
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 v# ^8 x5 K' U; m4 l4 F% ^7 ^{
, {8 Q4 Y3 ^* |! Z( d4 a //P以上级别才可以删除所有道具1 v9 I4 I0 P9 Q- K& D8 t! z( w3 l# s( U) E
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- L6 p" |2 p3 V+ B2 w}! S5 z C1 X4 `+ f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ {, E& F' u2 M% a$ h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: v6 [* s N% q5 @( ?2 j# ^m_wndMenu.SetFocus();
% x( \: f! n4 H1 K- t6 ?* [}/ t' J2 {9 A" t; A4 @6 n
------------------------------------------------------------------------------------------------------------) Z9 O: B2 X. m2 |
*************************1 ]) I1 w0 N7 S# L8 w# S
WndField.h文件
: Q- E4 B1 ~7 q. E2 a6 h*************************& K& v9 u% O4 D* _( N4 ]5 D
搜索:BOOL m_bReport;& {6 T: Q4 F5 [" p7 z
其后添加:
3 H& H0 i5 B1 L/ ?CWndMenu m_wndMenu;
) e- U9 d" k1 p2 \0 f0 h# W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: S" [6 Z6 F, h7 x: O7 ~) I b; Q7 `
其后添加:
. E. N0 U' |; avirtual void OnRButtonUp(UINT nFlags, CPoint point);
. Q: G8 t$ ]% J+ E+ O. f( f0 G
8 h( l, h h$ L8 a) d
|
|