|
|
源文件中_Interface文件夹下WndField.cpp文件+ x& i: J. q) v, Q u' y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ N0 z) b. O% w# O- }
& Q) n& t' B. L- \ R! Z7 Astruct sItem
+ D* \5 R1 D, @{
/ Y1 e; d- h4 o6 T: g F6 q. [; zDWORD dwId;$ \( E; }6 ]0 \: n
DWORD dwKind2;. w" M* Z: ?* a! X
DWORD dwItemId;
& x6 ]- |1 i9 i F5 QBYTE nIndex;
$ k9 W) [' i! F- ?+ YsItem(){& l% k% u0 h( Q! q6 r
dwId = dwKind2 = dwItemId = nIndex = 0;% y1 f+ Q" A/ j
}
. t n4 r. M0 k' @ O8 S$ e Bbool operator < (const sItem p2)
) }8 k- _ B2 m: M- p6 M0 }{
% V0 A4 w) U4 h3 v# A if (dwKind2 == p2.dwKind2)
9 B0 i) d5 ?5 Z {. R- _' ~2 R$ d, o; H! d" F
return dwItemId < p2.dwItemId;
- m/ N6 ~. W, x; L0 }# b }else{. {+ C+ f9 z0 U
return dwKind2 < p2.dwKind2;
l5 X% l+ L, X- x }
) J& |, C* N7 J}' l; K9 V* X" ]: Z( A- I4 B/ l
};
* T% N, `# T ~" K# |8 v! [- @: h* kclass CInventorySort
$ Y6 ]5 F( z- m& U$ ^2 E{! Y$ I3 G9 [7 f3 X& |- s
public:/ L( f8 S& [* U2 P- k9 H& V, T8 R
CInventorySort()
/ a; Y: X3 @- A6 z8 l3 E/ Q @' x{
4 h* m f" S) A m_dwPos = 0;
) g3 S$ o$ U: _: [+ u' G}
0 j% \9 c+ M- O# X& m. R~CInventorySort(){}
0 h! b" L9 H4 F& Xprivate:( t0 I0 M* |5 }+ d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. E5 ?6 O3 u. t2 j$ c+ wDWORD m_dwPos;
4 ]) q4 b7 ]; l3 lpublic:
% k0 s9 P: K; V* h) g D2 \" r8 ]void Add(BYTE nIndex)- b) J# `1 [1 x: ~3 @4 I1 }
{, U2 _* q* v/ H5 w/ s
if (m_dwPos >= MAX_INVENTORY)( [2 v: Y2 E: ]1 {) a5 O8 K: @
{
5 r) Y& s( D. n. e& E! V return;
# @- E, r' k$ y" c. m: o+ q }0 e' l6 Z" ~- E9 c2 D* I+ ~0 |
m_Item[m_dwPos].nIndex = nIndex;
6 z' c& A; S* ~$ q m_Item[m_dwPos].dwId = m_dwPos;- E& M W9 m1 S
m_dwPos++;1 a- }. d8 \5 E! E a6 ~
}
! L0 y+ c, R7 ]9 Y5 C) hBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% f5 _3 V* H1 {8 S1 V6 p
{
, m( M( P! C3 Y. J1 X for (int i=0;i<MAX_INVENTORY;i++)
]( |1 a& u2 p) z9 R, ` {
. |5 A. N7 i( \) k if (m_Item.dwId == dwId)3 C# Y* S! F, f( g- v% i: [) B; M
{
G( [+ [& a0 l6 v2 s return m_Item.nIndex;
* ?2 K4 E6 Q6 J9 f; u0 F: ~0 X }) H. d7 e$ p5 q' r: Z
}: A% X M) [/ r0 {5 U! p! X& C
return 255;
% g. u) A) ~6 G) M}+ F8 O2 S+ p5 W ?/ b* u( F5 u1 \/ D
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 p6 \: G4 T7 _' b{
' a' ~- r2 v" Z6 i BYTE nTmp = 0;% v1 L H3 D1 o% o! f8 B2 B
bool bDest = false,bSrc = false;
& Y, {5 t4 {7 j7 S4 Y! t/ y/ q- ^ for (int i=0;i<MAX_INVENTORY;i++)* f. v: _0 B7 [" r$ ^$ E$ E
{
6 h$ j0 I" ^: W if (dwSrcId == m_Item.dwId)/ I( @( c& o5 \- d( ?7 U( z) V
{
) L6 A6 x( ], I8 ~- {: V5 I //id相等 则 改变对应的dest和src T$ s! i" D4 `. [. c
nTmp = m_Item.nIndex;; |4 w. B9 h& T4 I- D) U. T
m_Item.nIndex = dest;
2 |- Q5 @) I7 D0 N, I }
& E- B/ v2 M% D/ ^+ z$ Q4 ?3 T# B* J- h }5 ~- g" ~& C% r
//临时数据保存完毕,交换开始
1 s" ?# V; X- W, H; i r. F7 g for (int i=0;i<MAX_INVENTORY;i++)1 g& S2 i; _# d5 L, R+ W8 b
{
! X: h6 \- g1 L- D- i' d if (dest == m_Item.nIndex)) z* d9 X1 \1 L6 a K8 Q& i
{
) B0 ]# s0 M, s$ B, [ //id相等 则 改变对应的dest和src% ?8 h% g% Z( @: p8 Z
m_Item.nIndex = nTmp;+ e) [2 ]- v* n: C, ?+ C! {
}6 T) e6 P; n/ Z" N
}
. M( f; N* j& [4 V}
7 F+ g9 T4 ]8 j% v# X4 J6 S};3 c" t) I) _. ^9 k9 S
-------------------------------------------------------------------------
2 ]) V& \8 \$ |3 M# ~依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 K; f1 t9 r5 w) C4 {5 J
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; E6 d+ N7 L- ]+ E, n
紧靠其上添加:
7 P) T8 e$ k4 L( X: k6 h' ?if( pWndBase == &m_wndMenu )* q+ s- f1 l- y; e, g
{- N& l% ^% q4 X6 h" P/ C! x( q, {' v" \
switch( nID )
9 G" @6 {8 y# U {7 t8 Y# B( f/ ?7 }
case 2:
# O2 j/ h1 Y' O {
, X" V. v& w' s0 K/ ?/ O //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 t# ~/ H( R/ X- K) Y) a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% u$ V& Q4 S7 \3 u
{
4 k! n8 j t1 ?; ^9 | break;- E( Y% N" R L
}; r' Z: M' W/ \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* h3 G$ L$ _9 Z; {) n1 m/ l% }0 `
{
$ H& |) m" K/ O' D* i& X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- ~3 f* `/ b9 p4 R1 H
if( !pItemElem )
; H: b- w# ~" v$ v; `1 I. ~5 _0 h continue;1 F- E! M' s b
if(pItemElem->GetExtra() > 0)
5 `3 r' {9 p2 U( q continue;- q1 X ?3 t; n. E) v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % C9 v* N3 \% G
continue;
9 |/ k: }* b6 a8 |2 ?3 o if( g_pPlayer->IsUsing( pItemElem ) )
' |/ G& {4 ?2 I, z' f1 t1 l, X continue;
3 a' E- B% {) q8 X4 f if( pItemElem->IsUndestructable() == TRUE )
9 ^2 b. v1 Z/ o/ L* q# c {
, [2 X; f. T: A( C! T) q p3 { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* [" p& c/ k1 a6 x2 m# z
continue;+ d0 N. s y# |' @. f
}
# S5 p" o9 Y' \( K. [& h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% I3 k1 [$ C2 U3 D9 P0 Q }
: J" U4 \: Q; `( b P6 Z+ f$ k break;
6 @3 X, o0 u6 E6 n1 d# @ }
8 t( S& ^( u2 y+ b, d case 1:
* G' w+ u* ~, {. B% h- r% n3 { {
8 u0 [) X" H' w# N7 b //整理背包- c0 m g' b! K! @8 u6 g* P' p
//////////////////////////////////////////////////////////////////////////8 {& n+ x1 o7 k) i8 ~/ @" H
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 R4 E6 B7 @+ e) u, `2 G( W* b
//////////////////////////////////////////////////////////////////////////9 @, }' @& f/ |8 r5 ~% m4 O$ `
//////////////////////////////////////////////////////////////////////////4 S a; A8 x/ Q6 t$ t7 ]
CInventorySort* pInvSort = new CInventorySort;
C @, c6 K; E9 U. { vector <sItem> vItem;
, h$ P! z# X% h! C& G8 y vItem.resize(MAX_INVENTORY);//初始化大小
9 i2 s7 c1 z; ~# k //////////////////////////////////////////////////////////////////////////
% s) D9 h6 d1 z/ F //填充数据" L( Q* b: F! L& q" ]2 c, c, s
for (int i=0;i<MAX_INVENTORY;i++)
) q8 A* G+ C0 A: H# g2 V) x {
# x0 \; F! t# Z& Z: F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, W( J8 O: d& h( s
if (!pItemElem)
# N6 e9 d1 A+ ?% b {$ r5 B7 A v/ z( |& A3 p, }
vItem.dwKind2 = 0xffffffff;; ?+ m5 L5 m" P/ P% G
vItem.dwItemId = 0xffffffff;
3 Z6 J. {4 f- d; f vItem.nIndex = i;! {& l ~" Q; @( O; J
}else {
4 y u$ m+ j) J. m ItemProp* pProp = pItemElem->GetProp();6 R1 w- s- P9 Z) x( v8 r* o2 b& t; H
vItem.dwKind2 = pProp->dwItemKind2;
- J1 E7 g4 [: ` vItem.dwItemId = pItemElem->m_dwItemId;
' N& x/ I* C# D# f( U vItem.nIndex = i;. G+ {% z5 s% ^ r
}
4 e c6 f7 |( P //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! G; N ?2 W/ R6 a* J: E, p4 g. s }% F! F: j4 b& [- m3 D, i+ n
/////////////////////////////////////////////////////////////////////////// ]7 t2 X0 W/ K a% U `
sort(vItem.begin(),vItem.end());//排序
& D/ G( ]' D( Z! j, j3 I //////////////////////////////////////////////////////////////////////////
8 Z! r! m9 O, J //交换
% Z0 J) c- g+ X for (size_t i=0;i<vItem.size();i++)
6 b, C2 s# Q& y! Q/ h {: l5 Q+ k' i9 d- l1 v9 k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 ~9 q4 j, p# V
pInvSort->Add(vItem.nIndex);$ Z3 I8 o" j* p- g9 [
}
" N) X4 X: W1 Y6 O8 |8 k% d1 n( H9 U BYTE nDestPos = 0;
+ K& m& d" W1 J n9 ^/ ^& p) z$ E for (int i=0;i<MAX_INVENTORY;i++)
4 H' Q9 V+ n# Y. l {- F" k' v0 S7 O* d; [9 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 s1 t# L8 W0 ^+ S5 T* ]0 W q* ^, I
if (pItemElem)
! v9 U) ^7 _8 r# [7 B {7 D8 ]9 J% y9 e' @) \# j9 D
if (IsUsingItem(pItemElem))
. ~0 ]& E4 O5 [! S {
. L# s* W N6 q; j4 X4 h5 j //这个位置无法放
% i7 E: g3 Y! q# x/ x+ D6 B e nDestPos++;
9 f3 M2 S2 {" ~8 ^* G }
: _$ L8 Y. [4 Y1 U0 g7 ~ }9 t. h) A' [7 A9 Q2 \5 Y. Q
BYTE nSrc = pInvSort->GetItemSrc(i);( N- R% e7 F) D9 q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. F; e! D) {3 f) `& n5 Q
if (pItemElem)' Y' E+ Q2 g" D' P# `" i& b" Z
{* F9 `2 ?0 k6 L: F k0 z
if (IsUsingItem(pItemElem))
. b- g' v: T* g1 b: `- S( X {
4 [4 ^4 e, m: i g7 {2 ]' a //这个道具无法移动,跳过
; j3 M" o3 e! K `* E' g# |+ h continue;
8 H7 c$ {3 g* | }
+ V, i1 a7 j1 o }else{
2 P! n$ V0 L" H' I //空位置 不用动9 Y+ ^" `- T+ _2 W2 l' b" i
continue;
/ D" c6 ~1 M' t }
2 ?5 u0 u7 f& q0 z0 F8 d j) \ //////////////////////////////////////////////////////////////////////////
, S' W+ p" `8 s% l/ n. B //开始移动
3 x" A5 E3 {" Q" { if (nSrc == nDestPos)
9 M) p* |( y; K! ^4 Y {
" K" A4 d( f4 @" m. ~2 M //原地不动
# a0 u3 n" [- i+ I; ^- r nDestPos++;
8 `+ g$ x5 r. X% ?& S9 \: R continue;
7 r# G" V3 R! N/ Y }
* ?) }, i$ l9 v4 S- O% r pInvSort->MoveItem(i,nDestPos);! L; X- k5 M) l, g1 b9 l1 q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- w, f* [6 w3 m Sleep(5);3 D3 e2 p, |, E3 L: \
//Error("移动 - %d->%d",nSrc,nDestPos);
, @4 ^8 c% x0 ~( u nDestPos++;: n6 e/ ]) L* p2 F
}
9 ]! M/ S& ]1 v# U //取第一个元素的信息
4 ?7 S' E5 ?& s /*4 N4 t0 x% t2 r5 z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- s8 K S9 j& R; H `9 `
{
0 M0 e: o5 I1 z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 m2 x' N5 j+ V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 ~) r2 W7 {. A( \
}1 S8 ^% _4 L# |4 q) w
*/+ W5 z- D5 \7 n( W
//////////////////////////////////////////////////////////////////////////6 m r) X0 b' C$ Q/ d$ V. t
break;
1 ? `" g$ ]# ?, z4 g5 q }6 t+ x, I6 X9 F7 K7 V
}
; G- ]8 ?* o9 U1 ]}3 O" }1 U* X, U, I( O% f3 B+ V7 z
m_wndMenu.SetVisible(FALSE);
9 e, Q+ `" X7 y! L0 ~$ v# L' D7 w, D. B, {
--------------------------------------------------------------------------------------------------------
0 K; O: p0 {/ R1 B搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; i, h9 A7 L# N' f0 U{
6 g p. T" S% `4 ^BaseMouseCursor();( x( l3 p; Z$ g, t9 _
}
' J4 U- F! d" h6 k: }在其下添加:
2 T+ V: X+ i9 Q1 ?9 V; `* Q" Cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ N7 H2 |; J0 k' g/ o. X
{
. |% ]: \' l* _% u0 b. G: mm_wndMenu.DeleteAllMenu();4 q, C& {$ S5 v E5 D- [: M- D$ s7 k
m_wndMenu.CreateMenu(this);
/ Z4 y5 x3 `' t* G$ P) i; w; a. zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 |$ i6 Y8 p* T0 a5 w8 Q- f* a& D% A; U+ A& _& t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" F+ Z0 m% X! ` ]8 T a+ F2 N{
4 w* H% w1 N; W* G //P以上级别才可以删除所有道具
8 L0 H- o" E# o( }8 _1 ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 f" z3 k8 K9 G A}
& [- y0 Z) P( |$ t; gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; n. C3 o0 T3 G8 A/ Q- I3 s; c% l
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, T4 N2 v- m: t0 D1 j1 A0 k# p
m_wndMenu.SetFocus();% g6 @! b# |( ^' z1 ^' z' c
}, R' J! u/ p" j; ?6 V# l, Y4 G! A
------------------------------------------------------------------------------------------------------------4 U6 T- k: Q2 G7 D1 K6 m$ F: l
*************************
1 H5 G& E6 i+ }6 H* wWndField.h文件
* S7 c4 `9 b1 M. r! S8 H. {. u9 _*************************' N; W5 r1 J6 D3 h: M! Y
搜索:BOOL m_bReport;8 R l9 Z. G& C
其后添加:. q" L9 X* u. o6 e+ O5 S# s" k( J
CWndMenu m_wndMenu;
' U+ s$ d/ z8 W- X7 [& B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 M$ i( G3 P. y$ k其后添加:; J: Q/ {! L, R% T
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, E: D+ u' J* `
4 P$ C- h; `3 I; v: q- c% o5 \6 }7 S+ v( Z
|
|