|
|
源文件中_Interface文件夹下WndField.cpp文件
8 E& c' s; }/ u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 t- [+ P' N3 X3 p
* `9 m' l% N) E8 O7 ostruct sItem
6 B, T7 @! [$ ~6 i- J{! K3 G2 [# U( U# m
DWORD dwId;& f6 r8 z) O2 |; @1 c1 `
DWORD dwKind2;
, a$ Q, {" u+ h2 I: |DWORD dwItemId;5 L& [! A# B0 p% m1 V$ i
BYTE nIndex;
- U3 _; C: |/ C! I1 K/ ]; YsItem(){ l: Q7 C+ p5 e& A) v) g
dwId = dwKind2 = dwItemId = nIndex = 0;9 O6 y" l+ ?. |
}, W" T2 {, ? h! j, W9 w
bool operator < (const sItem p2)# o5 b8 Q3 y0 N" o, Q" t
{
A1 Y# ?0 v% U) L if (dwKind2 == p2.dwKind2)
' {* r5 ]' o: e {
! I, k0 Y" a6 h6 D4 m/ `) k return dwItemId < p2.dwItemId;
4 p$ ~+ V' v- X' r: R' a! Y; d" | }else{, w# m1 g6 T! n
return dwKind2 < p2.dwKind2;
4 }; s" M7 o( u, F! D0 t4 } }
7 z8 A; P! q" E, w* x& [}
" e- z2 Y+ U' m) Y* W. V" i};1 y8 l: a7 ]) s7 H. G+ i
class CInventorySort# \1 T( m& L! y! u
{, |7 s7 k0 _, m& ]0 ~+ \' R6 A
public:
/ g7 n. D) `) ~+ {3 ^CInventorySort()' b B$ X& n" W( K# P
{
6 L5 _) Y. ? N) O, J: L m_dwPos = 0;
! Q( c0 V1 s' i/ c. J}. |; r% P4 g. |- f0 \5 p( l7 T
~CInventorySort(){}. X5 d) w& u& c4 H: y; r$ d. c" C7 B
private:
7 O9 ]2 c7 Z- [7 |( m lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: p& W1 b: C9 r: |# i3 Q7 {DWORD m_dwPos;
4 Y9 s3 g, p$ c( n6 ]( `! ppublic:
; x$ b; u2 Z5 l2 svoid Add(BYTE nIndex)
$ f8 g) V4 j$ v2 E{
: b# u# n1 N6 Q& U, ^ if (m_dwPos >= MAX_INVENTORY)
3 E M; M* c Y( Z4 D" ? { i X) d! c4 k4 @1 u
return;3 z0 F- R% Q* L0 @0 w" k" X" ^
}
5 {' U) F5 W0 N' M% j' [6 r. R m_Item[m_dwPos].nIndex = nIndex;
4 h6 u* i, t$ Y8 `: l+ F' J m_Item[m_dwPos].dwId = m_dwPos;
3 m( G" y$ n. L& S, l4 c m_dwPos++;# h4 E" Y" v8 `! S( n
}) V& I6 x8 S0 J; G9 v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; b5 e+ |5 V2 ?7 Y% V* b M }{
% k3 ~6 g4 ?% p! K, z o; _8 j: U5 Q for (int i=0;i<MAX_INVENTORY;i++)4 ]% J$ Q- N4 |$ i# J0 k
{
3 ]" ?) Z: [$ Q4 x* Z T if (m_Item.dwId == dwId)- G+ W% A7 d7 \( P8 X
{2 _) P% `3 z! d" ?0 ~. b
return m_Item.nIndex;% B& ?1 C3 \# z A& k( x
}
( ^7 O0 {7 z/ [+ m" \) r: j }
! J9 H1 r/ w& ~' P return 255;. m7 Z- d `' ?- }/ B y5 U
}
( T% Q |2 N$ ]) v& Z$ dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! i8 [9 M5 e' I( M6 D* t{
7 J' }' N4 U e$ c7 r BYTE nTmp = 0;; E( y# e. @5 H' {' L
bool bDest = false,bSrc = false;
2 D: S8 B& J8 Q5 t+ O3 _9 @6 M for (int i=0;i<MAX_INVENTORY;i++)3 a4 Q3 i C/ q1 m5 O! v! I1 U) s# q
{) B5 B, d& y) s5 Q/ Z
if (dwSrcId == m_Item.dwId)
. R/ t z& F2 a( e* w) F {
3 d& _5 q! ~: `" O4 V: b //id相等 则 改变对应的dest和src
5 w5 b! M6 G: W nTmp = m_Item.nIndex;( K& n% e4 x* O. F9 M8 ]6 N. j
m_Item.nIndex = dest;6 L8 f5 N3 y6 l
}& c) `+ r9 e3 v5 U" M5 `
}
. h4 F: o5 B) ? //临时数据保存完毕,交换开始- B s% H" T* J4 F+ m! ?* a
for (int i=0;i<MAX_INVENTORY;i++)
0 N" o4 K/ D3 a/ c& O {
' c9 x0 E! P! l A' d if (dest == m_Item.nIndex)* s5 K" b7 N, q v5 l- L9 M
{
% {( u: m. d* G6 l* F! p; p //id相等 则 改变对应的dest和src* y- R) g$ x! {# T* m
m_Item.nIndex = nTmp;& X! `' [7 n7 B( Y7 h3 \3 [8 Z
}: v8 t, ~; e. a) R' g; n% ^
}
# q1 S+ P z5 P7 Z9 H}
) C5 q1 `! N" _8 }; K L};( b5 s! s4 P$ x& `$ b
-------------------------------------------------------------------------" r. T* g& c: _ B+ y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 x' {& {& h1 f9 P$ Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 L% P* p# @% k; o0 o紧靠其上添加: E, n A4 H2 Z. s6 z o8 @3 I
if( pWndBase == &m_wndMenu )
1 ?% @1 }2 e; c ]. h3 M. M{& F1 v, O5 _+ B! `# @" J( i7 X) L
switch( nID )# z- r4 U0 g' H. S
{5 B, j* b. R% D' G
case 2:% C1 `6 i+ ?" g5 K# R$ y
{# ? @2 U1 e& ?" q8 V' O6 {
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- X5 T& T& H9 j& P/ f/ l8 E R, i if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# G6 W' z( z+ V* I; `' s
{
. E* n0 H/ I0 f break;
; @/ h% z% I, ^6 j }! U- I z7 V7 e. W; i2 e' Z( l- I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ w' O b2 v( v
{# [) U# {. m% u- f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 D& Q/ k$ Y; }( c y& g if( !pItemElem )
- h: X z: h8 r+ ` continue;
: s: D8 H+ ~7 L2 H; ~: ?, r if(pItemElem->GetExtra() > 0)
# Y- U* G2 m5 G* r" y continue;
' K$ p5 Q* x( b! i) i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & ]4 [5 g1 N/ ]4 Q
continue;2 [. H) z" `' \1 A* a. `. P6 B7 f" f
if( g_pPlayer->IsUsing( pItemElem ) )( d: P8 [/ p9 e4 c; Q! l$ |5 m
continue;
( w- u! |* m$ t$ o4 Z& y6 j if( pItemElem->IsUndestructable() == TRUE )
/ E' ~! g' C6 D {" V s8 s( S8 @0 \+ v; L+ @
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. G. ]* N7 y9 N {3 W& |. d" N
continue;# t% y* R) e- Q0 A/ y3 z
}
1 z/ @' j/ s& L- r g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* n9 w% V7 h6 }$ f
}/ x4 F! r6 l$ b8 l- W
break;
9 Q0 R7 n* ?1 s' Z, Y% u s. b }
( D, V5 r: B6 |9 I0 r. R* S/ u case 1:
: s# F7 [1 g- z5 Z( _ {# m, U4 Y9 Q [9 \7 t& g
//整理背包
! G3 x- F( [( N //////////////////////////////////////////////////////////////////////////- V) D7 w' `) q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 `- F5 P/ D( p5 ~: S7 G //////////////////////////////////////////////////////////////////////////
7 d! h- G! ~, Y- ], F; P7 n //////////////////////////////////////////////////////////////////////////3 t5 \" p! E/ `
CInventorySort* pInvSort = new CInventorySort;
/ s- N/ R2 w% x% { vector <sItem> vItem;+ R; s% O+ ]3 S, T7 _
vItem.resize(MAX_INVENTORY);//初始化大小
% }& K+ D1 N; _/ {* r% k7 j) M //////////////////////////////////////////////////////////////////////////
% Y Y7 l0 g! O3 p0 n0 E0 p //填充数据
! i% s# `1 C" s, Y for (int i=0;i<MAX_INVENTORY;i++)
( d* d4 P& ?( ?9 b3 g {6 g' x/ Y: ?2 m8 T* X' R2 b y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ p' e5 L/ u" Q% ]* \, u if (!pItemElem)$ r5 ]: M5 U. Z" a
{& c& X P, ~ J
vItem.dwKind2 = 0xffffffff;
1 ?, }2 ?( k9 \% V9 M$ o+ l vItem.dwItemId = 0xffffffff;
b3 e$ [+ S6 r vItem.nIndex = i;% V; i! n) b2 Z; m$ O) T, E
}else {% }1 a7 U6 P0 M6 P7 R$ S( }
ItemProp* pProp = pItemElem->GetProp();
) f- {, ~+ f% k; ]! O# S& ` vItem.dwKind2 = pProp->dwItemKind2;
. ]# h5 y, K9 i1 B) S: B+ [ vItem.dwItemId = pItemElem->m_dwItemId;6 d0 B+ M$ Z6 E9 B; D* N
vItem.nIndex = i;
' m0 K2 g$ |) H. `+ T+ Q }$ s, G Y3 _0 c! q/ u7 R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 T/ W& I- A1 C( j
}$ z% g9 i- F9 D- J5 x A
//////////////////////////////////////////////////////////////////////////( _+ M) ^) @/ s& U6 G; v7 ?" ~
sort(vItem.begin(),vItem.end());//排序
- w! H1 X, @% z' W% u, R6 W //////////////////////////////////////////////////////////////////////////4 P# r! ?4 `. e- X4 T3 k/ e: g, I8 t
//交换
" i0 M4 ?! |+ \, d" T; n: k6 \& S for (size_t i=0;i<vItem.size();i++)
2 U2 m& @, i* X4 W {
2 c2 C m6 {! X6 W8 P //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 c+ @$ S8 r* w T. d0 B& g9 G/ n pInvSort->Add(vItem.nIndex);
% E% H8 v' C+ Z7 P }
' F' l3 Z, |- r! N8 K; K BYTE nDestPos = 0;
0 C; n3 E5 }+ Z2 i/ h for (int i=0;i<MAX_INVENTORY;i++)
8 A* k9 s; u! v& q' g1 `; _ {3 q6 Y0 t1 M8 n# S ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ `& @* j5 B# q, V0 F% O
if (pItemElem)* R' X3 {# d- @- s$ g4 m
{
( Y8 {) R* k8 x; [! Z: e if (IsUsingItem(pItemElem))
4 G$ Q8 Q# N1 x$ Q- F {! j! j8 Z* R9 h7 V( K1 ]
//这个位置无法放
8 G1 L! e% E4 }( O/ @ nDestPos++;5 @% ?. `4 ~& r5 r* D0 r. Q
}
9 W+ z- q+ x3 j- U# ` }
5 O6 s% Z; m2 u5 x BYTE nSrc = pInvSort->GetItemSrc(i);1 N( M) v: d/ D& z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, @2 z/ @. p$ H ~) w. `
if (pItemElem)
! V; {6 `* A( I! O {1 M- K: ]4 z4 l3 R
if (IsUsingItem(pItemElem))! d1 h9 I+ Z5 w8 ^( c# w
{
7 t! q# Y# O9 E+ \ //这个道具无法移动,跳过
3 [' e. O8 G' f9 n. T* @ C continue;! k; p6 O& y4 B
}: v+ g( v$ K, R( P: ?! |/ ~+ `
}else{
7 i: ^5 `% _' Q4 ^ //空位置 不用动
" m# l% A1 d7 r. ? continue;; L: s8 s. a3 m9 _- E
}, v# [' {! B+ l, b6 P
//////////////////////////////////////////////////////////////////////////+ g, D, I3 C- Z& `, w, v
//开始移动) A4 ~) Y% u/ V! K) k5 Z6 X
if (nSrc == nDestPos)0 n& z4 `: N( ?+ q# M
{
7 U$ j, ~+ |& h* P //原地不动; f) S+ c$ p8 o* v( V
nDestPos++;
q6 r5 x8 Y. D continue;
* P1 u, T$ c* @! W6 x8 v6 \& K }1 L" _; r0 i: n* ~# A$ r% l0 X
pInvSort->MoveItem(i,nDestPos);
+ j2 w" w- ^! B. A! p! B g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ `* l5 G9 ~0 w8 k5 C5 E) l. b Sleep(5);( z# B6 N* D/ U. x
//Error("移动 - %d->%d",nSrc,nDestPos);& `7 r4 I5 x7 p' A0 N/ V# `+ l
nDestPos++;
' C* ^- L0 f7 K! y7 I" ~. ? }
" u4 @% z4 V, O4 H. W& B. \ //取第一个元素的信息
: j2 \ R# Z& U" j3 f9 l /*$ m3 F% U- [( Y' V, a5 l+ ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 A1 B" F. T0 G {( a' S6 g' p" H4 w" D ?# l& Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ b" T9 ^ F: Z2 @* H* n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, R6 ]% \8 v6 {) [
}9 B1 o7 F$ D; d7 R" L7 E4 _ l
*/; `' ?/ P( _6 u# R2 K( @; P
//////////////////////////////////////////////////////////////////////////
0 w3 M# N7 X. T7 w3 N break;: P/ Z ^2 n6 h. H2 O2 H
}
4 z- u8 ~. b# p6 n$ }: T }
% y: {: Z# W& t: u2 A" V% }% m$ o}
! \' X8 V3 g) sm_wndMenu.SetVisible(FALSE);! D. }3 E6 X1 u( L& r
& g9 \9 o/ z& |- v2 [) {% p
--------------------------------------------------------------------------------------------------------
) m. K5 Z& o Y+ `) R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) r0 y7 n5 [9 Y/ c4 k. R. r7 k
{: Y" y* G" z* z) I* Q
BaseMouseCursor();4 I: }8 W; k; n5 q+ P( E
}
% D" v( M1 I; h在其下添加:( R+ W: A* u: d4 P. m6 F4 Y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' A: j$ F; ^+ ]
{
3 y% X+ t# j# Y- w; M+ [m_wndMenu.DeleteAllMenu();. j8 R0 I9 G, z6 s
m_wndMenu.CreateMenu(this);
: c) y6 Q' t# v7 J% m3 Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 {$ g, Z, D8 Z+ M1 ^* ~! M) p* T7 P! g5 a& x! U) p
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 o/ p( k. t* }4 i. e* }
{3 w! P: c! k6 S& k; h" D- Y0 O
//P以上级别才可以删除所有道具! D: v' C% z) @8 W: v X/ ^, W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 l; {; c! d2 x9 x- D, M0 E1 l
}/ x; j# z+ b. y* {% h' N: Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' \$ S( w* T* U: X# L
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" ^' [8 D3 }1 j4 M0 K" | ~4 V
m_wndMenu.SetFocus();
- z) A* V! F5 {+ |; L4 P9 _}
8 N) o- o$ k# A! p& V! G& o------------------------------------------------------------------------------------------------------------
: s! r H/ \# t3 K% y' r# Q/ w7 L*************************
$ R5 p) h* x" \4 o7 ]' \! m3 c; QWndField.h文件
. O+ W. D. O! F( w$ Y; a" k*************************% j4 H# U, m3 |; w) w8 d
搜索:BOOL m_bReport;
; j2 |6 J$ ?- K0 p! q其后添加:2 ?' g2 r8 N; k {
CWndMenu m_wndMenu;
, p8 j% L9 m5 {& p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) f9 f- v5 F! z1 }其后添加:: v1 K% m/ ?5 g9 K4 A( x+ z% N2 |4 b
virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ o5 C& B; d: P" M8 ?7 K! {3 S
/ o( [6 ?# d2 ?$ `9 W
: I, S7 l- t' L. A8 M |
|