|
|
源文件中_Interface文件夹下WndField.cpp文件
$ o1 G9 s& c: g9 Q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); c* u: ?. K- d# r
' h7 t' M) w, Z0 O. e# V
struct sItem
- r r) Y8 Y" l{# ~5 b0 h9 u$ q8 B4 t2 ?: \
DWORD dwId;. _) [- d( t+ A
DWORD dwKind2;+ _# S2 E* h( L- M& n
DWORD dwItemId;
% z% w9 h: h2 o2 EBYTE nIndex;
4 N3 r# Y0 _( l" a$ ^6 TsItem(){
* Y6 Z; i8 s7 z$ | dwId = dwKind2 = dwItemId = nIndex = 0;
+ _ M4 M3 y C7 X}
) a! T) O5 E" s( T' i dbool operator < (const sItem p2)0 z: d* E: W. h; r
{; y" v5 D$ W7 t ]( @3 l) Q: O
if (dwKind2 == p2.dwKind2)$ o `* `! ]# k# [
{& u2 {- s3 A% W% Z2 \$ m6 ?0 E
return dwItemId < p2.dwItemId;, B# F% z, r+ y5 R
}else{; i0 q A( f; c9 D1 j
return dwKind2 < p2.dwKind2;
# X, H6 K, G) t9 E M9 u }
' r0 i8 }) L& s) O( |}" e$ j2 F) m- x& o4 t
};
?1 c. C. \- c4 ?6 G. c4 K: k, Rclass CInventorySort
% t/ f2 r& {" H{
; p0 h, p( F, n: m/ i+ ?( U- Cpublic:
" o. _% \1 P& A# i/ DCInventorySort()1 {3 E* d) B5 `
{% p8 I% P: `( f( n6 u) e! O
m_dwPos = 0;6 G3 v* V/ K& C
}
- u% I3 m+ G+ Q~CInventorySort(){}; a: ~, m4 B2 H0 d4 T) d! p9 S
private:
8 f6 U( e! O& f: t+ JsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' B; a$ \" R( n; m
DWORD m_dwPos;% k( O' @4 V9 m: _8 P$ P
public:
/ P# l0 u1 C- W K/ h1 a5 Wvoid Add(BYTE nIndex)
k! n% v1 X! Y. i7 d{
6 m( ~0 |4 S% i6 X D4 c5 d if (m_dwPos >= MAX_INVENTORY)8 a! N! [" D+ \, F4 P$ W0 e) n7 M
{! W9 t% k9 ?9 F/ B
return;6 V$ _) A) f' V% e3 P1 @- p @
}
5 B* Z* i' ]( {/ ? m_Item[m_dwPos].nIndex = nIndex;
' r0 \9 C' U% X# C$ I+ g! ] m_Item[m_dwPos].dwId = m_dwPos;) g7 M% X- }: O$ F5 K
m_dwPos++;. W& M9 o1 h6 I! {
}$ V/ G N3 u3 X9 U' o. A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: m: D( D1 i& f
{9 E/ ^: O4 r9 o
for (int i=0;i<MAX_INVENTORY;i++)- S [% z* b/ Z! ~6 F# e# ?
{+ i9 ^) |( u! T9 ^% g
if (m_Item.dwId == dwId)( s% |0 F2 U3 a& |7 X& C
{* \" z8 a0 Z6 w
return m_Item.nIndex;
1 z# @5 X& h) C/ Q }5 e% e" O# _5 J4 `7 p" k
}# V9 h' ]' {' }
return 255;" ]; J5 K. \6 A5 i& Z# r
}4 p4 |+ o2 J% D" ~+ d* ?$ p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 H1 f- A8 F8 ?& h0 M{6 h( Y5 O2 `# i0 L. [" L
BYTE nTmp = 0;# F# \& L4 G0 j/ k! r+ h
bool bDest = false,bSrc = false;
; {8 [" r& a4 j2 r& N; } for (int i=0;i<MAX_INVENTORY;i++)
7 z! x1 T' g' w" y {8 ^8 I6 P% z8 y! s( f" @ H
if (dwSrcId == m_Item.dwId)
0 `& @7 G" x6 K/ m) s H# [ {! h6 ?- K4 D" e) ^: c0 x t$ p
//id相等 则 改变对应的dest和src
$ z/ C2 D& V% M; W# C+ G7 _3 O nTmp = m_Item.nIndex;+ e( i; S$ h7 r
m_Item.nIndex = dest;; m3 R1 m3 B# X
}
8 c Q! U0 a2 | B6 }2 D }
& }- `2 {& v. H) D //临时数据保存完毕,交换开始
0 G: d" G* G( h1 ]1 c( e for (int i=0;i<MAX_INVENTORY;i++)
5 {5 t4 L: [6 J {: E4 \+ t; _9 Y+ N, S
if (dest == m_Item.nIndex)9 z7 s. O9 g4 G. M
{
6 z% E+ F& d( n, z5 p2 k6 U2 }8 n //id相等 则 改变对应的dest和src
- U, W. M3 A8 a1 F* }1 F) R m_Item.nIndex = nTmp;
p" t; X' l4 G: D }3 X Z# [9 ?. \ H; M
}6 U' F5 a& i, l$ c1 p/ l
}: C5 B2 r. S' o5 e+ S
};
" f9 F. C4 R+ _, M-------------------------------------------------------------------------
, x+ M, c" T! I( L. @2 m) L: H- ~# F" `依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, ]8 a4 d% F& h搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- a1 d% s. F# o( J/ Y4 ~紧靠其上添加:( k* J8 q; F) e4 z/ H9 k
if( pWndBase == &m_wndMenu )
+ ~; X1 n$ U3 ]/ V% {{! \) L q' v* t3 O: N
switch( nID )
2 C! p$ A1 y# I5 S {
. g5 H9 ]0 \, B" O% G+ a case 2:
* h7 u6 N& U- T {
# a! L. z4 p. e7 ] //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 g6 C. W+ c- b) Y: K if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 |- B* o: T' G( {0 x9 u {# B6 u ]- ?. m- p `; D0 n
break;( Y; z+ k2 d/ V3 D, c
}
1 P2 R/ L# W( o- z: d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 C) G1 x" @7 b$ {3 O {
; i) B- t& e* C2 B# W: G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! a8 c$ I* p# x. ~- M) f
if( !pItemElem ) h4 v% A) p5 A5 a+ K+ B6 o
continue;8 D$ n- v7 ~0 z. U! H& b
if(pItemElem->GetExtra() > 0)
& g& \: ^. [- f+ |$ o) v! o! Z continue;+ _9 L1 Z- ^. Y+ j: e
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # z r& I+ P- c) Q6 o1 F
continue;
7 g+ u; M' L# ]$ k if( g_pPlayer->IsUsing( pItemElem ) )
2 @% w3 y* F. t5 w2 u" q1 C' s' c continue;# m9 h2 y+ c" q) N7 Q3 w
if( pItemElem->IsUndestructable() == TRUE )
R, D! Z+ h; v' |- R {
3 t+ }4 @6 A; h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) L: c( O Z9 x0 y$ Y continue;
- ~1 e2 P: U* f }& n7 \+ K, ?9 X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
X& S- v8 T+ z8 f/ ?7 ~ O9 e" B }8 `' K0 {; G& C' }1 G. L
break;
- K1 T! \# h9 h c0 V7 B }# u) E2 ?- `5 r4 r+ y; ?& ^1 v% c* ?
case 1:
" q& V8 x g; e [" o: N {" m( \$ n# {1 b. |8 _' ^
//整理背包
3 ]3 q% [# g/ Z //////////////////////////////////////////////////////////////////////////5 R* y& s# I: A& J
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' n7 ^% ^2 j3 M8 ]3 \ ////////////////////////////////////////////////////////////////////////// y, {6 L& @9 a4 k e( W
//////////////////////////////////////////////////////////////////////////3 ~+ T4 Z( O' l/ R
CInventorySort* pInvSort = new CInventorySort;
: W9 O9 Y* q* } vector <sItem> vItem;
" }. b) q) D' f5 e% ] vItem.resize(MAX_INVENTORY);//初始化大小
$ h% R# t9 m) u1 K //////////////////////////////////////////////////////////////////////////( R( B# H5 H$ E; y$ P
//填充数据5 S ^" n4 c A4 j: j% {. s" q
for (int i=0;i<MAX_INVENTORY;i++)
8 L' H0 _# k+ |7 G- _( _" C4 w {# M, t9 A: @; L* i5 s( P) R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* @. M2 }* b5 s! B1 h# \ if (!pItemElem)6 R0 S5 _" i$ Z7 ~ x: e+ ?
{/ T7 R5 P: @; Y! ^ L/ w- j! `
vItem.dwKind2 = 0xffffffff;! U/ e" N/ C% `6 l
vItem.dwItemId = 0xffffffff; p! ~( x8 X }1 {/ h+ U
vItem.nIndex = i;
( b6 H( n' v: p5 E }else {
0 W, j& J9 R0 F! M' n8 p" p ItemProp* pProp = pItemElem->GetProp();
! k% x9 w( ~4 N+ Q vItem.dwKind2 = pProp->dwItemKind2;
. F4 Z! T8 N5 F+ |9 H* n+ Y' u3 p vItem.dwItemId = pItemElem->m_dwItemId;
; H6 d+ n8 D5 b: F9 m# s. r8 F4 S% G vItem.nIndex = i;' y0 c( o- ^% n
}* h/ V/ t9 K9 g+ W' K3 o7 w* ?( Z( V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" _9 w1 i6 B |
}" U9 f ^3 g% m$ Y3 \
//////////////////////////////////////////////////////////////////////////
$ O! I6 Y! d$ q! W7 O4 Q: x+ D sort(vItem.begin(),vItem.end());//排序, c: ^! y$ | x( S
//////////////////////////////////////////////////////////////////////////) o. v# {$ N7 O- z$ g
//交换2 U8 ^3 ]" T$ `- x4 ~( l2 u
for (size_t i=0;i<vItem.size();i++)
- {" m0 F& n% |0 D" w# G/ s' u {6 q( G2 L+ @6 s' z8 K1 q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. n/ h w' L# z6 j# U, Y+ U) s2 w
pInvSort->Add(vItem.nIndex);
$ ~2 p# i* b) u" d1 h; I }9 k" ]0 x8 z, S8 J$ l
BYTE nDestPos = 0;
' @) s8 T9 {' y: j for (int i=0;i<MAX_INVENTORY;i++)) D, v8 a7 n/ p1 U( b# `9 r% G
{
Z- L# s$ B; q; m+ B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& W; m7 V. P& ?' m# F# e0 U
if (pItemElem)
, W- \' L. f2 x" P" O% N) c {; S; @2 Z K( z
if (IsUsingItem(pItemElem))
3 p& D: _! @1 P3 r) D8 Q1 R { e" [$ j) f* x* r) O
//这个位置无法放0 V- z" J" f: H! y
nDestPos++;4 ]; A; J( H' I7 M8 X; Y
}
( c1 U9 j) v2 O6 N8 m$ l& t$ N4 w) f" D }. _$ J+ a0 B# ^$ B, d- g( }
BYTE nSrc = pInvSort->GetItemSrc(i);2 }$ M3 S9 H8 Y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* E- A1 U3 |. ]. f9 x: H8 J if (pItemElem)
) `; E) g5 T+ c0 f- \1 u, x {
! Z3 t2 X/ ^9 r# K S if (IsUsingItem(pItemElem))
( J7 z& t5 S7 h8 I0 l4 V/ S- c {& `9 `9 H0 K' J. A: u) ^
//这个道具无法移动,跳过
+ l7 y4 e& ?% v* f continue;: s5 Y9 i8 P) {6 M0 F7 p3 B% d
}
% l& a5 T2 e5 K7 T5 U" { }else{
. C% W& H2 S# p9 C //空位置 不用动1 a5 }8 t% J L6 p
continue;
2 X) e% X" `& o& ], y }
% C3 Q- Z) D( e0 [ //////////////////////////////////////////////////////////////////////////
/ ]/ \6 t$ Z, B; [ //开始移动
9 L: O7 g5 T! T if (nSrc == nDestPos)
9 L/ e/ T3 R/ x, Q {
9 ]$ o5 u; U2 p# k% ~ //原地不动
% k Z( I! X5 K nDestPos++;6 d9 _! f2 `& D" W7 A! Z: X/ p
continue;) ^$ ]2 z* L* D1 J, W p
}
+ [# Y1 R; h& ^) B K. S y pInvSort->MoveItem(i,nDestPos);
0 x+ H! y9 V/ W- v( d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. [- G1 z0 X) C2 g0 N Sleep(5);
2 y1 g, G- k+ `: E5 ^ //Error("移动 - %d->%d",nSrc,nDestPos);
- j. ]& W* L( } nDestPos++;
3 g: U, C) H+ A! W }
2 I$ I2 ]3 S' w- v& j# ]( J //取第一个元素的信息
' H0 P) L# d! s$ [( I! P /*2 E1 d5 Y# R/ N l! ~" z* d# A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 e$ W4 T& H! r {# @7 M; c) P* ?0 i9 Q; |# V* o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# `0 }1 o! Y# I, \% L% g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- D# c- w1 e& Y. V: q
}; B# ? I5 k/ w3 _ \; u( u
*/& l$ o# A. M, A/ j k1 H# _0 p
//////////////////////////////////////////////////////////////////////////
5 V) v u$ K% W( D break;
3 J' S& E6 ~7 W }
1 \ n* p2 X" [ H8 i d: c } 4 b' B% X' v/ |0 x
}" B3 e$ m! H' s1 M# h; n8 i: g
m_wndMenu.SetVisible(FALSE);
' J1 K- c. ^% w1 P% u* _' R7 Z0 P* q' I( P
--------------------------------------------------------------------------------------------------------: \1 O7 n* ~% e( G s7 Q. b% j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* T0 i9 }' ?+ l0 X
{4 G4 z$ s( e% z9 |: S
BaseMouseCursor();
0 O* a: A$ Y; N8 x( e0 I}
7 T2 z$ k8 k( g- f- }5 K在其下添加:
. p4 [3 ?) A! q8 O0 p& Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 Q2 T3 f5 d% B l7 R, Z{
) N$ y! R5 d" M$ C4 vm_wndMenu.DeleteAllMenu();
$ X: h' `8 b) r: _" mm_wndMenu.CreateMenu(this);! ~! i9 J1 ~( a" {4 Y8 w" O/ [+ Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' t/ m+ T0 J" C0 J. r/ K& N1 p3 ^
4 O8 N' M* K9 B, X& f
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 G; f j' v0 n% D
{
( L9 [! z5 i8 l b; d //P以上级别才可以删除所有道具# |& G9 @ K( C4 U2 ]! O2 S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% r, D; x' G% t/ ^
}+ w# j2 g8 E% I$ s2 y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 Y% @ y' n! M! sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 k' P9 G- ?+ }8 u; Q Um_wndMenu.SetFocus();4 P' m8 D! [ A/ Q* j
}" y' S' d! u/ k4 N- p0 G* h
------------------------------------------------------------------------------------------------------------. J6 w2 t5 v. V8 e/ g
*************************+ J/ ?. J) ]& i5 j
WndField.h文件
9 y" N6 R3 P/ J% L5 @: H*************************& b* P# h8 N% a: V
搜索:BOOL m_bReport;
* Y! {4 A9 f, f5 Z0 q其后添加:
) Z6 E3 y0 }8 O2 y FCWndMenu m_wndMenu;
. y1 {4 X+ f9 R! N2 [1 `0 C& Z1 i: _搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 F9 I9 ]1 V6 @ J其后添加:6 i) {' Q1 w. S7 F& w- q
virtual void OnRButtonUp(UINT nFlags, CPoint point);. R4 C! s. N4 @6 _! _: k; {, c
' O0 D( {$ W* N) c
: x1 ?6 @( r! X. q- {
|
|