|
|
源文件中_Interface文件夹下WndField.cpp文件# k1 i0 u. w7 ~4 F ?2 k% N ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 t% b4 p% d8 C9 O
# g7 X H2 A& e( b; Q3 Mstruct sItem# f/ G6 N3 M4 ]. R" j: }
{
* I0 w- d$ T- M$ W5 m# H: yDWORD dwId;; P- n _; c f3 e+ L( v9 J
DWORD dwKind2;! A- G& y) K# G0 E2 J: z
DWORD dwItemId;
) |8 t2 f+ t+ |" R/ B6 X* R vBYTE nIndex;( E, p% ^) P; N0 i! t$ U# ~( V
sItem(){6 N0 a0 c5 r: ~& \0 n, r, I5 ?; v
dwId = dwKind2 = dwItemId = nIndex = 0; g1 \5 B# z8 `" ~ A' l5 E
}) A- W" Z! e$ V4 a2 y
bool operator < (const sItem p2)
; l6 ]4 P# A2 _. V( c' Z- L4 S{( ^: T* A3 t+ I1 v' j% k2 z
if (dwKind2 == p2.dwKind2)5 _2 \; L' k& x" y
{
6 G+ l; |7 `9 m/ u7 P return dwItemId < p2.dwItemId;3 e9 K4 n. m# Q S7 G
}else{! r9 v e+ t& c
return dwKind2 < p2.dwKind2;; p) @- F9 d* W: e/ A6 m) s) z
}1 I9 { O$ i7 \, V
}# R' N1 |$ Q. ^. W+ Q
};' Q, p3 v1 p" H% D# l
class CInventorySort
5 i; {8 K, j/ e+ t- p{
6 J4 w& O- G; i; Xpublic:
6 j( z0 f, l# w3 s) YCInventorySort()" G9 C+ o9 B4 G. ~5 B
{
* O7 @# r; U( W6 i, y m_dwPos = 0;; j9 R& k# \% I" e- Z# w7 S+ l
}3 w$ h' v! y$ w% M. Q4 d, [
~CInventorySort(){}: E" w; S2 E; w
private:
^# Q F/ z" T1 AsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 A+ [& g4 F2 y! K" d2 r# [DWORD m_dwPos;% [! W; S/ M6 d- K8 I% a
public:7 b7 R8 `4 u9 v- Q( T5 {
void Add(BYTE nIndex) p5 x% T8 ? |( U) i# t
{
" q1 h7 M: ?/ c4 v1 U; H if (m_dwPos >= MAX_INVENTORY)% [1 K+ n2 v4 P8 p3 G# s$ O/ x
{
! d7 y! Q1 u- \ return; B$ f% L4 n( U* F. ~3 M
}
! E: K+ O7 A U! T m_Item[m_dwPos].nIndex = nIndex;
9 s. t1 M: X" z- C' C m_Item[m_dwPos].dwId = m_dwPos;! [0 V0 r6 L5 B5 o r
m_dwPos++;
Y9 K+ e* A( j% e( c8 W7 ^- X}
- q* X, x. \' K! I* Y3 z$ P0 hBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 J7 j/ C5 _, M6 I$ R; v% c{ F) w+ a* j- G9 d& E g/ {
for (int i=0;i<MAX_INVENTORY;i++)0 V9 F" D8 R/ \! \8 a
{
; h! p6 N8 `7 f! m if (m_Item.dwId == dwId)
" Q6 {( [. G0 m9 L7 r9 V; G/ Q5 s {0 G/ \( O$ y' l
return m_Item.nIndex;/ X H4 j9 X6 o' f
}
) v; N& i8 ]; o7 M0 F J }
) }3 E% D2 k; p9 v return 255;: c5 m' j: a) x
}) M3 b b9 |8 R' c/ q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 b, J4 G% a8 e' M
{
5 D' [$ E9 p/ }# d8 h7 R BYTE nTmp = 0;
) V' i; f" \% j/ M* u/ L bool bDest = false,bSrc = false;
. x A. Z" M* Y" m for (int i=0;i<MAX_INVENTORY;i++)
/ a! v0 s6 h+ C, j: _/ W+ ~: s {
s! p2 `9 d- G% Z) s if (dwSrcId == m_Item.dwId)! T9 a' C: @. G* K
{
' A3 c: H5 O* ^0 }: A: e //id相等 则 改变对应的dest和src/ k+ {3 q. {. n7 {4 G( x
nTmp = m_Item.nIndex;- o) V1 V6 m& h7 d6 c
m_Item.nIndex = dest;
# Y+ z! G) [! E! s& n, s* w) Q } Z4 t7 I/ \7 U/ P
}
6 w1 C# _1 _& M9 u) f. M //临时数据保存完毕,交换开始
* E' Z8 \3 d. \; M! z for (int i=0;i<MAX_INVENTORY;i++)
) g; e$ o/ M w+ u {
8 l: j- M7 [ H. _9 Q& A4 N if (dest == m_Item.nIndex)
0 E+ r, d# [0 q: N- r( u6 h9 N* n; C {
+ I# U7 Q! o" I% o7 Z; y //id相等 则 改变对应的dest和src
4 e- [7 t* U- C7 @$ b+ c' P m_Item.nIndex = nTmp;2 `7 I5 @) l0 F( i/ ^
}
# n3 J8 F$ G% _' y }
; B# g6 a W4 a( D2 A: J2 D2 ]}3 G8 V' h# t# w9 y; V1 V# V
};8 V+ j5 |: @, E% I
-------------------------------------------------------------------------. ~2 y. ]1 q+ @3 F* {% U7 n1 H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" [1 q+ z6 b$ A! ~$ a" J* |# v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 W0 g4 J0 U* S# D
紧靠其上添加:) x8 h) f! k2 G7 f* @
if( pWndBase == &m_wndMenu )
2 o! v( E# Q8 w+ L/ N# G{
C( Z# U$ W3 ? switch( nID )
$ v8 I4 p4 [- Q; }+ h8 H {
: j$ u( ]. ?$ u3 j+ C# E* o case 2:$ A4 s7 g- Z% c; w/ o* C1 o! f C
{
# ]% d4 ^" l7 ~. r2 j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ x: w8 `/ D' I6 Y0 D' X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 W& U) b: K6 w5 z: A {
6 {& K/ P( {* I# S r/ f9 s break;
. Z3 ]! C+ y7 K3 y* ^9 C }
7 U& z5 Z3 n7 `1 [4 y/ {7 x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' P# M4 y- ~+ v8 N
{, H, d5 i+ L: j" |7 [1 ?" Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 n1 F/ ~1 V' o0 S& ~ if( !pItemElem )
0 t g$ Z* |" [; @ continue;" h9 V; x( O3 u; a! T8 o( ^$ a
if(pItemElem->GetExtra() > 0)0 P( B0 U: y2 j9 M/ m% ~/ p p
continue;. Z# T9 g! `- B/ I- a( {2 X
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; T5 G) o& K+ Z2 f" T3 G, o continue;* `/ i& j+ v0 r( i
if( g_pPlayer->IsUsing( pItemElem ) )
, k8 Q$ i) k- ^. D. ]! P3 H. | continue;
# E# C1 S n- W+ C2 Y if( pItemElem->IsUndestructable() == TRUE )7 M- Q* x; E' u" U$ Q
{
, \# k4 G& e y. n; p/ g g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) i& m- }% Q9 f5 Q
continue; B ?$ A1 S, T/ y- G4 }* c
}0 b* d" K9 y+ `. ~+ A p& e$ o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ |2 ~1 h8 J! n6 n# {
}
7 F6 U9 X* j$ { break;
9 E# L" D6 U8 A3 ?+ Z R }1 `7 Y% m3 z/ y, R+ ?
case 1:0 N: a, z0 a5 o* B& l3 S9 N1 T9 Q; C
{
& t% ^; ]. P/ t: [/ t //整理背包1 \! L0 B9 _" u/ C$ _( @+ T
//////////////////////////////////////////////////////////////////////////
- A z9 ?$ M/ z3 W; n0 x4 V+ Z4 H) z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: |+ F; {+ p- S9 x% a" V
//////////////////////////////////////////////////////////////////////////
7 i: L: s# z% r l //////////////////////////////////////////////////////////////////////////
( }6 c6 U( A0 [ CInventorySort* pInvSort = new CInventorySort;9 m; g2 ]+ p d5 d
vector <sItem> vItem;
Z& {+ x! a& f6 M9 { vItem.resize(MAX_INVENTORY);//初始化大小
1 Y8 U I/ H; S+ P //////////////////////////////////////////////////////////////////////////
+ R$ ~+ o R$ E4 S7 P3 f //填充数据
) D& M/ V4 d$ Q' b+ n3 o$ K; E, ]* a- h for (int i=0;i<MAX_INVENTORY;i++)
/ \; R- ]! @* o$ H U {4 C2 S% F% T: A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' u8 l) c! p5 ]) Q+ Q. {( j5 y0 H
if (!pItemElem)+ X: j5 O' n. I( h5 @# k, U
{
8 Z2 C( L/ P/ G& k+ | vItem.dwKind2 = 0xffffffff;5 n0 L# O" Y; y4 I" D3 ?7 R2 m
vItem.dwItemId = 0xffffffff;
/ X3 `1 ]! N# k# E% h/ y) X& e8 Z vItem.nIndex = i;+ Y( h; c- ^6 z6 m* b
}else {3 ~0 v4 x. Z" v2 n/ o
ItemProp* pProp = pItemElem->GetProp();
1 w7 c9 Y/ ]/ Y7 y6 D vItem.dwKind2 = pProp->dwItemKind2; ]+ @& m3 Y& a6 E
vItem.dwItemId = pItemElem->m_dwItemId;) R& T: H j5 v0 z1 K. R
vItem.nIndex = i;+ R2 Q# Z# Y W. W* q" n
}
0 ~5 e' M6 g8 X$ F //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! D* ?! ?" n1 i; `# r, R
}
. ~! e1 Z `+ L" C //////////////////////////////////////////////////////////////////////////
8 C, q& q* U3 Q5 x, P sort(vItem.begin(),vItem.end());//排序
: z9 k7 l* s! `( S! q K8 U //////////////////////////////////////////////////////////////////////////
! p. C& }$ \ n3 w' l //交换; W v( j- v: O; u% }& ^
for (size_t i=0;i<vItem.size();i++)
0 G) v4 G3 I# n& J9 n7 K# n {
( F5 _, l. c/ h) Q5 g" V //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) c0 }5 N& z; }) p! v' n3 L% S6 [ pInvSort->Add(vItem.nIndex);' _; T3 J5 I8 B
}
8 l' }) n* ]1 x3 n1 H3 @, u BYTE nDestPos = 0;
9 B; m8 v) t6 {" d) W- C' ` for (int i=0;i<MAX_INVENTORY;i++)) x4 `3 u4 W; A- j8 Q) c6 ^
{
& [) n- L" B' L: H6 V/ L/ B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ @, W' h2 `2 c( Y8 [" Z* \ if (pItemElem). D7 F3 J1 @2 y& {2 z7 g
{' X* z% @7 O8 Q+ s; U# c
if (IsUsingItem(pItemElem))
/ W- ?1 K9 @" D4 E, K# b# U1 B) G' m {
- z9 J; t- Z6 C& ~; K# \$ L //这个位置无法放- Q7 F5 Y) X* H
nDestPos++;+ U9 g; j! \% Y+ L
}8 c7 ]! z$ X% K9 \3 _) O1 l. f
}
, X Z0 Y* b/ }+ j( @7 X BYTE nSrc = pInvSort->GetItemSrc(i);
5 h, `3 {$ G/ A! M pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 b& R" i/ n$ ^
if (pItemElem)% P- n; \- u; [/ z' u Q$ z
{- } z+ P, X* j% b
if (IsUsingItem(pItemElem))& G% ?% `& U7 u* g. s1 x; }
{- d- z+ K# L( ?
//这个道具无法移动,跳过7 x2 S$ Y4 M0 ]# M4 G0 m# f
continue;
/ {. G7 D- t$ R) W }
, F9 @8 r6 s9 R( D/ D9 z- M }else{
) Q5 v1 [" p' N9 S- p/ u' o* X //空位置 不用动
/ j% W% G. g: S/ U( J! y continue;
3 t" n7 B% S: W8 @, G3 V+ }$ n }5 P- l' Q1 I$ C. d! g
//////////////////////////////////////////////////////////////////////////) D4 E$ Z& G9 R
//开始移动. r) t B# B! f: R6 e# U
if (nSrc == nDestPos)
# j3 V- f2 }2 i5 n" [ {9 o U6 q: g$ H- C4 v
//原地不动- Z# u: D$ ^1 M& d0 A) U
nDestPos++;* l- P2 z& }. @# U8 K5 G; J W9 y
continue;- w3 u+ b, u) W' b6 z
}8 f" Z& }) k$ e) K
pInvSort->MoveItem(i,nDestPos);
* o' v9 O: {7 n g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# r6 Z9 C, b( a' U! q( v Sleep(5);
F' ?+ ?' l {8 C. r/ L //Error("移动 - %d->%d",nSrc,nDestPos);& }: x7 Q$ i; ~$ c! z
nDestPos++;
. C6 j: W" ?. P) B }
; O/ B2 f- }2 C# ^) ~ //取第一个元素的信息
6 J7 Y% h! e; `2 C /*
6 M, B+ N+ Q1 I0 B8 a$ A4 ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 W3 {: ?( N+ n( J
{7 d7 h; r; S* l" H: {) f0 r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 x% F2 U; A! N0 |) N
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); |( ~ e1 b( b- P0 O
}
; ]9 F& X" S$ B- b, F& b */# R" U, o- ~1 c3 D8 B
//////////////////////////////////////////////////////////////////////////( {$ r% P$ f1 e' d4 [
break;
7 g( H1 X' m; g; z% c1 w }
6 _0 A2 |" r, ^ } 6 ? r9 k( p7 x" w" a' p
}7 q4 K5 R& S0 ^3 f
m_wndMenu.SetVisible(FALSE);
6 y% ]5 k+ w# u$ \$ V2 C: y
9 U4 l9 L, G1 _& j& @) L--------------------------------------------------------------------------------------------------------2 b7 O$ g; D" k2 | M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 @* p* i- p* a
{
1 a6 H1 }! L& A( X& W c+ W4 sBaseMouseCursor();3 `8 M; f& @$ Q. G
}' d/ K1 k9 v- v, g7 C/ c2 G- c
在其下添加:* `- A8 t- U+ G/ z H' u" A; Q4 z; t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); [ F) |+ ~" p. Q7 `
{
, g' U* O Y4 N0 _1 h! ?) g+ I" hm_wndMenu.DeleteAllMenu();
3 T9 W0 e( J) p/ K: r' @m_wndMenu.CreateMenu(this);% |1 _* I+ l$ `3 r+ b* s7 ?3 Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) t, [+ M: f% d9 U) J& y2 i# R: ]. f# J, v9 F
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( p$ U& i: z, w/ U0 l{
4 _2 z C8 z6 F9 V //P以上级别才可以删除所有道具7 Y4 X5 X6 g8 \* W- U! u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" y3 e4 F, e9 x. {$ \}
. G& V0 L% {. u# Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ ]- [8 P9 S$ Q$ h7 h0 S i+ u' R
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 D9 S' l% x# l9 `1 [4 Q/ N# E- bm_wndMenu.SetFocus();: Y. M+ m/ \& N v! |9 G0 T8 n" Z
}
1 S7 u2 j6 I. o/ l. b. u8 U------------------------------------------------------------------------------------------------------------
. v* r3 P2 w1 o' x6 i*************************8 `& A# O! @0 `+ u# e
WndField.h文件. `- P* H7 z+ V2 |6 z1 s; A; f
*************************
* N- @0 ^7 Q- s. x0 e搜索:BOOL m_bReport;
% d R, x, @3 U2 I$ @. `4 c其后添加:
: _! v. u* M6 [( K" YCWndMenu m_wndMenu;
7 {) J' y F J* c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, q( g& d$ s( t) I- K其后添加:; Z. U' F+ |1 h- }
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ W5 z1 b* t5 P, i# u5 I3 L% X
3 H! l& c, G. S* s' M
6 C- ] [7 z& \. x3 L |
|