|
|
源文件中_Interface文件夹下WndField.cpp文件
1 s+ ~/ ~9 u4 ]$ j+ S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' B9 o- A4 I; g2 y1 X4 n8 ` w ^% s5 t. g9 [# Z" V
struct sItem z7 I% N' D+ B& @) X! n7 \$ K) u
{
. B: P" N8 j9 _! W: JDWORD dwId;
/ l# B1 z7 r7 N- GDWORD dwKind2;
; j# G, U# g7 k0 `DWORD dwItemId;( I! K- X$ _3 b0 W9 u, A
BYTE nIndex;
+ `$ h/ w# b4 ?- a: P1 ]sItem(){
6 R4 F& Q" ]9 o: e: E4 o; S+ \9 h dwId = dwKind2 = dwItemId = nIndex = 0;
; [; ]+ e$ T& V+ n}6 U& P9 K7 H! {3 G! c. y
bool operator < (const sItem p2)
0 S, j, \5 @& j8 h) H9 K$ j8 {8 X, Y{
; O; X' M# H7 d& H if (dwKind2 == p2.dwKind2)
, v( n3 u( s2 n1 c8 G2 ~& r {
! z* ?9 L7 u( \( w( l7 n2 W return dwItemId < p2.dwItemId;
}* H1 a* y% W! h }else{
, |6 k, f- L0 _" o c _ return dwKind2 < p2.dwKind2;
3 G" Q# @. {8 A }2 o( Z2 g' {. ?% k
}
9 V& T, \4 L, {5 m" f};
$ }' D; q" |8 G& fclass CInventorySort) P+ Y) _' g8 J& ~' Y
{# p+ R, \/ M( D. P! }' i( }
public:
2 `) Q7 d% V/ R1 v* vCInventorySort()
# g8 s! Q: S4 i2 }{! `* ^' u; [" R# {
m_dwPos = 0;% T, \6 r+ o* U
}
+ p0 F( [' ~6 ~) ]! e~CInventorySort(){}
8 N3 \2 I% k! F8 k- lprivate:/ t& r7 D- }7 C
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 |& {0 ?5 }- F6 z1 u0 N( ODWORD m_dwPos;
' k* Y% i8 d4 e" _2 D3 Opublic:/ Q1 k" V0 P, {" @5 a6 Z- ]- P
void Add(BYTE nIndex)
' m8 G# L1 q2 B2 Y, X{
( n0 t& B/ g; Q' N if (m_dwPos >= MAX_INVENTORY)
+ X H& Z, f2 v) d {
* _* |, \( ~' n6 a: {8 O5 M return;
! E7 W/ t- Q4 e2 ?. Q1 n }
/ e4 _7 ]7 n) @* b7 S/ S. i m_Item[m_dwPos].nIndex = nIndex;
\9 c* m+ t4 v P m_Item[m_dwPos].dwId = m_dwPos;
6 Y) H2 e; H+ ^) J3 _' K9 p h2 Q m_dwPos++;
" f7 Y) V3 s# \5 W& d3 X& Q}
3 h7 q8 m% ^7 v4 I4 d' yBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' E' q8 ^0 T4 x8 E; p: ^9 n{
8 x1 j5 x) Y7 {9 a$ E for (int i=0;i<MAX_INVENTORY;i++)
, i; G3 P* v+ x+ ~6 r G8 x" J {; v7 g# {7 D" `- i5 W
if (m_Item.dwId == dwId)' W5 s; a, }; A
{3 J3 }8 b* s* O, K" l$ |7 q; o9 K
return m_Item.nIndex;
# N" o; h' }8 a9 A }
+ l8 h$ m( `. A) U7 N6 a }" ^( n2 m a$ `$ K
return 255;
3 Y: Q+ ?$ {& G& f' `. k% A}9 g' v# p, N6 Q5 K7 G! r! z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ t6 [0 k. S* Y7 c; f8 i- ?
{7 O u* `6 {- y' u+ N
BYTE nTmp = 0;0 p& t" n* t8 v3 \6 ~5 `7 A% T3 b
bool bDest = false,bSrc = false;: i" D4 H$ ^* p2 a# q/ E. X
for (int i=0;i<MAX_INVENTORY;i++)* H" y0 }( ]3 H7 t1 Y# ?2 ^5 {3 ?
{- T/ H$ q# @+ Q
if (dwSrcId == m_Item.dwId)
0 n1 d) \+ n y7 y* _ {
" R. u0 }! c, Z: z) s! G% D: Z //id相等 则 改变对应的dest和src
, L( y& k) P" i; s nTmp = m_Item.nIndex;! {6 G1 B5 ?) B" ?$ F/ R
m_Item.nIndex = dest;
% {( f, |" ~# M }2 x9 I7 M& o3 _& v1 ~0 ~
}+ {) J0 {) P* q# X* \1 W7 ]
//临时数据保存完毕,交换开始
5 p5 c4 Y3 k2 v1 H for (int i=0;i<MAX_INVENTORY;i++), L4 x2 E' V& K# M7 Y6 t
{
: W/ {: V3 n& H) r# } if (dest == m_Item.nIndex)2 ?+ ?$ B* L2 v: \
{
) k3 Y) U% n) J% T5 s- Y6 O //id相等 则 改变对应的dest和src$ P, I, n% H$ q+ U+ S
m_Item.nIndex = nTmp;
$ o1 P, H0 d4 V" f6 h; S [ }2 i1 X+ ^* C3 x( d0 h
}6 O# g1 r6 I, b" s2 X3 O
}
5 o: d! N0 s7 R1 @3 g! q};
( ]0 z* k% U" e; Q* ~1 T$ d-------------------------------------------------------------------------
5 Y& K5 k% Z3 z5 j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! a/ w, X3 b% }( c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; L1 A0 h+ h5 j. n; a/ C; L紧靠其上添加:
. ^6 q+ o# _7 b- x* aif( pWndBase == &m_wndMenu )
& b3 r8 A, W5 I( D1 |9 V{& X! g* Q# g1 \8 ^
switch( nID )
A7 m" n+ ^* x( J% S {
2 f3 X8 a0 R/ F2 M" w5 X case 2:" Q) H. e; A: J* K
{& M( m- z5 Z. e4 w3 r2 l" C. y0 X
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- H* v; ] h& i if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ A4 H+ \$ ], v$ ?$ f# P/ ~0 }0 a {
1 I* A, \3 C0 g0 q0 w; B break;
+ z' @$ d& E" S$ U& A* M }
6 q! U0 g6 Z( U# v( t! x! j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 R5 H3 M2 O3 E {
. Q& w, i! G' }$ [; j4 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" N* G* S; W8 R. P. U% J
if( !pItemElem )
2 [. N X+ T8 k0 f. p* Q3 S0 K continue;; M1 ?$ f/ y+ A7 }. U# R
if(pItemElem->GetExtra() > 0)- b0 s ~. A- O) l8 G
continue;
7 J1 R0 z; ] Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' l" T+ I4 g0 ^/ r, w% o1 n
continue;/ W* ?: h8 r" t, p- w
if( g_pPlayer->IsUsing( pItemElem ) )7 R8 b9 Q7 @ ^( d' Z& Q
continue;
; O, x; z. e8 S6 e" v5 u if( pItemElem->IsUndestructable() == TRUE )
0 T# a/ {& \+ ~- ]9 n v3 g' i( A {. L/ g4 D1 l7 o( T3 g) V4 p' C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 x. Y7 ^7 w; ]! l' H' t3 l7 ? continue;
/ e7 g& |) L* P/ E }. x& c A' |/ C- ], }$ [0 q* }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! H8 P8 [4 H: V- Z
}
1 J; X" S, R5 P4 R2 r2 g break;
' u* S+ g' ~4 W; m$ ]$ B7 ^ }) ~- x$ h4 `5 l7 n/ F
case 1:# a4 X0 B, R* z* |
{
2 X1 i$ b2 Y# K; k5 F //整理背包
. [* k# ]/ T! V3 \5 Q% p //////////////////////////////////////////////////////////////////////////; E7 F+ I- t% X: }7 x* A: W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 `& s0 t' M: d; }# G. B# P [" X //////////////////////////////////////////////////////////////////////////
9 r) E' k- ]8 B5 ?. l" U //////////////////////////////////////////////////////////////////////////* h2 N2 J" q& G3 J; C
CInventorySort* pInvSort = new CInventorySort;
4 L% r1 x8 _1 f5 M* ^8 s0 F vector <sItem> vItem;
) X& Z) C* k9 h& s1 L9 z9 o- y vItem.resize(MAX_INVENTORY);//初始化大小
$ j3 \) w: d: Y0 X4 M% l //////////////////////////////////////////////////////////////////////////
* F) K% c' f, _) I/ m8 z* V& ? //填充数据' G J8 _' w$ B7 I6 T, ^
for (int i=0;i<MAX_INVENTORY;i++)
( U+ W! B0 ]- h: ]0 H {3 Z3 c# x8 @$ T3 X6 Q8 s4 Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 D) H+ ^' N- w4 E, R" t if (!pItemElem)9 ^; [3 z. q* z
{+ _, `" F1 ^. X
vItem.dwKind2 = 0xffffffff;7 h* Z6 m) \% i$ n/ b1 l8 D- ]
vItem.dwItemId = 0xffffffff;0 m" \" G" M l' k! M3 N$ |9 @
vItem.nIndex = i;" S, E+ H; F0 F# m! I! k5 A
}else {: [. l0 q6 a3 n! H7 x" e
ItemProp* pProp = pItemElem->GetProp();
. f! K! E( C5 l7 i4 J" M/ D vItem.dwKind2 = pProp->dwItemKind2;- [' S' H7 w6 i1 {
vItem.dwItemId = pItemElem->m_dwItemId;
7 _0 F: l% F1 k* Q( Y' } vItem.nIndex = i;
5 D/ J0 w( N5 l/ T Y }# p* z9 D6 h1 b5 H" @2 K, p
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& G, U: {4 l* I" H
}! c& G, i9 b! N. q, r5 O8 s
//////////////////////////////////////////////////////////////////////////" i* e; \1 }2 \! ^6 y
sort(vItem.begin(),vItem.end());//排序9 c s, M3 q+ z3 j4 x% X
//////////////////////////////////////////////////////////////////////////
1 F( v" _, ~# w2 W3 C2 c //交换1 X0 t$ A+ ?" u% P( _' w. ~
for (size_t i=0;i<vItem.size();i++)
+ ~5 c. u- V" T2 J8 n4 t4 M {
# `' u: q, H0 i5 e: y& |/ N* c //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 ?0 r" e1 R3 Q
pInvSort->Add(vItem.nIndex);2 d' t4 u ^" Q3 @, P
}
+ I* r; r6 a# D BYTE nDestPos = 0;2 Z; N4 w: m5 a' A/ A2 T/ {$ `
for (int i=0;i<MAX_INVENTORY;i++)$ R5 E2 F( p# ]/ H; x( ]
{
$ W P2 E+ x1 \$ K1 f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. k; U" }! [3 N z+ ~+ S2 n
if (pItemElem)
! i Z+ A! t* ? f! @8 l6 a, g {( W3 y# Z- j9 Z
if (IsUsingItem(pItemElem)), H3 T, `, `& i: T5 u" o$ h& |& v
{9 j/ d: _* T$ u: n
//这个位置无法放# n# @* J2 k- {2 {) l; a B. D, D
nDestPos++;
* D5 d; [: g& ^0 K& | }
# n" O" Y% U! b8 n5 a7 v2 N9 ` }- l" I, u: L; m: p, ?) b# a
BYTE nSrc = pInvSort->GetItemSrc(i);) T# T: w0 E6 U* u* T
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ ?( J* q, O" Y( f# H( s9 Z. S if (pItemElem)
8 m7 q( k( Y. B' p* |6 i. z% p {
: A% P8 T3 E( g: ]2 M$ @ if (IsUsingItem(pItemElem))
- }( r7 l( [: Z+ L3 N {
* {: `% S- N1 }& H& s0 L( o9 T' Q //这个道具无法移动,跳过
1 b) x% N0 h* r" T continue;# ~" g/ B! p& C, d3 P7 D& W
}0 f+ Z0 K! m+ O+ ]# E8 X6 W. z
}else{+ i; y8 n$ U% a$ ~
//空位置 不用动9 i M1 |" G0 V
continue;$ F) B& c" E2 P8 o
}
$ u( f7 J2 o7 }: [) P: o2 E2 f9 Z //////////////////////////////////////////////////////////////////////////) H2 {' |6 q4 S% m! S
//开始移动* M9 \& |& z. t
if (nSrc == nDestPos)
! g' d' A8 A1 p' K {# z/ X# l3 R+ x: V" k
//原地不动# ?- j/ F" m" V
nDestPos++;
2 ]- u$ L; z: n7 R continue;
% w: N7 M! d, T/ q }7 A- e2 K" ~- ?$ H& u
pInvSort->MoveItem(i,nDestPos);
( X& F1 e$ A* u g_DPlay.SendMoveItem(0,nSrc,nDestPos);: j+ v$ K3 {: V& a- `
Sleep(5);7 n0 I! _6 J. C
//Error("移动 - %d->%d",nSrc,nDestPos);
4 \8 I! \7 K M# y6 } nDestPos++;5 G, R% z6 G5 n5 z4 s7 O- o O& `
}
) `* x- b$ i& _1 E //取第一个元素的信息1 ~1 ^* X; d2 X
/*
/ A' Y& e. E2 y# p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): W8 W2 ?' R. t! k" I
{: G; q' N' A/ B l
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 g4 @- H) h0 L g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ Y' Y" B0 X |; o4 e6 @) ^0 r
}
8 ?/ N5 t5 A$ I% w2 o; @) ?% g/ ` *// S4 ~( E& L3 N+ L- D7 G
//////////////////////////////////////////////////////////////////////////5 {6 R! c8 L: ?4 n2 K- {, t
break;
3 a& _. _* W6 x0 n. T0 a$ C1 K4 _ }
7 n; Q! J% T& K }
( U2 y* a5 {+ ^. d5 u: N3 d" S}
0 D0 w* j3 Y. D% y+ z# }9 Q% l. ~m_wndMenu.SetVisible(FALSE);1 O9 F+ G# D, i4 K) d% ~
# \( R4 }- v3 Z0 H( H. t6 a--------------------------------------------------------------------------------------------------------) w) f( |# G0 ^( H# m& u" `" \; z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): n. D3 d' ~, _" E
{/ S9 D% }/ I6 w. k9 c1 F
BaseMouseCursor();
; L/ j- S4 E5 U8 R+ R" n) q" Q+ n( C}
3 h$ T6 A. o; _+ E在其下添加:
4 A/ o5 {% n7 ^+ R7 Cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 B( Z: O: g/ u{
( e1 Z; D E' S' p+ {: Lm_wndMenu.DeleteAllMenu();
9 r" f: G* x: A. Y2 Mm_wndMenu.CreateMenu(this);. f& f8 r- D; W! F9 ^. B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- r& S. ~! O$ Y; p1 s
' s( |3 l+ B- t3 E% bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 X7 i6 n1 H1 \4 ?4 N
{ ^3 z7 G$ C) A6 j
//P以上级别才可以删除所有道具
, `( \% k9 }+ K5 F! a; O m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# s. J& j$ J) W# n; t0 [' H( o3 v: J
}
; X2 @, D+ { B7 f# Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 I) p/ Y h+ m9 d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
Z* n" _% M: n2 O" q2 m8 k1 `. P6 dm_wndMenu.SetFocus();: [, l5 I J( o3 b+ r
}! J2 I) F8 G" i8 N/ Z3 ?2 P
------------------------------------------------------------------------------------------------------------1 z6 c) y6 ]" j* f3 }, @3 J* k
*************************/ D6 i7 a6 m7 ]2 b8 F5 u& I
WndField.h文件
8 t' t& O" _ U7 F! W4 `' p- Y*************************2 A5 W+ l! j9 g; ~
搜索:BOOL m_bReport; L8 h8 R6 ^ |$ E6 q
其后添加:, d$ e8 l$ f1 J
CWndMenu m_wndMenu;
% t( i% G" E9 N& S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! q% x9 V5 N4 N# y: S& b
其后添加:7 v. o: f# I; |5 J5 `
virtual void OnRButtonUp(UINT nFlags, CPoint point);
( e6 K i0 r4 [2 c$ T
% ?, U# B; n f# V7 e+ h: _. Y7 D9 w8 I8 T# Q, m
|
|