|
|
源文件中_Interface文件夹下WndField.cpp文件9 U7 }, L. U) w# T/ i
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" v! z7 K! k, `0 _
7 V" S' [) d9 q( l, ^$ Q4 `1 d) m' ^) n
struct sItem$ X- F3 e: t( T3 J
{; l2 j, B" y8 i8 t% X, {; Z. i
DWORD dwId;
: ^9 {" l$ E+ {! ?DWORD dwKind2;
: p6 y2 ~6 O) L- C; R: fDWORD dwItemId;
, u7 G7 r: _5 o+ u5 u8 O g3 iBYTE nIndex;
9 Y4 _9 N" r1 o" W( C, j; ?1 QsItem(){# i6 a) m. K4 C! w% W! g, b ?
dwId = dwKind2 = dwItemId = nIndex = 0;0 U# G# q2 }' {- x3 B. m9 W! s
}
/ z) f& }4 Y! f2 d3 ybool operator < (const sItem p2)6 [/ X' R% p" ]
{
U) B( x3 R( [. U) `# }2 O if (dwKind2 == p2.dwKind2)
+ Q F1 d7 c3 T! i( @5 X! T* m9 f {* w; M# X) i, p% y; K' b7 }
return dwItemId < p2.dwItemId;
& q8 A# w( v/ r; D" Y* }+ u6 u. T }else{; F. P5 o$ M. }" E! w. b+ u% v5 Z
return dwKind2 < p2.dwKind2;: m; c& F. m8 v4 ?
}
6 |: _, p$ |% \; M Y* X$ b}
. r( {5 p7 S5 t9 Z$ b};1 T) o/ k$ [" B9 D# \ d4 Y
class CInventorySort; u+ G4 U6 z, \: b2 [
{, w- j2 |2 b+ V0 c1 G! i
public:: o: V6 O+ B" F$ a* k. n' k
CInventorySort(), g, h$ b" u4 M' J
{
- s6 D4 w! a% G$ U) e m_dwPos = 0;
' p8 T' {- W# q, `( i* z/ i) @$ ]}
/ [6 T/ W1 j$ Z3 N I~CInventorySort(){}
9 D* V! S" o5 C* { o5 v1 o9 aprivate:: ]* ?0 f; p" c# j1 i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ J; m, q6 ?0 \. G) pDWORD m_dwPos;
# r. H8 s6 _+ v! ^. ~/ A+ ^4 H; tpublic:8 X2 Y* G) M5 i/ e! F! m2 ^* o T& H
void Add(BYTE nIndex): N: N8 W2 Q. B6 o! [+ `4 X1 \! ~
{
; G, `, A. [9 o! X6 ?1 E* h5 q' n if (m_dwPos >= MAX_INVENTORY)% A2 h+ }: h& H
{
! @' l9 G; W8 c9 H% G* k E z return;# V7 t6 C; ]/ ^: |9 K+ E
}
1 p* y1 K: f. U- ` m_Item[m_dwPos].nIndex = nIndex;
1 }6 x2 P9 _- U* D; ] m_Item[m_dwPos].dwId = m_dwPos;- b3 P) s- I9 ]& y! M6 R: B8 b
m_dwPos++;
; O+ i7 [" G' H. A1 n}) R% J8 o: Z ^3 L6 z, M3 z( J5 s5 Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' R+ ]) f7 `8 e H& i/ b
{% p X, O$ O4 {; ?0 L, ^% o
for (int i=0;i<MAX_INVENTORY;i++)
5 g0 J4 l- s! P1 g- [# H* _* F {/ ]- T1 ~$ s( c2 G2 R
if (m_Item.dwId == dwId)6 A2 z9 ~& J* F: c3 [ t' T) ^5 x
{
8 E1 S/ _& i6 c0 ?* Z4 ] return m_Item.nIndex;
. e2 y* ^% J6 M* \ }
I. A a8 x' G% T6 K }! F P. v1 a) f) |# n
return 255;
7 x) P/ R$ ^, K. | H}
; C# w1 A( t" u8 n7 Z9 t" ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" P' y( i+ u! }5 A# V
{% Z8 i/ V; Q2 ^8 j. L. t8 z
BYTE nTmp = 0;; J0 T: z* T8 S& m* s; V2 W8 }' ~; d
bool bDest = false,bSrc = false;. z, _: O$ T( q# t
for (int i=0;i<MAX_INVENTORY;i++)
* T- ~. ]9 E0 r' m/ ` {
4 S( l3 e- @1 h4 T3 s if (dwSrcId == m_Item.dwId)% P: F8 ~# N7 K/ }
{
' S- J$ N% n8 I x: J //id相等 则 改变对应的dest和src
5 Q1 i- w- h% f# b+ u/ | nTmp = m_Item.nIndex;
`, F! Q8 V5 q- [1 D0 V m_Item.nIndex = dest;
3 V* Z `* ~1 p, N7 f }
/ f' K! t( [2 W1 i; U }: H" B, ^& b% x; F, j; ~1 P$ }: l
//临时数据保存完毕,交换开始
% W9 h5 \. y5 B# n for (int i=0;i<MAX_INVENTORY;i++)& F- _1 E: U N7 u# Q, i& ?
{
9 C) W6 R' ]) e o+ O3 K- l if (dest == m_Item.nIndex)
" G0 n# d; b( `$ | {' F$ C; ]2 @( Q# @. O) k& K
//id相等 则 改变对应的dest和src+ X1 Q/ I" M$ E* }
m_Item.nIndex = nTmp;
a: j, O8 J* X4 [) v f1 G }
1 v6 ~3 F6 p' Z! g" H! g& F }4 s m& L' u% o5 O0 Y
}+ K; B% `: H; Z T) w+ A
};1 r" J o0 O+ C! Z6 x
-------------------------------------------------------------------------" \, D) U- ?1 e( s( k* g6 Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ \+ `, G( G3 M) Q6 U& g& w
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) B5 D2 o% L3 d' E7 D
紧靠其上添加:
6 h8 u5 p" F: Q/ Z* Tif( pWndBase == &m_wndMenu )
7 Z0 I) X3 C/ ]; d, _+ Z{. |9 m. e5 t' o+ @9 o
switch( nID )
0 d: S5 n5 H) n {: L: `; c5 `9 e5 r5 O
case 2:8 m3 M% [* E! g7 \: I
{
; v5 t8 e/ F( e3 E9 Q9 x5 O' y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- k1 l6 F/ Y' `, M
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# g/ _* l! Q3 V% `/ X {7 i, t8 _ }& g+ V" b% v8 h
break;
7 n1 ?% |; M# v, a }& s: E, i7 B* o0 j. F
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 m A; P* X2 l+ N1 S9 K
{
0 u8 @7 n0 ~2 M6 j+ c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( {+ w+ O1 R# g& a& V4 f/ ^
if( !pItemElem )3 h) q) @: u" C9 l6 e3 c
continue;
& L, n6 ]( N' f+ y" c: n9 V if(pItemElem->GetExtra() > 0)
; ^- d7 V; J, f continue;
* b x$ ^% x) }- v" S0 m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 s: l! \. S! a4 t0 z p* C) J& q4 q continue;. a# b& m* ?* D0 v2 c# s
if( g_pPlayer->IsUsing( pItemElem ) )3 P: ?$ J" C G2 u2 v, Y
continue;
4 i9 j1 q0 H$ p J if( pItemElem->IsUndestructable() == TRUE )
6 ?2 R& r: }% N3 O {# i' A$ Q$ H7 a! B" s/ H* G8 D R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ a, E+ p t9 @' y2 b9 i
continue;
1 f2 m- h. _4 T }
, o+ s7 @3 H+ M( i: d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 W X7 u" ]6 J, K5 } }/ _* @! }- w0 {+ U# m
break;1 {% Q0 L0 A* G. S/ j7 V0 k$ a9 c
}
' x' v8 ^$ Y8 d9 S/ h* e case 1:4 V g9 ?0 b! B8 }
{( u E* [2 o, q/ V: x! v' D
//整理背包
! Y. ]7 y$ f4 \- C( i2 q. ~ //////////////////////////////////////////////////////////////////////////
4 F' A, w" ^/ X4 ^* Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" e) V: P, R/ X! _
//////////////////////////////////////////////////////////////////////////$ J$ T g3 Y r8 c
//////////////////////////////////////////////////////////////////////////
% R, p' s# d+ Z CInventorySort* pInvSort = new CInventorySort;' I- T1 b `& m$ \
vector <sItem> vItem;
* @' y5 g @ l$ E% H; c" s5 y( G, e vItem.resize(MAX_INVENTORY);//初始化大小
- [9 M( b! d+ a: m4 A# Y) u //////////////////////////////////////////////////////////////////////////0 A) f9 B3 N3 F; @
//填充数据
0 W- u3 ?5 D/ Z( C/ Q for (int i=0;i<MAX_INVENTORY;i++)
7 q" B( ?8 z. P! v$ @8 I2 ` {
$ ?- a: P# x! C) K( n, Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- O: W5 Q5 }2 ?
if (!pItemElem)7 Y1 {4 G. X, Y7 J& {3 B; s) C
{
8 K5 ^: t a* r- V* B# ^# Z vItem.dwKind2 = 0xffffffff;. B7 Y5 ?# A7 w' K( I* N
vItem.dwItemId = 0xffffffff;/ ?3 v7 _0 k* {& c) ^/ v
vItem.nIndex = i;5 e# P! ]$ R& e. ~: r
}else {; B5 F* t/ @2 y9 ^/ q
ItemProp* pProp = pItemElem->GetProp();
+ k* @- N% p1 y) M vItem.dwKind2 = pProp->dwItemKind2;
4 O% K) o: ]/ A. n/ W vItem.dwItemId = pItemElem->m_dwItemId;$ k3 W/ }' F o4 N9 Z" M
vItem.nIndex = i;! E( M' X! z) z5 S* R( D: Y
}
* _7 f0 _- Y" c5 y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ r1 O/ ?) d& F) V' g
}2 R" Y% R/ Q. K' C
//////////////////////////////////////////////////////////////////////////
3 s$ t5 }2 Z- T0 t sort(vItem.begin(),vItem.end());//排序+ h2 U# P7 P5 ]6 S4 ~2 Q
//////////////////////////////////////////////////////////////////////////0 w! L6 s% Y5 L, L! @7 x" ~5 y: Y
//交换
2 Z3 K: J" l o for (size_t i=0;i<vItem.size();i++): _+ w$ V# S3 q, F! H
{: G' V& V P$ S2 l9 G4 k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 \' Q) W3 u; R& B, o; \& | pInvSort->Add(vItem.nIndex);
9 @/ v+ c" X6 }+ j s }; c8 K* R) b+ b# T |
BYTE nDestPos = 0;
& t4 J& i0 v, S for (int i=0;i<MAX_INVENTORY;i++)% s' E: U. Z4 g/ } k3 ^/ H/ p# N
{) ~3 x0 S$ @& v0 I" x9 n9 \4 i! }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 M/ s7 @) C2 O
if (pItemElem)
1 _" E; K+ X2 p0 g- h8 q* V {
% f0 m, ]) e O- a if (IsUsingItem(pItemElem))
+ x3 k6 m2 }$ [/ f! C {
' d8 I2 Q" q j, |, X v8 L" @/ z1 B //这个位置无法放
: n- r, Y2 S$ V, M7 \ nDestPos++;8 [3 k4 ~( S" ?" ~% f, F. T: p
}' |8 v7 o+ r/ c k( s
}
. T" {8 I# A: C( } BYTE nSrc = pInvSort->GetItemSrc(i);& b, p% F+ z4 T' ^
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 Z8 H4 _! I6 r: ]: I, Q if (pItemElem)1 U( F9 P! u `% h2 E6 A
{
3 t/ o! Q% M! B. I+ k if (IsUsingItem(pItemElem))- b' v' y- R8 S Y1 f. t. b
{
' | Z5 M4 j' l* B4 u0 G4 x7 y //这个道具无法移动,跳过
( W3 {0 d1 [8 u0 v. f4 O: d continue;
5 u9 V" J$ Q+ E" i0 c% ?5 A! W }
3 s/ @, h/ Q& j9 K0 Y, i }else{8 d6 W0 U, a) O# x9 p; Y
//空位置 不用动' c* Z; ~$ G- ?$ G9 i0 e( P/ g
continue;% p" a; |" r- a, Y. C
}
9 N, d, Y+ t( j' @3 B3 {6 k //////////////////////////////////////////////////////////////////////////) w: m/ c1 ]& n4 z6 M
//开始移动
5 u2 z5 n6 s( C. w2 O1 D if (nSrc == nDestPos)
; \6 m/ w" O8 j! o1 t5 x {8 x( R; G8 O/ B8 X* A; T0 |/ U
//原地不动
( [$ [! k' B: L5 _( O, V) D; Z nDestPos++;
: m( l0 o9 r: D, ?2 X* Y- R( o) u8 s continue;
1 ^: ~+ N3 e i* k+ p }/ r3 D+ H7 @$ ^. x) M2 O- ? v
pInvSort->MoveItem(i,nDestPos);
I6 P% y8 G; K. {2 y g_DPlay.SendMoveItem(0,nSrc,nDestPos);
}' w. v3 d4 @' J! p- Q Sleep(5);' i2 T$ g; }/ S$ ^! R
//Error("移动 - %d->%d",nSrc,nDestPos);
# U3 X, {% x; |, W) ` }3 Q1 D( v nDestPos++;
p' o4 k8 b9 w* g1 ]6 v2 o }5 J U( s, l/ O! {
//取第一个元素的信息
?3 A# r5 @* n, Q/ @ N /*9 O( `' ?9 _% r7 W& P, Z% p" M
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! _4 F2 ?4 B" ?. i1 \! l {) x; W: v7 E- w+ L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# ~6 ?/ t* @1 E/ k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- W# M& D4 S3 x( w }
7 H# ~8 m N0 B1 ?9 W, y% ^; u7 q */
- p+ Y) T, m( ^+ z& i1 } //////////////////////////////////////////////////////////////////////////2 F5 }! [! d& S9 w3 s
break;" V# _4 [" V1 |( x }3 c
}
8 V6 k. ~; t# }3 b }
. |* G( L, g- a3 D5 g p}
8 y% w4 h* m! N1 G2 `8 Hm_wndMenu.SetVisible(FALSE);3 Z6 m u# |, N* f: y3 P# X* X. C8 B
" {- z% V/ V/ U# |, [" O$ W! Y--------------------------------------------------------------------------------------------------------) t. D; T( Q+ _6 y: {8 S7 t! L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' l; d }9 n7 w: S, x2 r+ p
{
3 C, E+ W7 o+ w4 ^3 NBaseMouseCursor();
4 h- e. g5 V4 x& b- ]& o! `}, ]$ `0 U" B3 w# K1 u
在其下添加:
: u( D2 [$ C' A7 }- Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 H0 _& F2 ~/ f1 @1 k$ \
{$ ? H0 k% B' R8 J, M$ R
m_wndMenu.DeleteAllMenu();
( o- n# k$ j: S) B: f# O2 T4 Km_wndMenu.CreateMenu(this);- j0 B& U+ f) R% p1 Q: T* G- p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) d" o+ V" K# I8 [6 p2 i
- t n( I& u% A. |
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 r2 Q1 v% `, p- W3 T+ Y. N/ i2 N{
: [1 b" \, _' ]/ Q ^- M- @ //P以上级别才可以删除所有道具# i& g( T' ^. X3 T
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 q% c" c' @2 h7 ^5 ^* D- V7 y}
& ~- W; n) Z7 }/ h, Lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! s0 g/ X& h1 g2 T% O. Y* Q0 U* am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( I$ y1 K4 h* ~* o: K+ q2 Ym_wndMenu.SetFocus();
- `1 `7 Q; d# L5 s$ c8 x1 Y}, l% _5 }: B: h
------------------------------------------------------------------------------------------------------------
+ M# z- G2 x) c Y6 A# ^) O*************************! O1 Q* T" {( p p5 I$ E. B# Q
WndField.h文件
: A& Z! _8 ]' s************************** j* `$ V, `! x& N) P) C
搜索:BOOL m_bReport;: @. b: y6 C$ B8 u( ~3 ]
其后添加:
' Z, \, D+ L+ TCWndMenu m_wndMenu;
L7 B9 `% p* v; k) ?' K! f0 E搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 U8 @/ g7 R9 f0 r
其后添加:6 J$ f* M, q( }! ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 W0 ^, ^9 x2 F- `+ p) W( W$ L# E' _2 G
& S& [2 H) P6 |9 k) i% A
|
|