|
|
源文件中_Interface文件夹下WndField.cpp文件5 C9 z' N% [& t4 X0 `7 h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ h# D/ h/ d) J2 X9 S7 {& p' L3 q! ~$ P! p+ C2 a
struct sItem8 ]) \& c( P; {7 Y6 E$ V
{7 u* l4 C( t* Y
DWORD dwId;( p J8 f" Q2 x$ l1 Z
DWORD dwKind2;
2 b: p4 i* i! J0 `# J, kDWORD dwItemId;
- w# y9 _: |( l7 L/ Y+ eBYTE nIndex;
: q K+ v: @) `4 W1 L; _sItem(){% N4 n/ P4 I7 c& }
dwId = dwKind2 = dwItemId = nIndex = 0;
. j I+ U) }: Q- V. @! t1 `} b$ a# }8 u9 g6 A! ^) k, k
bool operator < (const sItem p2)' C2 N4 e6 q8 z* Z; o, T& G# T1 }
{" {9 T" }" R8 `" @7 m" H: A: p
if (dwKind2 == p2.dwKind2)
4 Z( `6 w/ R+ X7 [4 H, {9 H, l {
6 B; [5 d3 U4 Q/ A E! Z return dwItemId < p2.dwItemId;! e7 Z! ?5 s8 k% f$ I$ M4 h) S
}else{
+ f. t+ A! ^ O# g: f' i return dwKind2 < p2.dwKind2;( \6 L" I: r3 Q% m- a
}+ r! d4 H1 f$ n9 _
}8 C D# n9 d$ _6 G- s
};
) g5 T9 x0 c. t5 f' A0 fclass CInventorySort0 c: Q0 o; l9 Q# h/ `: J+ {& k
{
5 [0 f! ?5 u5 v# W: q+ gpublic:
8 C" Z# Q6 T8 p% j+ m% g! |$ uCInventorySort()1 i3 { J* @5 z0 H: \$ ^5 J' A2 z
{5 a4 \9 a( Z t7 S. d* c
m_dwPos = 0;1 T0 a; V" F* B7 `; N6 J; B! i
}
+ B$ k; ]/ e/ r8 _~CInventorySort(){}: B" N4 O X: S
private:$ c- s9 A6 X" _2 i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" R5 G1 _ d5 U1 r5 e8 S7 J# L- JDWORD m_dwPos;
" ?% I a3 k( [, p) y+ v' x% ppublic:
* x% O- C" N: `+ L$ Fvoid Add(BYTE nIndex)
9 ~* F% N8 K" ~* I4 {, ?0 z, r{
3 k# A7 a5 p1 E* w9 c if (m_dwPos >= MAX_INVENTORY)1 ]" r0 | i; k3 I8 u9 U/ W
{* i d3 Q+ [$ D+ ]9 Z; K
return;
. A! P% d" I- e& @ }
$ T) `# U8 {1 t! }4 d4 V2 L9 w& l m_Item[m_dwPos].nIndex = nIndex;
, j7 s* l V' R( a. H m_Item[m_dwPos].dwId = m_dwPos;6 l7 h4 a# ]% v$ U# I
m_dwPos++;9 S* V. i, A8 a! K5 W5 z
}# R: s; ^* J2 W- K3 A( V$ f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 P4 |; t" Z1 w- J' N5 `{1 d( N# S& B4 k3 V# C9 |) S
for (int i=0;i<MAX_INVENTORY;i++)
; C# S+ S9 x4 y7 h6 ~5 i7 o {" i$ m8 v; }* r$ m
if (m_Item.dwId == dwId)% h5 D, `7 s- r! ~
{
/ y, E' p2 F( D8 w9 j return m_Item.nIndex;
/ v6 }& i1 w9 g6 ?( t: e } w0 w* {6 d8 f9 ]- r
}2 R$ S6 @, ^: H) w1 q
return 255;4 w& u( w* ]& r3 ^6 q4 S
}- h' M3 s ]) n* V; E' P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 Y4 r) m, V- f/ A; X; o2 Q{
3 q) o& X, }8 h9 e BYTE nTmp = 0;/ A$ x* G) W( z% o+ v8 B1 R4 ~
bool bDest = false,bSrc = false;5 n/ `" ^9 `8 T* J+ h( g! H6 A
for (int i=0;i<MAX_INVENTORY;i++)
1 H3 H" o ^7 S; J# \, U+ j {* q' q' e$ @8 f, Z$ `3 f) w/ s1 F
if (dwSrcId == m_Item.dwId)
9 t: O6 h! ~/ X; v& S# A {
/ g" z1 z1 f- M, T" e6 M //id相等 则 改变对应的dest和src
, U6 H& i8 \" X0 O& u6 C# h nTmp = m_Item.nIndex;
7 z v* D2 E2 Z0 h& I3 G5 ` F/ N m_Item.nIndex = dest;" W1 |6 ^1 r) |
}
; F; X8 y: L& R/ T' A }* O- H S( l/ G3 n: c- e! L) m
//临时数据保存完毕,交换开始
' |+ |; K8 b4 I6 Z+ s for (int i=0;i<MAX_INVENTORY;i++)4 J7 Y& b9 c8 R5 A, p0 k% Z& S# t
{ L& P7 Y( ~0 b; O/ w4 p# e4 s+ F- z
if (dest == m_Item.nIndex)
' H% y/ }9 f: R0 y! i$ {" v1 p; b& V {
; G) J0 `, t& z( q //id相等 则 改变对应的dest和src9 j& \ r' Y7 u) |
m_Item.nIndex = nTmp;
5 n4 |; a4 w d* k( I2 ^ }
$ u0 e6 h- g) G. \- u }6 h! ^, z* M) B# p
}3 p8 N2 v4 d: S, t! }5 S
};
* s! o/ w0 \. e( m, {0 J1 `-------------------------------------------------------------------------
9 f; N/ r2 v# C% e$ R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ S+ B: p+ ]. B$ Z3 o+ }) F2 D T2 R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
B( j0 L4 T- M紧靠其上添加:3 i M( R0 V# }4 k- P1 y! W3 F
if( pWndBase == &m_wndMenu )
+ D) L4 p. Y" P! x/ s{
( f1 I/ Z! h% O2 z' x& O; f switch( nID )
% j/ Q+ S/ r7 f {, o, _# g3 v6 p- H: } R2 q
case 2:
k( b, S7 v. e7 Z* [- e* h ` {
a* T! v" ~$ n* q* g: ^) V) z8 F1 t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# @1 y3 [ L" J; P: q7 g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' k: E t/ t: E( }7 q
{9 F I, f j1 \- V$ L4 M) v, N
break;0 y. z" J, G% O0 ]# ~! Z" ?
}# s7 U4 G6 G2 T( @/ `! Q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' C& h2 e' j* u
{
8 y `# @/ r `! I/ w. b" C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( {% q% }7 }( }4 c. s$ Q7 ^2 V
if( !pItemElem )
" ~, E$ A. _4 D6 L" J0 m) \# u continue;
4 O# L* z+ ~- t& A$ P5 [; M1 c' {. K% O6 ] if(pItemElem->GetExtra() > 0)
6 g: o0 k9 M, c# m3 J/ D continue;
0 i9 P0 o: w. Q7 q S8 t) g if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 z' C* Z% S/ m
continue;
. _8 Z! l1 S: \2 W1 l( O8 T1 [ if( g_pPlayer->IsUsing( pItemElem ) ) y( x Y; Z9 a: M) g
continue;6 b4 e' P% B% r9 X% l
if( pItemElem->IsUndestructable() == TRUE ); S2 I2 L7 ?6 x/ g! C+ q
{/ ~# B, b7 k- p% w0 [. X
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ L; A* E( ^6 b continue;
4 q+ j) S. b( \& l' a) I }& t" k/ [0 W0 @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ p' |7 [+ p$ }8 o/ o+ M+ n, ^
}" V9 \" ]) R3 f; ?8 n; e) e6 F
break;
2 e: s1 K+ D( O/ [: a: F/ Q7 c }, v$ I+ g6 N0 J& y( H
case 1:
/ t7 k' Y" H# h# r6 h. M/ g {, c" |& S8 X$ |- a! k; h: a! ]
//整理背包
0 W q" A& [# L* G! J8 B8 D //////////////////////////////////////////////////////////////////////////
5 b9 }: o5 V, F" l& P1 A8 I; J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
K L) _ f. H# v! C5 _ //////////////////////////////////////////////////////////////////////////
/ j6 m! A$ I6 x+ _ //////////////////////////////////////////////////////////////////////////
. y% N: x* t0 o& W5 k& z CInventorySort* pInvSort = new CInventorySort;/ d# ?* C8 D2 _; |/ [
vector <sItem> vItem;8 k b3 u9 o7 g
vItem.resize(MAX_INVENTORY);//初始化大小
7 N1 K' B6 c, t$ n //////////////////////////////////////////////////////////////////////////
0 X* U2 O# D7 X# ~3 U" r //填充数据) U' `5 t) r1 N9 y1 j- F. D
for (int i=0;i<MAX_INVENTORY;i++)
( q- ?, S" F, x( r {
' R/ z; D) y( ^( r5 u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' H" R* o7 w) W+ h: e if (!pItemElem)% M. F6 x1 | ^( A, z R
{' r3 Z! j$ J3 v+ d- E$ o5 `
vItem.dwKind2 = 0xffffffff;
1 T( C9 F0 N. R; O* \! { vItem.dwItemId = 0xffffffff;! @6 ]6 w: M& ?; p: a) f. J
vItem.nIndex = i;5 g5 ^+ _6 i2 v- w8 `& L
}else {4 I( Z9 \4 }+ ?, j
ItemProp* pProp = pItemElem->GetProp();
1 j( K- g" h* J/ z1 h vItem.dwKind2 = pProp->dwItemKind2;
: Y* Q$ O$ X! p: s vItem.dwItemId = pItemElem->m_dwItemId;
& A+ g/ v2 G6 D& N vItem.nIndex = i;
1 C9 [* g$ w* _6 V9 j0 R }& R4 y" u7 z6 }2 l
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" b( o3 w% s) m. s$ H8 [; s$ e
}
* t( G1 q2 Q5 \" M //////////////////////////////////////////////////////////////////////////
) B4 e2 k8 w- m' ]" L a sort(vItem.begin(),vItem.end());//排序
. t0 K3 t1 n! @0 |& C. T //////////////////////////////////////////////////////////////////////////0 r8 s( r5 F- w6 \
//交换
7 c/ D p3 \( h/ l5 R for (size_t i=0;i<vItem.size();i++)
6 B, d' q3 \) O6 N. k1 ^ {- s; y. i* `) m2 w5 Z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 i9 G, N" ~) }& } c9 h pInvSort->Add(vItem.nIndex);
7 z* c% e. M- G# v }
3 F( @+ K1 t. x1 w3 r BYTE nDestPos = 0;
- Z; u2 T6 P5 c for (int i=0;i<MAX_INVENTORY;i++)
' @6 J$ ~. Z$ @, P5 m& d/ r {% l5 Y$ G2 W7 u: M: \8 f6 Z0 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ Q: X j* ~0 A0 l* S# B6 v, u if (pItemElem)
; Z5 F. ^! {/ m- o: G( M5 f {4 |0 z4 Z& @9 g( ^: P
if (IsUsingItem(pItemElem))
+ ?" s7 \0 x3 j( h7 L: `7 ^, y% { {
1 P: t4 s. N9 C; X; ? //这个位置无法放
7 ?7 {3 m; q4 u# Z nDestPos++;9 m; @6 j' C) p* U% c1 Y! c
}
2 D* J# s4 P% [4 R8 i* b }# N3 I% \8 G" |1 t2 S3 Z
BYTE nSrc = pInvSort->GetItemSrc(i);
2 _" D2 B4 d4 G! s- X& E pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 e& \# O1 L4 d if (pItemElem)
5 I3 m& }9 a! z {
7 p% U7 a' m5 ?) h% i if (IsUsingItem(pItemElem))
u7 j+ k: h8 I9 r8 @: q {$ B7 W+ q* a: \( l# W7 S
//这个道具无法移动,跳过
9 q3 n" M# u) h5 _8 E0 {. z continue;
/ U1 h; Z; O" o1 y9 e }
2 D8 M l1 P) } }else{/ f: \+ g& ?+ @0 Q* b' e4 F
//空位置 不用动8 H0 x6 w6 B: U' V" j: U& C
continue;
$ X. Y- O/ X! P7 S. h }5 s4 g' U7 m+ I$ i
//////////////////////////////////////////////////////////////////////////. c, ?- Y( G6 t, V
//开始移动6 v1 [) R0 P' ]
if (nSrc == nDestPos)& b% z1 ?) x; n+ W1 r3 E3 k! s- t
{$ \8 o2 v0 ^& P" `9 w/ r3 r: b
//原地不动, Q& J# S( ?( J) G- Q1 W+ S8 I( y! I
nDestPos++;
) n" u( J' m" u" _$ j4 w! B2 x continue;
( K. P% B: f1 r5 D1 s" J( v/ ~ }+ A" e& Z7 l3 E5 q0 p+ T
pInvSort->MoveItem(i,nDestPos);
& {& L( `! l4 u! E3 Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);& e2 o4 i$ W+ c
Sleep(5);
% J5 U1 O. ]8 G/ I( V& t: a) i. @1 V //Error("移动 - %d->%d",nSrc,nDestPos);
+ _3 g6 U8 x+ O nDestPos++;
+ A1 F2 p5 a- o2 u0 R# z }
, @; h3 x- G" r) j //取第一个元素的信息$ Z* _" ^/ R+ d6 S
/*+ q- N% G y/ I
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 k7 ]' u* g# M# A1 F; a {6 S2 I1 ?/ {" L! e7 V! o! x
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" g$ @; l# A1 P, D( P z) K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- A: c# {: B' O* f$ x, X1 D }
; v7 V/ k. z' D- i; e5 ] */4 G6 h1 A3 t$ \. ^2 e' A
//////////////////////////////////////////////////////////////////////////3 R- ~1 C1 D( w% \9 M3 S/ m4 ^' i# q9 D
break;: H8 C$ x K: c6 D
}
. w1 X3 j. @$ | } . V' N6 \! V, L, H3 z" s
}
: u9 o! N/ x9 t$ A4 c/ sm_wndMenu.SetVisible(FALSE);1 B8 c0 c, d4 R6 U: c
4 n- v3 d% h* Q% |2 O' ]/ a9 C--------------------------------------------------------------------------------------------------------" u$ v( f% x, Y Q" R
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: O$ S+ c/ n# H- O c{
/ \! c1 Z2 A( Q+ f/ U6 ~BaseMouseCursor();# b: o" I1 w9 x {
}7 W, {+ h' c5 o
在其下添加:
9 P! q5 `' l+ W5 G% { jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. _0 X7 g* F7 E2 p: o9 h' n{! M% D4 V& F9 O8 a5 }6 M$ M5 y
m_wndMenu.DeleteAllMenu();
8 V8 s" ]* Z# A4 a3 um_wndMenu.CreateMenu(this);3 a* ~2 D6 R+ r6 C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 F2 S9 o, C2 u% t. M, R& W! r( i5 ~) x2 `- j* f- n+ c, G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 S4 l) c# I1 X6 q' r. @{" p1 E# x% u4 i6 s: S# y
//P以上级别才可以删除所有道具; V. r! i- f' O$ ~
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 t. D- e! M8 G; Q- s- Z1 C
}
) h" u0 E _3 \. L% E) nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# R) Y/ b% T5 ^/ P, h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 C% z: s$ o. `6 E1 F: Q- Lm_wndMenu.SetFocus();+ h- p5 n+ F2 _ V, B4 J d, K
}
0 C; @# B' E* K8 Q% K+ h------------------------------------------------------------------------------------------------------------/ Z: a6 a0 [; x1 Y( u4 J. h4 I
*************************. y5 a. X. C$ P) x. I
WndField.h文件( X2 j c& ]/ S7 S# S: p9 `. n2 M
*************************
' @, d# E2 @$ X4 ]3 L/ f搜索:BOOL m_bReport;
* [& c* s% B+ J其后添加:
9 a- q ~9 p: O c6 p2 `CWndMenu m_wndMenu;
- B" ?5 o4 o; G6 P& m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ W& |5 i1 Q+ B/ h
其后添加:+ U. G, w5 s: k& Z3 g+ J
virtual void OnRButtonUp(UINT nFlags, CPoint point);; O1 S1 B% f2 O7 o2 S/ Y1 o
; p! R7 Z1 h. D, F$ y
1 ? P! A1 |& _+ l+ B4 r- W6 w; s5 r |
|