|
|
源文件中_Interface文件夹下WndField.cpp文件* W" p4 Q0 P" \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 M; `+ t6 ~4 G/ `$ B
6 c- B. n8 w9 o' Q+ o0 i/ Kstruct sItem
1 `: J8 D) g( B{
+ h, @3 y/ C0 C+ Z0 t, e, XDWORD dwId; f/ ]6 H4 V% M. |( X( W- r, p
DWORD dwKind2;0 a( p! n- `4 D: }7 V1 d
DWORD dwItemId;
; g' T8 I. v3 c8 L' x0 a& ^BYTE nIndex;) i5 [- G* Q: G6 Q. ]
sItem(){
: d; c- P6 z* d( m, P6 ]$ E: a dwId = dwKind2 = dwItemId = nIndex = 0;
4 K8 K0 h% G+ \1 { U' \, i5 ? X}6 T+ _1 N& C4 C/ c7 Z6 u
bool operator < (const sItem p2)
. i1 W2 i8 J" {5 R5 }, E{
) H J% `. J. B9 a \ if (dwKind2 == p2.dwKind2)
% l1 _" | x" E& f' I& l {
D" p7 w5 d8 _; R! V return dwItemId < p2.dwItemId;& w2 U6 l. }/ L3 Q: u: i/ u
}else{7 c* o+ m5 J, L% u! p
return dwKind2 < p2.dwKind2;" a9 C/ \8 q4 p7 n/ a# k$ ~% I8 y
}& T7 x# c- A' P: w
}0 U: ^$ z7 O+ O, D1 E
};
m( @* H8 E1 S2 Q3 V( f$ G! Fclass CInventorySort
2 \, `" |6 A9 d{/ z8 l, x: S; V) q
public:
: A6 }. G/ v' }$ k3 h: @1 ]# UCInventorySort()
! n6 Q7 s2 R* r' l: U% ]{" D1 u ?9 r T$ Y
m_dwPos = 0;
+ ~% L k! Z* L) s}
& k/ S5 E7 J3 W, z0 z1 [' _~CInventorySort(){}
1 Y' v' U) S: l' [private:" x3 }+ f+ x" S9 B3 Y' a) Z+ G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 v; L$ |: u: ~ ?8 F; |& ? ^DWORD m_dwPos;
3 S5 E8 \! f# a Xpublic:! Q& p @! u- O: }' H; w# H
void Add(BYTE nIndex)+ b0 Z4 C& P+ w; p- ?
{7 H2 ^7 ~# P1 K* [$ M2 c- ]
if (m_dwPos >= MAX_INVENTORY)
0 T s+ Y% N6 f% K {/ N9 H: R% Y4 O2 [% m ?
return;
. `4 h$ H8 r, F' j$ E }
3 } |: \" ~/ \& i9 r9 m* v3 G m_Item[m_dwPos].nIndex = nIndex;
& v- M/ D. u1 T. G$ w m_Item[m_dwPos].dwId = m_dwPos;# _! U7 `4 [6 z$ q0 f8 y
m_dwPos++;/ Z( N. B8 x: I5 Y# V
}4 b4 C, D4 k) j- _1 M- a: w, A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 L- p: l2 `2 k! h8 [0 ^6 J
{0 N1 \ p6 f$ U9 d1 W) g0 N
for (int i=0;i<MAX_INVENTORY;i++)0 l& x1 z. B& i- J- u
{$ O: C8 j9 Z6 R# r% @! V }8 x0 U0 ?
if (m_Item.dwId == dwId); x! s" M8 l+ b
{
* R7 U" ^& D% o; s: E: [ return m_Item.nIndex;
M! @8 z" e- p! T0 B/ ^ }/ ?# g" c$ z; j& Z, f7 ^7 n' z! J
}- Y" l: v0 M* g6 ^6 P
return 255;' F5 j- f, J- h$ G
}9 G( O/ l; u% _5 G1 j
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 H9 m6 s0 P/ T9 T
{* Y: _( R# G$ U b
BYTE nTmp = 0; o3 u2 V5 ^/ }3 ?- f! r
bool bDest = false,bSrc = false;! Q, a* u6 w$ U& {
for (int i=0;i<MAX_INVENTORY;i++), B7 y* U8 G% _) [ f9 x
{
+ l) j/ D B# @" \1 I% H/ g# ` if (dwSrcId == m_Item.dwId)
/ a) E* W, p4 {" R) ] {
6 E: Z, h1 J1 I2 i //id相等 则 改变对应的dest和src* T3 e6 K& u& c" `4 I
nTmp = m_Item.nIndex;
' R! G8 j4 h. y4 ? m_Item.nIndex = dest;' l. W+ J( v g* y, a
}5 t2 l. c- Q0 z8 l
}, D9 s/ ^2 w. U9 ]
//临时数据保存完毕,交换开始
# Q$ I- }" @' p8 g* c. W for (int i=0;i<MAX_INVENTORY;i++)- v/ s% |/ r! ^& E
{5 x# J4 u) l5 W# s& O, S* X
if (dest == m_Item.nIndex)
1 A1 f9 \2 \6 f" R8 n, R {# J6 k7 G8 |" y/ g. S
//id相等 则 改变对应的dest和src
4 r- x6 B, |( c$ s- e m_Item.nIndex = nTmp;
, ? z7 c+ e/ e6 t% U. q }
" @& i7 R9 k- U7 z' _ }$ ~' b6 v/ j! o, j' i* K# Q
}
$ R0 {0 x5 j3 I, }" Y9 h/ v};) H, u- b+ J( \4 j( A) }3 }* \
-------------------------------------------------------------------------
* r6 P+ l }) ?8 y, V依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! d% Q) f" O2 [# w, j8 v0 z5 M' H. W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 y( T2 R8 _- ~. L: }9 k紧靠其上添加:
9 l9 _/ V$ ~, A" Mif( pWndBase == &m_wndMenu )
* G* k& |5 b7 p* O6 a6 n{
+ {6 m! _4 b- \- j( V6 c* h; ] switch( nID )& P2 Z: k# N6 E& m2 K" _6 ~% O
{( x0 V! F+ S! F; A
case 2:: q2 E. A6 H4 K/ A; t7 g) f- W' v
{
4 o( U' j- |+ X+ l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 a9 P% F0 l, G9 O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# ]; X; s# [2 t5 I {
, W0 \( N8 ?. [. F1 t1 @ break;
$ S/ O; h. a5 _ }9 h; u- H0 D* J9 P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( P' C( `2 \' J8 C K; ~
{
5 g( \$ y/ p# r$ X. Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 f K1 {7 M0 k4 s' c3 x7 {% K if( !pItemElem )
, I; ~% n2 `: L& ` continue;: e C2 a7 B2 L" `% T
if(pItemElem->GetExtra() > 0)
' M5 q# ^' K" X/ l K; ~8 S continue;
; z4 S) m3 W; g0 A' g, V$ ~9 X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( ~* V% Y1 g N# x continue;4 i' a* _- y% C" w! a5 a5 [0 [1 k
if( g_pPlayer->IsUsing( pItemElem ) )
+ p C1 \8 m5 k continue;# N" F& d& u3 S( m5 K0 b m
if( pItemElem->IsUndestructable() == TRUE )
( p5 I8 J0 u9 a% L8 j {
! W/ s a: a) H: q! D g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 d+ }6 K" T8 K. k, A$ L
continue;
3 }4 W- g6 T3 y6 f- Y* d }1 k, ~' |5 N* j2 u1 V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ k1 S. u7 y% f, ]3 @- |7 R Z9 \: L) a
}8 K6 ~, v+ K2 q+ S
break;8 d$ y8 r' s* X( W% Z" V$ v
}
3 M' ^' z9 d* C case 1:* J4 L) b+ X" k$ {1 Y3 z# Z
{
! p* M7 p7 N8 g //整理背包+ z& h- Y& H( y" f0 l% V% L2 O: a
//////////////////////////////////////////////////////////////////////////6 k7 @1 h' N" v' O* w0 r- J- s
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! v% ~- ?) x4 D# ]; N8 S Q
//////////////////////////////////////////////////////////////////////////
( O1 |' h# @- E //////////////////////////////////////////////////////////////////////////
3 z2 k' ?) H# g; u CInventorySort* pInvSort = new CInventorySort;4 T& g( T. h% Q( |: O
vector <sItem> vItem;
! Q: a6 a! ]; Z" ]: y vItem.resize(MAX_INVENTORY);//初始化大小
; m+ u- F' T! ^3 @; S: w4 p6 n1 W //////////////////////////////////////////////////////////////////////////& V6 `7 P& s# q% k. s
//填充数据7 R% l8 g& S) b7 u; ]; w% e& k
for (int i=0;i<MAX_INVENTORY;i++)2 c4 g6 n5 }; e* S5 u9 F
{ J a9 c$ n- X# N. `- Z) i. i" s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 I: Z) S) G2 C' B& z5 U# v
if (!pItemElem)
! {( t5 t; s: [ ~( x9 R {
' K. f8 B. S" A% l, R3 g vItem.dwKind2 = 0xffffffff;% V1 H7 B2 x) c+ K
vItem.dwItemId = 0xffffffff;3 P+ V3 w) v- b t
vItem.nIndex = i;, D- b: _# k% Y# b+ B
}else {
2 G b' A$ }* P+ [. u' c+ V ItemProp* pProp = pItemElem->GetProp();
4 R3 P! g0 y3 X* l- Z/ `( Q vItem.dwKind2 = pProp->dwItemKind2;
7 b( i- T8 n" T) D9 [2 w8 W" Z" B vItem.dwItemId = pItemElem->m_dwItemId;" @7 d$ P/ }& D3 Y
vItem.nIndex = i;) t) U# v9 t' Y. T, k& a* \
} G% i4 N; ]3 b9 h& r8 F5 \. c6 k" c
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ _6 O% {, @3 W2 N' p
}
: T1 f6 j& K, j$ ^, T/ A //////////////////////////////////////////////////////////////////////////1 t* s, X* L% i& @ Z" n
sort(vItem.begin(),vItem.end());//排序
1 f1 p- P9 s7 i //////////////////////////////////////////////////////////////////////////
. \+ k, g. E' t, G# N7 `+ X //交换
2 x5 H# S/ f2 U6 m( K% W for (size_t i=0;i<vItem.size();i++); i+ F7 B5 Z4 \$ C6 W' P& H
{
" R* _, A; j8 @* g/ N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 M4 f6 F6 w& {9 Y9 ?7 z, \: A pInvSort->Add(vItem.nIndex);
4 P8 @' |% f+ ^ }
) i3 N3 e; @+ x+ t. C BYTE nDestPos = 0;
0 X# D& v( ^# i3 B6 d/ { for (int i=0;i<MAX_INVENTORY;i++)4 A& E$ M' D" M, f/ J
{# Q( {) D# z! G) N) i8 W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; C5 ?7 ^7 Q' [4 H$ U- b2 S# f if (pItemElem); u; ?8 S3 W* E7 K" v
{- f- l6 }- s1 Q1 I: W
if (IsUsingItem(pItemElem))
$ e( g8 x8 N5 j( w7 j$ E2 F {
3 w7 Q* ~; h5 `+ \" y; H% O //这个位置无法放7 d* q. e" C' [# q5 l. N
nDestPos++;
) h8 {2 _; G) ~0 o; u& H$ ] F3 h" | }
7 n4 V) o4 W; p; C }
4 |# x+ i! p$ G; h7 F R BYTE nSrc = pInvSort->GetItemSrc(i);
' s/ _+ `) v" v5 t. j; R | pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# D" [0 d& Y4 W
if (pItemElem)) {- a3 {1 }! S+ d) D( S
{0 N- Z' p$ m3 ^
if (IsUsingItem(pItemElem))4 f; n2 }6 H9 u! Q
{: E0 }# I# F% f G" |$ g* {# x
//这个道具无法移动,跳过
& l1 J9 n' S5 I: F8 Q* ~ continue;3 o$ p* h" |+ d+ \. {9 l
}+ k4 _) g1 N& t$ x
}else{
$ d8 |6 c: V D0 U) G //空位置 不用动
# k2 U( Y3 ]. C$ O: g/ M. o2 t continue;& P6 B" \) ~: X; W
}
6 H+ M- d# X; g/ k //////////////////////////////////////////////////////////////////////////
5 I: e1 H! z4 ~, I //开始移动
7 `# A; s) m. s if (nSrc == nDestPos)
* v( X- o- w% N, X {) \8 Q1 j' l' D5 R% ?
//原地不动7 d! }$ O6 E- J' S, o: x" `
nDestPos++;- P: g4 f8 ^% h5 g# H
continue;
8 P! b! {* X3 `2 X e* g }$ ~9 T4 s5 }# _ t: h1 ]
pInvSort->MoveItem(i,nDestPos);
5 m, c$ I3 L7 w; Z1 Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' [6 A1 J' ?- Z1 l+ g& u! c. t Sleep(5);
" g5 K4 ?' d- X- J! x6 d% U, J ?3 M //Error("移动 - %d->%d",nSrc,nDestPos);4 X; w* X4 S6 X: m' Z7 T! j
nDestPos++;% H0 c" b1 ] p g# m& k: B7 G7 z
}0 q# ?9 o0 V+ O; t3 p6 Q; b
//取第一个元素的信息0 I1 f5 b0 y* v6 U9 F3 F8 A
/*5 T) [: V# ^. }
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). T9 g( ~& J( E; w1 g
{
$ K- x' ^; [' x5 ~; {5 R$ b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) d# ~% } A" j. I! @' x( C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* u* i2 [, Q& ]
}
4 I3 J% ?2 [5 n% A */+ B- Q @4 s! R6 o. i
//////////////////////////////////////////////////////////////////////////
: J7 M; k$ R" z# m* ]! P0 @ break;
4 D* ]4 q% U: S! K5 I" s% n; n }( d( q* c C; k
}
^: }; s+ _& _, f" Z}: Z; s e% {5 Q# u8 ~: G
m_wndMenu.SetVisible(FALSE);+ v( h0 k' J; E* t' O
2 M8 b5 t% X: H2 B--------------------------------------------------------------------------------------------------------
) [ r' l1 s$ a" u% U搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ t4 k! M, L* d{# d% H8 j! Y$ J' ], f! _! A
BaseMouseCursor();
1 {/ s+ [! J% G) C6 v}
6 M' l, C! R& ~- d8 {' u0 z& i在其下添加:6 _/ b' j* g8 p: T; h& {
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 K- U0 z* W, r& |- b
{; S; I, |% C" Y# f0 r' _. U
m_wndMenu.DeleteAllMenu();
7 G3 @! }+ B M/ r6 U/ u& s& Bm_wndMenu.CreateMenu(this);: d+ d- L' v( T! J% ^
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& {6 A" f1 z- L" R. |- X" q4 c4 D- ]8 \. a. K8 L: R7 Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& o5 ~+ B; q8 u
{$ f/ ^, L& ]0 Q ]0 V; X0 G1 s
//P以上级别才可以删除所有道具$ }/ X$ {8 C2 a3 I; \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); n( J- h+ F% \9 x6 ]5 Z( p
}
0 v v. I! Y6 V+ s: m! km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% `5 v0 c4 r4 fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ H8 a3 @9 }/ w# ]: y
m_wndMenu.SetFocus();
; K0 H( F% e# X' a8 @ ~0 K4 K" @}
: s1 { D% ]3 F2 H: s) D------------------------------------------------------------------------------------------------------------; t1 W1 O' S4 Z. F
*************************
2 ], {2 g2 ]- P+ y. N vWndField.h文件
6 U7 C/ z& t7 k8 I2 h/ d*************************3 z" a: x9 {( o. g9 q( g
搜索:BOOL m_bReport;
5 @$ B& k6 a/ _4 l8 g" O3 D其后添加:% B& A: e) {( ?: W+ l
CWndMenu m_wndMenu;& D N% D- R5 |4 J8 Z: b5 W# U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* R1 i4 S/ [* j4 y4 j" Q4 m# z. h, u" I其后添加:
1 \0 f2 y3 j( B+ Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);7 R/ b% t2 }9 v# d
: w% }& _6 U9 f9 X2 p2 c
7 Q; s6 M5 B7 V" v' E
|
|