|
|
源文件中_Interface文件夹下WndField.cpp文件% o1 s( H1 m; M$ E" B7 D
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; H: [0 X3 j+ }+ S9 s$ N0 Q: B! q0 E0 L; G
struct sItem, L# B6 q3 M5 C- r5 f
{
/ o# s$ J5 J5 T6 B! R/ ]+ WDWORD dwId;. C' ^, M' J& N+ F4 \/ i4 @/ [1 U
DWORD dwKind2;2 w( K8 q; M# k/ G4 V
DWORD dwItemId;% _* z M g0 q
BYTE nIndex;
0 a8 k0 h: D* M( lsItem(){
: P8 S3 _2 Y+ V1 y2 }2 ^ dwId = dwKind2 = dwItemId = nIndex = 0;7 @" [& u( Y/ _/ y
}
1 c& a& E1 W/ I. n, pbool operator < (const sItem p2)2 ~: ~- j; U, l0 V" r
{2 D; @; x; x/ Q3 n1 ?
if (dwKind2 == p2.dwKind2)7 \# }8 b7 ], O- f8 P
{
# n3 x% @ k- s4 k! B* k O return dwItemId < p2.dwItemId;5 s0 c* }5 p0 C3 a
}else{. }5 w/ f) _/ n& K) l( ^/ z6 ~
return dwKind2 < p2.dwKind2;& D0 ?8 U& G; H
}
3 `" B3 ?, z5 H5 Z}) A8 \) o- w2 r0 [' Q+ ?
};
1 T) z1 N4 n f9 E1 T# e" aclass CInventorySort
4 G# w# Q3 _6 L( u# W{
- U5 f' |2 J* K t* Spublic:7 r) A4 y1 E" L8 C
CInventorySort()7 I& ?6 U( o7 D1 ] ^# I' N" g$ y
{
3 [/ P. \% a. M' e' u m_dwPos = 0;
; [. h! M# e! x `6 t7 g}
* v j- P" L2 s+ [8 G6 ]' H: t~CInventorySort(){}
/ } E9 {! i/ W+ Sprivate:) Z U" z8 W- }+ |/ y& ?3 _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ N; F2 \) z7 [
DWORD m_dwPos;9 c: K( g m4 x1 Y
public:
6 g3 W# q# r+ U; V- m; nvoid Add(BYTE nIndex)( {( s3 z& e! s
{2 g3 ]8 X/ w0 k/ G) _
if (m_dwPos >= MAX_INVENTORY)
7 k/ H6 [/ @. Z2 \/ w {4 p1 ]7 Q% B! L) H* c/ i
return;- [% m3 j* a7 g; A# J. s, d. y% C
}3 s3 b; I' K2 `6 V7 K* V, a
m_Item[m_dwPos].nIndex = nIndex;
+ p6 o! Z3 W3 a+ C m_Item[m_dwPos].dwId = m_dwPos;+ h1 w( s/ a0 I& i5 b; ?
m_dwPos++;
3 V' X0 z5 U) H}
- i* @3 }8 D4 [% }( X0 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; ~* X# I5 r$ Q
{0 h# G* |5 z! m8 Z
for (int i=0;i<MAX_INVENTORY;i++)
, e" ]% ~/ d, B: P1 s {
+ R+ \+ T& z" \, r5 T& [3 P if (m_Item.dwId == dwId)
J0 Z' X+ F4 P, X {# z! l7 q b( i# p
return m_Item.nIndex;
0 A+ O2 E2 J) e( V4 Z) h }
- e' o2 q- [; C: |, q2 d! g3 M }- C: u; V! w) d7 O8 @/ y/ w7 n
return 255;) r! r( o6 S6 b# F/ ]0 G
} t3 p; [ x: x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ @3 t4 Z2 |/ v: `9 K6 P% Q* U& T{; z* o2 C. U9 d) n
BYTE nTmp = 0;
8 n. c) r! O' E bool bDest = false,bSrc = false;
8 d- i% }1 T0 s$ o3 E for (int i=0;i<MAX_INVENTORY;i++)
5 f! ^, [. A. ?- ^/ e {' }' I1 @# a& [! ^# P
if (dwSrcId == m_Item.dwId)0 c5 Y& O, |# u
{
+ { m6 J" |) | //id相等 则 改变对应的dest和src1 c8 a" `( f! _/ Y0 ~8 R, t
nTmp = m_Item.nIndex;
1 ^$ V- a# j; e: f! @ m_Item.nIndex = dest;. G4 @( |& m/ D) d$ k0 i& w
}. ?' e+ N8 R+ Q' C( P' K
}( k( }% v* B- e1 f! H
//临时数据保存完毕,交换开始5 N4 m4 }/ k8 {4 O5 S/ r3 I
for (int i=0;i<MAX_INVENTORY;i++)/ ?# p* q8 s- L% [" v+ O/ z
{
0 S8 v* g5 ?, u" G$ X+ ^1 B" Z6 Z if (dest == m_Item.nIndex)
' _6 J9 Q3 ]* u* d# ]# C4 ?8 L {" ?$ K8 J, E+ K, y5 S$ } O" D" H
//id相等 则 改变对应的dest和src3 R3 `' \$ T+ j l& l: |5 f2 ?
m_Item.nIndex = nTmp;& `/ F& v. e5 {" D% O1 ^
}
x* D, \4 {9 B) N6 Q7 @ }
- z) G2 j) F. l" E/ [}) e B A; |2 V
};
+ W4 @# z( s& Q- |5 `3 J-------------------------------------------------------------------------( V }4 v. Z& M. c0 [0 [) C! d" O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 X$ h1 h5 m* X! _搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" m( X1 `1 ~& G$ v) i( N8 ]8 S6 x紧靠其上添加:
) e% {4 s5 a- i( kif( pWndBase == &m_wndMenu )# n% P# \& j/ j0 a( }# _2 `& }
{
& e, A) Y0 p6 c4 i0 G! {# t1 e switch( nID )
% y# z. }2 H! M o+ W# b( _ {; I0 n. y$ p; ?$ E
case 2:
& B- m. t; ~5 h/ a0 ~) I3 {2 J V4 M {
, X; S2 H3 m8 f( ] b- v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& b% O" `& B" [ }# P- P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ p @; q6 W/ j! c" k5 M+ S4 Q
{6 S! Q/ ~, A$ ~2 Q& S! G
break;
2 x/ z$ ^; K j7 {, T2 x }$ z$ q; F# O2 ^. n
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ P' T) g# x* I; m {
3 T+ t7 k3 m, e7 |! X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 P* I! j: ~5 u+ j- Z) i4 _
if( !pItemElem )
# g9 p/ y+ ?" `: [; [$ R1 e) @ continue;
2 S/ w5 e A: q% J if(pItemElem->GetExtra() > 0); _6 s- I( `5 U. o9 ~# x# ]0 O
continue;
/ S% p' ? X J1 X% w' x if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' {, }) v! D7 S
continue;/ M$ h3 P# T2 r8 u; c k* ]
if( g_pPlayer->IsUsing( pItemElem ) )" f6 R7 y4 U# Q
continue;. x* a" d9 C' h1 `2 Q- ^
if( pItemElem->IsUndestructable() == TRUE )1 Q8 F6 a" w$ x# b2 C/ U$ P2 X- ~
{
. Y7 M" g& A3 N/ o g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" H5 {, P* w0 R: d7 j. n
continue;
- j$ Q" r1 K+ i+ I/ O3 { }) D+ p9 C5 r) N& d& D! Z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 L7 |) _" z# C* N: O }
2 j+ L) H2 f8 Z# X8 j! i9 T break;
, {+ i# \' I' y }% G, ^# X% E6 i' f; B. H7 [
case 1:6 m- N2 }8 m% V5 B% l8 z: T
{& x) X+ M/ K; X; p4 p6 s. j
//整理背包/ W, Z5 D& F ~' Q% \6 H" v
//////////////////////////////////////////////////////////////////////////
) K& J z* C/ L9 J- D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
D/ O4 E4 f, P4 p6 U //////////////////////////////////////////////////////////////////////////6 q. F& c( X# {6 }0 u/ y8 t. A z
//////////////////////////////////////////////////////////////////////////* g6 M* W7 o8 o; `" k' z0 s0 f
CInventorySort* pInvSort = new CInventorySort;
. q6 k+ h( K2 n0 Z vector <sItem> vItem;
. T7 b$ n6 L. \ vItem.resize(MAX_INVENTORY);//初始化大小
+ g G0 G5 [3 f. t. u //////////////////////////////////////////////////////////////////////////- S4 P& c" V" m
//填充数据
/ b! x# l" O! x" N* } for (int i=0;i<MAX_INVENTORY;i++)/ H, G# b0 ~7 s: Z% i7 q% \
{; r9 D( s9 C/ H$ O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ C2 G8 K; {+ a0 R) m, J- j
if (!pItemElem)+ S; ]* h6 f1 ]2 w5 k1 ?
{
% l, c- z- f2 X* ?6 L- t vItem.dwKind2 = 0xffffffff;
: g* B; |/ E' W* x2 {/ D vItem.dwItemId = 0xffffffff;
0 N: K Z4 ~' S0 l" l vItem.nIndex = i;. W! n, y( h: n5 Q
}else {# T6 u/ @# Y# _3 |; y8 A7 M9 s3 ]
ItemProp* pProp = pItemElem->GetProp();$ h' k: T1 Y3 ?, J6 }: x) E$ M
vItem.dwKind2 = pProp->dwItemKind2;
, C4 _! k/ h& [2 ~3 K vItem.dwItemId = pItemElem->m_dwItemId;
9 s/ }( ]2 u6 Y vItem.nIndex = i;6 P0 L0 y$ w; s' O' i8 B
}1 h" u, ~( `6 D' [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 M% {: W$ ~/ v! j D/ e7 } }
6 } Z, W0 c- ?% w; g //////////////////////////////////////////////////////////////////////////: T; Z4 N; u d' ]
sort(vItem.begin(),vItem.end());//排序
1 u0 D$ V* M6 R //////////////////////////////////////////////////////////////////////////
# } E* J* b) C2 D. G1 G //交换
. r W' y8 E# m' {/ ~& d) } for (size_t i=0;i<vItem.size();i++)
d# Q g/ r0 |1 G/ l# N/ D! u {
4 j' e$ K0 J t3 T. Y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. V/ _4 J; y" ?; V, l0 f4 j
pInvSort->Add(vItem.nIndex);
% f4 u: \- N! A0 w+ i2 Y% Z }
: C. S, s7 H: g$ v BYTE nDestPos = 0;
: J4 X4 A0 K% o8 s9 T for (int i=0;i<MAX_INVENTORY;i++)( q/ j/ N7 n8 E6 k5 |, P+ `
{$ w* ]( ]. [3 ~2 L/ v4 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: w0 O) L( o* l' L
if (pItemElem)6 ?! M# q7 e O8 i3 {! [% L
{
' z' S* j" B* H) I if (IsUsingItem(pItemElem))
8 I2 {" b P, q, C4 y* {- U {0 _! c6 ~$ V# f: v
//这个位置无法放6 r% [/ \: i3 I% C* i
nDestPos++;
: O/ p& w# B+ [ }
: z/ U0 m6 V; d/ l/ k }8 a6 l. s' W7 ^# b1 `
BYTE nSrc = pInvSort->GetItemSrc(i);& Y1 j3 O& O% \9 z2 g# q/ h
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 M) J( Z6 `* Q8 F; Z if (pItemElem)
; B1 c0 Q% t' v6 R2 T0 B {
- p, b4 U( K4 [6 F8 p& C4 B% h if (IsUsingItem(pItemElem))' w3 W9 c( o, k$ {; \$ `
{
4 o; N. Z( p, f& t: J6 o //这个道具无法移动,跳过
, d) ~, D* s5 ?' E. a continue;4 H5 Y% V$ [+ Z5 r, z
}" I6 G: N* D/ _( a
}else{
. h8 s# n4 k- [9 V; @; T/ t3 H$ f$ ~ //空位置 不用动0 U; P6 x2 E9 F
continue;
! [3 N5 c/ P7 D. z* R. y* f! _ }! a- L, ?0 t. c
/////////////////////////////////////////////////////////////////////////// K. M# j5 z' w- D9 F7 x, X
//开始移动
& g" Z! i# `$ D; x- | if (nSrc == nDestPos)
W. g4 q7 k9 B# F! L1 {+ ~- @ {
9 \' m3 w- X+ H" |0 t7 ]" d: D //原地不动
- ]/ b) d2 A& f3 Q+ Q8 a& x5 | nDestPos++;, x9 K; _* o Y/ D
continue;( H+ H4 k/ g5 k b6 Q
}
& \: H# c" U0 [' J" [& s: p r$ R pInvSort->MoveItem(i,nDestPos);
, V3 t x2 n4 Z+ Y1 U, _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ S3 o9 ?7 A. N
Sleep(5);
% D- Q) G, d" F& t) h# L# _6 n: b& C& [ //Error("移动 - %d->%d",nSrc,nDestPos);$ R Q5 D2 O# O! ^5 H0 f/ s2 |1 x
nDestPos++;
4 u5 A8 F% d. T9 A8 X) ? W }+ c/ a, X# `8 e) p* M! p& R
//取第一个元素的信息5 C$ _1 W- W3 a
/*& L% h, F2 W, N$ u( L K) T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, ^9 f) \2 d+ y4 z. @ {
/ X" |$ i2 @0 z* }; ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- P9 }; [# K( f5 t5 c% I$ F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ w! E( m" z7 s2 T }+ ]. l, B9 C6 t! ]
*/
8 U9 t: z& E! P0 a( _ //////////////////////////////////////////////////////////////////////////
6 I* K% m, X( c y* E break;
% [& s. K/ v4 n( }; n# N7 d$ c }, b$ u6 t5 ^3 ~7 \0 _
} |* k6 |" q$ {/ L O
}& {9 w& [, \( q) f
m_wndMenu.SetVisible(FALSE);
# F2 M. {# p5 K2 |8 ] R. ^& S0 ]. J# F9 r/ y$ h8 F# V
--------------------------------------------------------------------------------------------------------
% S6 V5 Z4 I4 \ o+ s6 [4 a搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 @* @/ l# l( x% @$ [{. U# b7 T( J" V0 o( Z; v M" b
BaseMouseCursor();0 D: l1 o7 ]# {
}: @4 x8 Q# W3 f5 }
在其下添加:* ?$ Y( @+ [" N0 H
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) U8 N7 [2 T/ d/ N: z+ O
{' z6 O7 e0 m, w8 `) W
m_wndMenu.DeleteAllMenu(); Z1 r% x% X! A
m_wndMenu.CreateMenu(this);; q- s1 L' e B; W" z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ H# w7 @7 k$ ]
$ W' }& h3 m% }/ m) c0 g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" `# |/ k# t, g. g
{0 _/ d! ^9 E8 k" o D. L) O
//P以上级别才可以删除所有道具
+ x1 N& r( X9 t6 ^. B& H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; V& j+ c( g/ C. k}. p# G4 ^: H! D; K" v- ]& P9 T
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ ~& A& {$ b( o. z/ z3 U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. z& g$ @4 `: W/ C# \7 E
m_wndMenu.SetFocus();
0 t% |/ t2 g! E) L}( T: u/ F5 {& O( D: ~4 m% d1 D
------------------------------------------------------------------------------------------------------------
; l$ \6 H2 c* s*************************
5 l! k; ]) e# m% {9 OWndField.h文件. S3 I1 g8 _$ W4 d! Z5 U
*************************
3 s, k3 X& U- P搜索:BOOL m_bReport;
1 o+ u7 W' g4 ~& A4 J. ?: r其后添加:
3 J* C4 j; M! O7 D; h8 iCWndMenu m_wndMenu;
* J# n8 ]8 z. T+ l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, j% b( T8 K; o; J: |
其后添加:
/ u, e) W# R+ P7 M8 I3 i' i+ Avirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 [0 U& c" [; b6 K- @2 X% w. p8 T. Z: y' C9 F" ?. W
7 F' j4 v0 R; {2 _# t+ i |
|