|
|
源文件中_Interface文件夹下WndField.cpp文件
$ V; E7 e! Q9 T y+ `2 T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( H2 x. @/ ~5 z/ s8 E# r5 k, e1 x* y
struct sItem3 [, p" b5 W- U: U5 g" X5 k
{
. K# u0 V( }8 [4 l0 C8 M" A, sDWORD dwId;
$ l) k/ v* Q# R2 x9 |DWORD dwKind2;
E7 {. B9 Z% J* F: }0 MDWORD dwItemId;( T U/ V, s3 K) {6 t
BYTE nIndex;
( B! D4 d- |8 ~+ n7 U, z/ m$ RsItem(){% B8 z5 u) y5 m
dwId = dwKind2 = dwItemId = nIndex = 0;2 h! P1 y: Y- h; B) p* v! ~
}' a/ d& s; h# Z/ a! {7 C
bool operator < (const sItem p2)
; A9 ^3 V8 o- p$ {, l1 I k{
8 f' M* v. v0 h2 i: v; @ if (dwKind2 == p2.dwKind2)* l3 r e/ Q N- @
{
2 Z" v) {4 D5 [. k3 k: O8 X4 W& j return dwItemId < p2.dwItemId;
! D" m4 \1 Q7 P- `* q }else{
# d" z( q) v5 ~ J: \ return dwKind2 < p2.dwKind2;- s' N& [( G5 {8 k
}
/ R0 s. n' S$ x9 e; R}% T% p( w9 m7 s) N+ {( n: b
};2 Z/ w1 ~$ D b7 }2 e. F! K
class CInventorySort
7 S' o& z0 g& V. w; Q$ n{
! e- R3 F/ f+ H) epublic:
2 f, f% L& Z4 }# RCInventorySort()& I/ }" H3 j4 g" I
{$ m8 U. Z% E9 J+ {
m_dwPos = 0;
( _4 W+ g) E2 u}
) j/ W3 R+ L* [) i0 S) E~CInventorySort(){}$ X0 x; o$ U b$ J1 @$ V6 J5 L/ z
private:
) [2 P2 t! Q$ K8 u2 OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ l0 g3 W+ z9 _' L' |DWORD m_dwPos;
3 F/ t. ]9 N. q0 ^) b2 G/ Lpublic:$ }- q* z8 V3 L6 v0 s
void Add(BYTE nIndex)
6 `3 q3 [$ B( m) Z" U/ O{
+ P% Y' U8 }9 H6 @! Q if (m_dwPos >= MAX_INVENTORY)
5 O2 D5 w2 \4 K/ s. T6 q {
+ k8 W7 E' i3 O* U return;7 L5 s% p: z6 ]+ E+ m
}
% o+ E2 j) U) L3 V# x* i+ k _/ X m_Item[m_dwPos].nIndex = nIndex;% R4 [+ T: V) z2 U) U" y% a
m_Item[m_dwPos].dwId = m_dwPos;7 v( m' @( A% S- g( g* F0 U# u% j8 }1 S
m_dwPos++;
9 ]& e2 _! g2 c- C4 k2 v} R/ ] b8 ?& v) u' }( ?5 z) R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. H1 R$ z* N8 R" n& y{
: l: v+ k O" [ N" k for (int i=0;i<MAX_INVENTORY;i++)
! }4 E5 A" U7 q1 I" ^5 T {
4 x# B7 |" ~% W8 Q1 T if (m_Item.dwId == dwId)
, p& g; ~" d6 c: q" K; \ {+ Z$ o8 A, O) h- D5 D
return m_Item.nIndex;
8 q/ }, d: [* ~2 [9 a }; J! P# e9 \6 G! A6 [
}* ^' C- o. \$ T" |7 i
return 255;
' m" x" q2 k. E' S8 S/ _ c}) K: O7 ? w. `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* q# H9 f7 x' ]3 Y6 w4 ?: C/ O# m
{1 w5 M1 _8 N4 l5 v# s, D
BYTE nTmp = 0;
- h- r0 V# R4 Q) ]; ?2 Y, v, W bool bDest = false,bSrc = false; S+ B1 ~4 b$ s( J" {6 {7 L8 n
for (int i=0;i<MAX_INVENTORY;i++)
8 d% G; Y& f9 a. K. m a {" f9 G1 O2 Q6 o, g, R& X
if (dwSrcId == m_Item.dwId)
: O1 U) M& y+ v, M4 j$ ~- T {
& V5 s7 b/ ]3 L1 x. t9 ~* p //id相等 则 改变对应的dest和src
( x C1 |6 X, S" b1 d0 _ nTmp = m_Item.nIndex;2 N) N5 D: b3 N+ T s3 Q S
m_Item.nIndex = dest;
2 @$ i1 g4 Z) x) r; ? }9 M6 z; ~. B$ z! O, a7 ~' J
}
0 f( I# ^, W) E% v/ U. Q2 r //临时数据保存完毕,交换开始
) C5 U4 H+ M9 _2 a5 y for (int i=0;i<MAX_INVENTORY;i++). d. U) E; G; {' ?
{) P- Z4 ~" J/ L8 @
if (dest == m_Item.nIndex)
7 ~7 d/ L1 H0 O# s* O1 j( t {. O4 C" Y) i. W- H$ f
//id相等 则 改变对应的dest和src4 L5 {- r' k* f( N* X
m_Item.nIndex = nTmp;4 O+ J6 @. G; e- J9 w8 L& m' ]
}
. c, \1 T- `# X# v3 \ }
* D" Z0 l% e5 Z9 q6 G4 q8 B( `}
: G+ e' {0 Y9 s" E};
& [2 i! Q* j/ D5 t' Q-------------------------------------------------------------------------
8 r* }3 e K4 W( Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 O+ q( [; ?7 X2 z% w; r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: r. p- h. N/ J: F+ Q紧靠其上添加:
7 m$ R. b* j1 T* w" c" ?: b% h* D$ eif( pWndBase == &m_wndMenu )0 k" Z, l0 R( i" Q
{
* Y0 e; a; s8 [7 P switch( nID )- I4 n ?7 f6 j+ `) B3 L& z" B
{- Z! R. _! x+ J+ M/ D" m! H" a
case 2:) w( k- G5 ~' Z1 u) m" _8 K
{
. J) d$ s) j4 u8 y Y+ V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( @; X) v- @" s4 @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 a( Z; v I T1 E0 o {
0 p; x) \' Z" q$ S P: E break;
" d3 a7 T; v/ v1 Y& d+ [ }2 U0 l$ a$ a5 k
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) q* b D! H6 i" G {
* p) h6 K3 M# o6 @7 D; h# M* g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ K! a- h. ]& \4 Q) |! v \! r! M if( !pItemElem )& B" ?) r. [1 h8 q( k# c, C0 `; `# ?
continue;1 t: c% P; R9 S
if(pItemElem->GetExtra() > 0)
" u1 k. N, q% W& S1 [ continue;9 i! `4 f# }' p+ c; v* Q: h. ]: B
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, O5 M5 e" L5 J$ Y) I" Z/ P continue;4 j% h( R+ H3 t- i: [
if( g_pPlayer->IsUsing( pItemElem ) )9 I! S8 {$ g @/ Q
continue;( p: s. q) [( I- N" w5 {+ ?
if( pItemElem->IsUndestructable() == TRUE )
, r+ H, q/ E* D' k, ^# g" `, [ {! a8 j* Q9 Y( y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! f8 A, o, q8 x4 d( g4 a z continue;6 H: p0 e% @5 s: r/ S6 {
}7 K3 F- L$ i6 I- J* b3 I$ T
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* O7 G6 q2 X9 L F& G
}- K; H% J4 y( i+ M! K
break;
. ^; P5 ]7 h. F- S: \$ l }
# Y1 p. M: f6 d case 1:* ^2 u9 U, ?9 m
{: {3 Y. V5 }' r$ U; s
//整理背包
# ]: E; ~: C# c' ~8 P' J //////////////////////////////////////////////////////////////////////////
* S2 W" K* [6 G( R //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) N" l+ g4 a% w+ w& ~- R; } //////////////////////////////////////////////////////////////////////////
5 r- V2 n; t8 O6 }6 j //////////////////////////////////////////////////////////////////////////; `" x2 h8 Y, g
CInventorySort* pInvSort = new CInventorySort;
* M7 J+ p) V" G0 | vector <sItem> vItem;
/ o3 L- S5 n0 X% n3 B0 }4 x$ W vItem.resize(MAX_INVENTORY);//初始化大小
9 C: L9 ^" [' ?0 K //////////////////////////////////////////////////////////////////////////0 J8 i+ X* i) i- P- S& [
//填充数据2 S( {, G/ o0 F
for (int i=0;i<MAX_INVENTORY;i++)+ [( t1 J Z$ o. }( w0 K8 K
{
! s* p$ u N/ x: R8 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 \. P! F. w" b4 s/ R
if (!pItemElem)2 j9 t, H, i* h# ^2 q7 a
{
7 N# ^0 S3 C( v7 J vItem.dwKind2 = 0xffffffff;
6 L4 G" n, W5 l vItem.dwItemId = 0xffffffff;
5 n {# F$ t5 z vItem.nIndex = i;% _1 e7 L% i& @6 ~; z; A. Y
}else {, [ v- U: O B' T5 N5 z
ItemProp* pProp = pItemElem->GetProp();
, Q o0 a3 p- q- {8 N vItem.dwKind2 = pProp->dwItemKind2;2 |8 y/ L) Y( e4 Q
vItem.dwItemId = pItemElem->m_dwItemId;' F& n, Q- ~! l0 }5 t9 |0 {
vItem.nIndex = i;% }3 @, V$ s+ F% Z! b7 T9 x5 M
}
) z) | q8 n, O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; F! S- W2 x/ g }" v. w T9 G$ V& j6 y. b
//////////////////////////////////////////////////////////////////////////" N( M, g: @1 A, @2 f- X( E% ~
sort(vItem.begin(),vItem.end());//排序5 L2 }* `4 u( j7 B# S! V; z
//////////////////////////////////////////////////////////////////////////
+ L/ L5 ^+ f3 [( }1 k: }( p //交换; h" s2 S' b( l; u$ _9 `
for (size_t i=0;i<vItem.size();i++)- M" e# M8 O; G( r
{( U7 _9 y& K! o9 r
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# i# L- y) ^) C* ~" r pInvSort->Add(vItem.nIndex);( m6 c2 S" B) Q0 H
}
. [, ]' G5 l" z' l+ `% t0 J5 Q BYTE nDestPos = 0;
0 r! @4 f, U; U/ a& r- M! a for (int i=0;i<MAX_INVENTORY;i++)' w4 }7 c& X; {& Z# O! a
{
0 D# O# }8 I n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: `5 F/ _+ B1 a1 ^ if (pItemElem)
+ v- C. q+ @( \4 F2 H {
8 C9 I5 N6 v9 @- G7 F F if (IsUsingItem(pItemElem))
( I" E8 O7 }. t6 G' t Z {( l5 v: J) @1 @6 t
//这个位置无法放3 t0 Y' ~) j$ _. [2 ]" Q3 @* F8 d7 U4 y
nDestPos++;
- f' J: h1 t; W }; V" s9 d! }/ c5 W" j
}. w7 Z& S) Z+ D K7 D5 E
BYTE nSrc = pInvSort->GetItemSrc(i); W5 M/ R+ O0 _1 ~
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, L' }3 R7 v5 J- Z9 ?
if (pItemElem)
6 y2 b" P$ P F! m, O {7 q3 R9 N% y$ L- e& K ~ u3 B# n
if (IsUsingItem(pItemElem))
) ~2 H% h7 A* d& ~* p/ V: ~+ a {
* @7 T$ W9 ^& t5 L7 A% j //这个道具无法移动,跳过
) n! p6 Q% w9 n Q) R continue;
' v6 A5 X* e6 } }" Q/ B) H. i, h- z5 { |
}else{8 E" e* L1 l- ?# Q3 S
//空位置 不用动8 y y; W3 V6 f' D/ G
continue;) @5 ~( _- L! C) V0 C- B+ ]
}
. Y, D: M Q1 e+ X# t; b& V1 } //////////////////////////////////////////////////////////////////////////, I; i. D1 p& C$ d2 X& d6 t
//开始移动
2 T7 @$ k( N) y6 a: x' i7 ~: u3 C if (nSrc == nDestPos)6 q6 D, }; c" Q& Q
{' P/ F; b7 V' \% L5 t! |( M$ G6 f; h
//原地不动- H6 ^. K' P8 r7 r8 G
nDestPos++;
4 ]5 H, R. l& }$ _" V, L! v7 t8 R continue;; o5 a9 ^! B4 Q" o. u
}
5 S5 V9 L0 I( Y* Z+ {$ i, f pInvSort->MoveItem(i,nDestPos);
: L( s9 P$ P& F2 k) I g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% Z( h% M: a: [% `5 C; B& ` Sleep(5);' u* ~) C2 \' y9 r: [; g# r
//Error("移动 - %d->%d",nSrc,nDestPos);
& C5 r8 M7 v# j$ A6 E# v; _ nDestPos++;
' f, S4 s9 Z6 {" j' D0 ` }$ A) {- E+ l! {2 ^. h8 R
//取第一个元素的信息8 _4 \" ^6 F& w
/*0 G4 p& [ g9 s8 H( m3 L% [. T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 j% r. e- P, V
{: f3 w2 Z4 @# ^+ @2 M
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% w5 Q5 x0 f, b3 y) ~
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) A4 `% `( A0 C7 ?; b; s3 Q7 } }
' w% n d0 Z5 \0 n */8 d' v6 T' z9 x ~! N
//////////////////////////////////////////////////////////////////////////
5 t& W) {# u$ }! T# s H4 E" ] break;. F) N6 `/ G6 f5 I) F$ M
}
) k* Q4 o2 a) b2 H) y$ ~* k } + V$ S% \' u* n3 S" [& L
}
& F v0 B- z0 e/ sm_wndMenu.SetVisible(FALSE);
) c( _. _/ o% h8 F V/ |
! ]! R0 [9 N, i- q( i--------------------------------------------------------------------------------------------------------
& ]9 S3 k. J& j, b搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ \( @, B! N0 }{
( H( |3 \! H, \' M+ rBaseMouseCursor();& Z/ f6 [" P1 F8 B; Q' n( Y
}. Y: E& B; }5 f9 u: Q- F: u5 i1 a' |" I
在其下添加:
; g" ~* ], d3 W% p! \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 s- c8 M" @$ D7 f
{0 @# G X+ n2 }0 ?
m_wndMenu.DeleteAllMenu();
/ g% i- x( [0 u; m. Lm_wndMenu.CreateMenu(this);/ `6 F. J9 {/ t& y8 }
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* @; ?/ L+ R3 L+ z& z i
5 S3 Z) ? P* B- w1 [8 mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), K/ |% I0 D# K6 r
{8 E) o, c$ W% T
//P以上级别才可以删除所有道具
- G% v. l, T- i/ w0 ^# w m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 I& e6 b% t- l- k. p- A7 K, G
}& W9 W% G6 b- E) B* ~/ T% c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; U: Z1 P5 ~0 ]: C6 Z2 w5 |$ @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% ?4 {1 I. V5 Y3 d3 A
m_wndMenu.SetFocus();
; \7 H& E7 G8 r3 m7 s ~}
& q( |5 W7 k* J6 J F------------------------------------------------------------------------------------------------------------- i, c% T, c5 y
*************************
( ?5 R5 h3 z+ q6 h" @( d5 iWndField.h文件3 Y# P# j1 X9 @+ c
*************************
& I: |. _" G9 b8 t# \ j2 a& F) R搜索:BOOL m_bReport;
" f4 f* A6 ] ?) ]其后添加:
2 ^8 M, b9 N* W) S/ M1 gCWndMenu m_wndMenu;
) X: n% j1 h' f5 d! Q$ a" F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* _; o0 i! @/ D( Y+ \9 _其后添加:% z! W1 t) \9 N2 D) h
virtual void OnRButtonUp(UINT nFlags, CPoint point);# h+ }! ?" x' Q' q/ V
0 } o# a# T5 a& b+ X) d
- W0 I' v( g1 }3 W& a. ?
|
|