|
|
源文件中_Interface文件夹下WndField.cpp文件
% S7 Y7 A& F5 C# q) n& C1 D @' ?搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 N: A! Z% C1 h; ?8 s( g- {1 y$ Y# D
0 X% U1 b" f c5 g7 Q/ {struct sItem2 I, F8 W5 [ O" T8 F1 ]! b8 V) |
{' h- S# K) S9 X; s
DWORD dwId;
- O/ m0 u# i8 fDWORD dwKind2;
. _+ G5 N- S+ y! |# T9 x3 gDWORD dwItemId;" P# B! ~& p8 S, J+ ]8 K2 o$ _
BYTE nIndex;4 I# y4 O* w2 E. M" r
sItem(){
5 b+ [- T" `8 |3 X p dwId = dwKind2 = dwItemId = nIndex = 0;
2 n0 l. d2 ]2 q; E8 I1 W& Q}) j- o3 G- `4 |$ O
bool operator < (const sItem p2)
4 c' o6 U+ W9 j, Q{! R* L- z% K" _
if (dwKind2 == p2.dwKind2)
: s7 k, ^$ r2 b3 G {
" i+ `0 i1 F4 N- |2 w return dwItemId < p2.dwItemId;, w- _! ]9 ]: V O
}else{0 F2 L( ~- Q- i; q; f8 y
return dwKind2 < p2.dwKind2;
- O8 m; h% x! F) v7 e) G+ O% c2 L }
9 G9 w. J' }2 r# `. Q1 m}
7 {" F+ R$ |' C! }' R$ k) N/ \/ E};8 J7 M, @! S" o# j3 U8 b3 R; N8 h% _( v
class CInventorySort. p- C4 Q- [; m: `
{
Q, [1 y# `+ l& upublic:8 n# t3 ?$ @) Y9 ]
CInventorySort()
# @$ N7 v N7 a; ^{% p. ~6 G1 q( V1 E7 {4 W
m_dwPos = 0;
! V; r4 U7 A5 P- `7 Q}, z8 E# z9 g$ s; S, k
~CInventorySort(){}! d$ q" \0 o8 f$ u+ O: c2 P
private:0 M7 v, } t- l& T& ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 u4 i+ D! I7 |, B0 n y. }& }
DWORD m_dwPos;! w8 e) E$ ~+ d& _
public:+ |4 E% [0 |1 H$ O! X
void Add(BYTE nIndex)# K$ ?* g; \$ q( V7 }
{2 K0 h/ x0 v% x, L
if (m_dwPos >= MAX_INVENTORY)
! h( F& ^; s1 ^; z {5 J I, I% M, U
return;
- i6 f% Z! ^) G2 o! r* ^5 o" D }
" n& h- r+ Y% i# Y1 V$ G" h m_Item[m_dwPos].nIndex = nIndex;
- Y4 R' S0 [. O' r) D m_Item[m_dwPos].dwId = m_dwPos;
- m$ x5 l( v( \% o3 b m_dwPos++;/ O0 H/ a# d ?9 U" v
}2 Y# U" W6 ]1 S4 v5 O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 @" X1 ~, E! w+ M9 I
{
2 Z% W$ [, V, f+ {3 ` u, v3 g for (int i=0;i<MAX_INVENTORY;i++)
' g4 R. {3 e4 q9 Q1 [$ c8 D* k/ t g {
. x9 [2 X! i8 ~3 p if (m_Item.dwId == dwId)1 f. K/ o Y# f: V9 L" o
{
% q$ q7 X5 k, d" A2 _ return m_Item.nIndex;
) ^& P, c" C; E2 V4 s/ d }" O. l* s+ I' M4 ?4 E4 a
}
0 y+ A6 k! y, [; D" W! e return 255;+ J/ b, g4 v; m' C* C
}+ i+ t5 W; ^4 L' r6 y3 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. P) M: [9 k: r6 V{* @" q6 N* ]$ x
BYTE nTmp = 0;
2 _+ e) f) c+ ^9 r/ b9 C7 u bool bDest = false,bSrc = false;7 t' t8 ?& _6 P* J! D% f1 m
for (int i=0;i<MAX_INVENTORY;i++)
9 ^4 Y. c# ]; P1 r: l0 \. @ {' J/ X4 W0 p M! H( F0 K6 ^
if (dwSrcId == m_Item.dwId)4 \8 x1 Y- b I% O( M! Z# m* i1 \
{
9 Q! T! o9 l+ ^+ m2 }+ @& V- | //id相等 则 改变对应的dest和src7 N/ L; U4 [) v- m3 O6 \( P( }
nTmp = m_Item.nIndex;
* k2 [0 N9 A! o- [% d$ F1 ~ m_Item.nIndex = dest;- R& q6 J! J3 b& w! f+ i1 l
}
5 b2 w7 A3 c: X/ Q }4 v% }) b4 T- L
//临时数据保存完毕,交换开始
. d+ X$ Q/ d% q" U7 c6 V for (int i=0;i<MAX_INVENTORY;i++)
: C- ]. v" U$ J. Y {2 d, I0 ]3 k/ I3 Z5 G4 |7 {& e; s
if (dest == m_Item.nIndex)
7 V7 T" ~# v6 g' a6 d {5 o0 l0 K6 d1 U6 { v- s6 ]7 D1 @
//id相等 则 改变对应的dest和src
. [ Y( W' C1 r: f3 h* ]* I4 N' L m_Item.nIndex = nTmp;9 A2 h. a+ g% l$ ^" t
}- j+ _+ i9 k# v* `6 R; A
}1 A2 O% J# ~! X! ?
}) d* Q" p# K6 k+ ~9 E. a
};/ _6 j3 D& ?, p m, w$ f$ `& D: Z
-------------------------------------------------------------------------& f) D+ w, J7 F6 y8 i, _7 F$ d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. J2 q; d0 @9 s* m' `! C7 T" G2 g2 A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 ?8 p; n5 U3 s( q5 l
紧靠其上添加:) W g' ^7 E0 s* T. |7 S3 T
if( pWndBase == &m_wndMenu ), A. u3 a [5 v! {7 ~9 |- L
{1 A) I5 _7 g2 {4 l/ M
switch( nID )! O4 W) U! W% X6 d k$ a6 w: Y
{, W4 g' u! z4 f* `4 k" O
case 2:& T$ X8 s$ {/ l j1 i
{" u6 J4 z2 ^! O ~: |* l
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* V. y1 c5 P {' C4 {& f$ O4 k l
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# n3 a/ U2 ?7 F3 K/ ]- K0 {# a {
! J1 b) \* A2 q) Z5 `) X7 i break;
' k* Y7 H w# G }
( v4 L6 i9 o' @2 C6 C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 v* |* u8 ?4 i$ a& Z9 y6 j6 c {
/ x% }$ k9 A- ~* w" V) a6 j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 o, \ o( b, o! I if( !pItemElem )$ z# U3 s5 _1 \$ x/ z9 ?' P
continue;. j1 O# F% B* I& V1 h+ d$ V8 Z
if(pItemElem->GetExtra() > 0)) @1 o0 v0 |. x l% x
continue;
. C; `4 U# ] N: b: T if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - T; P$ V* T# r: B; B. t
continue;
* z: ]7 `8 F: ^* o' ], M2 U7 Q! P: L if( g_pPlayer->IsUsing( pItemElem ) )8 R4 p& _/ u! m. k+ {) B: @
continue;2 h- p5 _% s. k# G% O
if( pItemElem->IsUndestructable() == TRUE )( E. D: x7 }# ~& q# W, J9 [% k
{3 s: @% k5 A, [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 Q9 N- a7 G, ~" X continue;
w- x. }, {4 o% n: T+ C) ?4 J }
( l; `; U4 A' z2 G) f$ } g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& X9 U1 F2 k2 P4 f y6 B! V
}
3 J9 B9 `; B, @! s/ W A4 } break;
% K( f& l) L% l/ |1 l! a }
& }/ U8 B% T. d. w/ A) t case 1:) v# e+ `9 b5 `5 }; {
{4 F( Q2 } [2 B* |3 U
//整理背包
, L# r9 {$ _4 ~! I4 T //////////////////////////////////////////////////////////////////////////; m4 j8 f$ E; I g% `
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 v0 m5 F9 e6 K4 K4 Y9 h //////////////////////////////////////////////////////////////////////////! U/ O5 }/ U5 X+ N9 V4 l
//////////////////////////////////////////////////////////////////////////
9 h* q2 f) ?4 t( k& L* x CInventorySort* pInvSort = new CInventorySort;
% t! A. L$ j7 x: t. O4 t% P v vector <sItem> vItem;) m+ Z. w- f* @+ @# f8 ?2 F
vItem.resize(MAX_INVENTORY);//初始化大小: J" B- T, w2 A, \$ w
//////////////////////////////////////////////////////////////////////////
$ Y7 Z9 {. H( X6 R //填充数据
( b) Z) k: S' ^. S' l/ q; D& S" O for (int i=0;i<MAX_INVENTORY;i++)
" m2 {5 w$ O8 t5 H( k; a7 P: [5 O6 [6 T {; B3 i( `# n8 q G' Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ L; V! D0 U4 x: [3 y* r `5 p* P' } r if (!pItemElem)$ L. Y( z! J, y/ ` W
{
/ g! c( Y/ n: z+ Q4 T& A9 o7 ` vItem.dwKind2 = 0xffffffff;
- }: {2 {+ N+ r3 M vItem.dwItemId = 0xffffffff;: y/ u5 e* x: `8 r
vItem.nIndex = i;5 P" q: ^7 M. t o
}else {
' b# W; W0 F, t: M ItemProp* pProp = pItemElem->GetProp();) T H2 ^" T" I& E8 D
vItem.dwKind2 = pProp->dwItemKind2;5 \6 C& n8 _0 b4 w
vItem.dwItemId = pItemElem->m_dwItemId;- w9 f+ F, q& n& {% j" ?
vItem.nIndex = i;
0 y2 r/ E ^% b# H4 K0 L" z }0 Y* @8 }9 I6 g! I6 @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# S& \" h1 s8 A$ p1 ^% W# h }
3 Y2 [# A% P* Y7 ~! W5 b, \ //////////////////////////////////////////////////////////////////////////6 W. X+ y) i g8 A; n4 [
sort(vItem.begin(),vItem.end());//排序
: [( F" i7 ?' [( p& C- B- o //////////////////////////////////////////////////////////////////////////
, u* M4 n4 r/ P% M2 a/ O' E1 ] //交换) L$ |" s2 I7 u
for (size_t i=0;i<vItem.size();i++)
/ j* i# n: G/ H4 M7 i% a% Y {' ]# L+ g: x3 t5 H; S' e) D7 [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: ]9 K/ a% U# ]! {& w; ~( @! |$ s pInvSort->Add(vItem.nIndex);
5 w" U8 Q! \5 x7 O+ t }
7 L2 R+ x* b" K# j BYTE nDestPos = 0;2 ^' B% I y4 m' c; h
for (int i=0;i<MAX_INVENTORY;i++)
( d' ~" u2 @* z/ S: i! N {
' F; v# b% p% U% p2 g7 _) o, O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ l3 \9 _ C+ |" E. l2 R! G4 X
if (pItemElem)
9 D8 W* \4 o: N( f! Z3 G {3 N/ P0 a3 D6 r2 e c2 a! H
if (IsUsingItem(pItemElem))8 X% p P) C, e# g* F
{* G1 F9 b7 P2 r- b1 @+ q+ J r
//这个位置无法放
. c) ~8 _' ~7 P" @2 \+ J nDestPos++;1 u5 `# N7 [' ?2 N& Q2 K$ C! Q
}+ G- h f( c, A! I
}
$ X6 b5 N, P5 p- q) M! ^ BYTE nSrc = pInvSort->GetItemSrc(i);
: @# U1 z# R* V1 G# U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; N0 z. y6 ]2 A if (pItemElem)2 n$ N) N# D6 T- c7 {7 E
{- _2 t% c/ h' `0 W7 ]" N) R* Q$ O! |* B
if (IsUsingItem(pItemElem))
4 L) V6 Y3 D2 P% Z. Y0 J; e! f {
- A; i$ K. C, [% z //这个道具无法移动,跳过
3 x5 A( g0 Q# c! g continue;3 p: [# I; K. d/ I
}
/ [% T+ X5 l, A+ E K# P! I# t6 V }else{
( d0 c* @# R( _- {# A //空位置 不用动
; M9 p& p) J) E/ ^1 _ continue;- m0 X7 {# a: d7 q, E/ Z' h1 m
}, y$ Z$ s, \. `7 {# x
//////////////////////////////////////////////////////////////////////////# R7 w8 {" Q7 Z0 ~+ l7 L/ k* {& ?
//开始移动
' Z/ L" ~0 S6 a; ?) p- m7 e if (nSrc == nDestPos)/ N) A9 }! o. l1 c
{9 q# e8 j. S. A$ Z3 S3 }* ]
//原地不动3 i5 A* Q& k) D) d! h# [2 U. h% L
nDestPos++;. S: \1 Z9 |# a' C7 A* O( q4 O8 k* Y
continue;5 C S( F: }* N8 x2 x5 Y! ]
}
7 \3 Y1 ]9 |* K1 Z pInvSort->MoveItem(i,nDestPos);) x' n0 A6 j9 |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 B- s/ L" V8 }5 c
Sleep(5);
% e- m9 f9 X5 y7 s( B //Error("移动 - %d->%d",nSrc,nDestPos);+ B& y, E# Y! x$ a' C5 N9 Q7 [
nDestPos++;
3 @9 P' t8 x& I* |" w, e) u }0 F" u, J0 J% ^* V2 O3 k$ u
//取第一个元素的信息
7 i& ]" n$ |, t! {$ s! P% p9 @ /*; n* U/ J4 Y3 C* {6 U5 O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) f; l) _: U0 `! M0 J# Z' m/ } {
" }5 r+ r+ p" k) u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 |. A, R- r9 ~
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ [$ Q Q R- V$ P! Y$ c9 @; k
}
5 R9 S2 n5 d) l u0 o3 r$ J1 W */' c( m( I# q; c9 v0 F; l' ?1 f7 b; F
//////////////////////////////////////////////////////////////////////////
/ `5 s- o' `! h* M) y( s; e break;9 X) a* H) ^: R3 z& ~
}
8 t; E1 v1 A/ e" z: { }
9 E4 l1 z* @( f, k}
1 s% @# ^5 S+ w+ e/ P( ?% Hm_wndMenu.SetVisible(FALSE);; A2 q- D6 `# S+ \* l0 }" r
( R$ P" a% B7 C8 X& {--------------------------------------------------------------------------------------------------------
) e% m- _. i3 |1 _ B) i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 f, V6 }2 R1 }6 A2 @* D
{! q) r/ n( r1 h/ P) t9 P1 i1 c
BaseMouseCursor();* Z+ i, s& m( Z3 m8 t7 l
}
K: o4 @8 G9 \; F% h k在其下添加:% l8 O, c8 x7 {0 A0 J: \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 r* o3 ~# L0 [- w% H, v
{0 N+ z. C3 c2 t9 a; c& n8 @
m_wndMenu.DeleteAllMenu();" }" }2 ~+ d' T# Q5 _1 d
m_wndMenu.CreateMenu(this);
* E9 { k7 j0 qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 D6 @$ F7 p% `5 t' X
! k4 U0 G! B# t# J& L% B& F% r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 W" Y; Q" ^( _{; l% q2 n) A8 @, J9 n7 W+ }
//P以上级别才可以删除所有道具
8 R: P: w2 k+ z+ ]9 t' _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 A6 J0 `0 ] j2 j d2 v* I}
$ x% Q, b& S+ n7 @# Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 K4 z/ k$ B' M; |+ Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ G) l9 \( }" T7 P4 U, _, g- G
m_wndMenu.SetFocus();2 @+ k* s. A3 {% k1 F
}
; V" `5 D) J8 X------------------------------------------------------------------------------------------------------------
# O( D2 l+ z ~ y( X: o: L/ W*************************
. @5 k# F4 G4 X! k: YWndField.h文件+ p: A B' f3 V, d8 ]0 T
*************************
9 B! L- A7 g8 I; I# E4 l搜索:BOOL m_bReport;
# Y' u% ^7 r0 G! I3 K' b- k" e: i其后添加:- Q+ z+ w( ?' e3 b4 O- u
CWndMenu m_wndMenu;/ R# m; b* X, ~2 P7 v) O* {% T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 B6 X Y2 B5 z* ?7 I# `, n$ Q0 p1 b
其后添加:
, f' a5 Y- P* \! O0 Hvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 j. k' B$ f( H3 k0 o) O
* p3 u7 G' X: ^' {3 D6 o f6 q5 ?. e
|
|