|
|
源文件中_Interface文件夹下WndField.cpp文件3 T3 S0 ]9 R- ]$ O! r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 e$ S0 j D" n# Q0 `+ C/ }1 A( P, c* V0 `, H
struct sItem
. |+ m* q/ C# {: K7 Q" Y{; E$ T i9 F2 _! p, ~
DWORD dwId;
9 {3 o G& I7 ]DWORD dwKind2;
i" @2 f$ k/ p2 _9 v; bDWORD dwItemId;
, H+ ~% c q6 q- |3 ~BYTE nIndex;" Q+ [. @& Z+ a/ P3 v% T
sItem(){ T% p: ?/ l; _9 h
dwId = dwKind2 = dwItemId = nIndex = 0;6 A& \% `5 r2 D# I& ]: W' e
}! H* A/ j# o5 V" o- U0 P. |
bool operator < (const sItem p2)+ V2 ^; i3 n6 y4 `+ M: u
{
8 a2 x* e: x, z" |4 W: q if (dwKind2 == p2.dwKind2)3 W. o4 N3 w4 |# |
{
& ^, j/ R$ |* H# J9 M2 D8 B return dwItemId < p2.dwItemId;
9 R+ _! X5 T8 k: f r }else{
; x2 ]' }3 I4 U D* l* ~ return dwKind2 < p2.dwKind2;
5 G7 f" _5 h3 }7 s% g0 l* n! m }1 D& }; k! }! s
}6 I, _9 h( z3 Y: u
};2 w S) O5 z0 t+ R
class CInventorySort
0 j4 c2 s( Y7 ] Q{
l+ k+ Y) l- v. D9 M! npublic:
/ M4 ^' `2 e) s$ N3 L# u& |7 ACInventorySort()
5 N! n+ `* a$ ^4 h' C# ]{
( @0 o5 X( i- R: } m_dwPos = 0;
6 I" B* y7 f5 o% N}
! r% K( x4 O/ U~CInventorySort(){}
2 _- P9 `3 E z+ S/ g! e" l0 Pprivate:
4 W* |9 G: P! |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' W; O1 ?% x( t
DWORD m_dwPos;/ O3 Q2 j" c# n5 H; _8 X, Q( e
public:; q: A( ~9 g0 c
void Add(BYTE nIndex)" K" g. {; H/ |) U7 V- G) R2 t
{
8 F3 E# Y/ O6 F( }" O* a! _ if (m_dwPos >= MAX_INVENTORY)- x* e# v8 x2 G# V
{5 K' d/ X: k7 C7 G! d
return;
7 f6 O: `5 u+ i- x }+ I6 c% `# c V3 [5 I
m_Item[m_dwPos].nIndex = nIndex;6 Y8 Q) x: N6 A% P: S
m_Item[m_dwPos].dwId = m_dwPos;
$ T* Y7 T- L' P/ ]3 P m_dwPos++;
5 A& [% ~: A; O, m}
& _; x* D4 D ~1 n& YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ A3 t% `# g) _4 m1 B8 O
{" p, L3 a7 m# g, X
for (int i=0;i<MAX_INVENTORY;i++)
' [- c' c" ^4 o. x, Y {
4 L6 F2 r4 H6 H5 \5 G% J% C+ b* s' N v if (m_Item.dwId == dwId)
5 H9 z/ U% U1 D3 o: I/ m( m% F {
8 x$ W7 i9 P9 O return m_Item.nIndex;
' d6 N. k9 ?1 S }
$ m0 q: Z1 W: j }
8 N. n; f5 J8 P/ { w/ L, m return 255;
/ s. K! O+ g3 G, L}
# X. b% Y4 Q+ D- y) p, ?+ Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 E7 q* j2 o7 q h$ y
{
( ^' A2 D0 h2 j, G; G3 K0 ? BYTE nTmp = 0;
) d0 J: G9 m% H bool bDest = false,bSrc = false;
) F% w4 h- N; S* x9 [- }2 \: R for (int i=0;i<MAX_INVENTORY;i++)
) i- k1 o" M2 i: H4 a) Z {
' p5 Y2 t4 s$ k, k. n! G# b9 L1 p if (dwSrcId == m_Item.dwId)
u t9 k4 u1 `2 U {( t9 x& {4 R! G2 L' P
//id相等 则 改变对应的dest和src! ]- [* O) h% @1 X* H
nTmp = m_Item.nIndex;" g0 S3 s9 E# l: h5 F! ^4 g( x
m_Item.nIndex = dest;
- ]5 z7 F/ J" D1 x/ b/ t+ i+ l }
! t5 c" C+ ~7 [; o8 H* @7 s/ m+ T }/ H/ p' }1 U2 V; L) _' H# v
//临时数据保存完毕,交换开始
( W# b3 e% D# `7 F) | for (int i=0;i<MAX_INVENTORY;i++)
2 f% o7 P& h: U& M+ a- S* @ {
* J$ E% A' o y T4 U if (dest == m_Item.nIndex)! d3 l7 p, o* ?, }+ E& U
{
9 V1 @1 J' U$ p$ P+ k3 W //id相等 则 改变对应的dest和src( C% @3 b6 v8 W. @; Z0 h ^
m_Item.nIndex = nTmp;7 T! ^; ]& [1 N! ^: u
}
8 ]$ I7 W4 R3 i. [! u3 ^) M5 j n" \ }
! U9 K! M, R }* c- U% I}5 _6 }3 Y% s0 w: ^! M3 R5 T* l/ s" @- S
};
* s/ }" n! h; M$ _, F2 q-------------------------------------------------------------------------
e5 R. ~. D: w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! D d" O0 f) g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# y) C5 T3 `' C# N. R
紧靠其上添加:
7 h0 ]% Z- T+ c( v2 p) {4 Oif( pWndBase == &m_wndMenu )
2 l( [3 d+ E; B4 f& N{* B/ L, @7 A0 c F! Q6 g
switch( nID )
0 N# \$ s3 ]0 k/ b3 k {" u+ W( `8 O5 i: w1 A
case 2:) j3 y, q- c5 ^3 I! D n2 T
{! a! o" V6 g! [. n# Q7 f3 |
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ q5 W% u+ l: |' s& w. M# |+ z$ H% J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. U' ]. u( @% a5 {# L" S" S2 G1 P {
* ~& Z$ g1 a* H' k( u7 N break;
; @) o0 ^4 d0 z2 s+ P5 S0 D6 A }
. @3 q% q: h' X9 s# Q+ H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* r3 ~& K/ t3 e5 L
{7 @9 |) T2 F3 K$ Y9 J1 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 v( Q: p4 m: C1 `
if( !pItemElem ) k. [) T8 G( i5 K
continue;4 |" t+ Q; r' A( d! B4 r
if(pItemElem->GetExtra() > 0)2 H: o/ B9 _+ }* I6 |
continue;
! V# m7 l( f# [ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' k# J6 q8 V7 K _1 E; @! K
continue;
" v/ y: Q @3 K1 K2 v$ Z if( g_pPlayer->IsUsing( pItemElem ) ), }, J8 j1 @5 r" ~- \
continue;
' F# l f* P. e3 V& ? if( pItemElem->IsUndestructable() == TRUE )1 ~3 _: ]6 c6 s, M" t2 h H
{0 I8 D. f" Z/ `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! R& b( v& {: i1 l0 T. v continue;
+ P/ |* p n9 w: A6 @ }
. ^6 e8 g$ e# A1 i5 Y% y. `' K g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& s: V+ f: M6 v9 i
}
7 y1 _( x8 b9 t8 D) x break;' h/ X) m4 I' v5 }4 T$ \5 A ~
} ?$ A4 p$ |% m+ \
case 1:2 t2 v) e6 d; K/ Q) i
{* _6 {: u+ J4 T' `2 \5 w$ E+ t
//整理背包8 |% j; _$ y1 ?
//////////////////////////////////////////////////////////////////////////0 E8 T* a! Q1 v: ]7 i# v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 A& [3 e( n4 E( q( K0 F
//////////////////////////////////////////////////////////////////////////
1 ~$ l, e8 `. @$ W8 F //////////////////////////////////////////////////////////////////////////
" o" r( g+ {( t$ v, P3 i! k9 Z CInventorySort* pInvSort = new CInventorySort;
, @: A0 w3 H" R. f3 g* U! l vector <sItem> vItem;2 N9 _5 L; v4 {( a. B8 z# v8 l" p( U' [
vItem.resize(MAX_INVENTORY);//初始化大小& `, ~% s! V! }0 m
//////////////////////////////////////////////////////////////////////////0 W8 a* f( J" P; I* L3 V8 E3 V
//填充数据
* U# x2 o* q- W r for (int i=0;i<MAX_INVENTORY;i++)$ }+ C6 W% P. g7 J
{. {2 _/ T$ P+ ]) g; e8 r) h' ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 e" z* i, S6 L/ Q4 A, B# D
if (!pItemElem)
~ S) d' ?; z5 F, F, X {" l4 F1 L2 b5 V) v6 Y" q O
vItem.dwKind2 = 0xffffffff;
2 ^ n7 D9 N u9 _ vItem.dwItemId = 0xffffffff;3 [* p+ o) h0 t8 Z0 \
vItem.nIndex = i;
9 ~* Y& `5 Q3 _+ [ }else {" U1 X0 W9 v) j3 @3 }8 W# n8 v* }
ItemProp* pProp = pItemElem->GetProp();
- y# o" N) D! W8 b, s4 \ vItem.dwKind2 = pProp->dwItemKind2;# T5 z' V, f# S: ]' M: m$ o
vItem.dwItemId = pItemElem->m_dwItemId;
: x# }, N& I% K1 y4 B vItem.nIndex = i;
& P$ m3 F4 o% x* Z3 r* w }
; A9 K7 ^8 k7 c! ]8 M' i% u, O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: A, z7 Y* e1 n" h5 }$ f! M$ r* E
}' n1 z4 o/ F+ n, y Q9 Y2 [
//////////////////////////////////////////////////////////////////////////
1 i4 r" A I/ m. f: O. Q' t sort(vItem.begin(),vItem.end());//排序; N* [) K+ d: ] F* j$ i
//////////////////////////////////////////////////////////////////////////; P( M2 U5 c6 ~
//交换
% E% ?! `: a6 @5 E9 E `- e for (size_t i=0;i<vItem.size();i++)/ N7 x( H$ v: H C( {
{$ B4 S8 z3 @5 z# }
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: ], E! m/ g, O( \" U% H7 j( N pInvSort->Add(vItem.nIndex);7 U1 k8 S: I5 r8 U; ]; }+ H
}* q. q* ?* n3 ^% t, g) E
BYTE nDestPos = 0;
9 [" x: A6 z- G2 ?8 I4 { for (int i=0;i<MAX_INVENTORY;i++)& A) |9 d8 t7 X7 t& K7 p5 i! }
{
3 C4 d, i8 }' S. ]. V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) K! R f* n" }/ t! V3 z if (pItemElem)
/ ~( |- O3 B6 v {
5 }, Y7 ]4 j2 \7 W' H9 ? if (IsUsingItem(pItemElem))
; q! }8 {4 B* o {1 B1 }: @4 |2 o0 I
//这个位置无法放- w( [) N; F9 M* u# j0 W
nDestPos++;" x; F- O* ]. E" v! j) c
}
. s! l) g1 l% @% L0 g! W5 y; J* D! i( V }
; u6 _+ k, S, Q- D/ w BYTE nSrc = pInvSort->GetItemSrc(i);. R, o% ^( V0 A3 b- P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* x" s1 t: Z/ x3 J; p H, {' F
if (pItemElem)
1 z0 C5 g) g# q1 |% C {* t0 y+ o0 F& R G# C
if (IsUsingItem(pItemElem))
8 h: t$ C# [& w* C! {0 o {
7 R/ w( Z/ F7 ` m) J) w% @0 n. W //这个道具无法移动,跳过3 E9 U/ v3 I" v8 Z& v$ F2 e, G
continue;+ I9 A/ X$ _: e# V7 U8 Q
}: `. T% a! `. c3 [
}else{- H9 g& P7 P. ]- c" X) c% P
//空位置 不用动 j0 Q6 r1 q3 b" h+ q
continue;
) o" q% t' J/ [3 P7 n, o }/ z+ T/ U: N# ~8 d
//////////////////////////////////////////////////////////////////////////
1 @- W+ |- @* N7 A* h //开始移动1 p+ C" |1 [, i& @+ F6 m( j F. R
if (nSrc == nDestPos)' i U o4 V( a" g+ ]0 A
{
) G* w0 @# o3 o! u //原地不动5 x4 }/ ]: s7 }7 T9 F1 F& y# m
nDestPos++;
2 t! {2 P6 ] x, m+ ~ continue;
4 U+ \: p) I/ K9 i) I) v) j }
/ F) ~2 r$ \* y+ ^4 A2 Z5 N pInvSort->MoveItem(i,nDestPos);
# I4 h) n4 e& W, a Y g_DPlay.SendMoveItem(0,nSrc,nDestPos);) g" L- n* s) j( z
Sleep(5);
4 V8 u% j' n i8 w8 ~. K& i //Error("移动 - %d->%d",nSrc,nDestPos);
+ W2 n8 r1 u' y& u nDestPos++;
! E6 C6 B" b* \% @9 ]+ Q } W; i) n) |5 h
//取第一个元素的信息! s: o, B3 Y0 [( K, d
/*
3 ^8 t# |0 G0 K% _( l; F7 Q: o% y$ H if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" r3 b) I8 P: Q$ i
{
4 f" v; P, {- C& _! g" j/ ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ g! u) F9 N3 {5 @* b4 G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- k; h' C2 ]0 q
}
. e0 y8 D) }1 y */
% ]) o: G& u- H7 g7 P3 s //////////////////////////////////////////////////////////////////////////: p' B% r+ C1 E; w
break;
+ z: M* Z5 I! a/ ] } K- U+ A% d& @( t$ v- G2 N
}
1 p% a% |2 [+ z) A' e6 z}
/ \% b- w) i, k% r3 m! N( r" M4 Cm_wndMenu.SetVisible(FALSE); c; a$ s, J5 J* H0 Y! ]
( m, T% K/ Z9 t" U9 ]: Y. i
--------------------------------------------------------------------------------------------------------" L) ]0 N e6 z7 ] z! R
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 B/ T- h8 T! i8 Q% R
{# b( P0 a3 H0 G
BaseMouseCursor();
$ l: F: r3 ~; m; A& `0 N9 y- Q4 t}
$ ?9 V& f. k1 c7 n" N6 _" P在其下添加:
" M3 Y- d8 _7 T: l3 R# b$ O' }1 Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 w! {: J3 C4 i o9 o' }4 s+ s{
0 ]1 c. A5 t" e2 }$ S1 A, Dm_wndMenu.DeleteAllMenu();
: _. q- S- ]6 C5 K7 x) l0 O. d% K. Vm_wndMenu.CreateMenu(this);8 A2 e8 L7 Z. e- n! D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) Y1 ?* d) o v
$ i# m/ L( J# t& h$ g# u' r* s1 T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 v" t/ A* p. \# r8 ^# m& B{, G1 z2 p" M) F: s, B( K# h9 v9 m
//P以上级别才可以删除所有道具
! y: r5 ^2 _. @$ [" ^! C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# ~: c$ `5 z; M$ ^6 D# @6 j ^
}
% C$ e# y( w- o5 nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ N0 c; r9 _" v) ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, f! \: A7 b- R* Vm_wndMenu.SetFocus();
) }2 S# p _6 Y4 Z' I. n3 ~) Q: A* m}
( ?. I* I+ o# E% v+ S$ Y) ]$ ?------------------------------------------------------------------------------------------------------------
/ S7 v8 X' k% q7 m5 i+ ~3 i*************************
7 C3 a. o& z4 W3 ]7 y4 y# |) H; o" xWndField.h文件
% F4 H! F6 h! C' L$ {1 M. Y& \*************************, v7 M0 C6 @) B. }; n8 h! \9 M
搜索:BOOL m_bReport;
N% m' H. P g其后添加:
5 e8 C( c' @4 b& t; MCWndMenu m_wndMenu;+ M8 k8 E4 t4 G, X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) r" y: N4 U+ q0 h' J6 H
其后添加:
8 v; M# b( I( m: C# a1 y- Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ j, l2 @' ^/ ~6 p. _. w, R: T" ?( m
) Z$ p `' S/ C4 y7 w- f
* e' j/ ~7 f" C" v' d" v& P- c/ b |
|