|
|
源文件中_Interface文件夹下WndField.cpp文件
. h: \: s! ?* a0 _- X; V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 w) v6 S0 r, b
, h! D# R9 ~2 c+ xstruct sItem/ |4 `- y6 }! f( j
{% W2 D: r5 D( s" H9 Q5 {7 f0 ]
DWORD dwId;6 |- ^7 I _- ], {2 ~/ y
DWORD dwKind2;& p" ?5 x- j- F, l! O( e3 H7 U
DWORD dwItemId;
. k: Z5 {' K+ w7 T9 |: iBYTE nIndex;. N1 v, o' G2 q3 y2 ]
sItem(){
5 S3 B d- T. e6 k4 B dwId = dwKind2 = dwItemId = nIndex = 0;
" \2 Z$ K$ |; K5 s* B: O1 t}
/ H8 `$ p$ ?+ Obool operator < (const sItem p2)
3 }; r t' ^2 `# W q/ |- m: e! T{! P+ J/ E: r! t8 Z3 D% N) }' G
if (dwKind2 == p2.dwKind2)
- i$ h1 A" q: Q. z9 I2 b' g {
$ B: ]# A# v. K2 V return dwItemId < p2.dwItemId;
: j2 k) [ _- { }else{
. O( l4 x$ f$ P! f1 m% n, B return dwKind2 < p2.dwKind2;
5 Z( W0 Z6 F5 s, X }
L9 M- Z/ _5 v8 [! u0 Y [' e) d}
a& w* m6 o4 [6 _};
1 s8 v+ B7 z; m' e& f4 wclass CInventorySort) W# F3 O; y$ ]9 U. f- G
{
% H! ]! p- g2 s1 kpublic:4 Q9 _5 _ {5 b6 x2 B
CInventorySort()# D; g# G, m( @$ b7 P! L5 H! X
{
3 m/ x+ k; h7 d* `6 x m_dwPos = 0;
' s1 c. I! ^2 G}
3 i6 |3 R, b( \+ l4 v~CInventorySort(){}
: l m0 @/ Q# H( F7 Dprivate:
+ i% l( O& C2 d3 |! E7 _- OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 W$ n+ U3 \% G: M( ODWORD m_dwPos;$ G9 Q! k: C0 E0 J4 M
public:8 N5 H, W6 a6 Z. u- X$ d
void Add(BYTE nIndex)
$ W e' `$ o$ N! T{
! X; t I5 l9 q if (m_dwPos >= MAX_INVENTORY)
/ F6 J1 p4 M4 F. T! ] {2 `0 T0 j7 \) {- [* J) T+ P( o
return;8 F" I! h1 l- l4 M4 Q
}# v) F& c0 M3 [0 [; z+ O; O
m_Item[m_dwPos].nIndex = nIndex;
5 Q, B! u1 o7 }+ s( N( H! J1 a) I m_Item[m_dwPos].dwId = m_dwPos;( W# C: u o' g) g4 @7 L& i
m_dwPos++;
$ b" N: J/ A J& e/ m}/ e+ H4 b9 C, e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; T* E& b( K& W# v3 Z: |2 B! \{
# R: G( E1 i+ ?) F6 N for (int i=0;i<MAX_INVENTORY;i++)3 P- X4 k" e9 f4 h
{
' ]/ M! g* W+ L. u9 N& t if (m_Item.dwId == dwId)# A7 ^* L8 X3 n J. K
{
8 z( J& r! H' D$ Y return m_Item.nIndex;6 F! c7 i8 h+ n5 P& L/ N
} ]! _. c1 V. X% N P
}" o# M% L9 ^5 D& |) x
return 255;
0 q! f* D Z% s9 a" f! ?. ] e/ Q1 O}7 V( Z7 `5 C% @" Q. E m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% r( D: [+ I! V/ o{8 p- m( e" k* {
BYTE nTmp = 0;
: h$ y/ J; [; q Z+ T bool bDest = false,bSrc = false;
& M3 I# m! S* \ K7 m d1 u4 Z! j for (int i=0;i<MAX_INVENTORY;i++)
% S }& q5 F9 P/ L( t {
" G! F: w6 E9 I8 O4 r if (dwSrcId == m_Item.dwId)
5 N& N L5 j5 |. Z' c) q) V1 ~+ b/ I {; x& ^& N D- j6 L- X( t+ w
//id相等 则 改变对应的dest和src( |9 T, R$ Z+ Y+ } N) l' l
nTmp = m_Item.nIndex;
1 X# x) A6 S ^, V1 ^/ f1 [; Q m_Item.nIndex = dest;
4 U& N: o+ W9 ~+ {% B }7 x$ t0 ^) ?/ H( G: K/ r
}6 Q$ a0 z. \# ~! \4 x
//临时数据保存完毕,交换开始' h- |' M" D n- o+ B
for (int i=0;i<MAX_INVENTORY;i++)
9 M% ]. _7 K/ ]& P2 _4 T s+ f* m {
3 Q; J7 h9 n' b7 Q' Q0 L; ` I9 U if (dest == m_Item.nIndex)/ m1 H X. u; U5 C+ a3 }: L2 w3 I
{5 X G1 r* G. J* r6 n
//id相等 则 改变对应的dest和src
4 i$ ]" k( n3 u4 ]8 o/ [+ H: Q9 | m_Item.nIndex = nTmp;, l; F. y" @. \8 R: C( N6 B6 v5 J2 i
}. _3 c x' ~8 O7 Y- m; L
}
0 C( `$ `5 f; M}
+ ~0 U7 U/ m. C8 I! G; f. A ^};/ H* |/ b; u; _+ H b) p
-------------------------------------------------------------------------
3 r* O: b8 S& ~9 t' ]) _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 L' f! b% i! {1 o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. A: ~8 {2 l7 o. _9 f/ Q/ V紧靠其上添加:
8 ?$ J' x3 t! ^9 ?if( pWndBase == &m_wndMenu )0 f( Y& B. m6 t% J9 e' f1 j
{* D1 u( ?9 D9 W* \& Z
switch( nID )) v8 n1 Y3 N! W* q: K! c$ e
{! M* P4 g( F# ] i7 x7 u
case 2:
/ M2 w8 A& G C/ q& G& J1 r {
3 r3 i, z7 {* l7 x, t \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 G: p: q" d9 `5 V. m# M# H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 `/ I+ e% e0 l z3 J7 A I {1 P) W" l! O4 m# @) G. R. f( |
break;$ h5 U6 Y9 V, [6 p; r, q v' T, W
}
+ c8 N$ a+ K' E) ~6 v+ q4 O0 r2 h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 R2 j3 H0 l! G6 s: |4 J/ D3 P
{; Q0 ~! v2 e; `& e& c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 G9 B. v8 H: Y! s+ D, J r2 n
if( !pItemElem ); o8 J* V$ r4 y% R
continue;: M4 A0 _1 b9 [5 H X" m
if(pItemElem->GetExtra() > 0): x3 L! U! `1 O1 e/ t; a
continue;
* N% s4 E& T# a8 d3 Q( O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * l9 q. M$ l9 v; z
continue;* K+ g. S! c D- v
if( g_pPlayer->IsUsing( pItemElem ) ) x0 k" n( l6 S I/ ^
continue;
' i$ E+ I( U3 _# @ if( pItemElem->IsUndestructable() == TRUE )0 ?8 J! A( h, s. @
{
3 c1 n9 j; R A! G& q& [# X, D2 z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 n- h3 G/ S! `$ _2 A+ p6 {
continue;
" p& {: \) V- m }2 Y2 f: N9 ?; [7 N" \( U9 Q! |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! V# x6 [! J- g; Q
}) h$ ~5 V1 a) W& `3 s: J: L
break;
5 |9 r% S; e1 d j7 [# d }$ T$ q' {: p* Z5 j
case 1:: H1 i9 u2 I/ v/ u7 g
{
w+ V/ j$ z1 `( s/ Z$ G- B //整理背包
9 _! p. W3 n7 R1 _ //////////////////////////////////////////////////////////////////////////
( n8 U* x9 q0 C7 F) g$ H& A* f //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( M! _+ E1 f2 L0 ~. z7 I6 _9 [* {
//////////////////////////////////////////////////////////////////////////3 b( K2 {5 ]4 @. G
//////////////////////////////////////////////////////////////////////////2 U4 B" [& I" B$ j- a! b
CInventorySort* pInvSort = new CInventorySort;
5 _ t7 k2 J P% V6 }) V7 K vector <sItem> vItem;: o z3 C" l8 c& x" Y/ Z4 [1 Z
vItem.resize(MAX_INVENTORY);//初始化大小4 N# k) y N& a6 u9 R% F
//////////////////////////////////////////////////////////////////////////6 C' l, o# l$ R; K: R
//填充数据/ j2 d/ p, Y; v
for (int i=0;i<MAX_INVENTORY;i++)9 C/ c% x+ G' ^' [
{* p, x4 q( `2 f0 d. }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 Y2 g+ Y8 b' h# ` s) [
if (!pItemElem)) W6 m8 r' |! j
{
, M4 h+ {) O) }0 y vItem.dwKind2 = 0xffffffff; I9 u/ D7 l) I6 t5 o
vItem.dwItemId = 0xffffffff;
" |) G& H+ H9 ]9 _ vItem.nIndex = i;9 h0 n$ @* P5 D. U C7 b
}else {
k8 e! e6 J7 u ItemProp* pProp = pItemElem->GetProp();" h# g% Y" C# ~
vItem.dwKind2 = pProp->dwItemKind2;" G' Q Q. o1 i1 q
vItem.dwItemId = pItemElem->m_dwItemId;) o* P0 H6 v: n& [
vItem.nIndex = i;' m* k& ]- f1 d4 w! D/ {1 c- h& F' r
}
2 L! D/ h8 i( b; W( v6 _9 P1 W //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' l1 {* q: P9 ^, \* @" f2 H
} w5 S) r1 e' \
//////////////////////////////////////////////////////////////////////////
% ^0 u" i$ ~, I, ^( a' | ^ sort(vItem.begin(),vItem.end());//排序
) U/ K+ ~- W: n* e# R# N //////////////////////////////////////////////////////////////////////////
% }2 J g, H" P, o/ v3 X O //交换
; K& X& q, Z( `% f- Y1 m for (size_t i=0;i<vItem.size();i++)( i, Y4 t/ z J
{
+ w) A2 j$ N% b+ M/ H9 _9 L2 }( f //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% ~; h, ~/ D- M" R$ C
pInvSort->Add(vItem.nIndex);
+ G, J/ M' { t9 F1 ^8 L }& B" g, W$ J% ^4 ?
BYTE nDestPos = 0;
9 L, H7 A/ `, o for (int i=0;i<MAX_INVENTORY;i++)
& A; H. t J6 b) C: \ {2 N( W; |* m2 Z$ m( f; _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ z4 l$ S) N) I8 G7 b5 d if (pItemElem)
: E! Q: h9 n( v: o, ]6 N2 M9 b* ?! ] {: q! G# n/ m Q0 w, C/ U
if (IsUsingItem(pItemElem))4 A8 B- x n9 ?# b) ]% V! J7 T
{
0 T" Z* Q, A( o+ p& b8 l; l/ W //这个位置无法放: X& l. D8 H. Q1 D* m: H- R l9 n* ~
nDestPos++;
0 \* C2 v0 O" L: W. P9 n }
6 x7 ^' \6 C$ p }7 w/ n7 M8 ]8 q# o7 X$ a7 ?+ U
BYTE nSrc = pInvSort->GetItemSrc(i);
* ?5 A7 ~. I' o, v( p+ N pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 h- c; q8 T7 |. z if (pItemElem)
' \' k% ?) M3 T3 f9 K; p {: @# ?* u) {; V& A# Y, \6 y
if (IsUsingItem(pItemElem))
, z w' v! |! ?$ J8 | {
! Z, [0 h7 z1 O3 U4 c" d //这个道具无法移动,跳过9 T! U: k2 b/ p7 D& `
continue;
% X1 i) S4 h: S4 N }$ z4 F! |5 h- V7 y" `
}else{$ D; Z9 E% P6 @& T! W$ G' x. ?
//空位置 不用动, J! g4 b: V8 U, a) Q, E
continue;2 t- }) H7 M2 I# m/ G# o4 C! r
}% r# c$ B* N2 Y
//////////////////////////////////////////////////////////////////////////# E+ S5 ^4 Y9 c8 ?
//开始移动
6 S! q6 Z0 B4 {4 V4 V9 i if (nSrc == nDestPos)4 T; d2 X( p- f& D+ ~0 ]; K& T
{
|: r. Z I2 `4 K //原地不动- J7 k+ C# R) P6 T) U
nDestPos++;
& K# d* h# m' o. U continue;/ @; F- M# V7 \ _) q y1 K
}
" N, ^$ A) n. T& g6 V c6 A pInvSort->MoveItem(i,nDestPos);2 S: L# ~+ z0 N" z* y$ l0 L
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& d: m( D1 |* b- a- M
Sleep(5);
9 J5 f- k. S, P //Error("移动 - %d->%d",nSrc,nDestPos);
$ B! T$ A$ t' \2 I; \' }8 @# p+ V nDestPos++;' D9 f* j2 S/ J
}
& \: _$ C* s% I7 q //取第一个元素的信息* K8 N4 C/ Y( x$ X' Z$ a
/*
+ k- }$ Z, v1 P if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
q% v& G+ d" ~9 k& x1 P+ r! ? {
% H4 b5 h+ U( _9 \2 w Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ Z0 X* x& m" r4 r& H. c0 C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ |. b3 q8 d8 t: s }
! f7 L' j$ s- s5 ^6 [ */7 O% @ g; J, J h. \, |7 o
//////////////////////////////////////////////////////////////////////////
7 s! ]+ R2 ~' Y8 t5 T0 b) x' l break;
1 L9 X( X& A- M: C% |% l }$ x2 F" r" Z& K+ s
}
" F) j: N! C7 ]/ l& { f- M- {; k3 u}4 V1 V( Q9 g( J; I
m_wndMenu.SetVisible(FALSE);/ w1 ^. O, u# o0 p) P
4 l# g2 M9 s3 d0 H
--------------------------------------------------------------------------------------------------------. e2 ?, b/ }) ]- d* V8 K
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! |% L; i9 r# |* p, z$ O
{6 w% b% x& F9 S1 U( a1 b7 x2 c5 h7 B
BaseMouseCursor();. z4 E9 |! u8 Q5 u( d, X
}" _, J- L2 w# V, b4 z7 U4 S7 |. Z2 w
在其下添加: n- \( @! A% D& |$ @% n- _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% S) B& ?' f( Z3 p% I
{+ O! t6 k. F( t* Z [* Q8 t; w
m_wndMenu.DeleteAllMenu();
1 ~, i3 k$ d! o; rm_wndMenu.CreateMenu(this);. g, t3 c r( j! L* [7 t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# d& b; J3 \) K
- t9 } n$ X) P: m6 a$ R+ Wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: P ]* S. f4 g$ n8 C! j{
" s- x) Y3 w2 H. ~( @ //P以上级别才可以删除所有道具
, V, t9 @; K- N# D# Q# m4 }, ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* P2 i6 c- p% t* N6 \- `: v X}, c6 A( \( ^) y/ n( O
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 r" O; {8 ~% Z4 n5 e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" l7 M# [6 n, l3 T7 hm_wndMenu.SetFocus();
* {8 K0 u6 g5 k}, Z8 ?4 j, u- I; R Z ]1 U
------------------------------------------------------------------------------------------------------------
. K2 J5 Z3 o8 ?. s8 w' x0 G( Y*************************5 |3 X( |! `: f) F3 T
WndField.h文件6 ?9 c: I0 m: X% e0 I* D
*************************# `. [! W3 F4 N- T1 E3 T
搜索:BOOL m_bReport;, s. z$ L5 P+ C; H8 x6 V, _
其后添加:
; u+ C) k B$ [( K- w0 e- ACWndMenu m_wndMenu;
4 s( \9 G4 @4 ~( q/ y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) P; p- ~) E: H7 f( F% h$ ^3 z! j
其后添加:! f4 W3 y3 |' m/ R) d; L. g* J
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* x, l9 ], f( n# C3 d8 B' h
$ E% }1 M4 w3 ~# Q T3 r' g' h( f, r. b$ }+ N
|
|