|
|
源文件中_Interface文件夹下WndField.cpp文件+ k" m* S3 E9 y- E a' d% P7 y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. F- v+ G% k! x9 [/ X7 \- P# \4 s( V$ u% f
struct sItem: [, ~, u( u" E8 |0 Y# w
{- Z( @ N2 S4 i4 A8 A$ i
DWORD dwId;3 o5 p. ]5 D; M; {8 _# T
DWORD dwKind2;
' }+ n9 {% Y Y7 n. V% nDWORD dwItemId;; b, R, u2 B+ U( K0 F; U' X
BYTE nIndex;' B( d2 r; B' |4 C/ o4 g
sItem(){! K) ` y# ~. p% d' Y. U# T5 l
dwId = dwKind2 = dwItemId = nIndex = 0;. B3 F# w9 g$ ~) T; b& f% J
}
. Q3 e- @0 _. B- F6 Y. D# H! Cbool operator < (const sItem p2)! ^; ]( M! L5 ^9 n
{% J2 @) v) s) R; w, U8 y! d: O
if (dwKind2 == p2.dwKind2)
$ E2 q$ x" p/ s, A# g8 ^ {" l, n+ o( A+ b1 j o# m
return dwItemId < p2.dwItemId;
8 d( r$ Z& h9 {6 m8 n }else{% D( O4 E6 [9 B0 `8 s
return dwKind2 < p2.dwKind2;
k- o: n* g4 L% c$ f }
$ m- c- B% G( o2 |+ e: t}
' E7 [* C! \. i6 @};
5 V4 s6 H. Z( y3 L! Xclass CInventorySort$ |; L% [; |1 ?5 e5 a1 G2 m! a
{! p+ e% f4 h$ M
public:
2 S# ~- R8 m E. q4 ^+ }& y: jCInventorySort()9 @) |. E2 g: ]
{/ I/ F8 g, Y& M8 {
m_dwPos = 0;+ v' c; A- T `+ W5 L
}) N9 |0 G: S9 t( _* ~
~CInventorySort(){}
' ^$ x- D+ [# ^) W" G K+ oprivate:, x+ }9 A$ _& \8 l( l# r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 k2 R7 z d8 D: j6 W$ ~& @DWORD m_dwPos;% W$ ]: {7 G+ @0 Z5 T4 e6 }
public:7 U& Q; q4 Z; J2 I' f- k
void Add(BYTE nIndex)1 L9 D( V; E& ` X6 {
{7 A6 }, Z4 G3 v* X, o
if (m_dwPos >= MAX_INVENTORY)
$ a, B* H9 H' A4 P {+ Z. o8 k9 _, c0 I
return;
% `" n- g3 M: Y2 Z+ J }
8 `/ F A+ l/ u) Z0 P4 K/ }( e8 V m_Item[m_dwPos].nIndex = nIndex;
7 y/ m( a4 I+ a3 l+ Q m_Item[m_dwPos].dwId = m_dwPos;
1 m% Z6 q3 L3 m7 v2 r+ J0 [/ R m_dwPos++;
) r/ v! R8 F, y! [}& o9 Y' a! C. |4 g- I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! R5 S% [& U# |- R( K5 Y7 @8 L
{- Y8 U) J: T/ `# \' V P; n5 Q- e
for (int i=0;i<MAX_INVENTORY;i++)
) m3 z' [& G8 E; N, H {
: J( G* u& { _* c: P! e1 t- o: x if (m_Item.dwId == dwId)/ M$ p0 M4 O t; U. z/ m
{* ~% K% C6 k! D) b; g- o! G
return m_Item.nIndex;+ Y" j& l1 F/ J5 V0 X9 E% v
}9 k) [' R* b& e8 W" y
}1 O5 b: Z4 Z+ n. X" o
return 255;
' m2 i6 L8 P9 G6 k+ R, }0 [}
# ]! `$ f8 N/ U: Uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 N4 N( C% [2 f0 k' }
{
m" x! O. W ~5 f: s7 H BYTE nTmp = 0;
0 ~* _1 _- Q$ F! [# B6 z9 G bool bDest = false,bSrc = false;
3 {; p+ L- H# V! v) U2 f- c for (int i=0;i<MAX_INVENTORY;i++)
0 o' `4 }/ n+ }- f# Y; t# B {$ g/ u. F$ q" p" |! h( j" y F+ b
if (dwSrcId == m_Item.dwId)
. C8 s. c8 z3 z7 K$ ?2 ~' s {
! b6 P) y# s+ w7 x //id相等 则 改变对应的dest和src, ?$ `7 }9 R/ f9 F
nTmp = m_Item.nIndex;+ n; T/ v5 z. `: ?' q& b
m_Item.nIndex = dest;
3 G" e- W+ @9 C. T& k! B6 b8 S. e }
& L: A2 z! \4 I. `' G5 u }1 l! F9 o; w6 |* u F/ \% x* |
//临时数据保存完毕,交换开始
3 }0 X, i" [+ f# E" N for (int i=0;i<MAX_INVENTORY;i++)8 {' m4 l2 o& k7 N/ u; _, m) f6 G* \
{
& q i( ~/ {% {1 f if (dest == m_Item.nIndex)( D( g9 @+ ]: v' f4 r: P1 P
{6 h' e1 d4 n# [
//id相等 则 改变对应的dest和src
, [: C1 s0 H6 g. v$ | m_Item.nIndex = nTmp;
# v$ T' Y9 T& i, D# m) [ }) h, c3 o" {& r# G9 g; z+ T4 e- @
}+ M1 n$ j/ K$ Y6 k9 v
}6 n5 ?" S4 G l" s
};2 S( I/ C- C9 @7 A, h
-------------------------------------------------------------------------6 Z3 j% K- C3 V) f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 N5 ~- x! ?# |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; {( j& a' ]+ X4 `+ P紧靠其上添加:
% i( l$ \4 X; @, U, m0 l# [/ g+ @5 Q/ hif( pWndBase == &m_wndMenu )5 g; L' H7 B' g7 a
{* {0 I0 a4 N5 _6 }
switch( nID ). m6 ^. P/ Q# K
{
5 g5 k/ o- m, a- a case 2:$ Y0 K0 `! @+ j" n
{
# w9 c" s, j( f$ D# U A+ X- \9 z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: W3 M8 \4 g) F. n- s! H# w- d# U/ q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 p+ J- `+ F+ @) S
{4 z B3 g. J3 l. g" ?
break;
; K5 O0 l9 d. C. C }1 d7 H* i2 `0 b( ^7 _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% U4 U+ h) A# P$ Y! i$ Y
{
8 a1 K% v( O9 y9 S" R; T8 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: u7 s5 ?4 x6 V4 z$ t- S$ m if( !pItemElem )* b; G" P) C7 k( R$ h, s; `" @' |
continue; Q; y! _/ N. u$ [! c9 W' D% G
if(pItemElem->GetExtra() > 0)
( \7 v2 j9 C. T+ N7 k continue;
# v- [: y3 a v+ e7 f5 H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 T9 a* q* ?" h0 A4 L) y* E+ o continue;
+ ]$ D' p3 e- y$ x5 G8 ?( F g if( g_pPlayer->IsUsing( pItemElem ) )
( h* F+ @# c) B; ]3 H0 Z! W continue;* C/ `' g( o! E2 f
if( pItemElem->IsUndestructable() == TRUE )
2 i2 f8 u! x! [( N1 O" i1 M0 h {
" Q" A; h( E% j+ ]6 S( G) T g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 p* e& J3 t- K' ~0 {5 [
continue;4 E4 w* o% O( ?. x9 ?, s
}
2 s0 l- ?% V& f+ r- D- a g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ E0 {: ]+ O) X& j/ G0 ]9 k" H
}
+ e& A0 P( V# w9 z0 q! G# L6 Z break;
) C2 W& [- Q. L5 C! {3 X8 g }
$ t0 j% g+ a6 A! I9 B2 P* A. Y0 ] case 1:) @1 k* o8 d6 k3 M7 }$ {/ w7 x
{
" u6 Y( n! {2 X8 o! }, h) Q //整理背包
( k- k) Y+ ~ U- V& E C8 ~) f //////////////////////////////////////////////////////////////////////////
5 j `* q8 @0 x& j& K9 V6 J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) ^. a+ L7 I; T% e% L. @& C //////////////////////////////////////////////////////////////////////////
8 m5 z: U/ n* g4 u& K) Y //////////////////////////////////////////////////////////////////////////
: S) V, C& z! m2 U CInventorySort* pInvSort = new CInventorySort;, V* H4 e, B% H7 L, n
vector <sItem> vItem;
0 j- s4 _3 F; p" O vItem.resize(MAX_INVENTORY);//初始化大小% H, b' M: W7 w* e
//////////////////////////////////////////////////////////////////////////$ t+ y; i* B/ d, r
//填充数据
! z0 i0 S* s$ Y- e' ] for (int i=0;i<MAX_INVENTORY;i++)2 B6 p+ s" S' g; C0 [" K. q1 f
{
. \! ^$ O, r N9 M- m' S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 J& P" a9 _" T* K' Z1 ~% m3 w
if (!pItemElem)/ Z, m5 K2 ?5 |7 \3 H7 m
{
4 F# d$ s5 y" r1 P0 e+ V& z7 b6 c# r, e vItem.dwKind2 = 0xffffffff;
' {5 M }* f& h3 T4 n! n vItem.dwItemId = 0xffffffff;
# K* M1 F& ^" X Y( ~# R( ^ vItem.nIndex = i;) g: j$ m5 J0 F/ U: p: D" w, o
}else {
1 x g: d8 ~; D% }. U( I# ]: w8 D \ ItemProp* pProp = pItemElem->GetProp();
B2 J" Z6 s" j7 V& z' A6 D3 y8 I vItem.dwKind2 = pProp->dwItemKind2;- N+ T" E( O: k% Q7 V
vItem.dwItemId = pItemElem->m_dwItemId;4 i5 P0 G$ P* G; z6 N
vItem.nIndex = i;1 [& r3 p" L3 q! H# `8 N* H
}
& L- p# H8 l6 Q+ v% g( Y% R //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* S9 r6 D; ]1 @
}
5 I3 C0 S6 Z9 E& l" t) x, e. [ //////////////////////////////////////////////////////////////////////////7 b+ v2 e% O5 ?+ n% |' V4 q
sort(vItem.begin(),vItem.end());//排序) W" ^+ K8 R9 Q6 ?1 Y% W
//////////////////////////////////////////////////////////////////////////0 }* |4 y$ q; H- \; o
//交换
3 C3 r. M) |& E9 g* h, a6 r for (size_t i=0;i<vItem.size();i++)
0 p2 E' V" R7 X% {/ v {
( ]0 V1 h" {& N- O6 T. Y/ D) |8 O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) E/ G j+ s$ C& C2 _" o" {( ~* Q
pInvSort->Add(vItem.nIndex);
" Q) f0 F) u Z; A; T/ n5 o3 o }
& g+ x0 {& i6 W2 e- k BYTE nDestPos = 0;3 o9 e2 r4 z' E
for (int i=0;i<MAX_INVENTORY;i++)0 x$ u+ W! z, I K, a/ b k( V
{
: O1 q* U) g% V2 R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 S% P' e: a3 a% J: j5 ^
if (pItemElem)- A5 y+ ~0 Z( f! ?- \! _& ]
{3 ?3 Q1 S* ?/ e
if (IsUsingItem(pItemElem))
* p7 k+ w- l1 N) {6 Y% b" x {
, s+ l3 t3 A( z //这个位置无法放
/ m! W1 L l) M* l nDestPos++;
" S3 v9 i* `8 | }( F! z( n3 d( Q' }0 }. X: A5 p
}% u, n0 M6 F! s B0 w& Q
BYTE nSrc = pInvSort->GetItemSrc(i);
4 y+ y4 }( c0 y/ D6 G pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ J1 ]0 h0 U0 h- [% m! P if (pItemElem)
" c" |3 p& k; v$ X( T5 ?+ s B% n {
- {6 k/ ]" Q6 q8 L; w if (IsUsingItem(pItemElem))
! }- {6 J$ Z9 A1 p0 Q( J4 b {1 |9 M9 T- q" q7 t/ }' B5 j+ D, \% ^5 q
//这个道具无法移动,跳过3 i( s8 w( [4 ^6 ~; o% k* r8 v
continue;
; M" f' P! ^3 ~6 }- P* k$ q4 J }5 N) `- g5 D5 W7 J/ M( V
}else{# O& z. e( U9 b- e9 l( j
//空位置 不用动
6 y1 ]: [! u/ r9 m( M8 Y continue;
6 _) { `; ~: d* ~ }3 U% M- b. b0 \( P8 }. I$ t
//////////////////////////////////////////////////////////////////////////: m, ]2 {& e8 j+ \6 y- |$ ?1 L% O4 b
//开始移动8 c* R# e" I8 J; P
if (nSrc == nDestPos)0 K7 x5 v( l/ ]3 P
{
2 Y9 F: o$ @0 z. P! J //原地不动% z* ]; U- M4 Q8 m# H! V5 f
nDestPos++;& \( O! {- y: c" p) T
continue;
* e9 W& `) T. i5 G }+ J4 m0 u3 e( n1 A, q
pInvSort->MoveItem(i,nDestPos);3 `& O" h6 w* q7 Z" h! v i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( O( T$ v. J! ?- D1 y Sleep(5);
' [1 _' v: d% B) o" K( D- g //Error("移动 - %d->%d",nSrc,nDestPos);+ O6 }$ K0 r# M ]* {0 {7 A2 ~
nDestPos++;; ]; _$ k/ Z* y/ {# W
}
' `3 C0 \! P3 v+ S+ Y, u% J //取第一个元素的信息8 ?" u+ `% H! G7 {. I0 ~+ t
/*) V1 @' B3 a: m! S5 ^ h
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) g/ L, G s( y$ P" ?5 [ {/ Q6 K, o& v. q, h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 N P9 j, ^! B& a! Z2 R0 s% c g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, q y9 ~ Y/ [2 q }
5 _/ o" P- Q' K! i3 [ */
6 U3 }+ J; P. h! b' h //////////////////////////////////////////////////////////////////////////0 |2 H9 j8 l* g! E; O1 e1 H
break;
& I, ?' M; c8 v }. O4 H* Z; y* l
} - ~$ }% l- y. l9 P
}: G1 n! e7 X0 ?; E: A7 n
m_wndMenu.SetVisible(FALSE);
. C5 s0 @) X: L. E
" `3 k: o1 O4 f5 s--------------------------------------------------------------------------------------------------------5 U4 y0 A; e, M3 e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). B1 [! v2 X' j5 F
{
3 B- Z. s% `: l% e) V' d" A7 hBaseMouseCursor();
& U: C/ ?6 P; j- H}% E( J5 [2 }3 X
在其下添加:
$ j* w! t8 w) W/ u( Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. p/ K5 Y. U0 H$ w3 n' g{
8 |7 D+ e, b- m" _# p Bm_wndMenu.DeleteAllMenu();
- g$ K$ T( J+ R6 im_wndMenu.CreateMenu(this);9 O# _! t& L* ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' w9 j. u) s( E k, o
$ w$ y/ r. {3 s7 M4 J6 l: X4 _
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 N9 ?% \/ i# C1 F9 W7 P# }. K( Z/ G: r
{( e6 |$ t7 v( Y$ v) h1 @. U" }
//P以上级别才可以删除所有道具) p. n) N+ q b- }: @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 h7 F* F2 B. f, O! Z2 g2 `2 Q' _8 [}7 P$ |7 S" `9 N% O9 W$ \
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 I" Q) e8 a' N. ?; [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ k- L- Z, {7 k2 M3 V( F
m_wndMenu.SetFocus();
. Y; d" p* C- a* a6 }" M& ]2 n}
! c! m$ F5 Z# {9 w------------------------------------------------------------------------------------------------------------% W5 g& @4 W& j }; }( {5 |6 L
*************************8 {: {; v/ U. M3 O8 N
WndField.h文件/ C) L) J. ]: x9 h* |3 z/ |
*************************5 f$ H u6 ^4 l6 E6 d
搜索:BOOL m_bReport;- s: O9 c* [9 a8 ]* r% _. Q4 S
其后添加:/ B4 N6 C6 P* {9 F6 K" y
CWndMenu m_wndMenu;
% U& T7 O- J2 \9 \& r, \' m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! d% v7 O* Z% }其后添加:
( w3 {+ t; {! T: `$ S& a% tvirtual void OnRButtonUp(UINT nFlags, CPoint point);# {9 e3 L9 v. R9 P5 |2 d( `& c* ^
$ ]0 C5 [2 K) M# U- z
. r+ U; h& x2 r& |# B
|
|