|
|
源文件中_Interface文件夹下WndField.cpp文件' {, y. S' t& K+ z- w' g9 R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% U1 g3 h# E* |- R1 ` e2 |1 c8 @ M
. `$ i! k7 n* Ostruct sItem3 x) h. G0 p# _4 \& g8 S% \* B
{
2 Z/ J, O0 T* O. L& N) E4 dDWORD dwId;0 V) h3 V% n+ H }( l1 g9 D% M+ a/ o: G
DWORD dwKind2;1 a/ x4 `; ]0 k% I
DWORD dwItemId;9 R" `3 I$ o+ k5 n* h6 Y, Z
BYTE nIndex;, O4 o1 w! P# ^6 t6 `6 u
sItem(){- ?0 @. T3 I' T9 u" c3 E! d
dwId = dwKind2 = dwItemId = nIndex = 0;- G2 \1 w+ q0 X- P4 m# e$ i. O: y
}, L: |8 M( Q' S! T
bool operator < (const sItem p2)& \9 j/ n5 D7 A C
{: @" W% b7 v% |' T8 A- I2 Z8 H
if (dwKind2 == p2.dwKind2)
) |' J- @; |" H0 l- t1 M2 D9 f {* K A( B" P6 A; H1 F( E
return dwItemId < p2.dwItemId;
! ? f8 F/ n7 x; I9 X }else{
, x, b( ~6 }" \" p return dwKind2 < p2.dwKind2;
3 ?1 l6 Z: m8 h8 `( A7 ~$ y0 q& F% | }
6 A' H) b2 a0 d. o7 V8 z8 y( Y( e( n}
9 w3 `4 V$ o/ U% u- r: r};4 e, a+ T! l6 D, I
class CInventorySort
- S: P" G% V. b1 k; q8 T{
' e( E3 \" j$ @# Z. v- ypublic:- e( e% |. x/ D) S6 l/ w9 k2 b
CInventorySort()( Y) ^! E% q& x9 |
{
0 ^/ v0 C0 m7 B# O' N m_dwPos = 0;4 n. P5 S* E1 i& i' L, |# V; T
}5 y6 y: R( c; c+ Q1 ]+ u6 Z
~CInventorySort(){}
6 A4 A+ T4 K2 wprivate:: d$ H% k5 m# N: o
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; e6 E! A: _. J2 X& {1 n/ D1 P$ wDWORD m_dwPos;# B6 w, [+ p8 d6 n, T
public:
# G- F, K$ I" r; w+ r0 O# |void Add(BYTE nIndex)
f9 L( `8 j/ I1 U{! P/ U& }) x' D4 z( P
if (m_dwPos >= MAX_INVENTORY)4 ^4 X: L. r8 H: W% `* T
{
2 U/ H) g8 E) Z" Q$ [: _ return;( D) [) C9 X. p' x; R2 G
}
8 H& d' [5 t& a8 J m_Item[m_dwPos].nIndex = nIndex;
6 L; J* `5 |, s2 l$ b m_Item[m_dwPos].dwId = m_dwPos;
+ y! e* D0 B& U8 k m_dwPos++;( d' D$ I- Q! N. n$ D. |9 R# q
}
2 E: g Q; N9 {; RBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 \, n! A) k5 v
{
) O) [+ F$ f% D) D! j for (int i=0;i<MAX_INVENTORY;i++)8 Y. n& c1 n6 s+ s8 ?
{
3 h g8 c/ f j0 T) z if (m_Item.dwId == dwId)
; ^! l9 [$ E% v8 T! N: T {
4 O/ h- B" O" d# T% P return m_Item.nIndex;5 Q$ i$ g% U) N6 P
}& K; ~2 `& Y( y1 i
}! G& N) u- v+ y8 V4 R+ m3 a
return 255;
7 ?0 H7 R0 ]- i1 z6 _9 ~! ]% K}' I# x# b& y6 L8 d- [
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* L. z$ Z( q' h i" z' l4 O{
) f0 l8 I" U: \" v- K BYTE nTmp = 0;$ ]7 g( i; H2 p3 y' J
bool bDest = false,bSrc = false;
% A9 a* C# {! ? for (int i=0;i<MAX_INVENTORY;i++)( V5 q8 ?' R% E
{
. U" Y2 A2 \2 h6 Y2 A, F if (dwSrcId == m_Item.dwId)
6 w2 k7 D; _$ a k b {8 q2 L% Q& B1 w; B, m& O- Y( E
//id相等 则 改变对应的dest和src. S1 T: h# D3 B2 `+ n3 {: X
nTmp = m_Item.nIndex;
( T4 J# a1 ]* M m_Item.nIndex = dest;
d4 R) c6 P0 H }
* k! U: @+ f; r }
U. U$ E' p9 J% P( R+ w' S //临时数据保存完毕,交换开始
, K3 D% M x: O: U, ?+ [+ J9 X8 h for (int i=0;i<MAX_INVENTORY;i++)
1 w* [& O6 |" _# U. e1 a) f {
4 H- C& _/ E9 _ if (dest == m_Item.nIndex)
, E7 B0 q+ x- D$ F! c5 _ {
) N5 ?) i% U$ N+ ^3 c //id相等 则 改变对应的dest和src& z' B* F# I$ N1 Z' Y) y! F4 Z8 M
m_Item.nIndex = nTmp;" ^4 K5 Q; F/ \0 g
}) G7 v: V, T" z, c. y* i) t( {1 A
}
0 A! f, Q5 y$ b" P}& _4 T' w o( [- `
};/ P- D4 |+ A: C7 p) N
-------------------------------------------------------------------------& ^: m! D2 l: m7 q& R9 e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( X. [' e: t+ P" |( O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 e. H% y, n2 Y5 U
紧靠其上添加:- J5 R ?5 ?) O# |1 S% I( S
if( pWndBase == &m_wndMenu )
; o$ F0 ], y: i( m+ O' B7 W$ d{( s( ?. d% W! }& X( h% k B( M
switch( nID )# `& j7 q/ x2 Z
{
: l5 Z5 ]3 j- e* }5 H6 \+ I case 2:
) |9 O( `- [; `! t- ?0 l# z3 P; ?( k {
# w9 U, o5 R0 J7 U3 ?# D8 ~/ p$ p: d" E //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 A3 {: ]% k. p t. s' E8 l: a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& e. H* h/ k, r! F
{
P+ G% m1 _9 v! k break;
! r% ^! J* N2 D, R8 R3 L7 M$ X }5 b4 Y" Z( k: a; M0 z* Z0 C
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 |% V9 w; u# \) S! H {5 m" Z3 s; X3 s% C" ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 e T$ q; h( _# Z- T
if( !pItemElem )
( M U; d( P# J* M continue;
% U0 z0 j. y' A& q5 p: o if(pItemElem->GetExtra() > 0)4 A1 {: }' u( i0 `) Y6 A
continue;4 T& {' q- L& I) [3 Y) }* ?
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % O- i B1 s% W( D) ~4 Z+ n
continue;$ n5 q7 y$ B. w( H$ E3 U: X, U
if( g_pPlayer->IsUsing( pItemElem ) )
, r: G( m4 s& I, d z continue;
- y# a" `6 C" g5 T if( pItemElem->IsUndestructable() == TRUE )
! z5 e3 j+ s( k1 G4 r- f1 }; r. W+ ^ {8 @ @/ a& O) Y. d q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. t6 Q8 s4 z) ^' B& k
continue;7 E' O: D+ t( r: q
}
0 \3 J2 m. j; X, W+ T/ R; r g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" C* g3 y1 x9 u- X' C
}
, a" h+ y! {- @2 ~- x$ w; ]9 ~ break;
5 N* C. b/ T9 `2 G7 H3 P- J }# F* ?0 a' A3 N
case 1:+ e% V9 T( H* k) m
{7 v/ ^) B0 o& I0 n5 W. X# F% R( f
//整理背包
" d, k0 U1 t7 p4 P6 H6 [ //////////////////////////////////////////////////////////////////////////1 {1 j' m/ R$ N! ]1 R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- ]( N3 d& E; C //////////////////////////////////////////////////////////////////////////
( x1 e W# D; D6 g //////////////////////////////////////////////////////////////////////////3 t9 G& \' q# T! j
CInventorySort* pInvSort = new CInventorySort;1 f) M1 i2 X% K2 d$ g
vector <sItem> vItem;4 Q! O4 m& Z) v! Y- Y
vItem.resize(MAX_INVENTORY);//初始化大小2 x: n1 U4 Z1 S: c2 p4 o
//////////////////////////////////////////////////////////////////////////
& B/ ^' s1 W4 J5 n2 z* } //填充数据7 r: I; u5 Q/ |( U. M D! l
for (int i=0;i<MAX_INVENTORY;i++)
2 X0 n, N) H8 I$ k {& l* [& ~# m; s5 }/ Z: _9 B& O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& ^ [9 D% T) i) I
if (!pItemElem)( e1 s0 O: j' n0 W
{
( c# h3 T: O: L" Y5 R# m vItem.dwKind2 = 0xffffffff;" s( g/ }7 V7 P _$ G8 Z
vItem.dwItemId = 0xffffffff;/ V6 b" p! M+ z3 c
vItem.nIndex = i;
# l& j" E! |: b: ?& ? }else {
' m3 N3 l5 X0 P9 z, f) @) D( H ItemProp* pProp = pItemElem->GetProp();
1 w% f. x9 ^ {6 C5 Y& Y" W. n$ V vItem.dwKind2 = pProp->dwItemKind2;
/ g. m( _; u2 o9 G vItem.dwItemId = pItemElem->m_dwItemId;: }3 q; y5 ?+ ^" s& @& @! N0 d
vItem.nIndex = i;' b5 N+ M# p$ S- ]) k( _' |
}: v" }: H' U, g* [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" [! M1 I* ?$ A
}. ?) @0 s) Z ~% {( a/ Q4 S
//////////////////////////////////////////////////////////////////////////
$ P6 M& e ~, S3 I sort(vItem.begin(),vItem.end());//排序
4 U2 }1 z7 h* v: f, u! i //////////////////////////////////////////////////////////////////////////
# t3 F, m/ B7 t( K //交换
# U& q0 b! z6 m) O R! S, ~, K: c for (size_t i=0;i<vItem.size();i++)7 l+ s1 f/ `) ]7 z# w4 \7 `$ @' Y
{( I' h; \( v% `5 S3 F0 P# g) I
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! I2 x+ d1 @3 i% `/ Q
pInvSort->Add(vItem.nIndex);) c7 W7 Z! n7 e1 Y
}
& ^2 C/ b3 w* [# h9 t BYTE nDestPos = 0;
5 g) u( z7 e7 h for (int i=0;i<MAX_INVENTORY;i++)! h7 e7 S' K3 u
{+ _. _; z3 ?% d8 @1 w' y* T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# L4 M; g/ {6 q8 Y8 [3 m4 x if (pItemElem), [- a$ b' H0 H8 s/ A
{& U( `7 ^: \$ L: B: \; t
if (IsUsingItem(pItemElem))
0 F* J; v4 T, e {
& l) W3 S6 {; e/ E" ^" h# [ //这个位置无法放" P3 ]) L) u% L0 s o
nDestPos++;: E) P+ b& \. s( J# f
}( q& |' D/ o- t# t, T4 k4 d9 O/ n
}2 u- E0 k; M- J* I: Y
BYTE nSrc = pInvSort->GetItemSrc(i);
( _4 q, o5 J7 Q }& [. H0 Q1 F pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& P* W/ _2 ^6 ^* d& P
if (pItemElem)
+ @1 w+ l* o2 _& Q4 l {0 S# F) ?& h; V' I
if (IsUsingItem(pItemElem))
6 \" i0 ~ Q: M2 }' A( o: T {- y( R& Y w+ I. ~* h0 z& ]& x! k
//这个道具无法移动,跳过) |$ p; Z* J; [" `0 ~/ z! ~
continue;
3 z/ \7 t' Z f. C% |: f9 N }2 C' N; D6 k9 H6 R3 D6 r3 y6 L# T
}else{+ S& D, G9 ?& x6 f7 q
//空位置 不用动1 g7 H+ i% V ~5 `9 C; n
continue;( _1 }& U$ T2 k+ b
}( O1 m$ R3 f, K
//////////////////////////////////////////////////////////////////////////
8 s: l7 d2 a2 o- ^5 @ //开始移动) G7 n" i: w) g& z
if (nSrc == nDestPos)
5 t; F% A' K3 A' {9 d {/ u$ p4 Z; v9 n: m4 p
//原地不动
1 j1 J. [5 z: K nDestPos++;
8 G1 S5 T6 ?3 a+ A7 [ S" V$ V8 [2 R4 d continue;
; x$ `" @, O' [ }
) r$ l( U$ l. ?" u pInvSort->MoveItem(i,nDestPos);) y$ x3 _- H* E: ?- P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 K" i, j. U3 w) ?9 i" Q4 N' b
Sleep(5);3 C# c" O, {# ~+ z
//Error("移动 - %d->%d",nSrc,nDestPos);
9 S: {$ U) m) L7 O8 _- Y! V3 m$ y nDestPos++;
" l- `) D9 w+ M2 b7 j }
3 R2 c0 r# l+ X/ \6 n6 g0 }4 p' S //取第一个元素的信息
+ o) I+ h8 h; _$ J /*
$ ^9 f \/ D+ x+ m( \% J) c if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 i1 q9 e0 f$ u8 r {
/ R3 Y0 c+ v& d7 ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* |& L* }" R3 M
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# G# E2 n- M S( j: n
}7 q8 P# i+ K; m" T/ P
*/
; ]2 ^) a1 K0 j) i1 E- c //////////////////////////////////////////////////////////////////////////
3 \' r# t/ z9 v7 O" A break;
/ a, g/ q, E3 U }, ~& k2 k* X: P2 v+ p
}
; y4 n1 R; \% G P0 Z: f+ v8 H6 g}
; k4 @+ ]: u& C. q/ L4 F+ Xm_wndMenu.SetVisible(FALSE);1 A2 N7 e- E) c0 w2 d7 B7 B
8 K' r6 y" t6 Y3 x4 C) h" l
--------------------------------------------------------------------------------------------------------, d# Y# a Z+ d) H
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& b: P# [( a( V3 ~/ J8 e5 W
{* ~" ?" R" P; z3 ?# N& D1 l( ^, Y
BaseMouseCursor();* w, w" K$ X6 x' F
}
0 D& r( @- i: H. O在其下添加:
! k) W# I. C! q1 N$ ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ f. ?" ]( D" s4 e3 _5 T9 a
{3 P+ K5 X7 A* _( c/ P. R
m_wndMenu.DeleteAllMenu();
6 a" u4 C+ R- z( ?8 A: [" Zm_wndMenu.CreateMenu(this);0 z1 J0 n1 ~& x4 b1 B6 _! a) m2 Y4 C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! Z; | y0 X6 W' J9 R, D* s
3 n( R! m3 h# g: M. ^" N! ^) N5 c. Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ Y1 m# W4 S3 [
{8 ?/ }: d& A' E i; T& v& y2 e0 t
//P以上级别才可以删除所有道具
8 p9 H6 b' ^# H) j* J$ Q( O: t0 ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, d! J# O4 |$ l( ?7 u
}
2 g$ d' ^; Q( S4 c! E/ ~- ^m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% L% v. L* Y' M8 }! p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );9 U1 I: ] I. ]. U' X/ `
m_wndMenu.SetFocus();
' M+ D$ Q. z$ ^6 N}( H8 i" y4 T0 i# p2 y
------------------------------------------------------------------------------------------------------------- V" ]6 u- H3 ]' O
*************************- X+ g( d/ ^3 [. G4 K
WndField.h文件
9 ] }3 w* j0 s& V; f3 ~4 @$ S- `*************************
0 n9 b; N2 ^( M" M9 f2 h0 q搜索:BOOL m_bReport;
# \6 H/ e1 e" b7 n7 V; d其后添加:/ Y! C8 Q+ {- J0 M7 @
CWndMenu m_wndMenu;6 T( ?- [) ^0 k4 s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( Y4 a$ m) ~9 J% v6 A
其后添加:" b. j' j5 }; W7 f
virtual void OnRButtonUp(UINT nFlags, CPoint point);
" z; p5 u$ D# F0 S# x/ ~% J' R
* ^5 L( `* v+ {: S c- ?3 _- R+ `2 ]- a# J. I& g0 x& k. k
|
|