|
|
源文件中_Interface文件夹下WndField.cpp文件1 j- m0 B( B4 S
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: j) u9 o5 `0 T' T0 t
$ a5 N" R; u9 c- m: I+ Ustruct sItem
- t9 k$ ]" i; L; ]# x' J# ?2 b5 K{
" S/ J: ^) a, O N5 k% z+ x" |DWORD dwId;
8 V8 i. y q5 ]; S+ ~DWORD dwKind2;
. H! p8 I. X# z" [6 x0 g7 }6 H/ fDWORD dwItemId;0 E0 l; e+ D" N& h5 A2 B2 V
BYTE nIndex;5 n) ?3 X; T+ j( ?$ n+ V, }
sItem(){
. r" ]: X3 n% A dwId = dwKind2 = dwItemId = nIndex = 0;
% n) ]& U ]( U}
) n& C! R4 ]5 d3 u' a4 Gbool operator < (const sItem p2)
6 N- m, i- e4 @# H. F{
7 q) E$ `: v" S& ~: O$ |* i- T if (dwKind2 == p2.dwKind2)
# g7 u9 T1 w Z& D1 b; { {
; O* y% M" Z, C2 b7 X, F return dwItemId < p2.dwItemId;
" F* T; T& W- \; y6 r3 J- M' d6 P% F( I }else{
9 i8 G. c. p; @& E' q9 T return dwKind2 < p2.dwKind2;
; r) A( X, D% ^9 B/ Y }
1 V( U* e- c2 Q6 p6 y}
9 d/ {# O, n" Q7 |& D};! H+ `/ h: \: C+ H& g3 g& g4 M
class CInventorySort
% {5 y/ t' k8 N: w+ }0 u" L6 ~{8 W: K* U( ? g$ I. R; a) t8 u! s* a
public:9 ^ G$ s+ R- \( r5 p/ t$ L
CInventorySort()$ l M) a w* o# u& u/ N1 X. e
{
0 Y/ M2 {4 L3 |7 Y7 B8 W m_dwPos = 0;
9 M5 Q9 N8 D2 L4 R5 s9 l}* q2 H6 e2 y4 U& v. s6 N! J
~CInventorySort(){}
* \: m) o t# o" m, b; p! o% Zprivate:
2 a2 A0 X3 f1 ?; q9 m/ r/ UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, |/ H8 q) l% ]6 T" s7 rDWORD m_dwPos;2 l9 I% |. ?: P$ Y
public:& y2 c1 P8 a( x/ a; Y. G
void Add(BYTE nIndex)
4 ] s3 n. c( v% y$ W7 q. {' \{
% ?! }3 G; z/ q. \8 s if (m_dwPos >= MAX_INVENTORY)
4 I1 [$ y6 c$ {9 F' X* r {
$ g4 a7 q w! G+ q5 p9 w; c return;0 ~% n. \. l$ L+ V6 W
}' j) E8 C: a- q: f) S6 w+ {
m_Item[m_dwPos].nIndex = nIndex;6 p* q# C6 E& V) A! l3 f# R3 j
m_Item[m_dwPos].dwId = m_dwPos;1 j- M1 d8 x R+ W4 z
m_dwPos++;( c7 H$ v4 x7 V) |1 h6 ~
}
' ^: R( d7 E8 Y3 LBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, o v! b1 }6 Q/ m$ U* b( W, V
{' w3 @' T$ e6 C8 v0 {( I2 D+ D
for (int i=0;i<MAX_INVENTORY;i++)$ e& ~" W5 p% T0 u0 p' p
{
" I/ U/ I! y- @- T4 Q if (m_Item.dwId == dwId)
A" u2 ?( S" E6 A9 _ n% _2 ^2 M {/ ]( y$ Z X7 U7 n3 Z- T5 c. W
return m_Item.nIndex;) p) r8 o4 c+ F5 z O& t; T2 P+ u
}* \6 s* l5 t, X* v p V
}
. B& f* d' ~2 d8 o- X return 255;" G; b0 S8 t3 S0 t/ |8 L
}# u7 Q' O E% ^) S/ L" s- |) X
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 N8 K0 f0 T! l& N6 J* ]) t+ [
{; y( f, v, I' @ v- C$ u
BYTE nTmp = 0;/ o2 L. L5 \1 x/ V$ k' s$ i
bool bDest = false,bSrc = false;! [+ H* d e$ V3 a
for (int i=0;i<MAX_INVENTORY;i++)
/ {, G5 e7 t4 E9 d {
2 b' I7 R$ E9 } if (dwSrcId == m_Item.dwId)
3 z" w/ t4 S- Z {* a6 z1 l- b% I9 ^. N+ L
//id相等 则 改变对应的dest和src7 ?! H2 u# V' @
nTmp = m_Item.nIndex;+ u7 T H9 [! L6 c$ R# }( T
m_Item.nIndex = dest;, N; P' U; `3 S& S5 x* {2 \
}! a' o. o3 l/ @4 |( D6 y: L
}
7 |! F! l" U' ~8 [$ L$ `+ M# H //临时数据保存完毕,交换开始
! ^6 y, y! l1 z0 N7 F+ T# m for (int i=0;i<MAX_INVENTORY;i++)' i1 M' _) y0 n9 e0 N5 W
{( P5 T2 x5 C4 a/ u. Y$ N' c C3 I
if (dest == m_Item.nIndex)/ y/ v# _: m L& m4 j
{% u% s1 X& x8 A9 D1 Z
//id相等 则 改变对应的dest和src
6 y0 r+ j# m8 i* n# `6 G m_Item.nIndex = nTmp;9 F2 }7 f2 X2 W# k2 @" V
}
& \8 S$ d4 I# [; b }" c7 Q( B0 J. ^) x5 q; B5 c' A
}
, d' A7 ?+ X# r% `& _$ ?};/ \+ Z9 M! E9 f& M
-------------------------------------------------------------------------0 M1 }# q5 v# }2 t7 p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# s2 x8 o5 b+ R/ A' z0 u- ]6 |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' n; @/ _( }4 B0 u6 A* ?
紧靠其上添加:
( O$ K# N. B: @% _/ Zif( pWndBase == &m_wndMenu )! L0 O' E& g! J, }/ p- z) }
{
' c7 r, g, q- m; {9 r' W switch( nID )
* o8 B# O/ S5 C; f7 D: c* k2 Y8 P {
+ i7 y" W( K2 x8 L9 j# z5 g case 2:" Y$ {* M0 i- Y1 b8 s
{
3 C, Q5 c. e; w //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, s( G. x. o a( F3 c' D/ W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 U+ y' V. K0 w4 g2 y) c) P
{
8 l. `) r0 K) o6 k break;
* v5 ^- u9 V" E3 m7 d% B }' j8 ~$ \( {" |4 d
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), T: I) ?8 G- Q* X, o
{
+ K$ q8 R8 [) @6 r2 {! E( Z& Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& i7 s4 P# [. s9 {3 i- p if( !pItemElem )
+ O/ p/ M& y0 A continue;
( K+ I5 A6 z' J+ c$ r8 }5 v if(pItemElem->GetExtra() > 0)( r8 Y D+ e/ t& J7 j- M# X p
continue;" R! ^$ ]4 s- V
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * [: ~, |5 g- B7 u; [
continue;! y& }% m2 u6 W% U% N0 ?
if( g_pPlayer->IsUsing( pItemElem ) )
0 c4 L3 a8 k" D: x1 x# B' I: m1 f' ] continue;% O1 k% n0 x# n
if( pItemElem->IsUndestructable() == TRUE )& y/ u# s& {9 |5 o1 E( l' e b0 I
{
: c1 f8 O! M- Y, z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 u8 k5 r" ^3 [% j: @8 l2 ` continue;5 G2 R; h" u7 V6 U0 G# Z8 D+ I. ]
}
, y( }1 U, e8 P5 p% x6 R6 r2 M, ` D' D g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; _1 J+ T+ k* o* R% a- T
}* J, p+ k/ U' }
break; A: k" i& L$ n
}. ]$ W( ~1 {# ?, j( Y4 q
case 1:
' F; ^" J* W+ P$ C1 ]% B1 a- l {) H9 U/ d! a0 V
//整理背包3 [7 N8 h. X0 P6 S7 v
//////////////////////////////////////////////////////////////////////////' y% q# F' B' S3 _8 o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 k3 |& M s9 G' \0 @ //////////////////////////////////////////////////////////////////////////
; \ X3 }- _* v. L/ C //////////////////////////////////////////////////////////////////////////
5 h0 I3 ?* `) t% D3 \6 l CInventorySort* pInvSort = new CInventorySort;
I3 l% `! U. t: N vector <sItem> vItem;; z# Z& d3 _+ a6 c! `- d8 b% n
vItem.resize(MAX_INVENTORY);//初始化大小
! ]# {, M9 d5 [) k3 M //////////////////////////////////////////////////////////////////////////: T0 n2 B" q& G9 ~
//填充数据, N; W6 n1 E9 u) i$ D
for (int i=0;i<MAX_INVENTORY;i++)8 h( w3 j9 A$ {6 E2 @+ D/ n$ A9 q, e4 I
{
. J/ Y8 i3 A. G M: I; J4 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) w; z1 j% d) G. k7 g
if (!pItemElem)' W( {. `& U. t
{5 W$ x8 V, w8 [
vItem.dwKind2 = 0xffffffff;
. \+ v) N$ R4 x7 ?$ O vItem.dwItemId = 0xffffffff;8 ~/ x0 Y* h" i
vItem.nIndex = i;
8 F& R3 S2 O# r4 g% | }else {" m" X2 O$ G* l2 K
ItemProp* pProp = pItemElem->GetProp();
8 g! ~9 \( Y3 N) ] vItem.dwKind2 = pProp->dwItemKind2;
! K: H7 @$ a& z% S3 ? vItem.dwItemId = pItemElem->m_dwItemId;
( P( A8 P0 n7 U; V6 J) ]2 ] vItem.nIndex = i;. B) [5 B8 v( d8 l$ J2 M5 t
} a9 M8 ^! r0 |3 e5 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 U# u! ^* }$ y. q. `. j _
}1 _, ~: F8 B5 E2 @ N
//////////////////////////////////////////////////////////////////////////+ G% L ]# `; d3 s) t! d
sort(vItem.begin(),vItem.end());//排序$ r f+ W5 n$ B9 V" o# Y" b
//////////////////////////////////////////////////////////////////////////
5 Z5 {, J; c' @* R, \0 D, y //交换4 r* o4 z& w: o1 M) D/ ^5 h. s
for (size_t i=0;i<vItem.size();i++). I' b4 _0 B& r) g( c7 u
{
" h9 @! y% b7 ], H //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, o" p' J! c/ P- Z pInvSort->Add(vItem.nIndex);
& S; w8 j/ I! l* t$ ]3 m }
. o( p7 I) k9 o* g& Q$ b+ R1 ?$ C BYTE nDestPos = 0;) r# `" {; r4 J1 a3 t: T
for (int i=0;i<MAX_INVENTORY;i++)1 s" S. C, u) }
{
. z( I( v6 K8 F) m5 Y! O- i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 c0 n, F1 g7 \0 y* B
if (pItemElem)" J( Y' U' o9 ~( e& ~9 q# j, J
{
3 v) X8 F1 _5 I if (IsUsingItem(pItemElem)) P( f( E/ m( \- _1 q
{
2 k$ U0 _: V \: C //这个位置无法放6 s4 x8 G2 l8 b1 r$ U H1 t3 i
nDestPos++;; |1 \. ]* Z1 l m! H
}
. g" A. H: }: r$ N" R }
i# j. y7 C: L* F% V* a% n3 V0 j* L BYTE nSrc = pInvSort->GetItemSrc(i);$ A; ]# @0 @8 k
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 Q2 ~% T% ^8 m1 k9 Y; l- `- E
if (pItemElem): ^& y! ]/ m+ t; X7 h
{" W' Q- a# l8 `& v, w+ g
if (IsUsingItem(pItemElem))
0 Q+ S8 ~/ C% p0 I; j8 K {
: W v" G: g( D2 U //这个道具无法移动,跳过
" Q! z: [6 a% }6 \% V continue;* r2 c0 N! s, K+ ?) w9 R
}2 a0 R+ v _2 S' J9 a l
}else{
- c! s' |1 F# M$ C) ?7 y //空位置 不用动6 B( c1 F( U: F4 R8 b* P) y5 v
continue;8 R1 Q9 Q0 f( K
}7 W% N" n8 e( G* Z) w m
////////////////////////////////////////////////////////////////////////// J& f3 Y8 K3 M5 c+ G; J2 j+ t7 v
//开始移动
& a8 u, K; x0 a6 S if (nSrc == nDestPos)5 R J; c; R3 R f/ y& ?
{
1 N: y- B: P. a7 J/ M1 |; O+ D //原地不动, Y! A" C" t& R j, c
nDestPos++;, C y( f$ r9 ^- z' T3 z8 D5 K
continue;
/ s: c( O' g, @. j2 f0 w/ M6 B }# V& z$ K. c% P, t- E
pInvSort->MoveItem(i,nDestPos);
4 } S8 {( u! k1 g# P- H. ?( m g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ h) v8 d* a8 l7 K Sleep(5);
3 a+ z; E, `( {1 s //Error("移动 - %d->%d",nSrc,nDestPos);
* R2 r8 G# @7 a) h( Z0 M: y" s nDestPos++;
' y/ f4 q# U9 e7 J' l/ M }& N0 i' m, t8 k! g, J+ v8 s
//取第一个元素的信息
: q/ Z! I+ U! V J& U {+ v /*
8 j. l6 b0 s2 t# H( L7 V3 {9 s* Z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
_7 |) J3 u9 b! E5 E, k. t; w( n {
, ?; p& M8 X+ Y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 J. p) a5 w: d! D9 _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ ?, T9 p5 @, u0 _( p) N: s! U }7 [8 f1 t& o0 f u
*/ M: O& | N$ ?* c1 }" k6 Z5 d
//////////////////////////////////////////////////////////////////////////
6 Q( w7 \+ W ]& d E break;5 c1 s5 p; r- g4 ^/ d% N6 p
}
2 `4 O: p& J, O" i }
# v' x7 X! ` Y5 p6 C}/ z( Z% Y# O4 h! ]6 ~% q
m_wndMenu.SetVisible(FALSE); @) B! p$ f7 b, O
8 j, m7 T( }9 U
--------------------------------------------------------------------------------------------------------/ s' W- m6 U5 V, o4 j* g _: w
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( M9 ]2 @8 s+ `' N7 S( `
{
' v j7 a c; ]/ R2 |$ `& eBaseMouseCursor();
$ y5 R( _5 q( T7 ]) ]* i- s}' | J+ Q8 d0 F1 ~) i
在其下添加:
# E+ S& k3 o- I: y4 p9 _! w. ]/ Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 U' L% J5 c# M7 o
{/ d7 M; a8 l3 D, |- k, Y4 |! Z
m_wndMenu.DeleteAllMenu();
9 C$ s R3 _$ B6 s! I4 S' g7 w' Nm_wndMenu.CreateMenu(this);
+ ?1 ~6 g' b3 nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% P$ h0 `+ x7 l: R( c$ X1 E( Y+ N' T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. a: x$ |2 M5 P- W+ z{* K, { I0 e$ L" H. W1 x# e
//P以上级别才可以删除所有道具' G- T/ D x- O) |" I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ I5 {" I% x) M% P}
7 Z/ F, L k: pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- l6 N. n" ?( b# ~- d9 D. jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, v" d# G/ h3 k9 Z' Mm_wndMenu.SetFocus();7 m0 T. \. Q' r8 q7 P" o# G q
}2 V) o% }" E$ z
------------------------------------------------------------------------------------------------------------; |; L; t" [. j6 W9 E1 ]' t
*************************# k2 t9 s7 e$ J& f* f5 [
WndField.h文件
& i ^ ?3 Y& W# Q*************************
; y% ^1 a% H/ U( S) U S* T搜索:BOOL m_bReport;
4 C# G0 F$ L0 u( A; t8 W其后添加:# ?8 f; c. n9 `4 _# B
CWndMenu m_wndMenu;
} R# j+ X" p) R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 i. g/ a0 V6 K9 w! w其后添加:' J$ {& j" P" F' d" r# i* J1 p
virtual void OnRButtonUp(UINT nFlags, CPoint point);: X3 d: C3 _' w6 v0 X- h* H
8 e5 O1 K7 u( _8 {7 O
5 a- K Y% s4 Z$ Z0 g* Y |
|