|
|
源文件中_Interface文件夹下WndField.cpp文件% B' q- F1 V4 V0 {& j; I" h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 F, Q v9 s: M+ P' O4 b4 K, V" z# z3 g; I# Z# R2 q
struct sItem
5 k" x& \1 d, [( }6 f8 [+ Q{& p6 {! u3 o6 j1 Z% q2 W) Y
DWORD dwId;
: f4 h! b: R7 t+ S3 ^; U: EDWORD dwKind2;0 C: @+ Y2 P" a
DWORD dwItemId;
. V- G. m3 |2 J) j. ABYTE nIndex;8 `! D) {4 _! b1 s
sItem(){ p+ ]% d$ k; Z2 |
dwId = dwKind2 = dwItemId = nIndex = 0;8 j7 o: P3 o$ ~
}
' W% O% R, ^" M* d# o+ A- r* W1 A! \( ybool operator < (const sItem p2)% T) Y* [, X5 F4 Z
{
) S' M7 w+ ~' D2 e+ j7 _9 O- E if (dwKind2 == p2.dwKind2)
3 B: Y G& N) y8 v* `' [ {, j N7 d- V9 X' J. h
return dwItemId < p2.dwItemId;
+ O, P" R# c% k4 ]4 f0 x+ Q, y0 {* m }else{6 E+ G( ?+ R6 p$ O' W
return dwKind2 < p2.dwKind2;
: a0 P: O, }5 J: X& t }0 I0 m8 [ q; X& a* A
}
* T1 |) I( s+ s8 S7 ]};3 R! j( @$ d, @
class CInventorySort
3 v: L) X: x+ S W6 C f{. T7 Y9 o8 h" @6 v$ S
public:: F3 _" n3 p* z
CInventorySort()" X& ^) G- c9 `- D+ H
{' d; {# |$ k5 m- X9 j6 Z6 `
m_dwPos = 0;
7 j* ^. Q& i9 u. q+ a$ k$ L3 m}
0 {$ l1 ?8 {* q+ |7 {$ S~CInventorySort(){}
M3 V, L$ T' g5 [' Lprivate:; a/ Y( v% s. ]) g2 N$ A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) K& y5 p! J% N
DWORD m_dwPos;
# H! W3 R+ o' J5 a0 l; dpublic:
" e% u4 y" I& |& _) yvoid Add(BYTE nIndex)
- n1 B+ \/ P! `7 {, A8 r- [{, `) o {* F2 q+ V# o& T& t
if (m_dwPos >= MAX_INVENTORY)
7 i4 Z3 e! u. `( D) L0 C+ { {, e7 {+ u `7 e# |" |
return;4 l9 U% w/ I7 x2 W" @
}
6 c* y9 }$ u: K; _, m& u5 M% O m_Item[m_dwPos].nIndex = nIndex;2 F8 b9 ~5 m: Q: ~+ E
m_Item[m_dwPos].dwId = m_dwPos;8 {2 K9 Y1 v5 v2 [ z8 ~ M+ f
m_dwPos++;
4 H* v* T7 a& m6 b( }* D}
- ^7 x' O! K1 aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ i" a: f! p) ?
{% {& \. C" e$ o( a5 v1 J! g
for (int i=0;i<MAX_INVENTORY;i++)
5 W- v4 @; t. N( d' T" w {
& g, q ]: o! ]- P" S( ~" v if (m_Item.dwId == dwId), r3 [. o* K6 e% ]
{* ^/ {; C8 ?% }
return m_Item.nIndex;
6 S& N5 Y5 v4 R7 G( T0 P2 o }" S; X0 |8 U$ @" G- m
}: }7 M! W. J8 O- L
return 255;. N% m+ a) Y# M
}! b5 h& h0 b; F) i
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% b @5 @- Y0 M& ]0 X{
+ ^. Q( |, Y( Z4 m; F) E. z2 d BYTE nTmp = 0;
# ^. m3 c( g1 M9 m; J+ D/ P bool bDest = false,bSrc = false;
* m/ W* ?+ j9 T( y5 `7 u for (int i=0;i<MAX_INVENTORY;i++); B1 ?% s$ g7 v* T) p$ b7 s7 r
{
/ ~& V- I1 o" { if (dwSrcId == m_Item.dwId)/ t+ i5 |- W! ~9 T* k
{ k/ \5 `/ Q) d" q3 Q
//id相等 则 改变对应的dest和src
$ l9 [& G# Q. _! v/ p nTmp = m_Item.nIndex;1 U, w* V8 G% q5 |; W+ v4 O, q& V" U! \
m_Item.nIndex = dest;
" [6 Y! g3 c1 \1 }) G }) |) r" H& V$ a9 J6 J7 R0 L( J
}4 e! k+ w1 [% V9 E! U, Q1 t
//临时数据保存完毕,交换开始
3 ^9 S1 r; p" a0 T for (int i=0;i<MAX_INVENTORY;i++)2 ~* x# R& w) S0 ^* {. B, Y
{0 z/ ^' {3 g4 H1 S: s. ^" c. z. n0 K
if (dest == m_Item.nIndex)1 |# t$ a+ s" K' i ~) R
{
{1 y$ p# y' `( ?; E //id相等 则 改变对应的dest和src7 W! Z9 I$ w4 D* D' B: @% M9 r
m_Item.nIndex = nTmp;" l3 d! k3 \' r5 z& L G
}2 j$ Z4 N9 o6 W+ m
}- j: P5 W9 k& Y) N
}% a9 h- h4 w) s" b$ K+ K
};
) R' A0 p: F0 @; C' D1 u3 t-------------------------------------------------------------------------5 M$ Q3 g0 f1 ~' O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 W# ]: h0 C/ J u搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 Z+ l f1 R" W& ^
紧靠其上添加:! F$ R( `5 p& L: w0 \7 j) R/ {
if( pWndBase == &m_wndMenu )
' V% k: G5 C& j1 H{
6 F6 ]" r7 M0 u- E! ?# i0 h switch( nID )4 i2 B% h' D1 p6 ]4 E
{$ \: ~; L2 g+ E# F& x" p4 l7 W$ k
case 2:
5 d8 f2 v2 [+ L; @4 Q+ D3 A2 n {
3 z9 B9 K. \) b3 t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; o8 o1 B- }# S: [8 N& S: M
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: L* P) d( t- M5 v3 P* f/ ] {" W' z$ B9 `' E: E/ h6 t
break;" c8 J8 a5 T0 T: F, V' W
}
( ~! R" _: Z6 q. ?5 i$ x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 V% W8 |% e, H! C! j
{
: {1 L/ Q1 w9 ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 x. Y- ?8 U6 O" w8 [) @
if( !pItemElem )
+ p# G( Y8 z9 E i; d continue;3 G' g& v# Y8 o( _1 [! X
if(pItemElem->GetExtra() > 0)/ Q6 S) y1 Y7 I7 s ?
continue;$ V+ [& X7 c) J: c. a
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 |8 `: f; i9 S8 _ continue;
# u/ @ o" r! | if( g_pPlayer->IsUsing( pItemElem ) )% \5 x. N6 t/ e, c* b
continue;" @. f. `; f' v7 a
if( pItemElem->IsUndestructable() == TRUE )4 ]+ B* m) o( ?$ L9 H* T
{
* L% j7 P7 Z& ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ v' M% P j- x0 E: q continue;
2 B1 _( V4 z+ |7 E# ^! b7 T }
! V) V+ b- [" A2 B6 O g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. `1 C& n+ [. ~+ n3 c& r
}1 P. n: J& Q1 J5 |
break;
; Q2 i5 N7 o# W2 G( X0 \ }. R% S! P# n) \, z: H
case 1:
" j0 u- M7 _% V) O, R" M {% i& a- n$ v/ f
//整理背包
; e: c/ t) e1 M0 a& t; b8 T //////////////////////////////////////////////////////////////////////////
3 F$ N9 w- ?7 c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 ?, n" \* Z. A9 Y+ `1 w1 d ?$ f
//////////////////////////////////////////////////////////////////////////$ O8 \2 K' e S% p$ U# X
//////////////////////////////////////////////////////////////////////////
1 e6 Y1 B' P/ q" e. k CInventorySort* pInvSort = new CInventorySort;: r, W9 E" c, \2 H
vector <sItem> vItem;
( i4 E- b6 ^' G/ d6 ^ vItem.resize(MAX_INVENTORY);//初始化大小
0 |5 h$ [& f+ U# i' A //////////////////////////////////////////////////////////////////////////
6 u9 G. J& P0 k: \4 X+ X) {1 | //填充数据$ p {" t5 E5 s5 R2 |8 n. O
for (int i=0;i<MAX_INVENTORY;i++)9 B/ T8 l' M9 L
{
( L7 S% J3 m& G" X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 I2 ?' R' q0 ~# H" V if (!pItemElem)
9 O! [8 Q% A) h6 }* d# y1 z8 P8 a {
0 H! h1 } g1 a: i vItem.dwKind2 = 0xffffffff;$ f3 } q6 E2 \$ {# j# G( D% A& S0 c
vItem.dwItemId = 0xffffffff;" |. \* i$ q+ c0 g# s
vItem.nIndex = i;
4 J a- m/ I( F5 ^ n' J }else {* o/ q3 ?& e4 O/ t3 O% k% H$ S
ItemProp* pProp = pItemElem->GetProp();
% G$ e$ H" g2 S8 A vItem.dwKind2 = pProp->dwItemKind2;8 o3 o& e+ v) z$ ~0 G# Y
vItem.dwItemId = pItemElem->m_dwItemId;/ y) m+ ?' |. C8 Z' i
vItem.nIndex = i;$ }0 q1 W0 F0 U. a4 o! @7 B
}5 F# N& y }: W8 J' Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( Y" c$ i, ^9 Z
}
& c p- R3 w1 o' A //////////////////////////////////////////////////////////////////////////* L q7 a2 U; r/ A
sort(vItem.begin(),vItem.end());//排序
; K% u) a5 e% h4 \ //////////////////////////////////////////////////////////////////////////, X/ M- R9 R! c! v& ^" N
//交换
' ^( ]3 C$ k( ~- I for (size_t i=0;i<vItem.size();i++)% X+ ]* X( t( M" E t$ `$ D! X. s
{# t+ e( c t4 z5 e& F; l/ N
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 O) C5 d7 v" g3 T A! x$ P6 q% N4 k
pInvSort->Add(vItem.nIndex);0 b1 n" I$ a# H$ o# s
}
& f% g2 l- L: U$ I& f1 J3 q3 ]4 d BYTE nDestPos = 0;" M$ X/ k3 N$ Q" T8 A+ y! \. `
for (int i=0;i<MAX_INVENTORY;i++)
2 u/ e4 n8 @8 f9 q* v# A {
0 o( @; q6 A& M3 d6 i+ E. A- e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, C1 z3 P- l* @: D1 |& n
if (pItemElem)0 S3 s3 J2 D; c W
{1 d3 v) v) w. y
if (IsUsingItem(pItemElem))3 p' Q5 |/ G9 z- |( H5 P" @9 z
{: n' O. c: ]8 b. X! ^. ~9 I2 ^
//这个位置无法放" B4 T* ?. o1 N J4 k
nDestPos++;
! E9 u3 y- B) Q8 E( @2 j; O" u4 u0 G0 I }# ?* L7 Y% l$ e
}7 V. E$ h c. k/ s( g
BYTE nSrc = pInvSort->GetItemSrc(i);
( G3 |$ ?! b9 ]# ]! F9 k pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 ^( y0 g6 \ g- p# E if (pItemElem)
( D+ v/ N; }. \0 Q {" t1 r9 g9 V* _+ y6 {$ h) R
if (IsUsingItem(pItemElem))+ g( w: M9 Q1 C4 a
{
" C. g% H( y2 K/ \/ y //这个道具无法移动,跳过
5 @- n* P7 s* W( b continue;
2 f. {! O5 W, M }+ B6 N# E y7 v5 l6 }/ Z. Q" V
}else{9 I8 s/ \9 I$ A
//空位置 不用动
* `8 B e8 o& p) d- ^ continue;6 L8 q! x6 J3 k! |3 ~
}
; N) G) t; q8 X* ?- w6 l //////////////////////////////////////////////////////////////////////////
& f/ o% o) ^5 h8 X0 R# A& d; z) P //开始移动
, H; ]) E8 V Z! n2 x if (nSrc == nDestPos)( d# O1 ~0 ^0 W, X% S* {0 ]
{+ }/ N. z @* P$ B8 c
//原地不动
+ R1 Q( v, ?) W$ w" c2 ~9 Z nDestPos++;
# j; R0 J2 i4 V; @) ~7 p continue;
- O( J0 P' g. b% e- g }
+ O; |6 h0 C7 y# `$ d! ^ pInvSort->MoveItem(i,nDestPos);9 Q) G- H" F6 l2 Q; B5 G
g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 e/ s+ k( C8 p, v2 r
Sleep(5);* R$ }& J- I* H* e! ?
//Error("移动 - %d->%d",nSrc,nDestPos);
. f8 J8 a: u: E nDestPos++;
) M4 ]+ ]- V3 I }( Q, k& g2 k( R. m0 X6 B( W( b: O
//取第一个元素的信息3 K: ^/ K) }0 O) i# d; V/ P8 F
/*
2 o0 X% g" Z+ V0 H7 x8 x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- x% ] H2 V* {) i5 F" d0 x+ h
{4 @3 d$ R, o: S* l
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) I# y |& X' V. y' J! f5 K1 { g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 g" U+ D0 ]* q. `4 R }& _5 I5 |! B9 j- X" k. p: T
*/
^, u- }, d$ a7 g5 X4 N* c/ E //////////////////////////////////////////////////////////////////////////& ]' r2 e B: m8 ]
break;
& g% ]6 J8 z+ \" h; c" a }
2 Q, _. N) U5 x1 I } ; J% T- n$ ?: r8 [
}% E0 L- j; ?2 w* w0 `0 m' r9 e. s3 }
m_wndMenu.SetVisible(FALSE);3 e. l7 s2 s9 |% P
# u) @( ~. u5 C3 }+ q, M0 M4 f1 g
--------------------------------------------------------------------------------------------------------6 {! _* o3 Z+ j$ T4 y3 Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) q, n5 N- x3 H/ q' g% c# z
{8 g1 @8 E9 t7 G- c
BaseMouseCursor();
% a1 g2 d) v1 I% _) l6 K}
$ v2 I: p% X3 ~. U [+ @在其下添加:
" J' Q6 M4 G; i* j! r% c( W0 zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 ~5 j" Z9 _4 K7 V{ w" N' n" i* S; x
m_wndMenu.DeleteAllMenu();' W) K* U) b, H( ` u8 o
m_wndMenu.CreateMenu(this);
N6 o' q3 |% h5 n' |" L) Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& s$ P2 o: P+ L* M! ?' E" b7 ~6 h3 a5 N: E; u% P
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 P( T6 m- a- e, H# r
{/ y+ B+ E6 q% \/ b5 m
//P以上级别才可以删除所有道具% W/ g7 u% e; _
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* w) q, f6 N5 u# `+ |3 m: U# v9 i
}0 B3 g1 Q' e {
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 l# J) T+ k& W- F" \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& W4 n* A7 ?; F3 x E
m_wndMenu.SetFocus();
& | V9 \+ s* D}
% o7 N9 ~. C& e8 M------------------------------------------------------------------------------------------------------------
' Q( g. t( p t/ k, i; _( _*************************
* T1 }8 K5 w; I6 @/ P7 \. |. NWndField.h文件# } K5 P& x0 n. H7 e% U
*************************
$ l& _( y3 T8 h7 u搜索:BOOL m_bReport;
& N) u, W5 h4 ]+ H* K7 t/ {( I3 | O( M其后添加:4 y! _+ G! ?: q4 f4 T9 D
CWndMenu m_wndMenu;) h, D" B/ x4 p _; W/ K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 |6 _( a E, _+ x! I% f其后添加:% N$ p! b$ |* _0 ]- T
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 h. s& R9 ]$ p/ o9 j1 I& h4 d6 B& X# D! G9 y
% j! N8 ?- M/ C/ A& i' O
|
|