|
|
源文件中_Interface文件夹下WndField.cpp文件; j. |) X! k* V: t+ }
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' a8 o" g$ W5 ~0 c' o
, E; O) M% M3 Nstruct sItem& G8 D& x ~: n
{
: U2 ^' a$ c @, s7 a E8 _! ADWORD dwId;+ O6 }2 |* c$ ?9 k" X* \, R
DWORD dwKind2;7 y2 V7 {) c7 ~5 D- B$ ]
DWORD dwItemId;) p4 f1 i7 k( F- i7 i
BYTE nIndex;
! T, M: z5 s! o+ }9 ?, n$ {sItem(){
7 v* `$ `8 q: o# u) w7 ^+ i9 Z4 s dwId = dwKind2 = dwItemId = nIndex = 0;# A* M z: {6 L( D/ ^5 _: m, p6 Y
} T J0 i6 Z* n
bool operator < (const sItem p2)+ |9 {$ ]1 U# L& R q$ I5 z& J! F
{7 l+ I+ A9 x$ R
if (dwKind2 == p2.dwKind2)0 ~6 u* Q* b% |- H
{ H+ j, i" c" a
return dwItemId < p2.dwItemId;
: O- L# \* [3 e6 Y* z3 Z }else{5 c9 |% E1 O: h/ i" \: x& c
return dwKind2 < p2.dwKind2;7 M9 O8 U- X2 N+ Y) C/ h0 S
}
) A+ Y3 l3 E1 L6 d2 w" S3 R, t}
5 O& s2 u7 `0 ~2 N" d1 a) Y};
+ N7 [7 g/ F5 }# l7 kclass CInventorySort1 v6 W6 ^" ], S2 G
{2 t# F+ x6 u7 q* W r7 G
public:
. J0 x0 P3 R* n- m' M3 fCInventorySort()
: M2 p' o8 g7 T# s1 w' ~{, x3 t. k: s0 o
m_dwPos = 0;
% o* ?3 c# f( b7 s/ N) ^}$ X; i% B6 A! B& |5 e
~CInventorySort(){}
2 v' u9 i' l( f3 k1 Bprivate: K1 B" W% I% e& C9 a3 p- z" Y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) P2 l0 t+ m k" D& k7 ]8 n$ rDWORD m_dwPos;
9 e# S0 R1 @: A1 Apublic:8 @6 F$ x- { s \& \8 Z" v+ m
void Add(BYTE nIndex) ^* x ^. C% G- D% T8 k
{# ~/ ~2 @6 ?. e, a/ D5 R. L2 w% G6 d$ z; `
if (m_dwPos >= MAX_INVENTORY)/ r* P! i6 F/ F& K; E% X% ?* y! s
{
& E, l$ n8 a' S# n. Y# }& D# h return;
0 q, \) c9 L/ h- y, x' f% y }
4 u1 X5 p1 H. Q( }" N m_Item[m_dwPos].nIndex = nIndex;
& |6 V" a9 d7 H m_Item[m_dwPos].dwId = m_dwPos;
. @1 D b0 B7 C. r1 o m_dwPos++;
3 a7 ~; T. |; d" @0 z/ I1 Y% k}6 @8 S1 h( `1 I) o" Z& P, z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 o4 g/ p4 b* O4 E$ d) D{+ w3 R. Y- i' c0 `7 u
for (int i=0;i<MAX_INVENTORY;i++)+ {7 Y* d4 ~! [- P3 s( L3 _# \; _7 B
{
( N* B5 d* B% F9 z- {8 d5 G9 k6 y if (m_Item.dwId == dwId), y p' Q8 Y, Y" l& s
{) U* m7 e. t# o5 k7 ]7 L; q7 ?
return m_Item.nIndex;
! P" ~$ F% _2 a' }% v }
# Z: R a0 U4 f }7 r0 D+ x0 W% g1 y1 {0 g! O
return 255;0 Y3 X, R8 ~1 \+ K) U7 ~: k
}
0 W2 f& k* o6 ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 h' p/ I+ U) @/ K; M u! U! j{/ o& v, ^# J |3 I5 Y
BYTE nTmp = 0;
& E6 q: q% j1 g! B7 p0 M bool bDest = false,bSrc = false;4 T" L. B* i& |. ^/ A! c
for (int i=0;i<MAX_INVENTORY;i++)& f& ]7 G' [! h* z
{
4 [/ I2 X+ B7 h( a: p1 y( e* T if (dwSrcId == m_Item.dwId)! t6 n4 N, m1 P! j" f8 H+ B5 U
{
' l [! |! ~9 F( T5 i //id相等 则 改变对应的dest和src
6 b$ O8 l' K1 u( D5 M, \& q nTmp = m_Item.nIndex;" z3 e' B2 a5 K; l
m_Item.nIndex = dest;
, u u8 V3 O8 U0 v- ~ }
D+ B- f& e' Q; v. f4 \! x4 j }% {# y# U9 y, i; T4 j$ ?7 ~
//临时数据保存完毕,交换开始" N2 i. ^4 s# T; M
for (int i=0;i<MAX_INVENTORY;i++)% w0 O9 k1 n0 a3 b$ _0 o3 b) @
{
" H, y0 r8 b* a. [% u2 q if (dest == m_Item.nIndex)
2 z. {, L! O( _/ ]. d {
# \9 h5 A5 r2 k0 {9 D# h) p4 W //id相等 则 改变对应的dest和src q6 x5 y; H* ~
m_Item.nIndex = nTmp;6 o: F1 o& N" b
}
" N: ~- m9 p, q6 ~ }
( c! Z" Y! J) p: d- F ~& z}. j4 G: V% p3 b1 `5 K8 v
};& v' o) V5 x5 M! h! h; b
-------------------------------------------------------------------------
4 d5 N" G, Q0 T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 L9 x- D4 {% o8 O4 h0 [搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. f9 a3 V+ |' r紧靠其上添加:
2 H6 H# b) O( a4 E/ y9 P) \, Dif( pWndBase == &m_wndMenu )
0 m& r k% N5 S1 g1 u4 ~{
; R S2 f0 S$ P switch( nID )# y8 \' p; X5 r7 n1 K1 p. Z
{
/ L7 @. D6 a# G3 t( f/ Q( u. E case 2:
$ @, ?" a& L+ i+ Q) [# m$ d$ e {
7 c6 x. r. [! ] p8 Q$ V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' w/ n% }2 y3 J4 B
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) X7 V- I' ~" D7 N6 Y" {6 e$ {# [* b {
0 Q9 ~: m. ]5 u9 r4 _ break;
8 a% E2 e$ T& e8 ?( l' ` }. @2 P& h; Z2 O& Y; i: R1 b' S) A
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% [+ B5 y3 v# M8 i0 Q
{' \; K' p; T& a: K0 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* ~4 n+ b4 W2 R. m& v* K- e( r if( !pItemElem )# Y# p7 A- f- I
continue;8 ]: f# ?. [% Y) X1 ?7 T2 p( O1 ?
if(pItemElem->GetExtra() > 0)5 }) K" ^( S0 s4 N
continue;+ ?& c3 @# B4 _# B. ^/ u+ i
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& O0 u; l+ [; Z! |3 a: k continue;1 T; d* V5 s" g- Z- i
if( g_pPlayer->IsUsing( pItemElem ) )
6 k4 n, c2 ?2 f. N1 X) J: ` continue;& k, ^+ Y6 M/ a9 Z) _) R. l, o+ ~
if( pItemElem->IsUndestructable() == TRUE )
# w9 `2 F: K! q& I {
; w5 k" x) F. I" L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( x- A+ t* F+ D+ P% e( Z continue;
. W* F( L2 _) z! R& t }! s3 ~$ I+ ^# a1 v% J
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* \5 x: _7 {) t; X; ?
}; V4 ^4 g: n: j$ A4 S
break;
8 n" G& J( j2 i1 m3 N }2 \0 K; C6 W" @& H6 C6 k
case 1:- O+ A! ~, M- h6 D- c; @
{7 ~+ X0 |5 p; d0 M: q
//整理背包
& n" x( X" K2 A; l( m //////////////////////////////////////////////////////////////////////////
; S. h r: g( G //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& H& i& T7 \% N7 Q/ G' w8 ` //////////////////////////////////////////////////////////////////////////# s) \8 c3 }/ ]
//////////////////////////////////////////////////////////////////////////8 V Z# H. b2 b: s- P( r8 z8 e2 U
CInventorySort* pInvSort = new CInventorySort;0 T4 h% w- b& ^- I5 c |
vector <sItem> vItem;" B% \# B8 {, |# @4 }8 V0 i
vItem.resize(MAX_INVENTORY);//初始化大小% c; y* \- x0 F
//////////////////////////////////////////////////////////////////////////
- x$ q+ M W4 [- R: _ //填充数据, R# @/ m% T. T! A8 u& D
for (int i=0;i<MAX_INVENTORY;i++) h2 }1 C! W8 L% f; `
{
' h$ N4 Q( R h6 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* F+ g) t+ w, J/ e
if (!pItemElem)
0 R- u9 E# ^5 p" U; H4 ~; L6 I {
, T$ T. n, @. G vItem.dwKind2 = 0xffffffff;- C: X: L% ]% [# |+ G" x/ x0 u0 J0 ?
vItem.dwItemId = 0xffffffff;+ h: A& g& S+ P9 h. l1 b
vItem.nIndex = i;$ Z" H( o2 t, o2 e+ X) W5 x
}else {
5 }: ?% G8 ~. R' ]% O% K1 v2 S0 P0 s ItemProp* pProp = pItemElem->GetProp();0 {9 \# b4 X, V* \9 R
vItem.dwKind2 = pProp->dwItemKind2;
) Q1 n4 ^, V7 m9 R) \5 J vItem.dwItemId = pItemElem->m_dwItemId;5 @1 D; U% L+ M( u |9 c
vItem.nIndex = i;! R( H5 G& t4 S5 K+ Z9 j0 X7 }
}: K* S+ ]( ?. L! n9 b9 m
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* \# b# `9 ^' V* J d6 W }) D. j& S: t9 l% l$ i- R8 J
//////////////////////////////////////////////////////////////////////////0 l2 b" A: f, A- c) e( w
sort(vItem.begin(),vItem.end());//排序
) q( z: H) j4 t8 E n+ h //////////////////////////////////////////////////////////////////////////
3 R( h5 i- Q" Y8 ~ //交换" f- Y# j. \3 a8 p9 S
for (size_t i=0;i<vItem.size();i++) }1 S0 f% V8 R! A
{
! c* {+ v! A' d* B- d; X; n+ k! M //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 U7 G/ h3 l4 M/ T; _ pInvSort->Add(vItem.nIndex);
" |7 w1 K) {$ G5 ^ }
/ h* H, t) V, y- {0 R( S; P BYTE nDestPos = 0;
3 [* _; @8 D6 M: K( A, O5 H& [ for (int i=0;i<MAX_INVENTORY;i++)
1 n: H1 b) ^" s! T+ y4 ` {- u5 G5 L7 B) R+ n/ T K- s+ x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 P* o) d( e( K$ X% C+ H H
if (pItemElem)
6 D2 n( Z' f5 K+ U, o f {, R7 ?7 v0 a5 t8 o: u6 C
if (IsUsingItem(pItemElem))
6 N. r! g7 {5 ]& | {. X* Q+ `( y* @- ? e0 b( Y+ g
//这个位置无法放
" l2 Q, `$ h, N0 W `7 q nDestPos++;
" t1 P) g' e, ]6 W3 A' n3 L } R3 y* G; U* O' |1 p- s
} ]7 @" t3 \/ ~
BYTE nSrc = pInvSort->GetItemSrc(i);) X5 g' [3 @* x/ T
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: }0 @. ]0 |4 J) R4 ~$ ? if (pItemElem)8 c4 R. u, M1 x
{; i5 N* w* a6 [* {2 W R7 Z# t0 B
if (IsUsingItem(pItemElem))4 L* \0 [, E: q, a5 N. ?, ~
{
! l/ \: ~9 l- d //这个道具无法移动,跳过
" O$ q% H& z* h0 n7 H; T( U g. a continue;
2 j' x3 S; \9 a' v- g }/ ?' Z% V& ^3 {- L# U- P
}else{
k- q& j K2 q6 K* }: P+ H" M/ M( S //空位置 不用动/ R* _8 o- V. \/ }( [
continue;1 {+ Z- E3 u+ i5 `0 L
}
) C5 a' ^8 I) I" o( l$ A: e9 H( ? //////////////////////////////////////////////////////////////////////////) w' C R1 I1 A3 X- B
//开始移动/ y4 s7 O) f# r! e, e0 x
if (nSrc == nDestPos)3 _) J- F1 h5 L8 M
{
, n7 C0 t, K5 @8 h //原地不动
7 a- D) ?& _1 Q nDestPos++;
2 p. f/ B1 M! n% v5 N continue;# {! b* @* B: z2 q% h2 ~3 _
}- u# _' w' ] v: I
pInvSort->MoveItem(i,nDestPos);
- q: C. x5 \, b5 M! Y g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 o; i8 D# a- L8 u- @5 T, O
Sleep(5);2 o* _( U$ Y+ ?# P
//Error("移动 - %d->%d",nSrc,nDestPos);
# V! C! m- d% G' w1 }9 v nDestPos++;
) f8 ]) l9 I6 K2 `: b k* } }$ h# H" v- |% V+ [' J5 E
//取第一个元素的信息3 c( M+ }+ e" @; Q3 e2 d% y6 n
/*
# q0 z. w2 {# {0 i if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): T# A4 x# Y/ N- l4 q$ c5 K! \8 e
{
' w3 d/ ~% g, M& S$ v5 B5 K" j# i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 Q" `. {0 O! \1 C3 q' @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' j; o: M0 @/ J& W+ I, C7 `
}1 F/ N1 p9 u# L i1 B8 @
*/
- }0 p- ]1 u c" g3 T: i4 O# N0 n; R //////////////////////////////////////////////////////////////////////////
. ^5 f8 s" c6 R6 u break;
' p7 M$ ~/ ^9 B) H a2 a }
7 j9 _# p* M2 Y }
?, @2 a" b0 S; | E}9 e+ J2 p( g$ A' [" o+ Y& ]) ]. g
m_wndMenu.SetVisible(FALSE);$ _2 {& w* ^0 D. _* s; Q
8 p- u7 B+ [9 H--------------------------------------------------------------------------------------------------------
/ T! P/ s. j) T& [/ i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% c1 v( c: d3 ]5 X p$ n
{, t1 r* s! K) j' c
BaseMouseCursor();
|8 f; S9 F9 v4 a" _/ o}
) U- B! F$ q- s J在其下添加:8 \( g: O/ `2 \5 N: I% U
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 ]/ x. t2 I* F{
- U! G4 {: @. m8 n9 u" ~m_wndMenu.DeleteAllMenu();
- D8 p2 }( f5 d2 S2 Wm_wndMenu.CreateMenu(this);
2 t" P" u# D0 I; _0 k5 h6 D/ Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# y+ [5 p9 s& A0 `0 G$ r }% X7 S/ i9 N! ^% E/ W& H6 [/ g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ q+ M) |( E+ G" {1 x0 S
{
( k- z9 a, q, K //P以上级别才可以删除所有道具
3 u3 F, }9 C& h; y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# M& M9 c' O; f* \( l3 O% ?}. n8 S4 @' X1 P G7 ~
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 r( B. y1 P; s" q! e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. h1 s0 \2 Z0 G4 `+ v: x4 Qm_wndMenu.SetFocus();
' k) U! L6 ~5 S6 ^}$ P) X6 P0 ]# ~& i4 r4 t ^1 d
------------------------------------------------------------------------------------------------------------7 _0 e9 f9 E) i& a% O
*************************
' r+ R. Q' I7 PWndField.h文件
3 q% R, W S5 Z+ r$ t* D5 u*************************
4 p8 _6 M: E% ?4 }( k6 Y, O搜索:BOOL m_bReport;! `0 p) L8 ^) v1 X
其后添加:
Z$ H1 F2 f- |: W) ^CWndMenu m_wndMenu;6 x1 e( U {3 e# a8 Q8 q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. [) r1 j; l4 G& s其后添加:7 f" V; s+ v* R# ?( [
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 T7 U6 o3 i5 c- X" N3 F& e' p- ?+ K/ b1 i# {4 y B; Q
$ g( S$ b2 Z2 @8 t
|
|