|
|
源文件中_Interface文件夹下WndField.cpp文件
* L. j4 w' C A& G; H! L: H. `搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# c9 v- c: N7 w( `; s5 H3 c ] ^7 j( B" S" K
struct sItem3 E" G( U* M# S- }0 Q
{
D: B: g. ~9 @9 ?( }DWORD dwId;: k, Z5 ~- ?% P5 F# ~" n9 k
DWORD dwKind2;
( l, e3 y9 M/ d% _9 x4 DDWORD dwItemId; |" k( Z& E; l$ E6 D$ I
BYTE nIndex;
9 J7 ^4 ?/ ]4 X( D7 d/ [0 LsItem(){$ J7 L4 c4 H" `. B% p1 O9 y# O" @
dwId = dwKind2 = dwItemId = nIndex = 0;
6 e0 i- y4 ~% F6 g; F7 I, j2 I% \}
. b, N, F) e# q; d4 @bool operator < (const sItem p2)
2 J# F+ G; r# g1 c{% N* v) }# q' [# v, L1 U) I7 M/ O
if (dwKind2 == p2.dwKind2)$ b1 @) u, r+ b; R5 G% ^
{8 l8 Y" \: a. \- r0 G4 D# U w
return dwItemId < p2.dwItemId;: z5 f; Z0 r- k( \0 u8 C8 O
}else{
, e4 _/ ^: a/ O6 `6 H/ I" g return dwKind2 < p2.dwKind2;
h6 \/ j3 @! h- a% ]6 C }6 E( q# }. c9 O# K9 f& m
}
% E; p$ @9 V6 e9 X2 y};+ \ K3 j2 s6 t
class CInventorySort
+ L. s! i0 u/ y# w8 J+ M{) c0 k3 _$ K2 D8 m( T/ X2 H
public:# W% c/ G# f- Q1 t1 d1 ] a3 y) W) M
CInventorySort()
" C, J) Y3 A) o; ~! A{
+ S5 O# s5 v/ _' y m_dwPos = 0;
6 p4 B1 G4 f5 \* Z+ q}/ }; ~) A, n7 b/ P
~CInventorySort(){}/ Z. `* ^- s. J: Z
private:
- m m; c' [ l3 V+ L( W. h0 |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' z F' j, j( J
DWORD m_dwPos;
) d) _) x$ l' a. w* W2 Spublic:9 y4 t' d) N( P( O0 t/ R
void Add(BYTE nIndex)
4 H0 k! {& h/ C7 b4 ]{
% Q2 c6 m$ L. D3 T5 ]! p; p. k if (m_dwPos >= MAX_INVENTORY)
, K. G m: z# G3 F! _, S {
) B: ^7 t% R4 W+ n/ E2 r return;
# w* v4 U( C3 x! |; h }& d7 {$ O* V! y U4 z$ h ]( z
m_Item[m_dwPos].nIndex = nIndex;
% T z9 G R* L8 D h3 C m_Item[m_dwPos].dwId = m_dwPos;
, H) T4 x: S# Z% ?: t0 k& C, [! F m_dwPos++;2 U; k! i4 V0 z! f
}% ]+ D" V. w! H7 v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ e% n7 T: K6 u/ L2 c T% A{
3 p3 {# j- k" j2 _& f4 h, N( q, ?, R for (int i=0;i<MAX_INVENTORY;i++)6 s& K8 [- q% |, ]' Q; v, \2 C3 Y) O+ ]
{
) H0 q( P) I) H if (m_Item.dwId == dwId)( x$ f9 q8 f% q5 ~& A5 j
{
T$ M1 |+ g9 I9 Z C return m_Item.nIndex;
' i. T6 g# x* X6 m5 t' p }
9 T( V8 [$ C. i }0 w/ w. Q6 t1 R
return 255;$ l9 X1 L) Y5 N6 F
}. y. M$ j5 z1 q, k
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& c1 `6 w" o' O) _{
7 q# F# ]3 i* | BYTE nTmp = 0;
" V7 C' l4 u$ Z bool bDest = false,bSrc = false;
3 W, O7 M/ i! J+ J2 J' ^7 i0 T( h for (int i=0;i<MAX_INVENTORY;i++)
9 i7 I, F4 \$ l9 @+ K {
2 n4 r2 B6 a6 [# g if (dwSrcId == m_Item.dwId)
, V5 P! `, E/ O4 J {- q/ r$ ]/ B1 [9 F& h7 \0 l0 M) d
//id相等 则 改变对应的dest和src
7 O& a( ` W3 _) V# Y ] nTmp = m_Item.nIndex;
9 d+ u" Y7 z8 u" B, B2 P m_Item.nIndex = dest;$ r+ V' k2 p C- K
}
, [( y( p3 `- `$ f. I+ Y, L# t' _ }% {6 g, {+ h) t7 o% R
//临时数据保存完毕,交换开始; T7 n0 d4 U) E2 U0 K
for (int i=0;i<MAX_INVENTORY;i++)
3 F$ G7 X" b& m& _: J {" ] ]" O0 n, j) j
if (dest == m_Item.nIndex)
8 i% z0 `7 M; ~7 Z( D# S0 I- E {. Z5 c- b+ n+ x" e1 T
//id相等 则 改变对应的dest和src: B' o9 m s1 Q8 c' k/ n
m_Item.nIndex = nTmp;" M) X' D4 }) a
}
- y! ~# K E8 U# |" \4 @4 { }
. d1 G+ d! l/ ~# f}( w2 R4 c- [7 b& z. h1 s0 ]
};1 }6 t4 j7 |* w5 P
-------------------------------------------------------------------------
) e( s& R1 H: M* W& G! w: L* A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), k: u; Z# @- V* |/ |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" j9 a5 |/ u# _& W5 @
紧靠其上添加: @+ i( o6 s0 ~* N6 g
if( pWndBase == &m_wndMenu )
B( H. A0 w1 J7 j( E{) E& @- _/ k$ H: b2 M) f
switch( nID )
$ i" ^* E3 `% Q% Y# Y {
@6 G) _* a) z case 2:
+ `1 [) b, q2 e; e a! { {
! \! m8 f" N8 m1 B' \: r) _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; B, e" K G0 r) k, O ]
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 i) ] p& u' s- h! q {
% ?& q4 g# v9 ?4 V/ o. i& E break;
4 m' T4 P% I! ^6 _, ]) R4 E }
+ H& ?0 V/ a( B _: h8 C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! _+ |9 r3 ~& J- |4 G
{9 E* _3 E- I' m8 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 [& j/ H- B8 I' b if( !pItemElem )
$ ~: [# G) {* i continue;1 o$ q! q9 M* T. R
if(pItemElem->GetExtra() > 0)
; v H8 a( ~4 U) w" u; d continue;6 A) a7 c) Z7 t3 s) }
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; @ m4 t. _1 d5 E4 n) @ continue;
6 j/ \% ]2 q& @+ m: k* g; p if( g_pPlayer->IsUsing( pItemElem ) )6 R) Z0 u- l8 |
continue;" c8 S4 ?/ c3 x. |5 u/ W
if( pItemElem->IsUndestructable() == TRUE )
, M0 ]8 D/ p" n2 Y+ { N {8 T) v- R) x% j# L0 O o0 |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- \' C6 k% j2 ^7 m
continue;
* W6 U8 r3 l! Y( m+ T0 I% ~ }
7 e w' ^; w | ~ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ C. R3 R3 E8 |3 O }
. E+ v4 s3 }8 p break;, {+ r" H$ H. K
}
7 [8 `& t$ s1 o/ X R2 ?, @6 B4 z! F case 1:1 ]5 ]. D) i" J7 j; c! L, F2 h: r
{+ x! d- j* l) v4 `& I
//整理背包
" i; S3 ~1 Z: [, X" K //////////////////////////////////////////////////////////////////////////* @! T0 v3 t) g% y2 L# R! i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 ^; D: z4 Q7 D' _7 h: F u* a
//////////////////////////////////////////////////////////////////////////2 Y/ I% C+ v' q
//////////////////////////////////////////////////////////////////////////7 h+ f3 n! d3 B2 k4 l0 x2 j
CInventorySort* pInvSort = new CInventorySort;
( v' z/ A% ]5 k- a/ n/ M4 x vector <sItem> vItem;# b G; P% y* }, E) `
vItem.resize(MAX_INVENTORY);//初始化大小# r$ d4 w% w4 c3 f
//////////////////////////////////////////////////////////////////////////
) z% L5 }" n' p6 y+ D5 ^8 Y7 S //填充数据
" u5 j5 t2 Y6 {+ f7 u: @- X for (int i=0;i<MAX_INVENTORY;i++)
& f6 D4 y% A" y% L9 S \! b {+ i0 G5 H. B$ w* L9 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, c% [/ J- k" n; l
if (!pItemElem)+ y1 ]# s6 ?/ u1 ?" f7 }
{
0 \5 E ^# `( e6 V8 v+ A% F, h8 Q vItem.dwKind2 = 0xffffffff;
* u% a; _# p& d$ h8 l& v vItem.dwItemId = 0xffffffff;
5 l0 o* n1 D" D- N& W! k4 y) B vItem.nIndex = i;' T- h- x7 p4 ?: O
}else {( w8 N* d6 V' S+ A5 {- B4 u) X m
ItemProp* pProp = pItemElem->GetProp();$ A T: }5 N# Q/ y
vItem.dwKind2 = pProp->dwItemKind2;
0 ~* c! S- J; K8 a' e7 p9 C vItem.dwItemId = pItemElem->m_dwItemId;
9 A( I% W' \' V* c/ S; ^ vItem.nIndex = i;$ G, r( h2 Q- L! |+ o
}& k+ D) [8 d* f" X/ u' f# W
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 H( f8 i }0 a$ S }$ T8 x2 }% r0 ?
//////////////////////////////////////////////////////////////////////////) ?. A7 ^3 j! ]8 Y R: }
sort(vItem.begin(),vItem.end());//排序
8 S: m' ~0 }! z) Q //////////////////////////////////////////////////////////////////////////8 t0 d+ ^# J, N" b
//交换0 e: k' F" Y/ t( c
for (size_t i=0;i<vItem.size();i++)
/ g& t; U' V7 ]( z: f6 `2 A {6 O p, G& u1 X9 m! o. C
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! N5 f7 z: c3 q pInvSort->Add(vItem.nIndex);! f$ I( j! e( k7 o0 E, \1 q
}
4 w5 C; b- a: t5 u( ? BYTE nDestPos = 0;
& p4 t+ r5 n7 ^' O- N6 c for (int i=0;i<MAX_INVENTORY;i++)
4 O, r3 r* g2 @3 B' c m) M {
4 M( g8 H0 r) x8 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' t9 G0 H# Y$ b+ ~6 Q K- c if (pItemElem)
! s T. Q5 o4 H: ~ {
. C3 J$ I) Y+ l6 k' b: T- t0 D if (IsUsingItem(pItemElem))
" X9 F6 T4 X7 \) E( Q- d$ D7 d {
3 F' U! |/ ~: P- o B& p: J& ] //这个位置无法放
J% d. y; S7 F3 A7 t nDestPos++;1 [) E" A/ Q0 s3 y
}
: P; C: I8 }5 o# l8 h* ?5 ? }, p$ s6 y8 M0 Q- ]; o
BYTE nSrc = pInvSort->GetItemSrc(i);8 r ^# }3 Z$ P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% k9 B: u# n; O; E% `
if (pItemElem)4 x) r- U1 i8 Y* s4 ~$ ~
{1 Y- U$ K0 m& j4 o
if (IsUsingItem(pItemElem))
; \ G# J0 p- _+ M4 h8 l4 W {
+ i3 l3 U( n+ q5 z% Q, ] //这个道具无法移动,跳过& b0 F3 Q2 _6 P) N V+ I
continue;
% W* _7 r0 c; G8 h1 ]* F }1 Z5 B& B6 H$ g% V( O
}else{
7 Q; P, T3 a- p- D! j //空位置 不用动
: l: i* y& }6 } continue;
: v- J4 h4 `: ?. w# \ }# F1 z) N2 x; H' S- G/ k9 V
//////////////////////////////////////////////////////////////////////////8 @7 Q- {: o3 j6 X6 \6 L
//开始移动" |! N4 [8 `; G- ?
if (nSrc == nDestPos)
# Y% t0 x8 N x; v {
. q e0 ~7 @1 h+ W( m, a, o( A$ X' x //原地不动 D, `. X6 k0 ?5 b0 E
nDestPos++;3 T0 P) m" `( Q* S, y
continue;' s# Y0 p$ e# m7 E; |7 w
}
1 C a5 I- M; g4 _! X pInvSort->MoveItem(i,nDestPos);
! r4 \/ `# E- i7 k g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 D5 X2 k" v+ B" I9 L% G* Y" p; S Sleep(5);
4 t3 v3 j! W3 V/ f3 b4 q- ^ //Error("移动 - %d->%d",nSrc,nDestPos);
$ I$ P! Y% x) c nDestPos++;
3 w( m+ j3 @$ D2 O. \! t M0 c }, e) S/ n( V# o) b- a) l J* G
//取第一个元素的信息
& ]5 x/ @( e5 |" q. d /*
: D4 d& S$ c5 a2 h7 ^) l! @6 {( h if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 H# \* g8 {2 I% U
{
( E* u1 n. {, n4 X7 V Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) Q+ Y( q: t; s* z: h7 V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 V9 s% a8 O% {
}! @- G$ g# L6 D% V
*/& J& W) H# _; s7 u0 P: N& o
//////////////////////////////////////////////////////////////////////////& Z n4 D& M, e" n& ?; W
break;
8 {$ e7 i( w5 F% X6 ]/ t; [ }
% U5 a) D/ E" {' g! M } 0 k1 C1 K, b4 h q7 h# P. j2 _
}% R8 v+ h1 K- @) k/ }3 H
m_wndMenu.SetVisible(FALSE);
; d- ~: n0 E$ Y9 a0 P+ V2 {( u
0 F; P& \( E2 B2 x2 r--------------------------------------------------------------------------------------------------------
" T& A* J8 i2 {& p+ ~. S搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 Y) \2 s9 h; _1 | R; g
{& a$ `3 e7 _6 G8 |+ t+ p- I
BaseMouseCursor();0 s& t+ H# X# d% c8 H& V: }( G
}
7 f; R! V1 }# N% }# S0 V- H在其下添加:
. Q% I) e3 _$ T/ g' K8 B& ^$ kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* u. Z# j5 c( S) j/ y$ U' w{
" P3 S8 s" o1 P4 S+ H; k2 qm_wndMenu.DeleteAllMenu(); M k# i1 k% r7 r. y4 R
m_wndMenu.CreateMenu(this);3 F0 z) d9 C2 f1 ?, ~3 N
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% g, x9 {1 m( A1 l( Z4 V0 t( F! { E- z; m9 j+ S" Q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* m' N8 r0 [' I! [& c/ L
{/ k, l; h( Z# R0 H
//P以上级别才可以删除所有道具0 n& S8 d5 E/ Z/ k' n
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: b9 R0 i g0 a+ ~$ I/ l}
9 J3 b- X t$ R" T6 Z9 p& \m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ t$ i* r' x) R* Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ A. u) W5 _7 ~5 A
m_wndMenu.SetFocus();
+ b2 m+ m( `) U4 Z1 d# j( O A8 ^1 v}- [' k+ B, d/ e1 K! p% _/ s* P
------------------------------------------------------------------------------------------------------------
7 q- R8 w& E, U/ U) `+ d0 P1 E*************************
7 D! p0 P8 z' P/ m' _WndField.h文件
$ w3 H) ]' E+ H*************************7 z: t) K* E1 f, M, B" S
搜索:BOOL m_bReport;
; S) R) Q7 @" X; ~$ V: J其后添加:6 W; u& D" T# | k; Q
CWndMenu m_wndMenu;7 y2 O: J4 T+ W' l# q4 F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" I* A1 K9 c1 _; Z9 ]. T( [# m3 ?/ x其后添加:
& x1 _6 q3 ]( p$ tvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ H2 T& s2 q0 a" _9 \# t% I
# R+ X; P$ d+ g9 e$ F
5 m* r! N6 A) b: g# ]! A |
|