|
|
源文件中_Interface文件夹下WndField.cpp文件
7 C, r$ J$ e( _! d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( ~" g' o i$ L2 L5 K
0 W& y* L) J7 N7 [% W7 Gstruct sItem
! e5 A- z; s5 A5 w% J9 L6 ?{
* t- Q1 F! R: Y- v. F8 ?DWORD dwId;3 Y& S- r' q$ E. ?
DWORD dwKind2;
8 e1 | g/ C4 }) R/ Z6 CDWORD dwItemId;
' C/ t+ x& w8 T& ^, B& N9 [BYTE nIndex;
1 ^( @" y/ ?. \. _sItem(){
0 F, b! d, P6 O dwId = dwKind2 = dwItemId = nIndex = 0;
7 Y, \# Z' Y' p/ C- Y7 K}
( B- i/ f& k0 {1 ybool operator < (const sItem p2)
: K' I r5 f: [1 W{8 m% k1 Q, n7 y
if (dwKind2 == p2.dwKind2); v5 t! _0 N8 L. L. B
{
' v+ N* c3 P5 f2 i) d+ P- h return dwItemId < p2.dwItemId;" Y* s( k' q# _
}else{
( }4 M8 N! F% e T return dwKind2 < p2.dwKind2;
9 O; X% l7 _( m0 \2 b }
% ^, E5 H" A r$ x}3 ]8 b2 s% d4 d
};
. a( Q( m2 Y% M+ H. F; c. n, ]4 }( Bclass CInventorySort7 U p; P: H, R6 P2 a
{ `4 e/ r2 E- j6 z" N; t, c
public:
- }4 E* F+ n- r$ s8 }8 ]; j7 _1 rCInventorySort()
3 `& c' I; o0 ?7 K R0 D{
9 Y& a8 j: b7 D! j) D m_dwPos = 0;
3 w( R9 e5 S, `9 n! h% |" Q}/ O5 e( h2 Q: l. R: M; J
~CInventorySort(){}
6 L% z9 c/ Q. i- _1 M0 rprivate:
+ p! `8 ^- l# R$ Q/ psItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" j/ l; f& O8 m( _
DWORD m_dwPos;
0 [" l% _" ^: ]% m( Vpublic:
& a0 L! q. P4 h5 a9 \, ~void Add(BYTE nIndex)( j/ {" q! e2 q. ?" @) d+ ?+ d
{! e, ?3 |7 f0 {" r' ^
if (m_dwPos >= MAX_INVENTORY): M5 C% C1 _" G! w0 Y
{$ H# k. [) s' r
return;2 s" @1 [ S; N
}' k' C' |# e& @/ A* v3 i
m_Item[m_dwPos].nIndex = nIndex;4 H% K8 F% P1 d: z
m_Item[m_dwPos].dwId = m_dwPos;
& K$ l6 b. T, L$ E$ A m_dwPos++;
9 x! m1 M6 d" z' \" ^9 D4 s! _* K}; Q- [6 u! J5 `& K- F* A, k9 p, ?0 \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 z* j) K8 g5 L
{$ K; U' w7 x* s! N
for (int i=0;i<MAX_INVENTORY;i++)
% d5 R( M* k- E$ _; C1 C) C# o/ X* e {
0 d. f- B3 U5 N if (m_Item.dwId == dwId)- \, O/ t9 F5 l% h8 d
{6 L$ C) w" A3 D ~3 ^
return m_Item.nIndex;
8 ^/ d4 O( S: ]5 q }
5 l8 k6 Y# V2 Y. m" \4 Y4 M* K6 K }% x) f' E I( [, h$ D$ k
return 255;& Y- n, p+ V2 C7 e" v( w
}
; z' m2 ^/ e/ M) P8 f8 S8 q7 Y svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* i8 D- a1 t0 d8 r/ Q; Z{
. f" r2 m8 g2 { b& D BYTE nTmp = 0;4 L; Q" @+ T( K( a# ]' m
bool bDest = false,bSrc = false;. P& v8 y9 `% M8 }% G
for (int i=0;i<MAX_INVENTORY;i++)
: g, l3 @3 l( x3 {1 Q6 o {4 l# }$ K+ R; E. a9 A* |
if (dwSrcId == m_Item.dwId) p/ j5 w% S; @0 m" c
{% ?4 Z k. V. r" u# C0 C) V
//id相等 则 改变对应的dest和src
1 Z& i& A5 O5 i5 w) I6 ^; e nTmp = m_Item.nIndex;- N6 Y" {, L F! T* t
m_Item.nIndex = dest;7 y8 j9 d8 `# s R
} w5 m" Y+ A) x, x6 t: T# o, {3 c
}* ?" z8 S% S% E1 w" b
//临时数据保存完毕,交换开始
; Q" Q8 b& } I' I: m' u4 ` for (int i=0;i<MAX_INVENTORY;i++)" F6 ^) q% f+ d
{
4 O) u9 \; o' V5 Z8 r' v& a. ? if (dest == m_Item.nIndex)
! T' c8 E" b7 Y8 S/ ?, d {* l$ H2 w+ J6 W" ~2 d) Y
//id相等 则 改变对应的dest和src
+ S# E, f5 F; C1 N m_Item.nIndex = nTmp;
2 I u- J7 F5 I- ] }* c5 ]! v- O2 v" I% P) f7 m% L
}. Z" w; q0 b& O" X9 B& T
}5 {6 F8 n0 R; F' ~" e! l& T
};# ?) @& `% A8 G2 g- u6 _9 A1 [) v
-------------------------------------------------------------------------
" U3 `7 S! z# _4 ?$ t依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 K+ s' r0 c5 Z/ c; p
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 E1 R$ E }5 q% u紧靠其上添加:) }: e/ N! N5 M" k
if( pWndBase == &m_wndMenu )3 T' q, @. D7 U
{
, \/ F0 i. o8 N* \) q2 @2 ^/ @ switch( nID )
, A- \/ k3 L3 Z) v {2 b+ x, i3 c) G) z5 x
case 2:
5 w6 q3 S! _5 Y4 s {
" O" m c; Z! ^$ c: o1 |2 g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 r0 u) k u* z7 E3 d, J! l
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! y4 i1 w7 z- `$ K) n3 F8 J* A: q4 t
{4 C6 R6 A# z' U$ [) W) |2 Z6 Q( d
break;2 b. x8 e5 `' g3 V q! i. h5 [5 _
}
# m h9 y8 y$ V H$ | for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% R! C) H+ e! J u. z/ p {1 h; o+ n5 f+ r5 A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 [8 ?$ [% ^5 e0 S3 n9 ]$ J( h if( !pItemElem )2 ]6 A i5 G9 z' _$ D- @
continue;- ^6 T& n8 C/ F" k
if(pItemElem->GetExtra() > 0)) u$ K, o- v- a6 P8 l1 H
continue;( F4 I7 y$ c; `# f
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; m/ @: z! ~2 E- e* D continue;4 ^6 v' f' F6 f
if( g_pPlayer->IsUsing( pItemElem ) )
! h# b) q; E# r3 e5 |. q$ i7 r continue;/ @* V. ?8 u7 l
if( pItemElem->IsUndestructable() == TRUE )
. \0 H# _( X6 b2 s {7 Q0 M$ [+ f: I/ D& ?
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 }- B% b) v) v3 _% B6 |' n continue;
q/ C, a! B. H o. R1 l$ E* u }& h0 q1 k7 W) Y3 r3 ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ \8 N2 I i7 j# ^4 c }2 C6 P, g+ i) l8 U2 r& M. y4 ]
break;
. c+ V G$ U: B }# G9 P0 X5 ?1 ]8 Q C: s. U) x- q
case 1: Z% v% Y% O$ v
{+ g2 M/ {$ n; V4 @
//整理背包- q+ _1 ]- d; `* L- C
//////////////////////////////////////////////////////////////////////////1 m7 R; [3 R7 j. _8 N( g1 v0 P1 k8 `
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ y4 H8 X: A5 Z7 @; j$ |2 Z
//////////////////////////////////////////////////////////////////////////0 y3 A/ A( ]6 A1 ^9 l
//////////////////////////////////////////////////////////////////////////: X4 |' H5 x0 f2 I8 {, Z& }( \
CInventorySort* pInvSort = new CInventorySort;
1 C0 r9 S0 d( o }% P/ M vector <sItem> vItem;. ?9 z2 p) u2 M( T1 |7 B
vItem.resize(MAX_INVENTORY);//初始化大小
- N$ b6 s: g& _2 E2 {& ^/ m //////////////////////////////////////////////////////////////////////////
9 I* W4 r- E; G2 I7 _1 X //填充数据; d4 G- T$ H' A6 k( q$ g+ _
for (int i=0;i<MAX_INVENTORY;i++)
4 r. x( l( l: J4 H# Z7 ]0 I0 Q6 ?, I {
8 J/ j n; {) C4 `& d# W" j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" }8 ~: Q$ M, h/ u* v! n if (!pItemElem)
9 U' i f, f* \2 g3 T# Y {
# m" f; U$ \1 I- X1 d vItem.dwKind2 = 0xffffffff; G: {1 P9 [! R" Q& p: W q9 z
vItem.dwItemId = 0xffffffff;
) ^/ I" S: j& H+ d4 ]; e1 s- u vItem.nIndex = i;
5 ^( }, V. ?9 j* u; D }else {
, h, a. X/ l4 R6 V' ~" }1 _% G3 K6 R ItemProp* pProp = pItemElem->GetProp();
, L, }4 D! X, ^8 l* y; W vItem.dwKind2 = pProp->dwItemKind2;
1 E, z& L4 S( O; C vItem.dwItemId = pItemElem->m_dwItemId;2 J2 [0 {( w/ ~3 M: P! P% k
vItem.nIndex = i;& c3 [; _$ m' z* y
}+ n& O6 n! U& ?" i" i2 z4 L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- e: v Q2 Q- ^/ ]3 b. X! f" s6 W- }) i }
{+ a7 _. E z9 _ x# E //////////////////////////////////////////////////////////////////////////9 [1 i; Y* t8 J( |: ~( K
sort(vItem.begin(),vItem.end());//排序$ D2 z; X O; K8 b. [
//////////////////////////////////////////////////////////////////////////
d8 ]; B. F/ Y; K0 m- ^# p; z //交换1 ?2 H5 b" V' L o( n
for (size_t i=0;i<vItem.size();i++)
2 o. n6 b$ p5 s1 n/ A3 \: f {
) ]9 D0 d+ g, y9 N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 F) L- G; |, t, b# B$ M
pInvSort->Add(vItem.nIndex);
, b9 z8 r5 b! C& B: ~ }( w3 [% ~0 c+ c# M; J
BYTE nDestPos = 0;
/ I+ N( Y- c" J+ ] for (int i=0;i<MAX_INVENTORY;i++)
# S6 O5 Z8 _4 C5 b k' O# B/ { {
: ~2 U8 s3 }7 H. |( g4 Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ x- p% }& G4 u7 s1 H2 p2 J+ `
if (pItemElem)1 x6 g1 z" S9 z( E
{
6 `: q6 K3 V; r& L5 X5 `0 R if (IsUsingItem(pItemElem))* Z; G* G' S; I, p: C2 E0 T
{
6 b! j/ x! c5 R3 t; S+ \ //这个位置无法放. k+ Q! W( ~( y# C: ]5 ]+ [
nDestPos++;, a+ a# {( `2 b2 H5 R& f- } \
}
5 q, }6 ?- ]5 ~% p) k( | }$ b& O& O- v$ D! I n$ j0 D! c( I
BYTE nSrc = pInvSort->GetItemSrc(i);
; L( n! t7 A% N pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 L2 g4 E& l& C/ _7 C/ Y$ L if (pItemElem)
/ w9 a2 J& V0 x: b% [: ^5 P {- U8 l! ~* D3 U1 z
if (IsUsingItem(pItemElem))( R" a8 B; R; R( d9 L. O
{1 ^8 o& |( R m" u# e& l9 T
//这个道具无法移动,跳过
- ]- T' G4 m/ F: Q% h8 ^5 c continue;, L/ Y+ d, M% K! z. `/ e
}1 s) J# w+ m' K
}else{
, D0 {- Q- b9 x; _0 a( n2 | //空位置 不用动7 p; M* a) C) k- K% _: k& M( l
continue;4 G4 M% ?' M* x6 N I- C* P1 {
}
% u+ n4 y; `8 J4 o; P //////////////////////////////////////////////////////////////////////////8 ]1 R8 R ]$ i) w# ]# h
//开始移动
( H2 D4 ~3 f* ^0 N5 I3 g if (nSrc == nDestPos)3 Y/ y' s% K' x
{- s+ A5 G2 t, w, h
//原地不动4 e% S! O% [5 D `
nDestPos++;
5 ^2 {/ s/ B1 H continue;
5 ~8 w- K' B6 e! @ ~& N }
5 s, M- n) [" M pInvSort->MoveItem(i,nDestPos);
" F( v$ K: P0 u/ | g_DPlay.SendMoveItem(0,nSrc,nDestPos);( G9 q" A6 q# m/ P. f$ Q) P
Sleep(5);: o D4 d+ e6 w8 g# S9 T! D/ u
//Error("移动 - %d->%d",nSrc,nDestPos);6 ]9 f) O) I# O/ C9 u0 W
nDestPos++;
& i3 O1 d5 @2 p B2 T8 k }
3 q, {3 X. F9 c2 c //取第一个元素的信息4 E9 i7 J: d/ D" k, G# p
/*
! g- ~! Z0 |0 t2 w# g if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 u/ C4 E# F. j( D" f4 S {
! C! D' k3 z+ S, Y# b; }9 W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 |9 |# ?4 _: h) R3 b) P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# ]. k& L3 e+ x; |0 |
}! G# e: W: q# v
*/
6 C+ F; z$ s6 ^+ g9 p/ S //////////////////////////////////////////////////////////////////////////
9 R6 m) R0 R. K6 a) v break;
! L( p* L+ \2 [! l }
& T; g; ~# T0 C& o2 `3 A } ) x r8 c- T$ t
}
( P1 L+ [4 F6 Y; H0 ^: y9 em_wndMenu.SetVisible(FALSE);
$ |& g H* y# x- H! t
5 T( o4 h% R8 Y$ O0 M( w% `% O, [& G--------------------------------------------------------------------------------------------------------
0 Z$ P$ Y9 { g# |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) _# d/ K c# J2 i- N5 k& _0 p
{
; w$ k/ I0 N, k/ s6 T& |BaseMouseCursor();
2 e: C+ i. i4 {0 M* A+ X8 k" t+ w}3 a% V. Q( W6 ?4 x; J6 d4 `* X: C1 [
在其下添加:
$ }$ h b- K3 W: G, J8 z3 ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ [, \3 I8 ` D7 T! A
{
* {: \8 @$ V. q8 x3 V) }5 Nm_wndMenu.DeleteAllMenu();0 D7 K# m2 X9 K7 h/ U& |: Z
m_wndMenu.CreateMenu(this);
; m6 }) h( y. ]& |$ e- Z& l; o* T( fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 f1 q" r( _' r" L. ~
, O: Z/ b9 b; Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 u# n v" t$ ^3 H. ?8 q{3 x9 U2 M8 F5 B$ {0 j1 ?
//P以上级别才可以删除所有道具4 N4 Z' y6 r3 P8 @1 ~
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- O- d% J* y8 Q1 a3 [4 }, h; F}" @! m1 e" Y5 F; F3 p8 j l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* M- C3 R/ `1 a+ z! q, o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ X6 {2 o9 b2 y
m_wndMenu.SetFocus();# u4 s* Y3 T! x7 }+ d* {$ C# M) `
}# O4 ^3 F0 W+ l- c! L+ Q! |
------------------------------------------------------------------------------------------------------------3 h. Y6 w. A4 V
*************************
: ^/ X. X7 r4 {/ eWndField.h文件
, \; x% W3 @2 x2 `*************************( S3 ?$ P! K* [2 o- J' m
搜索:BOOL m_bReport;
3 s4 k0 u9 |! J" r* g其后添加:
7 h- Z7 w8 C+ G2 I& d1 M3 qCWndMenu m_wndMenu;) @8 i# x/ {$ `
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( `" E. X5 x% a- v; X& }( b其后添加:
" E1 n$ F) I/ y" s- F# A& jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 N/ H( H' C' d- x$ ]+ C7 U* `' E# F/ S& H0 e
% T- O' S. }& \3 @9 t
|
|