|
|
源文件中_Interface文件夹下WndField.cpp文件
# g$ H) {: a0 x7 z" t+ ?' e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ [$ d; }& t$ @; j) j5 q. i
) n' x3 W, C) @! F1 ~9 x! jstruct sItem7 @( |6 ]+ I% S1 A" `
{
/ G# s4 J' s7 Q% m$ a8 N% S8 GDWORD dwId;0 a# h% N) G7 S# X. B% m
DWORD dwKind2;
/ F0 U: p- N a$ k kDWORD dwItemId;& w2 V' s, K& S P
BYTE nIndex;6 |$ Y! @4 h7 i+ s
sItem(){* F8 T6 C1 [6 x3 {+ E
dwId = dwKind2 = dwItemId = nIndex = 0;* B4 M2 A9 s6 j. j6 K1 u! j
}/ K( e. Y" k. _+ M) Y+ A
bool operator < (const sItem p2)
7 r9 x6 ]+ z4 P' G$ v0 C( J: r{
, z( d+ ]; M3 K# o n if (dwKind2 == p2.dwKind2)2 b$ V- @6 d9 h4 |
{3 d: @* d4 S) F" g
return dwItemId < p2.dwItemId;
1 [# i7 \3 e3 |3 F/ v0 |) J) K }else{+ s( H+ Y* F u, P. d3 y
return dwKind2 < p2.dwKind2;' n' A( U. U, d- o+ i. q
}+ f- @' p- l% \! e( a, S% o$ p
}- [; e& B6 v: C4 c# v( S
};& U% L' V8 Y- o3 i. l
class CInventorySort) x* |2 j4 H8 }
{' ^- z4 n. D8 U" I: K
public:0 ]2 M7 _) T) J0 n- ]% [; {
CInventorySort()* v. }% o: e& @. p( I# ?% c
{9 I# E: Z- T+ m; A
m_dwPos = 0;
( ^5 g; I4 H( L0 F* ]* K1 ?+ {}6 R: ~5 }4 n) ?0 \. |
~CInventorySort(){}, P+ X- [" I' ?+ `
private:( ~- l" Q! l X" x, k1 z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 n" l/ m5 F8 iDWORD m_dwPos;- F/ V# `: k: a5 g+ h
public:
( R6 S, C% k/ I# gvoid Add(BYTE nIndex)
^% ? g; b5 v8 l{
0 S; P4 }' z7 Q! g! b) K2 @1 ~ if (m_dwPos >= MAX_INVENTORY), b1 b5 M- g* |9 z0 {
{/ J/ U& i, w2 s- X
return;) C# H* R) m: X, m" ?5 n
}
" V; b9 Z" D4 C6 R' J m_Item[m_dwPos].nIndex = nIndex;% u, |% h0 T) r+ _; h
m_Item[m_dwPos].dwId = m_dwPos;5 }3 }4 G; Y2 M- }9 @) {0 }: r8 \" D
m_dwPos++;8 w! l2 |0 z' c6 w4 Q
}: r7 e$ F, s8 d0 u7 S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) A1 I7 ~7 s# j) X) {1 ^# ~0 L' o
{# g" H# Z5 I) v" S" `0 L% G
for (int i=0;i<MAX_INVENTORY;i++)' @, O6 c1 D( Q/ {
{
1 }( Q* v: Z: J6 R3 R" f& X' d if (m_Item.dwId == dwId)- g- b; L# |: E0 G) l7 g7 _
{
; n0 a) l- N0 U$ i+ S7 V: l return m_Item.nIndex;
3 Z. G" ?$ m" }: _+ V& B }
% i3 R7 l6 d" r! X% W }: I7 v6 I/ ?% J7 z2 I
return 255;$ p1 I/ P& q8 E2 f$ r7 W2 U$ ~ x
}3 l5 h! e% q5 B+ T1 G6 k+ f6 P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' \6 {7 [' M+ u: ~( u0 h
{
+ n6 I& P; Y l, B \3 R BYTE nTmp = 0;
+ z+ q: L% u& I bool bDest = false,bSrc = false;* W) y3 m9 F( \
for (int i=0;i<MAX_INVENTORY;i++)
) U# x4 [$ ?, B2 c$ R7 L7 r {
" |6 v; Y f' | if (dwSrcId == m_Item.dwId)
: O2 b6 k( P4 j1 o {3 B- r5 u8 O4 w3 [6 e. k& `/ j
//id相等 则 改变对应的dest和src3 b; l: b! r) V) k/ X
nTmp = m_Item.nIndex;0 g) Z, b1 P8 Q* c: v0 ~
m_Item.nIndex = dest;0 Q! e! ~, q1 g9 z
}# x( W7 h* k% |3 Z2 g
}: p4 t- _- u5 X6 z: f7 L$ N+ O9 n
//临时数据保存完毕,交换开始
' C8 Y- J$ j$ a' c for (int i=0;i<MAX_INVENTORY;i++)
! t% b4 z1 R9 a' J ^ {% ?. p z2 w/ \+ Y- F
if (dest == m_Item.nIndex). W8 X b& O! U$ q
{
' d5 i7 q' |- ^! J //id相等 则 改变对应的dest和src: ?3 u# H: ~3 [2 J0 J# ~
m_Item.nIndex = nTmp;
# f( `* C8 Q- Y }
& {. P- h4 m4 b7 U) ` }7 B: [2 s i! Q- j1 f
}
% v% x3 H8 O; A};& _& [- y5 L: |* q
-------------------------------------------------------------------------
$ b1 S( O; H* f$ n5 U# V依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 K$ I& ^* A: P! n3 {搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& Q( T2 W+ v# f0 m紧靠其上添加:% }7 \1 n' e" z( j( O& j; |8 s
if( pWndBase == &m_wndMenu )1 r$ v: R3 u" [* Q
{
* [; x7 W! m5 Y+ q# X, m switch( nID )% ?3 ]/ c. ~" Q" Z$ M
{! @6 m2 o: F3 E! \
case 2:, h8 m8 d2 f! N8 T. o$ |) R
{
: X% D' D# B' ^7 S //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 h# Q3 [+ `8 D7 e$ L if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& ?6 K: V# M* }3 p$ h2 r$ B
{
- `" i1 v- k3 B. u+ l break;
8 p; G1 h: k W: q }
- n" {2 b( p- [/ ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- w0 W( J8 U8 L1 V; S {/ |1 ]! O, G& w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& d' I/ B1 l, _. n, s
if( !pItemElem )" g% w- w7 n, X2 B j, K
continue;, B# G( e+ K$ b% L
if(pItemElem->GetExtra() > 0)
; z6 P, U# ]3 O! g$ b. y3 R# u continue;
* J4 p! E, C- | if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! @/ _: ^" D8 {8 G" N/ r& }
continue;5 H# H1 Z2 e, T
if( g_pPlayer->IsUsing( pItemElem ) )/ B* h! U! M5 Q) G/ e7 n/ U9 g
continue;' H% ]2 t# L' ^& k6 s. }; C
if( pItemElem->IsUndestructable() == TRUE )
$ k' D) j2 ], Y* z* O; c' O0 p {
; m2 S* O" b0 ~( E! o1 ~3 u2 M$ ` V g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 x' L! }0 A; P: h% `( G
continue;
1 P/ V' o3 _1 @7 u+ a K }. X( [# G) k( T
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 q+ ^, e; u0 _, }. o3 q }
2 r; S4 x3 B8 i g2 o' @ break;0 \( }4 F! o; L
}
2 i7 A: j, ]7 A- @; k9 ^* L case 1:
2 c4 E6 C0 n/ ^ {9 P) ]6 C7 A/ C8 C* o6 _
//整理背包
) W9 H# n; C, e; [/ \9 U! C8 H5 C9 Q //////////////////////////////////////////////////////////////////////////
# R) B! N4 Y/ j a0 l* f' u //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ P. g0 E. S4 ` //////////////////////////////////////////////////////////////////////////
8 \( E; z7 `3 v; A5 B //////////////////////////////////////////////////////////////////////////
! ^& c7 e$ m8 ^1 H. t& z' `) P CInventorySort* pInvSort = new CInventorySort;" o$ @# P0 Y U$ A1 P9 M2 S
vector <sItem> vItem;! g$ v5 H! r9 ?2 [9 E
vItem.resize(MAX_INVENTORY);//初始化大小
' W7 |- E5 r% V, G* @" | //////////////////////////////////////////////////////////////////////////3 p& s- u! ?- h) B8 q0 P
//填充数据
9 k; A) V" |" l for (int i=0;i<MAX_INVENTORY;i++)
4 d, U6 v$ g% t. x% P: t {
+ C+ P6 Z" t2 m9 X1 l/ k" } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% z) A# |# Q& g0 p) G if (!pItemElem)
* h3 S2 k7 d% L8 ?2 d {* z+ `& r O. r) W! i5 d( X4 r
vItem.dwKind2 = 0xffffffff;
" X3 P1 W* |- L& f+ E0 i+ w) T vItem.dwItemId = 0xffffffff;
& a( W6 }6 c& H9 {) y vItem.nIndex = i;1 K$ H) B8 z& G8 N" o
}else {
9 E9 p, {; K# V& N4 V ItemProp* pProp = pItemElem->GetProp();6 t+ [# ~2 n0 Q- [' [& a+ k# c
vItem.dwKind2 = pProp->dwItemKind2;$ `, k8 F) K% {& O7 b
vItem.dwItemId = pItemElem->m_dwItemId;# K2 K% ^2 c9 Q
vItem.nIndex = i;
+ b7 d+ B4 r$ q/ k1 u6 f8 L }
, d' C, V8 Q" }$ a2 i$ d3 X //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& t% J9 x' a0 C* ]
}1 K3 S6 h! X: d
//////////////////////////////////////////////////////////////////////////3 _9 a% ^1 O+ N& s
sort(vItem.begin(),vItem.end());//排序
) ~2 D/ J% l3 [" a( A1 @% U2 K //////////////////////////////////////////////////////////////////////////
: Q7 V; m4 {* X# C% U* Z; a% X- y2 X //交换
* x6 L% r7 m; z# s" I( L; j* R9 U for (size_t i=0;i<vItem.size();i++)8 x- x3 S+ S2 h7 b
{
( C6 G, x- t2 c& b! Y C //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 B$ f- b. Z9 b7 y pInvSort->Add(vItem.nIndex);
2 F) `* d$ k! r& {# }) }8 z: t) O3 S }
) M! _( n5 o; v% z! E* r BYTE nDestPos = 0;
9 e. B) Y' O2 {( O2 ^1 ~- b5 c for (int i=0;i<MAX_INVENTORY;i++)
3 q/ z4 G6 F9 i- m {
; p3 s4 T0 `" H+ s4 c5 k/ K2 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! ]5 S# N8 T7 F if (pItemElem)9 Z! X# S3 z. G9 p4 V% S5 _! G7 p' B$ M
{
" t1 R( n3 K* l* ]& D6 n& F8 v: g if (IsUsingItem(pItemElem)); V5 E6 p9 ~+ H8 S' {& a
{. y x5 s) Q9 g
//这个位置无法放) ^) F" Z5 Q$ P/ X' [$ ^
nDestPos++;2 B' U* d3 [" ?8 `8 u0 E0 T5 w- K
}- l6 u) h- T1 i+ @2 w5 i, v
}* l6 u4 v$ s, h; H# h
BYTE nSrc = pInvSort->GetItemSrc(i);! d: Z# P& B0 ?5 n5 m& {
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" u7 R7 k5 E) ]1 n! y% e$ S if (pItemElem)
! W. ^% Z/ M& C: c: O) D' R+ b n8 `4 C {
R: u) J4 r( \ if (IsUsingItem(pItemElem))
% ^' e [; b+ m5 a1 |! ~ {" r) _$ t! d$ f: h
//这个道具无法移动,跳过9 p. A9 W6 ^ e% k1 x
continue;- n1 `3 _9 Q2 a# P8 _+ V
}" \( [$ o; _ f
}else{
# D/ [8 i' [1 }1 M/ j( Q7 |: Q: c( ~ //空位置 不用动
1 A- T9 x/ W+ ?7 @, v3 s continue;1 w2 p2 n `/ H3 F# M2 \. o- i
}
, p( G" x- D, [6 X4 I /////////////////////////////////////////////////////////////////////////// [8 t/ U) T; k+ O3 W/ u3 |
//开始移动
0 `% S' a# u! G8 d if (nSrc == nDestPos)
# W( M$ q1 ]% E3 b8 ?! S5 I {
! m6 `7 h" j* r4 V; G9 c( a, z. ? //原地不动
8 N6 g: ~! \& q$ M3 H! @) Q2 u nDestPos++;3 ~" }% { [ M5 X# o, I
continue;# }2 l+ b7 W/ G. n' e2 q% M+ Y
}5 [1 m( F+ i7 G2 B! v
pInvSort->MoveItem(i,nDestPos);3 N( |! S& I, p9 d$ {
g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 L0 A" [# @& v# [. G; [" @4 o
Sleep(5);
' u6 a' P7 R% Z/ R+ J //Error("移动 - %d->%d",nSrc,nDestPos);
" g1 F) Q9 X/ m% Y6 C! o. M0 p nDestPos++;4 r' G' Y9 C {) t" l- I5 {% n
}
5 F, b- F% |& ]/ {# N6 |1 F0 Y, P //取第一个元素的信息
1 u3 e0 h2 S* ^ /*' A1 i7 z5 F+ N; M+ K
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) e. d8 l$ m: X
{. o, `5 o# W( X0 z/ F
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& {, |3 K" q: u1 c0 B
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. h5 @+ G5 T' G% R- ?5 V }
! D' O1 I7 P9 [: w7 ]# r */
: y* N3 |- c z x8 l& x: f( z //////////////////////////////////////////////////////////////////////////
+ u4 W) n3 c* e% F$ f break;
) B2 ?9 b) a! n4 Y }
5 X5 q' K& y) J9 ~" [7 Z. y( d, S } + R/ T" b4 f9 u
}
2 b* z- r1 e) F @4 h2 d: b0 hm_wndMenu.SetVisible(FALSE);
3 }: r! \, L4 Q( Y3 ?: c+ v. T' ^
--------------------------------------------------------------------------------------------------------0 b: T8 M6 O" Z3 M! I
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' g+ G9 N$ ^: e1 j5 J0 \{
1 M+ r, b" G# k- cBaseMouseCursor();3 P8 @+ W* i9 K1 j+ z, Z; x
}$ y6 Y3 G4 t& L% N' m
在其下添加:
* k# t. |# r) I2 y0 `. Y# dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, e6 W$ k6 b9 l" o! S" R{
% b: T, X9 v. ^/ }8 dm_wndMenu.DeleteAllMenu();/ I U! p1 ^) D( s9 u- b
m_wndMenu.CreateMenu(this);/ }5 Q* |7 \6 U9 f9 z v
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 v/ U- q! \8 d8 D% U9 y$ e
B! @6 a2 i' U% O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 c8 |. d# T4 Y) i" I8 F4 A
{) N1 Q* g( @% v& l* [5 T
//P以上级别才可以删除所有道具9 \ y) X0 i2 f# J& \) _
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, H: J4 d7 {9 l+ N( m
}8 f8 V1 X* H# `& J
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' d' R; z5 c: Z$ m( sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# _: J( L) [3 O0 O8 W. k2 `
m_wndMenu.SetFocus();) S1 Q. r1 ^& N9 v
}" R# |0 S# S, F1 R/ e& a6 W
------------------------------------------------------------------------------------------------------------1 j' d! p' Z& f9 K$ J
*************************7 G8 K* D6 y2 }9 b6 x- m, q9 S
WndField.h文件3 H% I( ?% x4 Q2 }
*************************1 Q M- @' j% ]: N9 o
搜索:BOOL m_bReport;
3 a" |3 W! {' t, e7 v0 Q3 P) }其后添加:
& |" |4 |" [! |4 l* P# `CWndMenu m_wndMenu;
( j( J% r% h" Y, h8 D% K) z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% W$ Z4 |% L$ R* d其后添加:
3 u K) f* ^5 H0 j5 g& B+ ]virtual void OnRButtonUp(UINT nFlags, CPoint point);& {# Y s1 _! X/ \$ r6 B! u- s$ K' [
6 m1 s. w2 R' L" D% p+ t: L. c1 a
|
|