|
|
源文件中_Interface文件夹下WndField.cpp文件/ Y7 e4 u2 c. G, z) P2 y. j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% M3 m: i5 j1 i& z/ a2 J' w; G: F' c/ U) b" c/ J5 y
struct sItem" `# V# a% t3 P( S+ i6 u; `. @
{9 e2 ]& a: |0 V$ G
DWORD dwId;
/ o0 O! f+ k! C0 FDWORD dwKind2;
7 N f! x! E' C: }0 |4 oDWORD dwItemId;. d, s# N; `4 S) X* I4 k
BYTE nIndex;
7 h6 u) w! D7 H$ R/ YsItem(){& h1 d$ Z2 W+ V7 J
dwId = dwKind2 = dwItemId = nIndex = 0;- `! G* C9 I9 @2 q5 _: K8 Z
}/ @" W, ?. Q) O7 h
bool operator < (const sItem p2)2 J! X- m. v5 W! Q* @' l- M7 b: v
{
# g1 E- o8 r1 Q if (dwKind2 == p2.dwKind2)
; S$ {0 v1 n( g1 S1 z4 ~1 _$ X {9 Z% U" i% h1 h. c7 N
return dwItemId < p2.dwItemId;( R+ e+ X5 F1 y ]: ]8 y: ?
}else{; s# S: ]+ j/ e% O8 T; g
return dwKind2 < p2.dwKind2;
3 B. m3 T/ H) q }# N2 I+ q+ k, M3 _; N: J4 b
}( i5 g5 {2 w% q! D1 l
};' u: Z3 G$ M& E" _
class CInventorySort1 V% k- l& d! r! X. {6 F( _, ]
{) C/ @; ]1 c% K2 T! Q
public:' w7 `8 ~4 T& H- h+ U: F! b* j
CInventorySort()
3 d- S/ M, ?/ P$ s" g6 h( ?# d{+ [2 u" o& n4 M) O+ F
m_dwPos = 0;
# o' |7 I2 V: i# X1 W e}
$ t. ?& g, T+ V# F8 Z~CInventorySort(){}% F; W8 r( v" q. }
private:6 P$ I& q: X7 h% i( K7 X6 c, a' K0 i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 L/ _8 B# b4 C" b/ b5 s z
DWORD m_dwPos;
5 n j* u5 O# B1 M! zpublic:
6 m k3 \% D1 t5 k' ~3 f h2 H# ?1 wvoid Add(BYTE nIndex)
+ ^" Q p( ~$ L7 ]{
. }: @1 {! o& w2 L! U7 a* R if (m_dwPos >= MAX_INVENTORY)" v9 ?) s+ @* Y+ ~, E# x
{- o7 o' L( V1 h( \) }2 K4 w
return;0 w+ a- t! V+ U! G, V% j( p
}
9 }; E% |/ I: f- ] m_Item[m_dwPos].nIndex = nIndex;2 s+ ~2 ^! \. ^
m_Item[m_dwPos].dwId = m_dwPos;( r* H: s( R' ] t3 g2 k) u
m_dwPos++;
0 [ N. A/ o2 P6 J2 z}* x3 Z; t8 p6 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* ?+ N3 _* C& Z8 L8 @- @* H% Z/ q{8 }6 P- m) }# q2 T2 V& t
for (int i=0;i<MAX_INVENTORY;i++)+ q1 J' Y4 K* m3 f" ]3 W
{
- ?% [2 ^: G/ P) L if (m_Item.dwId == dwId)
/ t. m0 r3 J/ e# k3 ]# t {) F% s) x" j) k: K" z1 o: n0 D- k6 l
return m_Item.nIndex;
+ W7 p$ T6 G; f0 b. H G4 } }
* `$ T- n. Y8 S: V }9 b0 n5 M8 x$ d7 b& k- s0 f
return 255;
6 N; p% B; a0 d0 @0 o$ g+ H& B}
9 J/ \+ a: D! O- `% K! ~+ s( N0 Ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& N3 v8 P2 e# _( }- Z/ C) _
{- Y, |2 u: m6 r* L- O
BYTE nTmp = 0;
' A: a! n+ s8 V6 F L, [ bool bDest = false,bSrc = false;
, z0 s- h& Z/ m0 E1 n6 g/ @ for (int i=0;i<MAX_INVENTORY;i++)
L! p* E+ y: I2 ?( q' Z7 t {4 J7 b$ t# [3 R1 X7 b
if (dwSrcId == m_Item.dwId)# C1 C" }( M9 Z2 [
{1 k$ j1 F5 `# T
//id相等 则 改变对应的dest和src+ A/ ]" X6 w, v
nTmp = m_Item.nIndex;
' [9 t, O) O7 O" O% n m_Item.nIndex = dest;
. A S, u; u2 x# F& F }1 V3 @$ l4 s {9 _. q
}
2 B8 c" F8 L4 s% W) e //临时数据保存完毕,交换开始) f% l9 j9 E/ |* J
for (int i=0;i<MAX_INVENTORY;i++)% Z _6 }' B! O" G9 E j
{/ P4 X F v6 p
if (dest == m_Item.nIndex)& D- t& e3 t7 v6 |/ p# |$ c+ l. v
{
/ R& @: J. L5 ^: k* y3 c0 O" F //id相等 则 改变对应的dest和src
" o! Q8 \1 p' C* { m_Item.nIndex = nTmp;
! f0 e6 m" o- ]' I. w, `* D9 B }
: ]& W: N; N( I3 c Y }
( k; ]$ Q2 w, l/ M( O& V# v}2 a# N* H2 [7 ^! J
};
6 T% @2 ]5 \6 K8 c, Q-------------------------------------------------------------------------: R2 M- A$ w% b/ f6 H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 s5 P. }4 ]8 q/ ]# B/ C \
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. u9 s: i! S# f# y# ]5 \紧靠其上添加:
" o: I; ^& k' F1 o) T# T3 d% {if( pWndBase == &m_wndMenu )
* V0 [" G! e# }7 D' q& M{+ B/ E0 {# k: L$ d
switch( nID )
% n1 N ~" m4 \8 h7 W {
$ C; U& `& {+ O6 J; b case 2:
: x `1 e$ [4 M% `7 V! Z- f {$ `. }+ e- o6 v( Q! n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. k) C o/ S: c9 J) X" p& l0 z" s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 i1 ~3 e* n/ ^) T( Y3 z
{3 M' ?! I$ t/ {& u& N
break;7 [# [2 @% \2 u8 B
}
7 M( W3 o7 a9 Z" g( R- w8 c: j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" s ^9 u6 c9 ]2 o7 K h2 \
{+ \) ^1 U- u* D5 S& a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 E3 r5 e6 {% R& y' [4 d8 K6 ] if( !pItemElem )
$ _- |* F# @9 s. A7 D continue;
2 M- i% J9 g7 Y2 R if(pItemElem->GetExtra() > 0)
8 P8 q( S9 ~/ u& H! R continue;- T6 t& t. z/ L' \7 V
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & R4 A! D" q' V* Z9 ^
continue;9 D# k8 U( K5 g3 v
if( g_pPlayer->IsUsing( pItemElem ) )2 x& c, D; b0 N# t: h$ q ?" z: n( s
continue;
* ~6 Y2 Z( O9 X; e6 P: O if( pItemElem->IsUndestructable() == TRUE )5 A; R6 p [- j: F1 p" P* y
{
8 p# \) A; D# Z6 C8 ]5 d- B4 _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 b6 M* I- j" ?/ I# d; [7 N continue;
' R( J8 E$ O# m }2 C, c3 O/ e d' d
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) J, ?* E. i4 |
}6 O) T2 R- d+ N
break;
# S U: A; }. r. u }
6 t3 T9 ?5 @$ l) M case 1:
, @* G& i4 Z; e* N b1 k {
: M. w0 P) _$ M- T$ ~5 w0 X //整理背包
: \& L! H" P6 H //////////////////////////////////////////////////////////////////////////) H q/ U6 Q& i, i% g3 ^; I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ g! \3 k( v; M# D' u1 q
//////////////////////////////////////////////////////////////////////////, E& r; f$ p- {7 N" \8 Z& r
//////////////////////////////////////////////////////////////////////////
* }; n4 X4 z: X+ R9 t: P CInventorySort* pInvSort = new CInventorySort;
3 x$ E7 [7 ~& n5 O* F vector <sItem> vItem;! Q* q ]# K% J
vItem.resize(MAX_INVENTORY);//初始化大小
1 g$ D8 R3 W" w4 o //////////////////////////////////////////////////////////////////////////
: @3 B6 m- X7 ]' [5 z //填充数据. a- @4 f d& X- W' d9 C8 J
for (int i=0;i<MAX_INVENTORY;i++)
3 ~& i# A* O2 R- [ {/ U; B" ?( B9 _- [; T! |5 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. c Z& @6 c7 v/ L! d, O. R/ @ if (!pItemElem)# g' X: w3 s$ Y( Z
{
, d& R: p: @5 k" _! @- T. [; | vItem.dwKind2 = 0xffffffff;
& ~7 {9 Y& T0 W& m* R0 u vItem.dwItemId = 0xffffffff;
9 q% Z) B% \! t" t* [; e% p2 @; ` vItem.nIndex = i;% K$ W" ]5 g. H
}else {4 z% N9 H) y5 T# n0 J0 K! c
ItemProp* pProp = pItemElem->GetProp();
" O R$ A+ _) u" Z) M" A vItem.dwKind2 = pProp->dwItemKind2;
6 [: |1 i7 y- P5 T+ n vItem.dwItemId = pItemElem->m_dwItemId;' m$ N9 n9 ?4 T# X% z( A7 v
vItem.nIndex = i;8 y4 T) `7 @6 }/ {- b
}- _6 A6 t$ N" ^- n- x# O; [5 Z) G1 Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 [; g( x. g4 [1 S4 O. f4 s4 a$ K
}
- c) Z0 |4 V @ [: y& ?) S% p5 G /////////////////////////////////////////////////////////////////////////// q/ f* f) C* i* v; f; Q
sort(vItem.begin(),vItem.end());//排序
6 q; F9 }8 P! b, Z //////////////////////////////////////////////////////////////////////////! B1 _+ e! j# ]! P0 p/ ~" a5 }8 ]
//交换
7 `9 t1 e9 X! x* o5 i* I! ] for (size_t i=0;i<vItem.size();i++) U, U% \- t. p# |1 S, m, Z/ C( E
{
) z1 M, i3 ?) A3 v //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 w7 _" s8 V# y$ _4 O {" Q
pInvSort->Add(vItem.nIndex);
% i3 U7 b+ w! `/ @ N }! g3 w" Q" d5 b+ a6 z6 r; R% p
BYTE nDestPos = 0;* F$ P S c* t h1 P6 S/ `& t
for (int i=0;i<MAX_INVENTORY;i++)" Y& s; z/ P: E: u; h
{
% E! F9 [' Z% F$ F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ @8 @/ ]- m! Q' ~: e% b
if (pItemElem)
/ S9 f8 C9 h; o8 E/ Q0 k, \ {
, Y: r+ `" p3 Q4 u" i if (IsUsingItem(pItemElem))9 L2 D! }. Q0 q( W& p
{
/ p+ e: [9 p/ k! h. Q //这个位置无法放
- y$ Q! r* _9 }' j nDestPos++;
. x$ X" D s8 q0 G/ J! e) ]7 \. W }
2 H( r( f6 K$ L( b$ }9 g% y }
; j# F' Y3 p/ a r BYTE nSrc = pInvSort->GetItemSrc(i);
- f( ~4 X3 U/ @5 e& K# W. R5 I" s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! y1 j3 G+ L. E/ V5 U7 c
if (pItemElem)
% K6 J% ?3 _% c" n {6 q! U# h- P5 h2 U& s( N
if (IsUsingItem(pItemElem))
6 ?0 r/ r1 L) ^% N* H1 M$ t' E6 _( s! @ {
$ q1 x# @6 u) L4 _ D //这个道具无法移动,跳过) ]; ?* |. W8 S- s1 q
continue;
K- y% t/ @5 Y$ m: e }+ ~, t+ F8 ?8 i$ Z$ c, V' G0 _* w
}else{. t/ f/ ]3 L+ D
//空位置 不用动
: d5 O1 u1 R- L5 y1 G- J) P continue;
* n: e# y4 @! N2 Y' i" C }8 k. |; A f ?/ S
//////////////////////////////////////////////////////////////////////////' z; J U" D7 Z, t6 I! D
//开始移动0 n3 a: M8 }+ W9 L7 Z" i
if (nSrc == nDestPos). r& E: b7 o' G
{' M; a) K4 \, s: B" i
//原地不动
9 o T5 c* I# }* n3 a _* \: ~% w nDestPos++;, C! d; R! {) t$ {
continue;
6 q) i7 n R9 C* ^( ^, { }. `8 C& R, b/ ^: a$ J4 P
pInvSort->MoveItem(i,nDestPos);; n1 p0 |! e0 Z; o( B# X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);, J) F( M: ^+ |& T5 A$ {
Sleep(5);
" s. g$ G* y# Z" x* |# O //Error("移动 - %d->%d",nSrc,nDestPos);, ?6 x! @9 l$ J; |1 ^0 @; D- G j
nDestPos++;
+ p: D: P% N @ S }3 s8 r& K \! ]% |5 [9 s
//取第一个元素的信息* U; P. D7 L. J+ O
/*
) o" M8 f, X, E6 t5 V2 H) X: m if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! ~7 p2 Z5 |) q a* \* M
{
6 ~9 a$ p! X) M5 B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 @7 Y( {! T; J- ? g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& P% V; Z5 F( Y* u8 ^1 L/ g
}
7 Q/ m2 ~: Z; @3 Z8 W5 D0 ?0 ^ */
1 g4 R3 [( b$ a a) v* ? //////////////////////////////////////////////////////////////////////////
& V) n* c& K9 y7 N% x, c break;, @: ?+ }! _9 R T. ?$ ?/ `; V$ T" h
}
) \9 Q( B0 A/ r' U* p5 _' a } ( k! Y$ @- \+ V" M' \3 E
}
9 ]5 a: _5 \* D3 l$ x+ n T9 v% H. Rm_wndMenu.SetVisible(FALSE);
8 \$ L o+ [$ @; l0 B9 Q/ o$ z) }! d8 Z& _6 g; C/ m
--------------------------------------------------------------------------------------------------------
% W% Z( W1 W9 V! B& w t7 s搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. A# r, L" L0 U/ u{
U- t" p @; V8 c+ h* Z2 [5 q vBaseMouseCursor();' z$ B8 m' p- `. e/ N
}) j' g: U9 E5 ^
在其下添加:2 z! C) p8 R" m& G* q7 W7 L, V3 N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 T4 E* }6 p# u& S: l{/ L( c7 p; g! L: Q3 |& o$ ~
m_wndMenu.DeleteAllMenu();
& s3 E& f6 g4 B: P& Qm_wndMenu.CreateMenu(this);; j* s+ v& l0 S, p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ y5 Z- w7 @' {' O; ^' x! C3 d/ P8 f1 _' Y3 }3 |: n+ b$ R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 f, B* z3 [- I* i3 p& s; r" J{! j7 D' {$ e5 q5 ^, ?
//P以上级别才可以删除所有道具
0 z; [8 y8 k; ? m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 q- O0 _7 i6 y. i}
* p/ q3 f1 [, {$ I! v: e/ s& Y4 vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 N0 A+ s( o! n3 D+ u4 Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 B7 f) z( x i s
m_wndMenu.SetFocus();
* ~4 I/ q9 {+ U1 Q! I}) }, T* T3 l$ D4 r: R+ J' r9 l
------------------------------------------------------------------------------------------------------------$ Q0 J& c* v6 C
*************************' j4 n* I$ S6 b- W) y7 L
WndField.h文件 F1 r3 X4 T' X M7 G! D5 s. o, s/ F& n: e
*************************
: n$ P2 B h0 e/ e- ], u4 }9 y搜索:BOOL m_bReport;
' ]" O2 ?; m* X其后添加:9 q3 U$ F6 q3 a6 l8 Z* B9 `2 I
CWndMenu m_wndMenu;
( w# S: c+ J% C' n2 b) _2 M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: M8 q) p5 _! }8 w3 A9 w+ t$ d
其后添加:9 c% \* \8 R+ u& b$ X
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 {4 h7 |- z- T/ g x( C
. _# T( }6 e! O" ~8 m
) d3 k7 _$ e6 p9 @2 ^ L
|
|