|
|
源文件中_Interface文件夹下WndField.cpp文件4 r- G+ v) y1 q! @8 e7 }8 G, H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); O: f- p- D% B' I* J
. i0 m+ r3 l, H
struct sItem9 V5 }! ]4 s7 h6 d0 t# j- v
{
7 }2 d/ m6 @ l; Q( WDWORD dwId;. F6 X0 V# \* ?; k+ G& S, [
DWORD dwKind2;; l7 B6 q$ C5 D2 `8 F; ?
DWORD dwItemId;
G6 _ m# n i S$ ]$ EBYTE nIndex;
& r1 q8 e; }6 H; V% Q# WsItem(){
3 y, o; s# y3 N( J* x dwId = dwKind2 = dwItemId = nIndex = 0;
" o) x( Y2 u G2 Q6 I, A6 t}! F( T, v' x$ H; p. X) C
bool operator < (const sItem p2)5 v2 `% q2 I. y. N- j8 T
{
! }5 l/ _% V( x0 C" D1 s if (dwKind2 == p2.dwKind2)
/ X8 k* O. Y W _# p1 ~$ W ` {
o3 c4 J+ y' A6 f0 w4 w6 x return dwItemId < p2.dwItemId;6 P8 v" C3 ~, i
}else{2 s. d/ T3 \9 G& i
return dwKind2 < p2.dwKind2;/ Q( k# Q: c& _" t, v$ C/ Q7 ?
}2 U% H) d8 ^4 W5 E3 l, \, r
}" d3 ?& o4 O/ ]4 K: V8 Z
};
\; T0 Z0 |5 D% D" vclass CInventorySort
! _4 P! `; N( A{
, q# R! @8 G& ]8 O4 u% R, C5 Fpublic:+ C# g9 Q0 O, t- ?
CInventorySort()4 L) w% O% {# `% J
{( d& u; g/ x4 z% e; \
m_dwPos = 0;
6 r, Y4 i/ f$ W: @5 ~7 b" t}9 I! k! g4 U+ r
~CInventorySort(){}
+ [2 L+ M- f# u! z) F4 h; D( ?private:
7 [! n4 X' h+ n0 l! [ R2 ?8 {$ FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 ^7 d7 ]2 W9 W; `
DWORD m_dwPos;
# e, ]( h0 P8 i8 v( p7 l9 ~public:1 ` I8 }0 i! C* _! j
void Add(BYTE nIndex)
! F7 h- p! Y& q- ?& k{
) t& r v0 `8 J2 O8 U3 G4 l/ h! U if (m_dwPos >= MAX_INVENTORY); [+ B- U2 v! G* e* Q6 g4 H
{1 ?0 c) f7 @5 P* T* I
return;% t7 ~/ P! m9 Y! v
}% ]8 N3 A7 d! n
m_Item[m_dwPos].nIndex = nIndex;
& ^; n9 \) Y; W/ o( a m_Item[m_dwPos].dwId = m_dwPos;
. m9 ~" q+ E# W m_dwPos++;
8 i, g1 Y9 h! y' R}
; F, T% Q+ |- x% G+ Z0 O6 c9 i- }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; d# C7 I, e- a4 C) b! Y' P. x, o1 `
{
* Q* {/ |9 `% y, Y) a5 D7 u. I for (int i=0;i<MAX_INVENTORY;i++)7 { s* U: s1 r2 ^! V
{
+ S6 p7 U5 u7 ?, c5 R/ v! g) [6 b/ I if (m_Item.dwId == dwId)8 p0 x" Y/ p0 ]& J
{
! @# T; s2 l$ g2 t return m_Item.nIndex;4 b2 U- ~" n8 a7 ]6 e
}' s' T2 h+ ?: V1 f+ j( o- t' v
}
/ n0 u% z/ T: ~ J8 P9 r" C: j return 255;
o0 G' ~3 N+ e4 b, U. T6 p}
8 ?1 i' V4 }: e! s2 I) @; R$ Z$ uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% }$ H1 q# L9 H7 \5 W Y4 E
{; z* i( i$ d% z3 ^% e- Q) T! j6 C
BYTE nTmp = 0;# x& N# k0 D7 @
bool bDest = false,bSrc = false;0 o" \3 Y5 o+ Z% o. i+ b
for (int i=0;i<MAX_INVENTORY;i++)
$ D& V; P4 U; {$ H {
; Y8 A4 W2 `- J6 y9 t7 a( W if (dwSrcId == m_Item.dwId)
* z# B* _) Q7 v0 O {2 U' e- R( S5 \: \( W# E8 K
//id相等 则 改变对应的dest和src
8 b6 q4 ?" Q7 P* I- P M nTmp = m_Item.nIndex;
4 D" m2 F5 M% B2 L) u! Q0 J- \ m_Item.nIndex = dest;
$ w5 x& r' a: J2 n0 |* j$ M }
! w, g* f$ E- l }
* s5 W) O/ b2 C, n$ M //临时数据保存完毕,交换开始. E0 a: t5 @) y$ m, d) F2 v: f
for (int i=0;i<MAX_INVENTORY;i++)
# [5 |1 U- H" @4 |; J& L {- ~# N( }" h8 A4 G$ O. w) x. k: k
if (dest == m_Item.nIndex). n5 @" O, j2 J. Q1 |
{4 r( c7 X5 O# X7 C3 ]
//id相等 则 改变对应的dest和src
* V1 [/ T/ Q: n. k. g0 } m_Item.nIndex = nTmp;2 |- F: c# U- S
}9 f: W. m7 A4 P# Z* ?# x* u" X9 H
}
' E6 ^. _% G) {}
4 Y3 N: g: h" x% z' A( f/ B" ]};* h& }# Z2 o; ~2 Y
-------------------------------------------------------------------------$ K+ }1 o/ w5 C9 s5 ~
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) `- {! F$ G: M' f! a, K% e' O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' D! g# @; v& G$ l9 b( q0 ^- y
紧靠其上添加:' y3 p# j5 U& }/ A
if( pWndBase == &m_wndMenu )" D; |0 O8 x' N
{
6 [6 x. b6 B& Y0 q% d1 E, p switch( nID )
2 _* N* y7 j6 A) o {0 `, q* m. A! F3 v; [/ Z7 [1 y* N
case 2:
1 c! K5 D" b' q* n, ]: r2 v {
4 ]# X3 y$ O1 \5 ^3 U5 N4 P0 `0 Z$ C) ^ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 K& L6 B k8 B8 M8 j( ^ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 a0 L+ |! s8 m b" _4 n { f5 r+ U2 @# b/ u0 t0 Q2 E
break;) E1 e2 f& s2 Q2 {& k H( J1 Y0 L
}
% T; e1 E4 J; m- @, m( v# S( N5 _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); P* G; w, ]3 d( G/ m
{
1 H4 ` b+ S0 H0 u9 G6 r2 M' m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) ` V- v* a% l1 F( O
if( !pItemElem )
8 e, t( D; |+ O* S, ~1 o: j continue; a" z9 E" M3 E5 M
if(pItemElem->GetExtra() > 0)/ H" @+ M- ], h6 Y0 {! ?2 r6 Y' E
continue;
* `% T" f% c* t/ n: S if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 ^2 b2 C) z7 [3 S( ~' |
continue;
8 Z( R$ }) d; U5 r" R5 @4 H if( g_pPlayer->IsUsing( pItemElem ) ). H! S6 a, b% G q
continue;- Y8 ]) T$ n/ m. Z$ _+ p- X
if( pItemElem->IsUndestructable() == TRUE )( }, Q+ f& u* Z# i( F! F
{6 D4 l8 N _$ E4 w* v2 h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 H7 q) ~/ l& M5 B7 c
continue;# F+ A0 a/ G9 c& ]# ?
}
# u% _ R* L8 s! r" } g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: _# S7 w6 S6 S$ z
}
, Y; @0 s7 |& ^6 t break;/ d" z( R5 F, l9 j/ w" Z
}6 _1 e! ?: t* q, T6 n8 u$ j3 m+ K
case 1:% y1 V- E& @8 m! j# e
{
) M: o8 X0 q5 ^( {4 Z //整理背包
1 c7 P/ S+ E0 q. x- T" l //////////////////////////////////////////////////////////////////////////
$ K# F" F2 N# D0 E: {4 y2 I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' T; I" |# A: k, c; `7 O
//////////////////////////////////////////////////////////////////////////9 B2 `' S. W1 t9 C
//////////////////////////////////////////////////////////////////////////
8 I5 R6 b1 ]5 |, F6 P CInventorySort* pInvSort = new CInventorySort;
9 N: ~6 e5 D; B/ o vector <sItem> vItem;
% G- t$ ]5 x; z2 |1 I: p* c vItem.resize(MAX_INVENTORY);//初始化大小
9 L2 k$ z- j, u6 ]) y8 G0 _: e, X //////////////////////////////////////////////////////////////////////////2 {& S( o) U2 |3 M; D$ \6 m7 u
//填充数据
' ~2 ]% `# J$ I' q for (int i=0;i<MAX_INVENTORY;i++)" i$ m3 _. @( z8 y3 g) j
{+ r) p; e% T V$ S' b* U$ v- g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" o! T0 V9 T) V4 H& x: e8 U if (!pItemElem)
" [2 U. F; V$ e {
) ~0 o9 k" O8 d6 U' y2 s vItem.dwKind2 = 0xffffffff;
# y ^4 c( I% m$ o; e vItem.dwItemId = 0xffffffff;3 U; Q4 M. s. H# I7 k( Y# {' {- l9 M
vItem.nIndex = i;
3 h* J/ a* H! E5 U }else {
% f6 f8 t, j# M0 m9 w+ }: ] ItemProp* pProp = pItemElem->GetProp();
0 T9 i* L }6 r' K/ H4 M2 O vItem.dwKind2 = pProp->dwItemKind2;1 T$ R7 u+ Q+ A. Q. a- p1 Y
vItem.dwItemId = pItemElem->m_dwItemId;# w4 J: s. \; q+ S6 h5 a1 }
vItem.nIndex = i;; k* P5 \( n# b- A7 n
}( X& [7 |, O4 P! ^
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% F. k& f1 [, m+ z
}% A b v% I+ ]
//////////////////////////////////////////////////////////////////////////
' F8 j8 t5 R: [6 \1 i8 `' @ sort(vItem.begin(),vItem.end());//排序 q3 B" [; q1 M I3 O
//////////////////////////////////////////////////////////////////////////
! k: ^% c2 h, T) ]' S% }) f //交换7 ~/ i% C7 S! d% Q
for (size_t i=0;i<vItem.size();i++)
* M; Y( C$ c! [. i" d( E, d {+ [" L7 P v# K9 @5 U3 [! [% Y9 b. _
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( d* _! s5 V2 j6 N, a! i* v6 v pInvSort->Add(vItem.nIndex);
# v3 o. P, V# t0 m } J& _. C7 O$ H
BYTE nDestPos = 0;; X7 S0 f2 Y" L, P, A" J
for (int i=0;i<MAX_INVENTORY;i++)
6 c7 M4 v1 y) q7 l" g! ]% y {4 E b" |* Z: G0 n7 Y C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ @ o& G' n4 |- I# d" L/ _
if (pItemElem)% b/ [1 g- A6 a* Y$ L
{0 N) g; }3 y# i* B( l; U$ s
if (IsUsingItem(pItemElem))$ E2 V9 ]7 T% M( ?
{7 Q0 l+ Q0 @- r: y' E
//这个位置无法放" w/ d$ B; r! _, ]* G
nDestPos++; g6 R. I1 V y3 a0 V- C% {
}
9 O, T' O: W, N# x% |6 x }# x& _! V; a# W: l0 t8 ~) c
BYTE nSrc = pInvSort->GetItemSrc(i);2 q8 X% t3 D5 e' v' x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& c5 S$ ~/ ], T; ]
if (pItemElem)* S- ?) K0 y& p1 X4 D8 I( ], ~
{
; E, b# F% J$ K7 ?$ R8 ?7 J: k if (IsUsingItem(pItemElem))& ^4 V3 {4 V X8 d. M. }
{; D& U; F. q! d2 R, a
//这个道具无法移动,跳过
5 X3 k, R u4 t9 r# }7 s" s continue;
* U' S( \* h8 U. H3 n5 l( ^- } }" O7 M& z( @' O% R2 ?2 n
}else{( @- g- p/ b% z: K$ E+ L
//空位置 不用动* [% t2 f6 e1 o% p, `5 \( j O
continue;
. `) `) N6 ]! x& m) u1 ^' m }
( x& B7 U# j6 c! A3 o //////////////////////////////////////////////////////////////////////////) q; i# s% V4 }8 ^- ^# r" _
//开始移动
# b- M/ ?0 D9 i/ f9 U) ? if (nSrc == nDestPos)3 \+ }* p$ Z7 t
{
% o P0 E% `( P2 S% N0 C6 {* F //原地不动
9 |- X9 W! g1 k& j1 D: } nDestPos++;
* |2 q6 z# Q/ @0 f continue;
% A6 p) y. Q% L/ v4 h! I5 c+ p }. o# D. A' r6 b8 d' m
pInvSort->MoveItem(i,nDestPos);2 i [1 m: w+ }) w. I/ F$ V
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- R9 |2 v1 W+ z6 C. @+ ]: |$ e Sleep(5);9 w1 B! H3 e3 N0 j9 _6 }
//Error("移动 - %d->%d",nSrc,nDestPos);( e! } L" {* y$ |% u
nDestPos++;6 A8 F/ i6 ^% k2 D9 ]
}4 l/ A5 {' d5 | k
//取第一个元素的信息
7 Q9 a& N0 `1 {+ A6 ?0 Y5 O /*: O# S+ Q/ J$ Q9 t! v8 V$ P# R
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 f `8 ^2 J+ K9 b2 E {3 x, D# _7 E) a& e k, o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 }# Y+ M% N9 `& Q. o4 g
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 e( X/ D( s* d6 B }; z) j% X9 X) K+ A" h& P
*/
8 Z- `: Z% P/ Q7 j //////////////////////////////////////////////////////////////////////////
) O0 d3 F- @# Z4 [2 e8 c( S3 \" A break;" ]6 X& M' q8 A- ~: ?5 Y
}
7 S( G6 V# Q! m4 J. _ } 2 ?; L. G* S3 _
}
2 O5 u7 ?+ W0 W& W) D" ~1 Um_wndMenu.SetVisible(FALSE);2 w! m" d B. S$ h" `7 u9 J
7 |5 L5 g- @7 r J9 `2 ~$ k--------------------------------------------------------------------------------------------------------. d* ?* N+ t, T! f% S* e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 L! h$ Y, e `6 t9 W{% e# q. r( H' {5 ]
BaseMouseCursor();! k. q" g! G& c6 ?2 w* k5 p
}$ i8 H# y. J- }! r2 S+ [. w
在其下添加:
& D l/ [9 U! C o4 ~9 K9 k/ vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' v) W9 o5 i$ w' O" U
{
; _9 M& ~- _/ v) g/ l7 em_wndMenu.DeleteAllMenu();
, N9 e+ p+ ^7 ]# e: g, q. @m_wndMenu.CreateMenu(this);
2 r/ n6 a6 ~5 i% Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 f& Y$ @% \; @( @: X# C" S
3 b4 j7 ~ J( ^ }! X2 B0 L6 eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* t3 l6 P4 x3 q" ^$ [{
' w7 w( j/ }4 W+ s# i n //P以上级别才可以删除所有道具* x+ z8 E* E2 [
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) b4 Y }7 m- {0 X}
; l; c9 M" K8 F D* L. M$ d3 Y' Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- E: w. v7 s8 L& m# N7 l t- Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' s2 O$ v9 o5 }! O( I2 o4 S wm_wndMenu.SetFocus();8 I" h$ C9 c) @/ l
}
; B( x% S# s Y, H: ?& v$ U, u7 G------------------------------------------------------------------------------------------------------------' V J' K: @$ V' h( n/ X
*************************: x) o* ?! b) |% @7 a8 b( K
WndField.h文件
_2 `1 A% @ }% A7 N*************************! G0 v2 g3 u" R: b5 A t
搜索:BOOL m_bReport;! q! o) F, b& j1 z
其后添加:
+ x7 H; {# O% Y, k8 N1 X* Q9 ?& GCWndMenu m_wndMenu;: F1 t& t9 Z' P( R. k: ?# A
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ U5 W* ^$ E/ F0 z, n
其后添加:: g1 I- g9 U7 L6 a% h9 G2 G
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, `$ H) |1 j1 M- U) X2 A
% ~% O4 G- c9 C- A+ ?- \: r/ Z3 m0 ^0 ]9 u
|
|