|
|
源文件中_Interface文件夹下WndField.cpp文件$ z' a6 N9 D' b. F6 I
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. A) T9 B, Q3 e- e8 c6 l4 `! L
3 E- m7 {) C% {) T; L' s, s) wstruct sItem
4 L9 ~/ B- ^5 V! g{/ n3 l t9 ?; ^1 J4 K7 X
DWORD dwId;8 b- R" d) G. L; v& i2 T
DWORD dwKind2;7 T$ v5 W# e0 Z. A
DWORD dwItemId;- m z0 |: N+ }. y" |# B
BYTE nIndex;
* i4 L% |- ]! i0 Y# BsItem(){8 i+ n) W! T X% ?0 t% t( m
dwId = dwKind2 = dwItemId = nIndex = 0;4 g# F+ `$ |+ N& b! ^: g
}
' u+ Q& B% ~% d4 |, [9 j9 sbool operator < (const sItem p2)
W' D# a t6 T" x, e1 A# a. c{
& t z, |3 ~4 `5 V1 Z) v ? if (dwKind2 == p2.dwKind2)
* D# A$ N; M! s7 e! A( h* n {5 k$ q) u" W9 N0 A n K
return dwItemId < p2.dwItemId;
% {3 C# L) A" c7 d }else{+ m( Z4 g% r5 j+ @
return dwKind2 < p2.dwKind2;) g& @* z. c2 E' l' s5 y
}# @. }$ Q4 H1 I+ ^: P& g" [' F
}
. S8 i$ W) M1 H$ v/ N0 ]# {3 ^- h};
' _, r: C+ z* e. I6 I0 Y% uclass CInventorySort
+ W% F/ C- n4 v' A{; C) B+ \, A" B% S5 g9 p2 ]
public:5 p+ ^/ f- E) z: V( h# e
CInventorySort()% g' H1 M- s9 U- d
{+ z, v1 U, [- a: C4 s: F
m_dwPos = 0;
1 O& i) s: K$ m; L+ |$ R! q}$ s6 C# L, e6 P$ q6 B8 w1 ]" ~! u
~CInventorySort(){}$ O. {5 W& [7 G, K# \ n
private:# L( f# l1 M& T2 F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* ]8 e8 L4 `1 c( V- f q9 h, CDWORD m_dwPos;! q! [" A+ s4 }3 z0 [8 `6 P8 ~
public:
9 Z. J' p% U5 S5 W; K9 R1 lvoid Add(BYTE nIndex)
; d+ A, l2 G( d& T# j{- R$ ^$ R3 U/ S) c
if (m_dwPos >= MAX_INVENTORY)
: s% I; F" c4 S1 @' l W {
: }) w5 S: Q/ P, C$ q5 b L Q return;* g& A X6 X% K$ {7 t
}
, `: k- o# A. ~% V, ]; f4 K m_Item[m_dwPos].nIndex = nIndex;9 a: Q9 v' y6 I$ u
m_Item[m_dwPos].dwId = m_dwPos;5 |3 a6 n7 {8 _$ a/ S2 S
m_dwPos++;
. n* F# F5 U8 o2 |3 a" b}
$ S' `3 j- J0 ?& d) @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 L' }( ~. t/ S3 k+ i{
; m) W! a4 Z' r1 l- ` for (int i=0;i<MAX_INVENTORY;i++)
6 M4 d" i l$ z" ~" m7 z& S0 q {. f/ y9 j( S) Q
if (m_Item.dwId == dwId)
& p* l. U9 A ?, I {
% N& k$ z# i0 a, G. y; V6 Z return m_Item.nIndex;
) W) \* L$ V; `4 Z0 f# \% u }
4 W! N8 p: s0 h" |0 @ }- k* D* D& _+ Y, i
return 255;
; q: n+ ^! V# e, H* i! g) _' Q}
( q k( x6 R$ I, Q$ Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# O+ w- ]: v# Y$ l: I9 V# D
{
I' E* [' X5 L: ^$ r& Y. U BYTE nTmp = 0;& { M( W3 w0 a. A* F
bool bDest = false,bSrc = false;
- z$ _: i* w) m! f for (int i=0;i<MAX_INVENTORY;i++)( ?) r( b! t1 F1 X/ k6 B8 n& K
{% @8 w; b V6 \
if (dwSrcId == m_Item.dwId)8 B# `) Y# U6 @. h6 H
{- z8 C1 \& J6 k. ?( H3 U
//id相等 则 改变对应的dest和src
) ]" |0 e9 p- [ nTmp = m_Item.nIndex;
8 X8 z0 A! ]9 V+ c/ T' c! P m_Item.nIndex = dest;4 ^+ {1 G. ]- @: O' ^, R
}+ D/ |4 n9 Q( G0 J5 v* s
}
$ H$ U" ^( T. V! {5 [* u" q7 r //临时数据保存完毕,交换开始5 ^+ G; X! `1 W8 D; U+ h' x; Y
for (int i=0;i<MAX_INVENTORY;i++), s( C2 R ~9 N! A
{1 R) H# K8 O6 M7 P9 [
if (dest == m_Item.nIndex)
; |- x" D; q$ U* `3 i/ N {
( m8 u% _: Y6 f/ a //id相等 则 改变对应的dest和src
# L' M2 ^4 {3 m) P m_Item.nIndex = nTmp;1 A3 n" a- p0 H* O( m% z
}
% W3 b9 B6 S6 L7 \ }
% d% Q" ], R/ O7 W! U}
! @ R8 |) T. n' X! Z: I};2 }* g. Q5 A6 F' ~6 j1 n; E! q
-------------------------------------------------------------------------
0 f1 M$ H" T. q5 x1 L; s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
B7 J- M' l& o; {; \: e& Y" M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 \% `* h& D4 O8 j! j7 u; ~紧靠其上添加:0 W5 J4 ^1 ` C: D
if( pWndBase == &m_wndMenu )* {. Y/ ~& B+ T5 h0 B
{
4 Y' ]6 X+ C0 _. j. a) d( x switch( nID )/ ]3 p3 Q5 u: p6 y0 }
{
1 R7 y2 E! q5 H7 R5 B# S case 2:' s. q a& I$ f5 E; P4 @9 ]
{! M- _, _6 D+ R
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% \, x$ G! I* r0 Y% o/ A( L if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' _# q4 p$ {0 Q/ m8 P1 o* m4 v
{- g, L' b' h. S0 S3 Y
break;
' R# V' T) m( U5 L& y }
6 d, q* \. {) _; W/ h7 p' s2 D for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 m; _+ {, q0 g% \! l. }$ Q" d# V- ]
{( h+ U2 b _) w$ ^; c7 {+ d+ ^$ R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: g, G# ]$ s; T2 `! Y" ]9 I8 I1 _ if( !pItemElem )6 g$ Y! \! @+ H9 K9 v
continue;, g$ _% C+ V3 z& D0 q
if(pItemElem->GetExtra() > 0)
7 c; X9 t) z; v continue;
8 a1 b( ?% K% p0 M% p; E if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! Y1 j: x) b- s, S8 x
continue;
5 k* v: ]4 a% r7 m) q3 h3 C7 Y# y. X if( g_pPlayer->IsUsing( pItemElem ) )
' F& ?' H+ T! B3 b$ L# h$ {% R continue;
+ H( k# @$ U |8 g% S if( pItemElem->IsUndestructable() == TRUE )
+ l( y( q& c' q1 b; a {
* y4 q7 D/ \' i/ k. T g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! n1 m0 l+ Y# @7 G0 @ C0 G4 Z
continue;; D7 J y: x% U( Z. _
}7 a$ _& _( t& ]+ {9 R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 e% n' {, a$ o; c+ G* L, T
}
/ k! Y' z b% } break;
" r$ L9 u4 u0 r" [7 x }
. A5 R; v2 q! i; k8 M% E; |1 C- ~ case 1:
& m! X8 W( j T/ M+ _7 u {
+ q7 S3 T9 Q- l$ w" F //整理背包
, e0 B }) ~& o- C% g3 y //////////////////////////////////////////////////////////////////////////8 x4 e( L! T) Z4 ^
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 K# T) i! |, P& @' \3 _ //////////////////////////////////////////////////////////////////////////
% w+ u# t& [- |7 x //////////////////////////////////////////////////////////////////////////
- \6 ]; v! w3 }7 D. Z8 e CInventorySort* pInvSort = new CInventorySort;
, e# @+ r) r% Z5 \2 C vector <sItem> vItem;* `/ s$ T, \% J1 \
vItem.resize(MAX_INVENTORY);//初始化大小
1 c0 B3 ~ s" u //////////////////////////////////////////////////////////////////////////
' j. v9 q$ w8 ]/ {* h" n+ \* k //填充数据
1 a) S4 `5 h8 W+ ~' z for (int i=0;i<MAX_INVENTORY;i++)4 W5 V* l$ Z/ E
{1 ^6 _" E9 x: }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 c4 Z D i! y9 T% w1 |
if (!pItemElem)
) f/ s$ X. m5 \1 ~& \- o {
9 i* e( {- v. E$ @7 Y2 i vItem.dwKind2 = 0xffffffff;, E% q& n h* l& x5 f: l/ {' B
vItem.dwItemId = 0xffffffff;
) q6 _7 g" | t: S) y vItem.nIndex = i;
/ B3 {2 Y6 T; O }else {, ]" k0 K# r( W* w1 r8 K
ItemProp* pProp = pItemElem->GetProp();
4 _/ h5 A3 i$ `" Q vItem.dwKind2 = pProp->dwItemKind2;' e$ H5 S0 o( a! n+ K$ A
vItem.dwItemId = pItemElem->m_dwItemId;
" O) x+ t% A' l3 `+ D4 `, z( Y vItem.nIndex = i;
: c; Y l9 A, u; j5 G }4 s8 ~; O8 b5 N+ G+ P& ~+ n
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( {* y4 M* e$ h0 t, U6 U }% R$ K, h& f. C Y/ d. ]
//////////////////////////////////////////////////////////////////////////
7 P! o; _2 U, g. H" i. V sort(vItem.begin(),vItem.end());//排序& U: n& K# n6 t0 T
//////////////////////////////////////////////////////////////////////////
6 w) @/ N K5 W% k7 \ //交换# f9 l2 H1 h$ m' c( j4 O; U3 O
for (size_t i=0;i<vItem.size();i++)
/ v3 p) Z$ J0 u/ ~ {+ q5 u4 c! t8 E; G* @7 q: b% H
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 w) C; g$ @0 c3 E! V6 M pInvSort->Add(vItem.nIndex);# i! }7 d# V w" G, p h* y
}
6 p7 K; p5 C" V# [) _: G! Q BYTE nDestPos = 0;
a( x) l: Q" n0 j6 n5 A5 ^& Z for (int i=0;i<MAX_INVENTORY;i++)
0 Z) J; }+ c0 }' T3 M {6 [0 L* k( c3 p$ E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; n x' [) X8 a) t3 j+ p if (pItemElem), X8 J" X. i3 Z7 H
{
# B: r& c4 o$ m _/ z# t if (IsUsingItem(pItemElem))
9 \# t4 F! b. A {6 S9 \( r8 u1 I5 R/ t$ @7 `0 }
//这个位置无法放
# l/ l( t& R5 b4 H. [: r, w nDestPos++;$ A8 T3 w% f* H( W& N
}
, u9 U0 v4 \; _7 ?2 A } v# ?3 |8 Q5 X, @! F7 i
BYTE nSrc = pInvSort->GetItemSrc(i);1 ]. Q) O% p a
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ O4 G7 }" n* @, x5 r# T if (pItemElem)
. c' d/ ^0 |4 W1 c {
1 ? ]; n" i& B! ~ if (IsUsingItem(pItemElem))
, ]9 v! m8 b0 Q, I) I, g9 Q: o {
4 b; }7 o/ |$ g1 P //这个道具无法移动,跳过6 N4 P! N r: W. o+ X
continue;
# n4 C7 [. B2 w+ R5 [6 U' Y4 o }8 f& c! q b+ s3 E$ P; j+ a) x% T* N
}else{
( e# U' t/ W4 j1 N: g //空位置 不用动
$ k9 I7 q" j; s: Y continue;1 Z4 D" A e4 s( \
}
/ ^; L, n& S7 M6 |/ Y9 s* [ //////////////////////////////////////////////////////////////////////////1 R$ k) y% e. p9 s
//开始移动& x2 x# a! V7 |/ I
if (nSrc == nDestPos); |" L, _3 `: ^+ ^
{( G+ |3 i' r% N! q. a
//原地不动
: w [( h0 R4 K% o nDestPos++; M# B0 @+ k' T) A) Y8 v1 ^ p
continue;) `( |+ }' P5 p3 f% ]
}6 w& o' m: V: p5 h* o4 O
pInvSort->MoveItem(i,nDestPos);) E; H1 g$ |, x1 X4 f7 f+ l
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; w1 f* x1 ?4 n7 y- @1 X Sleep(5);: t1 L; L/ w; p6 [ x
//Error("移动 - %d->%d",nSrc,nDestPos);
* }$ ?6 a e+ ~. W0 O7 E nDestPos++; O G3 B6 x9 x/ `! _+ N8 A V
}. D( |* @. Q# R% Z2 ~8 Y7 C2 x8 |% O
//取第一个元素的信息( n3 ~3 c2 f( ~( J9 d
/** W) A; Q+ V5 Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# ?. d- c N$ e/ j9 s0 n5 g
{ a- I8 l, X, x& f& b
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- U5 S) d3 @* D0 F3 o3 ~! }3 U
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- H$ V& w* _8 j/ G/ \ }
% z1 [2 } k2 P. x */
# l$ \' S: U( `' `4 z t+ K. ` //////////////////////////////////////////////////////////////////////////* V! v& S4 o5 C' S6 K, z8 _" u4 \" o
break;
0 r! r6 a, L- F6 { }1 d8 S, X) }; b( i& R# n- d
}
. h: ~. b5 p, _/ H7 e. h}
( A m2 G' n9 j6 jm_wndMenu.SetVisible(FALSE);
) n* F( F/ |- F0 B, ?5 `+ r; z9 _+ p! W
--------------------------------------------------------------------------------------------------------
2 T% Y- N H# p8 u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; p2 z4 M$ |7 c6 F{# Z O' J; {% l
BaseMouseCursor();! l& N) ^+ w+ P1 A# D8 q
}! L# h! e3 u6 y% _* L8 q
在其下添加:
$ I4 T4 Q1 B( x3 H$ E( bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% O% L# X5 u" M3 G
{
G8 ?: L- B% K* N) \! N+ j$ Nm_wndMenu.DeleteAllMenu();
, K! g% I- J) @5 {( {m_wndMenu.CreateMenu(this);
$ O% A6 O, ?0 A8 a7 |m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) t8 B; `' n3 o% n# c6 i0 c4 n( p. V+ J, k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# M) e+ _; H1 G) R+ j d! R{0 { h: Y0 Q C `3 V2 ^$ c9 a2 w
//P以上级别才可以删除所有道具% ~' S3 O) E g( J' G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 g* J: ~* [# M/ U% M2 n
}% r ]: ]0 u6 {* J
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 ? N( F8 {! I3 jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# C, y' H5 e- d: W5 |+ i( r1 E
m_wndMenu.SetFocus();
, o/ o: U; a e# M}
' u& S7 _8 H) ]( ?, Y4 j------------------------------------------------------------------------------------------------------------
" G' d+ F Y( d3 K" ~+ ?% w*************************5 e1 W, _. Y" q6 c5 D" [
WndField.h文件
: |) N0 v" p! T4 R* O" c. A3 `*************************1 {2 j; A5 ^3 j7 N
搜索:BOOL m_bReport;
: U7 N w) V# u; N7 y9 u' g6 O其后添加:8 C; D1 ]2 o8 C0 C
CWndMenu m_wndMenu;6 e# }8 H: T L( M* B% g1 F' d6 D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 j3 ~. U( R% }7 I1 g
其后添加:
# c S6 T2 c% r' E& pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: _: y3 T3 ]4 c9 M5 L: J( L9 _' K% @- G% T
3 J2 J% ^ }$ l* N |
|