|
|
源文件中_Interface文件夹下WndField.cpp文件
5 \7 I) z- x3 O, k# G% K, D9 p0 A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( W9 P8 j6 S$ s
. r' N; D% U' {! s
struct sItem
( e& C6 n( R% b7 ]{2 a Y/ `& R" v- b( z8 q% ?. l
DWORD dwId;
1 Y D; ~6 t2 ]; h. P6 _DWORD dwKind2;$ i. L- r% B4 f
DWORD dwItemId;) x2 f2 c1 E8 j+ v: W5 k
BYTE nIndex;
3 ~! ? E0 `" B5 n% asItem(){3 |3 i. T: e8 g8 p: f# w$ N: i
dwId = dwKind2 = dwItemId = nIndex = 0;
9 l0 J6 K9 V% o. T" Q: Y}; x( \6 T0 b$ ^% g9 e+ x
bool operator < (const sItem p2)
& v3 \% g7 v5 O4 f9 ~" L{
/ K$ r3 h( D3 p if (dwKind2 == p2.dwKind2)
# M: U6 v' a0 i$ k) o9 k {
3 L/ }5 j+ ?# z$ o. z) i4 q return dwItemId < p2.dwItemId;
4 W9 k$ G7 }% y7 X- Y6 a }else{
8 ?, k$ e4 n7 S return dwKind2 < p2.dwKind2;; Q, c2 ~8 u$ `7 M7 g
}$ v1 q& e* _# T6 S0 h
}
! _; r$ A) J, ]& }) m};
( \, f/ \: f- B; vclass CInventorySort
3 ?7 w% n* G) @2 g; j' S6 B9 n1 f{
+ ^7 n+ F9 J3 \$ k/ |public:
; ~; S% Q% t/ G: qCInventorySort()
r+ d1 P) Q% \, E. F& B4 k# r{# Y% S- t/ H7 W% P1 K l9 |2 V2 }+ \$ a
m_dwPos = 0;+ A. L3 S& J( I3 S6 D
}: o9 f: I" y" K% p
~CInventorySort(){}
3 q. |0 i: T4 H: b$ a0 ]private:
2 A4 I, D( ~( |/ s7 L) H, V8 k) `! _" HsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ ]6 t; R6 K) p+ z- k+ j. f
DWORD m_dwPos; z: E8 n3 n. _4 z
public:
: |/ Y7 o7 J. Z& Z$ N/ Kvoid Add(BYTE nIndex)
! d( q1 c$ r3 m9 x4 M{
& D; S0 `( y5 F0 e if (m_dwPos >= MAX_INVENTORY)
$ s4 n5 e$ [8 r; s/ h {
% e! f' i {5 g return;
5 Y& N' x! j& q$ A6 q8 x }
i( u7 v; l9 L+ t& G/ F m_Item[m_dwPos].nIndex = nIndex;
3 g8 x+ t* @+ P$ N, z$ H/ W: t m_Item[m_dwPos].dwId = m_dwPos;
3 ^8 T( B7 U8 j; f: J- U% p7 }! x# Y m_dwPos++;
1 W# L h% a& e) E. r' ^' q4 T! H}
6 x8 c/ m9 j& b n( u( K; U& |0 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. q& `: {1 G' A# E{
; D. `0 p, e' k$ F( | for (int i=0;i<MAX_INVENTORY;i++)
$ }( C% O3 f# |% e+ d9 H$ W5 E {* r. W, r3 H+ A! x7 k- V
if (m_Item.dwId == dwId)
$ }9 Z& o' d# a8 \$ Z5 ^ {
# X9 M( y; t8 k* L. P7 D return m_Item.nIndex;/ D- A2 o4 y* [ B* c+ z F1 _9 G2 O
}
) c& L( J( c+ n' ]$ d L! w }' v" Z) u& g; T" [" `
return 255;
+ A5 P. U$ r, ]3 N, w6 s4 i}: {* R: O% Q) A6 i: k7 i1 K3 ]
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* k: d4 v& z, O) D3 }
{3 A, y1 A! T) `- Z& Y
BYTE nTmp = 0;! B' u9 p3 {7 d, K; N# f
bool bDest = false,bSrc = false;
) g$ z. R& X2 V3 C6 L0 G for (int i=0;i<MAX_INVENTORY;i++), |+ s: b0 M0 Y( y7 G: k% l
{7 b' C ]8 M. m; z$ w7 ^
if (dwSrcId == m_Item.dwId)% W, n; C5 t# K. d6 i0 V+ z
{ m% E2 p& {; |) K2 P/ V
//id相等 则 改变对应的dest和src
! R- I+ L+ d/ G9 e9 \ nTmp = m_Item.nIndex;
) e( T0 ]$ B! `. }+ p m_Item.nIndex = dest;( n/ G s4 ~$ X, M+ K: o
}
6 a5 c2 Q' ?- `4 A% h' P( C }2 Y2 S% S* V# T" N& J
//临时数据保存完毕,交换开始/ a l/ P/ N0 v
for (int i=0;i<MAX_INVENTORY;i++)
* Z- {& R( O Y {$ u9 Z3 q. h; Q9 D) t. o X( S7 G4 `
if (dest == m_Item.nIndex)% V( a0 R6 k, X# \, \5 G
{. Y; H$ {4 o' ^" T! M
//id相等 则 改变对应的dest和src
+ i" F0 L+ f! }. H5 b m_Item.nIndex = nTmp;
9 M; b0 B2 k. s2 C, o* E' ?6 R }
+ a0 D2 i. u$ l* [1 H }1 n2 w$ B" h; q
}
5 Y) f" m" i1 ^# v% C! J};
# k7 D; p) _% z6 ^-------------------------------------------------------------------------% l9 D0 @- y! h+ D# T: ?
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& ?) w$ g1 ~2 b" l
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ C! w* w0 v( Z+ `6 D6 K紧靠其上添加:
, U; m' S. G1 }( K+ S! `( d; ?/ Cif( pWndBase == &m_wndMenu )+ M) g" C1 q/ G- m! T
{
/ a* e0 d$ Q# H7 Z* L5 G% D switch( nID )2 [& Q- o4 s4 |/ P/ H7 S
{
5 j4 r/ v# O4 i; T case 2:' Q8 M' o W1 T# Q8 T
{% A, E& @5 K3 e- r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) q7 O, U/ N* I4 }1 u+ O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 S m$ D# Q9 h* w
{ f$ L( q# f4 [" D1 u4 w, N
break;" t; Y1 m o# i
}5 ?/ Z- c* [3 K9 z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' O6 R" ~. j0 t! K8 J( ` x: j3 l {
; @* f5 K0 o1 O# o- J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- g0 c4 _: {6 `* D
if( !pItemElem )6 A- v3 c; }9 Z& W" Z1 |7 q
continue;
% w5 T' A; O3 \0 x6 d9 f; o0 e5 B if(pItemElem->GetExtra() > 0)- N$ D- M2 `" l% r# }" Y; m
continue;
, ^# y5 b5 \5 s* H" d if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) W( S) @5 e& O- P% X
continue;6 c' Z- j# ^% y8 d7 w! D% r6 v6 J
if( g_pPlayer->IsUsing( pItemElem ) )
: ~0 g q$ W8 r# X continue;
4 ^ f1 |2 A1 s5 u if( pItemElem->IsUndestructable() == TRUE )
- c; U2 O' @# D3 D {$ R* Z! ]6 \8 I- A; ~2 S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) |+ G2 K( M j
continue;: r+ w Q' F# K4 q( T
}/ s4 e% k+ _: j& z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 W0 B: ]6 U, e( F6 i* I
}
" A6 L) R5 D* Y2 v* n( K+ m/ J break;* h8 f" w: Z+ V; p0 _& o; ]
}' S3 e' R5 ~6 X+ N5 G$ ]# Z
case 1:
/ i- r+ \' L& l# C, T3 K {! }6 K7 H; V3 z+ S: _
//整理背包* S- A# F; X6 Z ~
//////////////////////////////////////////////////////////////////////////
; b9 p. G6 H+ j: d: S' n V, d8 o( | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% i0 d! R7 W" ^! }
//////////////////////////////////////////////////////////////////////////
1 l! B9 _+ F" P) y+ m+ f' f //////////////////////////////////////////////////////////////////////////& J5 W; n7 }/ b" W# W+ V& [& |
CInventorySort* pInvSort = new CInventorySort;
' [7 T' I5 s/ L6 t vector <sItem> vItem;
# n8 ^0 R, Y6 f% b# K; B vItem.resize(MAX_INVENTORY);//初始化大小
3 |% e7 `$ G* A% l6 o) E //////////////////////////////////////////////////////////////////////////
: Y+ C( e* b1 \& X% T; X* h) K //填充数据% D. v6 y$ }- o% ^+ |- ?
for (int i=0;i<MAX_INVENTORY;i++)
# }0 [3 A _" X/ { {
& {8 R% d$ |2 A2 T, m) G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 x- Q9 y' Q ], ~. `# x if (!pItemElem)" o" ]% _# d7 B' V
{
, ^+ |. v& v- U* n% A `: H vItem.dwKind2 = 0xffffffff;
- H. f7 |; W" u( Y0 u vItem.dwItemId = 0xffffffff;* l8 k7 \4 P/ k a0 x5 n* [
vItem.nIndex = i;" z* Y9 T2 O, z1 s3 D% @3 r
}else {: r# C' G2 b2 l( [3 K2 H, j
ItemProp* pProp = pItemElem->GetProp();: m- w3 U$ d9 M9 R7 W' Y4 c- |$ X3 M
vItem.dwKind2 = pProp->dwItemKind2;# m- }/ _0 ^9 R4 v7 V% u& {
vItem.dwItemId = pItemElem->m_dwItemId;
5 P+ B- j/ ]1 M9 H vItem.nIndex = i;0 t3 c7 q6 t% G+ a( f
}
) h( L/ n- B# C //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% c6 }. m4 c* O% K& R. d/ ~) @
}
: Y* r2 F& K0 S //////////////////////////////////////////////////////////////////////////
3 }1 i. o. L& Z: J" W sort(vItem.begin(),vItem.end());//排序
" R( B- O! V" b9 S% }2 p9 p //////////////////////////////////////////////////////////////////////////
2 G. _! ~% J- a3 F1 O4 F3 K //交换
" L2 ]+ D* e3 r for (size_t i=0;i<vItem.size();i++)3 O" ~9 ^1 I+ V2 g
{
9 k. L) A- \# ]8 _" r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" b2 d. N, z0 ], _6 x- i* }7 p pInvSort->Add(vItem.nIndex);
* ]3 H6 h: y, y0 }1 ?+ ? }1 s7 A0 j s8 q# M2 n2 }. w) J9 f; m
BYTE nDestPos = 0;; ^5 f/ e' G: r z
for (int i=0;i<MAX_INVENTORY;i++)
+ y; I; o1 j3 r. S- |: R {
0 ~" R4 V) @) B- ~: j2 j2 n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 F; |* @4 ]( b L8 z if (pItemElem)% C* {1 _- D5 W+ o2 }+ ^7 W
{
# x- R2 \0 R0 l( w+ B if (IsUsingItem(pItemElem))1 q( N5 x: i' [/ Q, J1 p; Q) ]
{
+ \& F9 g6 B4 D //这个位置无法放: M7 ~( M, \# z O& y
nDestPos++;0 k4 s# b1 ?3 n' L2 [; j5 l& F1 |) e
}2 E- L3 Y7 Y' P0 I( n; f
}
; _& Q1 g; P3 a+ \# R9 J BYTE nSrc = pInvSort->GetItemSrc(i);- ~4 l7 p, K4 p( k! \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 c1 @7 ^' z4 K, L5 o( L; H
if (pItemElem)
& n/ K8 ^* n/ J9 l7 w& z- K {
- T" v9 J0 l$ E if (IsUsingItem(pItemElem))
# e+ k$ p4 Z7 p. { E. w, N { f. I( t: M' u6 p& a9 Y
//这个道具无法移动,跳过4 x0 ~' X9 a6 R+ Q% i& e- a) u6 d; T, `
continue;
0 L Q0 r9 D e9 S }
- |# S# d" q5 v) A) L3 R" S E+ g }else{
1 S# _$ l- v( ?& ] //空位置 不用动
* V/ D2 @7 S- X3 K continue;
( M0 ~% h7 ^9 O7 z }
3 b4 g$ O* I, r6 }( a //////////////////////////////////////////////////////////////////////////" A# b* k4 S+ G) R {1 o. q* M
//开始移动
0 K7 W; T3 A- I0 k if (nSrc == nDestPos)1 S" Q$ f6 _1 F; M
{
$ M$ N: c' x, ~& A$ g8 F7 V: q //原地不动
$ p& R$ O/ f6 y( J9 S nDestPos++;) z& H7 J9 i9 V' R4 a- h1 N
continue;
. G5 i! V. B7 h- ^. N6 S }! N) u) k) R$ L* `
pInvSort->MoveItem(i,nDestPos);
! H: c% z$ E: `9 r g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 q9 c8 O% G( y0 L; y4 W Sleep(5);# }9 p, j( S9 W' e, c! m
//Error("移动 - %d->%d",nSrc,nDestPos);
9 G# r3 m S/ B) F nDestPos++;8 |9 e/ j6 k, G( p3 V: [
}
8 s4 _; m [/ W //取第一个元素的信息
( A/ J$ ]1 E4 `# k6 ` /*/ s4 H ]2 K. N9 Q0 ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) ?- b- B3 `: Z/ ^3 x8 A
{5 S! _+ l! c4 ]) f6 L: ?
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 Y! o% Z. ~. }1 b) l# K5 o g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. v' j7 r5 p. E) y" p, d# ^ H+ a
}1 ? t( i* H( \$ L' g
*/1 q6 V. U7 P( W' N
//////////////////////////////////////////////////////////////////////////
6 ]9 U: [3 q, ?* {9 R/ Y) n break;( v; G, {7 A z. z6 L( b
}' X* F; U' G! g( @* h0 V; V
} + }; R6 T6 a; Z3 B* O6 m
}
) U3 V) W9 }; a; n2 T9 @* p7 @) N. `m_wndMenu.SetVisible(FALSE);
6 E9 T) Z: e/ s* B+ J* ]1 l. \
7 F7 [, J* K& K--------------------------------------------------------------------------------------------------------- W; B* ~2 y; o2 j$ w* X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) q$ N5 z- ^% s; i: I- |{
8 q i9 B) { g" b: g2 m' QBaseMouseCursor();* V- ]4 k2 R9 }+ x2 _( O
}$ q* e/ U" Z/ m0 Q
在其下添加:3 [- \1 e& @. v+ h0 ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 ^7 d/ ?# U0 Y4 w; h n% q
{& |' {7 n' M& t) B9 W8 x
m_wndMenu.DeleteAllMenu();4 \1 J5 T/ L2 q( D8 F3 D: ^) p& t1 P
m_wndMenu.CreateMenu(this);, O& U+ b, `1 C; _, Q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ k; R/ |5 o# S2 o- ]6 b! L7 u
' m( `0 [: @9 O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. b$ P4 X3 \# Y3 v{" M# ~7 J% f" Y! r, F9 L
//P以上级别才可以删除所有道具
, O4 F. G |# S& W2 B8 p0 o5 G1 X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 }- T$ v& B$ T}
* d' U% j% c' H" F3 u5 wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 F$ R; g, c- I/ v) ?" s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, X! z7 @# H8 E6 K \* p
m_wndMenu.SetFocus();# w7 d D8 |$ a) b% ~5 H
}
/ n' |& Z9 [3 J5 \------------------------------------------------------------------------------------------------------------$ N: M( d4 B% S
*************************
* i1 P* C8 n2 J. k3 @WndField.h文件
5 G8 h' F% s# \& Y+ a4 ?* n*************************- G2 p- l5 Z4 R9 W+ O2 s3 ~
搜索:BOOL m_bReport;- `# g& A8 ?+ R3 F
其后添加:4 K/ c, H6 T" g
CWndMenu m_wndMenu;1 A. p+ @ c2 G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 B* Z0 W# b/ L8 j7 P
其后添加:# N1 t: M7 `( r
virtual void OnRButtonUp(UINT nFlags, CPoint point);# _0 r: Q& n* H6 ~2 ]0 g+ C( B% b0 G+ s6 O
2 C4 e. D0 X7 l0 D0 R% A1 h+ i& X& E: a
|
|