|
|
源文件中_Interface文件夹下WndField.cpp文件
# ^: o+ n, l* A% X) k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), F( z0 o7 l! a" m, ]; t* \! e
/ m7 |' [2 z! x/ g1 F$ istruct sItem
; b# p8 A# K! t% K# [! y2 G/ A{2 b% `) r8 ]) k) K. d# L6 b* i
DWORD dwId;$ v c5 |# \: N$ E
DWORD dwKind2;
3 D k. W* F2 `& g7 D6 X4 IDWORD dwItemId;7 k2 b9 H4 ?- ^' v" I( t. f
BYTE nIndex;
2 {+ E# a- Q- N7 A/ q9 j& \sItem(){
& v" O3 ?6 @' f' r dwId = dwKind2 = dwItemId = nIndex = 0;
0 @4 v# a( s0 R, \" |* t' t' p/ H}
, g! C/ o6 y1 v! S8 n6 |" M6 Sbool operator < (const sItem p2). o5 _# c( `& Y) d+ U' T0 H
{3 C( _' c$ p' |: R9 I( p
if (dwKind2 == p2.dwKind2)
; C; B" F# o% M {
1 c. L P; ?# j0 G return dwItemId < p2.dwItemId;
0 q+ n4 [6 g, c* x' s( B }else{
5 P, p8 ` K7 P, X! M: o return dwKind2 < p2.dwKind2;
) \: P/ v7 e7 R7 c! W }9 @/ Y, N" x5 y# B" a( w( ]
}. B* O/ L9 r) N7 r# y, T
};
+ S; X4 F2 Y# o9 H. {2 jclass CInventorySort
9 N% B6 Y6 |& c& P: p2 V" i9 X$ ~8 D{
* f9 d |! }0 K( r; l( [" l4 _; hpublic:
8 U+ R! k6 x3 T$ }, P. vCInventorySort()& y+ `" f x- D+ m8 P8 O$ o
{
2 A* n8 P2 V- D# Y4 b; H; U8 O m_dwPos = 0;9 u; f/ o2 Y% B1 a
}( H. c$ t* p0 y
~CInventorySort(){}
, `. W& Y( u# m3 D( \private:2 D6 {; S" u- @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" m5 {' S$ J. X, b; B5 u7 Q0 S( ]
DWORD m_dwPos;* f- J8 d* z( t; Y
public:! j* i& s* K; q0 E! Z1 h9 @ [
void Add(BYTE nIndex)0 C- d% {9 P f( K0 N+ s
{1 c9 q5 F" q7 ]7 B
if (m_dwPos >= MAX_INVENTORY)
: M) r" g- Y1 V; _( }; m# R {
' D5 g4 o9 W" J) V, I return;
, K7 w* h, \$ |1 V& r }
6 _- ?3 r7 E$ k1 @) R m_Item[m_dwPos].nIndex = nIndex;* f' K5 K0 ?6 V
m_Item[m_dwPos].dwId = m_dwPos;
6 E8 }$ H) k {/ Y4 x3 o0 e m_dwPos++;
# {3 C+ Q& Q3 `% ]}
& \. T. }0 S% y# _BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) _' S* C8 f8 X" _( W{' n$ G4 `& M0 J; n) T! c2 [
for (int i=0;i<MAX_INVENTORY;i++)1 k/ Y. I' K0 ^+ }9 Z0 X. g/ V
{
) `. u4 c! R1 r# t' x if (m_Item.dwId == dwId)
: t4 p) j5 V$ D/ q {/ K/ Z0 w! ~/ a8 K
return m_Item.nIndex;* U8 c# ^% x: v3 q* P q
}9 w1 M/ k3 E8 x/ ~
}/ M8 R1 k' d) \; g3 s
return 255;
4 I- h2 e& C6 a- R}
7 n8 d+ J9 _" ^5 v3 A! T( dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- k& M9 T8 S/ p: U# f; _. K{) u6 h. p: I, H6 n( q
BYTE nTmp = 0;7 E$ w8 }/ D& T5 T1 A% | q
bool bDest = false,bSrc = false;
* Y' h4 {+ d- _) a* t+ p" N6 V5 ] for (int i=0;i<MAX_INVENTORY;i++)
8 J3 @$ |! r( [: n {
5 L/ F7 |6 q9 |5 Z: W if (dwSrcId == m_Item.dwId)
) [+ U4 C% }7 J7 n {
* D$ a7 ?) v: C4 Q/ [8 S2 r8 t //id相等 则 改变对应的dest和src
3 c9 q/ L4 b; Z; j nTmp = m_Item.nIndex;
2 X, n) q4 G7 F9 ~/ ?# N m_Item.nIndex = dest;
! o# e' g! s% w p% N! a }
& [) H @, D( Y/ P6 i9 O } E) @2 t7 ?5 ?9 L6 q8 t' q, Z
//临时数据保存完毕,交换开始6 j/ b& ?9 ^7 w, ?
for (int i=0;i<MAX_INVENTORY;i++)3 g# C7 |4 @$ c6 h/ q9 `, ^- g3 h
{
1 B, r& N2 p5 T; Y7 w if (dest == m_Item.nIndex)
# k( O8 U0 a* K5 E3 {- e# ` {+ x$ L0 v1 ?* h6 _2 `. j, w) ^# P
//id相等 则 改变对应的dest和src% G+ b! t' k) ~) |3 l6 `( C
m_Item.nIndex = nTmp;
0 w' @, {. o. s }( {, n% g/ D+ P; Z# o. r5 q' U
}9 N' @' N0 s; j# P5 L! g4 h
}
! N3 N, U n- [+ @" c};# b/ _( @9 Y- Y: ~
-------------------------------------------------------------------------
- H1 I5 w9 j; E* \- _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): t! S8 u- J/ [- | L" z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 V# x: `' `8 A
紧靠其上添加:* ]- t1 b. ?" }. ?9 r; [! P5 d
if( pWndBase == &m_wndMenu )
' c' [1 i$ o$ A9 H{) s7 z) I8 }& ]
switch( nID )
: a4 c# M; X9 A6 E, b {* F' `* [/ w" r( V. E
case 2:
' J, B. C* C- v, g {
0 }* L0 X+ k) N% ~6 Z, e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 L6 I; U8 S& ]* `: N
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ z9 a" G- R" f5 ?4 G p& a0 u {
7 a/ j9 Z. C# K1 C$ F1 s break;/ h% y4 u) C/ l4 ]+ ^" B
}
, x3 d$ M! i% s, Z8 p+ C' ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- m* ~) `! m- q7 B
{
& x2 h* ?! `# T, [/ ]2 {3 z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 m6 ^- N! N7 ^4 k7 u- S% V if( !pItemElem )1 J, A/ J S" s1 W; z5 [' {
continue;
+ a, ^0 N! l8 C% l3 f3 T if(pItemElem->GetExtra() > 0)
: c2 \" D9 P# o R8 ]0 R+ T continue;
1 a0 k: @+ k: V2 Z) K if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ j: \: \( t* h: S
continue;- \9 n$ K4 B: z P. t f# x
if( g_pPlayer->IsUsing( pItemElem ) )- ~/ [* M( P3 m1 |3 J
continue;. F* b6 S, D! E* w4 y* @9 Q3 s v
if( pItemElem->IsUndestructable() == TRUE )
) V3 i9 H! i8 N# Z% d {" Q, S% \* z- {
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, X0 X3 L5 `1 d+ D2 \& Y
continue;$ g+ ], G# B, B$ |' j
}( M: N8 O2 I0 E: y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 O# z3 O) O9 i; I; z, v! X& T
}. @% K+ E) K) |7 a0 m- B' O) f$ A6 A
break;
9 d8 R w) |# h) w3 L2 o* P }8 u4 }7 @; j e" ?* c( L5 {
case 1:
) K7 t2 o: z9 O {8 ~# Q% Z9 k, ~ u' `
//整理背包; W% C7 t% Y# T: p' b3 S4 y j, c% y
//////////////////////////////////////////////////////////////////////////
8 ~/ I5 V$ r2 S% i$ Q, C //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 Y8 Q% @8 D( j) R9 g3 Z# ? //////////////////////////////////////////////////////////////////////////# u; J& C7 Q# ]! w1 E, H7 t
//////////////////////////////////////////////////////////////////////////
1 G& W! X$ p* i- D CInventorySort* pInvSort = new CInventorySort;
% R8 }* K u! b: B# p+ o vector <sItem> vItem;
7 a4 U8 G$ ^7 `" j2 C vItem.resize(MAX_INVENTORY);//初始化大小$ ?; E4 O& p# H' G# W
//////////////////////////////////////////////////////////////////////////# [' ]. X. o* `: u Z
//填充数据
9 C5 t. g0 S& |) v1 j% Y6 ` for (int i=0;i<MAX_INVENTORY;i++)
$ w% M( \1 S, m% G {
5 M4 q N. T2 b2 _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 S- Q* Q& s+ \, r/ D4 k
if (!pItemElem)& e; {( S6 u- Z5 t
{
- \1 [5 ~) Y Q5 y vItem.dwKind2 = 0xffffffff;
: J" W9 Q) M0 K: ] vItem.dwItemId = 0xffffffff;
z1 I4 A4 F( I3 M2 J6 d vItem.nIndex = i;) q! @+ ^0 d3 M. X
}else {0 [* V! i! J7 _7 T, `, ^
ItemProp* pProp = pItemElem->GetProp();% x& _- _/ I$ Y$ R1 ~/ N+ [' M
vItem.dwKind2 = pProp->dwItemKind2;
: J4 i$ v @4 n, ] vItem.dwItemId = pItemElem->m_dwItemId;
6 |- C9 U- r2 F |& D- x0 W: ` vItem.nIndex = i;
3 U( X2 K* c5 ^- N* ^! K }& K- |; `: S, }2 O0 u9 a, B' Y: s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" r' Z7 b0 ?8 D: U% c }
! |9 y0 A7 S3 ^) [8 |" U //////////////////////////////////////////////////////////////////////////% Z# g: l8 b D4 z. v+ e
sort(vItem.begin(),vItem.end());//排序7 G. C A7 b4 O; G" n$ G& Y1 w( Y
//////////////////////////////////////////////////////////////////////////
* ~6 M9 @- u4 b/ X0 j //交换
: `+ N- L5 H" K' p$ A0 ` for (size_t i=0;i<vItem.size();i++)
3 Z% ^# u0 B: E, t! Q: m9 m( [ {
* k: {( ^' X" o4 m5 ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# H3 h" F! S U pInvSort->Add(vItem.nIndex);
! V: G! e, H4 |: G }* x, R" A t; O+ d9 K+ }; `' o& {# s4 A
BYTE nDestPos = 0;% H4 R, `/ C% [
for (int i=0;i<MAX_INVENTORY;i++)7 Z+ U2 s8 K# U9 T# ^+ e& |
{
- U& e0 E# J# T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' ]+ F, |- J( O8 K9 v
if (pItemElem)# Y2 f7 K! c5 K* z
{
( }# \# n, X& s. Z0 T' U if (IsUsingItem(pItemElem)). C2 c2 U d9 w3 T* c8 ]8 L
{& P" n7 \) N$ _
//这个位置无法放
6 p! ^9 m' |& f5 {% c( f; G% D nDestPos++;$ v- [& ?$ Y+ k h0 k9 ]+ j" e
}9 y7 u- i- \9 Z* h
}
7 ]0 k' X& D! ` BYTE nSrc = pInvSort->GetItemSrc(i);
+ t* V' n) I) R1 X# i S) H- M pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); \2 Z7 u9 A: J$ C P1 E
if (pItemElem)
- J; E# q8 p- A0 E! S( F {, k2 q; i. T" K4 r t/ L1 o
if (IsUsingItem(pItemElem)) `: q, {7 O) E. p
{, x5 a2 g2 A, B- t
//这个道具无法移动,跳过
5 Z4 c# p' U2 S9 p0 [ X2 U+ `1 g continue;
/ p$ Y9 T: }( N8 `1 T: |1 w }' \1 ~& Z8 `. ?+ G4 b3 L$ j
}else{
" p |6 j, j/ c5 n9 I //空位置 不用动
2 N5 O; j+ _9 j; C6 I" y( N0 R continue;
" s& U4 N) S& Y7 B/ F9 F/ E8 r }
' z3 W8 }. F }0 Y1 u( ~1 O //////////////////////////////////////////////////////////////////////////
% B8 c, A5 K2 v0 b, f5 N: l //开始移动8 _1 E2 Q3 c1 C" w" |+ r# ]- }. O2 H
if (nSrc == nDestPos)
5 b ] @% v& A) B8 j {, s4 }& U( s) N9 C
//原地不动
8 g! Q& F9 `8 t. D( n nDestPos++;3 ], d" D8 A7 s7 X
continue;
4 |' C. m( j4 N0 u" p1 x0 f }
( t- c t. ~% s& b7 R8 Z# @$ ] pInvSort->MoveItem(i,nDestPos);, [; @( _( Y$ S+ _
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. K& ~) |: [( k# `
Sleep(5);4 }) L A5 V6 }' J" @
//Error("移动 - %d->%d",nSrc,nDestPos);
% R2 J# U5 z7 q1 c2 U nDestPos++;& g) E# ^3 y/ B& w5 f
}0 Y1 n6 C# e# x+ S
//取第一个元素的信息# C. _% A3 i9 P+ V* K+ F0 @
/*6 r/ o" A5 R/ T+ R
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! o% M8 q& b* V! h% E& v9 N( r {4 z6 k- I) Y! S, l W
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ _/ G" ~- x& B0 [3 _1 W, C- w" b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) s( _5 S) i! l2 Y8 R
}, N% n& {+ O+ t3 Y+ t0 l. |* e" A
*/
2 m" ~8 x6 J U: Q h: b" d" y //////////////////////////////////////////////////////////////////////////
8 r. _& [% r8 J5 y5 i6 Q3 e# U break;$ ?" n& Z# B. D, k" A" x
}
n6 I- M$ g' {+ f2 C2 f6 H } 4 P. L" @3 `' Z. L/ U0 g
}
% I! L) |! w5 ^- F) @% Sm_wndMenu.SetVisible(FALSE);
/ B2 K6 Q9 p) m* j) L: s" b( u/ Q+ V4 ] ]
--------------------------------------------------------------------------------------------------------. ?! C0 N L) U" U3 r; D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 M& t$ ?: b: T. G8 r% Q! `8 M' R" W
{: c2 v% l, D3 c: @
BaseMouseCursor();# ~0 c: F9 v+ {
}# e/ X3 q- y* s8 n: T
在其下添加:. h( L2 e8 B8 z/ I. t$ h, W7 \0 W5 }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ j( o$ F2 }" z. \1 X( t$ I{
3 Z! D* H; K: R* k! f) sm_wndMenu.DeleteAllMenu();$ S E% X/ K7 ?0 I ]! K" e: z7 @
m_wndMenu.CreateMenu(this);
`& H! ^, e9 i9 sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 ~; y1 \. ^$ A+ R/ H/ [/ W8 H/ C( s4 w. P+ ?1 [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): `; z4 l- r( s; B7 ^. e
{
: _) L J( K* z //P以上级别才可以删除所有道具2 n: H( {7 n5 V& k# K
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ i/ @2 R7 k4 Y4 o' b1 q4 a
}1 M5 |2 l+ k+ h2 M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! \/ k& \3 L' Y, m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
y+ k' z8 O8 ]7 J1 ?% mm_wndMenu.SetFocus();
$ O. P" H; F# L; R, n}
+ h y& a3 |* a& L------------------------------------------------------------------------------------------------------------
) x" O( a9 _/ h' \( {*************************
* a, X% q; ]1 A+ q' j2 w2 r5 l7 E1 @WndField.h文件
' P9 [2 c! `+ W* X. P @3 n*************************; l! x* n, D/ t: ^
搜索:BOOL m_bReport;
, J7 Y+ n! v9 T2 ?/ S其后添加:$ g: D9 E! F% I/ a! }: c
CWndMenu m_wndMenu;
3 b ~& r# l* g/ w6 ]5 i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) r1 a+ [, e5 n& g
其后添加:" ?$ v5 c: Y, C( H. d$ l
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 Q* c" O' v) Z) v, Z) P
) l: A: _0 P" h2 y6 R. T
% R8 j |- r& f* u1 p% S" v
|
|