|
|
源文件中_Interface文件夹下WndField.cpp文件
) B8 K: R$ S9 L- }( e4 D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' E' Q2 y9 N$ n5 P6 `! v$ [8 r$ z
) \, W( e' o( W" y: Ostruct sItem
: s B0 _8 J* G0 R5 P8 l* w6 t{
% ~, P: i/ ~7 n/ B+ qDWORD dwId;- a9 X5 S B7 |* F- h& Y' s$ B
DWORD dwKind2;
% j( H& B5 C% l6 Y& p, }DWORD dwItemId;) d4 E7 D7 h$ u: ~3 V/ c9 I; w) D
BYTE nIndex;( D; d4 V! ], t2 Z. o$ U, k, {
sItem(){3 A* h6 K8 }, d1 Y% e* t+ R0 m9 c
dwId = dwKind2 = dwItemId = nIndex = 0;
# Y; t& q# p& o6 r2 l}
. h) k5 p; w& V5 I% gbool operator < (const sItem p2)
7 I3 z! n* Z* W/ b{
: A9 q9 v0 j, |$ r, b8 H8 `5 c if (dwKind2 == p2.dwKind2)
, q8 b$ m9 L9 e0 x0 k4 [ {
; n+ S/ _; ^& W& J. s return dwItemId < p2.dwItemId;/ U" g$ [5 N" h0 m7 {# q( g
}else{- T) [2 b, e% p% H# b
return dwKind2 < p2.dwKind2;
0 l* [4 [& p- h5 h4 V% K% w, o }
+ v/ D9 L. D" g0 i! `9 u}" o( w9 d0 T0 I3 F
};
6 R0 q- w" S9 J$ Z% |class CInventorySort" g; F' |9 V7 N: l
{: t0 T" h3 K7 Z- G% K; W
public:, f* ~. A3 {2 ?4 |
CInventorySort()# d3 o4 |+ [ I1 Q5 c @8 ?
{; W% k) }% g- v8 `
m_dwPos = 0;
* }4 D- Y. U6 |. S- U+ w}
) g& Z. \1 J0 a0 [1 n~CInventorySort(){}
, c4 Z7 D) e3 Z1 ~8 b6 Kprivate:2 y& x4 t0 ~* T& R
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, r2 s m8 P5 A, _$ R U8 O) W5 }
DWORD m_dwPos;
% `6 a6 I4 z1 W0 kpublic:
+ J5 _: g# n% ^$ Vvoid Add(BYTE nIndex)
0 C/ A! L# M" h! Y+ i) F{
/ M7 [ ~( i1 H; U' ^' W% Q if (m_dwPos >= MAX_INVENTORY); C! k& P% U F6 _( h6 P: h9 j
{' v) h: Z! ^2 x5 F+ X; f0 a& Y8 ~/ G( H
return;
0 i/ J, Y3 x7 c" L8 J7 _( O }' B: x& g+ s+ E( C: V; w R9 d
m_Item[m_dwPos].nIndex = nIndex;+ {( f' l% S) R8 t/ k3 q4 t- |& W
m_Item[m_dwPos].dwId = m_dwPos;
7 X; H$ A/ g0 Y: ~6 S) r- m" P0 Y9 n m_dwPos++;( W# ]$ ^# G- B9 G
}4 v* ?( s2 L- q2 d
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 ]) O- q$ k4 B{7 M% e5 a- Y; m5 N& N% `
for (int i=0;i<MAX_INVENTORY;i++)
% _% ?, M# `7 x3 L( A/ s {
- S- `: X, W4 v0 Z8 `4 L, e if (m_Item.dwId == dwId)$ s- W: b! R& x: t! ^# s
{' ^7 f) E L' e+ X1 w! h1 m& R
return m_Item.nIndex;7 F" F3 Y: ?& s' S1 I' x
}
$ \ \, d7 O% l3 ?1 l, s8 `5 B }6 T' h: g8 Q6 w( }( g
return 255;5 m) w: F9 l T! z- U
}
6 p }" C, z' m `! L, P! Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 } A, t; X1 b0 m0 e{5 N8 H( a, i D, K- J, ^
BYTE nTmp = 0;* M% l1 y4 v- M* s8 `; j4 p
bool bDest = false,bSrc = false;
: w, S7 | Q4 O- M0 ]% g for (int i=0;i<MAX_INVENTORY;i++)/ } l. V. ^! M0 H$ g
{
8 L; ~% m# f% j if (dwSrcId == m_Item.dwId)( L$ D/ Y4 t, p; F0 x- m4 i4 O& H
{
9 V. z5 j, `, L5 f) p8 ^8 b: `6 ^ //id相等 则 改变对应的dest和src" I* t; @1 V$ V; Z- o" m+ l$ `
nTmp = m_Item.nIndex;
7 ~9 `2 P% l2 M. \8 T m_Item.nIndex = dest;3 _4 ^8 E/ E) p" d6 U2 I
} }& T5 d; S" T3 D% f
}0 w3 n6 o# L4 Q; y# s
//临时数据保存完毕,交换开始
t7 W8 |: ^. k; ~5 G# g8 x1 c4 _ for (int i=0;i<MAX_INVENTORY;i++)
0 E! Z1 [6 l+ c s- w {
# y n" h2 M* g: X2 V, o if (dest == m_Item.nIndex)
# E: u/ n! z4 Q+ a {
* O/ u4 a! I/ _: u //id相等 则 改变对应的dest和src
. I+ a$ H+ N+ _( C* o( _* T- b* c# O m_Item.nIndex = nTmp;1 `0 Q3 A* R' f
}
; e* g1 ]# c- u& \( V$ [ }5 J$ q8 M( X2 H. q) ?
}
' A' B& W5 a7 E. x' \};% y1 i6 @1 ^4 g+ E9 K) y
-------------------------------------------------------------------------- [! m! P2 P9 q8 E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* m6 A3 z$ h% c6 B1 k
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" \, Z6 w. |$ ]6 {4 ]& I紧靠其上添加:
: o! ~, _% Z0 T& c+ t: H& n) Kif( pWndBase == &m_wndMenu )6 ?7 E% h$ Z: {- X7 \ h
{+ ~/ d' B9 l4 M) s0 T z
switch( nID ), `+ s% I3 z0 w0 I: r! d8 q2 X
{! [" E& c3 | m2 B( x7 H
case 2:
* b- N: P O2 \1 Y5 p3 H/ X {0 x+ ^$ s) C" w8 U
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 J' e& u9 g$ O$ p, ~ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 a9 F0 e, c* m1 R* D) P. m {- r: l0 m- D0 }
break;
5 P. m* g3 w/ @) p+ b# @% x' [' X }2 |& n8 P- e) U8 F L0 u6 t! `3 x' f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), \' w2 {' d- {* Y' L6 B& t
{
. h8 ]3 _. e1 d o; z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 j* m( {6 }* J8 o- L. X if( !pItemElem )
3 j* m0 q' K: ^3 x continue;
8 f. j2 j2 S' t! g if(pItemElem->GetExtra() > 0)
; L3 L C/ S3 ^$ O1 q9 G continue;
d5 u0 w! a8 Z! ?5 b: W if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 k" e. i8 Q+ J& c* @1 \# l
continue;
3 Y+ d8 X! B" ? if( g_pPlayer->IsUsing( pItemElem ) ). h' U) w# h4 l: t5 H
continue;
: G! y: y/ E+ s C/ u9 o9 w3 y if( pItemElem->IsUndestructable() == TRUE )
- L- ~0 f1 [# f2 I {
6 B% g: j: ^$ G) v g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 Z$ p0 ]4 N, e6 j$ F* J3 K continue;
& A$ y2 l- k& Y. Q }
3 V- n: I0 ~% { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) E n$ |/ M; \2 s* _5 d: x6 L }
/ h+ b* m& M7 Z( X break;# K; x* n1 Q X a& j
}
/ z) j; h7 i( O4 F6 D# y case 1:
! h! ]4 J& |7 Y, b4 m c {
. Z" S) I1 k4 y' S: M% O //整理背包
- t% I0 i- q7 ]; b; v" C //////////////////////////////////////////////////////////////////////////
) X2 O: U3 v! t+ x9 ^ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ Y8 J9 Z) P5 {. T" T& [+ X //////////////////////////////////////////////////////////////////////////8 K5 ~% x* B8 |* A
//////////////////////////////////////////////////////////////////////////
6 \; o2 `6 F3 @. h7 f' l CInventorySort* pInvSort = new CInventorySort;
% D+ }: I, F8 ?& @9 _- @: w% J vector <sItem> vItem;: ?0 {4 ?% K9 Z0 b( e8 u" z
vItem.resize(MAX_INVENTORY);//初始化大小
) K/ q$ H3 o! z; V/ {+ |0 }0 e6 N! y //////////////////////////////////////////////////////////////////////////
5 d0 A3 q- V4 e( V //填充数据& _, P6 k2 f# U; \2 }' T0 ^% i; k8 [
for (int i=0;i<MAX_INVENTORY;i++)$ N }# j$ l0 ~+ f9 k+ z( g# \
{
3 _3 W) {% w& i) o- Q% g) h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- E: v# _7 @+ t
if (!pItemElem)
5 z1 y0 b+ X. F7 |* |+ e {
2 Y7 ~6 c- }) {& U* ]( j7 ] vItem.dwKind2 = 0xffffffff;9 p; X/ g: G% K/ X
vItem.dwItemId = 0xffffffff;. W5 d) g- ]: t5 O, @. ]
vItem.nIndex = i;+ N& V) q2 v( W1 c0 F% o
}else {
6 [; L5 P% O6 g$ |! P' m% F ItemProp* pProp = pItemElem->GetProp();3 W( U( T- C; H9 _
vItem.dwKind2 = pProp->dwItemKind2;
2 x% D4 @" r0 B o# \/ ]+ ]; L vItem.dwItemId = pItemElem->m_dwItemId;
$ [5 X1 @ f! k vItem.nIndex = i;
% E3 r/ e; u$ T! K }
. X" u$ |# H* e, }0 g! U/ ~; N- X9 G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! M: R3 Q" _1 j( z- `- S' F% V( H/ ]6 G
}
9 n- ~! T1 [1 r; ?) T1 Q //////////////////////////////////////////////////////////////////////////& @9 V/ |: }1 O$ f( B
sort(vItem.begin(),vItem.end());//排序
+ D6 ?, e( z, X0 Q4 Q8 i* |- R2 h //////////////////////////////////////////////////////////////////////////
S' W) P0 _8 w3 }0 S' L$ d //交换9 J% c: _: m* v e
for (size_t i=0;i<vItem.size();i++)2 u% N7 ^* K6 {- Q7 k# F
{
& L6 u! G. i+ ~/ F! [0 m //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* j8 g2 s2 P+ Z# f
pInvSort->Add(vItem.nIndex);
& k; G3 L5 t% x6 ^ }0 h: ?' y) }$ Q) l
BYTE nDestPos = 0;
, s7 V. }5 Q, K! t$ r for (int i=0;i<MAX_INVENTORY;i++)- N% X3 ]0 s; V
{# E& P7 g" `- m2 {% w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ V, `0 M S' C! T5 z9 ~ if (pItemElem)8 C, c, ?$ M# o# d: A3 ~6 u& j
{
+ e- b" Y4 }( K& `0 Q if (IsUsingItem(pItemElem))- L/ ]+ B' x! c; Q/ t) I
{0 o6 c# s# E& E X- i" Y& R
//这个位置无法放
; R1 t/ k+ a& a/ E nDestPos++;
, W. Q' v+ X2 w7 s }
0 n8 R9 [% @# d8 C }+ y, `$ f) e8 P6 f% }' x
BYTE nSrc = pInvSort->GetItemSrc(i);
0 V+ A3 `1 W: X- |9 b pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* h' _5 q8 X& W
if (pItemElem)
& c3 L4 r7 B/ W5 b2 p- q2 y, X {
( {8 w# `. _4 F if (IsUsingItem(pItemElem))% l5 r0 j4 S. z2 b% U7 s
{$ _- f9 [, l; n+ U1 Z& ?& m h
//这个道具无法移动,跳过4 t' F! ~' H: ~+ [$ O
continue;/ u! B/ @9 Z+ h" e2 L. p9 C) F3 p
}
0 ~( a# D) j: l6 a }else{9 |( O7 O+ x- A+ O* [
//空位置 不用动
. |+ u e1 W% h+ S& d' ]5 w, p5 Z continue;
9 s* \% x$ e) e3 v; _ }+ `3 M& ]8 b e! g7 B/ d: d) v- c
//////////////////////////////////////////////////////////////////////////
3 ^* x S$ u! s+ A2 N( F$ { //开始移动0 G5 a/ Z& |. u
if (nSrc == nDestPos), ^8 \+ _2 @& [% g- v4 \
{ V" ?) [" I. e
//原地不动
1 T3 J$ p: ?; D0 s$ U nDestPos++;
' J/ j3 z: |; _/ l continue;6 o$ K* c/ i8 Z5 n$ \/ v$ ?
}- G. T+ B& V4 f, `" m, E9 ?
pInvSort->MoveItem(i,nDestPos);9 i- l$ n: \) I N0 S0 _6 k
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 ?! w. N2 Y! g1 z
Sleep(5);& t3 ?& H+ [7 r# D3 O4 m+ r
//Error("移动 - %d->%d",nSrc,nDestPos);
, z+ y k9 ?2 S9 _9 o nDestPos++;7 R' N4 [0 b& S) [
}
/ d: ^( ]( _7 f3 y //取第一个元素的信息
. r, |6 m+ G" E- A5 w% s# T /*
6 |& `9 o; d6 d" S1 k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 M9 e" d- \$ z7 Y" d' H W
{6 Q# d! x- F/ k' p. E' ?
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 c i# U2 A/ _! G g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, w0 E+ }, _* [& ~8 E, p& Y }& B3 j* }: X! l+ ?7 M% Z
*/. l( ` h3 A8 X) H
//////////////////////////////////////////////////////////////////////////2 c9 e. }0 P% t; O5 c
break;6 I* ]( {1 {! T6 a8 K: u/ U1 K4 D
}3 B# u4 [7 D( S2 s# o8 g* T
}
" f7 C6 v8 O1 M6 m$ F; p}
y2 u s& j8 m( Im_wndMenu.SetVisible(FALSE);
/ P+ i- }7 Y% j9 ?- v+ J% r4 c# O5 S
6 |. n; d! E* V. x8 a--------------------------------------------------------------------------------------------------------
+ A- c. _# P, O1 O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) Z+ T4 E1 t; j( i v1 G6 h
{% k# y/ A- @9 F: N# ]! w' z7 U
BaseMouseCursor();
5 Y1 j3 R0 j: y( Q3 p8 M}3 s |! S' Y1 g& O- ^) a* S0 u
在其下添加:* v, F" s* H# O: T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" C5 h' h) C! j. E, j
{% p" z% {, F% K
m_wndMenu.DeleteAllMenu();
) g) n+ I- N+ h0 Q- P9 s# Rm_wndMenu.CreateMenu(this);8 J) ~0 ?4 \! v& ]5 D) n+ p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ a2 M& `8 ?% ^, `, |- p6 h
' y7 _" z& Y* E. \3 Y( |8 P0 pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# h* P, E2 K& `- M: D! n
{& q0 d, ?% ?: O& z- i6 s5 m* S
//P以上级别才可以删除所有道具$ J/ b% D: k5 F" x$ ?4 V2 W) Q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) V% ~; j- P r* b4 y9 f}
, s6 J/ G/ w3 ~- um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 R$ L5 t+ b: F1 n0 Y, }. \, bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& P) b$ s* [# q, F# bm_wndMenu.SetFocus();
1 s) g& T, x0 A' R: m! I}! h P1 \8 Y+ w% O7 ^
------------------------------------------------------------------------------------------------------------; [( e8 e7 t- }" b: Q0 ?5 `
*************************- W7 T# E6 u" E& `& j1 f
WndField.h文件6 g0 A' k: `! k6 n0 s2 ^
*************************
O$ W7 o! X0 U搜索:BOOL m_bReport;8 o0 Z; x" l& s9 X5 _
其后添加:- X! Y2 t& r3 h: ^
CWndMenu m_wndMenu;9 Q, J! Q( V9 ~/ Q* D( ]% n E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ T; g% s* I* s8 A: G其后添加:# G6 g1 O0 [# u
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 B3 ?( S3 g' ~. K/ X @ {- Z3 k6 H9 q
) D& B9 `- J& K7 U5 s s |
|