|
|
源文件中_Interface文件夹下WndField.cpp文件
# y, o# H; {8 E1 q( b$ e$ [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 o! Q/ A4 |4 N. _; ?, h! D" W7 V _0 Z% `$ z7 N4 t& K( _
struct sItem9 Y, m9 R" {: f$ e1 S- S
{) E( S2 ?) J% g5 P3 `+ N2 V
DWORD dwId;
+ [8 ~2 ]) k5 l* s; p6 H3 iDWORD dwKind2;
1 T4 }2 i& O/ H3 e% F9 CDWORD dwItemId;! r: E8 _5 n1 R$ @% c
BYTE nIndex;
6 a& x" P/ b5 j9 Z+ o9 ~sItem(){9 o/ ]3 P0 d. q* Y1 w+ k
dwId = dwKind2 = dwItemId = nIndex = 0;3 M) j2 m" m C9 T
}/ C4 Z- c* m7 Z! M- @" p0 e! L/ D
bool operator < (const sItem p2)
( p4 l! _) p" ~- m1 X. ~1 a T{
4 S4 m. f. x T( Q G* H. A X+ B1 x if (dwKind2 == p2.dwKind2)
4 u; f9 o: K u0 |) e {# j3 ^9 h$ r- A+ k4 @2 o+ b
return dwItemId < p2.dwItemId;. |$ l! n7 P! `5 F% G
}else{
) ~* B" { y( X return dwKind2 < p2.dwKind2;) s' E/ @4 P# m( B" _$ D
}. h5 v$ e" t8 w9 v3 h
}& Q8 E. |! ]' J p8 j/ S
};
9 j) g5 X) w- p/ sclass CInventorySort) `5 {8 ]0 s$ D% u
{8 R4 @2 S; d8 d; r) [
public:
; u' c0 A+ [& h' H2 w- c; _1 T5 X+ eCInventorySort()) |( E% [& `: U) e
{7 P4 d# M7 o6 o: T" h
m_dwPos = 0;7 k+ v2 l! ]( |" F& B9 _
}
8 a1 j% P/ c' g* |/ r: P0 L~CInventorySort(){}
5 R9 |4 g) I6 Uprivate:+ c1 @9 n" h* N/ ^% }7 N. K/ K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 a; p6 E0 n9 D7 L. Q0 tDWORD m_dwPos;
" ~" d; d. p" xpublic:
) C a! d8 h, ^1 @( i( Pvoid Add(BYTE nIndex)
! m7 N$ {. }4 k% U" _! R{7 t& w8 _0 l0 d
if (m_dwPos >= MAX_INVENTORY)
' Z1 Y, c: J$ P6 z. @3 { {7 _: T. d+ G0 h4 ?3 P
return;
; ^- G+ x; l$ b- k/ x0 i4 ] }
2 I8 d3 f2 j2 p, h4 f8 j( }3 } m_Item[m_dwPos].nIndex = nIndex;
2 M# E1 M2 ^& I. A4 Y- S) n7 W/ n! u, z m_Item[m_dwPos].dwId = m_dwPos;
. U" d2 v+ m+ K' l) D m_dwPos++;
0 L" ^5 P1 I: J/ F4 U0 W) A& j}9 V; d" e. H8 a0 M4 S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ ~+ X; `# a4 W" O1 M& Z. Y; f7 B; x* L{
3 }% O# {0 G1 B% l! ` for (int i=0;i<MAX_INVENTORY;i++)
7 |- C8 h+ ~" X6 B {
# n% Q+ a \' E# U$ ^ if (m_Item.dwId == dwId)# ]- l* l7 W; Q) [+ k
{
. Y% N( C3 z3 P2 O# _ return m_Item.nIndex;5 S2 w ~% d$ z1 Z8 g/ N
}
1 R# N# ^$ H: ^1 P }
8 n; t( y0 y' ^' O7 `2 u return 255;) v- }+ T& ?% g/ m- n+ B( \
}
7 I" F. R" h w% P1 R8 s7 Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* n# y0 S- f; m4 \" L{
+ a3 ^) `% _. e0 M. e BYTE nTmp = 0;2 L% E0 Q5 x+ ?+ v+ a8 o. L+ H
bool bDest = false,bSrc = false;
6 _! p8 F5 ~( d4 d for (int i=0;i<MAX_INVENTORY;i++)
7 W0 t8 j: r- S8 y% V( l9 t( v6 j# U {
4 ~2 A8 y W- s( a) C. ?# k if (dwSrcId == m_Item.dwId). w* I6 m4 z+ t# P/ y+ \: v2 i
{. \$ L G H% k [' Q+ z1 T% S6 u/ x3 ~% o
//id相等 则 改变对应的dest和src! {, A4 O2 p5 }0 N
nTmp = m_Item.nIndex;6 ?2 J& ]( X) e8 z) q- ~* l
m_Item.nIndex = dest;! \1 L- M/ g2 ?8 x0 T, [
}# o( R* G* G" C. c( J3 I; p! J/ N
}! e a5 a/ d# P0 g" Y( U
//临时数据保存完毕,交换开始' X: j0 R) d6 E4 k+ V4 H- B
for (int i=0;i<MAX_INVENTORY;i++)4 X" @- R4 C% I* n, _2 N- i5 }( w
{
+ G# v7 g! a- Y# X9 E1 U5 n# o if (dest == m_Item.nIndex)+ m1 b6 b: y/ |/ L5 T
{
b1 d5 \- Q. Z* D) Y //id相等 则 改变对应的dest和src
! R: O% H2 X5 {) a, h) {8 L$ i4 w m_Item.nIndex = nTmp;
5 R7 { H! Q) r9 L3 ?! ?4 L& D }
% `9 ~+ d$ d) p5 |% b }
( h8 k- l A/ k W: T: m" Q0 e}
/ i0 c$ V1 ~% s$ X' f8 R7 v};
1 v) R% S8 z" U5 Q1 d-------------------------------------------------------------------------
8 v1 k+ g% u4 c& }6 r/ \2 X依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! {4 ~0 T5 S5 {7 I D# e9 S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; T) q) K, M6 s) ?
紧靠其上添加:( l2 n0 @6 I8 {: u# @8 {# B. q
if( pWndBase == &m_wndMenu )' o9 w7 [! X) j. `# C/ X
{) R' v0 q( D' p3 N3 R' v0 M( _* a
switch( nID )
+ E5 R3 G; N% ^; W( K8 l {6 H+ d: Y" H* v5 M% D1 F+ }
case 2:, o2 Q$ g2 \7 F# o. J' t% p
{( |1 t& X, ^" D! u1 b! ]
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) I6 X: W3 u1 q$ Y8 W- r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); [7 o `, x( J X- d) J; s' p
{ b4 @+ I- y& V3 |
break;" I1 D5 d0 Y% I; j
}! ~; C' O+ Y% z, H; \/ p) Y6 l
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) Q Q) a" I! g* F! `9 g
{! _" h& v" n) A O! h- v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
S$ L, {4 M$ Y4 I% U$ O* { if( !pItemElem )
0 K8 ?" `4 N& V5 n- t& I continue;
! x3 e3 S# x( M% @1 L if(pItemElem->GetExtra() > 0)
! J4 Y6 S; M6 F7 c% Z# p continue;7 N5 h( w, ]3 R6 S% }# k: v* C6 [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' A/ a" y, i) F I8 f" t
continue;
+ h3 f) P J- h5 [ if( g_pPlayer->IsUsing( pItemElem ) )
3 \) V# q! h% _0 a6 v0 K continue;' X: `& \$ _1 A/ M
if( pItemElem->IsUndestructable() == TRUE )
, \$ t' L5 {7 t) E1 \& D3 x {! x v8 z8 t: t8 F1 L% O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 e) F# l. z' `; a7 G
continue;, u3 t9 O1 ?* d# V% a* @
}$ ~. C, A, U, ?; T, \, m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" l0 f% j1 N& C2 u- ~
}/ o/ m# _' L- ?; p2 w5 i
break;5 T4 \8 B4 i+ r) }) c
}
% g& d: a: y. m( a- q3 z case 1:
% C$ v+ K* z$ D+ {! b {
, T+ O1 y& a& `4 n+ K //整理背包* T0 Z7 B8 U: Z
//////////////////////////////////////////////////////////////////////////; R9 T/ t9 x5 o; g* Q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); c f3 x' X" L4 K$ ^; T
//////////////////////////////////////////////////////////////////////////
1 d/ N/ H$ t, U //////////////////////////////////////////////////////////////////////////
4 e7 L$ { w; Z- M/ B5 T. }# F; ?' l* e CInventorySort* pInvSort = new CInventorySort;7 C; a5 n6 W4 p' w
vector <sItem> vItem;0 [( u& w1 a& ?/ w
vItem.resize(MAX_INVENTORY);//初始化大小, E( P, O% F' v) N& d1 k9 \ F
//////////////////////////////////////////////////////////////////////////
) S8 }/ g. D' G$ o( ? //填充数据0 b7 E8 H2 x0 @& j7 P6 N
for (int i=0;i<MAX_INVENTORY;i++)
4 e, f o- J9 s3 j. X {& C# u2 s6 R2 I5 `" h4 H1 P( A: V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) E" k0 u8 f: V4 {) R; a
if (!pItemElem)# G; v& e/ Y/ M8 u, `
{; ~' O) G9 |5 S" o$ ?/ Z
vItem.dwKind2 = 0xffffffff;
0 G; }/ X) X: `5 V! J0 F1 _ vItem.dwItemId = 0xffffffff;6 {% s0 B. n; W3 W* J+ Q% e% M# @
vItem.nIndex = i;7 k4 ?! Y3 g# R% k' W* C) J
}else {6 P) T0 h% j$ J9 y; N3 D2 E
ItemProp* pProp = pItemElem->GetProp();
7 c/ V5 P3 B: ? A vItem.dwKind2 = pProp->dwItemKind2;8 A) b3 r4 V3 `+ m6 e# ^! J
vItem.dwItemId = pItemElem->m_dwItemId;
1 E8 G G# M; _% Z# X vItem.nIndex = i;
% ^1 k. M+ G& p9 a: u# p }
4 b1 C- m5 |0 Z1 q0 W3 u1 J //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: _/ N. D9 v1 m# K7 L8 f
}
% ?: N) x9 d# Q //////////////////////////////////////////////////////////////////////////% \ G: i( v7 n& R, U4 ~0 P
sort(vItem.begin(),vItem.end());//排序
& _, E" J* f' |( G! x1 g, R8 g- M //////////////////////////////////////////////////////////////////////////, z& w; J) m) [& l7 ^9 t4 y- ]- U
//交换
* _8 E9 l. u3 ~: s' |; ]# _3 a9 o for (size_t i=0;i<vItem.size();i++)
& d# F; U0 u/ f8 q4 Q* @' v {! o+ m% k- F3 v* D# o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! s( l3 T# N+ A6 Y- u( x! o D7 B3 K pInvSort->Add(vItem.nIndex);% Q- i! J6 w$ t* a) l, B8 h1 G9 c7 B
}( U- A: {1 _- b9 V* W
BYTE nDestPos = 0;
; x" A& E) t% G/ G9 z- q6 l1 y& s for (int i=0;i<MAX_INVENTORY;i++)
& o6 y% K8 F6 v& g6 c* O7 i. ~ {# ]8 g5 I+ }- `7 r* h l+ u! D4 m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 `% Q0 v8 Z' g) T- r if (pItemElem)
' u3 j9 E8 p& `/ s) J Y {
# Y* e) ~3 |" ] c9 E if (IsUsingItem(pItemElem))0 P/ G4 M5 k; S8 C9 Y+ G+ Q& i
{
J3 U! R1 D5 A1 X //这个位置无法放
2 K' o0 q3 W: l nDestPos++;
) _+ W* }" Y/ C F+ Q. y. \" ^ }
! ?: c) y6 a% y }
d2 Z- O* e) |' q, @6 l BYTE nSrc = pInvSort->GetItemSrc(i);8 K8 ` F2 R6 `5 Y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 V+ ~' g; p7 A$ `( [
if (pItemElem)
$ U3 j% X P8 {2 \& c! g; F$ P+ W {
4 I3 t I" P' `; \ Y* G# ~4 n if (IsUsingItem(pItemElem))& I" t3 U+ ^2 v! K/ @2 s ]
{
1 L+ i( C5 W, F/ Z; E //这个道具无法移动,跳过/ _, B3 @1 e/ o% z; Y% F9 }: m
continue;
4 m. j- [2 Y0 H' T2 j a1 G }" T+ x) O, i( q' h4 [+ K
}else{
M" ^# W$ J5 w7 S8 y. ] //空位置 不用动 n7 \# G8 N( f( \6 x
continue;
7 c1 o" W4 R( N/ t1 R }, Y5 v4 s! ^8 z0 ?. f
//////////////////////////////////////////////////////////////////////////
* p$ @4 Q, q" N5 b+ ]( F //开始移动: z4 Q1 D, {0 M, d3 F' S, ^
if (nSrc == nDestPos)
. d7 W7 [; r6 z+ U {6 L& t) J% t" b
//原地不动
( f4 f r# }/ @ nDestPos++;4 k/ v2 ^' B$ P4 t/ G, f
continue;2 |: M) I; G) Q7 I, d& k) a" c* R6 A
}$ W6 ?: g: x$ P1 c% s: p6 H1 U, l
pInvSort->MoveItem(i,nDestPos);) M5 i/ J7 E* y% C) ]& J# Q* A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 `3 b! m- a% O, g3 k- Z( ~ Sleep(5);+ F4 I. s! J9 y; y
//Error("移动 - %d->%d",nSrc,nDestPos);. X9 e/ z6 e8 U' W/ X l9 F
nDestPos++;
0 b# L/ @7 U: l }. y6 U' }3 m* N$ x0 a2 i6 C
//取第一个元素的信息6 j' q1 Z; G, G( [7 m
/*
# O( `. Z7 d/ T7 }3 ~ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 @8 Q. o: c' {* p: E- L {# }+ g* y5 q. ^2 @, q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- i5 i$ w/ K0 G9 r( L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ j; ?6 @ y, D" v T2 B
}3 e+ p+ i% j1 O0 w5 g3 O
*/
/ q7 x( r( y3 W; a# b1 x2 t2 H" S //////////////////////////////////////////////////////////////////////////
W6 T. D% X* c8 u- N4 Z% M break;: H+ s% r! ?; C) A2 T# }
}
4 A; z2 f5 D( d% V+ ^5 T" {' f; { }
4 R9 i( |/ Q% `: p}
$ O' U/ X' S# S; b- D+ Ym_wndMenu.SetVisible(FALSE);
' A! a) t8 S+ w3 h. w( V, W5 T" }7 @; m4 Y$ m+ I
--------------------------------------------------------------------------------------------------------# ~* g9 P( N8 Z( x5 `( U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 K- b8 t! I* {, v+ H0 `7 D{
) _: b! t2 |# [) C# qBaseMouseCursor();
* H: A7 A& e% G}# l6 H0 T0 J- ]5 O1 r5 I
在其下添加:
! z( a6 [/ c, Q# wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 N: z$ ]& ^" W: o8 ]' s- C& W{
* P2 Y4 B" b( Q* p1 u3 Ym_wndMenu.DeleteAllMenu();
" z' m7 Y7 g8 Z( o4 ~7 Bm_wndMenu.CreateMenu(this);$ p }8 j1 b3 M. F: X. ?3 X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ \2 n8 r) \: `- A
6 C" f: V% X) | b' y9 E4 x* U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 [- M4 `5 C( ]- K
{
; C$ s+ I; N8 I" n0 q/ X. F //P以上级别才可以删除所有道具' M8 a* f0 g- r$ b8 U# q3 ~1 \: E
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 y( y, s5 N1 l R}
! S I8 B- I/ q' Z# q4 \% ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 Z" i* a1 U# z% i5 s# Bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ u r$ O' r3 Am_wndMenu.SetFocus();% h5 F9 p0 L7 q
}) F) n2 D% z+ w* V
------------------------------------------------------------------------------------------------------------7 j' \1 j! P: w. ^
*************************
$ d: t# O6 ^# M# l0 `' pWndField.h文件
( N! H. k0 o) Q+ g5 c*************************% O+ X) W3 j- B7 Q- V: F
搜索:BOOL m_bReport;! m& j1 b g0 O3 I% _2 Y( G
其后添加:6 I) d* P9 h$ }& T1 H! {% F
CWndMenu m_wndMenu;% M6 _& ]- N/ T! k1 J6 q. P
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# B7 g0 e3 D+ X; z l
其后添加:* o0 B) Y. s K6 t- O
virtual void OnRButtonUp(UINT nFlags, CPoint point);, @+ V c. S$ B0 m2 z7 _8 p
6 Y2 m$ \/ u9 ?" j" j
# s9 U. l) V1 G% s |
|