|
|
源文件中_Interface文件夹下WndField.cpp文件
. |4 d, s& b! n$ U. Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): _& X, _; y, L" v/ B9 O: \2 a
. r* i- T: ~+ g9 A6 S; b" `4 g0 K8 Estruct sItem
& e2 E! l4 L$ C5 N6 b: x) u{
2 P: V" }% l8 q) a& M1 V2 G6 q; S8 i# RDWORD dwId;$ [: {/ u5 `' [! u! N. s
DWORD dwKind2;+ ~* T' m6 T7 } |3 e- u+ y6 }
DWORD dwItemId;
) M; f/ p4 Y; J, j' g5 p8 M+ c) H- fBYTE nIndex;
$ ?1 o8 p3 o- dsItem(){
$ ?$ X M; Y) I" B4 P) S; x! ^6 ^ dwId = dwKind2 = dwItemId = nIndex = 0;0 J% e5 l1 O/ C$ F& |
}
: F8 y, ^) @ ~( ubool operator < (const sItem p2)' B8 @4 H; }8 y) x+ n( g+ l/ C
{" D; b4 Z! d! m' j
if (dwKind2 == p2.dwKind2)2 c9 H5 I) R/ A6 X0 _
{) L" L% u# b5 M5 e o; B
return dwItemId < p2.dwItemId;% t9 i6 Q+ P( L, w. O1 K _
}else{
! c0 d6 m* \/ }8 E return dwKind2 < p2.dwKind2;2 |: p* h6 s8 a+ i4 V
}1 O# G: c9 U: p! \; b b
}
T J! L& t- r( O4 J};+ y) T: b+ e' H6 F3 E
class CInventorySort
A5 } T& Y) h2 O{
+ y( D9 b$ P" w" hpublic:
3 v8 O" Y4 v J x0 B0 K, rCInventorySort()
7 G0 Q! `* `; P' i& x( w{7 {; a3 y, z7 y0 x5 [+ Z
m_dwPos = 0;
+ B/ `5 c. O ?! B} w \- j' P6 |7 U7 f' t0 o
~CInventorySort(){}% a0 O) F! g3 l: E, e$ D1 v
private:
8 y) _' }3 F9 J8 csItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# S! `2 y( h( w/ L7 `9 M8 q; x
DWORD m_dwPos;# X7 y/ j, I/ A, A
public:+ j. |! ]5 Q9 e8 E8 {$ B `
void Add(BYTE nIndex), B# G* O1 K! e d' }* H3 o5 s
{
) L f& N8 B, B' U, W if (m_dwPos >= MAX_INVENTORY)& @2 R4 V" N o+ ]
{
' G+ ?( j& }+ K# x return;$ L# e. ~2 T4 ^3 c/ r4 |; @" ~
}1 {0 Z( F6 w' V. }9 C3 ]+ v# Q
m_Item[m_dwPos].nIndex = nIndex;
6 r. Y7 \7 b! z' e1 v5 q3 P' u( d' V m_Item[m_dwPos].dwId = m_dwPos;
/ |% r9 b) W" b" f* u5 b m_dwPos++;
4 d6 n4 W2 x! d8 d: C4 B0 k}
" i2 l, E" Y9 S2 T1 B$ r2 mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 E6 t5 L0 K+ ^/ ~
{
3 R7 B. \, T1 | for (int i=0;i<MAX_INVENTORY;i++)
r, q8 G7 j' l q( q' c {" V# N; e0 `7 e+ @1 o
if (m_Item.dwId == dwId)
2 R' k8 P! ^' ^: R {
$ w. Q( l* \. h6 g% C& h M return m_Item.nIndex;
4 T# \4 e2 V$ D* C) N1 K. g1 V0 s }& k! v4 c& O8 X: n& i
}% W9 \- Y9 u8 o
return 255;: Q6 {: A' k8 {& f7 H! ^7 v
}
. z2 F. K- Z! D! ^0 \void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 p) R7 n- S; o# l+ R9 f
{4 Q+ D# b- P+ d; L" H
BYTE nTmp = 0;* y2 f7 `: |2 Q' T1 Z
bool bDest = false,bSrc = false;
$ N# @. v* h0 S5 W* [1 G- r for (int i=0;i<MAX_INVENTORY;i++)/ ]" P. {, W. e& @ J7 z( S# C
{
) r9 ^8 ~$ n E* p* @ if (dwSrcId == m_Item.dwId)8 p4 X0 o+ | H
{& R# J' K: [4 M0 {3 x3 g- b
//id相等 则 改变对应的dest和src7 Z0 R2 f/ \, J7 c! B' |9 ]1 ^& G
nTmp = m_Item.nIndex;
7 g3 h7 O/ l/ d. H' S8 Q m_Item.nIndex = dest;* Q) d7 A/ E6 z' I; F8 r
}
7 \3 l3 x% T. p' q }, a* @2 X9 V/ V. o3 i$ B4 q
//临时数据保存完毕,交换开始
; ]% m4 ]( |4 ?" _0 B for (int i=0;i<MAX_INVENTORY;i++); T7 ^, m+ m5 Q
{; b; @: Z. ?# D0 s) c% d" G9 m
if (dest == m_Item.nIndex)
$ e' q2 H' D7 | {
" M, P/ `! D$ O$ W9 X //id相等 则 改变对应的dest和src
: }# p3 J* u% X0 s5 j$ G m_Item.nIndex = nTmp;* ^+ Q ]7 E* x* i# I
}
! Q/ x* Z% V% z6 }% g* f& f p1 N }. [" g4 `; k. ~, q4 b
}
0 X0 k0 v( t: s h4 D+ v/ U}; e( k, P; p+ S* v& m
-------------------------------------------------------------------------
( I) {2 k3 ~' E5 `' d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 c8 l# X% W4 I* g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- p( b" V9 c3 O& l紧靠其上添加:
7 z# T U" R! s9 Oif( pWndBase == &m_wndMenu )* T3 I( P' r; J8 m* s" ^, m3 f3 Y
{
. y `$ s/ ?# r2 L switch( nID ); y& t7 z7 L5 K; r/ d
{
. `; ^: ^4 l) d# n1 Z \0 Y, P case 2:
" C8 o& X4 K0 p c7 W( G0 v {
& Q) h+ d+ h6 r* V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ Y) `! ?' S: Y6 }# D# [( X) W/ @
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 m" ~- ]8 j% ], R3 C4 v
{3 q, Q. S& m& q
break;
2 M9 `# l. K% ] }' R' z: x! H2 S% i. }
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 r: T4 T/ Z) _; s
{. N! ]5 O9 K8 y5 d7 P# S& @5 u5 f1 ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' I5 s1 S7 @0 F
if( !pItemElem )$ _, q% p5 S' v4 ~ h& m
continue;3 M& w+ T, @3 p2 M* U" h
if(pItemElem->GetExtra() > 0)* }" l1 R2 a0 d" c( i
continue;
& l4 I2 [: S* D- N, V6 k# x: `% }" h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 ?; b0 P, n$ ` B# i& | continue;2 ^% A) c3 z! B# ]& Z' T
if( g_pPlayer->IsUsing( pItemElem ) )! C. O3 c+ u# [( L
continue;
, H) V# \: T' ` {. Y9 W! `' ` if( pItemElem->IsUndestructable() == TRUE )8 G1 G$ e' B! ?, b
{
3 a" E# m0 [% b, H1 X# C" L5 m5 C g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! F6 H& r7 N5 P6 e7 Z O: P. H, O: m
continue;
" g7 l* M- e' \1 d0 @0 v% q }
: n0 n4 c( y B- _' C$ \& A S5 p g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. s: b7 Q: d6 N! ^( i( O, D; x }
6 d+ ^. _2 p( A0 h! |4 `' U6 b break;
5 l5 F' f% C0 r# C7 ^" P2 ?% i# | }$ ~0 i& f7 n' U+ D; A
case 1:6 ^( U4 f0 u4 J K+ S5 L+ O! l! _# s
{
7 t H% T% |" |% o //整理背包
/ o1 X: k2 w: |/ l //////////////////////////////////////////////////////////////////////////
( Q% R! w/ N. a' w, y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. v2 C/ L! D4 B0 d5 G
//////////////////////////////////////////////////////////////////////////
. w5 @; E2 ]: z+ J- l8 G) n& o- i //////////////////////////////////////////////////////////////////////////
2 |4 Z4 z( g( D5 { CInventorySort* pInvSort = new CInventorySort;7 C) P+ `8 `6 K) e. j
vector <sItem> vItem;) o% b8 m0 ^, C7 U' z
vItem.resize(MAX_INVENTORY);//初始化大小
# `* |4 {: z" }% Z# {0 C' w //////////////////////////////////////////////////////////////////////////
- F; `! p7 l% ^+ E0 U0 x7 b' z$ Q //填充数据7 \) b! k8 p+ ?6 ^ K' `
for (int i=0;i<MAX_INVENTORY;i++)( W; U" W9 O/ J& S6 H
{
) Y; Y1 t- S( Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 z; g3 ?' t2 C8 u/ M; _! E+ o) M
if (!pItemElem)
* ^' K$ p. Z, L+ G( Q, T {/ D* q8 m: G* ~' V
vItem.dwKind2 = 0xffffffff;
$ @1 \, H: E# Q) d' H vItem.dwItemId = 0xffffffff;6 l6 [3 o0 g2 j J& G9 u4 k
vItem.nIndex = i;% a6 h P" e' G& g3 v2 |% D
}else {, K" C9 e2 j% d* r* p8 i- |' r
ItemProp* pProp = pItemElem->GetProp();3 z$ r- {8 B6 @! G
vItem.dwKind2 = pProp->dwItemKind2;
6 A) q1 N; X4 Q9 v. @/ B vItem.dwItemId = pItemElem->m_dwItemId;
* D7 I* T" R) i, A" Y4 x2 a vItem.nIndex = i;
3 u. T& a+ c5 | z9 y }6 C0 Q- t: E7 p0 h0 k
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. C. V. l( q0 ^1 X$ A$ ?6 y) j: S
}: @+ A3 B9 U4 Q' W; a
//////////////////////////////////////////////////////////////////////////, k+ f# |1 @% |7 L& w
sort(vItem.begin(),vItem.end());//排序6 t, u& z5 x. e0 s* E
//////////////////////////////////////////////////////////////////////////9 k$ ~6 F& v! y7 w
//交换
# Z/ d! Q( t7 l9 N9 K for (size_t i=0;i<vItem.size();i++), t9 t- k: O8 h! V: w# s: C
{- R2 Z& i5 G# a
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- u, J; d2 D0 f; q4 f; l. L
pInvSort->Add(vItem.nIndex);
: L! _2 k7 K0 Y9 y4 x }2 y" h% m( e9 [+ q0 ?: m4 _8 p. D6 r
BYTE nDestPos = 0;
/ {1 R% f2 d" [ d4 X for (int i=0;i<MAX_INVENTORY;i++), |' M7 q" c* q* X4 W
{# [4 a3 x+ L6 Y1 h5 x' p# j% W$ a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 B8 l4 h! G& D4 }: V/ [7 b if (pItemElem)! b# v/ ^3 J! w1 @; B
{
- J8 F+ A% s" \+ `: e: |/ O if (IsUsingItem(pItemElem))( F1 z: i6 K1 B# }# Z0 X2 t. M; m
{
8 _' \+ b( U7 d- _ //这个位置无法放
2 G' s K8 K$ H# J nDestPos++;
v: o& ]8 ^& O0 q. O$ H }* [( R/ ~0 m5 M) B: U
}
. B+ |, E- Z% s6 f2 L% O BYTE nSrc = pInvSort->GetItemSrc(i);- `- |/ A6 E" a
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 d g5 k+ R2 W! q4 m4 l, Q if (pItemElem)
2 {, n1 n& z {3 t6 | {
2 b( k1 {, l2 E2 z) A$ n if (IsUsingItem(pItemElem))$ w6 B. h& @8 e( B- r2 a" z* t
{. F6 U d# j6 s; m
//这个道具无法移动,跳过
% t6 h4 \) u$ q& C X continue;
! O- Z& R1 J$ d g) E0 N }' p; Y) b9 v* K6 t0 @: ] `( W
}else{) t& }* w+ ~+ E1 ~
//空位置 不用动
6 ]$ E& K, I7 T% ~: h: D% C5 ~7 b continue;& ?, P/ d5 I( ]* \0 A4 i
}4 P p% D1 ~! N; |) {- s
//////////////////////////////////////////////////////////////////////////) g+ A; ~9 Q! A/ t3 g* K) g
//开始移动
' \( B7 v/ {2 B, E if (nSrc == nDestPos)
6 y7 ? y! ^4 R1 F) Y t) r: `# V {
2 T; s [, m1 P8 e! U //原地不动! [% `/ N- h& m' t
nDestPos++;& d" v% ^/ g% ?
continue;" k4 M" O* z6 h. N8 ]- U8 L5 v' G
}
+ Q: x$ R S4 C/ v+ S- u7 A pInvSort->MoveItem(i,nDestPos);
% j1 V- }5 j! r; q) |3 g5 e g_DPlay.SendMoveItem(0,nSrc,nDestPos); ]3 V; i1 O# J
Sleep(5);5 C' E8 e0 d2 {% X5 m
//Error("移动 - %d->%d",nSrc,nDestPos);/ J3 G5 A% n! Z! w+ x
nDestPos++;
/ h0 X) m# v* v }
( y) ?( N7 y! G- P //取第一个元素的信息6 C2 R1 R' B6 _. v% K5 Y
/*
- U& _3 Q! }% o- M2 a if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% y$ E" k1 L: B0 I- h8 P {
v5 n% f5 X! E6 }3 M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% _' A( F0 y; j g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: A5 t+ Z6 H1 p/ n' Y) G. q }8 y6 L2 j& z- F, F9 r' c: u; y* z% p
*/9 b+ A' D5 {% G# W! I, x' P
//////////////////////////////////////////////////////////////////////////4 p- Q4 t1 S3 n: Z
break;
2 e5 O( h2 Z8 v4 y* j, i }9 p# P5 H7 l' i3 \0 [
} . n3 ^6 {6 v) i- u! Q4 o- _4 z
}
* q6 C, [8 F; W( O4 Im_wndMenu.SetVisible(FALSE);
) I# s! _ S* ^) U! h: ^# }
& i8 g' C1 l" Q--------------------------------------------------------------------------------------------------------
! A0 a% m+ x, U- I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 y7 X: |7 m3 ]{6 D7 ~2 u3 ?3 d$ Y+ C) Y
BaseMouseCursor();
$ B% y7 P" Z* Q9 B! _}
* I+ O5 a% P2 ~8 S) F; j" d在其下添加:% S7 ?8 L. y8 @4 o) Y" _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) J) V8 z+ v7 C5 h8 M& p7 F{3 s$ g: U% i$ L7 a
m_wndMenu.DeleteAllMenu();
7 `. k4 }0 Y' A. |/ S5 Y* H1 A* B$ G$ zm_wndMenu.CreateMenu(this);
- c# l: k% n& vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 I% |/ p Y' p) j* s7 P. Z
: a v+ p+ L9 O& ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ N' f! j1 c; ^2 I' J
{
, b, G' M& r$ U" |$ K //P以上级别才可以删除所有道具
s2 ]5 _ H5 Q/ D( V2 m m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 J% C; o0 l/ X. o
}& H& P8 A7 u+ k ~- Y5 H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* G) f" @# h$ N7 i0 C# a& gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& s& j# A4 z: X, M: D& @2 h5 }m_wndMenu.SetFocus();
' C: E: R# C3 H8 J/ S# O}$ @- k: ^3 ^2 X8 k
------------------------------------------------------------------------------------------------------------
$ v/ C2 L. }4 [7 C9 ^. s*************************
' m3 `$ ~4 k0 Z) Z/ U! v' VWndField.h文件
' V% ? r; y$ H" T9 V: x0 g" H*************************% H9 T. i5 v) _7 M/ _. j
搜索:BOOL m_bReport;+ Z6 F5 }% H! I t9 L! W$ _! [
其后添加:; h) S$ Z& j2 d% D! T1 b
CWndMenu m_wndMenu;1 c# L) C9 k. i
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% T9 o, U9 c& ^0 A1 ~; s其后添加:
) d" S. q3 J; e, [, @virtual void OnRButtonUp(UINT nFlags, CPoint point);8 c6 b' t$ F6 U1 m. f
* l6 e' c/ o! ^9 v1 b
7 T5 _+ S" ]$ h) v+ ^- z- B
|
|