|
|
源文件中_Interface文件夹下WndField.cpp文件; W" @* i- i1 k |9 ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ G4 m( ?1 y$ N% j) a* Z( w( ]1 V+ V% J' {
struct sItem% V R4 C8 q% ]6 q: G1 c; i2 @. W4 c
{
) R% k# L( H1 X! }( U- ^9 G I2 jDWORD dwId;
, T2 Q( F/ q% b T4 r3 x# _( @DWORD dwKind2;
/ G( d* j! C0 z3 J6 m7 [DWORD dwItemId;
( ~) y) M& ^6 Q9 W6 DBYTE nIndex;9 G) F# t; C* Y% ?# i! O
sItem(){* O) P% j4 T0 b3 B" @" h# K& ?
dwId = dwKind2 = dwItemId = nIndex = 0;# s$ G& L8 v( N' l
}, `, U3 F% j) m6 P/ {' u, `& b
bool operator < (const sItem p2)) Q8 M' u" z: M9 X' q8 n( B5 Q
{
5 h/ ^0 G/ j6 Z- O& j5 m if (dwKind2 == p2.dwKind2)
6 [; p3 X5 s3 T {
4 l' j- K, m8 R( Z% N" y/ C return dwItemId < p2.dwItemId;' e5 B0 D! ^- g
}else{
1 u9 p, m2 V s( h# Q return dwKind2 < p2.dwKind2;8 K$ c# ]% b: e# u( H' H
}
6 c2 k5 C+ M8 t! n2 O}
6 ^) U; f5 J, T# t& s};! |/ F: O! |+ _: ^
class CInventorySort
1 ~+ u" B5 f$ l; X6 `# s7 j{: {: ?" v9 k3 P8 h. E1 e7 d
public:3 H8 V$ E" g5 j
CInventorySort()
9 i7 o* M7 w9 Q$ b* |% s{# b6 D1 @2 u. A2 i Q
m_dwPos = 0;
; D2 M ^ [3 i}/ `- d; I0 d9 Y) s- J/ ]
~CInventorySort(){}8 ^8 n7 t) o# G: B! ~5 m
private:
8 D- a* I) `1 V+ [9 h; o* xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 z, t5 G$ d) L$ o0 V0 CDWORD m_dwPos;
+ z9 P- v' B8 C* Ypublic:8 G0 O. A! O. y& ^+ u3 m
void Add(BYTE nIndex)5 U* e Q9 }) W" ^% O
{
; Q4 g% ^+ }; g- I$ T if (m_dwPos >= MAX_INVENTORY)7 f8 [% ?. o3 Q5 E
{
9 Q+ d7 j2 P* g/ r; b return;
: h% x/ b: o( o! {0 t }! Y }% l2 @$ v% p" y1 S4 _ Q
m_Item[m_dwPos].nIndex = nIndex;
) R! W8 e7 u' c8 N m_Item[m_dwPos].dwId = m_dwPos;
4 ^+ r; }! d, n4 |1 K m_dwPos++;
) [. K5 Y& v; O. z* ]" E* {}1 d9 {, ~$ o: q' y$ Q2 y7 c# r
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ @6 M; ]" h4 |1 q
{+ o$ L$ K9 x" M/ ^
for (int i=0;i<MAX_INVENTORY;i++)6 {( @/ w# O' Q$ p, a2 x F
{8 U3 ^. K( v; F. J* n: ^5 y
if (m_Item.dwId == dwId)
6 ]- _# N4 y$ w {1 `' N U6 z6 h M
return m_Item.nIndex;( ?1 B# i+ d( H7 u
}9 H# f& a# ^0 n0 s6 P
}
( i- ~! l4 u9 I2 S- }0 C9 ^ return 255;, S' `' x3 @1 x7 x& `4 X) |
}( |( W% K1 u3 p" c
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 N% E3 M6 Z" e2 Q3 I. J3 ]{3 a3 o/ R2 G/ ] }+ d' R# L
BYTE nTmp = 0;
( H- B A: G$ H4 I2 C2 v' P bool bDest = false,bSrc = false;! j3 b2 W4 }" L7 y0 p- b
for (int i=0;i<MAX_INVENTORY;i++)6 c }( X% d T4 D* {. y5 x' Q) }- I
{' z# O3 f U) D
if (dwSrcId == m_Item.dwId)/ ~$ B' s( x% \' y
{4 [( O9 F+ A* U( X {; O8 Y3 _
//id相等 则 改变对应的dest和src
1 o z4 z" o- \! k nTmp = m_Item.nIndex;) V) [8 y% i. A* W3 c* b) A
m_Item.nIndex = dest;) \0 h( z" L9 }$ Z( c1 f5 r
}
2 e/ d* f- h- ~1 M2 v2 t4 n. f }' I/ s% Z2 h+ ]
//临时数据保存完毕,交换开始' o- o2 z! R" s, d
for (int i=0;i<MAX_INVENTORY;i++)
' O5 A, G5 a$ h! F' }( y3 } {8 {/ {7 t- z& I
if (dest == m_Item.nIndex)
7 F, A8 K# ]' F8 k4 x9 P* t# z {
) @$ S0 i+ Y. q0 ^ //id相等 则 改变对应的dest和src+ t s0 u* \% _9 w: P& ^) Z) T# M
m_Item.nIndex = nTmp;) Z8 i/ l) p0 k0 P9 m+ |; R# }
}
; G8 [5 ~6 x3 L5 C }
0 y' |( [0 j; p: v; k% ]}1 I4 W& H/ e1 j+ |; X2 X8 g# w
};( [) t& {' Q& z3 w+ E
-------------------------------------------------------------------------3 Z" _3 ]4 U* I: o& _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* q8 \* d5 E5 t, ?搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* |& i, D5 m9 \. ]2 C) p! \! t紧靠其上添加:
9 H$ }- A: r. N& t& H6 @if( pWndBase == &m_wndMenu )
3 H7 }5 W, c: L) \4 x{
. k% H3 T5 z1 A+ _! u# J; G) T switch( nID )0 o. P; C6 ^$ @+ O; g" ^0 w- A
{! {" g _( [7 x9 \6 U0 Z
case 2:
) G# {5 |# W" g, j+ U2 L {7 Q- h( Y, H9 A, a7 [
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 u% w6 G) u( y/ P( P% n if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* O* y: Q& A0 F% f" m {
: O# \7 I% e$ t7 t, a- `" P break;
8 d1 s6 F* N1 [$ y, A$ d3 [ }
5 `1 r/ I' w, ?" g } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# D' L; r. w( m! W( o2 j
{! d+ _/ X1 Q( u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- N8 V6 F: E& d3 q" U7 O& K
if( !pItemElem )* t, T6 G2 p4 D" H
continue;
- ^( f. ~8 S) W' N if(pItemElem->GetExtra() > 0)
6 K7 k$ N6 j3 ~* P+ r R3 E continue;- v! j+ s6 g# R( m) G% y) o9 v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& q* C* B: O; X! T* L& q% ~, l continue;
' Y8 b. ^) e6 A+ [8 B if( g_pPlayer->IsUsing( pItemElem ) )
9 n# ]- ~% ]7 k3 Y! l0 Q% C continue;1 @+ G. s r7 c0 P" y
if( pItemElem->IsUndestructable() == TRUE ): h. x* t3 ]0 v3 T, y9 \ Q a8 t2 ^* A4 [
{
3 D8 _0 |7 e+ ?5 B6 K: H) f4 {- e g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 A% s( K7 p6 ~! B1 G( Z) r
continue;( p& M5 M6 Z; U, U+ J1 j6 }# ~# J
}+ ^5 `! M+ q4 o* Y; [) ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! l) ^- u+ g. ^" P/ |+ i }
' b P8 @* D% A; D/ Z( [ break;& u+ y: T; J p
}
, `, u: ~( y! ^( _ case 1:: ~9 U) Y/ }2 c; @6 ~' R* t: @' r5 U
{% ^: H" x, H% U! T5 d* E
//整理背包0 T @& O! q/ f& E! {
//////////////////////////////////////////////////////////////////////////3 s) n) d( G. C% e5 i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! j- g5 N* C1 \; u% a
//////////////////////////////////////////////////////////////////////////4 p# J# z) Q$ V& H1 f
//////////////////////////////////////////////////////////////////////////3 ?; R: i* S. b; s+ ?
CInventorySort* pInvSort = new CInventorySort;3 o% c8 D. Z# }6 U/ j
vector <sItem> vItem;2 M% y3 _/ g) ^; e
vItem.resize(MAX_INVENTORY);//初始化大小 x1 X' g9 T9 _1 e/ W
//////////////////////////////////////////////////////////////////////////1 P+ a6 F* H T. @. ^/ Z
//填充数据
& L: T$ P6 [5 n* f h3 M2 {! L for (int i=0;i<MAX_INVENTORY;i++)- O7 @; V7 R3 R
{
4 [8 \( y4 W/ k- _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- R; c& F. C3 e if (!pItemElem); `: b' J9 R/ C$ a" w! I4 j$ q
{, [5 r; j# U) j7 I, |8 B
vItem.dwKind2 = 0xffffffff;5 O* K' r* O' `! c& e9 x
vItem.dwItemId = 0xffffffff;; C. r ]- L# `9 U
vItem.nIndex = i;
: r. I2 O( [# Y6 C" q H }else {/ _" R! G, _* C! H. T
ItemProp* pProp = pItemElem->GetProp();. ~: \4 t2 h+ [8 h5 m
vItem.dwKind2 = pProp->dwItemKind2;3 r1 M$ u$ d4 c* z$ Z/ a
vItem.dwItemId = pItemElem->m_dwItemId;7 R9 B9 |. L2 j( b. l2 H+ T8 V( {: y% D1 u
vItem.nIndex = i;
- P9 ~2 t0 \: p" H }
* ~5 m: @: f* {, z0 X1 S //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' o2 @) L+ c5 g
}: b- z8 C) r9 k, z
//////////////////////////////////////////////////////////////////////////
% a3 V3 j: d. P% {8 x, c3 B sort(vItem.begin(),vItem.end());//排序
* r9 ]( e) a6 k8 k" _. l* a //////////////////////////////////////////////////////////////////////////4 m& P* O; c' h! Y! u' [
//交换# n7 B5 [- n. `! s; H7 t6 V6 e( E
for (size_t i=0;i<vItem.size();i++)9 u4 l: P, W. E6 Z4 l
{
1 A7 L! r: l1 p* ^' I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; _& R: H q1 ?( Z# y9 b
pInvSort->Add(vItem.nIndex);
6 R' Y0 Q7 D2 g9 w) I; W8 J9 D }" N n! L5 Z" i9 D* r& J0 O' f
BYTE nDestPos = 0;
# I3 m, K3 ` K6 B! M- ] for (int i=0;i<MAX_INVENTORY;i++)' A$ z6 a* D) [+ U
{
a9 m' I1 l9 q/ h5 Q* j1 s# D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) }+ W% i2 S: L if (pItemElem)
: @4 V. h' M% |' L1 e7 ` {8 g8 |- T$ r1 m x/ |6 [
if (IsUsingItem(pItemElem))9 l/ e" E, z- c# |4 S4 Q( u
{
. L+ p% s$ f* l6 H3 x$ U //这个位置无法放" k8 A1 p( d. E3 b$ G2 u' y
nDestPos++;) W. n* R$ _3 M+ N4 a$ o* @
}1 n7 Z' O* _. E: v
}- o8 E7 t3 i) L+ s j3 B! t; }
BYTE nSrc = pInvSort->GetItemSrc(i);
& N# {) X2 h, m1 K5 v; ] pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 u3 {, G8 T2 j+ Z/ n0 P! y6 Y
if (pItemElem)/ w; Y: m% g, v' ]* u) }
{ y! s% {% @1 ~9 p' b0 n4 ?1 y$ i1 ~! v
if (IsUsingItem(pItemElem))* b, _* T, v9 v2 ~
{
% e* p$ l0 F# |! c7 Q' |5 k //这个道具无法移动,跳过
3 Q: y- ?" l7 Z# t continue;0 m; x! {3 I! o% V2 I6 A# S
}
1 r: j5 H$ g: j- A [% E" Y/ K: G1 n }else{7 U) S. \; {% G7 |
//空位置 不用动
- t7 o8 z# D( [; A continue;
# D0 Y6 \5 I) F }" H8 T! r- i4 |% c3 s+ T6 H$ U8 F4 O
//////////////////////////////////////////////////////////////////////////
1 P1 D0 M0 g* L$ Z& O //开始移动: u! R1 I1 C4 Q$ m; P5 a" y' K
if (nSrc == nDestPos)1 \9 h! H# f/ N6 Z
{5 I9 W4 {2 |2 f( _) s
//原地不动
' `7 M% o8 r: G U nDestPos++;: |' P; Q3 h3 H. K. U; u% Y" p
continue;
3 ?. T' z; j( b' U; p }* o- q! r |; Z; ?# \
pInvSort->MoveItem(i,nDestPos);
/ ~7 {3 S- V/ p- ~ g_DPlay.SendMoveItem(0,nSrc,nDestPos);: T3 M2 ]7 Q$ l' @% Z s
Sleep(5);; M; M/ }8 R5 U! k! }9 N0 d
//Error("移动 - %d->%d",nSrc,nDestPos);
- C0 z) s% }7 T5 I" } nDestPos++;
& p9 p4 N" \ m! [5 v- U1 n D1 {: ^ }
& T! M( L% |. u" I. d0 x6 h //取第一个元素的信息7 V/ I/ p* m- w! e# H
/*
# G! _7 N# u( B, J$ G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! U& I$ u$ j4 | { ^- }& L* s# Y& A
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* X! \( b! g2 V$ ~
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ a0 o( C9 ?( p/ B/ b
}
* X6 D) [5 X. p3 _7 C */
: C$ G" L) ^, {# l% v. D. S //////////////////////////////////////////////////////////////////////////
8 k! M: u7 l, o break;* S G$ _! V$ U; p* d* A1 i9 l
}
' [- c: L. v6 a, {1 w' N+ ]) M }
' p1 q! o0 i0 [/ ]3 {, ]# |}
: P' O# y- h: O* Tm_wndMenu.SetVisible(FALSE);
+ }* i0 }" r! m. G" ]3 t* Z' Y" a- G% J, u$ b8 r
--------------------------------------------------------------------------------------------------------" q* J" Y# A5 o2 T
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) u" @: b; p9 ~$ o% |9 ~7 ]
{* Q- W/ {& B! i1 v* M
BaseMouseCursor();1 T6 j$ Q+ @; ~; ~7 W. x8 S
}& Z3 L) w) l+ _- E* I
在其下添加:& ^2 q7 x3 x* L9 t, k5 N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 j$ U, ^1 n1 K7 X9 B{$ ^3 J0 v6 @' B/ T, m$ r
m_wndMenu.DeleteAllMenu();
9 ]$ n( x' @* nm_wndMenu.CreateMenu(this);
5 g# p9 R9 G1 { @9 u O% Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 f8 h/ h( t- _+ O6 ^
2 c. D5 g4 b/ ^' U# Y1 c" M5 Wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ k( \3 D L6 V9 l2 q5 z" a' \1 A{
* C7 H1 L( R( b) T //P以上级别才可以删除所有道具$ q' U# r. e" l/ X6 L6 I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 i4 {; I% Z! _- g/ V& P
}
, a9 V5 f9 y( y o& D4 M. rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 ~0 _* i- J" U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 w6 n' x8 k, r, R/ K8 q: y4 ?m_wndMenu.SetFocus();- E7 \- g9 E& {4 z8 u
}/ O' x* a5 O% `- S* k
------------------------------------------------------------------------------------------------------------
9 d, C* k3 m0 W& j2 H& H, @*************************
1 l+ X1 S% X1 CWndField.h文件
6 d( j- D. O# V$ Z4 d*************************
0 N! B0 Z) v2 w, }搜索:BOOL m_bReport;" i* P" O9 H5 D
其后添加:
. L) [' Z: t0 R" i; ?CWndMenu m_wndMenu;. o5 i' v/ p' v& I5 g
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: w& M6 ]; y8 L# E
其后添加:
5 H2 S2 m6 j7 B% N [$ xvirtual void OnRButtonUp(UINT nFlags, CPoint point);! ]; x" S4 @9 R$ d8 K
0 ?+ l! {7 t3 t& V
Y# _7 I3 X4 N! j+ U! L* s |
|