|
|
源文件中_Interface文件夹下WndField.cpp文件
8 |0 u, w1 b1 @& [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 V- P! u+ k7 `+ q& c( ?
* j7 _' l% h( L0 i/ m+ Fstruct sItem# C1 n. N8 }1 Y+ O
{
) \# D' h G6 H$ G; A3 p. ADWORD dwId;; ]. {3 y. j' L7 z# k
DWORD dwKind2;
0 t3 ~4 u$ ]8 n, EDWORD dwItemId;; k( D7 P6 i8 e2 v0 F
BYTE nIndex;% N) O7 y$ V2 I# k8 V6 S
sItem(){9 Q, w- T5 ^0 o g" o
dwId = dwKind2 = dwItemId = nIndex = 0;
) {8 Y8 ?* b; {5 x/ T$ s# e" Q}, w( q- [$ [9 B- f( P. u) V
bool operator < (const sItem p2): o* ^0 E+ P0 B" v# C9 s
{* ^' f; L$ t% B0 g, C+ m
if (dwKind2 == p2.dwKind2)
# p3 h/ B1 D2 }7 b% [ {
5 q$ z1 C- c: ?9 P return dwItemId < p2.dwItemId;: Z7 O! k( X6 X3 \1 i. }* @! k9 W4 ]- E
}else{* G8 Y' v$ U/ t
return dwKind2 < p2.dwKind2;
; Y! n3 ?8 e8 l5 e, z& R }
. l7 l- C; x# j+ C( d7 g6 w}# m/ ?0 g, U4 q
};
9 Z( x/ {- n, D: |- C. o( H! O3 Y' Rclass CInventorySort* W' b# G( c# ]6 X9 Z
{5 P8 k* F& i* J3 l
public:
; ?' n) F6 K, V6 M) _CInventorySort()
5 a2 i- B* a( w6 H& O& b{9 Y% e6 V8 Q& [7 Z( h
m_dwPos = 0;1 b" z2 R/ Q( B& [. r$ Y
}9 I. g7 y% c5 s" V$ W
~CInventorySort(){} c4 C% N8 x( K2 O$ Q# b
private:
2 R1 m$ g% [( b; o+ D; P7 WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. K5 H' ~0 C" J) P' j" V- h+ O! I2 o
DWORD m_dwPos;
. B& ^+ c7 o: ?- T4 o/ Bpublic:1 t$ i1 M' O. r+ [5 F/ J
void Add(BYTE nIndex)
) f0 I( s. e& P) ^! M{
6 |1 W* y( F6 t+ N8 c7 K if (m_dwPos >= MAX_INVENTORY)
: G# t5 d$ g/ q+ ~1 r {
. X/ m! V3 F) e- J return;$ S1 ~! F0 a0 d
}
; K5 F; O2 ]/ c- _ m_Item[m_dwPos].nIndex = nIndex;# L, C' A) S. b0 q
m_Item[m_dwPos].dwId = m_dwPos;. i: j; r4 e6 J; I: ~) v0 d- G: T
m_dwPos++;" G* j9 @1 ]+ A: Y
}
9 A8 S+ d% u9 d- X8 x- L: ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 B D- s4 ~2 L% h7 P8 I{
5 V& j5 @/ D8 |+ R4 }0 ?$ D for (int i=0;i<MAX_INVENTORY;i++)
0 s8 _ t, X' B7 J6 j {
1 q1 ~& |* j4 |! D2 p+ T E. K B if (m_Item.dwId == dwId). X* z* m4 l/ G& w) v
{, X' M2 L8 S8 n4 i+ C. `( v
return m_Item.nIndex;
) b& O$ J( F" R9 s }( S' u+ K' g; m3 G$ X/ Y, {
}+ L' G4 l( _- f- L! n2 U
return 255;5 ]5 t$ M6 [' v: V
}
' W+ f3 w8 S' v+ X( }& {5 v" R+ uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
A+ @8 T: G. ^& t& Q9 i% ~ s{; z0 v" l6 X! d" u& n) X
BYTE nTmp = 0;1 U7 f/ b; l, u" C
bool bDest = false,bSrc = false;
& x9 z7 [9 Q5 j2 D5 }% i for (int i=0;i<MAX_INVENTORY;i++)2 f# E& @% x3 M/ S( t, x7 E$ S: [
{: m0 P: a0 H" ?, a: K& s' u* T. a# z
if (dwSrcId == m_Item.dwId)* \ q/ W$ h& ^5 e8 i3 |
{' e x& b U: q* k& I
//id相等 则 改变对应的dest和src! g. i5 }8 q7 c* n, z
nTmp = m_Item.nIndex;3 B& K, }) s1 c' P9 [( O
m_Item.nIndex = dest;
9 s, g' B/ R {% ~; B }
5 G* W9 Q3 u1 K0 K2 E+ X' O! K6 y }
& u, U$ T7 A8 q //临时数据保存完毕,交换开始! K& K" s2 V8 X5 a- d0 w
for (int i=0;i<MAX_INVENTORY;i++)
" P- D( a2 g2 S2 K% k$ M {" M) u+ g) p3 C( T) I1 z0 e
if (dest == m_Item.nIndex); t: g$ c. b: ?- E, s% l3 c
{
1 g; Q' x* m# X- g0 e //id相等 则 改变对应的dest和src
# `6 e3 R. @- O" B3 Y$ Y# B m_Item.nIndex = nTmp;
- s* C* L; {* ]0 A7 U: f. `1 y8 @8 L }
/ M3 n; k2 T; {! W6 W% [ }
1 K7 @. {7 h: u5 w}
1 R1 Y9 m; G- \' o7 z};
+ V }) r' k7 ?. ^-------------------------------------------------------------------------
1 D1 n9 m t; v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) _; Z/ P/ {' k4 L5 W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- ^/ e) [$ o# f, G7 w紧靠其上添加:
$ D5 J3 d& Z# P0 o1 Wif( pWndBase == &m_wndMenu )
) v7 z8 K6 {3 F{
- R! w7 ? _0 d% M2 E; a* u switch( nID )
6 \ Q. S4 J2 M; E2 P$ A {
0 Q, N' ?) z/ c- s- ? case 2:
4 g2 d' \% j9 e O {/ n$ |- p/ H" T: h( g F1 P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 w5 u6 T8 H, [- E1 b2 E if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 ]/ v5 y" a; O2 L0 X Z {
, T# U. i! V0 e t* c break;
7 o; h" j: ~' D j6 Q' Q }' Q8 a, u( A2 \0 i4 Z' Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 q$ z) T/ n N( c/ m* ^" O {8 W. g' U' M. f. d$ A! C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* k* n* B$ m& c" g
if( !pItemElem ). e4 _3 @) Y+ c8 _* H
continue;6 l+ W M/ H! R, Z6 Z8 R
if(pItemElem->GetExtra() > 0)
2 a% f3 k2 M D+ q6 s9 W continue;1 M7 ^6 l/ i9 G8 _ {: r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 i% q- i9 B& e continue;
* I( O* P' t9 ^4 Y! t" o T( ? if( g_pPlayer->IsUsing( pItemElem ) )
6 W0 [1 z' u4 ?' B- I continue;
$ [" i" H9 ?) a6 k if( pItemElem->IsUndestructable() == TRUE )0 _! I) ?0 v3 B4 v) H1 ^
{- J, E4 e9 B7 w3 ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; x- U. S: m1 a/ F+ @ continue;' C1 v) k& m) F
}, ]" ]+ @5 O3 e5 d% z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" N$ e! C0 y; I( S2 T0 L/ _
}
% w0 @7 F- M. |: H _ break;
: L1 N8 H% ~+ q) r% [' P$ l }
4 `0 r/ }7 d& i! B3 {" k& h case 1:7 B# }& `/ N- q6 H( a7 Z0 b
{
, h) ^9 o8 q/ q q //整理背包
% z e) W. t% D; l; w- C/ p7 R5 t* G //////////////////////////////////////////////////////////////////////////+ Z" t# |- Y) q- ?3 e& V
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' v$ R9 L( t; @* x7 W- n' ? ////////////////////////////////////////////////////////////////////////// t1 j$ p2 L* F3 A- k) t- Y2 @
//////////////////////////////////////////////////////////////////////////5 {: _ y+ G8 S, P$ B7 @
CInventorySort* pInvSort = new CInventorySort; P+ ^, H2 E! x: G0 e7 [/ B
vector <sItem> vItem;
2 Z! `6 D' }% x6 l2 G9 d vItem.resize(MAX_INVENTORY);//初始化大小
& b) o- A1 z/ z P. t //////////////////////////////////////////////////////////////////////////5 y( A5 M9 n5 b; c" Z: D- h" x
//填充数据
% c) v; B* a: U/ C9 L for (int i=0;i<MAX_INVENTORY;i++)
" g& N/ Y& k H7 ^ {0 |, ~6 d6 R4 v y0 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 s, \* L& G) |5 c if (!pItemElem)/ u; u) e1 ]+ g' @5 E* [
{
) d# @2 d4 i [1 F$ o vItem.dwKind2 = 0xffffffff;
& W' D+ L' |1 ^ b2 K {4 x vItem.dwItemId = 0xffffffff;+ e0 r2 P2 z* H% c- p* W
vItem.nIndex = i;" I4 g' B) D o }0 _7 F! q
}else {0 \8 ^4 J- ^3 ]" z" p2 U6 N2 g$ e5 M
ItemProp* pProp = pItemElem->GetProp();
. n' V) G" G4 O; X4 S' ` vItem.dwKind2 = pProp->dwItemKind2;
}, z! w) N5 j' U2 |5 O0 y vItem.dwItemId = pItemElem->m_dwItemId;' u1 T, Y- ?* E' W. F, S
vItem.nIndex = i;( @7 A: x) G" b0 a G
}2 {( x: N, w; B) |9 \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 \' ]5 q" B! B0 A4 {$ Y2 I }
* s7 h# B) J& t+ p4 v9 M //////////////////////////////////////////////////////////////////////////% Q; i7 ?- Y X! X/ S/ U
sort(vItem.begin(),vItem.end());//排序5 z* \* O/ B# `
//////////////////////////////////////////////////////////////////////////- d; l8 r/ Q/ v. ]4 R/ _; J
//交换) o8 c$ G$ D G* ]( V' @4 @
for (size_t i=0;i<vItem.size();i++)) w/ s) |5 F3 @
{# m, j+ D# a3 U- `& {: d
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 T6 M+ w! i( {: A8 Y- O pInvSort->Add(vItem.nIndex);; q4 v+ l, x7 G8 i2 q9 {/ f
} o! r" f0 C& C% v K
BYTE nDestPos = 0;
0 S5 f" B) q9 v% k& p for (int i=0;i<MAX_INVENTORY;i++)
2 O3 [% H9 H2 m% N {
% f" J& K4 `. o, k G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
@" a4 }: o. ~! D# @& O if (pItemElem)( x4 @9 `+ ^) ?, e' ~$ T I6 }0 x
{' z$ ?. M5 G2 l
if (IsUsingItem(pItemElem))' c' G, t2 w5 V. _ [8 b) ?
{
$ ?3 P( t3 v6 ?! C9 L2 V9 i5 j" Q% N //这个位置无法放
- k2 I8 s& L& D) e2 h nDestPos++;
: ^" P# M. |7 t/ |) H }
9 W! j" P/ v/ Q# x& u& z. A }2 O$ \. T8 f- x: J g2 u! C' V
BYTE nSrc = pInvSort->GetItemSrc(i);% b1 L; N# D* R% c+ z% j
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 f r3 z# T( m( Y( u" r4 B
if (pItemElem)$ M$ O+ y$ O5 j* [+ b
{
1 K6 {' `+ f. S& }9 } if (IsUsingItem(pItemElem))
2 _. E, Z) ^' _$ ~ {
7 l; k X3 U" Q$ P7 U. Z //这个道具无法移动,跳过! }* R3 g" |3 M Q1 I$ m, f
continue;
y3 P$ e/ k9 r1 H }% \+ `: \$ `$ L5 Z0 r# l A
}else{/ O( Q2 p9 S& ?- s S9 W8 r, P
//空位置 不用动
- H7 u: [+ q$ y+ M3 x2 U( ~8 ], ` continue;2 G( V, @3 [0 f- z& s- [
}
5 e# @+ q4 B" S/ e //////////////////////////////////////////////////////////////////////////( D4 R7 U: u8 x* _. I2 D/ \
//开始移动
: t Q% k2 r" X F5 O& P if (nSrc == nDestPos)
; [' r6 G, k& E0 O/ D5 J# Z {
) I9 _* g" O g4 ~% B- V" f: g //原地不动
$ R I8 Y* x. m+ c nDestPos++;
* H7 T1 U3 i% ~6 a! j0 V continue;
* R4 h- [# ]6 e. g }+ O! s) v) ]! T5 u
pInvSort->MoveItem(i,nDestPos);
6 O+ K$ r& l) s- \. o p g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 @7 n4 f" }) [- u, c: M
Sleep(5);, _* t* g$ [$ m( }; v
//Error("移动 - %d->%d",nSrc,nDestPos);$ X, }: C. x# k% |
nDestPos++;% I G' y0 b3 ]. g P$ f: a: S
}4 \% N" {5 I' I& f
//取第一个元素的信息: [( q( q$ T" D& @# `' T
/*1 b, B" L( A1 I
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 b e! u9 B o1 l: \9 ` {
1 r( P+ Y+ x6 X0 }$ v, }2 r% A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 o8 b* T/ ^/ j9 \2 X9 v g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 k7 } O' i0 Z5 y' @
}5 P) x! B3 h4 M& F' y
*/
8 @) E3 a6 F) ~! v% ? //////////////////////////////////////////////////////////////////////////' t$ `( H1 J a( L, D9 H$ t
break;
. Q r* c- d5 y }
5 q; t7 s) q0 C/ r } 0 [& M4 | t. Y& F' k
}
& ~7 |( E+ m F4 n% Im_wndMenu.SetVisible(FALSE);
( H* }4 j$ ^3 X5 X9 {+ G! h7 b' u- e+ p
--------------------------------------------------------------------------------------------------------
. A3 @& p$ T+ @$ |/ N! e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): V8 o) d7 [7 O
{
- E/ i5 K) X5 I, H6 DBaseMouseCursor();
! `4 b, m$ M4 p}
6 T& M& h" u% r5 k2 u$ D在其下添加:
; i1 i" x4 H& pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% a3 g2 p p/ K{# z' O- ` W( }3 f
m_wndMenu.DeleteAllMenu();2 Q: I, w" T q5 s
m_wndMenu.CreateMenu(this);
1 g6 ~( q5 c9 i% i& }# rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 b: l0 [6 u+ ~: I
! c n$ B! V' \' c, u5 l6 V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) A" P+ H" Q! e. C{
, Y0 v, C c M: {2 Q) C1 f3 `3 p8 Y0 c6 { //P以上级别才可以删除所有道具
9 O# ]2 D/ T9 N! V9 C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ d& ] E( N- D2 b5 `}
8 F* X' j4 s! r' p. B; I+ pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 h6 X0 [* b. }% F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 z$ V$ v; M4 lm_wndMenu.SetFocus();
" G/ d- j9 u2 r& L7 n4 o}7 Z% k8 J u, @/ I5 g9 Y
------------------------------------------------------------------------------------------------------------4 d+ F9 k2 U, ]2 C& L' A/ H. ]
*************************
# G3 A3 d& f0 XWndField.h文件1 C& H# g% W& ?1 c; b; l3 ~! n
*************************
, r. I1 D+ y) Z& D& }* `! _) _: k搜索:BOOL m_bReport;
9 K( _1 _& D1 e5 F- P( W# k其后添加:3 p- d7 g7 j; S+ [& Q2 P! {- X! H
CWndMenu m_wndMenu;
8 }4 w8 o/ z9 r搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( I, E- H3 f; {0 A+ _, f' m+ q" m/ o其后添加:2 S4 ?6 `2 }- L" B
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- s- O0 Y! {8 ]' O# |$ D. Y8 S+ Q- I+ ?6 B2 J
& K8 m6 H" l$ ~/ j; l3 W |
|