|
|
源文件中_Interface文件夹下WndField.cpp文件( K7 x! r- v' x1 o' k$ s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 R; G) d! B' ~, g! u6 ?. \; n5 R3 J k! I8 K
struct sItem
8 a7 n# s# p$ m# A$ s/ Y{/ V) V# V" I1 ^: [
DWORD dwId;
( m, b$ A/ J) D) iDWORD dwKind2;7 ?5 v* }: Y( q: n/ u! w4 J% [
DWORD dwItemId;, C) E$ G8 R% n4 x2 X9 E2 A
BYTE nIndex;
1 }8 J, w4 c3 A$ f" }0 LsItem(){! Y$ K/ F0 d- y5 X- O x, v0 p) I
dwId = dwKind2 = dwItemId = nIndex = 0;
( S7 s" [) q: N! c, e}
( f& D% f% Z- C0 M9 Lbool operator < (const sItem p2)
, j' H9 L P1 i& s. u# G4 K{6 B4 h1 w' w; n+ M& T
if (dwKind2 == p2.dwKind2)
9 z! s* F' h' p R( I" C5 a, I {- }4 Z1 C+ D* n; c, D/ n6 {
return dwItemId < p2.dwItemId;4 d6 p* D$ J! y2 j
}else{9 T7 k, q1 W+ i
return dwKind2 < p2.dwKind2;
/ B, n4 _2 L; ~( E }
& L L! M4 e& r$ e- Q5 y* T2 O}
2 M+ l2 a( m+ m9 U};
8 i4 C6 E% B" Wclass CInventorySort, A0 h/ ]# a7 R# M5 r* @
{
9 I1 R! M' Y h7 W- {8 o# upublic:5 b) e: O. ]2 S' E' F) e
CInventorySort()
9 w0 t8 r2 F/ e. _{% Y$ s: L+ R [1 W+ I# ^
m_dwPos = 0;
' I( ?) `0 A# O H/ _9 e}
8 C0 ?$ r( J2 O0 J. u ^4 {& Z~CInventorySort(){}( @( Q) ^) P0 \( R
private:
1 t7 {) {' ]# v/ I" S; v& u$ MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 d3 Y5 R) }8 ?* W
DWORD m_dwPos;
0 Z! L# q. K) j) y" U; vpublic:8 ?7 K0 c' ]6 C" h8 Q" p7 t# B
void Add(BYTE nIndex)
. \& Z. `& L- i: r0 d; }{4 ?! m- z3 l A$ c
if (m_dwPos >= MAX_INVENTORY)
8 m$ S8 ~3 V3 ?1 ?" X {( w1 Z" i5 ~7 T: K
return;
' e; [( B- M0 G1 o0 w+ V }
1 F# n# [; u# X% o* V8 V& p- [ m_Item[m_dwPos].nIndex = nIndex;7 ~9 a# \ S' N; |# L3 t
m_Item[m_dwPos].dwId = m_dwPos;& ^' t: S- a$ T4 e8 O
m_dwPos++;$ |' i+ }' b0 N; W/ J8 E
}
+ B1 }( w) K9 O$ L' ^, g1 fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 j8 _+ Y+ L$ u: [
{
$ D% e, i1 f# V8 T0 b3 \3 h for (int i=0;i<MAX_INVENTORY;i++); k! ~, z+ R8 b9 \
{ I; [9 S. q! |) ~2 \+ [
if (m_Item.dwId == dwId)
8 @8 K1 m+ f8 w" T+ @* g" L' V {( i- g# B, q* R, Y2 @7 l
return m_Item.nIndex;" B# e" ?9 B* r8 E0 V
}
7 m2 h9 H$ A9 x! `& M' Q }" y t1 z; R$ n p+ Y1 R
return 255;
) V, }% P" |' @5 i}/ |2 Z$ F/ H$ ]$ _+ Z& Q2 u1 B
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; C) v% i4 C) t( \# |1 e
{
$ j" E; P; l8 u BYTE nTmp = 0;
6 ?. A- l6 R9 H1 ^- u8 `. S* e bool bDest = false,bSrc = false;( V/ L* y k7 E6 \) E0 e+ Q
for (int i=0;i<MAX_INVENTORY;i++)9 [/ D' Z" v1 X) Z7 i
{/ H# s( Y1 y3 B, v1 O
if (dwSrcId == m_Item.dwId)
2 L2 h" W* d& h! m5 \$ c% k' B& I {% a6 f! \3 `- \1 t& y; o' a) |
//id相等 则 改变对应的dest和src
/ b* w% d, r! Y) B, e8 L4 J/ h nTmp = m_Item.nIndex;: s; H/ r2 ~' ~+ m$ \' ^
m_Item.nIndex = dest;6 Q. t" L! Z5 A1 \: b% j
}
% {: }% S$ T5 Z0 Q. ]7 k: u }9 m2 _1 a H9 N4 @
//临时数据保存完毕,交换开始
% l1 D) B$ X( @ for (int i=0;i<MAX_INVENTORY;i++)9 @5 }+ }6 t6 ]& J( ]% [
{
, C+ T; Z5 n5 ~ if (dest == m_Item.nIndex)4 |7 V) Y+ i7 ^% ^1 F. h1 A
{
" D |9 a `; I9 } //id相等 则 改变对应的dest和src- s0 _) |6 i! a) v" }- v* F& U
m_Item.nIndex = nTmp;( K+ ?( b ?" W. _8 {) x( ?
}$ c& `4 J$ C0 P9 m" k" S
}' o' j4 W, v/ q4 c: s2 L3 U! e
}
3 b! X* y f5 ]2 {6 \3 T* u};1 q9 J& y. H. V3 o# _; i$ m
-------------------------------------------------------------------------
N3 p3 V# F, R# j7 w1 C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# J1 z8 Z7 g( ?3 u2 w% i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) P B; z; y" u! |- h% r
紧靠其上添加:
! D6 _0 b- b [, kif( pWndBase == &m_wndMenu )
9 ^6 ~, A. X7 M1 G5 |. @{
! n* L" G1 X5 `9 \- @ switch( nID )
' O" C; I9 A6 h; a: j {1 i- H6 V$ Y: R/ `
case 2:
1 w. k; n4 O4 r S" ~$ R- q% ^ {
5 l1 r0 m. P T: H) }8 |& I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 M( z9 j" `- q( }( G* [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! B; I& ]" O% D/ K {$ ]2 q% Q' C- T2 m ^8 e1 E
break;
* p! {! \6 x: U }
( X- y& l1 H$ H( ^, G8 X+ H3 `+ F for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 V4 x* Y( D5 g7 q0 q1 W; F {' t! p$ M) X5 q6 b! _2 ~; R8 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- q& N& C T0 \) C if( !pItemElem ): m& Y7 P7 W2 _
continue;
, e2 `! j" t/ f2 ~6 Y" X if(pItemElem->GetExtra() > 0)1 l, e) X9 P; T
continue;1 y- ?% J9 ~7 {9 t5 Z3 O: ?& p" r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 J5 Y( `1 K' {8 S9 ~" R+ j
continue;6 n4 g. q* }' }* S& g& w0 E" F
if( g_pPlayer->IsUsing( pItemElem ) )
7 X/ Q( S! Y6 a* d continue;
* t+ |% c6 _& `4 S( } if( pItemElem->IsUndestructable() == TRUE )1 c. }, r* w: v
{
5 R9 j2 L4 w7 a x( V9 G, P: S g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 U* _' O: d) s w4 W4 t
continue;, |& j: Q" T/ j6 O% y
}
: x% n N! Z& R1 S3 i& [6 k" U g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- N2 n8 ^2 P5 {3 E; S2 n+ a
}2 |1 i( |# \$ Z/ x
break;
, `- N1 d8 b! R& Q$ \4 ~. C }
) |- C0 H* M% x( I! v4 [0 v8 p; o case 1:
' o- t) p0 F9 A {: L% J X- S- c# U# v( Z
//整理背包0 ^5 A. g! E2 \3 u3 F Y
//////////////////////////////////////////////////////////////////////////: s8 ?4 t. D2 ~& p4 J
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, M) w% S& v C& b
//////////////////////////////////////////////////////////////////////////6 O* L5 r: ^4 h* j- l& ], o# Q
//////////////////////////////////////////////////////////////////////////- A; z9 Q' O( `: _
CInventorySort* pInvSort = new CInventorySort;
% t6 K* A: h" u* s% b/ J, I, i9 `$ Z vector <sItem> vItem;
7 Q5 [7 H6 r# a2 ?4 a( l5 ?9 g vItem.resize(MAX_INVENTORY);//初始化大小
5 [3 L( ~0 M4 g+ A& S& h //////////////////////////////////////////////////////////////////////////
4 t. ]! R5 K( C2 U% z: _" o //填充数据
! R) Q4 y1 X/ P2 i8 t/ f for (int i=0;i<MAX_INVENTORY;i++)+ C3 b3 c* j2 h, s e
{$ S0 c; q/ b0 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. E5 m0 o) ~. T if (!pItemElem)
) Y6 k2 F2 p0 g; |, {; P0 T6 m1 I {
g# f3 d: \$ ~. [3 h vItem.dwKind2 = 0xffffffff;
) O+ v$ O$ S4 _ vItem.dwItemId = 0xffffffff;! N5 K# [9 N. R) K0 M& j0 _# I
vItem.nIndex = i;
2 V' Q# Y# H$ ~ }else {- {& f2 }9 o9 j
ItemProp* pProp = pItemElem->GetProp();
7 }- L# K" E6 L- Q F vItem.dwKind2 = pProp->dwItemKind2;9 k, r$ f, n7 S4 D* u% ~6 n! _
vItem.dwItemId = pItemElem->m_dwItemId;
. |1 `/ t* F/ M8 X% [) T vItem.nIndex = i;
- p+ T( y. n+ y1 O/ @, k. S- t }
# K, V. `, W* V$ }% y2 s; G% ^ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 u- ?9 k- A4 t% g' I }
4 m8 p* }' M% Q6 h1 b- Y //////////////////////////////////////////////////////////////////////////7 A# F1 T' G8 h
sort(vItem.begin(),vItem.end());//排序3 q5 {5 u' p* s" B6 O& y7 W! z9 s! ]
//////////////////////////////////////////////////////////////////////////3 l/ g$ k" ]1 x1 A4 ?! [
//交换& i7 _+ @0 M8 b1 H- F7 h1 N
for (size_t i=0;i<vItem.size();i++)
# O: B8 v g$ x2 L6 y( E {
- x% U0 E( S4 D5 k; H A) { //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& a- ]+ X9 P& D7 l* F% f1 E' [
pInvSort->Add(vItem.nIndex);
3 q1 o$ z6 {! Y9 I0 \; v }
" { b6 r6 u& f; c* g! J: ~ A G7 G BYTE nDestPos = 0;
- j. }; k, k: r for (int i=0;i<MAX_INVENTORY;i++)
3 W/ p5 l# y& I- x' E {
}/ ~' P! z+ C% y7 W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 [9 b2 N, m+ @! y. [1 x if (pItemElem)' k% C. h: z4 c8 O* w" z* P
{ ] V, m, G! }0 }+ z$ w5 }
if (IsUsingItem(pItemElem))& S" y8 C9 a+ d" ?- F+ K* p
{
% `. b) j: @/ Z7 u //这个位置无法放' k3 q$ G% k5 v6 x: r( e
nDestPos++;6 J( T0 g+ U4 q! s6 p
}
$ ^0 T) p' c( ~0 w. Q }
7 U. q& V$ U3 j# @6 E) T) S BYTE nSrc = pInvSort->GetItemSrc(i);) J1 u3 y5 w9 s+ \/ x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: ]7 g1 ]: d3 f7 t+ Z! V if (pItemElem)$ Q# K- q( G9 O$ S& B! U) ]% B1 X1 J$ P
{7 n+ x" Y0 o7 |& h
if (IsUsingItem(pItemElem))
' Z( F; b* `+ L7 j* k4 S {; e$ U7 p% e5 S: g( ~1 R
//这个道具无法移动,跳过1 n1 H7 G! F* { V: j0 Z1 ]5 a
continue;; o' o& U1 ]. U' w: G4 @: r
}
m9 }2 s( u7 G# i4 ` }else{& ^; n0 w' A( I" n& }
//空位置 不用动# ?/ G/ T; [# w1 j
continue;
\+ U Q* l% ~: i }
6 X2 x8 }; I+ k( R; U* r* L3 J8 v+ l+ ^ //////////////////////////////////////////////////////////////////////////
2 C6 p! c! b4 c# j4 i //开始移动
' z3 c2 r9 n- C' G& g3 M if (nSrc == nDestPos); x$ C* Y+ Q9 Z: L$ |
{1 |/ i( W. i' r, y5 O
//原地不动) f; V" v+ G2 P/ |! y
nDestPos++;: s' w0 q' n! v
continue;
, P/ T. l# z9 T( x4 e x8 y7 I3 K }" E" X$ H& L+ p/ t
pInvSort->MoveItem(i,nDestPos);
/ w' M8 |! C Z! E6 R g_DPlay.SendMoveItem(0,nSrc,nDestPos);, I! A/ b% t3 J; X" B* E) f
Sleep(5);4 b7 F7 }/ `' k2 S1 j* @* @
//Error("移动 - %d->%d",nSrc,nDestPos);
" f. V( W- j0 ~$ V8 x/ O5 S2 ]+ y nDestPos++;
" ^, F# G0 j5 l; g0 x$ M. I }6 z& O+ Q# L7 J' K: `: S
//取第一个元素的信息
; Z+ |% J# V1 c- E! K( }; y( W /*0 ?. J* Y0 U B& `' ^: [6 s' Z' Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" t7 p4 I1 Q) m# V) ^% x+ |4 Q {
; a. Y0 U- V% c" H- ]2 S, }6 E Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, |5 b- K4 p0 x$ k% K) R g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. w& z$ ^, b: H" F& G& J
}
: T! ]0 Y1 b$ s) h1 q. N */
4 C$ Y2 q: m/ E7 C8 ^5 k //////////////////////////////////////////////////////////////////////////( C& _; ]8 G8 A9 \# {( |. w1 t! I
break;
5 \9 d: `! g6 a" d6 ~0 d }) Y8 l9 G" w( L& J t
}
W7 _9 W$ ]; N. J1 _0 {}! s8 m1 |! ]% g4 r" c& [
m_wndMenu.SetVisible(FALSE);/ ^9 g2 N8 \" } b; J
: w' c5 n) Q& Y# h W, d) P8 b--------------------------------------------------------------------------------------------------------* q3 _6 F1 F _) t8 b! D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 @! H! g i: ~) p* j8 c' X7 Q7 {0 F{
" H4 F4 L# o; |BaseMouseCursor();
0 a+ F2 D( E: f+ x2 S7 P}
0 D3 W- M% n# O: `* C" q% o在其下添加:! B; W: X& A# P
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 `; C( T' F5 i, N{9 k9 l0 _0 `0 T/ C1 L q/ e1 b
m_wndMenu.DeleteAllMenu();7 d4 o6 I' ?4 s6 Y/ g# B
m_wndMenu.CreateMenu(this);/ a5 b- Q2 y& J) V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: f: |+ E- z8 s' k: O
3 l: w! B1 o7 F1 J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 X3 G i A4 ~) g) w" Y7 W{! C! q# T' I8 {
//P以上级别才可以删除所有道具. T4 j$ w# i& D' K3 p) ^4 V/ w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 x+ R' j% J/ }$ H H( T
}
+ n4 t: l8 X2 Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) e$ c0 S C! k8 G2 ^5 U) Lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ v' b3 Z+ [7 m( V$ o3 m) |m_wndMenu.SetFocus();
+ x% B3 t3 I1 o4 D. q: B7 C& M}; @# A8 i3 ?1 k& S( t3 h
------------------------------------------------------------------------------------------------------------1 d; n3 H9 ?% o1 n# n- K
*************************; _( r5 i, @4 G) [! n
WndField.h文件
) n6 P& @4 [# g5 b8 s7 F*************************
/ j2 p- g3 ?0 ]% m搜索:BOOL m_bReport;2 M" c) o) ?& M7 n
其后添加:
( ^0 A; ]$ V5 P- x2 pCWndMenu m_wndMenu;
2 }4 r6 ~* T. U( o+ t$ ?) A搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 i& y5 e! a, S8 [ g* ^
其后添加:
1 l* p/ N: d) \/ S8 t. X" vvirtual void OnRButtonUp(UINT nFlags, CPoint point);$ L1 v' _7 ?1 a2 P# E/ d8 C, `2 V0 _4 n
A, G* [" n/ {) Q% @9 ]7 }
/ h. L% b {8 h |
|