|
|
源文件中_Interface文件夹下WndField.cpp文件
7 [' l2 m1 ?7 v% ]+ v1 ?/ T: X2 j: j7 i搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' `- l Q* g7 p! y% R
# e4 B) n7 n) l% E$ {struct sItem
3 B( V2 f5 \7 K) S8 E4 m( N{+ {0 o$ j3 u7 i4 ]4 d* W6 O
DWORD dwId;
3 I: ]$ o, p- S! J7 n* vDWORD dwKind2;
- \! d0 O6 o& I* bDWORD dwItemId;+ S+ \3 r, E" f4 n3 M
BYTE nIndex;: C$ ~, c9 t$ q# V/ S* U3 r( f( Q
sItem(){
: a+ j' [; N& k$ {+ r" _# W! b dwId = dwKind2 = dwItemId = nIndex = 0;! E7 G7 S# o$ x( F7 q$ {; a
}3 W7 r" [: @& o9 L, `1 {
bool operator < (const sItem p2): N j/ a4 X: ~* n. U4 E! d6 x
{6 L, n- X5 G3 ^5 A& h3 d f' P0 W/ e
if (dwKind2 == p2.dwKind2)
: O4 Z5 o" S. @( z) {$ o {! {; M( g. L; X" J; G+ D$ r
return dwItemId < p2.dwItemId;8 w' e( N. Y B! z$ v. e
}else{
9 m7 [/ Q9 r$ ?! w* t( | return dwKind2 < p2.dwKind2;
* s% O5 c7 j: i3 x# z5 B }
" v4 A8 U& A7 J$ H* p6 N}' `& D r7 U: {0 m1 @
};+ x2 P! h2 M* s1 [) ?; c
class CInventorySort
! {7 L2 G9 Z$ Q3 L{
( d M$ x% Z( x; y3 g! Gpublic:: d: N9 M3 s6 X, i/ v% d
CInventorySort()
$ y5 E* A" H9 u# F( |( L; k{
P$ F) N' M% L$ `" ^7 s8 f m_dwPos = 0;/ Z; H) w- I( f& g
}
1 V2 N: m# ]( m8 q- j/ z( C1 v~CInventorySort(){}( w' a3 ~; W" I% r* C2 k
private:
2 O/ Z2 q9 x) S# x% l6 U1 YsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; I% I+ |1 m2 y; `. ~; s
DWORD m_dwPos;
* |$ z; r2 v) _/ ~public:4 `+ t0 z/ h a" S) W9 w( \( w
void Add(BYTE nIndex)7 W1 \( D/ P- _: r
{2 s+ i3 a) O U4 k
if (m_dwPos >= MAX_INVENTORY)
& |* r" ]" y; a4 P# N. K {& g" t0 D& ~; v9 R
return;2 l5 J4 E' j# C2 f0 V
}# Y$ W) h: W* z. L" a1 n7 F
m_Item[m_dwPos].nIndex = nIndex;
/ ?# z* h" b; q" a m_Item[m_dwPos].dwId = m_dwPos;0 h) y% h) v) N
m_dwPos++;
2 `, Z# w% s$ l! P; p}' L' i! U; ~7 ?9 p* E5 k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; g) M- N- a3 g7 O' _* x$ T4 h$ j{
3 ^7 ]4 z* j1 t# \8 X! w2 o for (int i=0;i<MAX_INVENTORY;i++)
j1 m* c, x4 G( o; ` {
+ |) `) t o0 r7 {4 r if (m_Item.dwId == dwId)
3 _. l7 z1 W% W ~ t7 f {) S& T, D0 R: N) F! m1 m
return m_Item.nIndex;# R! w8 Z' B* f, {
}# B' x+ e/ S) C4 }( V
}
- \' p. Z3 J% d& V$ @9 W8 N! @ _ return 255;
- p* D: C9 m/ c9 h% y, ~! Y# {6 g}
' V. j, R u( u& v0 \% E7 V5 E! yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& K7 W& d: w& d0 E
{/ L8 p4 }6 A9 [; \, a- q; X! K" i
BYTE nTmp = 0;
' d/ p0 \ n6 J& z( z) j, M bool bDest = false,bSrc = false;$ m9 Q n/ x6 K7 J3 C7 D, I
for (int i=0;i<MAX_INVENTORY;i++)
! [, f; `7 o2 T. ~* E {
) Z3 M" |- T1 `1 y4 u4 Y if (dwSrcId == m_Item.dwId)+ L3 M! w# A- ~3 a
{
x$ U, o7 x! w/ ^5 v //id相等 则 改变对应的dest和src
! a3 @ }" g) S- |* }: @& i$ d+ x nTmp = m_Item.nIndex;
5 x$ Z! l) ^3 e+ Y m_Item.nIndex = dest;# ]' U$ _5 T, i7 T) ~2 z7 b4 h
}
x) B& a' I& G, c* O }
; s0 E* s C6 q3 d, M3 s- R //临时数据保存完毕,交换开始; x" j1 P+ ]- |9 y; o$ b
for (int i=0;i<MAX_INVENTORY;i++)
* K2 `" c9 R4 t% m) ]% } {9 w# S; c% |" |; B& d
if (dest == m_Item.nIndex)
# T) l9 v3 i4 t* t {
- D7 b* ?' |$ u* r1 h# F8 P8 K; V //id相等 则 改变对应的dest和src
5 J' p4 J) ~+ X; y. m m_Item.nIndex = nTmp;! _% |% x+ g* q5 [, }3 N, E
}* e% r) Z! |2 z$ f( E& R
}* F" x' a: {3 P9 c* p& L" S
}
5 |# q5 q% d: ^};5 Y% z& e, a- f/ N4 g4 g
-------------------------------------------------------------------------
; z8 A3 i f l1 T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" I* l% F8 Q6 w0 x9 }: u9 `& Y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 v% Z* E; }/ Y* \6 w
紧靠其上添加:
, @) N2 u6 Y4 a$ V; F8 u# Hif( pWndBase == &m_wndMenu )
% Y2 x+ { F7 V% e+ A6 V{' U8 ^' R8 i* ]( D. [ C; R0 R- P2 V
switch( nID ); u8 _( j! K: ^
{. U! C5 v& I$ N3 h0 P# ~
case 2:7 M7 C1 Z* D- r1 d4 W9 W7 i
{: G" N9 X; D( F1 r. b+ a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* t8 J: ^6 z+ i& F+ l if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* |0 r S0 [! d0 k; f& d
{& c. W! n- }: e) H, ~4 ~2 B( ^
break;) N, _; L! n. P6 ?/ J' N
}6 m3 Z e2 p- x% j, j2 e
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% U1 y7 B+ I- R& L
{
0 R+ Y8 x$ P$ P0 j. U2 h& L* q# Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: Q E# F! e* v( x5 G& i% x
if( !pItemElem )0 Q* K9 ~/ a$ d( F% H. K
continue;
) r5 r# J# q! Y# l, T+ u; ^( g if(pItemElem->GetExtra() > 0)
& l+ K x- T; \- H/ B2 F! D! C continue;
: f X8 K' p) k, H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* {4 ^. E9 l6 c* Y0 K Q+ N continue;4 z2 v; ^) \1 k! Q# }2 j( q
if( g_pPlayer->IsUsing( pItemElem ) )
% z5 m: l6 N$ @! L) P$ h4 Q continue;
, B& w$ `+ I# z/ s if( pItemElem->IsUndestructable() == TRUE )
' j: G+ b$ ]5 S4 j" Q: L( S j6 @ {
5 q) O" T6 e% t: s" ~, E, K g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( o9 M9 H6 B( e E continue;
- N% g/ Y. ]9 d }2 C, {5 y* Q& R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 D9 {% \; M7 K3 S- ~ }, p3 j' Y! m4 K9 @' @) C* [: i
break;
# u" E4 W% \1 Q3 m& y }
2 Y5 n) ?' m0 S& w( C' x/ K7 M case 1:
( [7 Z K$ ?! T. h) o s! y& ^; ^ {
9 k0 n. @7 O0 z5 _. j //整理背包
9 M; z* q3 p! h7 Z/ S: G1 A //////////////////////////////////////////////////////////////////////////
* E9 S" z3 e9 j- W: J \# l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& u' v/ u2 R4 Y% p, L2 k9 m/ K% h
//////////////////////////////////////////////////////////////////////////: Y, ^4 o2 n/ S3 S1 b0 H6 t
//////////////////////////////////////////////////////////////////////////4 j% |, W; N3 j( V
CInventorySort* pInvSort = new CInventorySort;- ]3 u& x( [. I9 O9 t3 l, q" D
vector <sItem> vItem;! y. Q* f+ H+ ]( |. k
vItem.resize(MAX_INVENTORY);//初始化大小( X. r. |4 L, m, Q1 [/ n7 O
//////////////////////////////////////////////////////////////////////////
( \, G& V. C+ R. g* }1 V$ w2 j. j$ P //填充数据
( t9 c3 z6 |7 J for (int i=0;i<MAX_INVENTORY;i++)+ o# i+ H5 L7 K, q) e8 M
{$ @2 ^. l8 `; Q3 h6 {8 m4 s% K' M: w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 \5 p/ H9 ] t% @. A
if (!pItemElem)
/ Z2 B: {3 f5 d0 u( [( G3 K {3 {% X5 e4 Z: F' L6 Y
vItem.dwKind2 = 0xffffffff;( \* \5 b6 D# A$ \3 Y1 y& Q1 i0 `& { ?
vItem.dwItemId = 0xffffffff;
, m3 s8 W1 o4 S1 H vItem.nIndex = i;
; g3 [/ l- Q7 _& O7 x! v i2 D }else {. r! q- N+ ~/ K& x* S
ItemProp* pProp = pItemElem->GetProp();4 y; ?0 q8 b }7 Y
vItem.dwKind2 = pProp->dwItemKind2;. t9 V9 ?2 ?5 G! i- R6 v i
vItem.dwItemId = pItemElem->m_dwItemId;
" D6 ~% G% z" {4 a vItem.nIndex = i;& R l9 Y' X0 T: g7 Q$ g$ P4 t( u) a
}. A' A( A6 E6 Y- G- w- U% C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 A% H/ q$ `5 R) M* U! m* E1 J
}
F% y$ g) V4 J/ K1 p) M //////////////////////////////////////////////////////////////////////////5 u4 h# G0 z9 E* Y F; f2 K
sort(vItem.begin(),vItem.end());//排序
: L2 I0 F2 k7 j& [1 p; h* Q. ]+ X3 _ //////////////////////////////////////////////////////////////////////////1 M# z$ I2 D7 M# q( H: \: e
//交换
7 j# X. T, {( U4 ~9 V$ { for (size_t i=0;i<vItem.size();i++)$ s/ B( P; O4 @" R% S
{+ y; O& r$ p6 T5 S
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
K0 I$ s" Z4 X! Z8 ]* [0 a pInvSort->Add(vItem.nIndex);
3 T" Z" v, m' [' v }% R; c/ M; T2 q a+ Y
BYTE nDestPos = 0;2 b: c7 z2 D: o4 ^7 |/ ~4 q
for (int i=0;i<MAX_INVENTORY;i++)
5 f) E3 j$ q" i; X" @ {
) t- @- [' X+ @% j: U" Z" z3 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 @) @; k% L% E. A, e$ R
if (pItemElem)
8 M1 w0 Q( `/ L& s) u6 W! M, N {* o6 b! D( v- S* J9 }
if (IsUsingItem(pItemElem))
; y9 }, _5 k* t* |- { {( ^+ j2 X9 Q8 v
//这个位置无法放
! a7 ~& e4 |$ v& g nDestPos++;
/ p" {' M; A! \ }
0 L$ \' z" ?1 `& W3 L# s }
6 M! B5 q" R# W! D6 Z BYTE nSrc = pInvSort->GetItemSrc(i);
( \& g* a3 X- L5 i7 U) S$ M1 p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, s& Q1 R% T$ l3 l
if (pItemElem)
: V4 Z+ a* `: f6 ~) i {3 s, F- }" t6 L) o' B8 S
if (IsUsingItem(pItemElem))- l! q& s3 z/ q6 M5 r
{
2 S3 _( s$ o- C8 D8 v9 n //这个道具无法移动,跳过
4 ~/ A6 c5 {, E9 U2 t; r, M continue;
' ~0 t L9 K' v }
. {) X* f1 T8 m" t, M4 }3 {8 g }else{
. ~) T, \6 \& G b" z //空位置 不用动
\- q, C* @4 F; K! o continue;' y4 p. l8 G" s2 r* @+ g% O# B q) N
}: V# h1 W- X4 U. ?8 k
//////////////////////////////////////////////////////////////////////////. Z- O/ u' _$ t
//开始移动" M/ j) P/ h! a& j# @, b1 W0 q2 C
if (nSrc == nDestPos)
6 @5 q, P# a0 d1 d. s9 } {/ F2 |; K0 x6 a7 ^' }% f1 x
//原地不动
% K% z. e+ @' u1 C: d nDestPos++;5 [5 o# X4 i, [& g6 m) n2 x
continue;
* H5 p3 A* Y9 S7 t" d$ ^) d }
2 m' ?, _. v2 ]0 Z" C7 k pInvSort->MoveItem(i,nDestPos);8 h3 `( z1 P* w! y* l
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& ?$ V8 `* p4 ~; c Sleep(5);0 F" _ l' n2 q7 y @0 S" J5 d! ]
//Error("移动 - %d->%d",nSrc,nDestPos);
% c; {* B* T8 F7 ^5 H nDestPos++;# b- f K, I9 z( a- J+ B
} v$ a: L% u7 X7 C l
//取第一个元素的信息
& ?1 {4 L8 I+ d. R: J( | R /*9 G) x6 O; L$ r( J( ], z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; c# Q+ \6 {# u5 v1 { {
# ]: m6 Z! J9 B- L2 i4 X. b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: @: I. \1 G7 |: }, e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( J$ m. r$ N9 ^2 r' @4 h8 V o& m
}
C4 D) y" D5 S9 ~ */, k: B. K1 Z7 U% o, i
//////////////////////////////////////////////////////////////////////////
- |* v% `4 u! `+ S) K5 k- s! o; k& D: @ break;
, W/ f/ b% d \1 b0 [% J7 X, d }% \- }& y) Z& M* R/ r$ O
} 5 ^9 ]+ G D1 Q" k
}
4 I6 Y, b( s8 mm_wndMenu.SetVisible(FALSE);# Y. ]: M; f8 G6 _# ]
, j; d7 e* t% r--------------------------------------------------------------------------------------------------------
: ^) U$ a& w6 I+ K% n$ n1 _" w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 B! M' |) i; B{! i- O! G- U' L5 u9 ]. ?. i% w
BaseMouseCursor();
/ Y) V( V" d+ k) b# k& t5 `}6 ]! V9 S8 w* e/ [& y' J
在其下添加:
! c8 {& K5 B. C/ q4 [ `void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" L' }6 l# X! Y+ j' E
{' D, `2 W0 z F( }& N
m_wndMenu.DeleteAllMenu();) ~! |3 U8 G/ x, c* S8 O( {
m_wndMenu.CreateMenu(this);
; u: ~, m! I8 C) P1 A2 Z7 I( Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" P+ E9 D/ A# C4 [4 X+ t* c8 ?5 F# |( b/ m, W: M& z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 W) Q, E# t! Z$ [7 B{
I2 Y/ D" }5 q //P以上级别才可以删除所有道具; m5 ~6 C# m/ h4 ` s8 O! }9 X
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) B. V6 I1 a9 J2 {$ [+ R$ O}5 n9 \, ^1 @( G1 n( S* r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ |8 E, v2 C# Q& n' l$ B) w8 y; {' C% {m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 T* R6 z2 g, x* D. s! F. Z9 om_wndMenu.SetFocus();/ B; v/ ~* S( c/ m' @
}1 ?/ s' H* m( g& o$ m
------------------------------------------------------------------------------------------------------------
! Z; U6 Z1 ~7 o; p7 O! l. X*************************
/ |. \: G) i1 o0 z$ }3 J, U% V1 AWndField.h文件
0 E" `4 p5 n* y( ]( N1 K/ w*************************
2 E( L6 ^) O/ @! B) ]# j搜索:BOOL m_bReport;* `. t; P, |3 e9 ?" g9 k& V4 h
其后添加:# e% H* B: Y. R" ?
CWndMenu m_wndMenu;
`5 \; q9 {# J- a) n k5 `& \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 p7 _( O8 j; ~6 F$ O+ y7 R+ s, {其后添加:. r5 ?! I. Y9 U2 c' z1 d
virtual void OnRButtonUp(UINT nFlags, CPoint point);
$ V, `$ C8 j8 }6 W, r9 c# b
1 T0 R: ]( {# ]5 T$ k+ o4 u) Z( k1 @
|
|