|
|
源文件中_Interface文件夹下WndField.cpp文件" B- Z5 n+ k- e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): x6 H- i7 k( n) r% _+ `$ F0 K
7 C( D9 _1 F. h9 m) F, H7 J
struct sItem# e! }% c6 g9 `# A
{- ^1 n7 }9 j: V& ^# B
DWORD dwId;
/ e n4 }* y5 Y$ k* \DWORD dwKind2;
2 ~$ }2 L# M0 u2 yDWORD dwItemId;
- k; A2 Q5 ?, ~* @) d+ {! lBYTE nIndex; j3 M# @- ?! T, ^$ d# d- Y
sItem(){$ E/ l1 E& D+ o8 g# W2 g$ Z, e4 |
dwId = dwKind2 = dwItemId = nIndex = 0;
! Q0 O2 _7 k, a' P; y& I0 B}. B: j3 o/ W0 H6 v
bool operator < (const sItem p2)
' z7 _/ z1 i7 k6 i{
2 e) B# N7 `. {! g) t! t/ L0 C4 O if (dwKind2 == p2.dwKind2)
% w3 m" B Z) H9 Z7 I) L& a o {+ {/ I/ V- s6 t+ A6 t. u3 p* ~
return dwItemId < p2.dwItemId;5 r! ?3 F( L( W5 x' b, e
}else{
5 h. R" d/ o- W* J" o return dwKind2 < p2.dwKind2;
0 {; ~- J; R$ D7 \ }
; q- V% O" t6 U" ~5 o}
1 A7 p& X; \* g& ?) `% Y! p4 Q};
4 m( L. t- P. [1 C3 nclass CInventorySort
* K+ \; ]& y# _: f e* I1 t{
D: C$ f+ |; R4 G) l' fpublic:1 h- q3 W" N \$ z3 |& L
CInventorySort()
. l: C' N* g2 W* W. q! E1 b{. i! ^6 }" Q' z) Q( W
m_dwPos = 0;! M8 v, J5 K" {+ B
}" a# l! y% q+ \
~CInventorySort(){}7 E: b$ B4 y; H1 M$ I
private:
/ @. |3 k Z' _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 C2 J6 p a8 j/ }+ A# E eDWORD m_dwPos;; B( r" |+ q" M
public:
+ g, y9 Y5 n2 Lvoid Add(BYTE nIndex)4 Y; _- y" q! `+ t5 A0 b- D- M
{. v" U0 }, B, e+ z1 ]
if (m_dwPos >= MAX_INVENTORY)
: H/ j, O2 u( s) Q) K, x3 j, O {6 J, I9 `! L! {" ^4 X ~! L4 C
return;. k% y4 X" D+ f1 Z0 j
}
8 \& u. L2 o4 z1 f m_Item[m_dwPos].nIndex = nIndex;) L1 f b! D, x& |
m_Item[m_dwPos].dwId = m_dwPos;
" ] s& E2 k1 f m_dwPos++;
! o7 O" c# w$ L( A. \; s) i* O3 g}
% r5 w& v: D+ z7 H5 a8 XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& q6 t6 c5 x: V& l% o1 B; c. m{
- T. p4 \' w8 U) \: ^ for (int i=0;i<MAX_INVENTORY;i++). N+ X5 c) r2 `" y
{5 n3 ^$ i7 q+ G6 ~4 E" `2 w
if (m_Item.dwId == dwId)
+ \6 m+ G4 _2 o, O2 F" f {
) t8 \' _) K0 F return m_Item.nIndex;: `! W' C! M$ y
}
& U. @# E9 ^5 L! W& L }2 U9 x5 S7 `* L
return 255;4 s: P& V5 _4 L! D1 U
}2 g3 d; S/ J |" Q, Q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, C& J! J2 m* n' l; U( \ ?{4 D! D7 x0 c7 ?1 e
BYTE nTmp = 0;
0 [# i3 D1 a) P: m bool bDest = false,bSrc = false;5 X" Q/ Q( t# O1 C
for (int i=0;i<MAX_INVENTORY;i++)/ D3 i1 i& S3 E! z
{0 \( n: c# l1 G( _8 _
if (dwSrcId == m_Item.dwId)
f1 W! L# m3 ~1 |5 f {
$ `# e; J2 i: S //id相等 则 改变对应的dest和src
& J y! ], c o1 g$ R nTmp = m_Item.nIndex;0 C% U+ A) F7 N& x& n& e# _- ~8 C
m_Item.nIndex = dest;; F2 v! t/ M. H- x/ K
}, R4 g: z- P7 ?- h# [
}
& l: V& J) d! z7 D$ E //临时数据保存完毕,交换开始8 `0 n+ W! T* y6 i% p; g
for (int i=0;i<MAX_INVENTORY;i++)1 R5 C( p' K" t
{
1 p6 r( F- Y& r' u) N, I2 t/ x if (dest == m_Item.nIndex)
5 h2 V: |& x1 l {6 ~! w2 g" X& X+ i# `# }* c
//id相等 则 改变对应的dest和src
7 [9 C( K9 U( ^: U6 \ o m_Item.nIndex = nTmp;$ w; w E" Y4 g3 O' z/ w
}. z$ R. d+ y) {# z
}
2 C/ J/ I' `) l}
0 H! t- z/ [: G# N2 F};) f2 `" t) K" N, H3 F3 q0 e
-------------------------------------------------------------------------
5 w% C' ~# _1 q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( w6 r6 O& ~# ]9 W3 F, t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: E* r1 `/ p* Y$ e! U* ^
紧靠其上添加:
' D: ?$ ^! c# x* mif( pWndBase == &m_wndMenu )5 U( k' |0 \0 w5 {
{+ n" |% b# R% p5 r, X4 H; B5 B
switch( nID )6 E& ]2 I) |0 {
{4 j8 B3 z2 w( r& _* l
case 2:
( B ]9 G) c$ d; l7 Y7 i: [, z {+ h# i# E- b0 n# L. g
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 M6 l; a' i, z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( K d" u! R9 A2 |. | s8 |9 q, m
{
" x/ A- x* V$ e7 L* p0 a' D9 i# g break;
& B% R& G& M9 ]! C( P }
+ ?9 t; M8 G6 e" D- W, X& k) ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
?. |4 j8 {5 p( q9 I0 ` {
# |& D5 U$ I! W- Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 i- u5 G2 N' i2 R- d if( !pItemElem )' O2 t* `9 V- t0 I9 @9 ?
continue;
# K& ]3 j' K/ ~% j* _6 ` if(pItemElem->GetExtra() > 0)
1 J# c6 L/ ]: U" i2 e continue;" ?4 w$ V% U; E5 f4 N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & w( m8 Y$ M9 w
continue;# o: A( j6 r8 D! H2 v
if( g_pPlayer->IsUsing( pItemElem ) )
3 J/ t' j8 @) l6 B: q8 h4 m continue;; C- S2 x5 g! Y4 @0 z G; R
if( pItemElem->IsUndestructable() == TRUE )
" @0 g5 q1 p; m9 Y, q {" y9 @$ D2 m2 F
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 ^' i4 t L, m5 F+ Z5 h continue;; }% H B2 w0 l* F! W" B
}( g& h! m- C& S
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 t7 |7 l6 t& _8 Z& h! T2 F
}
. v7 p/ P- v! {/ l { break;# d! ^+ V% D5 v- ~0 u4 Q/ o- j
}
3 G* v+ ?0 `! r/ a1 y2 }2 m case 1:. d# u" {- J9 Z3 u5 W( g/ G
{
8 f" o% I- }' l4 H //整理背包) m# x) R/ Y4 F, t; Z
//////////////////////////////////////////////////////////////////////////
- F9 u3 h9 |" K6 o. b, C" f: g8 @ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 ]1 ^/ |( m, R: B, k6 u //////////////////////////////////////////////////////////////////////////1 X" r0 D+ Z+ e1 `4 l
//////////////////////////////////////////////////////////////////////////
9 p- C; L% N% M CInventorySort* pInvSort = new CInventorySort;0 H0 v( n4 V7 r
vector <sItem> vItem;
7 ]) s* V) u9 k d3 @9 L9 D' l7 ^9 Z vItem.resize(MAX_INVENTORY);//初始化大小
5 ]4 N% ~3 U8 M' z5 b //////////////////////////////////////////////////////////////////////////' Y. x5 e# g& t. E- W2 O9 |' u
//填充数据9 R$ Z p" r# J7 }
for (int i=0;i<MAX_INVENTORY;i++); d1 U9 B1 a+ h: E& M
{
7 l; z5 b1 H* g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( R* C2 [: O; G: O1 [; r! n
if (!pItemElem)& |# F8 g, \' @; n6 O$ K
{$ b. K$ R3 |1 ?0 z& m+ u0 Y, k* `
vItem.dwKind2 = 0xffffffff;2 g6 M# k" C. F$ {" c! Y( g2 l
vItem.dwItemId = 0xffffffff;! J# M( ?! l' i8 J4 m S* W' v1 x
vItem.nIndex = i;6 I4 u0 I6 c0 U- h7 ]7 C
}else {. V K. a9 V0 K8 Q
ItemProp* pProp = pItemElem->GetProp();2 e1 w5 w# ~" g/ ?
vItem.dwKind2 = pProp->dwItemKind2;
% C* l5 a) o& P6 b vItem.dwItemId = pItemElem->m_dwItemId;
6 V7 C i" V" j( @6 t vItem.nIndex = i;9 V- e& A9 X* G. ^. v$ C4 O
}/ `2 Y$ ^- ~" @2 n" l. W# A- a
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" Q, a4 {) n2 r" ]9 I; @' T( {! q
}
0 I4 p, O3 o$ X+ B //////////////////////////////////////////////////////////////////////////& ]' i$ }3 j: z" l z ]& q- M8 E. F
sort(vItem.begin(),vItem.end());//排序
! N( ~ ?* ~7 n k3 ` //////////////////////////////////////////////////////////////////////////
" Y* f& j# A: w) l) k( ^% `9 F //交换
! y8 G. \# [" x7 O5 N" ?& h- T/ I for (size_t i=0;i<vItem.size();i++)
$ _/ q* d& ?, W2 @' L. d {
# y2 N8 {" l, { D' A! ? //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 ]& i7 @6 H, a: L1 g" a pInvSort->Add(vItem.nIndex);6 L# i0 a+ y7 O8 _
}
+ T' `3 _( C( ~. [6 [ BYTE nDestPos = 0;
% C% x; I; B, w% Y- c for (int i=0;i<MAX_INVENTORY;i++)
% X( \3 W; X' ]% j8 O i {
+ |, O G/ P7 I3 S/ s( h: w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 C1 i% x7 x) y: w9 n8 q, P; ` if (pItemElem); J6 I8 r4 P/ h! Q) i5 p2 z* \
{, D( K: A7 b1 p) r0 z$ J
if (IsUsingItem(pItemElem))" `3 p/ b4 E L+ c( n
{4 o5 P& B O3 [: o- h
//这个位置无法放
" J6 K1 k$ ^1 o [( L nDestPos++;
! B, u- c; K$ o u }
$ B: b& m6 H8 _. m; |; n+ ~ }' i, e/ \* ^8 t, {5 a( r
BYTE nSrc = pInvSort->GetItemSrc(i);, Z6 g. @- W7 n- i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 f+ h+ h% w* c" Q4 S
if (pItemElem)/ W1 i( W* K) |# ]( V2 p$ {
{
0 `4 V. P, \1 @3 E7 W4 Y if (IsUsingItem(pItemElem))
4 u/ p& F5 H% { {0 L4 E/ Z4 c5 m8 N) G: ]7 _! ~$ s
//这个道具无法移动,跳过' Q; T% R" J8 m4 x+ o9 r6 i
continue;5 {9 ^; b/ w5 i8 H
}
) X% E$ D$ g4 r- s. O! n }else{# n$ w" i( S5 ]4 o
//空位置 不用动
, _# b- O( {0 r3 B continue;! ^1 f# i1 \! Y' ^: E
}$ L5 R, Z; Z! h2 f0 z7 g
//////////////////////////////////////////////////////////////////////////2 @7 q( r4 _* I' R1 M' b
//开始移动5 ^3 U E. G. L
if (nSrc == nDestPos)( e; f3 Z9 z+ p% J' W1 q
{, O2 E( v1 q4 r+ i" X, g, u" D0 Q. q2 m
//原地不动$ a% r! V9 \% _/ D3 g( M
nDestPos++;
1 V$ k; L- T# L) O. v* J continue;, B1 n2 B* K5 C% x5 `% f2 i
}
. K$ n/ m$ ]( N1 P pInvSort->MoveItem(i,nDestPos);
, m1 R0 ?3 D: |- q8 B g_DPlay.SendMoveItem(0,nSrc,nDestPos);! q- y7 e* _& D) h
Sleep(5);- H# @) b# W4 ]4 Q/ ]2 d! M: i* I' R
//Error("移动 - %d->%d",nSrc,nDestPos);
) g7 t" ]3 R% ^7 B9 _ nDestPos++;& d( X/ [$ p! p; }
}
& m& J- Z* u p' Q! R2 j; s //取第一个元素的信息
- |4 Z2 T% Q! W /*
" O* Z: V6 M j4 [5 z$ e4 m% Z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ g6 \4 |$ f4 {( X+ ^
{
4 U* [0 i5 e8 r$ T! I% u& I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' v1 w. t$ W6 P, G% X7 }1 Y7 q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# o! e H- c, H
}) H+ D, \, u: A2 ~: h' S' s
*/
. }, `) z# \( E //////////////////////////////////////////////////////////////////////////+ ?' l f1 q; [5 v
break;
% s7 W3 q" r# L. e6 [+ { }
5 S' I- ?( _/ I! U } + r: A+ w$ ~" J; \( v
}- q+ t j7 L& m
m_wndMenu.SetVisible(FALSE);
6 i8 |. t2 R) H; }
3 m9 T% o/ v) g; s# A5 r--------------------------------------------------------------------------------------------------------: s. a# E/ S+ E9 U% c. M6 X8 A
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ e% ?- ]! r" [" Y7 G) H+ E
{
, C4 ~/ h' R8 w- z; Q5 o9 A1 M# ^BaseMouseCursor();
1 y; h7 D& O: M' Z% J4 c( ?}% V3 i' E# e: _8 S+ R
在其下添加:/ @# p# R1 }3 g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" {; |' j* v* n0 X
{ \- z; g5 c6 C" X
m_wndMenu.DeleteAllMenu();
7 y" d! y2 o! I. B( Em_wndMenu.CreateMenu(this);$ z6 u" y O S4 D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 B1 i) {* ]9 R4 \( W1 ]7 S* g8 }' R9 N2 X4 w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 C7 }! j9 l' @# J% y$ I
{
& ~ ^7 ?1 c, d8 a8 v# t. P4 ` //P以上级别才可以删除所有道具
1 g0 P0 c# H, z9 f o: g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, l! W4 j, M( ^2 P
}' W0 {3 _$ h7 p) F& U9 Q6 b5 g
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, P. D: v: C# S/ r, H6 K% zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 j! D& ^# Y8 ~& j5 e
m_wndMenu.SetFocus();) x$ C1 r, r+ G. Y0 w# ~& t# g: @
}* v& T: ~* B8 Y3 h
------------------------------------------------------------------------------------------------------------
. S3 I, N: M0 ^*************************) F4 ^9 a0 |- K: G0 x) |5 s) r
WndField.h文件) k w& M- c3 p/ v6 W- e
*************************- n2 e7 {1 A8 K; f) J ]+ c
搜索:BOOL m_bReport;' B9 A/ \. |/ a
其后添加:
, w/ d4 ]/ ^9 A3 VCWndMenu m_wndMenu;% Y5 \; R/ O9 i E# z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, w1 r( N+ @% S& R2 r
其后添加:8 K; c( @' G; X0 E, Z9 a
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 [2 v0 `/ Y. c: I
; W& L/ c: ]4 |" M6 ]; u- Z
$ M8 M0 `/ A1 I- K( h |
|