|
|
源文件中_Interface文件夹下WndField.cpp文件
1 B8 p# a2 E& ]" X- b7 B) @搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 ^! R9 Y4 u8 k0 D, ^/ D
" e5 d/ C/ M3 }* Y ?" g3 C
struct sItem
# [3 a: d) \1 L4 [ p{6 _" Q& c/ M4 X# v& G+ s
DWORD dwId;; r4 Q/ `2 d9 n
DWORD dwKind2;
# ~& d5 N$ M' z6 l7 v+ }2 t7 R# rDWORD dwItemId;
) h8 v4 D) @0 Z2 H. j- Z) HBYTE nIndex;+ L6 ]; |* D) n! J/ @
sItem(){8 t% L$ {+ X$ V2 G+ a0 Z+ Y
dwId = dwKind2 = dwItemId = nIndex = 0;# F" y) Z4 _- [
}6 A0 G) {1 y7 x$ p6 Q5 B! n9 S
bool operator < (const sItem p2)
- b! H9 f' ~8 k5 e2 S; P8 D; a* w{
# q# \) H6 a0 E/ c5 N/ a0 ` if (dwKind2 == p2.dwKind2)4 o8 W4 }5 r" g" r* y, E
{
) a# m/ F% Q* V8 u/ L return dwItemId < p2.dwItemId;+ b9 R% b5 L4 R4 H9 H
}else{( c7 C, N% B" v6 z
return dwKind2 < p2.dwKind2;
- ]5 D+ N$ Y! ]% r2 k) x j3 L: p }! [+ e p9 t9 R9 @& _9 W( S! s
}
# S& T4 x, ^8 I; @" f};
5 E9 I9 q; @3 F, S1 o7 J* \$ fclass CInventorySort
% z6 m2 c. F! [% b{
6 b' l3 E& E' X) | k0 Z' s+ ypublic:
) Y& ^* a' n" ^$ aCInventorySort()
7 M& A6 w- D- J3 Z8 ~% Z2 Y7 \{; ]) p$ H. B0 r" w: w
m_dwPos = 0;
" |' V$ s1 ^7 `7 O, b! [8 c* [- E! K}2 K9 M6 K' p( t+ ^+ j$ q
~CInventorySort(){}
6 f& A+ F7 k1 Pprivate:; b& \' Z8 v. V# |! F. _7 K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# c! T* ~5 o% A; C* }' ZDWORD m_dwPos;) Z4 l4 j! z" F% m: m
public:6 Y9 _- A" w+ Y8 P# q
void Add(BYTE nIndex)
x: w ? L0 E8 [1 T{) y& U. e8 d+ C
if (m_dwPos >= MAX_INVENTORY)
, q8 s2 R: x& B+ W1 Z {
5 U% ]* d) i; C return;& t: m; Z, q M7 j) l4 s; \
}' n5 j$ \3 y+ t, U8 X5 i
m_Item[m_dwPos].nIndex = nIndex;
3 o& h, u/ E- Y5 `7 R P m_Item[m_dwPos].dwId = m_dwPos;
8 T J7 {( J7 i! F% q" Y$ G m_dwPos++;; {% M* g, a. ~9 E
}
' T. G8 R& L+ c0 x [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 a5 C5 L5 @$ Q{
" k4 b# Y3 V' X( \$ K for (int i=0;i<MAX_INVENTORY;i++)
- E1 f, V7 T m' Z2 o3 y- i {1 q, U2 S+ f& j8 m- | D! l. |
if (m_Item.dwId == dwId) @# f% ]$ L+ f0 c
{ L$ ?8 u* K) A. u. z% \
return m_Item.nIndex;
* {% m) r" t, b9 ?( ?2 x" u }" x0 U' m5 A1 _2 y9 c4 D9 |4 a
}6 }1 U7 c o6 J& h2 _. d7 a+ d7 G; g
return 255;
% ^" x0 L1 r3 L# D; f5 e}
6 g/ Q- B% I3 z8 H/ a# @" pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! Z, k5 G) @! \7 Y+ F{
" ]$ p6 M! }3 D BYTE nTmp = 0;+ o7 l! f- O9 ~
bool bDest = false,bSrc = false;& S& N& F, w4 G* S8 V" r. j. T& y r
for (int i=0;i<MAX_INVENTORY;i++)9 [3 _5 O* P$ n$ A9 H
{
: L4 I1 {! g* K T' k if (dwSrcId == m_Item.dwId)) [1 w9 X% |4 x! u" x: B
{
, ^5 i9 c1 `* {: Y! H //id相等 则 改变对应的dest和src, f, v7 K3 W h' l
nTmp = m_Item.nIndex;
8 E' K8 @) |- C- r# W+ K m_Item.nIndex = dest;! n1 Q; ]2 C& n9 F; t; A8 L( M! Y
}
& ^' j' m0 N9 [9 p ] }8 [; k d, Q6 z2 u4 Y$ `9 L( b
//临时数据保存完毕,交换开始& h' ~6 K+ {: b# T. z! }" w6 Q
for (int i=0;i<MAX_INVENTORY;i++)
1 m m8 F* V7 \3 X8 H+ \$ ~ {
: q, w+ s( q" E; j: K if (dest == m_Item.nIndex)7 T X9 z' z( A
{
5 N/ ?+ \: k, L* [" T //id相等 则 改变对应的dest和src
7 T; q- v6 x! \/ F1 a3 C m_Item.nIndex = nTmp;
. h" L. G8 ]2 R: |8 f }( @8 D2 ?( x5 w: g5 Q# k1 e8 ?
}
0 Z1 _( t# D! O/ ], W. L- ?. m- e}! I$ S* t, h8 E1 K8 e: ^) ?
};" ^8 t% O0 H% k2 @3 {* ?" ?5 Y3 i
-------------------------------------------------------------------------
' c7 [* k& X1 o( t4 S; w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" D2 }# z9 }! N0 g! Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( q6 w( P# ?% _$ v3 _紧靠其上添加:5 ^) }, b0 {2 J6 ^& @/ ^5 s; j& G
if( pWndBase == &m_wndMenu )
$ s( e; S# K0 k{5 B" m; }5 F5 Q \5 {9 l3 W0 w
switch( nID )! u9 s9 r- u. A7 k5 p+ e
{9 l& R: F4 O1 W, v' P, U
case 2:; m8 [6 l- ?2 F) k: U8 l+ Y0 C
{0 T4 |- p$ Q% e0 y3 z4 A' f
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" L1 g6 S) ?: z/ D/ u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ D/ ]7 m) L; ~ {# G& f$ M' t4 g' L% \/ t- M
break;8 D# d4 E4 Q2 z- ]2 N
}, C, N9 i x2 t% I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 n) E7 k6 D4 L) ^( n" W+ w+ X
{
) g w9 M/ @( I6 P5 L2 d: f$ W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 m- }, x: {3 e/ y if( !pItemElem ): |9 y& }8 }, l' y1 E
continue;
4 C3 u; p9 B1 u) s4 i if(pItemElem->GetExtra() > 0)
) n% \, F9 [! r4 X6 u continue;# b: D8 p! _; {0 c' r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# _6 m7 D4 n. E* F! R% X' \ continue;+ e- M* h% _: X% k* x9 [5 ~, J
if( g_pPlayer->IsUsing( pItemElem ) )
+ a. v, A2 @9 F continue; E6 [3 K' m, \& b
if( pItemElem->IsUndestructable() == TRUE )
Y [) S, k: f8 ?: [ {: k; n! }- z `( O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" O# N; \) y+ {4 q' u, R5 h6 N; h
continue;
c6 t3 O" w( S2 v8 z2 e3 b }
' T1 `; l1 {/ @2 W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! O' J \+ x& c, @
}0 I- B U( t$ J' Z# D
break;
) o& s2 u4 z, a) ? }
% u& Z& |; [8 ] case 1:5 @ u4 U" h+ K5 y
{/ \4 l: ^& m/ Q8 e9 j* M
//整理背包
" q# l. |- {; p ////////////////////////////////////////////////////////////////////////// l g& q- k9 B7 G `
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' M& [6 f) i7 h# Q
//////////////////////////////////////////////////////////////////////////* g) Z/ Z- C3 l& i9 [/ t: a8 P. S; T
//////////////////////////////////////////////////////////////////////////4 Y/ ~# p4 j+ B8 _1 B; s
CInventorySort* pInvSort = new CInventorySort;# a& |( J8 R. [3 t1 ]
vector <sItem> vItem;: j5 ]3 b# \$ _
vItem.resize(MAX_INVENTORY);//初始化大小
& G( |7 n! A# z& I" { //////////////////////////////////////////////////////////////////////////# C G l7 d- S7 Z8 A
//填充数据
4 g. I+ A+ z- }& [8 q for (int i=0;i<MAX_INVENTORY;i++)
8 s/ s. V4 k! C% @2 }5 D: P {- y* K" N2 T6 } _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ S+ u2 ^' }; m7 |* v" {0 l
if (!pItemElem)
0 ~, K6 C/ U' c. L+ t6 l* I {: `/ h1 O; y/ r$ ]9 {
vItem.dwKind2 = 0xffffffff;1 y9 g8 v g6 V j* |& t4 ~
vItem.dwItemId = 0xffffffff;9 N1 Y6 x# E, p. n0 I8 A
vItem.nIndex = i;* L+ r' N# K; d/ e/ f0 H
}else {5 f0 J+ c9 j7 Q5 o; t8 v6 e( Y& y
ItemProp* pProp = pItemElem->GetProp();
' V& C5 g% [0 V. v* | m vItem.dwKind2 = pProp->dwItemKind2;
( x2 f- _2 z2 @% i vItem.dwItemId = pItemElem->m_dwItemId;
( a1 ?+ y* G) l vItem.nIndex = i;0 l# l0 [2 [8 y5 n' W) Y
}
2 g& I* s2 M6 }$ I6 J! v1 w7 f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; M" M$ |9 g3 s5 A
}
' s* z8 K/ o. l6 K5 r //////////////////////////////////////////////////////////////////////////: C- T7 [1 [3 \5 J& d7 c$ c- @) y
sort(vItem.begin(),vItem.end());//排序1 D7 {* m+ w9 _( M
//////////////////////////////////////////////////////////////////////////$ x y$ V- J& i; y. r
//交换
6 r; g& ~& q# ] for (size_t i=0;i<vItem.size();i++)8 l$ u# o* \6 i. R2 ^
{9 A4 y m) e' |) R8 ?6 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 l0 I2 A8 J, s6 ]. \
pInvSort->Add(vItem.nIndex);
5 r( F1 t& U; @- o8 L* h: b- d }
' ~ ]: `; b5 L! A- U BYTE nDestPos = 0;
% l) d5 A4 j/ n- C; f for (int i=0;i<MAX_INVENTORY;i++)* r% {# ^1 B4 T, u8 n
{
- y- T. j0 O& ~& b5 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* \+ u( ?7 }! z8 I8 t$ ~
if (pItemElem)
( M3 c) U1 c7 {$ Z( e {9 ?- s2 \# W# U1 {9 O7 ^
if (IsUsingItem(pItemElem))2 t- j' r7 \8 ~, |/ @$ U8 |) n
{! q/ F# \2 x$ S9 j. l( t" ^
//这个位置无法放4 \ V- R/ s0 W3 w0 G! U
nDestPos++;
B" H* H+ I' F& X! U }
7 L( L# }. {# T) A# ?0 ]. e% Y }7 C( b0 M' H- Q9 r8 v$ @
BYTE nSrc = pInvSort->GetItemSrc(i);
, E6 s2 C% t# G0 X) {# O! Z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( ?8 u9 r1 n I* K* O
if (pItemElem)/ H3 D C1 q! b: G3 O* R4 g8 @
{
2 e% T6 Z$ g( B/ ?: f# w if (IsUsingItem(pItemElem))" `7 W) A( M( H7 `( v( Y
{
/ b* x! ?6 v% ^2 X. H8 W //这个道具无法移动,跳过
6 i" J* [8 I$ w2 x3 e$ Q5 t3 c continue;/ Z" ]/ [6 J1 @. O! t: X& w% y) l% M
}
5 i9 ^/ E' H& d. d2 w }else{
8 e( O6 |# d! I) _' J6 S T; c //空位置 不用动
* \' u( n; u: g2 P' { continue;
8 w, _4 p* a9 h: A) q0 W8 j6 _/ M }
% s0 w) i+ D* l: A1 b //////////////////////////////////////////////////////////////////////////+ `' a# S3 [1 o
//开始移动
8 v2 w1 m% Y5 I& R) }" \ if (nSrc == nDestPos)
% j; D* u3 [# c7 F# n9 l {
; n' c* H$ x8 b X2 r //原地不动% r! w+ {7 i. |7 c, j, h* V) Q& a
nDestPos++;3 i. D" Y, W/ H( b$ p% r/ y
continue;9 Q: m! I% ~6 q; @
}6 w+ o7 Z/ n! S8 |9 p
pInvSort->MoveItem(i,nDestPos);: N6 ?( z* i5 o7 _* K5 l
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ i1 O4 w) ]% U* z7 b) l3 Z1 P
Sleep(5);% {6 Q1 _" h9 b _" a6 o( p
//Error("移动 - %d->%d",nSrc,nDestPos);% F9 E; p+ ~) z
nDestPos++;) @# X) W% ?' S( x: h
}) t* i! D- A( B( c
//取第一个元素的信息
* w/ t1 k, ~8 s9 A C /*
4 M3 u' B) t O if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ H- f5 `/ J" u( g u6 q- M
{( n, C1 t" _& B' g& S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" y4 f8 i: p% ] g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' Y* h/ e3 X$ a/ J
}
1 p5 @ O% c! {8 x */" Z: H3 D- g1 }9 d3 _/ w: W
//////////////////////////////////////////////////////////////////////////
- l1 d# m* a2 W break;7 G! a/ \; e y6 \8 c5 A9 T
}
j* Q& _, Y9 {& l } 4 d" Q# G0 t2 s1 {: j+ R; l, @
}
) i' L8 \$ |: r6 A% A7 Fm_wndMenu.SetVisible(FALSE);
6 Z( b9 `5 q0 _+ V" a9 |
( ~: l" S% @4 K; c--------------------------------------------------------------------------------------------------------
' W# f; e9 D- r2 U" `7 C8 o9 {5 s搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ d- e. r' X+ Q" a: K) x( {3 I{$ z# f# V& |) v
BaseMouseCursor();8 Z( R2 o7 h. `
}0 A; o2 x+ t% w; [* M1 s& c0 U0 {$ H
在其下添加:
' c) u6 Q: Q3 Z% yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, O! P2 J2 `0 U5 B3 ?" V! K{
: q* i5 [/ r6 F( ?" u5 qm_wndMenu.DeleteAllMenu();
4 U& E0 H( `6 V' F& {- xm_wndMenu.CreateMenu(this);9 V- a! S% z" [4 k# p7 P
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ n5 E3 Q- K# G. ^: M* f& O7 h6 T
: o/ n& @$ t' o1 P9 s; O1 I u* H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( \( P4 i8 g) Y; z5 {{
' `6 b6 g* M7 [3 f //P以上级别才可以删除所有道具5 b' ?8 p, a3 W9 U. `' h
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: D* j+ r" @! Z' R% q}6 W' A) d$ c ^: ^' M) A/ E
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 S# `. U5 g4 k& b% }
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 o5 Q* a! [# {2 I% Am_wndMenu.SetFocus();
" O2 k5 Q G9 {9 w# u}% b- E' ~( p, a7 q( c- R4 P! W% R
------------------------------------------------------------------------------------------------------------. @+ j: H. r8 G6 f& M4 b
*************************$ _( S/ B J( s d1 R- g
WndField.h文件( W- q) F b' X: q5 V
*************************
2 d' e( l: ?* }. j0 v搜索:BOOL m_bReport;
- n2 l3 Y; g# T9 [9 I ]5 f其后添加:2 a: P4 Q i+ V' i
CWndMenu m_wndMenu;
- s" R# q' A$ Y/ x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( T: O% L6 `6 |+ s. K+ ~. c2 o
其后添加:, d: v2 C* G" H: v9 `" v
virtual void OnRButtonUp(UINT nFlags, CPoint point);) N; r6 r) P3 z) `
: F' I. Z9 B4 Q+ A2 B7 y7 {3 g% ?5 ?/ C5 u
|
|