|
|
源文件中_Interface文件夹下WndField.cpp文件. o" `1 g% {: R7 R+ j) z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 T+ o1 ]6 r2 i( }
# M& @" v: _7 v0 u% Hstruct sItem
. y! m, _, S$ Y5 e- c{. z+ p5 F7 Q: v/ t# Z; R
DWORD dwId;
% D9 T1 D6 d' p5 }7 L$ m+ `DWORD dwKind2;
$ m* w6 O8 T) q: g* J1 ]DWORD dwItemId;* m w* u* Q3 d# n3 e: R$ s
BYTE nIndex;
7 j) `$ ?' S- s# }# LsItem(){
% G; |& d7 W/ o! Z! X0 p dwId = dwKind2 = dwItemId = nIndex = 0;
& f, e" ~! p6 i* G}7 r' K4 l+ D9 J9 p. E% A7 n& n$ ^
bool operator < (const sItem p2)* D* R/ r. _8 n3 M
{) `1 K1 B r* p& @! t+ L- ^
if (dwKind2 == p2.dwKind2)4 R" a& T% b5 `# b: l6 r
{
I! Y( A% h" c! H return dwItemId < p2.dwItemId; k5 u3 o/ V: k! d: c9 |
}else{
) o( W9 w% X: n6 [. C1 c- P% j! @ return dwKind2 < p2.dwKind2;( N+ C: _3 Q$ R: @4 J2 C: }4 d* `( e
}
3 t5 [6 S/ Z7 R( |+ w) u}
$ j p8 W8 g) u. k; L& o};! A( m4 D1 v. i. N/ ?( |5 R5 g& P J5 \+ y
class CInventorySort
% x% |6 Z# M0 F7 d0 P3 {{
$ ^: ?5 w' w N& dpublic:
- T# i, y9 I5 @ t0 ~7 K6 UCInventorySort(), ^! c. a* |1 ^$ F' q/ t3 v
{
: |* r9 J: u% Y2 V% ?3 _ m_dwPos = 0;3 u7 o, K: |/ S' D
}; j1 |" J4 x9 Z$ D
~CInventorySort(){}
Z! l3 e: V# m; b; \: I- Yprivate:: U! U8 p' N: d: n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" m; Q/ B$ }; v0 k! U2 B- a1 U( UDWORD m_dwPos;
% Q! y, [2 L; |/ U5 R/ H+ Y5 ^public:' K$ z, N6 [4 r9 E
void Add(BYTE nIndex)
9 K Q% n1 F9 q{% J0 |' k* y5 a# V
if (m_dwPos >= MAX_INVENTORY)5 h6 f% }5 l, M8 h4 w, Y
{' J+ M8 X# c+ m
return;( W, q' b7 F% j9 M# `
} S3 ]+ q& H8 N$ w* }- x, r" c0 C
m_Item[m_dwPos].nIndex = nIndex;# j" E0 n( ^6 h9 J; _7 A; b/ Q
m_Item[m_dwPos].dwId = m_dwPos;
$ v7 x/ U% z. k" a5 q- Z m_dwPos++;4 _9 H" w1 f/ J( T5 C
}! H* t3 [) R3 A' m9 w/ X, R- r% f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 `8 W& S2 g9 S% W C2 }
{& L: K8 e; f8 {9 C
for (int i=0;i<MAX_INVENTORY;i++)
% T& @. Y% b9 y {# T; S/ O4 n6 w- u
if (m_Item.dwId == dwId); N8 |6 M; \6 v! F5 N
{
6 M2 C0 \' a% E) {8 D9 J& | return m_Item.nIndex;
6 H- p4 t( J h6 M }
! R4 R* |# b* x4 _2 f/ O5 \ }; V+ @4 y" x5 Z
return 255;
% t I) Y+ K8 a! C4 B; _}
) Q; ?, e! p8 R! p2 q5 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: b h- w9 ]! R* k) r
{- H) K* j& J) ?( A) V! y
BYTE nTmp = 0;
' D- E. j8 M5 W bool bDest = false,bSrc = false;
5 a* s* _; o2 X# R ^& u for (int i=0;i<MAX_INVENTORY;i++)2 I* Q$ y. R; u- M( I) H
{
% e# n1 r& b( O% d if (dwSrcId == m_Item.dwId)
6 |+ V9 H: t( B9 r: M! } {
0 R( q% q6 o i9 L8 O //id相等 则 改变对应的dest和src! z9 s3 O! O$ V- x& Z. L3 N7 L8 g; S
nTmp = m_Item.nIndex;
& I7 r$ K8 B- {0 d/ f9 R m_Item.nIndex = dest;
' }9 h5 C0 b" C# m0 [ }) s/ I( B# b! l6 M: ]
}2 b2 i/ ]* m. u k
//临时数据保存完毕,交换开始& K8 l0 ^! q5 H# g0 @& s
for (int i=0;i<MAX_INVENTORY;i++)
. M+ y9 }5 Q, L; J {: P: f8 @3 P1 e! u
if (dest == m_Item.nIndex)6 a4 j+ @+ a7 B/ }+ y* ]( s
{2 ~! f- W. Y; Q6 A; y( }+ w
//id相等 则 改变对应的dest和src; k9 X* f: A% ?7 j5 b
m_Item.nIndex = nTmp;; u. c! Y& o2 r
}
0 m) o# S b7 y }+ ]4 U2 W" m- X4 F/ Z
}
; ]+ t% u% s; \ V" a! U};
; U. F' z1 H" P- B% W# Q. @-------------------------------------------------------------------------. t9 D9 ]3 p$ {4 J4 ]
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! B/ `5 i; \ `/ ? Z% Y* [- K- c( g% g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 \! M" B5 u5 W7 j' S
紧靠其上添加:, @. ~$ f% d% k* k% G
if( pWndBase == &m_wndMenu )
X! B2 Y/ {/ l0 k5 b/ n{5 v, P- I {5 K; Q' T
switch( nID )
( V2 j0 J4 n( T+ L# E { N5 T$ ]$ v1 p
case 2:2 l U( G) h% ]1 a0 Q) b1 @ h/ F
{$ Z+ }3 U0 d' F2 z% u9 F( P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ | S% {! V7 W, j if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ ~- V+ o4 P: [' m$ f4 w0 ?
{
+ L5 G! @$ l$ M5 F break;
4 h. g: }, ~9 X% q }
& g5 Z, G% Q, P for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): t2 i: d( k0 w9 s" O2 u2 e* a
{1 `) w& C- Q" d7 P2 c7 n4 O- F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 ~6 ] _+ H+ B0 a8 z0 p6 Z
if( !pItemElem )/ l2 A) O. ?$ u0 ?# e! Y+ O
continue;$ U( d# Z! O/ o6 w
if(pItemElem->GetExtra() > 0); p9 F# M1 t: A9 a% U6 N
continue; T: O1 t, l- ^( {' m2 ^) A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & F6 L- R, D2 \; H5 I" H' l
continue;" `: i- p" V. h! `4 N
if( g_pPlayer->IsUsing( pItemElem ) )6 [: G& D8 }- y+ U5 L2 p" r
continue;& U4 K8 ?) B$ ]3 k3 D' Z
if( pItemElem->IsUndestructable() == TRUE )1 m% X- |& f6 y+ H2 C
{
8 K: H" g$ s) n g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& @5 M0 a8 B5 q4 [ Z continue;+ \1 o, [6 |6 K/ E' B" m! C
}8 a8 s4 M6 p- p5 M4 S l
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* g4 }& O% y. z `9 O/ t! d }
7 a+ q; x* N. {5 { break;3 |6 ^* F5 Y+ \ x8 H
}4 @. @; ]( @6 c2 z
case 1:8 _$ c- H2 L3 o% O! W
{& z8 R3 a/ y3 w; \$ \1 a
//整理背包1 O2 y' N6 K7 T- t% q' E" R) B- K! {
//////////////////////////////////////////////////////////////////////////1 A; @/ r# w9 k1 G) S2 S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 y2 U3 C& u5 n9 W- B: a
//////////////////////////////////////////////////////////////////////////% p }, c* L$ h- b1 C) W5 h0 d
//////////////////////////////////////////////////////////////////////////- p; I9 T. S# X9 q
CInventorySort* pInvSort = new CInventorySort;) ^+ m) Q4 j, i
vector <sItem> vItem;
1 k$ j1 W- m! n5 \3 H% c7 Z vItem.resize(MAX_INVENTORY);//初始化大小
/ s2 u: `$ x; Y2 c //////////////////////////////////////////////////////////////////////////
9 g" Q: I4 O. v0 c //填充数据
# n3 E) Y2 w, k for (int i=0;i<MAX_INVENTORY;i++)4 f; ]# A" J U! p
{: E) f6 ]' R9 K$ J# `8 @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 m8 l- \+ Q4 t, v V& g7 u) A; X if (!pItemElem)* c8 ?5 x {3 T9 d& C* r/ k
{3 P$ O5 e7 q' \. n
vItem.dwKind2 = 0xffffffff;) N( A w" ?. c( y! u) s
vItem.dwItemId = 0xffffffff;( g; N/ D5 f8 E9 _1 F4 N& w
vItem.nIndex = i; Q* @! z+ Y' l% D% F6 ]8 \4 E
}else {- F4 u' f' z" T4 ~
ItemProp* pProp = pItemElem->GetProp();, r9 u% ~! W$ m- Z5 c% e0 `, v
vItem.dwKind2 = pProp->dwItemKind2;
" n1 i- L+ C* J' X6 G0 R vItem.dwItemId = pItemElem->m_dwItemId;
8 D1 |& o9 s4 B/ ~* | `# S vItem.nIndex = i;
( ?3 X$ c- m! J }& `" D( E4 u3 H' w" ]
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 q' M/ c7 Z% t5 U, a; c
}+ s. H' \' b- D; t
//////////////////////////////////////////////////////////////////////////
, v; L' D$ `, ] R+ h) D5 c9 j sort(vItem.begin(),vItem.end());//排序! h% q4 C; O3 U7 a! X4 I- A9 [
//////////////////////////////////////////////////////////////////////////: j+ B; y$ S' d8 ], W
//交换
5 I/ @+ m; a/ ]7 g; v for (size_t i=0;i<vItem.size();i++)
- ~! |: K- H* \; U {
* D. @% ?& Y* B' b, N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 \& o) a' s* U5 c8 z pInvSort->Add(vItem.nIndex);% E4 H: k- o9 C2 _6 Q
}" @8 N, x' l7 Z% V' R* H! U2 H* a
BYTE nDestPos = 0;
+ @% N n- d* }, P for (int i=0;i<MAX_INVENTORY;i++)$ ?! @& _- [; u3 T1 A8 i
{
y- l3 B. H8 h" e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 U8 Q$ |) X9 U: N
if (pItemElem)3 z4 V3 W {& ^
{
4 @5 _& Z( O6 I0 w if (IsUsingItem(pItemElem))
4 e+ u/ k! u V& f( X6 P- L {
% Q! w R0 F9 g7 ~ //这个位置无法放
4 m+ h- O4 H. ?2 q1 k nDestPos++;
0 Q3 F/ f% \0 y0 B2 g" ` }5 v+ `# J5 K3 U* Z1 ]* u2 }
}+ E, s6 z" t+ d3 U' O1 `
BYTE nSrc = pInvSort->GetItemSrc(i);0 M. g7 [ x% @' ^- F4 a; v; M$ z$ I
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# c0 e4 o% _5 h if (pItemElem), i& d6 _# C$ I9 A* \7 h. {
{( t1 v/ w& H I* {2 A; e& m
if (IsUsingItem(pItemElem))& X8 }0 ]; D( L% X6 T9 j
{
1 Z; C9 Y! F( w5 E0 v //这个道具无法移动,跳过+ S- L, ]3 M2 t; t7 s
continue;
2 I" S( e+ N- t( l }5 c1 B8 P# T5 t* b
}else{5 T8 |1 H3 S8 ^. H! n
//空位置 不用动 H( @' j/ u2 M9 L2 \
continue;
) G2 f2 C0 q- ^8 f+ h9 e+ s }
7 q# h/ M! x5 L; m //////////////////////////////////////////////////////////////////////////+ ^* X* x6 x' x7 v8 @( w
//开始移动
% ^: E3 _% m) o R* }* k# [6 y if (nSrc == nDestPos)( J, y) b: n( K/ S. K$ \ O
{' \, h9 {& y1 o+ b; |) |/ i
//原地不动% _2 L0 j& \8 T) \4 ]) Z7 Q+ z
nDestPos++;
: J! Q% E* p5 V1 @ continue;+ K8 I- N4 M' g( q$ |
}! I$ p3 t* o5 @) s9 g
pInvSort->MoveItem(i,nDestPos);+ }+ ^/ A# i) T$ l$ i7 P; B7 |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; E1 @- |* Q1 T: s+ K" t1 L Sleep(5);
' p, Q Y! g4 ~/ E //Error("移动 - %d->%d",nSrc,nDestPos);5 l* I7 x7 u1 H2 u( H
nDestPos++;: }1 s2 D& ~9 y
}" ^( c8 o; i; k; r( R5 h
//取第一个元素的信息
% q4 R# n# {& k d" y) b /*1 j/ d( o! c6 ]$ @! S g& d
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) v/ c, d" I$ u5 ? I {
7 K) F4 \* B$ l# K6 g6 ?) Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
M) P( u( s+ M, q _' B' V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 ]# ~* t( [* u, D" a) a7 W4 E1 J2 J
}
% y* P! p7 \9 P5 {) {; K2 n0 | */# B5 g) J8 c: }/ s+ E% ^
//////////////////////////////////////////////////////////////////////////
6 R l6 E }2 F" ^$ S break;
; n# N+ z6 Q# P }" E! ]( m a$ u5 R
}
* l0 m3 H/ [5 v7 v9 y. G}
8 N4 y& Z0 ~1 _m_wndMenu.SetVisible(FALSE);% T. T$ W8 M8 w# O0 ?, `2 Q
; ~! t- T# D2 ]. O/ z7 d: m- ?
--------------------------------------------------------------------------------------------------------! P- |2 ]0 I' U5 Z' {8 c8 s1 c9 v
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' f% ]3 |2 \3 r; v# P
{
# r0 |& S7 Z, a1 CBaseMouseCursor();- ~& w$ C: j2 W! T2 G! e; f- y
}7 u2 H, E; j+ B& k
在其下添加:8 V( L6 Q9 F; ~0 h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" ~( S; _5 s6 `- m
{
1 A- q$ W" m; O$ h- H# P" z, Fm_wndMenu.DeleteAllMenu();# R( m, f9 K" o: R1 r& }7 G# N
m_wndMenu.CreateMenu(this);
1 H! S ]# o6 T1 y7 Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' a3 I$ d/ b0 G
1 l- j0 i/ m/ B& {2 a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! f* U' r# E; ?+ {
{
" A5 P K% Z8 P$ V, Y; @/ g //P以上级别才可以删除所有道具
* g# O+ `: w; n3 X$ K m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 \5 c) F& ]5 N$ E% Z- N4 ^}" V6 a/ \; I2 I) Q4 S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' K" t5 j2 j( X% ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. L/ K* x5 ^/ g% K) H7 U" i+ gm_wndMenu.SetFocus();
4 J1 ~) i. C) t& `2 I4 h" w$ G}
; q: }- k& M( N$ n, a------------------------------------------------------------------------------------------------------------. \$ B: {- x/ Y7 q* M% o/ F
*************************
- u$ t @; K- D8 X6 B8 sWndField.h文件
) G" d$ s+ P0 d0 K9 l*************************
, R6 X) T& q0 |1 C搜索:BOOL m_bReport;
9 O7 A5 \+ C. A0 k* j其后添加:/ r: v: ^, c1 x2 W: Y- O( S! C
CWndMenu m_wndMenu;
# x5 E) h/ A, F3 `搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( U% W( u* e6 z% {( q
其后添加:& L/ _* T. @$ J( b" ~
virtual void OnRButtonUp(UINT nFlags, CPoint point);+ I# ]+ ^& g: D ]8 q( J. a
) H* N* T' L: U( H2 f7 n6 \
) {7 g& A: `7 E' p9 x& d |
|