|
|
源文件中_Interface文件夹下WndField.cpp文件, J, u+ f! _ Z9 k' V2 W/ w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' D: T1 ], `# {0 y) ~" o) t g% K! |6 V; L8 Z6 C, k
struct sItem
- H# B. }9 P6 h ]# r{% h8 W! p# \! f4 j
DWORD dwId;
* N9 c. ^3 T& S1 C+ ^% {3 Z3 ADWORD dwKind2;+ E8 X I! S1 y9 A1 n( n, n- _
DWORD dwItemId;2 a/ B% U1 Z9 [6 ]+ w2 |6 { W( J8 b
BYTE nIndex;
4 [) }- S5 ^7 m2 [. z! NsItem(){
- n- m2 w8 l m. q dwId = dwKind2 = dwItemId = nIndex = 0;- f9 r% e2 n) u9 c$ I. J# S, p
}- l5 e3 B2 N/ g: \# Z; S6 D. j
bool operator < (const sItem p2)8 w6 P) W; b( G" Q
{
1 O& m Y& n0 a' n' E2 d8 d if (dwKind2 == p2.dwKind2)* }1 B8 [( F; d. ?
{7 ^2 z/ E( X, _. P! V
return dwItemId < p2.dwItemId;
' j1 ]9 I0 W8 [. S7 f6 P% [! ]# w }else{
0 \* ?4 Y0 Q0 y return dwKind2 < p2.dwKind2;
9 M" u. w" q6 b; j }
" L: n1 C0 k6 o}
$ N' q4 E1 n# S X# W* U};
7 Y+ n& F$ G8 B/ w% `8 F" W: iclass CInventorySort
4 b( w4 a0 `/ E+ f2 _: I{5 G! U- w ]& D
public:" w" R6 R7 Y7 M5 a4 a9 Q
CInventorySort()$ X3 s i1 R! f) r/ I# J w- `7 ?
{
) _. u' [( }# Y3 g m_dwPos = 0;
. l2 N+ W/ U" ^! W2 n# F}7 l0 M4 a2 W0 v* O
~CInventorySort(){}& |& Y3 l' w9 I n% _
private:
6 Q7 Z+ P) L3 p. y+ S6 QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 Q4 }8 B( f7 p) g3 D0 Q+ |DWORD m_dwPos;! c8 }" G ?9 m3 |" z& [+ A- c" Z' b
public:
+ H% e2 j' O8 jvoid Add(BYTE nIndex)
6 }) q3 D- A! z{% I# K" Y; `5 Z" B/ Q
if (m_dwPos >= MAX_INVENTORY)/ p2 d, D, j* v7 }% l( H3 K
{: G* _- n3 d0 u' B
return;& ^, J5 ^! d& H" O6 f
}/ t# ~' {- `" _; X; m/ K- ^) e: l; q
m_Item[m_dwPos].nIndex = nIndex;
3 \2 z4 m$ b* O$ u u# o$ k" r m_Item[m_dwPos].dwId = m_dwPos;
) v( x5 j8 f3 _ m_dwPos++;
( ^2 E# D4 _4 O) J0 T% y% r}4 d4 i7 o( _' e& u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 l" d2 p5 G) @: [) W: j' `- j{
, d! I5 r4 `2 K9 I4 ^/ H* j& f for (int i=0;i<MAX_INVENTORY;i++)
/ }' y1 m; e" D1 z+ ~ {6 C9 ?3 r4 N1 M) l
if (m_Item.dwId == dwId)- V, [) h1 k! s1 Z( s* F- k( |
{( g" F7 S, |' |, c
return m_Item.nIndex;
$ k E' l g! Z3 R; ~9 j }
|3 }. M- Y2 W [9 Q* a }9 `9 v! ?" R0 A4 F0 G/ B
return 255;
* H' W; I4 O _5 D0 D}
" G2 g8 s% `; w k d' Pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 o# e5 Y, ^. k. ]- `6 Z
{
! P2 h) k5 V* Z BYTE nTmp = 0;
?4 C7 G7 h' W bool bDest = false,bSrc = false;8 i5 H# o7 O2 K" t
for (int i=0;i<MAX_INVENTORY;i++)
+ l% @% G6 L2 c' V, K; k# v {
$ s7 N( ~" B2 D! D i if (dwSrcId == m_Item.dwId)2 o! k# b9 N0 g3 ?# D5 ]- ^, o! R
{* c, y9 R$ m5 z' ?& ]! s) P
//id相等 则 改变对应的dest和src
; K7 }+ e7 K) R9 {- }# } nTmp = m_Item.nIndex;& T. J* O1 b1 X
m_Item.nIndex = dest;6 W( g- _: M) S8 A) c& Q$ O
}
7 y$ I: u6 B. J. _6 D& G }
+ v. ?% S/ \/ Y$ d' r2 d& I6 I @ //临时数据保存完毕,交换开始2 g, k- }3 S, c+ i+ n
for (int i=0;i<MAX_INVENTORY;i++)
8 Z& W4 u/ O$ F$ C l t3 z {
5 e; \2 o# W( f0 v' | d if (dest == m_Item.nIndex)* h O/ T1 g8 z4 g
{1 g5 K* C. }1 H% s o3 g8 z
//id相等 则 改变对应的dest和src3 N8 [4 r- b' j ^- `4 k
m_Item.nIndex = nTmp;
# S1 a2 K, v9 ^" d$ Y( o }
2 d9 r% N# L; o' e5 X }
/ j( [$ K/ J$ y) r' y7 D}5 y4 x3 B/ ~$ `3 C$ G Y
};
+ H, H- r( c) V0 t-------------------------------------------------------------------------
7 E% q0 _( c5 I% O* S6 ]依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). g( b2 T+ [9 i9 e# k3 m
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 R; h' ?2 U) ^' u; l. E紧靠其上添加:
; T5 ^) W1 I9 q2 f5 _if( pWndBase == &m_wndMenu )' O* [& H3 [$ e/ B( G3 n3 s
{
2 w2 y* F$ O+ B% j9 [$ n switch( nID )
6 A) ?3 }0 A& z1 ]/ F/ t6 y {
% l2 s# m: Q- {& F, M( W5 c( X1 { case 2:3 o/ B9 {% _" ^# M
{
9 g8 J) z2 E$ X. Q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 _1 g! w0 G: F$ Q, }
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& O$ b1 A2 r0 H
{! _9 Z* `# U2 i* ~9 `
break;
9 S; ?0 x$ l4 i, ]" i$ t8 L }
! w; `" u. T& u5 O: s: W8 j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! C, @% [9 n8 X" w) v {
* q! T5 z2 c, ]' U# S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: w+ s L) X1 y* H# [
if( !pItemElem )
7 A$ M+ F! c, h4 Q9 L continue;6 {% E+ D2 A2 k, P9 p6 `/ x9 |8 Q
if(pItemElem->GetExtra() > 0)
( w! g/ S* ^8 g9 ~7 r- Q, L continue;
, w$ {/ v1 F5 L, l& q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 {( {( I7 P. t7 V, Z# T& }
continue;! R! ^% U2 }6 r' M, A/ [3 B3 H. @
if( g_pPlayer->IsUsing( pItemElem ) )
; s% K1 m7 \+ z9 l: A+ c continue;7 l* u" q; ~% y, ?9 D5 \& K
if( pItemElem->IsUndestructable() == TRUE )" S: ]: N c& e2 s
{
`6 h: v: h% Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) b2 m7 p: ^0 X, ]& [' ^; O
continue;
4 @" V. ]$ f, _. S }5 O& J' K% t! z/ @% N
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 o! S7 v' k2 @) o& B: o }
; a- a+ b8 F: K: s break;
5 k! j; X( Y# ]" S }! ]! C, o% P7 ?# Z- y
case 1:5 H4 w) i G N6 R. g/ j7 m
{ B/ G, A, @ o3 Y. W7 i5 y
//整理背包) u( ~ _& I1 P$ l; {% b& x
//////////////////////////////////////////////////////////////////////////: z) T c6 A7 T: r% C6 M1 [
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: A& c _. @& ? //////////////////////////////////////////////////////////////////////////
- @- z7 M6 ?6 `/ {6 c) p* X //////////////////////////////////////////////////////////////////////////
( Z$ J: r( \- a3 V5 J; ]7 U CInventorySort* pInvSort = new CInventorySort;
( n2 N3 `" h/ ?8 W! p, ^/ H4 w vector <sItem> vItem;9 {4 v* g' O3 p1 K5 `
vItem.resize(MAX_INVENTORY);//初始化大小
7 q! o0 C7 V6 p //////////////////////////////////////////////////////////////////////////
8 u! S4 M$ c' H9 h% @8 } //填充数据
3 e0 n0 k! u" @# i* d i1 k7 R for (int i=0;i<MAX_INVENTORY;i++)# ?$ `. x7 N! I% G' d2 W
{
3 y) n8 h2 ^7 t4 G1 |7 Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
g+ t7 c6 J7 L) w if (!pItemElem)6 l5 O) T8 r* w, M) D" D
{" Z- J$ O: M7 q2 q d# P& g' F
vItem.dwKind2 = 0xffffffff;. g- K9 _# w& @( j- T3 m" h
vItem.dwItemId = 0xffffffff;
p- j- s' h5 r+ s4 r9 ` vItem.nIndex = i;" w' w4 w9 [9 w3 W0 X% [* P7 r
}else {
$ i! [! y2 x* n ^1 j# Y ItemProp* pProp = pItemElem->GetProp();
* a/ n; Q2 j ?+ u" L; A5 L4 a% b* S vItem.dwKind2 = pProp->dwItemKind2;
7 r" ^7 K7 O- R vItem.dwItemId = pItemElem->m_dwItemId;
9 o, j2 ?; @% X- k vItem.nIndex = i;
; X( J& r$ M: Y {6 K: n }( u, v! _- o. ~1 }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 d# g# y! O& U+ p% d
}* `; X- V8 D# R4 z
//////////////////////////////////////////////////////////////////////////7 `* p2 F) ^& s4 w* F% \
sort(vItem.begin(),vItem.end());//排序; a1 C+ B# o6 T, [# j/ Q. D- e
//////////////////////////////////////////////////////////////////////////- P% q: g' `4 F3 {% Z. V" I
//交换
, ~# {) [0 S) c* k. k7 P for (size_t i=0;i<vItem.size();i++)# Y$ J# n; `6 t7 r3 v/ N
{+ s( `) h+ e, o& K w8 i+ ?/ P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 \& s+ t. `! B
pInvSort->Add(vItem.nIndex);
@ [* }% S& c }
0 N( ^. u+ d& l. \/ S BYTE nDestPos = 0;" U* M& U) m: t0 [' n$ P
for (int i=0;i<MAX_INVENTORY;i++)3 D) q5 N5 g% q& y6 e: ?
{
8 `. r( z. [: m& T6 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 ]: ]( ~0 t& e7 \; ~) \1 Z
if (pItemElem)
5 l/ G/ U, P. W+ S {$ ?9 h2 E% d4 f5 V& r! C$ g
if (IsUsingItem(pItemElem))
- y9 a5 o( ^6 i& ^$ `" c {
! q8 t0 w+ W8 H" O //这个位置无法放! F. @6 p$ p9 ? b# v8 R6 Y7 i
nDestPos++;
, q0 X8 X; T, U& Q& y }( q- \& O5 Z; n& l) M4 S$ C
}
: z% ?4 K# M" ] BYTE nSrc = pInvSort->GetItemSrc(i);
4 t. ]1 d& G: P1 A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- S# [9 A. S3 }1 E if (pItemElem)" E& h$ S- A! L6 D3 F, k
{9 S1 D% R; Y2 y% q; O
if (IsUsingItem(pItemElem))
6 H, ?( q% t- }- S% j' V/ X& f. @ {
0 V# [2 C4 E5 Y( L //这个道具无法移动,跳过- S" i3 v6 g& j0 f# B1 J% I/ y
continue;
" B7 W& ^& W V% W; v/ s- ?. ? }& W" P- c+ v% J6 T1 t
}else{
% P8 y% ?& h9 E( `2 |0 ~ //空位置 不用动
1 e* t3 V' U2 e" `! I8 v continue;
& ^ _, u" [; u5 Z' t: U& r }
Y) G$ F$ K5 ^, z6 w- `+ z* `( s* Z& | //////////////////////////////////////////////////////////////////////////: }8 K/ W! B2 L, R
//开始移动/ x6 ^( e* n2 {% E8 `6 K
if (nSrc == nDestPos)9 c7 ~3 ?: ]; j+ a
{
9 |# M2 S4 V1 \0 a: q9 t; F% g //原地不动
~9 D. i. a5 G nDestPos++;
* a1 S" I( h# ]& f' j continue;. N3 V0 h7 ?' L0 l2 v9 t; f1 x% r) r W
}5 N8 X0 N+ N, K8 c9 `
pInvSort->MoveItem(i,nDestPos);
9 ?* u! H; W! L1 T g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 q: R* y( v- H
Sleep(5);; o h. c3 p' Q/ c
//Error("移动 - %d->%d",nSrc,nDestPos);
5 S% Y2 q: w: c T1 y" J0 O nDestPos++;( H- d6 N( `+ W) w p i
}- O- p E ~; b. W+ k
//取第一个元素的信息
3 O* s& m6 s3 @5 e0 `5 j; e /*( r" u% e& a1 [
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! _# x9 s- p" J( M4 J
{
! L5 b; [ m! L$ R Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 f' R g3 ?8 G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) {5 M+ o; v a% u& a
}
4 x6 o+ v4 Y: G4 F* D2 M- k */
$ e0 @9 k* ^/ W; q% C' {" p //////////////////////////////////////////////////////////////////////////
6 B* |% d# b# c8 Z3 Y$ k break;2 C4 o0 O5 N& v; b" I9 h
}7 [5 {, t- j& L
} 0 w S* d+ |! S/ @: \* h
}5 Q, @- \& C3 r+ |: r# m
m_wndMenu.SetVisible(FALSE);6 b( [. _, ]% E/ w6 A
+ d7 H& r" g" ^/ @/ b
--------------------------------------------------------------------------------------------------------/ j- n% o. h. d s1 j# x% c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" D0 L$ o7 g! X7 t; l: E
{/ P; X1 H: }% J
BaseMouseCursor();
0 e6 l4 t* `9 ?, }7 K/ B8 [}) w/ Z8 P& i) n: [2 y& J
在其下添加:
- e# j2 h% u3 j1 o; avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- y( x1 u/ p- { ]: i' a+ q
{
& Q: d( ^: K" C1 D5 J3 N8 Xm_wndMenu.DeleteAllMenu();, A8 ]. H0 @+ M+ J8 \3 i( \4 [
m_wndMenu.CreateMenu(this);
0 ?" a% ~# ]7 c0 Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& a b+ R6 q" `6 f, w- [" Y5 a- e. k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 x4 Z6 R" o8 ` m6 q9 w{
b0 R _4 p# d( w. } //P以上级别才可以删除所有道具
5 u* J6 a7 }' b0 A1 x m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 ^: \' e4 S4 e, v}
7 r; C1 t) u# j) Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. y6 V5 ]7 P& i8 j4 ^0 [/ J) S2 nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! l$ a' z8 k0 g$ n
m_wndMenu.SetFocus();( [( A3 O- ?( P2 A" ]- K
}
0 V7 ~8 s2 K# B------------------------------------------------------------------------------------------------------------
( Y S$ o6 n I6 F! L. J*************************0 c! C' M: m. p/ i* h# g+ v2 g
WndField.h文件
) ~8 ~0 Y$ D: w, ^*************************$ x. r" u$ Q s4 I
搜索:BOOL m_bReport;. S2 b/ `1 E$ n% J
其后添加:' {% L4 k% E, H& F
CWndMenu m_wndMenu;* ~! x) q6 g& N# h' ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- {+ V) ?. F+ A其后添加:
' Y- q3 ~# v) P e* e3 jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
7 j9 R4 p( H! [" y2 C# \( U- y( w$ C1 \3 Q7 P& p
) ]( z4 M% }( [$ p$ F3 r |
|