|
|
源文件中_Interface文件夹下WndField.cpp文件* L9 `' y9 o8 R2 G$ @# X
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: |5 `6 o+ p1 k) I0 {$ {" V% w, Q8 V1 x8 F0 O
struct sItem# \' Y0 @+ w# z: T
{, [- `8 w, A# \; l2 ?$ }- Y
DWORD dwId;1 L* H0 f6 r) S* S
DWORD dwKind2;
- v! z/ {. p( b1 }! VDWORD dwItemId;6 V: A/ p) s7 v+ D5 ~0 K& G6 V
BYTE nIndex;
" F+ U) V$ Q4 `# g9 l" T, JsItem(){
9 ^! J! }5 Z0 F b; p t dwId = dwKind2 = dwItemId = nIndex = 0;2 N: a7 N! @, @0 D) d* X
}
6 c/ b6 }& u. s; i' \5 {0 \6 Hbool operator < (const sItem p2)
" x5 e# o9 ^8 _7 @{
( H, `" x K! A1 x if (dwKind2 == p2.dwKind2)( q; g2 q7 k$ _
{* \: P% ]: k$ o/ v
return dwItemId < p2.dwItemId;
8 r/ V E2 m3 Y }else{
# s% a# K; n& P return dwKind2 < p2.dwKind2;7 B+ L: @, B, G2 v X
}! ]% A+ ^* j* t) }- `* I
}# E7 K) b6 M, V: b2 d6 ^' @
};
0 V1 y ~0 x$ `class CInventorySort8 F+ O/ |# n w
{" u# }$ M6 [9 t7 B2 Y
public:2 D2 M5 G0 j5 A+ P5 @. ^# @1 C
CInventorySort()
+ u3 H5 H% B# [{
' o6 ]) p7 D+ Q+ S/ q m_dwPos = 0; W: }$ A4 W: U8 S* s( C
}
3 U: Z2 N8 x: U~CInventorySort(){}& Q* |3 I" d1 a( { C; `$ Y
private:3 C9 {& J- I3 P/ j/ w
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 P9 [% X) G6 |* {7 s
DWORD m_dwPos; o3 _+ f" W% g# ]2 Q6 J
public:: l' A! C3 a4 S2 s! ~2 C9 e4 F- ~
void Add(BYTE nIndex)
L+ ?* R% e, q$ p# A8 o! T{
6 g" S0 g! l ~* j! O' `& g if (m_dwPos >= MAX_INVENTORY)
n& e2 G3 K4 l5 F V {; e& f6 h% H; ^3 h/ s( ]4 e
return;4 ~4 o5 _7 k( m
}
7 ~& X6 S1 t! x; S* A* X9 ` m_Item[m_dwPos].nIndex = nIndex;9 W: t9 Y6 P9 q# Q
m_Item[m_dwPos].dwId = m_dwPos;5 x6 Z6 |) {' d5 g* n: H/ `
m_dwPos++;
8 z9 s6 w/ m: _7 h$ p}
U8 Y g% b# E, YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' V4 I$ Q. ?3 C, C: G7 c% X{
7 r# h2 q* @7 C9 _ Z) Q for (int i=0;i<MAX_INVENTORY;i++)
1 t- ?$ l5 K) t+ o# w* U { c5 I* L! l6 P G) P* c
if (m_Item.dwId == dwId)
6 R( M4 o2 g: |2 }$ i {
4 l6 O! C4 G; N. T) I9 ]5 N; R: M return m_Item.nIndex;
2 W- u z3 i+ K* o }
- D3 w" A9 u$ \# Y, T$ N }
/ \5 z) f2 k8 O! l k return 255;
9 E6 _2 D( m+ a. v/ C}
( S7 N+ a8 k6 g: U( I" V4 Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' Y* f2 e8 w+ ?3 g% @; |; m
{7 W" m: v/ l. ?- \# B
BYTE nTmp = 0;
9 |* r' l% e$ | bool bDest = false,bSrc = false;
5 W" g) p# _% I# a& ~# G for (int i=0;i<MAX_INVENTORY;i++)
! y! f# L" F# D$ I! \# @5 |* W0 l {
8 G- a8 x* |: i# X! N if (dwSrcId == m_Item.dwId)
4 ], E: E2 U& N: Q% v3 B {) a! k( { k8 m0 r" f- n
//id相等 则 改变对应的dest和src7 m5 a" k: E; d9 b% ]; @, p( n
nTmp = m_Item.nIndex;6 Z# G/ |" e' u$ c' s6 _% A7 Y4 Z6 V
m_Item.nIndex = dest;" f7 A5 D0 w5 }- I
}
6 j3 m% T( L* w! d }
. }4 a; V/ I3 Z8 L6 R: v) M //临时数据保存完毕,交换开始7 q( e+ M$ N$ b; |# r' P _' H
for (int i=0;i<MAX_INVENTORY;i++). q% i+ ?0 H. _4 Z, _" Q
{' |# L% \6 b# w b* V7 s/ N F2 i
if (dest == m_Item.nIndex)
/ [# J% A9 e, @+ g5 d {
) e1 c; H; i/ D //id相等 则 改变对应的dest和src2 D+ ]9 i" R' W) f
m_Item.nIndex = nTmp;; n4 [2 q' l0 W
}! W& B2 r4 t0 }/ E) e
}! C: ^/ ~- k0 v
}
* e/ ~4 s3 G2 d}; |5 A9 a: Y7 Q7 ?8 z) B" V0 [
-------------------------------------------------------------------------
- P" ?' M: a/ I; p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 y4 j7 G1 v2 K. e( l7 `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ O5 c7 t0 J% G3 p紧靠其上添加:% G% C5 i8 @* @0 p/ Z9 Q4 W
if( pWndBase == &m_wndMenu )
" l% x; S) t6 J" w: k% e1 y F5 z- j{/ U9 R* R! I: ?
switch( nID )* w$ F8 B0 o E6 Z S+ s$ s
{3 X6 G* R6 J' { T q: b
case 2:
8 ^ `, |0 B4 |" @& O! p {1 }6 l9 a# C- m+ Z/ X/ E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 l) w% ~. \/ k, S' u& K if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) g* W/ h3 X/ ~3 s$ j {: u- Z2 P# B' f* P
break;
1 E+ l0 i/ N5 y& D }8 G& l8 _" k4 z6 F1 J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! P/ M) b+ b- @0 t3 o4 b7 |0 @) V {9 ]4 M; g" Q0 c1 x- y- I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; ?5 e8 {* K' M( F8 ]/ m S
if( !pItemElem )3 P" t2 V- w& T1 e
continue;
6 i; R6 y- Z- P J1 V0 T if(pItemElem->GetExtra() > 0)7 H! B D* T9 _1 w) |# D2 s/ W
continue;
- V- f; x& i+ O# q) m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ R' W5 O! A! T& Y' y continue;
" s- H& U* u, J* _ if( g_pPlayer->IsUsing( pItemElem ) )2 ^- L5 b# z& E8 g/ _
continue;. X5 @. P- }- @! q5 j
if( pItemElem->IsUndestructable() == TRUE )
5 P& m& m0 K9 g2 v9 |7 s {
2 l" c* `2 j8 u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ H% p: z7 R: M6 o continue;
+ Y3 M. b; K, O0 y. _0 {' z }2 G* Y- ~9 B9 e$ M. {2 ]
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 p) W5 A8 D* b; x" D# D
}3 k! u: V4 s! h8 V! o' _1 x# S
break;( q, F' i5 g- m2 Q$ _
}
0 W; o' R. O4 E5 H0 ^6 K case 1:- k# @4 s! C2 ~
{' \9 K0 }4 _. J% z& k
//整理背包
$ i, l6 w: M1 i! S" s3 [ //////////////////////////////////////////////////////////////////////////
4 H) G) Y- Z( n //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 I' V# E* H- S3 [ O //////////////////////////////////////////////////////////////////////////
1 @0 V- K3 g8 ^5 r' @1 Y7 t& r: @$ k //////////////////////////////////////////////////////////////////////////0 t+ m8 S' E' F6 l, s5 @
CInventorySort* pInvSort = new CInventorySort;
% ^) ]# A1 w, ?8 D! A" z vector <sItem> vItem;$ I3 C( `; `/ J- _( o
vItem.resize(MAX_INVENTORY);//初始化大小
/ w+ d$ w7 |0 D+ Z //////////////////////////////////////////////////////////////////////////$ T% T# r- z/ J0 r: D' P4 r; D
//填充数据
) g' T. w5 ]7 k2 @ for (int i=0;i<MAX_INVENTORY;i++). Q. o7 ^6 z7 g/ G+ n9 O
{
+ C1 H; O# t" T. t) F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% R1 {/ D& T# q: i if (!pItemElem)# O4 {% s, R0 ]' ~$ z
{
: \6 J+ ]9 X5 m+ G2 g7 X vItem.dwKind2 = 0xffffffff;
2 e! O I, \- B+ R6 C J6 \' B vItem.dwItemId = 0xffffffff;
0 G `) @( M- s, V0 w2 t vItem.nIndex = i;
+ N0 v( ^# s4 Z* H: }" c }else {
. ~7 m( l/ @' _; E ItemProp* pProp = pItemElem->GetProp();
7 ^) z9 n5 `6 X vItem.dwKind2 = pProp->dwItemKind2;/ r1 V! E; M5 G8 Z7 r2 G
vItem.dwItemId = pItemElem->m_dwItemId; E8 z8 g: k/ k
vItem.nIndex = i;
1 Z/ A: |: G, f& S }. O3 q2 B0 r. y0 T( I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) I! R) B, ?/ w/ f$ y1 V, ~4 A. n# A* p }
( S8 S2 U$ L) e- }: P& d6 E) }, D //////////////////////////////////////////////////////////////////////////
0 y7 h! I5 [' \ sort(vItem.begin(),vItem.end());//排序
' S$ q7 R8 f6 i! X9 _# e0 J //////////////////////////////////////////////////////////////////////////
v( o3 }: ^4 G4 S6 A( `/ s, W //交换! Y2 s% q1 {& {& t- b x
for (size_t i=0;i<vItem.size();i++)
& H% m* |" S: ^& O( T {) t( ]* L% l; k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- I. e. h- A* S% O! X+ w pInvSort->Add(vItem.nIndex);1 }) e2 @9 Y* ]9 b" B. _- h4 M
}$ ?% O0 _- [5 q C2 b2 G! t
BYTE nDestPos = 0;% ^' x6 C, Y: M* Y
for (int i=0;i<MAX_INVENTORY;i++)
& E% E: t! U0 Y { Y, Z- K, p- g) g/ w- \( W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ O. u9 v6 e7 A9 ]7 T if (pItemElem)
+ s, c3 t( a( `# z! b {
; q; ~6 E( c p) ^4 B2 O R, \ if (IsUsingItem(pItemElem))
1 Z3 r7 m: I* t! r9 I( b8 S* F- Z {9 Z7 g3 _8 y; G& Q# \3 d. T
//这个位置无法放& q3 b& ^8 k8 P" E/ A
nDestPos++;- E% u$ j" _) ~0 d W7 Q# q& p( i
}) S& V) M7 n" ?0 [
}. Y5 I @* {/ \7 H% q0 \ M
BYTE nSrc = pInvSort->GetItemSrc(i);1 f2 s% j' u! v7 D. G' d0 U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& v7 R) P' V. b8 r( R( m* Z# S if (pItemElem)
3 ?' @% v* d" D4 _$ U$ @. b X {, `% c. i2 X( t8 S$ e9 {& Y# b4 X
if (IsUsingItem(pItemElem))! H* F4 P2 \1 J# k1 I( V6 V
{
+ ~/ G# ^* N. Q; B9 t& u5 s- } p) R; [ //这个道具无法移动,跳过# E. J Z. f8 [, \0 K
continue;0 J, m: Z7 [5 X! {: m: ~1 s; {" o
}
# X8 g. V% }+ I }else{: q. V$ N+ a& c% E3 d6 { l- z/ ^
//空位置 不用动
$ Z/ z) ^* d+ ^2 O: s) z3 {; z: S. D4 o continue;
" r# Y6 M; o% M5 C& v }
+ p2 M1 x4 c# b k8 h; L4 q //////////////////////////////////////////////////////////////////////////
% m7 n+ }' y5 i: | //开始移动
% O; D+ @6 }6 y5 O/ K f7 D if (nSrc == nDestPos)2 i, f. j+ u) }
{) @- W4 X# i& B+ T# H) C
//原地不动
4 N% B+ b5 `, x" B nDestPos++;
0 r+ L0 E, C) P/ w$ m6 S* B4 [ continue;* D9 E4 g; T( g
}' G1 o3 v- x' y2 p, t Y
pInvSort->MoveItem(i,nDestPos);
6 b! e A3 j( @( I, O+ u* D( S g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 f, {4 ^" n: w7 h7 x! b' j Sleep(5);
, u5 o2 k X! {' ]/ g% @ //Error("移动 - %d->%d",nSrc,nDestPos);
) _+ ?0 T+ N2 e% Z' s" f- Q nDestPos++;
7 c7 k& D' c8 Z% F1 P$ K5 Y }
" o% h9 [9 ?' \8 A* [- } //取第一个元素的信息4 K T& O* H5 o* a& C
/*
) x# S8 A' s2 f( |6 B S0 z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! i( S( U/ F; P
{0 \+ L0 F$ s1 {( m9 d/ o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ T, o! w8 _, i( ?! r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( U v/ m! n5 s4 i3 e' i$ B
}
# L, e6 v$ n$ m( B, p. g */
! T9 l# U; F4 e6 c& ]8 z //////////////////////////////////////////////////////////////////////////
4 s! M) @- A/ M break;( `: ]' m/ J Q; f4 D8 w! t9 m, V
}- m, Y, U8 l. f" a9 G3 m1 V! [: s
} % E% A) A7 M$ T, d) ]$ B
}9 L* o. B5 t" ~5 V+ ]9 g
m_wndMenu.SetVisible(FALSE);$ l) O* n+ d, ^' C: N: o( W
: `4 p7 S. o$ g. h% Y( E--------------------------------------------------------------------------------------------------------1 F5 A# @: n( b( |2 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 ^+ r6 J- U: _; I6 D8 @ I{
1 {8 E2 W. S: zBaseMouseCursor();0 d! ]8 [4 V: b' @: Z
}
+ o7 X. F' {1 u% X在其下添加:
l/ q! [6 `: a& j# S* Bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ D- y# J! C. z. z! S{
/ ?) ?2 x p. T* Z4 I1 Y- _; U% x/ qm_wndMenu.DeleteAllMenu();
% j% O$ n3 j, |+ g" |m_wndMenu.CreateMenu(this);
$ A5 l9 y- U3 \4 cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 G7 {5 w' w$ U) ?. m; ?
X: E M+ T# G C5 Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) S. e9 n" i' k5 S
{5 D5 Y7 f" U* ?2 a* T
//P以上级别才可以删除所有道具
6 ?" Q9 b" [3 Q" n+ Q. _) ^ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ p9 y6 B# y! O# ]
}
" ]- a" b2 D8 }7 |/ {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 \7 g8 ^( m" L
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 L' [' W) r @6 M; q
m_wndMenu.SetFocus();4 t5 m: B ^0 `8 N) N' N n) t* f$ _
}
) G2 b, M' ~: i9 l5 g) r------------------------------------------------------------------------------------------------------------5 P9 U) J5 U- D* h$ R! Y
*************************
% C& I0 Q, z% P% gWndField.h文件
* U' g% E8 \" D* }. }/ Z0 S/ N$ g*************************+ B# t6 Z+ e, d$ R' K# s L
搜索:BOOL m_bReport;
6 i4 S* }+ Q) [; B( y; I5 D: x* K其后添加:3 k, f& Z/ e! c0 e' I( A
CWndMenu m_wndMenu;
8 P. o, A6 ]- x3 [搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 a& e9 k* o; L1 m3 W其后添加:
( c5 H5 |/ Z0 ^! ^virtual void OnRButtonUp(UINT nFlags, CPoint point);4 _6 R# q" h& n" C4 K; W; Q( t+ W4 z
8 C4 n. h. U" w- x3 ^* P; r( J
6 C) @6 L; m4 f& q6 c, ] |
|