|
|
源文件中_Interface文件夹下WndField.cpp文件. C9 i( v- _ t$ k( Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 z/ B; s6 X3 E! h+ e$ u H3 D1 F/ r
struct sItem* }: l8 Y. z, ?* ]1 M
{
7 D3 X0 e" \2 r4 @% z& qDWORD dwId;" I V& ~' |+ ^2 x
DWORD dwKind2;- I, h2 x3 C! U* l
DWORD dwItemId;. _/ b! t( U6 V. T; I( r1 c4 b
BYTE nIndex;
4 q5 l8 h- _* d' `8 ^5 |: RsItem(){0 |5 b1 u, \2 B& C4 a' [: ]1 d0 T
dwId = dwKind2 = dwItemId = nIndex = 0;
, k% }. P9 K) p}
. u0 p$ l# P$ k* obool operator < (const sItem p2)9 X8 ?' \- Z& w
{
* b5 i$ s# l2 J2 W* S% j if (dwKind2 == p2.dwKind2)
6 R4 o, K/ p' ~% o- M$ ?$ J! z5 i {! V: g3 C: X, K
return dwItemId < p2.dwItemId;
5 J! A5 a& |0 @) @1 \ }else{
, {# j$ i; O( c; o; h' \7 m: I return dwKind2 < p2.dwKind2;
6 u" b2 M- N, A) V# l }( h3 C0 L; ?) R$ u: x
} l! \0 c% g k$ t! Q' H: _" l
};+ j; {& m [8 d
class CInventorySort' u2 a* W1 Z0 S# s' p1 B
{
( O" M5 }1 p6 [- m$ r, K. Q$ a8 ^public:0 R7 N9 o4 p% k0 g
CInventorySort()1 l9 r3 d/ a( ] F- d
{0 i7 @) @3 ~6 c z. f/ ^
m_dwPos = 0;1 c9 {# x0 a7 H* _9 Z" O6 H4 `
}
/ k) O* S9 C# g9 ]1 p2 j( z~CInventorySort(){}
% c/ u- n' ?4 R, d. s( g; Oprivate:
% ` ~8 Y6 y$ e$ xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 j0 B" I# w- C/ e: YDWORD m_dwPos;
* J. P' y% m2 t8 }7 opublic:
( v+ a3 l" m/ d) ^5 s" y" E. xvoid Add(BYTE nIndex)
2 ]7 ], S6 j" w+ w2 Z$ F8 w{
. ^: L! N0 m3 q# B if (m_dwPos >= MAX_INVENTORY)
4 M1 u( i! B0 K) y k8 I {
! e( o! ]( g; m1 E# N$ D return;
$ C" Q( {' Q! I/ r, Y- b }* q" d/ o- _! v4 F2 i) q0 ^% ^; Z
m_Item[m_dwPos].nIndex = nIndex;0 K$ ?+ O# O# O" N
m_Item[m_dwPos].dwId = m_dwPos;/ ^9 K( C% H5 b2 b; c6 Y1 ?
m_dwPos++;
) `: D$ z1 X0 z/ N& _' H: P1 O5 q& Z}+ o1 }6 Z# @( \- |7 C5 j e0 M% X- J8 L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 q5 r6 P# R- o! v ?+ R- T2 H
{
6 @) a8 b+ }+ t5 b! b for (int i=0;i<MAX_INVENTORY;i++)" ?6 e( J* q; ~2 n9 a
{; z: S/ t+ I0 h4 T
if (m_Item.dwId == dwId)1 [ Y- a' V; A0 O9 ]$ f6 I7 Z v
{
. r# s- N" X: k# { return m_Item.nIndex;, M' s U- k/ K! n) l
}
( ~' g4 m. s" h: w: D) Z' T }
) H9 a8 `, }2 c4 T" N* s1 N4 J return 255;, x' Z3 {7 K) k3 I2 u
}
$ z6 j6 o6 ~; l' @" }6 H) ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) T, l j' N! P4 E: e! t' I3 f' ^: {
{! h9 t; v$ R+ g' `/ e4 x+ v% c/ o& z
BYTE nTmp = 0;: T) n, l+ Y5 d3 ]- z5 ]& d
bool bDest = false,bSrc = false;
( Q k) k7 O# d8 h$ N4 E0 ?, e for (int i=0;i<MAX_INVENTORY;i++)& K' M* S6 H* X, q
{
" X. A2 J/ ]9 r; t if (dwSrcId == m_Item.dwId)/ Y4 [2 Z" z) H. \
{+ r# Q2 z5 d) S7 \3 Z
//id相等 则 改变对应的dest和src
* T; Q! s9 H1 q# m, H nTmp = m_Item.nIndex;
* h$ y4 F& l7 n; D m_Item.nIndex = dest;# i2 B" @1 l4 I; E& h# z" e) s5 P6 S
}8 I" o8 u$ |- H* x
}( A7 }9 R6 K) n3 ~; t
//临时数据保存完毕,交换开始
# y' o9 [! F+ t# n6 ~ for (int i=0;i<MAX_INVENTORY;i++)
" q U$ p: |8 P5 t {
?6 ?5 f. B3 n$ N+ ^6 |# ^6 ~ if (dest == m_Item.nIndex)( i# F1 L4 r/ v: ]
{5 Q W3 s; U8 y4 g
//id相等 则 改变对应的dest和src
) _. C4 P% w9 ^; _ m_Item.nIndex = nTmp;
3 F, F( w/ V2 v$ s# d }
# G* l9 J1 t! O4 W }% R) j4 d5 H, V, q% E
}
/ X) i/ X3 y) W6 C. p7 h};, k6 d0 I' i; t8 |1 q1 u; R$ B
-------------------------------------------------------------------------# q8 L. T6 [( X9 z4 p! k
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 E- ?4 i4 @% I, h+ Y; q. t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. ^: z+ n: x6 {# m$ A4 |, E紧靠其上添加:! A/ ^; A" N! g, T( \% L
if( pWndBase == &m_wndMenu )
% O) P# [! B' j) n$ T{, \$ y7 r/ P: `! I5 P
switch( nID )
( W+ k$ G7 i. R: D7 Z# q {
: z1 J' p0 R7 K4 y- R' o- V. h- u2 A case 2:3 G( }, o! E/ f: a r9 U4 t# V* @' f
{- _: w4 e% h3 j7 m8 f" o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" x2 Z! D; g7 ?+ z3 |
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) E9 O0 `: @ s
{
( x5 Q7 n( R5 j7 Y break;
& C' B* d0 A. {: Q2 _ }
, q, {0 o+ C, e5 x/ d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) t7 X! p. K6 H6 i, ~
{" F. }4 C. W% H" ]: z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ j: S/ Z l6 H" p& [ if( !pItemElem ), K: J! K) W. ~0 V ^% ]. K8 \# p
continue;
. V7 `; |3 M' g% }& T" U( N) p if(pItemElem->GetExtra() > 0). I# s \0 B" k! p- e
continue;/ G( m/ y# C0 D9 Z- k* {$ H1 d& y& j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& ~ ]8 V" R" _ continue;2 Y) w# h3 M) x( e
if( g_pPlayer->IsUsing( pItemElem ) )5 M5 E( R; n% E( N
continue;: H/ F2 ?# ?! f$ X' K
if( pItemElem->IsUndestructable() == TRUE )% h+ i2 \1 s8 D% I) I
{8 N" a! R5 B& ?7 \9 s
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( N. G% z- W' R. |
continue;/ w. F l3 p8 s+ z- W; C- ~! _& t$ B
}! H W2 Q5 [9 h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ M$ S3 R2 o; J: L' t; N }, ~5 q! z3 m: [( J, M6 f
break;
! {+ |: Y. I& E! n7 r$ y; O }" M+ `0 d2 V$ a4 {: }/ ?
case 1:
{$ E, A* e! T5 X; w" w% U% r {( g* V* ?+ H* r: V# m4 b
//整理背包, w- O% ?) C* [, q3 N% H
//////////////////////////////////////////////////////////////////////////
: u8 i1 c+ X0 w //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" {5 c3 J# Z# K" H //////////////////////////////////////////////////////////////////////////
6 l0 Z! k: T" ^5 E. M" n //////////////////////////////////////////////////////////////////////////
6 q# q# Y; B/ Z# A% g2 m: [2 e' t CInventorySort* pInvSort = new CInventorySort;0 U" [% G* y: J# m2 |
vector <sItem> vItem;5 J* c; \* L0 F) B) \" o
vItem.resize(MAX_INVENTORY);//初始化大小
0 d2 Q. j5 @, ~5 x; R2 Y$ q7 |- h- k //////////////////////////////////////////////////////////////////////////
& O0 p+ o+ e# M1 b //填充数据; Q% ~2 U" @( Z/ K$ X" \1 h
for (int i=0;i<MAX_INVENTORY;i++)) x; G! F) L" e$ Q( r& _; r
{
% e9 Y" a4 D G3 l3 H! ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 @$ P2 B. k* D2 U+ `- |
if (!pItemElem) C# E! |& B* i7 N" q* n& C& J# e; F: b
{
( m2 z. n+ l, o1 ^. F8 ^ r& @5 ] vItem.dwKind2 = 0xffffffff;/ }8 K* Z7 u# ~
vItem.dwItemId = 0xffffffff;
8 C. m3 H o2 u' f5 b4 o) [3 t# Q! z vItem.nIndex = i;
1 M" W3 _9 S+ s }else {% ^) M( Y, C8 R5 e& X& p! \
ItemProp* pProp = pItemElem->GetProp();# Y! D# T9 [8 v: _, o$ m
vItem.dwKind2 = pProp->dwItemKind2;
% H3 j$ B7 R+ l% c( b* R, k vItem.dwItemId = pItemElem->m_dwItemId;
! Z- q+ P- k+ M# {9 T( z vItem.nIndex = i;8 f- _: U8 s5 P, Q/ d3 W
}' |( F5 [- Z8 I: @2 y, O
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ H W+ d! D7 `+ ?$ ^
}
1 v+ W$ R1 ~! V8 g* K7 R0 l, } //////////////////////////////////////////////////////////////////////////
- F% M$ p+ F0 l1 d, d- { sort(vItem.begin(),vItem.end());//排序! D) C+ M) l% p/ P7 e( J6 q
//////////////////////////////////////////////////////////////////////////
) k5 B6 ~& ]' ~1 g# x% } //交换( V; P1 A! e5 b5 v" m7 o
for (size_t i=0;i<vItem.size();i++)
6 b" O& W: C) W7 I4 Q {) W$ M' n$ I( f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 n0 I6 v7 L+ E i$ o a* f v/ D pInvSort->Add(vItem.nIndex);
) B4 S# r9 d4 d# I! n) ? }
' s) c' E* @1 O1 q; x, C BYTE nDestPos = 0;# _6 G F3 B3 J/ p+ f' i& F0 w
for (int i=0;i<MAX_INVENTORY;i++)
! M- v3 s g+ a0 z& d: q {
/ B( W1 p! w( A5 f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 j+ [% M: H. ?5 {( x# o+ k+ G7 {- c if (pItemElem)+ _/ ^ z! q% G8 [/ q ^
{
* d1 P3 i1 D8 I2 }4 Q7 J if (IsUsingItem(pItemElem)). Z! K7 y- n% w
{
' h7 c2 c& t2 h //这个位置无法放
$ j3 ^* Q5 [' _$ ^ nDestPos++;0 K3 j' F0 M$ A( e/ _# v: J2 K z
}: ?3 V. H! R0 M9 M5 E+ J: T
}
' G" l8 [8 C. p' C0 B0 P' o0 N& T: E BYTE nSrc = pInvSort->GetItemSrc(i);1 s0 @+ ?1 @% a/ D% O' @
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 w, P& Y* K8 R6 c) p if (pItemElem)
' O/ a- {& [' g8 f- N {3 l3 d& F* E- U% P W' x% o
if (IsUsingItem(pItemElem))% b2 F& ~( b! I' n
{% _6 a* a, T2 b4 y; D! F
//这个道具无法移动,跳过* v$ E8 x7 O- F) X
continue;7 x4 }9 r5 S/ P
}8 O6 @0 S3 c j7 ~
}else{* E8 `( L4 {) F( Z0 P& d+ \3 u+ U
//空位置 不用动7 M, ^4 ]% U: ]+ S/ V. [
continue;% C: R/ a) F2 k0 u
}7 b" }9 ?4 ], a9 C
//////////////////////////////////////////////////////////////////////////! i, F' p0 V7 q2 G) u
//开始移动- [6 @0 f; F; ^. _
if (nSrc == nDestPos)
6 P/ Y! G$ Z: F% F7 R. y* \ {
4 g) `8 M6 U* l1 E+ P0 B //原地不动
0 ]1 W2 G, R* Y9 C# G nDestPos++;, b3 \0 V' x8 G
continue;
4 m8 _- B# N l' E" N }+ m0 N9 U/ }( R; {& `
pInvSort->MoveItem(i,nDestPos);7 P( V) }3 }, l. y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 Y, p1 t5 w( r' A v8 _ Sleep(5);
4 d: W8 ?4 P8 l8 j0 x //Error("移动 - %d->%d",nSrc,nDestPos);
6 }& K" H+ d" @, ^( w nDestPos++;
4 T3 ^. x" d! P# j1 r( S! {2 K }
: j# k* j4 `. i" r5 e //取第一个元素的信息) U+ A( s x. a( }% ]
/*; Y* u+ _$ d/ U3 p D B1 t5 J! |4 U
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 d6 T2 N7 q. _, n
{
- \* A5 t$ x o6 S7 W. S+ w( i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 Y* x8 ~9 @1 ^- @, r. i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 G4 s l+ V2 {+ }' }6 K
}
4 L0 c1 p4 p1 s: Y0 N/ _, Q */8 [$ p6 q- v O' U
//////////////////////////////////////////////////////////////////////////
" Q) R; Y' T. g t3 U; C break;/ _* ~" Y, c8 x; c/ h0 Z
}0 [5 ~( B8 }* j: ]) L
}
, ]) @7 \) `* d7 D- F2 ?}
u* ]- E. y- V/ U# _+ j# w# Lm_wndMenu.SetVisible(FALSE);
2 s; k6 {3 T1 X, j2 g- P: V. e y7 L, B. S
--------------------------------------------------------------------------------------------------------; V, v( r' a! S
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 h! J2 \! q: \" Z, V4 e, S
{; S$ _% y. M' ~4 C4 b* }
BaseMouseCursor();
/ R7 w5 k: ?8 [. A$ A5 O}
$ r: n/ H! f- L2 y5 v) {1 r在其下添加:
. O$ a# f0 s0 b3 j. [8 e" Bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, U( Y1 }0 {' G6 f# a4 P7 S{5 ~* e7 \- E- i
m_wndMenu.DeleteAllMenu();
2 L q' P' C; w/ c. h4 A" ~m_wndMenu.CreateMenu(this);
9 @ B" l6 I% t3 Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 ]3 U3 U( m0 e3 F# V) c: a* Y/ O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% ~* K4 E6 P7 \
{
8 q+ u5 q. c& ~4 K //P以上级别才可以删除所有道具8 B$ K5 _5 r- ~4 n2 V- M
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ ~+ w/ n7 H2 a9 H- }+ U9 W& c}
5 e7 Q# @9 y6 Q( p' |5 M/ D R' hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ C' b& R& V1 G* \; F( s" a2 `. tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. n( O8 i4 S4 ~ v0 r" g5 b
m_wndMenu.SetFocus();1 f; `5 N4 S! k5 D3 i
}: t! L- Z5 r$ \0 d3 T; z# w
------------------------------------------------------------------------------------------------------------& P! e0 E5 r8 S; C; `; Y
*************************! Z+ C3 w. D' c, ]3 p* k
WndField.h文件; r, ?/ T2 M& h! L z j( }
*************************
+ Y! @0 U7 p4 B9 U! i( Z搜索:BOOL m_bReport;: p W( K# p- V9 k
其后添加:" S* H0 C2 r2 ]0 [. I" f
CWndMenu m_wndMenu;# y y. x5 _+ f$ G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ [' n% W1 T) w ^, p
其后添加: D* A b) u+ D; P$ o2 j: c% f
virtual void OnRButtonUp(UINT nFlags, CPoint point);% N5 V, Z8 F. I& N2 }
6 l; `, r% b. f. E6 D2 A/ s. K& X- K* L
|
|