|
|
源文件中_Interface文件夹下WndField.cpp文件
1 ~2 [: m4 s) Z+ O8 {/ ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% i/ g: q/ x- }$ a: m7 p3 w/ Y2 s4 S0 \, `. q
struct sItem
- J, K! N5 ^, Z{" y- {( L. \9 k2 x; T) W4 j4 Q
DWORD dwId;' N# k- j2 ?& w# D
DWORD dwKind2;6 d" \( ]# |. g' n
DWORD dwItemId;
, c; b+ P$ Z/ U0 s0 f! m1 BBYTE nIndex;
" X2 P+ P" ?; E2 Q2 U0 s" _ f* @sItem(){
% d& [2 b0 l5 V7 h( x* [* Z dwId = dwKind2 = dwItemId = nIndex = 0;5 V2 A$ o9 l$ M7 {3 a! f
}: z2 d8 l% W! J, E: Q u
bool operator < (const sItem p2)) A# i4 W: W" |6 K1 g6 V
{8 t2 s3 U! P% l$ ?" h, Q! h$ U
if (dwKind2 == p2.dwKind2)5 L v' k0 _+ g6 m
{+ [7 _% T6 t8 A$ B3 @) E
return dwItemId < p2.dwItemId;
0 d/ t1 T5 M& a) V }else{: i$ Z, N$ }; F8 K- X. S
return dwKind2 < p2.dwKind2;) L$ ?, W$ t3 ^
}
$ d- A- d1 E& p0 p}2 \9 E7 \$ ]7 t7 G5 s2 j7 W
};
3 s( T9 f9 i/ U: z" gclass CInventorySort2 ?$ R, w$ C3 Z4 k8 }9 V
{
5 _$ ?7 @: r- Z2 X/ k* Y- Rpublic:
6 P8 }; V5 @9 `CInventorySort()
7 b$ W% ]5 W6 V2 J# q{, R% f. E: q* S5 R% }4 q5 c7 b/ f) Z
m_dwPos = 0;6 T! A2 x" x% p' C
}
6 s* H" ~5 ^5 n/ x' s" M~CInventorySort(){}
4 o/ ~0 c/ P/ I. [* y1 I" Z/ tprivate:
: i/ W3 K$ T2 [1 F2 esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 p" n5 A$ q' m, HDWORD m_dwPos;6 }, ^$ F6 T8 y3 }- _
public:/ V0 _: u7 Q0 I: f+ Z) a
void Add(BYTE nIndex)4 g% m! Q4 p* M5 X
{
6 e: l% f5 {5 j: x$ j if (m_dwPos >= MAX_INVENTORY): F' N) q, U' \1 I2 G
{
% g+ c% h7 y& W; L; _6 D( u W return;! b- j) w( C3 V$ |7 E) j
}
% ?; N4 f0 a$ O+ r5 x# j4 M. @! Q m_Item[m_dwPos].nIndex = nIndex;1 D: u2 @9 R) U" r$ X/ {4 _! t$ m
m_Item[m_dwPos].dwId = m_dwPos;7 U% p c" d6 Q6 ]
m_dwPos++;& G3 E9 t! N+ w0 o7 A1 k9 F$ k
}
+ Z$ A- g% x% a9 K9 q- Y9 J) BBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 D: C& r" r _6 T: v4 L& J- H
{
; `* l0 A7 w; V+ A) F p4 ] for (int i=0;i<MAX_INVENTORY;i++)
" @+ _2 U: E: {) D3 A {2 M1 O3 \% ?/ X5 l$ V- s# m+ G
if (m_Item.dwId == dwId)5 f' G' Y* O8 T' H: ^
{
. m7 Z& y, e; l2 l% i return m_Item.nIndex;
$ E0 h5 l1 T: [ }
4 }6 q: }8 t' `$ V }, M0 H; F' d9 O$ ^3 H4 V' K( Q2 ?6 N
return 255;, ?- K' w: p p3 f+ t, U
}- f) ]! S) v4 C0 I. y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) o$ E4 i2 ~! f. q9 p" ?{
# W. X5 B, h5 _4 w* { BYTE nTmp = 0;. P2 a+ e: C. W7 u. j
bool bDest = false,bSrc = false;
* I/ |+ K" T* X) L3 x for (int i=0;i<MAX_INVENTORY;i++)
8 p5 [7 _) ~8 K {' K$ d" }' g c# J0 A7 d- r
if (dwSrcId == m_Item.dwId)* O/ c, M2 s3 F4 n3 j0 w' `. I, E
{! |* L7 B9 S8 b/ Q& `
//id相等 则 改变对应的dest和src
0 r) ~" ?' D. }( r nTmp = m_Item.nIndex;% B3 x g) T' N2 d4 f$ }' V1 P
m_Item.nIndex = dest;) X, H6 \2 l3 e0 z4 y
}
4 H. [4 A9 b& G }7 I- K/ D# }/ }3 j
//临时数据保存完毕,交换开始
! u: n4 p7 @+ V* O for (int i=0;i<MAX_INVENTORY;i++)
7 i3 |7 n$ ]4 Y; f9 ~! V/ b7 ] {
4 `6 G/ n, o3 R" b: d4 A if (dest == m_Item.nIndex)& i( y" `# }6 }* s
{
+ M! G! @3 k& o w( L' f' B //id相等 则 改变对应的dest和src
& s& I' q" e- F5 H9 a* d+ J m_Item.nIndex = nTmp;+ M% W' V9 y( @
}
: e/ }# q( S6 ~ }
1 g, Z+ V4 a& E/ x# N; |}
& o) v4 @/ o0 b( ?};
+ Q! g2 B5 v; S$ o! s% _-------------------------------------------------------------------------
7 D9 F" q3 [' s# C$ P& b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* Y/ }$ |9 V; h) |2 r1 w4 P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. o/ H/ m3 Q E$ |7 Q' s$ O
紧靠其上添加:! L3 g' j4 O. l7 Y% s
if( pWndBase == &m_wndMenu )
( O2 K m$ a% j& d& ^3 B0 n$ t{
7 s7 [& S+ s5 _, p switch( nID )1 i8 c T* C3 g y: c4 [* p
{
J8 j7 d6 _8 R case 2:
: F! D( J) [" l, ]" ^ {
& b3 U7 ?- E9 K //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" O! b# u5 v! K+ n
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 q$ A5 T1 g' E# n6 E# l {! j5 i# ]: R2 L4 E6 ^4 x; @. {* x
break;, [6 q* Y ^8 q) H5 O" K# K7 o
}, q- H: ]) b$ M0 d; X' u( L5 v! X& J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( B2 ~. U& `% T$ }! t3 c; T+ P
{
1 \3 n- J$ y& {8 O3 }) I! I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ c& u1 D: \' r. g& l/ X
if( !pItemElem )
) r" r) ]+ A: l5 O; u+ k1 ^+ Y' C continue;
9 _9 V- l, f( a1 R$ O$ ? if(pItemElem->GetExtra() > 0)
" l8 {; O8 q+ q7 p' S continue;) y$ y0 L- \1 H* y* D
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * ]2 a& x( o! d" H* m
continue;! ?( Z+ t" B# J( L
if( g_pPlayer->IsUsing( pItemElem ) )
1 j% z/ {3 s' N continue;
8 e( l9 E% o9 h if( pItemElem->IsUndestructable() == TRUE )
( i/ P9 [4 ~$ {3 B* |( I; ]! o5 o4 D {
+ }) y* T# H; I5 ^, |) v9 Q+ r: I g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 k, h5 N8 { @1 e continue;
) g) `3 g |8 r }
( E7 T* y& ~% g. f5 e2 I g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( X( c" w# Y( S+ s1 t }" r/ G- \; h( t+ B, ]1 N
break;# s3 E' K, G- d0 i0 q7 `$ C) L" {5 B
}- Y H* Q. P6 Z
case 1:
3 T1 v3 M! t& s! h$ m- H$ S+ Z {
+ b! D* X$ w; M3 ^- @; O3 m; L //整理背包
5 _, p& G F( t# e' T. b R! N //////////////////////////////////////////////////////////////////////////% P: y4 V5 d8 S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ o- I @" x8 [7 N4 s2 \1 \/ l T3 b //////////////////////////////////////////////////////////////////////////
1 P% f/ N6 A* ^4 \9 \( B5 N* W5 X+ U, W //////////////////////////////////////////////////////////////////////////
7 S9 U" \6 V; ?0 x CInventorySort* pInvSort = new CInventorySort;
" j2 w' j! ~; J0 A; Q% H9 G+ [, t- Z vector <sItem> vItem;
; s6 ~7 q6 s7 T# K vItem.resize(MAX_INVENTORY);//初始化大小
( d7 l" M* {0 ]& j //////////////////////////////////////////////////////////////////////////
( O2 Z) Z4 |. | //填充数据- W& u1 R2 z: R
for (int i=0;i<MAX_INVENTORY;i++)9 `/ c5 j3 A4 P- S$ e7 h
{
2 D* @& k# |. i- ?' ]' t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ k' v# ]! s: v5 M) e if (!pItemElem)
" P- K& S, P+ H- w {
6 l1 V: s% H& @0 }. r vItem.dwKind2 = 0xffffffff;$ p" z4 k3 t' {( H7 q# s7 E
vItem.dwItemId = 0xffffffff;
0 {! }5 \0 h' h2 k1 L7 H. Y; } vItem.nIndex = i;& G( {) }5 I& q9 {
}else {
4 f7 Z% g$ s8 d; I5 f' j' v+ ] ItemProp* pProp = pItemElem->GetProp();
2 ~ d1 K/ ^0 Y! H/ W vItem.dwKind2 = pProp->dwItemKind2;, {7 h9 x4 \3 Z+ e. @
vItem.dwItemId = pItemElem->m_dwItemId;, S. [; U, O6 [$ j- _6 n+ c
vItem.nIndex = i;
4 e7 T4 T4 `0 D9 x( [1 S* c' f }
# k! ~- _: T8 ~. d1 f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- `! w- n9 i. p( P+ m } C* a2 z- Z N, ^6 g* z
//////////////////////////////////////////////////////////////////////////
( F+ s6 h- f* J: a* c- D sort(vItem.begin(),vItem.end());//排序
2 D' \/ x u6 P7 Q4 G& H //////////////////////////////////////////////////////////////////////////
4 Y& ^+ W; N; W7 [4 b //交换
! R( k0 g( J7 w/ k7 o0 s for (size_t i=0;i<vItem.size();i++)1 {8 W! |/ U$ d* ~" @
{8 r0 G* l& w7 D& ^2 j
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 X9 E/ }& \" R2 ~3 W7 j. [. S+ Z
pInvSort->Add(vItem.nIndex);
+ N( w! V. A* H7 x. i% n! y: s }% i8 a$ X6 S3 X# L. i0 u
BYTE nDestPos = 0;
2 p/ {7 E- x( E; X9 C for (int i=0;i<MAX_INVENTORY;i++)
1 e. S$ c& B8 n9 s {7 p0 a, h5 ^/ Q6 ^9 s$ Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* r8 ^ H8 f# f; G3 T: _# d d! D if (pItemElem)( H- j, {. ]9 b1 v
{
" m1 ]2 l) `( P1 T5 _5 ^ if (IsUsingItem(pItemElem))
' H3 f1 M* ]4 p, A {+ k1 F* Q3 h, A# t N, f& r
//这个位置无法放
& `4 D* d* ~ U nDestPos++;
( k3 T/ F* m1 ~ }
! o+ z( E; h9 l: N8 }* g }# J4 o# w' J c# _
BYTE nSrc = pInvSort->GetItemSrc(i);
. u& @6 U& v' J8 L4 Y7 X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 H- r1 j6 O) p$ }: [4 m* o if (pItemElem)
% P1 \ c8 S/ B {, t& Y2 R: s& Z8 j1 k2 {
if (IsUsingItem(pItemElem))
- O' Z9 I& e* c C {3 l3 _6 x0 \' T5 O8 A! A
//这个道具无法移动,跳过& `( [( b1 u! k# ^2 W
continue;
( e& R! [( D8 k e- J4 I I }
' I2 I) v! z& H, `& I }else{3 J' `* o: h( K; t {5 G; i1 y% i
//空位置 不用动1 S0 [; }* ^5 [
continue;
. s+ y- X) ~* B2 q' J$ M }
$ R4 l+ W" X% A4 ~5 C I //////////////////////////////////////////////////////////////////////////9 K+ n* d5 Z7 O, s X
//开始移动
" E0 b* T8 l! R8 @& e) w# k) S2 c if (nSrc == nDestPos); O8 c" a8 Y, D* v8 r9 R
{$ S) z& ~7 k, M' t) D
//原地不动7 q' f+ }9 m9 V2 V0 x/ M3 j& {2 C
nDestPos++;! H ~/ X, U. ?3 `
continue;4 _( _8 H4 j$ B; z M4 x
}
. }5 v/ ]! Z: ~/ x; P2 D4 X+ n pInvSort->MoveItem(i,nDestPos);
8 S- a* l3 _. \" X- b+ m; u" P1 X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) U5 g) a6 y+ i# L Sleep(5);( w R0 K, I% l; y$ H; t
//Error("移动 - %d->%d",nSrc,nDestPos);
4 N& Z. I# }. y+ X7 S' s6 D4 D; ]4 g nDestPos++;9 C; Z. d* f& z6 h. c1 a, M
}
4 n: L4 s j/ C" p1 ? //取第一个元素的信息
# {3 ?5 g8 m, P _9 G/ u /*
: _: O+ M/ S! b9 ~8 H if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 [6 [! r+ B- U( H" l' b' z1 |8 e
{1 z9 k4 o3 ]0 Y0 S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 x* r3 T i7 V2 Z6 C7 a2 z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( t; D3 p0 {+ |. _ }
5 i, [/ f" S1 z$ Q */
7 X7 A3 `& |/ i+ I: b- T! U //////////////////////////////////////////////////////////////////////////6 ?+ F/ f% Y# n
break;
6 y, s4 z p; j9 A( G }- \( }4 c$ R( v X. t* Q
}
2 Z3 F1 h- X% K. A}
% i. g. X9 _3 I* J# F; y; v; ]m_wndMenu.SetVisible(FALSE);
! V6 x& s. @8 A
8 m# G* h$ X5 C--------------------------------------------------------------------------------------------------------
o0 V7 H" q* X' r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& {- p$ b3 Z7 i% r; t% |% w
{
2 G5 S( }+ \2 SBaseMouseCursor();8 R8 @/ h2 ]" P2 J$ S5 o! p
}
h% ^( y: |) L6 K0 b9 j. l在其下添加:4 V" S: i! _ ^7 I9 P) }: H
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 c% @' D2 C6 Q4 \; P' t' Y% ^' N% [{* X$ b3 t1 x/ I8 u5 K6 _3 n
m_wndMenu.DeleteAllMenu();
: u8 ~7 W6 Z4 h' Sm_wndMenu.CreateMenu(this);
) n! Z+ S1 M7 k* m7 _3 A" Vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 l- c" w6 ?3 k" @( x. b
- Y0 z: z A+ N+ I. r- v C+ O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* y1 M" y# l* ?. m{
: q( k* Y6 C/ J //P以上级别才可以删除所有道具# B+ O# T. q+ x+ j4 W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 M' y9 g9 i2 j; \: `. w6 v
}
6 j% }( I" \2 L3 @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" y3 g6 ~8 {& o; h8 V3 r9 \4 gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 n* M$ E) o8 y1 ]* L
m_wndMenu.SetFocus();
' ^! i( b; E3 }" q4 X/ z G5 J}
! _0 Y. r8 {/ H4 j$ k------------------------------------------------------------------------------------------------------------" w5 W" H L$ ^& l3 g
*************************
+ V1 \+ U% v& K: W: G, `WndField.h文件3 n1 V; Y! [; H/ |) S
*************************
% N, p9 Y) d+ }- x* ?" k/ B1 |6 B7 ~搜索:BOOL m_bReport;
: T; _- y' L: o其后添加:
! F2 f4 R" ^+ k, o! _$ A; t% YCWndMenu m_wndMenu;
2 r/ Q! N7 @6 D! i( K/ }5 D: _搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' Z+ }, c8 s% |2 O其后添加:
% \4 i- W8 E6 d2 Uvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 [0 M% `, {7 y& O
- h% K% h! z8 ~0 E6 ^. L( ?5 o6 ?
/ l. k$ N% S* S6 z) O. }0 S |
|