|
|
源文件中_Interface文件夹下WndField.cpp文件- j! {0 E0 W6 {: I. U
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' {5 t- a0 f q& A J
; S3 j3 m& x, v9 Vstruct sItem0 }0 V( Z) Z: r! g, U: ?* @ R
{+ s2 T' p. L+ g' r6 N+ @
DWORD dwId;
0 |, A# A: b3 y+ q$ R/ [% XDWORD dwKind2;
( f) n# N3 c7 [2 X9 d) vDWORD dwItemId;
- z8 [# i& ^. u/ YBYTE nIndex;
* E% z2 l. v" s) S- L isItem(){
% t3 u' _) |! n) @( B dwId = dwKind2 = dwItemId = nIndex = 0;. N9 t( Q3 `, Z6 R
}
; K( h* F8 f: Cbool operator < (const sItem p2)
" B' k- \. G+ I{
0 h+ W; Y7 d& j2 V if (dwKind2 == p2.dwKind2): A" I7 A5 O, W) n3 q
{& u- c: n. q, _0 l
return dwItemId < p2.dwItemId;
8 ]! O" g9 I- c- l. { }else{
. |& d; J* q/ V3 ?/ T9 I return dwKind2 < p2.dwKind2;; D+ m" m) e/ `( Q, X) T+ z
}' Z2 n& x; [) h% h4 H, }3 E! d
}" X& r# J9 q2 r, K; I
};
, h, a. n3 v" g/ a8 eclass CInventorySort% Q) J t8 O: X
{
( J/ f7 g1 d, {! N( ?public:3 p& M$ R/ Y1 u) P
CInventorySort()
$ b5 k/ P7 W( a6 L+ u& C6 \{
0 O# t5 h2 Y+ \3 B5 @" q& n m_dwPos = 0;7 B9 L0 v' M5 t! N& f
}
; D% z' E* S$ e3 J+ y- J~CInventorySort(){}
- ~5 p" n9 T; k# d$ d( aprivate:' e( I0 {7 i$ p. [4 Z* P' j1 T0 _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ R1 T& e4 F5 P# BDWORD m_dwPos;3 I# J/ N$ c( G8 L# J1 R; ~' s4 Y
public:( X2 I5 [2 U+ N
void Add(BYTE nIndex)
5 q- ]# d* Z; h{, P, n7 n: }& v; x: j
if (m_dwPos >= MAX_INVENTORY)( K* Z( p; c4 b) {7 m) U: {
{
7 r/ [- W3 p5 ~% _/ v6 Z return;4 e# K0 e+ V+ M
}
# i( ]5 n% Q: C( H. M7 C# t8 U m_Item[m_dwPos].nIndex = nIndex;6 f* ~& U" B+ {7 I2 B+ v: |% T
m_Item[m_dwPos].dwId = m_dwPos;
8 ?5 g: A1 S* t4 I: _# j m_dwPos++;
+ T" l! e% s$ a- ^6 }}5 u/ p6 d' @" m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 ~7 H( G1 z4 R" }
{3 C s" K" q0 V( |
for (int i=0;i<MAX_INVENTORY;i++)# p" I, c# O- \7 @: k( n" i
{
1 v/ D& w& X+ s& g( D3 z: U1 C3 A$ h3 o if (m_Item.dwId == dwId). X/ r7 ~" @: [* K: y
{* w6 P5 r4 o. S3 M& |' R
return m_Item.nIndex;# V+ _$ `* h. E4 u8 K
}' ]* r+ o u% x+ u% \7 \1 w& W
}+ x: \( [3 M8 f f: {1 L' B4 Q: w6 ]
return 255;
1 P& ]& q3 z! B}6 W: ?* u+ \9 t" \8 s! n' W4 H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 P7 ^. m: h' K9 o
{
; S, L1 A U' m4 f& m! W2 ? BYTE nTmp = 0;/ U- U X" q4 ]& s9 E
bool bDest = false,bSrc = false;
$ R/ a- {- c( ]4 k8 ^2 a/ X for (int i=0;i<MAX_INVENTORY;i++)
, X6 ?( g7 i% \% _8 W& u {( p% `, N( s: Z3 c$ C. O
if (dwSrcId == m_Item.dwId)
& i# K3 P# s" {8 U2 X9 F$ _ {
/ s3 |& x, m3 u/ Q G5 M3 l //id相等 则 改变对应的dest和src
& U- w9 J& f# E' _5 V( N nTmp = m_Item.nIndex;# p! c0 \' v& @& k& L
m_Item.nIndex = dest;, U$ ]& f& _4 h
}
, l' [1 w2 A) H7 V' o1 W9 \ }
- W$ P# s3 Z1 x, B% q' G$ \ //临时数据保存完毕,交换开始
; w5 w2 i: m3 d m, U for (int i=0;i<MAX_INVENTORY;i++)
( |5 e# N' W) E9 g {, U! l) h5 H, g2 Q1 k3 s
if (dest == m_Item.nIndex)
; V; W6 I; |# L9 m3 G {
' m, `( T* N/ d0 ^6 n* l4 L //id相等 则 改变对应的dest和src1 a( T4 N# E: u# x+ t' P
m_Item.nIndex = nTmp;! x; c3 K+ c8 {* W
}
: i: z; D2 } h2 ^# L } ~0 j" ]' r7 ]
} G! b. K* C, v) z# E! ?) w- \7 i
};
# E; \ j8 Y; b- T-------------------------------------------------------------------------
; O) e% O4 f6 W A/ V4 t依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 m+ O: g' w/ y1 v3 N搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 J1 G; ?( L" o紧靠其上添加:
/ a! A8 P- v% L0 I; B& z& Pif( pWndBase == &m_wndMenu )0 W; b7 z- K+ O0 w$ w
{
0 U2 W b$ r+ k( l' R" V9 ?: k switch( nID )- r) H; k, X/ H8 S1 u- `6 ^: F
{
! o/ i" `8 o3 F) ?9 x- `; i case 2:% [; _' r9 T2 I/ I
{
c, @; P/ C1 Z! g7 ~1 e" I v; d //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 o' {& A' K" c6 E9 t; h% P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 r+ k: z& {' f- w% F7 w1 W' G {
( h% d7 x; s6 [ break;+ b4 i2 \2 x7 [( @
}, G" g$ T9 C0 k2 n
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) Z& g: }/ V" L s" F/ y, ]
{
" U1 \0 L, L$ I* B/ N; z4 u7 B( ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ m; S( T$ c# P+ P6 s
if( !pItemElem )
: O5 C; X/ Y, w7 V continue;! J6 [3 S) b/ e
if(pItemElem->GetExtra() > 0)* j9 _9 I1 l1 ^; I
continue;7 ]$ ^( g% }$ x3 f, U1 r! H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; N( o& b7 Q: u4 z8 W6 c
continue;
9 c n8 W/ r# O/ B' V3 a( X! T if( g_pPlayer->IsUsing( pItemElem ) )/ ?! ^; d7 }, C6 i
continue;3 W" d) _4 e0 P' J4 ?
if( pItemElem->IsUndestructable() == TRUE )
, e) S( Q$ N; b {
2 [/ q& a+ w7 M) | g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ L* l. D. v" r( q7 H4 _3 k continue;0 ~6 S! {* P5 b. B( v$ c
}
: i6 l. w4 z: Q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* \7 W! [6 e& G" o
}, n ]- h5 @+ c) c
break;: |6 y$ K9 r: g7 `* X
}) Z; P" J# c! A/ [# h2 i9 [
case 1:
$ R7 C2 v* T: f* f {9 m$ c9 @$ E( r3 I0 N3 M# y1 O7 Z
//整理背包/ C, t' H" D5 F( J: Q
//////////////////////////////////////////////////////////////////////////1 E. H+ R: c1 k, z7 _
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 u( r- I6 E" E8 o% N* t* Q //////////////////////////////////////////////////////////////////////////: ?4 q/ Q. ~7 P/ n$ q7 ^; j0 ?
//////////////////////////////////////////////////////////////////////////
. B8 \. a. O* [" E2 E+ P9 h- U5 m CInventorySort* pInvSort = new CInventorySort;) h' l* H4 Q5 f4 w
vector <sItem> vItem;- m2 ]# L7 s1 E4 \7 m* t
vItem.resize(MAX_INVENTORY);//初始化大小3 G: `6 T9 z" }0 m
//////////////////////////////////////////////////////////////////////////
$ a" T! ^2 Y$ w" _ k" n8 J6 \0 u //填充数据
! l; A2 Y$ z' @" \- q% g& A for (int i=0;i<MAX_INVENTORY;i++)8 G6 ^ ~! O; w5 o7 b
{
2 J! o% G) H8 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) m6 a% t1 ] B" K E
if (!pItemElem)& V1 d& T, Y! Y9 y% j) g: I
{
+ u$ ~5 Q. v+ ^- M3 ~0 Q8 ? vItem.dwKind2 = 0xffffffff;
2 U2 W$ F; Q U: g) q3 j, s) G vItem.dwItemId = 0xffffffff;
" |/ l/ {6 o) H3 C e) }! z- y# ~ vItem.nIndex = i;5 I( k& ]- e0 v6 N. s
}else {
" ~# Y! F$ }' O# }0 X" g" ] ItemProp* pProp = pItemElem->GetProp();
% R' _8 L4 m! B. y* q vItem.dwKind2 = pProp->dwItemKind2;
" Y7 R. `2 w1 m- b3 @: c6 s8 O vItem.dwItemId = pItemElem->m_dwItemId;0 o e+ h' t! Z6 o
vItem.nIndex = i;
- L! m i3 V( R; n0 b! m }* D4 P0 s: w: ~/ w
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% F M& J( }' F8 {! ^! D
}
4 j0 z8 v: U8 I8 ]2 Q* c/ e6 j$ r //////////////////////////////////////////////////////////////////////////
2 e9 c2 l( s5 W0 J* _! P( q$ _ sort(vItem.begin(),vItem.end());//排序0 }! @) H8 ^* f' l3 n: l; U
//////////////////////////////////////////////////////////////////////////
6 k! @/ \+ S7 a3 o: d2 \# O* \0 V //交换; j& j% ]% T! {# S4 i
for (size_t i=0;i<vItem.size();i++)) \* U+ a4 m3 n/ `& k
{2 C: ~9 _ U! i$ v( c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- q/ H: B$ K5 A, w! h( g' L5 q2 P6 z" Z
pInvSort->Add(vItem.nIndex);3 w6 O3 z7 b6 ~
}. ^; c" u0 d7 i( |$ _( x2 C
BYTE nDestPos = 0;0 ~( u3 R+ j. y* [
for (int i=0;i<MAX_INVENTORY;i++)4 P5 \8 Z- k& u6 q" u0 N
{, K" ?7 t0 i/ R2 W2 V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# N3 X) b1 [4 w( l if (pItemElem)
( I+ H0 @9 X2 }- K {
0 ]' R, c# C0 Z4 ~. n if (IsUsingItem(pItemElem))" ^& w& b6 a5 `4 ^9 i
{$ _" {& x4 S8 I+ B% i! J( C. E/ w
//这个位置无法放3 R0 ~8 u- y0 M5 }
nDestPos++;
' H3 N7 X2 e/ M# t0 N }
2 l+ E5 s2 D4 t' [' o } d# _3 e8 p5 e0 c o
BYTE nSrc = pInvSort->GetItemSrc(i);
, O; {( z& c# j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 }8 S1 ?7 s5 {% s7 i3 s* X
if (pItemElem)+ L# s+ D1 d; ^7 v) ?
{ N1 q3 g4 t2 ]7 d; y% r5 D/ J
if (IsUsingItem(pItemElem))
$ q3 H* Q: Y- T/ M$ R! t c% p {* I. R. `8 _6 G6 r
//这个道具无法移动,跳过
5 t: g- N7 G9 t# M! F continue;
# T6 Q4 ~; k% M% ?9 A }
. Y% p6 t! T9 B6 } }else{
; K q5 }% Z" ? d //空位置 不用动
8 G% B/ J8 _: O5 J! E; ~+ a% m+ _ continue;
6 G* a# V3 t) s* X }1 K& |! D* t: _0 N: |3 Y
//////////////////////////////////////////////////////////////////////////% F) n7 @* D( _
//开始移动. z2 V7 H+ D0 h0 a
if (nSrc == nDestPos)) `) Y [3 ^5 L- ~
{+ {$ T: R; K0 u ^0 `' R
//原地不动4 K* D. ?4 S1 u) B
nDestPos++;
* J% X0 B+ ?) K) V& j continue;
) W5 X% ] z" }* Q9 l1 ~ }
1 A# a5 {2 w3 }0 _0 R; T6 d. X pInvSort->MoveItem(i,nDestPos);* ~8 }+ n/ ?! m! x
g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 q. K% m4 N% M' H5 H
Sleep(5);+ A$ R7 u* w" Y; C+ _# C: ^5 o
//Error("移动 - %d->%d",nSrc,nDestPos);* x$ ?# z8 a0 d
nDestPos++;
& y2 t# F( {# i+ d$ Z }9 o' _; u& `& A7 a, j! ~5 S- U: j
//取第一个元素的信息
' R% r. {! X! P" z. W$ V' p /*
$ y! Q/ z( O* S$ G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, H% _' C' }$ z: w {9 o! A% D6 w3 i) P: `
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 x6 S9 q2 P: Z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: }4 B8 ~- f9 K0 \& m4 `
}
5 x3 C% G. ~6 x3 s# T9 u9 x */
" c' g- ^% j* e" S //////////////////////////////////////////////////////////////////////////: [+ G1 w: P. x( J
break;) R5 i! z9 f0 G t5 P4 e
}0 i( O# e1 R# [7 n
}
9 g3 R3 l0 z4 P: Q2 ]}) Q9 m# N3 J& Z+ G9 _9 b- M
m_wndMenu.SetVisible(FALSE);4 S/ V9 y4 h; @; k/ X
8 a$ z( Q/ `# H0 j' s2 B+ b+ d--------------------------------------------------------------------------------------------------------! p% e4 T, W6 \7 S. F
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 h& u2 v% Y: Y# F' J
{2 y: m @: a4 W5 u, Z! Y+ M
BaseMouseCursor();0 S1 x {2 r9 W {! W5 X) i5 ?" E: X
}2 t6 @. m) n- M1 [ L
在其下添加:4 E" k, ^ u3 l- J0 \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, z( ?& a. b! R" N1 Y{
' }" K! |4 O. U6 r! C; K9 F& gm_wndMenu.DeleteAllMenu();
) C0 m# A& D1 e- H; i# bm_wndMenu.CreateMenu(this);
- Q0 Q2 ? T L- r( M8 N5 Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, J) e1 C3 k5 n: U) O
2 C& e% w/ z; j8 o" G$ wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- z) I5 g) }2 B2 d S5 o$ W
{( M! Y! H8 k- W8 a& }; E& g9 r: S
//P以上级别才可以删除所有道具
8 C Q8 A+ O) c5 `+ z m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; n+ w2 h, a q) c2 g
}' h0 Q% K( @5 E( U4 T) ?) T1 c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: C& ~+ m( d) H" r7 ?: L0 @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
{/ J( r; K8 O3 {m_wndMenu.SetFocus();
* L" s# L" y/ J- U9 a; t}# B0 b! h, a! e, T& Q" S$ f6 C
------------------------------------------------------------------------------------------------------------& w+ z" F& W7 q1 F
*************************
* t6 ~: |- J7 o0 Y) r/ \" SWndField.h文件9 y# M8 I, w0 P
*************************' b% m* h0 i$ o# R
搜索:BOOL m_bReport;. R+ ~) }: a2 s! O5 e: M2 h" Q
其后添加:
5 c F5 i. I; }- Q$ KCWndMenu m_wndMenu;
5 b" V2 V7 D b4 S: Y+ e' Q' X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: y0 s/ j; d! c+ C% a; @* K其后添加:7 Y6 k% j; V' p( o
virtual void OnRButtonUp(UINT nFlags, CPoint point);, d8 Q- ^( j; I" `6 D% X* e
& E; t, r& ]2 c5 j+ Q$ `
; a) @8 y- r5 c X8 A, A
|
|