|
|
源文件中_Interface文件夹下WndField.cpp文件
: s0 G: C8 d3 g7 ?; Z% ^! S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 G7 o, q9 g1 y3 c$ u) \
. D3 N3 p8 T$ R/ ], O/ f$ l f: ~struct sItem
0 W5 h& q* w& q2 p3 j{
; ^- p7 S( ^# y/ G2 T" ODWORD dwId;
8 b0 Q# m3 }, o" E. H- \DWORD dwKind2;, I9 G! I. A- K$ G' D k8 |" R% @1 O
DWORD dwItemId; q1 Y# |! X0 r/ E' c6 ] p
BYTE nIndex;
; a3 J) y( @9 o x/ j: SsItem(){
+ l$ w2 I6 m# w dwId = dwKind2 = dwItemId = nIndex = 0;
+ R2 k& C$ X; H3 C1 I}/ y2 R# O/ I& o! Z; d T
bool operator < (const sItem p2)
L' t. M; K' {2 v0 ~- f1 }/ @4 D' m{( j( @: F( L/ h. z% b. F6 A$ }8 ]
if (dwKind2 == p2.dwKind2)
& ~# p) r3 A1 f' ^# J {6 b- P4 M/ t/ d4 }1 b
return dwItemId < p2.dwItemId;' M7 a5 }9 @, B2 E
}else{
G! U! I8 H( \% }6 T8 U return dwKind2 < p2.dwKind2;: [# s; F0 b4 ? ?( Y; g9 F) b
}
@0 J$ T+ ^- `7 p1 m6 h0 i% P" r2 P}& `5 z) i! T: C! M
};* ^2 x4 G9 B- F |
class CInventorySort5 t: l! K- v. [+ a* E: a3 [# u( h' a( l; \
{
. i! Z3 I1 ?$ ^ K7 Z+ T7 i0 Apublic:
- ^& L+ b$ V* d+ ]. FCInventorySort()
, E& V$ m6 G5 l8 E+ d{
/ c: G. x4 w0 C7 ?* n( M4 o- U7 w- e m_dwPos = 0;) j+ B& f5 m: n. O; t( ]7 B, c
}. J( y7 o4 A$ V- ]( h) ~8 W% |5 M
~CInventorySort(){}
0 r$ k6 O, x6 a3 `' {7 w+ pprivate:& V/ C, M' _. S, N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* [+ f$ w- ~5 p2 P0 sDWORD m_dwPos;
6 @! ^' ~# S; X; |9 gpublic:
. @ j) c& W# O: r# mvoid Add(BYTE nIndex) e6 H# X$ c- `' h' k) v- l
{
# M2 @% G, n4 _7 q" M- V/ u! ^ if (m_dwPos >= MAX_INVENTORY)
$ ^6 g3 v0 F5 q# Q' D {0 v3 ^$ j3 t3 O7 c
return;
r8 V; K8 W' L @5 }5 ?/ J }
8 B3 R; x Q/ X; | H% l8 [* b* H m_Item[m_dwPos].nIndex = nIndex;; l3 b# w4 J# G! i+ v
m_Item[m_dwPos].dwId = m_dwPos;+ F7 r( J6 g! r/ O8 B
m_dwPos++;8 F& ~2 ?. D9 z, }) l. {" g- J# P
}* s7 Y1 p3 F' l8 w5 I: E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! V3 C+ s: ?1 T4 W% A) A; f( x
{
5 \' P3 J, N* v) i7 | for (int i=0;i<MAX_INVENTORY;i++)
/ r0 D* M& @ W {
1 a, Q& H2 D' E! H* B if (m_Item.dwId == dwId)) n6 h( M& ^$ ^1 E6 Q# N& D. o
{
. B4 Q# L2 J( V2 P1 @ return m_Item.nIndex;- i( j% ^+ n$ `9 M4 W
}# c, O/ Z0 C: {9 ] U
}
$ V8 x5 D3 b. r1 M) w2 [6 k* I5 s return 255;9 c! }4 g# p$ M+ y' L
}# B. x+ m1 a1 w. J# j* D7 S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 [8 ^+ |$ d8 t) t0 t6 Y$ }
{
0 ~6 W$ m3 v" ~( \+ m5 t6 s1 Z BYTE nTmp = 0;8 R( H' ?6 C) h' a
bool bDest = false,bSrc = false;
( }* w+ z. l3 q) R$ x% i( ] for (int i=0;i<MAX_INVENTORY;i++)
`' s; Z5 L* L& s {
4 a8 h. o, @. m$ u7 h7 h5 R if (dwSrcId == m_Item.dwId)( ?7 n4 r& c4 s# c& ?% u2 {1 t
{8 x/ H8 y# t& q% H2 u
//id相等 则 改变对应的dest和src
% l2 z' g6 @0 a6 b) S* K nTmp = m_Item.nIndex;
" E* j3 `' o* n. Q) x* m; N, K m_Item.nIndex = dest;% `6 q4 @. d" M9 o6 \
}: g. Y( F0 M: u! c R; ]2 J4 b
}. x( Z. B0 s2 V: ~4 G# B9 N
//临时数据保存完毕,交换开始
2 I2 Q- L5 w( V! b' E for (int i=0;i<MAX_INVENTORY;i++)
$ p$ A' p9 e3 ^5 ~ {9 ~5 T2 o9 {% n0 g/ H
if (dest == m_Item.nIndex)
7 E T/ e0 U3 Q U! X- B( H. x9 m {! m4 w5 N# P3 E% o7 y
//id相等 则 改变对应的dest和src0 F$ F9 e: t7 P$ {9 |) ?5 B- @
m_Item.nIndex = nTmp;; {2 h) Y8 M# X# v
}5 s& u8 j, S9 c7 ?: g9 n! X
}9 n4 g8 K) U: d& W7 P2 {, I
}
, y4 h- i9 u4 D! }7 c/ h" U};& x& x( @4 r- a; u7 ]9 b
-------------------------------------------------------------------------
( j* `+ w* j! i4 ^+ P6 x; \' L0 m, g4 @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 p. r3 x& y! X; d3 S ]. t" L
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. z% i8 m5 Q3 }4 L: @6 a6 n1 X& g; g
紧靠其上添加:. k1 C6 J& }# D- g4 ^( n! T9 U
if( pWndBase == &m_wndMenu )6 l; a0 l" A0 _, P5 y
{
; L: B* F& d, }! h% [- n1 N switch( nID )
5 Q# U% a0 `3 C9 } {1 u) o( `% s# h6 k2 {& n3 M6 |3 W2 m: a
case 2:
7 j: f0 K3 y) @) r {' ?! k! \, g& V; {
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 E3 `! V; F I% U9 ]/ x7 Q# {8 F if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 l+ S, k( D* S2 V6 z0 ~ {
6 j$ e, G: Y2 i break;
4 [, [; N5 d$ B3 T+ _3 O/ }4 C }
5 [( L. s/ `' f% ]8 Y/ P( t( S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 q% C# F* m. F V
{
! \" y. C. M- e: o$ F6 ~% D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 I! r: E! ~5 w9 {8 D9 s if( !pItemElem )
8 P4 m1 Y7 Z: A" _! y( ~5 ` continue;
6 }, ^/ J8 R" ^/ z/ V+ \ if(pItemElem->GetExtra() > 0)& |' \: ~% Q7 D6 F% E# j0 A% |
continue;8 y8 y& u5 ^0 b
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ b. `7 L/ \- m" r+ v continue;1 o/ v+ |& n6 d# V+ {
if( g_pPlayer->IsUsing( pItemElem ) )
( V7 T# `' |: ?0 r% s$ I9 Q continue;) c0 d0 A2 d) {7 I/ Y8 m
if( pItemElem->IsUndestructable() == TRUE )2 \/ v. {1 z- z b$ J& Z3 ]
{
+ Q$ M% s& w* ] g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" f: e8 P, q% `" u
continue;
W0 A1 x* g1 ~2 } }: A0 d% ]4 V' }( g% _6 L* t
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ W- w( `: k! M/ ?. D$ x: L4 }
}% n' l3 M6 V- |, _; M% G' `
break;
( B1 X$ ^* d% D }9 C! L3 C5 T+ q3 A+ l0 g; j8 j+ M
case 1:
5 J( m- @7 D. i0 B+ | {
- v$ z) W. Q& F! J* ]. K- P //整理背包
& {3 k3 @7 n/ I8 p* z //////////////////////////////////////////////////////////////////////////
j7 H, X' [3 L9 D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 B- r& g; B, w. v
//////////////////////////////////////////////////////////////////////////3 K" G. C. r% n) r& T
//////////////////////////////////////////////////////////////////////////; a' l; w; x% h/ ~
CInventorySort* pInvSort = new CInventorySort;% Z# K, k9 h+ _5 ?) Y
vector <sItem> vItem;
. V( f9 M* K8 i$ R8 D% l; y vItem.resize(MAX_INVENTORY);//初始化大小9 n: i1 c! Q" ]; T
//////////////////////////////////////////////////////////////////////////
P. g+ d) D. N) O //填充数据 p9 a, Y* L7 X. x7 L
for (int i=0;i<MAX_INVENTORY;i++)
5 w$ m1 }# V0 M* C( w8 {* x {; l; Z2 ~/ j9 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" k# z. |+ b; m, ^9 Z; z; \# F if (!pItemElem)
7 g* Q9 r9 ^" s3 t* a l% P$ p {
2 {; O: T" N: ` vItem.dwKind2 = 0xffffffff;$ e( w, T3 g, B& i; `/ m7 g
vItem.dwItemId = 0xffffffff;
5 f7 O/ V9 g; k vItem.nIndex = i;1 ?7 A2 {, Z+ b @7 r* W L
}else {! G; P& @: }9 u) |' C1 k1 S
ItemProp* pProp = pItemElem->GetProp();
) ~) G. d0 u+ L3 T, b% s$ W0 Q0 ?/ w vItem.dwKind2 = pProp->dwItemKind2;
R7 I1 Y. s' A. B8 S2 g vItem.dwItemId = pItemElem->m_dwItemId;
3 O, n* G3 ?1 A vItem.nIndex = i;( t; J" _$ [! j; w% f0 ?
}
' `6 A) k( a5 e* Z0 q( b# R //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, X/ F$ B" V1 ?2 R6 e1 h6 Z }
) I& ^; U0 ~9 ]1 j) l$ Q1 e2 _ //////////////////////////////////////////////////////////////////////////
. D* Q- w8 @) w; \# v. v sort(vItem.begin(),vItem.end());//排序. w- A# R- R; @0 E5 h# d; C
//////////////////////////////////////////////////////////////////////////) q" H0 }2 g! {
//交换
9 ^% e6 x. b* s3 Y) K, d. K for (size_t i=0;i<vItem.size();i++)
' z, e& ?5 C8 w {
+ `: v" |* L7 U& ]) w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); N& j; Q4 K" T& @
pInvSort->Add(vItem.nIndex);* n0 D0 d" w1 I
}8 q! y4 q1 `+ |" a, X4 y1 w. K
BYTE nDestPos = 0;3 P' |6 E9 b1 j# c2 z( I$ z! H
for (int i=0;i<MAX_INVENTORY;i++)
$ |) W# z0 `# M. Y9 A {
, K I+ F7 b# t: k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( b; ?) Y- H3 f! E: b if (pItemElem)( `5 ~( W* e0 {$ n8 W! h- }9 m
{. }/ R0 q z. M# a# X1 J
if (IsUsingItem(pItemElem))
" Q# m* x) J+ ]) J, l! V {
4 v" q/ }0 N0 w7 V9 j2 k //这个位置无法放
/ \5 I4 C$ H; B+ |2 O0 N3 Z nDestPos++;6 O; C/ G* a# }( |4 e% o6 M
}
4 J. @, Q" c0 s }3 v( {6 o# d& b/ u+ Q2 V# C" K
BYTE nSrc = pInvSort->GetItemSrc(i);, |. @7 g+ b: Z& Y- e/ f, }- B
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 h) y" j: @! I! M, f5 y9 |4 M2 ?0 k+ R if (pItemElem)
# W9 `/ d i' F- @$ b, S {
% {; x% T4 k( c5 ~9 c if (IsUsingItem(pItemElem))
' b* g& v& `! M' d {2 \; [. Z9 N4 S; k3 {
//这个道具无法移动,跳过
0 ?" z. U, Z: \ continue;
# N! l7 G* T& v } C' N( ~2 f7 [, k. B5 t
}else{
8 \% d7 Q# U# s2 L4 ~ //空位置 不用动6 A' T/ K9 n; V# b
continue;
' c5 _+ J9 n5 D0 r" M0 ^6 i! Q) x4 D }
! g f2 b: M% p5 w8 p //////////////////////////////////////////////////////////////////////////
# R8 k# d8 D* _2 ?6 d- r: l //开始移动# J- Q9 z' r8 d2 y& }7 |% ~
if (nSrc == nDestPos); @9 @: l- ?; r
{
5 r2 v5 N+ C+ s% L" f //原地不动2 `' D, B+ `! ?& k8 h8 c" g6 _
nDestPos++;
8 M; G$ O2 Y3 i" \1 O continue;) T, d J2 B- R, B4 }$ G$ r
}1 W4 Y& W4 E+ R
pInvSort->MoveItem(i,nDestPos);* p7 }; y0 S+ [. i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 P; t5 ~- p' _ Sleep(5);
* s: Q- m' C/ n0 D( s$ X( \9 V //Error("移动 - %d->%d",nSrc,nDestPos);
# p: n/ C1 I; B# w! B' D nDestPos++;
& x; M6 Y4 c. \! V$ r }" z* z& Q5 h, F! O
//取第一个元素的信息
! G6 d f( G: f8 r, w9 D0 R /*
7 ~+ Q, c% r. |+ ^0 ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 ]8 P! @+ R6 Z
{
4 N4 y1 s; G* O4 T# |- f Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ A( [3 L. F4 N8 y/ j+ o
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 R4 q3 }7 Y) [5 l5 |+ E
}
3 x, G/ O0 z# O" c( k% t6 c0 n */* g ^6 d& ~! F# q
//////////////////////////////////////////////////////////////////////////
1 {9 n4 y& H+ p' w; `# _ u; V break;
: r0 z; u- g& k }
3 @# s: c; T) e7 t } 4 P: Q+ K/ b6 R
}
4 k, H, U6 a* f8 bm_wndMenu.SetVisible(FALSE);
1 ]+ u3 `& \! m9 [& e! ?+ O; |
' s B2 Q* u& U0 G* l+ d--------------------------------------------------------------------------------------------------------: A6 t( C; O" L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- z; D$ W; f1 x{+ D/ r+ m! W- e: D
BaseMouseCursor();- V* w1 j. A, q
}
5 f8 A b2 C% W1 C# \8 B9 z3 |) R* H在其下添加:; O7 w. h5 j2 }+ k
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 P" W& L% f, V5 W7 t9 F{2 F% ~# D! V9 }0 s% L; A7 B9 U
m_wndMenu.DeleteAllMenu();
! F, V/ G' C' Im_wndMenu.CreateMenu(this);
% W% N: l) f# ?6 y1 o" vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; r5 R; ?; c9 \2 d
# _! H7 \3 T' r; q$ xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 h% m4 x' }) F6 t{
3 w! A+ N7 w# A3 e6 h0 W7 m! r8 U //P以上级别才可以删除所有道具1 ]4 q6 y. p* B! D! k/ l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 O+ \, r' k7 O1 p8 D}
3 m9 Y, r6 ~% |' R/ g4 y5 e! c3 Wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 B4 M. j U6 R7 x/ b9 p1 a1 s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& y. i, y" E( A8 S- o5 Sm_wndMenu.SetFocus();
% O/ C! Y8 V! f# T5 v}" Y s% U' D( y, M
------------------------------------------------------------------------------------------------------------
, U Z/ n" W# v& s7 ]*************************0 c- k: O" z/ L1 p F
WndField.h文件$ J) O6 @9 ^& O7 V9 w$ ?
*************************
; S& P& H5 g- a搜索:BOOL m_bReport;
5 i4 z8 r. z/ W( }) N6 W其后添加:
2 h0 U' L0 g4 fCWndMenu m_wndMenu;
2 g+ _3 Y( C( S! ~3 A( }4 u搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 ]# \% K+ H3 c7 M0 x7 ]5 x! q
其后添加:* x! R+ |- Z% a
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 Y/ ?8 E6 ]3 W; {! C4 p8 x; i! R
+ n, L8 b8 {6 b0 {5 s {
6 g3 R0 F, U( v3 L/ f; U' A6 G3 | |
|