|
|
源文件中_Interface文件夹下WndField.cpp文件) l9 J' C/ j- s0 m0 ~! }% c# b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 t! A! z3 U: h$ Q7 @1 f% c) p* u
' _6 B" s; @, A, U! M: `struct sItem/ a* Q# C5 `+ C- {
{
; L/ \+ E. d' l: L4 |8 J$ nDWORD dwId;
! Z+ p7 r1 {9 eDWORD dwKind2;
5 x# I0 {8 }# f! }. |DWORD dwItemId;( c4 N0 y6 i6 \- v' w& V
BYTE nIndex;
( c* n) Y! w) v# KsItem(){3 |) ?& S+ j( D
dwId = dwKind2 = dwItemId = nIndex = 0;+ H$ w2 P! ]* H- X+ c* z* ?
}. Y7 z1 C. P# n4 k( n
bool operator < (const sItem p2)
! u% M, e+ J: l* n$ x/ ?{
. `7 Q' Z% v& z! K2 h* G# W$ K if (dwKind2 == p2.dwKind2), r) [, _8 v* p1 X, F
{/ L9 |; y/ I5 M6 C/ B9 g7 W
return dwItemId < p2.dwItemId;6 g) ~! |2 L }, P4 @* F
}else{
- _+ b6 g) g- z2 a/ i. [" p+ x return dwKind2 < p2.dwKind2;
2 ^+ L4 e5 p; r }
9 Z* ?9 {5 X$ P* k: [+ [}# M6 h/ p2 `3 V/ j4 t
};9 x! \( A' C7 t4 z! }! Q
class CInventorySort
1 ~6 [) k; ^0 u6 \0 G1 z$ p{$ a$ T" P. _8 R D! y
public:, w8 t- L. ~$ \5 R u1 N
CInventorySort()
% o+ I# [2 v( P( a{/ Y9 k! Y$ r6 C" J: m
m_dwPos = 0;4 f h5 t/ h. D% B7 p, S
}
" g& c \* {1 p/ {5 V* G& O~CInventorySort(){}/ v1 F3 u2 h! B4 @
private:
' v3 r# D7 F8 S9 h0 A. ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) m$ ^( ^3 J; N$ z8 E! a4 `
DWORD m_dwPos;
( H! |8 m+ _/ w2 J4 L# R1 S+ M! B1 jpublic:
; x' N6 E' D% c: d8 L: Hvoid Add(BYTE nIndex)0 O/ ?! Q- @! F9 u3 i
{
' W7 ^( ]2 G7 F% ~ if (m_dwPos >= MAX_INVENTORY)5 W# {9 J- t+ d* \# c! I
{
6 W, V' l- [: k3 | return;& @2 n q7 C5 ~. [
}" |1 I7 k: q$ W0 A( v5 ~: e# W5 D
m_Item[m_dwPos].nIndex = nIndex;
4 E6 w. D: S& Q m_Item[m_dwPos].dwId = m_dwPos;
( a! Y: O* S- Z2 C4 Z m_dwPos++;
$ ~+ x) Y7 ]2 K( j, [7 Q' ]}
1 I: R+ {7 B/ w$ z' C( Z5 ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: w- [6 H" F! ]
{
% Z4 I8 r: C8 L( O( M for (int i=0;i<MAX_INVENTORY;i++)
5 w9 U \% r+ T. D {
. _1 ~3 |) A1 V% [* n if (m_Item.dwId == dwId)* b" O" S/ J" [ D9 s. M
{6 t4 q3 h! |$ a
return m_Item.nIndex;/ P' A% _! i( ~; K- O% l' T
}
4 c, g6 ~5 f/ Y( m# Q. }0 [ }
1 g* K3 S2 ?2 T1 h7 y# X5 F/ Y return 255;
7 R5 ?- F' T' H/ S/ Q& i* O" z}
$ h' M# f3 r' ]5 F! xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 A9 l3 `0 U/ Y" a7 B. I+ P
{
; f2 r. r& M! z/ _ BYTE nTmp = 0;' L/ A% O& B9 x6 J h: h
bool bDest = false,bSrc = false;3 g. B# J% J; C
for (int i=0;i<MAX_INVENTORY;i++)6 f9 O, y+ v- W" a9 J8 f
{
% H3 [5 }3 a* U: v* F8 K1 I2 {$ J if (dwSrcId == m_Item.dwId)+ F( c/ y2 r4 L5 F1 p, d
{
$ Y( \, r3 s# X( F //id相等 则 改变对应的dest和src# u# |7 g* J3 t
nTmp = m_Item.nIndex;+ g& h) H6 M% ^6 B4 ^
m_Item.nIndex = dest;- w7 V( H& B0 P9 V
}* q" O( W( Q5 y" ^% n% l9 e7 h
}
6 k3 U# V+ f9 q6 O+ X //临时数据保存完毕,交换开始- Q1 V8 X9 R2 B3 F4 H
for (int i=0;i<MAX_INVENTORY;i++)
3 v1 x0 z) @0 N R* _ {* J4 ?5 B3 Z- @
if (dest == m_Item.nIndex)
, c/ X! C; E. n% I ? {
: f+ s$ K) v% Y. N# i5 R //id相等 则 改变对应的dest和src& J# k1 G: [% ~
m_Item.nIndex = nTmp;* n- R! O3 x6 r# s6 c2 I
}/ A6 |3 T% S$ R0 ^# Q
}0 f$ U3 o. P3 H; R8 `* N
}
/ e: E) ] e5 `$ o2 _};
0 \4 i+ x5 T/ |1 P; f# x-------------------------------------------------------------------------
/ g4 q* J( X$ U; D* E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ _& |# {; A0 B2 w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 l" s' P9 W2 {5 w0 S$ ^3 O9 N
紧靠其上添加:0 r. R* O4 F3 b8 p" V( y
if( pWndBase == &m_wndMenu )( `# j5 m; d3 o9 R# i6 f6 z
{
3 H# N! D6 _4 s/ |; Y; m, C switch( nID )( j3 y, p, F% X4 E2 S
{
& {6 u, R( Y# N% y8 E case 2:
- i4 ^( O4 J! e# Q$ y4 M w$ P3 P {
5 [6 n1 i' a; M. B. ]) B! Y1 O$ [ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! F5 [9 m2 v4 y2 [' }; Q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- N* ], ?& w9 Z
{
) F$ e8 O% o; e) l, ?) E9 I break;3 v3 u$ h9 A+ |
}) P- v! g$ w" c2 {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), z7 ^5 S" a* g3 r$ u( x& {
{$ @: r' a' w3 E/ @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 W6 g% j6 l4 t% J+ `- ^! G$ B
if( !pItemElem )
+ [# g) H; `$ a% ^. v' k$ K continue;
n1 _: ~7 e( V9 Z S) J6 `1 ?( X# H if(pItemElem->GetExtra() > 0)7 }4 c- v9 l. F' d+ u2 ^
continue;
1 @: L- p. s; S if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' v& n( z$ U1 r) u continue; \5 S/ p$ R) P9 B% _; Z7 G
if( g_pPlayer->IsUsing( pItemElem ) ). D& G! |9 V1 O T9 n
continue;
9 u- s! B8 }7 Z( M% Y if( pItemElem->IsUndestructable() == TRUE )0 w5 Q- i2 x3 [/ P
{6 S( a' ]$ E& Q+ z( ?: Q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; [, z1 p9 F: V/ S
continue;
1 u4 V g7 I3 G } b. u, Q }0 r: O. ~. P; d9 j' ~$ H
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 Y. H' G+ e( K G: l) `+ r }, Q: K+ N1 W* U7 X# ^9 k( A/ T8 ]3 b
break;! x* L. X4 Q; C- ` Y! s, ?6 w
}
7 J8 Y. ?% v6 H+ _% F case 1:
% I4 z- `: E9 T {
, M2 e$ H" e. U& A1 K" v S$ e //整理背包& J7 G/ y( p8 ?$ {& F
//////////////////////////////////////////////////////////////////////////
% [" K- q f' H3 ?4 M8 u' A //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 L) ] M e" N- {
//////////////////////////////////////////////////////////////////////////
5 h G8 W% U) V //////////////////////////////////////////////////////////////////////////
- R% D& O9 t) K3 }& L CInventorySort* pInvSort = new CInventorySort;
& R" h" K4 |! P) j0 h$ Z vector <sItem> vItem;3 W" K) V/ ~+ z& q2 V' S2 Q
vItem.resize(MAX_INVENTORY);//初始化大小# _+ S4 K0 G, t" | S1 y
//////////////////////////////////////////////////////////////////////////
$ g- I) u0 W; P d //填充数据
" t/ c( b8 e4 L' D9 N for (int i=0;i<MAX_INVENTORY;i++)9 j3 c4 K0 F2 t) z' M7 @
{
4 O: T: d% ~. k1 D) r7 Y) p& N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! W+ R2 t0 }# a& K: p2 h {, L if (!pItemElem)
y8 r. W; Y% Y4 _- E2 P {
# v9 J2 `$ Z% }1 ?- R% I vItem.dwKind2 = 0xffffffff;( i9 u, g! o8 w% t' o
vItem.dwItemId = 0xffffffff;8 T% ?; A+ B! E, O3 k. ~1 d
vItem.nIndex = i;* Z1 K X9 p+ b% t* C8 ^& t
}else {
! i2 }1 n0 B( B9 E$ R# v* j ItemProp* pProp = pItemElem->GetProp();. h' _- ~) q4 j
vItem.dwKind2 = pProp->dwItemKind2;
) \9 z& ^* J7 C9 N, b8 t4 ^% F vItem.dwItemId = pItemElem->m_dwItemId;' M5 l2 `+ T+ U3 j- s" | C- C7 o& u
vItem.nIndex = i;; j) d. i( c$ a9 v. \3 M9 R7 m! r
}5 ~7 p7 ?0 Y; x. P# m
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' s- d- s- K; ?& y }
8 b& Z/ V9 }. f+ r5 I' o! w2 q //////////////////////////////////////////////////////////////////////////
8 Y2 h5 V+ N# m sort(vItem.begin(),vItem.end());//排序
1 ?3 w- v3 w6 L) I1 e' q9 C ////////////////////////////////////////////////////////////////////////// i3 L2 B* R; o j3 S
//交换
. x( O' `8 @; o$ u, ]: ~ for (size_t i=0;i<vItem.size();i++): Y, k1 X) m" x4 {2 u
{0 Z$ b% K* ^; j5 \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
M R2 M% {1 Z9 F6 ] C pInvSort->Add(vItem.nIndex);
5 K$ |0 N% A: c% b }
7 Z1 f9 [/ ^/ T BYTE nDestPos = 0;, T# _# M4 `( f: x
for (int i=0;i<MAX_INVENTORY;i++)2 ~2 `7 N/ P- k: D4 s; }8 k" b
{2 h7 e5 h$ j, o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
v2 m' a6 J& m/ {6 r) q5 p0 k if (pItemElem)
* L3 k" `$ @, U X {/ k7 D, O' d# H% \& k' R0 o
if (IsUsingItem(pItemElem))
) R6 e+ O# C' h5 A2 q/ Q) f {/ M8 ?: Z! O$ D/ I& M
//这个位置无法放& D5 s3 o8 d* ]
nDestPos++;
9 \+ h3 k, v9 _5 R; s }% F' S1 X* P7 ?' d% M4 I: M
}! K+ H- M+ _1 }" i7 G. E( N" w
BYTE nSrc = pInvSort->GetItemSrc(i);: C l" x6 n3 F
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* Z: _1 h0 z a1 ~% a/ y9 }& m" `
if (pItemElem)
% t1 @ u, I8 }$ i3 j J4 s {
3 J5 R4 d( N8 D7 t1 C( m if (IsUsingItem(pItemElem))
* X+ k7 i' ?* h4 k! T, u. A9 \ {
# s! ]8 K0 V- E. }! D3 | //这个道具无法移动,跳过0 e+ L, t: c" z
continue;# i8 U7 K$ P# k6 _8 i) ^
}
- @5 z( j. a: x4 i( _( i1 | }else{
6 C% K2 y3 ]8 \3 z //空位置 不用动1 \2 k* _6 o" C3 R3 \3 @8 k8 N0 z
continue;
0 M2 b- r# o. B$ C/ R }
3 o8 V2 A4 O# j1 d7 ~5 K //////////////////////////////////////////////////////////////////////////
, `8 W; O) N" W8 L //开始移动; E. T& D3 S: q0 Q. [# M9 D
if (nSrc == nDestPos)
% `: ]0 i! Z# |% F3 i+ f6 |) n {
6 u0 ?: D, t* Q# w: T //原地不动$ ~- u" w/ w; o0 q9 [; v M# ^
nDestPos++;# B7 l/ F; i8 g" ^' D
continue;7 C# l/ |. C5 f
}
7 G8 K4 R* T6 t2 f pInvSort->MoveItem(i,nDestPos);
/ h; G0 }. d$ v4 b' q g_DPlay.SendMoveItem(0,nSrc,nDestPos);
\5 K! V+ O5 d; Y Sleep(5);
0 P: g4 s9 g# o& ^* c+ U& Y: P //Error("移动 - %d->%d",nSrc,nDestPos);
$ t; P" [* R2 i" Z4 `4 ~% V nDestPos++;1 G! @2 y8 x% o
}0 @, N& i- M0 a$ [( b* @/ M$ y9 x, E
//取第一个元素的信息
0 r; }1 Y7 g, t' R8 K7 B /*- S! {( V# l: [# \! U H& j) s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: ?& k$ R2 k, A {" r4 j; |4 c$ u" f+ x, N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% J" I* N3 A8 K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" k: O7 t% g2 R* w' h
}' @% x o( e6 h4 |- e0 U
*/
6 B) V# ?: j2 A8 y$ h$ o: ~& ]6 Z3 i //////////////////////////////////////////////////////////////////////////
) d- T u6 c) ?% E& D* P: M8 e break;
# k0 ^1 L) p& U' g1 ?# C+ Y }
& z* A0 q( h. q" L5 m1 B }
$ A" C# H# Z' v: u4 o6 p6 w}# d& D4 i3 u0 g0 J0 F4 ~
m_wndMenu.SetVisible(FALSE);, K+ n7 K8 Q( E
/ u) |4 l+ _3 q4 z8 M# L--------------------------------------------------------------------------------------------------------) p) w! v: Y, H% N
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 [5 S* ^! x3 K: e2 ~% r, Q
{# E- Z; }, Z4 X$ M8 K
BaseMouseCursor();3 w# z. p' f, p' A
}8 }' l' k7 V3 ^8 K9 x
在其下添加:7 f* X% _4 E: X6 J% F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" `# q0 w( s5 Y. a( S f4 A* R' s{
8 J) y, g5 u* u, U2 vm_wndMenu.DeleteAllMenu();3 |* R$ r0 I+ p3 E0 N2 f+ W
m_wndMenu.CreateMenu(this);% e5 F! L4 D! f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 a3 u j6 v' i
% ~$ n1 R* M& ^. l7 B" c( R% r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ |2 _- c2 g; U! ~( O" Z6 L9 S6 Z
{* v) V6 D3 y! W8 g
//P以上级别才可以删除所有道具/ p$ D# b8 `1 F @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* F0 ?% e2 ~4 c5 C1 B: L& s) K$ [}3 p3 f$ p6 i9 ]( M0 [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 q" A* T% b8 Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" X! Q& h* y6 f; a! x8 r+ Ym_wndMenu.SetFocus();
( R" V" d! h, @9 d6 h} L5 r+ m2 V* l' _3 \
------------------------------------------------------------------------------------------------------------, p U3 ?4 Z4 B5 K- T% X, J( f- i
*************************
0 n9 L3 X/ f4 Q# VWndField.h文件- q3 y$ s6 S6 H. ~5 a
*************************
; j; j" |3 q: J8 B7 B搜索:BOOL m_bReport;
( G6 s( ^2 [5 I- }* N, U0 e其后添加:, u5 P2 Y2 r6 ~# v( Q* R
CWndMenu m_wndMenu;2 N2 C3 }& n/ z$ r* H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 X4 w2 z4 Z) w( K9 j# @. o# X: o6 d
其后添加:- ~( {, Q, C, G Z4 s' ^% N3 K
virtual void OnRButtonUp(UINT nFlags, CPoint point);
" `+ m4 ?6 m5 {$ R- \+ G; \. T+ b
! E0 B4 z% Y1 p$ X2 [, x
|
|