|
|
源文件中_Interface文件夹下WndField.cpp文件
7 e. I) i! h# u5 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; @' u& @$ R+ r. R0 m( b6 L0 v2 h q$ A
struct sItem1 T5 r8 D3 G9 I
{
9 O1 b, c! ~* M F: G" h; M1 O) lDWORD dwId;& K. \ V4 e" G
DWORD dwKind2;1 I4 U5 c- i/ w( ?
DWORD dwItemId;- Y4 f- J& z/ P3 d/ C3 \
BYTE nIndex;& i" K" \5 T- k9 c# L9 A
sItem(){
9 y/ Y c" J9 X s dwId = dwKind2 = dwItemId = nIndex = 0;( f) q+ c4 i6 R. i. f- _9 x
}
# S9 O ^8 r/ y" i3 F5 Pbool operator < (const sItem p2)0 \7 Z; W: |- S7 o( `
{
4 g- J4 F2 @3 \! h" B/ F if (dwKind2 == p2.dwKind2)
7 e" r; B" ]5 J$ H! G+ Y# r {
/ K& p' @- \% Z) g) _- t/ X! K3 _- ` return dwItemId < p2.dwItemId;4 A: p$ ?8 `. M# g6 [$ M$ G
}else{
6 J7 a' s3 P% E9 H return dwKind2 < p2.dwKind2;
) [; B* y( O5 f. w }4 U2 E) P8 K1 R
}) s0 \3 A0 C. F, r. X% L5 r J
};
8 {- X) v+ s; v9 N2 F$ N- Kclass CInventorySort6 M, t; B# V, P3 M
{& Z7 r* \& U4 ~9 Q6 ~0 r/ W/ c8 V
public:# m& d( L4 A0 a, ~6 G# Y
CInventorySort(), Z7 l4 [2 Z7 ?. v. s
{: p2 _ k* h# m ~9 J5 j- R- P# W
m_dwPos = 0;
2 G+ t; G X: f# Z$ O6 [9 f}$ G: b7 O& c1 n8 C6 [" w, f5 I
~CInventorySort(){}- u4 d# q8 T8 F( h! j& e
private:
: D" b$ G. @6 }* [+ S+ l6 k) \sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: W! y9 |) i+ |/ WDWORD m_dwPos;2 D0 z- |( q. v/ p/ x
public:
5 w3 }6 ^* k. p3 N# Z2 Bvoid Add(BYTE nIndex)
3 g0 F9 z" {% v! G8 ?{
8 t a1 n2 o" \0 u& j) H+ G if (m_dwPos >= MAX_INVENTORY)# ]; ~, B6 x. ]* b
{- | p! b6 C9 A! C2 o
return;: B# y, B; d `1 A7 z
}3 |. `' X2 v4 E+ R
m_Item[m_dwPos].nIndex = nIndex;
2 n3 L8 w* N" o& O& ~ m_Item[m_dwPos].dwId = m_dwPos;8 t( v9 A% |" \ d
m_dwPos++;
7 i/ T, _$ C/ _2 ]+ b; j}4 B+ J W0 v$ b4 q$ R. Z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) M: _% w4 T/ o+ f8 r& @, Z{
F) d' P' ], F: W* | for (int i=0;i<MAX_INVENTORY;i++). h8 L+ E- w! b' m
{2 j2 H8 U% `3 n3 r
if (m_Item.dwId == dwId)
2 O/ }2 t& ^$ V- } {
! v4 c5 o5 z$ F3 i$ r return m_Item.nIndex; i' O# D9 f' [6 z+ J
}
?( V2 }; B E+ s' n }9 h; S% R1 o! w" C- R6 q# p
return 255;& l. A* L7 u; m# A
} o b Y( s( N1 G6 Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 E& H( Y$ ]/ X$ c" |{4 ?/ {4 B1 K5 B% q1 f8 d. z: C* u& l- o
BYTE nTmp = 0;
* J1 S- K8 w' v8 X9 n bool bDest = false,bSrc = false;- @3 s+ K7 g- L6 C! }
for (int i=0;i<MAX_INVENTORY;i++)* f* q) @4 i7 q( ^7 ]7 q) Y O/ ]
{: z4 G" a) I) I+ ]/ E9 `
if (dwSrcId == m_Item.dwId)
3 y, T' p! o2 c2 ^! y5 n9 y E {
4 E/ s( I# {- ^* Z2 h/ r //id相等 则 改变对应的dest和src
* _ B; C n, R$ }9 Y2 z nTmp = m_Item.nIndex;1 v9 g9 t4 L: a- e4 a& M7 Q4 ]
m_Item.nIndex = dest;
+ D8 x/ K! o1 B6 `3 D- ?* M }; y- ^' z# q$ z X+ c! ~" {
}
$ S7 f' U; R- |8 k //临时数据保存完毕,交换开始; U" [. m- W+ x- v
for (int i=0;i<MAX_INVENTORY;i++)
; Y( d: Y1 Z; U: ? D {
0 O( _6 ]0 B# l7 i if (dest == m_Item.nIndex) W) F, q/ T6 \; H
{5 Z' D( A& m: \4 |2 U. J
//id相等 则 改变对应的dest和src
' ^4 R4 n' @2 \. ]- a' g m_Item.nIndex = nTmp; a( M0 _# H2 |0 Z9 H6 F8 c2 G
}
/ l+ L) k+ [) h9 z4 L0 @) e }$ {$ N+ U( U6 Z. i1 K% R
}
1 i6 r+ `5 D/ R* `, W& b, h( v};
; _0 b/ f. a& @0 D8 z-------------------------------------------------------------------------
2 f, P( d+ U1 `' |依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ w0 u, N3 E7 ]" g9 R1 p* Q% R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, |* {6 e G& }/ _
紧靠其上添加:+ E0 M$ x2 [/ j: l
if( pWndBase == &m_wndMenu )& c1 W) I2 Y3 a) q3 O3 Y
{+ Z+ M7 j: J; {8 ^7 {1 T; n
switch( nID )4 }& q/ L, i' O/ r1 I/ ]2 V
{
) h# x+ n# g. t: ~3 {& x4 S5 }" U8 ^ case 2:' M; `, @# T% z3 z) G7 b- a
{" Q$ ~7 R7 {% \
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, p. h/ u2 B8 l+ o+ h ^
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- }% X2 C. a; R' U% r0 { {
' ~4 t2 u, l+ B7 g break;: F, r: t! o! T" E0 a" _
}
% |0 J0 S# t6 v, V( {+ v for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 @( R* `$ H) H3 q
{ I& l8 Z& h+ M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, S) y* Z' n# h' }1 p0 p if( !pItemElem )6 u6 }8 S* h h4 O: D# @/ b
continue;2 g& M ~9 j! g" _9 c4 m
if(pItemElem->GetExtra() > 0), l0 `; R: @! L1 ^: r
continue;& x8 \, v0 B+ F! U+ Q5 x
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + c0 v: I% ]9 R" {& j/ m- I' @
continue;
. ]" o( i" L8 _ if( g_pPlayer->IsUsing( pItemElem ) )
$ _, ^) W6 J1 h& t continue;" d2 C! L q- T7 Y: O# r% r6 w1 a
if( pItemElem->IsUndestructable() == TRUE )
& D, u# k, ^1 }4 ^& C0 k# r {
% a! Z$ j. |3 F4 t g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 p, }- V! _5 l% m& Q! j
continue;1 B( Q; }( u& F1 _$ \
}
% ?4 r5 I; X8 T. q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! E% y" [/ h/ n5 E, Q) F }
! H ]3 z( m9 J& |+ m break;4 Y/ ~) _, Z) O B Y
}! T( ^7 \( ]* f
case 1:6 F, x+ T6 K$ S! u, X
{
/ Y% [! d7 a @( g Z" n //整理背包
5 o z9 z5 c1 k4 z' x% |0 f //////////////////////////////////////////////////////////////////////////
# c2 c7 u: }0 d' V" i //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" P* t. H+ E# b0 H8 k3 z7 j9 x6 U& J //////////////////////////////////////////////////////////////////////////# e- b* a; a( ?9 ^3 u
//////////////////////////////////////////////////////////////////////////( N7 b' n5 U5 [% @/ s: }* v' [
CInventorySort* pInvSort = new CInventorySort;$ @$ i! G+ d4 O% `- {
vector <sItem> vItem;
* U5 U$ {. M* C8 q+ j/ |9 ^ vItem.resize(MAX_INVENTORY);//初始化大小
5 G4 F3 z D. _, X, o0 e //////////////////////////////////////////////////////////////////////////
2 R) D5 N2 R8 n- Q) f //填充数据
+ n6 @5 H7 K4 |4 \ for (int i=0;i<MAX_INVENTORY;i++)
$ h6 x* q. {1 {( Q, R {
: t5 u, x8 s4 A! ?' l0 V0 R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% g$ F5 L) D- N% W% U. O
if (!pItemElem)
( t- ]2 q6 H, q; z {
6 s2 l8 ]) u( d6 s/ U vItem.dwKind2 = 0xffffffff;4 A/ I0 g9 S/ u/ I; q3 I
vItem.dwItemId = 0xffffffff;" h/ I% E* o. p! A4 I$ ^
vItem.nIndex = i;
( ]0 g* L% n, w- T" W" U( X" @ }else {
4 g5 N0 I2 y' e) d' b ItemProp* pProp = pItemElem->GetProp();& @4 j" Z6 e' k1 M9 e
vItem.dwKind2 = pProp->dwItemKind2;' x7 ^( B7 h5 H
vItem.dwItemId = pItemElem->m_dwItemId;) \+ V6 m3 s& z w
vItem.nIndex = i;) B3 N6 _+ u5 I
}5 K$ a$ M7 @: p4 A, T
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! h. N$ W" b+ ^& H; {/ z; b
}
$ t+ X7 Q. ]" }6 q //////////////////////////////////////////////////////////////////////////
# ~4 p j5 E- b9 g/ b$ @ sort(vItem.begin(),vItem.end());//排序
) K$ C: ^- a r' |+ s/ |4 Y //////////////////////////////////////////////////////////////////////////8 e7 e5 K: q# M! C/ L1 t- h7 d
//交换4 K: E" C+ U! ^% X g7 J/ {; O
for (size_t i=0;i<vItem.size();i++)1 O7 A8 H2 l7 h
{
# h, e* a# c( y" Q& m X; N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 G a( a n a! @ pInvSort->Add(vItem.nIndex);
; j8 x# H# x! F( O- o }: p2 V( R5 f8 V) t4 J
BYTE nDestPos = 0;8 ^5 E/ b z; E7 ? w% L6 c
for (int i=0;i<MAX_INVENTORY;i++), n- p" `. G8 p$ a& ^
{% }6 r% ~. \8 i4 g1 ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ f% W K) u: k* _ `# ~ if (pItemElem)4 l* X# R5 o- w- }9 [/ P4 U8 p8 _
{
: N0 }6 j( d' r6 s0 Q0 D# z! m if (IsUsingItem(pItemElem))
! n7 d' L4 L o" \ {3 m* U: |; \: d+ A) t0 X
//这个位置无法放
+ N/ J, ?, V, T: E$ g0 X9 R nDestPos++;0 c$ Y! i8 P: B- f* Y. h6 [
}
0 O: [. s$ |8 V( P# o+ K }
# T; s' F. V' E6 m/ n7 a; B8 @5 E: V BYTE nSrc = pInvSort->GetItemSrc(i);3 d1 [+ E, @) Z9 R2 Q) G
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" b, j r- ~% i2 D4 y
if (pItemElem)
5 g" `9 {4 N3 W {
! ~1 y0 h3 s# A! c3 j if (IsUsingItem(pItemElem))
0 A/ f0 V% q4 y" e( ]: T* y {7 [( M# Z: ?5 G( |
//这个道具无法移动,跳过: V1 c, T# L( g/ ~7 W1 t- U
continue;
: I: I+ t% y/ C }3 m Q; b% n% H: P
}else{& d5 V: ^' f6 p% c4 S A4 r
//空位置 不用动% j2 Q2 P( j- j! ?/ j1 X$ o' N
continue;3 r; j; K# O) {/ V, v I+ h
}
2 U" n1 ~. e& E" L; d) y. t! j$ I% { /////////////////////////////////////////////////////////////////////////// |, r: d5 e3 W5 q: q
//开始移动
# _$ u0 w7 B8 F& D# D/ h if (nSrc == nDestPos)% S/ S! ]* Z- C4 N
{8 w- k4 _/ R2 R: o% D6 ^ j
//原地不动6 i. v9 \! \+ g- l" P. ]' n
nDestPos++;
5 K1 Z7 ~6 S# l1 q continue;+ X2 u, C7 ?$ x# i
}9 a& a# A0 n4 K* P" X' @! Y
pInvSort->MoveItem(i,nDestPos);
+ ?$ T: m( X' J$ _& s g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 E( s/ L- y+ l, u/ T7 k2 s- h Sleep(5);
# i( _# t( s- ^" C' O //Error("移动 - %d->%d",nSrc,nDestPos);
8 R9 H; y/ f# H: n- G6 P nDestPos++;# {7 s0 o+ M$ W9 p2 n3 |1 R
}
7 A# P3 x3 h) W //取第一个元素的信息6 e8 A/ ^# h: t, V
/*& c9 y0 F- K. ~- {% O, N& K4 l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). y- w4 j9 T7 G$ B8 B. v) ^
{
# r! ^6 ~% \* | i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 j$ Q5 Z( j* O- ~
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ p. o& G+ R. a8 V* `
}
1 w) E8 w ~+ h+ J, F f1 o */1 p3 B9 Z B! x) x
//////////////////////////////////////////////////////////////////////////
/ o2 F: h/ G; ?; N6 j4 t; g break;2 Y, Q6 {9 Q8 L2 i5 V+ G! V
}
' b7 }, o1 `5 d } ( ~7 ?: X' s z2 c& i6 X% D$ L8 m
}
2 A! W7 |3 v6 F" y; F7 e' e' O1 k- ]m_wndMenu.SetVisible(FALSE);
, x/ M6 b! V. }9 a2 b% t: O) j' J
6 w* s% S2 q) Y' j4 T' e+ C--------------------------------------------------------------------------------------------------------
. d2 ^4 `% }8 n. O1 e0 j0 F. ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" i, R6 G; l, J) `{
1 n. r, v. g8 g3 g& } y) [9 I& I2 bBaseMouseCursor();
. r X9 |$ r) p, k! c}
( ?0 E, i/ q& B% p( u9 a: T1 G n在其下添加:
) h* A) o$ c! o) B% X+ Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' m" y. o" v' }. w$ y" B{
# v3 e, b4 a- `5 \; L- ?m_wndMenu.DeleteAllMenu();! u) M3 Z+ {6 p' o+ g8 F
m_wndMenu.CreateMenu(this);. w7 X6 `) Q. n( e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 f; N# N4 x+ u7 J& T: |
% E% e7 r" _7 E7 T5 g- }5 f% r' R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 B$ m- X5 B7 ^6 Z5 P# D{) t X, S4 H8 i8 e% H9 M
//P以上级别才可以删除所有道具0 l: X9 U5 y6 m
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* Z6 f! a+ D+ X8 L; V+ Q* }}, b2 e6 v3 r+ e! j0 z% M8 @. s( X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" M5 _# _; k/ \0 G! O$ `7 u+ N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; R* Y3 B% S' N5 q4 O" P& mm_wndMenu.SetFocus();4 g, l- T( n T Q4 Y5 C1 c
}
' O2 v" }+ _9 B+ _3 F( G: z------------------------------------------------------------------------------------------------------------6 H+ O3 e! n7 I4 o- Z( @4 U0 k, m
*************************5 o4 _" g8 y# ?0 [; ]7 l
WndField.h文件
" C# E# o' \4 n) }9 m+ x M*************************
! ^: W$ U5 G2 C) t5 _" ~8 F搜索:BOOL m_bReport;
! Y6 u! [# y7 D- l5 h其后添加:
. t) p( W8 e" K/ c2 p! G6 VCWndMenu m_wndMenu;. m r: M' E0 \; v* y' ?- s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: f+ t7 A+ A: R; N' d6 t
其后添加:
/ m4 x1 r. M6 p7 {virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 N) h% j' S/ A F7 o c' |( P1 `) a4 r8 X8 g5 D
" e% u5 w: f8 D
|
|