|
|
源文件中_Interface文件夹下WndField.cpp文件
$ m" q# X2 B# s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" p$ F# q1 {1 i2 @
2 a1 M9 O5 P7 p
struct sItem
: |+ v$ q3 I N{$ I8 E& R; D# d/ ?0 s
DWORD dwId;
8 U/ { `1 V6 _' h1 W, d0 l8 e, p/ tDWORD dwKind2;$ V+ a& L5 [; ~: s1 _4 \
DWORD dwItemId;9 \& w: f9 a1 ~& Q) R% i. Y
BYTE nIndex;
5 ~8 z7 V9 ]$ u0 g P9 bsItem(){
: v' B8 J# S2 P- W dwId = dwKind2 = dwItemId = nIndex = 0;
3 `, ?( o! Z9 ~. X3 V: H}
4 O7 O1 x7 M5 d( H6 g+ u! j/ Vbool operator < (const sItem p2)# w) r6 B5 s) B/ z" D
{
: z: n: X& F. X" r5 E% V if (dwKind2 == p2.dwKind2)
9 T8 j& T( N. I- h3 D* [8 \ {& B+ \) J8 u3 V& w
return dwItemId < p2.dwItemId;
' e7 ]+ G8 m: ]8 c( s0 v }else{% s1 B+ K& G u4 I6 w4 q
return dwKind2 < p2.dwKind2;
+ ~3 R! o+ T, j y. e }
. W1 h) j4 n) S L}
* y# a+ H& K! T! I: I, W+ U};5 ?! K& P9 Q% ~/ q. {9 u% p
class CInventorySort
" s8 B8 G0 T& |9 N{
8 r! O/ H( O; W! Z! K5 S" lpublic:" g' E3 B* Y3 F
CInventorySort() }( K% } ]" L; z2 Q6 g H3 ^
{
; O( q8 L" L/ W0 w1 Q m_dwPos = 0;, Z/ b; L0 p5 h V/ g, [
}3 C& r. I6 T4 y$ ]
~CInventorySort(){}
1 ~0 T' @) K; x7 Eprivate:
( ]! ], O5 E; z# [* R$ O1 c0 u8 fsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 g, u) r7 I+ w* q- O
DWORD m_dwPos;) H) q- r+ `) G: d6 P
public:; e# ^' r2 B0 x g, f
void Add(BYTE nIndex)
8 y" g4 R0 D) ?3 o s: E* j{
2 I* S4 U8 Y5 O8 S a3 O9 A% Q if (m_dwPos >= MAX_INVENTORY), q" c/ I+ `! i. u
{
( X0 ?8 S0 V' M return;
" j7 B: N) V: a! b7 u6 Z# d# o }& {$ [. h, i: Z( ~
m_Item[m_dwPos].nIndex = nIndex;
! R4 c3 J7 i# B" r" H4 T m_Item[m_dwPos].dwId = m_dwPos;
E: B, @- G2 T3 v f m_dwPos++;
+ T9 Z+ G! c4 X) j! \}5 H2 e8 G3 j( ~) m, c- h" M% U5 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) D3 L r& E( }$ k( g( M2 s
{
1 [% [ \3 f0 O! D8 o0 o/ `& [& o for (int i=0;i<MAX_INVENTORY;i++)
5 J1 P: a; N7 e1 b9 u/ z {1 b! i1 Y" e$ W) U
if (m_Item.dwId == dwId)% \! B; q# A. G: j, Z* x
{$ Y/ i4 Z6 Q( I4 b
return m_Item.nIndex;
6 ]. X7 K- H X }
9 n G0 ~/ p; U9 a1 _/ |$ J }% ^0 O5 P. i7 M' U
return 255;
/ S* H N" i# j$ c. d1 S/ F1 a}% c) ^# `1 v3 t7 G+ Z5 H) _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% ~ L* S5 O4 I8 V0 m
{
0 ^; A- p; s+ r BYTE nTmp = 0;2 _& p0 X$ S6 O; ?: e$ i1 T
bool bDest = false,bSrc = false;. A: w: R* `8 j+ X0 O( {
for (int i=0;i<MAX_INVENTORY;i++)% D$ F9 | U4 u( b- k% F
{
9 t1 G; t, h! r: R, }4 F if (dwSrcId == m_Item.dwId): f5 x3 q1 L( \( P ~
{0 _$ ~6 g0 q2 |* W* p3 i$ f g
//id相等 则 改变对应的dest和src/ B+ M) p: o' j2 z5 ]+ G" B
nTmp = m_Item.nIndex;& Y0 X7 a$ d5 v B1 p
m_Item.nIndex = dest;; T, |% j7 a- `' o {' g
}
" \. p. ]* {: I* J/ K; y }& V6 I% r* M4 z" |
//临时数据保存完毕,交换开始
5 ~5 y$ O1 h O d& v for (int i=0;i<MAX_INVENTORY;i++)
/ q3 N/ n% D" W+ a {6 Z" ^2 K' c( i2 E7 H& T {3 c9 H
if (dest == m_Item.nIndex)! ?. T2 m; }* a" i4 ^3 F! K
{. y8 ?0 p& X: B5 o
//id相等 则 改变对应的dest和src
2 }1 a' I8 \. r1 F; d2 R m_Item.nIndex = nTmp;# w! P; e* q0 K/ i, }
}
) V1 E( Q( `$ u) A; P( B1 j1 s' x }
& g: C. c4 Z1 M1 f}* l, ]+ W$ j( T4 e! T$ k/ v$ F
};
. f: m% l2 s1 u' j' B-------------------------------------------------------------------------( ?0 u* i+ x; A- F* p' _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ r0 z Q$ c0 }4 G% s- b! {- M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( N+ @ n# P8 f
紧靠其上添加:! n7 P2 |# X$ L- M2 k
if( pWndBase == &m_wndMenu )
+ J) Y9 _( }# ]: U{
* m+ L, e0 }) _, |; E switch( nID )
- W1 c# L4 F9 _1 @" B {
3 I9 @, u& x+ n' \: I% L( |6 C case 2:
) p" W4 O+ _# c. v {
2 N8 ]* S4 s( u- B //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 U; A' \- ?8 \7 {; d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ j6 t+ K: `* W, s) X, S3 W) u6 A1 c4 I3 P {" [( {' V7 c7 D( ?* d W
break;& h& s5 A: P; V: N* |: O0 M
}0 m2 z! T! _) r; J) t8 S- \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 I( e7 m7 @! x3 x5 y+ X7 Y$ ?- m {$ e1 v# c1 S/ h0 N' u( `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 Y5 F2 y/ |/ M( P8 p- w
if( !pItemElem ). j0 h9 u% @8 R% T& F, M% ?
continue;
; `5 ~) w/ n- `- ]" ]4 M if(pItemElem->GetExtra() > 0)* I, t, y! f: u" M+ V
continue;
' V; Q v) t. |. `2 l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; q' P7 J' b d continue;' j$ j- i: ~ l# e9 O1 `' z6 ?
if( g_pPlayer->IsUsing( pItemElem ) )
+ H; z' n1 T. E2 Q. f: `4 Q' Z continue;$ o5 H6 c* L3 t+ W; J+ H1 e9 Z
if( pItemElem->IsUndestructable() == TRUE )* a( d) v0 ~" a" h. v$ j7 F* t3 T' x5 G
{8 r' K3 d( B; ^9 T+ g+ P
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. X9 W6 I+ q) d3 ?3 G J3 Y9 L
continue;
- X+ u- w l Q8 g- H }8 r; Y4 u% n1 L Y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 p; K1 J- D4 Q2 ~- w }
/ K* r6 q: l0 ~7 S# G5 z0 b2 h break;+ _6 O% b" \1 R; B' M t
}1 [( V* P* I6 |- }
case 1:# l# N# A$ u+ o- i& V9 f
{' c S! j) ?- n% n$ i
//整理背包8 v" L! m% T. q. Z
//////////////////////////////////////////////////////////////////////////% f6 {3 e; A2 |/ `
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, L. {6 {: J2 B7 w$ `7 F6 { //////////////////////////////////////////////////////////////////////////
9 J' \! k2 J3 R( K4 T( [& F4 X //////////////////////////////////////////////////////////////////////////$ b6 j" }5 M- |7 \& I
CInventorySort* pInvSort = new CInventorySort;; U: n- G/ [5 b2 ?. s) C
vector <sItem> vItem;/ u6 Q9 _3 A3 s/ o. Y# Z5 e, y* Y
vItem.resize(MAX_INVENTORY);//初始化大小; c( D/ [1 ]3 l7 V, S( ~# }& m
//////////////////////////////////////////////////////////////////////////
+ f# t. i$ B P& q //填充数据+ v( w# D9 B9 ?
for (int i=0;i<MAX_INVENTORY;i++)
: t1 p4 t5 P& {" B {
e* F5 K: Z! |# p6 e! I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ B* q# P: H3 u! V2 F/ `5 ]% ^
if (!pItemElem)+ D( X3 t6 V. [! f0 N* d7 F
{, S- i* I; w1 u: Y- }
vItem.dwKind2 = 0xffffffff;
0 W& W3 \; ~+ |6 m vItem.dwItemId = 0xffffffff;
2 ?. B% T* E! q6 S/ v4 I; ] vItem.nIndex = i;) r& ^, m+ G3 ~7 X. L" o
}else {$ r N, m( q" v
ItemProp* pProp = pItemElem->GetProp();# v8 K# z$ U' C- p: n' l
vItem.dwKind2 = pProp->dwItemKind2;
6 h4 _9 Z" J. o) V8 S# M, X3 }! y0 O vItem.dwItemId = pItemElem->m_dwItemId;
# [1 m$ B7 n9 V5 |6 n vItem.nIndex = i;
) G5 L( U% r1 I* @- ?2 K }
' A1 w0 R) p3 P& v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 S8 O5 m/ [, S7 z9 M$ v. m- k }5 a& d9 [; i4 K
//////////////////////////////////////////////////////////////////////////
" F9 n# Z% r0 P+ x* G% Y0 i/ { sort(vItem.begin(),vItem.end());//排序
- L2 G! v0 ^7 s0 Z9 q* L) O$ ?! Z //////////////////////////////////////////////////////////////////////////3 c9 f- n) b" P2 m$ _- @. Z
//交换! l' b" L$ o) W! c/ v- A' D
for (size_t i=0;i<vItem.size();i++)) A. S) p3 _) [6 Z/ n: x; [7 o; a
{
' d$ w& m W/ |. U" |: ]2 ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 ~6 E4 n7 m4 c4 z* ~ pInvSort->Add(vItem.nIndex);
2 G; W b5 Y* A1 d4 A: i }; U3 N3 @/ Q a: @0 f
BYTE nDestPos = 0;$ Q5 p& S6 i4 L# P! c9 g4 j
for (int i=0;i<MAX_INVENTORY;i++)6 d: q, y! d! @
{
# h+ K9 B' \' M# F* q& J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 b0 ?/ v& b# I+ U8 V% l: ?' @! x8 E
if (pItemElem)7 ^: H* w3 @1 a* z
{
3 s% d% N2 a' [. Q* V/ e if (IsUsingItem(pItemElem))5 ?( \; I) ]& L2 K4 |- ?
{. m7 y6 d0 H7 h8 c9 l
//这个位置无法放
& l @9 y2 N- v$ { nDestPos++;9 h% i, F, e, p! W
}4 ^9 ~' W+ I- s% f" N& O( p
}0 l: B8 f6 T2 D
BYTE nSrc = pInvSort->GetItemSrc(i);7 [9 ]# V8 p' F
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! @& F$ y0 D: K/ W2 N E
if (pItemElem)
3 U4 o( {1 L. H4 S/ u* R% r( T {
8 ^! M; N- s/ m' C if (IsUsingItem(pItemElem))- I4 b5 C* [5 l6 e3 M8 t' ~8 V
{
6 j2 L% @+ u3 q5 z6 A+ ] //这个道具无法移动,跳过9 z/ A, L0 _& m" ^' H
continue;
/ \) J4 Q. i+ s r6 D }7 V7 _( K8 \; `1 H, u0 X% b
}else{9 k' h H8 X7 {$ f1 b6 {0 V O1 M. I
//空位置 不用动
4 [. }" q w H; T$ H' i continue;
2 E' H1 g( }- p+ r5 J, J, |+ `9 T }
( j3 r+ Z8 M) S8 t //////////////////////////////////////////////////////////////////////////5 D) w. P4 w0 {* c
//开始移动
4 }! v1 k% P, O: ?# Q$ R6 i2 f a& ^ if (nSrc == nDestPos)6 r& l- A( J/ p1 ~! x3 _
{
' w5 I' R1 H0 H% }/ g0 H7 ~* W //原地不动, A! s+ W# q5 E8 v
nDestPos++;
4 }+ {3 O+ G0 |+ o/ o- \7 c" c0 r continue;
' m7 x* {: |# F }
2 l4 D/ V0 R; z pInvSort->MoveItem(i,nDestPos);
# _1 D) S* h& R% a g_DPlay.SendMoveItem(0,nSrc,nDestPos);% c& c! m2 H' j* q7 \7 y: z8 O
Sleep(5);
) {4 i9 |4 Z, i1 E, n; A //Error("移动 - %d->%d",nSrc,nDestPos);
* L- C( ^) S; T/ T8 j nDestPos++;
9 g3 I3 L& U! O }
- v5 i# [/ }( u& R, f. ~- R //取第一个元素的信息' M) c& Y! w( ?
/*
9 }4 s; b* a# f8 E" j, | if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, v2 o K* r' @ {
1 g5 a. a1 T- S8 B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 f7 a* o; Y0 }( V1 K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 j: e. K R1 z
}
; C+ g* _9 ^5 b. y. m: x! m */
7 Y, c% i9 g, A //////////////////////////////////////////////////////////////////////////+ e; q; ]' a% X& j# G! q- D
break;
% p, S7 y4 z4 s/ `2 D3 n) z* B }
; p) z5 b3 f6 j0 m. M3 L0 P F# k }
8 S7 I# E) K0 J; c: l; Y1 j}* Q8 s( ~ x _( `% E; c
m_wndMenu.SetVisible(FALSE);0 a& M3 y, k' r+ v! ]: d
- [$ n1 t' y( e! v--------------------------------------------------------------------------------------------------------+ M$ x: a k2 M1 J: r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) S, M' N: o$ C% a! C5 T
{
+ w5 u9 W$ H K1 ?, KBaseMouseCursor();
8 c2 x5 J+ m! q1 N}- U7 F2 H- l7 U9 ^+ b" d8 D T
在其下添加:
1 {+ ^, e! T2 u# W( {; V4 ? rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 L7 y3 q, l5 C4 e H
{& I- d0 }+ y+ _" G
m_wndMenu.DeleteAllMenu();
* ~' c7 o! o8 i m& b% D* }m_wndMenu.CreateMenu(this);5 v% R6 Y8 D3 ?5 Y6 W
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 g. N# ]& n b* |: J5 |# G2 C: O4 K& U& E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. {/ o0 `4 T9 N# p7 {: ]0 m/ ?{. m3 ~- N: l( v
//P以上级别才可以删除所有道具- w1 z$ v5 c. \: j( x3 f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 w- o1 p7 a6 O# q& S, ~
}$ ?4 Z9 D: ?% B. H: z8 _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. V6 y8 c" u/ ^) T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( C8 W# `, j- c: d5 J8 Q+ d0 Am_wndMenu.SetFocus();
: w, ~4 j4 H2 _}& S1 ?) `! }; o
------------------------------------------------------------------------------------------------------------' w- m; F. I7 N" `' r3 A
*************************
8 b+ _3 z" z$ w, fWndField.h文件
3 Z- k; d/ k9 g& e, E! D# B*************************
: G% |( @/ J* @+ ?$ \ K; }搜索:BOOL m_bReport;6 L: y6 N% z9 `9 _) G% z
其后添加:! i* m8 y* Y( G) E
CWndMenu m_wndMenu;/ X% {, c) D4 O! i/ N" I, T+ \
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" K; a" E+ V& y; J! A3 j4 s$ y
其后添加:
! I3 H5 |4 I: Z* s- ~ ?virtual void OnRButtonUp(UINT nFlags, CPoint point);( H |" B" B m: a2 J5 d5 k' _9 g
. [ I+ L" E, d( `% P8 j) Z/ i3 t, ~# Q9 V Z( m5 p
|
|