|
|
源文件中_Interface文件夹下WndField.cpp文件
, Y9 I' z' g H/ z% ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 T; @$ b! g$ D# }0 X; N9 E$ O/ T# @) j E, \2 Z" ~2 D" R0 X2 _) E7 C6 E% S
struct sItem4 \" |+ N1 N9 N: g( k+ w8 z6 n$ H* G
{& |: N: y, O1 U3 r# F! T m
DWORD dwId;
7 @/ q4 a( s; VDWORD dwKind2;
: B( R) |$ O* B. `DWORD dwItemId;
2 {# p, O' M" d% k( g' ZBYTE nIndex;8 s5 q1 x! C$ T5 [0 |% U
sItem(){
# k9 g7 {% V# {6 w dwId = dwKind2 = dwItemId = nIndex = 0;5 v( O# D! l# U: F; V
}4 W9 T6 p3 [( z
bool operator < (const sItem p2)
$ Y6 ?. J9 h* Q8 V6 P5 s{
, n# d9 T8 w8 h" H" S- B if (dwKind2 == p2.dwKind2)
- O+ A+ q4 F6 |. b( Q- i+ { {
; O3 ~5 i Q6 i& z. M8 ?) ] return dwItemId < p2.dwItemId;
r2 T/ ^) ?- e$ K! b$ x. r- ^! l }else{$ Z1 J2 x7 e& [" y+ A8 ^# _
return dwKind2 < p2.dwKind2;
6 F& e$ {% y* U% d }5 D" b2 f* D9 C3 L
}/ j% X* p3 q2 d6 a( G$ A
};* t) H, d1 n0 `: W
class CInventorySort
$ y3 i p' `* d0 \9 @) ?: k9 K{" N/ a4 N* b8 f ^! R4 ^- j
public:; `2 F6 X; I' p' h
CInventorySort()
3 n. p' I, R2 x+ p; {; H$ z3 ~1 f{) ^1 y/ J1 E' k% p
m_dwPos = 0;+ ^9 W9 x8 @, g# V! E) W
}
) g8 @# S1 q" y- x7 N% H! Y~CInventorySort(){}4 g# H6 |- s/ }" [ d# E
private:4 E9 r G7 E7 L! x0 W% v H3 |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ J% F5 w( c9 Z' H9 `" [DWORD m_dwPos;
8 p7 \/ _# U5 J& T9 X7 Mpublic:
6 O; ^, H1 B; ^3 s. H( j0 A. kvoid Add(BYTE nIndex), Q$ D8 z9 A5 }0 ~+ k5 H. E
{" N0 C3 \0 I. w# }& G
if (m_dwPos >= MAX_INVENTORY)
! o+ N* I* e* z: S- r' s {
- J) F" v* `# ], i return; u; ]) X$ `8 y( X9 O. {$ Z
}' r8 w5 G/ }! R8 ~3 B
m_Item[m_dwPos].nIndex = nIndex;
& W& Y. u7 l6 ^# O: r4 U: M% u m_Item[m_dwPos].dwId = m_dwPos;# K2 O. A( v! m& a: a2 {0 j
m_dwPos++;6 h2 l& r8 S6 b r/ W. W
}' ]/ T! Z+ p: M4 U) ?8 z* r9 I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% N5 v' Y1 C4 u6 `9 H' i! l# C+ u{
4 C+ ^: Z( ~) s/ p for (int i=0;i<MAX_INVENTORY;i++). Z0 ]8 ] e3 t9 r& e
{& K n/ J; }" N5 y5 ]9 O/ J
if (m_Item.dwId == dwId)
( a8 e4 `) P% h9 D: E: g( h {( J! e8 {$ |- v! B" n
return m_Item.nIndex;
+ t5 l" ?) h' }- B* p }/ t. ?$ Z: h7 A. l& _" V6 n
}
. r9 e3 C) Z0 K return 255;
8 f8 V1 U3 a$ C! m( Q9 Y* M# Q}
$ Y& J4 d7 J" o% ^: ~+ v/ N) evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 b* E3 l1 M2 O- J# y9 g
{; G" A6 f0 B0 h5 @- i9 ~: p
BYTE nTmp = 0;9 W# U& v% C$ f4 H/ l1 E
bool bDest = false,bSrc = false;5 D6 M0 ?. s0 N: J- M
for (int i=0;i<MAX_INVENTORY;i++)9 x% I4 A" F+ L
{
4 E2 p7 m" a- k5 P* N' R if (dwSrcId == m_Item.dwId)
4 q% p& A& ^1 e {
; ?' \9 C) m# {# T! F //id相等 则 改变对应的dest和src6 [! R# Q* E3 t# i" N% Y
nTmp = m_Item.nIndex;
o( V* ^+ j( U m_Item.nIndex = dest;& F k/ y$ X- G
} M7 A6 @. b; ]4 t! C' S% F
}
% \# E. K- u. T' G9 X$ i //临时数据保存完毕,交换开始
$ \; R0 k2 B' z+ C* j! X7 i; ^ for (int i=0;i<MAX_INVENTORY;i++)
- z: _, h3 t. N3 i4 U1 K {/ N& ?( J) h- b! b' s
if (dest == m_Item.nIndex)) H" P, }3 E1 w( s- o, d S
{2 W: Y# y0 W: b8 y6 J, j$ [
//id相等 则 改变对应的dest和src
* y0 H# u& W" K m_Item.nIndex = nTmp;- ~( A! `$ D F6 f. p* H) ?4 v
}
* F5 O7 ^0 c y+ F$ p. O }
7 J. B; d. b- h; W9 h6 V}5 w+ o8 c. v. H: B
};) J/ C7 C( f) v9 Q) E
-------------------------------------------------------------------------2 U2 |7 g) ]* V: w% z& o& J; n
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ O; k" a; Q7 _' Q, j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 Z2 C5 o# z, b6 s9 y" \6 }紧靠其上添加:& M. T4 E7 c2 Q
if( pWndBase == &m_wndMenu )0 A/ Y( [; a- O5 f) P
{
$ q3 A# U% S6 I) z5 V, C# M8 ~ switch( nID )9 {& C9 |4 H) d( a7 o5 q0 G! B
{( L8 S( X) f2 k6 S. o6 b
case 2:
0 k+ M; |. E8 S& k {0 G6 V2 v! U! m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! y! z/ @; p0 g# F$ C5 g6 ^/ o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' o$ K' f, Q& O& ?2 b, K {
3 X: c; g9 d0 L+ x* F' C break;% p" O# M, `) S8 c
}
$ n# Y7 m' ~" l- B, L) b$ D: ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 n$ \( p, C# b: n0 a
{- ?- D& o0 e6 t/ Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 ?# J- l) \ E if( !pItemElem )
2 G7 G" i* }1 ~! U continue;% q! X% t- O* [8 V
if(pItemElem->GetExtra() > 0)
8 k2 P7 W& Y7 }- G continue;; x/ D# t0 C& y) {, F/ ~' L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : j1 `- |4 M& {4 {" n( Y9 o
continue;1 D2 I6 `& z) O/ R6 L/ B+ I, d5 J
if( g_pPlayer->IsUsing( pItemElem ) )0 |' M: ]9 }- d; ~, U! k5 S
continue;& G8 G+ N' r% X9 `$ r4 S
if( pItemElem->IsUndestructable() == TRUE )
3 P! f- r) Q* c; u! ~8 O0 f {
6 U3 L- `, j' ^% @( \6 p3 b g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 @7 A% P6 `/ z3 @3 E1 v5 G
continue;
: X) A1 w3 i0 ]* l& k! a }
6 d. t+ E7 e0 ]. U1 y1 i% z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ p" {0 d' @. z [
}
, ]6 s/ n( b# F' o break;4 G6 W$ O: ]0 H" O5 z n+ C
}4 }$ {) d& W' E; y1 n9 W6 Q" G
case 1:/ H4 F; {$ M0 @4 y, s" n' Q5 y
{
& M1 \- p& R8 G2 ]' y+ T //整理背包$ G: H$ m7 E* C- v% ?0 S$ ~3 O
//////////////////////////////////////////////////////////////////////////
: _; r. q4 r; ? //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 s1 F+ \- y- a
/////////////////////////////////////////////////////////////////////////// y$ g- u6 r" o1 s' d
//////////////////////////////////////////////////////////////////////////1 O- G v# E, v/ X1 @$ G( |
CInventorySort* pInvSort = new CInventorySort;1 Z% q0 z+ S1 b, i3 p) W
vector <sItem> vItem;' o3 q- l5 F' h! Z1 z: A
vItem.resize(MAX_INVENTORY);//初始化大小
4 j; t' u: N6 T% _/ [4 G% z //////////////////////////////////////////////////////////////////////////
q3 j# m# ]/ p7 H //填充数据) \! ^( k% w- q& J8 Y
for (int i=0;i<MAX_INVENTORY;i++)
. i, ?7 e" m5 {& ^: q6 t {' I9 \6 P7 D7 l$ M( S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ k. @$ a1 a: p/ Y% w1 i if (!pItemElem)+ b9 {. M3 U( ^, g9 g% n
{% g5 f5 A7 x" }* V8 o6 K
vItem.dwKind2 = 0xffffffff;1 G* ~+ [6 w8 T1 m) w* m) n
vItem.dwItemId = 0xffffffff;8 a- S4 K! E$ C* R
vItem.nIndex = i;2 @+ t/ B. l6 Y9 e6 h
}else {
! s. l, A% G- z1 J! \ W' ] ItemProp* pProp = pItemElem->GetProp();
2 h i( }" f8 W: V- G vItem.dwKind2 = pProp->dwItemKind2;+ f' n- X1 N! e/ T7 X
vItem.dwItemId = pItemElem->m_dwItemId;2 v' J# j2 @0 c4 o! G% G o
vItem.nIndex = i;
" ~( y. Q# r9 D. Q6 s$ i }4 K' l* z- m- l* J2 r( M' Q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 d- [! |4 u: Q b5 H M
}3 y+ J$ O" ]! [$ s: X4 O1 C( T
//////////////////////////////////////////////////////////////////////////; \* c! B* S, S0 Y0 y0 A% h
sort(vItem.begin(),vItem.end());//排序. S3 ~2 A( H2 _+ S
//////////////////////////////////////////////////////////////////////////' c$ N; z( Y2 K, s# o: [, a: V
//交换
1 r# N6 Q! f# x% W6 C ]2 K for (size_t i=0;i<vItem.size();i++)
6 |. z" \1 G8 u- d: k {
3 [3 J0 f" J% M% ]" n6 M6 V0 v ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ X" d/ O5 W0 k+ | pInvSort->Add(vItem.nIndex);
; q' D' O; C* |9 p3 b }- @+ x* b- K! G
BYTE nDestPos = 0;& L @: P" x9 }' E7 w
for (int i=0;i<MAX_INVENTORY;i++)% U) A& U2 i* U1 ]
{
- n6 u( n' `' x, n7 C: \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 O. w7 T; g) P) X if (pItemElem)
8 I, {$ Y: [9 x- z' s8 ` {
; s2 K0 `3 T( [, g- S if (IsUsingItem(pItemElem))
3 n# ?" `4 [+ P {" T" a$ H; ^" b2 s4 a
//这个位置无法放
6 Y( w- `2 [) @& F( m/ `- W nDestPos++;. F' \6 \7 d6 R8 ^& o" @, m
}
, G- _& U t# M( p9 R% C$ G u6 D+ x }$ X2 K8 }! ?- J; [8 e4 u
BYTE nSrc = pInvSort->GetItemSrc(i);* a" w5 K5 {7 Y" | W0 q, v. Y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 p. S7 U/ H; k1 i- X
if (pItemElem)
! V; }) S& [2 u; `8 f {: O8 W% R, T8 H
if (IsUsingItem(pItemElem))
7 @5 X0 ]$ f7 u, j! k7 H {& [9 J, z4 u. V y: U
//这个道具无法移动,跳过* E4 S. V7 V4 J6 H8 K9 |4 g
continue;! X) U* K# e0 s9 r2 o H
}
( {, h4 x7 m* R }else{
, l7 Z! t3 N! u2 E+ i4 A" u! _ //空位置 不用动
6 i4 D. F3 b2 x2 Z" ? continue;. a+ H" D7 N+ G* f
}
* g. L s( g* ^% v+ C& ~, H$ r# E //////////////////////////////////////////////////////////////////////////
* I: u6 K& K2 a p& }" w7 n ~! ` //开始移动8 D5 r( }$ g; c' |* [! |
if (nSrc == nDestPos)
4 C& n8 t3 F+ K0 }. X, h {
0 R( l; f4 a+ O2 g //原地不动
# H3 N2 p$ n# [6 B& L r nDestPos++;
! C" R+ v" a; f) h7 x continue;) |; D# }+ d! w. L
}, C. @4 `. n6 @( k) p! b
pInvSort->MoveItem(i,nDestPos);0 f, a5 R" q* h! H: a9 ^
g_DPlay.SendMoveItem(0,nSrc,nDestPos);, k" H, @1 b/ a; [* l
Sleep(5);
# g* ~! L- h) L' B- E; u" }/ q: B //Error("移动 - %d->%d",nSrc,nDestPos);8 Z6 J/ j5 S X
nDestPos++;
7 J+ z2 b B" W5 w6 q" E( h' L }
" G& a/ m- J# X( h1 V! R //取第一个元素的信息. Q, [" x+ `1 P4 O
/*: D7 m# ]5 G( l* x9 T* s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). l8 b( y# r" m, t2 A; F
{
$ b2 Z& ~# |7 U Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( N1 M1 X" h" A/ M, A+ w. w, e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 U3 x: Y2 ~: t& H* g6 T; z
}
5 q8 S' b" C$ M3 {3 B0 u */
% C0 Z$ ]0 n4 } //////////////////////////////////////////////////////////////////////////# ]* p1 |! A4 U5 N
break;
6 ?' x. U' `1 t$ R* V8 m9 e2 ~9 z( Z0 @ }
0 a* ]8 c6 K/ P* G/ y* n; v }
' y% s; R- [. @8 O ~, V5 k}# C9 p* Q' k: r3 X
m_wndMenu.SetVisible(FALSE);
' }! c( E( e5 p& n$ d$ ~( ~( {
6 n3 c6 A+ `8 b--------------------------------------------------------------------------------------------------------
/ t* ?$ w, W% ~( v7 s7 |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 G, i# l$ b( G" b7 J& o
{9 u- O: W$ z- q& W9 |- U/ m
BaseMouseCursor();
. @4 E1 I; T9 f7 v, j. O. ~}
4 U7 t$ q9 v6 V/ G& \在其下添加:
2 a7 R( ^( V ?/ ^9 u. d h Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ F0 H4 b7 Z2 L9 u1 r1 ?4 R* H( {. V5 X
{
4 [7 v4 t3 U- x/ q$ `5 N8 |m_wndMenu.DeleteAllMenu();
. u' w3 g& t# i$ P4 y' |3 Am_wndMenu.CreateMenu(this);' h$ R1 o( M1 O9 J9 I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- i0 H6 K- O" b) X& R
( ^/ U/ k i) }. B# T! aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ M0 ]! J% R' l$ I- ^ h+ L{% w, j* [* C' d. D
//P以上级别才可以删除所有道具
$ O+ K$ z( q9 i$ S6 ] m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) h ` e2 @5 n6 m9 Z
}
9 b9 O& I9 g! [, i3 _, o% g/ ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); a3 y- h$ J) e# Q3 U* N& h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% l, o. u/ O6 P7 t$ h9 X/ sm_wndMenu.SetFocus();& T/ U4 z4 p5 u& r1 j: _# y4 d
}
) e. S& }% g6 j" T------------------------------------------------------------------------------------------------------------
' p+ o/ K3 \' }# A' s& Z2 k# ^9 y*************************
Z$ n3 X$ j# k6 c/ y# `' g, Z+ _WndField.h文件- G, ?: O7 Q3 ]4 ?
*************************
5 p% f2 E+ F. c; T1 t! z) i; [搜索:BOOL m_bReport;: E ]/ H4 P7 f/ E8 c" i
其后添加:
8 Y* H/ ?1 u, WCWndMenu m_wndMenu;
3 ]- n" a2 K6 a搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- |5 ]' U& u# B
其后添加:
9 G1 v" n( C" X1 V. nvirtual void OnRButtonUp(UINT nFlags, CPoint point);
7 Q0 v6 ^! z# l. r; y
9 A, t$ b4 `. F7 I& E- p: p7 n
) O5 w4 ?- s! z' {8 U7 g |
|