|
|
源文件中_Interface文件夹下WndField.cpp文件
8 z" g6 t- K" t2 l! t( L, ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; e% w( k5 N" u+ A9 l) L" Z
% L i0 m: s1 Gstruct sItem
1 p3 g G; T8 i5 ^{
) d* o, X! R* y- GDWORD dwId;
: |; |/ h) U# h" ^' ~DWORD dwKind2;& Q- U& @( s& H/ L
DWORD dwItemId;. V0 e( s1 P/ t
BYTE nIndex;
/ n- a F$ V W, L' R; W3 bsItem(){, n0 a" [+ z, e# y
dwId = dwKind2 = dwItemId = nIndex = 0;
, _- O+ q, }" N0 L3 M% {# E4 f0 Y}
, |8 v( A) | ^) [, n D) B2 Hbool operator < (const sItem p2)% V u5 i2 y/ c, ~
{2 A" f5 {& X( u, T& c: j
if (dwKind2 == p2.dwKind2)
/ F7 _6 n5 }/ c. K9 b" k% c+ r {3 q+ T' r! |8 E- C) A, r
return dwItemId < p2.dwItemId;. J% O2 c, K! h4 h3 U6 I, S
}else{* B2 B+ T+ j8 Z
return dwKind2 < p2.dwKind2;
1 }/ l+ A( r% { }
# b1 t" _0 l$ ]! F8 E# T}
: w3 h6 _6 T! Z% A9 ^' A2 S};
1 b$ j F: h' o9 e1 r6 Nclass CInventorySort$ O$ a- {/ {9 f; ?1 b% o2 C- C
{
2 `5 {4 c q" }& Rpublic:
% y3 ~9 \; K, @3 c! J- JCInventorySort()" n, b+ x. R! e) t2 F% V
{# U0 z5 `+ U3 v# x9 g# {. ~
m_dwPos = 0;) L# f# F% V- v* D+ W" p' Q* Z
}
; [' v2 X% X) J7 Q~CInventorySort(){}
! L, V' h; e7 O, Aprivate:
$ c7 y) B# q2 M' RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# S8 K+ A8 K0 l' i# x
DWORD m_dwPos;$ u4 z! l* h0 a. r- C
public:/ Q7 P* n: C. S. N
void Add(BYTE nIndex)' C. F# f9 v! P; _: [! G9 T9 \
{
- j' i' @/ [' Z% a4 c if (m_dwPos >= MAX_INVENTORY)6 C2 I3 ^2 c" b) `2 ?
{) D- N( w* i9 x/ \+ @3 j( u
return;5 ?' D* S' f% U. F' g1 \0 {( V
} @9 s1 k! N+ V& o
m_Item[m_dwPos].nIndex = nIndex;
, Q- N& Z! O9 x6 n7 [4 h$ P m_Item[m_dwPos].dwId = m_dwPos;5 U) h' s4 M p, b
m_dwPos++;6 Z7 }9 L2 t# ?7 H d
}; p: L, J" b$ m; C' F N9 S9 a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! r0 U6 o" }4 A; l{4 A) d- y' f0 F/ W# W. d
for (int i=0;i<MAX_INVENTORY;i++)
( g9 o, T* v$ w) J {
0 V3 ?, K/ y5 v if (m_Item.dwId == dwId)/ a: u) b$ y- ?& W
{; y5 ^# s: x5 d8 m; {+ m' S
return m_Item.nIndex;0 m; F$ w! E6 A- o ?, M
}' g2 M) r7 L9 [
}) o: N; U& ], a
return 255;
9 S5 Z" Y1 N4 h# u2 C4 j m [}/ u c% P" Z2 h- l" l4 w8 R& T, ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ {8 Q2 S5 N* R, W% x6 C
{
% y0 [* a G$ w# q BYTE nTmp = 0;
( [) H1 {' I* h bool bDest = false,bSrc = false;9 e( G) @# U+ }$ J: ^9 e$ N
for (int i=0;i<MAX_INVENTORY;i++)0 M. I+ J; o/ @$ F( T6 h& Q
{
9 e) @9 e- b( ?8 y if (dwSrcId == m_Item.dwId)
8 }5 e: ^/ e/ ]5 j9 b0 J6 N+ y {5 H: x' E; H; V) H7 |
//id相等 则 改变对应的dest和src7 G' A0 W, Y/ [+ `6 m
nTmp = m_Item.nIndex;# c, D0 \8 P2 f* O! y/ V
m_Item.nIndex = dest;8 [. r) b" `% {1 `
}
( j5 `3 ~0 i8 V! ` }: V* D. H5 }- N4 S8 O+ b1 s1 i/ b
//临时数据保存完毕,交换开始
: N: U4 m* l" G for (int i=0;i<MAX_INVENTORY;i++)3 @$ M7 K# E/ T/ z" k5 _7 A* P- ~
{
! D$ r: V2 M2 g2 Y: p3 g. ` if (dest == m_Item.nIndex)
& `6 t# ]$ V$ b) ^" W. ? {
0 H; ?* A o0 f/ r4 M //id相等 则 改变对应的dest和src- f; g* n4 A- g J W
m_Item.nIndex = nTmp;
# Y; ]; a4 q" x' q+ n6 u$ { }" ~( n) n8 X5 ]$ U; t9 u2 k0 J' ?
}/ f0 C' p; L, U# s" p4 {& E
}
. }: G$ s- M, `! b% Y k1 C};
$ e9 y) e# a G. m- Y-------------------------------------------------------------------------6 h! i& }, z: J" V0 Y8 `4 L9 e# K9 C- H/ x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 e) s1 |; p7 y; M7 ^
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
l/ O1 i$ g) V2 {紧靠其上添加:
5 v: t0 B% B2 \7 zif( pWndBase == &m_wndMenu ) A+ ]6 ? k8 M/ _
{
/ t7 s& s$ q$ c7 W; X b switch( nID )
1 Z/ }" m; y+ o& `! | {0 B8 q9 i$ C: g$ X7 i' T
case 2:$ k$ a& y* w7 O5 B/ }4 r! t
{! d+ Y6 B5 x( D0 x& m g7 C2 {
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 I5 `7 Y% |; s9 y. V# |; y) T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# J4 O5 G7 `4 u0 y0 q {$ Q9 ^, b' X, l) C6 f4 g
break;
' ~9 `7 ~+ y, q% }! W O }
/ s! J W/ H5 _# m6 E- w' ^1 ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 q& N3 N/ n( G% j2 s7 A/ ^- {' w
{( }. G6 w( ?* w1 @! c* p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 ~% @2 r; r+ U0 d$ n \. M. d: \
if( !pItemElem )1 i8 j+ @1 v) v/ ^( z3 L
continue;
6 c) h$ J! ?/ F- o8 f if(pItemElem->GetExtra() > 0)
& v0 n. W" z) N& ?! `# [4 z; c continue;
6 m r: [# b a4 u& }' ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 \- X3 t- o1 D9 v1 L
continue;
( c2 f! B7 g4 a0 O if( g_pPlayer->IsUsing( pItemElem ) )
' C5 Z0 l" l/ D. ^$ }$ o2 s; Y" ~ z continue;2 U3 C) V I; w2 Z3 ]" M
if( pItemElem->IsUndestructable() == TRUE )6 ]' j! X& `$ m) g; Y% W
{
2 e: f% q6 A- m ~ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 g* w6 c3 A+ D! ?/ J9 s5 @( } continue;
6 @ n; Z4 K- m5 m% x }
- @7 K s8 @% ~/ e( T g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( N# b2 e! B8 X5 ^3 k3 ] }$ n5 U$ \, j- w3 A( J
break;
' e) z F& ~: C1 m }
3 O: q' x$ m5 m3 f) Q% S' P case 1:
# ]6 }9 {( i6 M0 Y7 M+ x {
6 R" y" J3 l' e* r4 M //整理背包7 ^1 W+ Y2 }; ]3 l
//////////////////////////////////////////////////////////////////////////
& Q, F, ^ ]4 C8 U p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ B1 i3 M4 w' P* N3 d
//////////////////////////////////////////////////////////////////////////. ^5 p6 B- S" ]: O" L
//////////////////////////////////////////////////////////////////////////8 q s9 c5 Y s0 K* j
CInventorySort* pInvSort = new CInventorySort;
3 x0 l& _* S0 l" E+ w9 q: { vector <sItem> vItem;9 u+ q: _* U+ ~( ~: `9 `7 \; z, |% I
vItem.resize(MAX_INVENTORY);//初始化大小
1 j8 y% a" u9 o# O% N+ U //////////////////////////////////////////////////////////////////////////" B5 N6 a, C+ ]6 H `; C' Y
//填充数据
2 @7 {- `5 W/ ^2 ^ for (int i=0;i<MAX_INVENTORY;i++)
8 u$ b! `6 ?6 \4 v6 i2 ^ {) m% _# O2 T+ J& [/ l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ K$ P4 [) q& ]% w. k( E if (!pItemElem)' W" w, _" s0 a2 x+ e. b" z. a
{9 E' `2 V$ n4 S" V2 D0 }' N1 V* E
vItem.dwKind2 = 0xffffffff;
2 A$ ~0 \/ G! P: R# G vItem.dwItemId = 0xffffffff;
$ M* ?( o* B, R vItem.nIndex = i;
6 o) k/ s/ ]0 E }else {0 T. h7 N2 ^# ^8 |, W, W5 G
ItemProp* pProp = pItemElem->GetProp();2 O3 J- E) u* }; X6 Q: G! O- V& R
vItem.dwKind2 = pProp->dwItemKind2;* n& q3 q5 W8 a5 O9 ^/ P: y. I, K$ k
vItem.dwItemId = pItemElem->m_dwItemId;
2 ^0 c4 b6 n: |6 o w vItem.nIndex = i;' _& ^" l( j) r- [4 x! ^
}
( `5 G' }( m I9 t) |( [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 j. b) }" T/ a! r' h3 o% M }9 h4 T9 R6 ]& k; l* e3 r
//////////////////////////////////////////////////////////////////////////
7 [ M8 [5 P" c; U* J: s sort(vItem.begin(),vItem.end());//排序1 U1 l+ V: a4 A5 O3 K2 `
//////////////////////////////////////////////////////////////////////////
9 o! t7 O7 }. g //交换- i+ C6 r* x) c$ [( r$ u
for (size_t i=0;i<vItem.size();i++): ]: a; G1 f- @5 D+ c) ^7 K4 U
{
. }& @/ z! @ ~% z% f7 p6 u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 Q$ R. O% i; ~3 D# k; C pInvSort->Add(vItem.nIndex);5 \; B; n" I7 v, s
}+ r) T! Q9 O+ [
BYTE nDestPos = 0;$ u1 C! R7 o' o% [( Y' T
for (int i=0;i<MAX_INVENTORY;i++)
9 c3 U& Y& F, a, E4 W; _ {
/ W" x+ [9 k; J# z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 ]- w) l! N2 |" ]" o, C: d
if (pItemElem)
% a: R/ d$ V( R- j7 e {
5 B$ v K# e% y* j2 c* V- f if (IsUsingItem(pItemElem))
]4 f9 l1 P: J' M. X {
' ]" S) |. B' y) q! |7 w //这个位置无法放
2 V8 K' W7 Z- `! q nDestPos++;3 g8 w8 D0 Y9 I4 S7 p1 F6 I! z
}9 w6 y1 S: R ?0 Q" }
}- {8 h2 s4 S0 ]* ]$ W
BYTE nSrc = pInvSort->GetItemSrc(i);
- j8 ]) r1 j+ L pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: R1 R$ |' n* ~" W" T( `7 P
if (pItemElem)
: R/ Q: j0 D. L( G% q7 d {
9 _2 \ z2 t" o# K* p if (IsUsingItem(pItemElem))3 x+ s' o2 \& y0 P7 Q
{& x1 L% n5 M. O* t( A
//这个道具无法移动,跳过
+ f Y/ }; g# x" j8 ] A: g" m5 z continue;# a! c# ~1 ]$ J$ {' r5 r
}7 y2 G4 f( o4 J- ?! p* m/ U; u/ E
}else{" ?3 \ Q: F0 n* \
//空位置 不用动6 n x1 m' _1 A& d6 m
continue;
0 I1 D @) t2 t7 q }
+ m! p' C3 y4 e5 {: y2 X //////////////////////////////////////////////////////////////////////////: \7 _0 ?: u" W+ G, q. H4 \
//开始移动
4 [! o, }; x( I7 T8 z( a- Y if (nSrc == nDestPos)
+ `7 y, i7 S; n1 e8 m! x- C {
; S. V' C7 X8 ?: w+ P //原地不动& B9 i) Z. F+ k/ V0 C& ? h5 A
nDestPos++;, M' X/ l4 W; b0 G! d& S
continue;3 G; ? H" Y. `; L
}
' H; b/ g" }# J9 ]! p/ V! T+ V' j pInvSort->MoveItem(i,nDestPos);
$ ?, _* I9 q) ?. k g_DPlay.SendMoveItem(0,nSrc,nDestPos);( O! p- d! y/ F4 c, B6 y% K' {4 `
Sleep(5);
; Q O A: X3 q6 T( v/ m //Error("移动 - %d->%d",nSrc,nDestPos);
; R j8 _4 y8 J( C nDestPos++;
e0 F( S3 i& f4 w% S; ?" U }
8 c3 c) L. R+ p( {+ e# z; @# @4 | //取第一个元素的信息- s3 u: `& Z$ f3 b0 G
/*1 i/ t/ M& I2 M4 ~, v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ p! ]# H( E. j, B
{
4 _- N' s$ P: K0 N; o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# b$ ^) ]# m( K1 V
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 [- V! k7 O; R0 m; v1 K; L7 _ }3 {0 B% } x, |, C
*/% T- m* g' Q2 u: p* ^
//////////////////////////////////////////////////////////////////////////
- t9 K- `) k5 ]( x* B break;5 U/ S0 y- M& W* q! z6 u
}
9 V/ y2 `9 ?' F- {9 o& {+ r: j } 1 Z. e0 ~! M6 O3 m! I
}
' _1 H/ L7 U- g/ D( u' c. cm_wndMenu.SetVisible(FALSE);( {2 w$ g9 r D9 u$ X8 M& a: }
. p w7 }# \! l _5 o
--------------------------------------------------------------------------------------------------------
; m! z4 v' `% i) ] r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% Q- x6 { C1 Y4 x! J5 ~' ^' U! z{5 s% u) L+ o: |; k
BaseMouseCursor();4 O. a, P! M9 ?8 A$ v
}: M1 l! X% j j7 E7 `, ~
在其下添加:5 J; g ~1 H3 [ O0 u6 R1 r* w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); C7 q2 \( d) u* m# s+ n7 T
{
1 J( {$ k8 P' `+ W6 Hm_wndMenu.DeleteAllMenu();
9 W8 T4 [7 Q- h6 g- h4 ~' ?m_wndMenu.CreateMenu(this);& l# ]4 k$ q- e& Y% b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( v4 T- ~! C& g; F8 S ~; _: W$ T" t4 Y$ K m
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& ]# ?) H) k+ U _
{
K6 S7 r& T$ b' e4 ~ //P以上级别才可以删除所有道具) Y$ C" ^$ ~8 j3 S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
l% S( o( {: H8 P- z}7 E# N4 H0 y- K5 y9 H. Y4 Z+ X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# l7 Y9 G% [: Z( E8 H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ y1 \5 i- Y' e! h. K) w3 ]! jm_wndMenu.SetFocus();- M+ B6 g4 H' i" W$ Z5 v
}) I, d: q5 V1 c5 ~! `0 g
------------------------------------------------------------------------------------------------------------; b, [* J- T, d# D; \
*************************( M9 n* b% ?! o, c
WndField.h文件
2 I) g% @" O) x3 \1 X*************************
4 R+ K9 p$ e! U' W3 B0 {搜索:BOOL m_bReport;
4 o9 {/ l5 K# U其后添加:# f& Z0 {! w/ u! @. Z- _, c2 v
CWndMenu m_wndMenu;0 O6 d+ Q' `' U$ F7 N
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ l* q$ _+ J. g' |/ o其后添加:+ G. G3 k& d( p) |/ o* G; ]: y
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ r( Y% o6 K* G+ D3 k! `
( }. I4 K, f9 v$ i$ ^& g5 ^8 {; Z* a+ L( p: H7 ~
|
|