|
|
源文件中_Interface文件夹下WndField.cpp文件
( a' t) _# l3 l, P, i搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 G2 B$ t( e1 s, W. w
; C5 O. N, J* ystruct sItem
( ?+ K7 J7 X, u2 K( a{/ C9 C* `4 z% v: G: ?9 o5 [# ?
DWORD dwId;6 D8 X9 T: J' n6 \5 M
DWORD dwKind2;' J; i1 M, x$ }: `
DWORD dwItemId;% R, I' i. O& f, ~: R
BYTE nIndex;
+ s2 B" Q3 b" t: g w7 H2 l- W/ Z& csItem(){* A" y# E/ l* u% ^0 X1 k6 B
dwId = dwKind2 = dwItemId = nIndex = 0;7 M4 W+ Y9 A9 H( `2 q4 ~9 J A, D
}
q m1 v# g+ K5 a ]3 Ybool operator < (const sItem p2)
. t. E) J: I* k" ]% e6 @# z! }{
' h& H7 N' D* ?6 R if (dwKind2 == p2.dwKind2)
4 S4 S: A$ V6 o4 x, U0 J& P; U {0 H3 q2 t; k& c! O, b% p3 @% g3 R- i5 m
return dwItemId < p2.dwItemId;; y) Z: @) H J; ]" ?- q0 c) Z
}else{7 z! @3 C! K+ o
return dwKind2 < p2.dwKind2;
, _! C+ X* t7 z3 M& u }$ f/ n* X$ k/ |& _2 J4 K9 \ H
}
4 K& ?$ C2 e! R! J};7 y. z' E% I$ g9 d. v' j0 ^
class CInventorySort
# L3 W& a: @, ]# Y# b" `{4 m. Z7 ^7 Q3 d; g( ?- H
public:3 _. T; x! W% c( ~2 m8 G" D3 n
CInventorySort()
3 m; L3 ~( e8 P# r& M( h2 u& j7 I{5 t: h l0 z) Y: r' n
m_dwPos = 0;
7 X4 W1 V" I$ S0 c6 I}: K) C/ r h; b& `& C- A! [
~CInventorySort(){}
, e$ y: ~3 }: R X6 _3 ~private:
4 w$ _' |# y. N% ?5 V7 AsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% f$ P1 P6 X& h
DWORD m_dwPos;- O: v8 m4 ?. k% [# R& W& V: c
public:. v" K8 h% k4 T+ x
void Add(BYTE nIndex)
% c6 K# h0 i! Z0 O: w4 k9 y{
. y, [% N) G$ C- |( ]5 J0 m" Y if (m_dwPos >= MAX_INVENTORY)( _: P# T5 h, L1 x
{
9 O! J5 `% s4 M7 H( j: A2 P return;. a% E. D4 A" s) k; }; P' i
}
9 [/ I# z9 |1 h( d- J m_Item[m_dwPos].nIndex = nIndex;
1 V9 w1 Q [' m# | m_Item[m_dwPos].dwId = m_dwPos;
$ k3 p1 K: P% N m_dwPos++;
+ y/ ]) H3 k; d5 ]1 f}& y8 R9 O5 G7 ?' E. g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% v3 V8 C* l# K0 T3 t$ F: M
{
8 O, s4 L3 e) R6 v" s) H for (int i=0;i<MAX_INVENTORY;i++)
* S- T( _. C! |$ X! A. O {1 R3 A M, C. C" l- J2 m
if (m_Item.dwId == dwId)
' }4 ~# J, Z7 U8 _4 S {3 F+ Y1 G3 S% @( n1 O; M. w, y
return m_Item.nIndex;
. q# X+ [4 y) h9 t/ z }
1 M8 W& [8 T+ T, Q9 N }. d' |6 c! d3 p, H) p. d+ H
return 255;) h9 U" M, \1 A4 v
}- t' e, ?' P9 f, V7 Y2 W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) r0 i9 ^4 ]7 {2 a/ {7 l6 r" E7 \{
' `) T6 N/ R; E BYTE nTmp = 0;
3 S$ b& t5 [, g2 f bool bDest = false,bSrc = false;
$ n/ u- o; @3 t# ?6 A7 P V) b' z for (int i=0;i<MAX_INVENTORY;i++)5 L' I% J7 b9 d f' f! @
{
+ ]# W" l, b! R4 q( Y if (dwSrcId == m_Item.dwId)
$ z& ?8 k& i3 U P9 _ {
k G/ z% u, y //id相等 则 改变对应的dest和src- ?4 Y- O/ \% K. D; \& w
nTmp = m_Item.nIndex;( c9 {) ~$ x. g8 y' g2 a ~
m_Item.nIndex = dest;3 c1 f$ |- \6 y
}
4 m2 C; }0 w* Y; T6 ^* L }5 }, Y( P; t; o7 L) {5 Q5 o
//临时数据保存完毕,交换开始+ ~& K+ N5 C4 Q- G& ~' a% b% b, q
for (int i=0;i<MAX_INVENTORY;i++)
4 H" q ~# G1 ` h {8 M/ R ~' e) C: C, |" K
if (dest == m_Item.nIndex)
5 [7 v3 h6 N) O$ b {$ g C1 V: b- J9 |
//id相等 则 改变对应的dest和src8 ~# y. d) \$ {- R4 I8 F
m_Item.nIndex = nTmp;
8 w% T, E( @# _. q' F) V) e, a }
- V& V: U, _ `7 ^ }- `+ R9 O+ I" [1 {7 w7 q8 M/ H; ~
}
* F( O7 i. j4 Q};
/ X d! S: B) }5 h-------------------------------------------------------------------------6 |; `4 L3 p0 e3 e- u7 x( T% U( N" d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 T) W+ U1 g; g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 M9 T7 k3 s0 H% O2 c
紧靠其上添加:
0 b/ M9 [* M F {, Bif( pWndBase == &m_wndMenu )
g5 s% w* `- T{
1 i1 Z& p6 P2 q* V4 u) h5 |+ W4 U5 {, e switch( nID )
2 ]5 X* B5 J6 z3 W: t; E( H8 ]) ~ {
5 g9 V- m% b! ~+ @( n( f/ c6 N case 2:# E( {2 i9 ^1 [2 a: `3 D# E* h
{
, y& f6 I3 M1 S2 J //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- ?" G$ m% H5 h; L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 w, _# S+ l& ` {* X9 {$ ?% @/ D: r( ^- F7 p
break;
) a6 c7 q r$ |( `$ n }
4 r8 ?% P0 O0 R4 N- G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( J, {/ p* {7 N7 U$ d6 M& ` y
{
2 R4 c* D7 |6 [4 {! N; R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 a# y/ Z% k4 r8 R, g& `
if( !pItemElem )
# f* [, X" [) q5 u continue;: c ?, s3 Y o
if(pItemElem->GetExtra() > 0)' {* y0 w) r2 I( A; H
continue;, e u' i2 r: r4 J4 T" h! }2 ^
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! `8 D7 F; E* f0 L C, R continue;* N/ Z/ A4 r6 H: d f/ H7 ?
if( g_pPlayer->IsUsing( pItemElem ) ). C: Z3 d: \ z4 E$ G1 F
continue;( {$ `5 ]# _6 D/ G2 ^) t3 @, R
if( pItemElem->IsUndestructable() == TRUE )
; h) E! a/ d# K$ o) Z% S) r {$ D+ w% a. C* m) I, _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ V- A7 ]6 h1 |+ n3 s! _ continue;% {% i# ^8 u& Y8 x
}
0 b& D Y% J" o6 ]; n! v; d* g( q* S* Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! h# i( g* n0 K S0 @( M }4 W/ y6 c0 a: g3 T' V% I
break;
) O' i3 R; ?5 ?: k }
. j( q( p* |5 q8 W case 1:
8 z( I7 _8 h. H3 `9 A {
& K" F$ O/ D8 j2 ?1 k- Y! x //整理背包
/ D! [: ~3 t( w% F9 I; h! S2 Z //////////////////////////////////////////////////////////////////////////9 P4 V3 P# r- `) W' q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' u6 c' I! w" D. n( U //////////////////////////////////////////////////////////////////////////
5 m. f- J5 j+ b9 r1 Q* _1 \ //////////////////////////////////////////////////////////////////////////
! k) S; u% N: q) X+ b$ z& |2 ` CInventorySort* pInvSort = new CInventorySort;
# q. A3 h$ h) k R2 E0 |8 U vector <sItem> vItem;
+ m+ x" V' a6 i7 u0 d3 t vItem.resize(MAX_INVENTORY);//初始化大小
/ K' ]# G4 j9 E //////////////////////////////////////////////////////////////////////////8 T! F( K" |7 T% N# r& g0 X, s$ O! q
//填充数据
. s- F1 T; v, F: Z v for (int i=0;i<MAX_INVENTORY;i++)* `$ c7 P$ S" n9 Y7 \/ y) l
{2 O6 J+ e, a5 j& r: D4 @! l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 W" Q. U; V8 w' G+ f if (!pItemElem); Z" @5 E$ e! n' h$ X( u5 n
{& f! f( B% K+ R) d9 @8 E
vItem.dwKind2 = 0xffffffff;5 b m: G) T* Z3 e( R9 A" o
vItem.dwItemId = 0xffffffff;
$ g! d; R6 O1 ~, |7 a( @4 Z vItem.nIndex = i;
4 `7 X1 P9 Y) i0 ?3 ] g3 { }else {
6 F, A/ J$ G0 y* E% I6 C. | ItemProp* pProp = pItemElem->GetProp();
9 \: ^8 ?; f6 k/ I vItem.dwKind2 = pProp->dwItemKind2;0 _. T( L, A8 x5 F: R1 [
vItem.dwItemId = pItemElem->m_dwItemId;
, q& D V- O# C- E. V- m9 @* { vItem.nIndex = i;9 A. Q; ^- b+ J, S
}) O1 C& M6 l$ H2 `! R' l
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" Q9 n3 F: j$ H8 d; c }# s/ E% j; W; x& S+ F" t8 h1 E
//////////////////////////////////////////////////////////////////////////
2 w6 Y* J) m( u: u; U, X sort(vItem.begin(),vItem.end());//排序
+ W$ g! H9 f( Z! h //////////////////////////////////////////////////////////////////////////& S* ]6 j' \- p4 l1 L
//交换
9 Z! S$ }( `( t" n4 l8 r. W8 y for (size_t i=0;i<vItem.size();i++). e. b: w/ ]4 f" b p
{
# q) [' ^$ A4 W, l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, r6 \- o% v4 Q
pInvSort->Add(vItem.nIndex);
8 E- `) c+ |6 P/ {8 b6 _ }
* d8 G5 L: `6 o7 n& |: Z8 [ BYTE nDestPos = 0;4 [4 }0 I6 {& C& V
for (int i=0;i<MAX_INVENTORY;i++)" P& F& }; i* w# K$ a8 {
{* @' e m) Z. M ]: @( f& E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 R# \! L( P# g6 Z5 Q if (pItemElem)0 F$ ^+ c- n# v: p% j
{
9 I, R+ p/ k( C5 E+ Y6 K if (IsUsingItem(pItemElem))$ w* @* K, N0 f+ u' a
{- C E& `* {! F l
//这个位置无法放
6 V2 Y) V; Q$ N( s4 V* J nDestPos++;
0 e9 ^( U, D4 k, X# L. x5 J }) _9 l0 `; n u* ^( A: h3 m: z
}
5 r; D3 [; [7 M* w BYTE nSrc = pInvSort->GetItemSrc(i);3 A4 W* j8 @4 `; d- X& c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 B. |2 w( {5 U# i6 t if (pItemElem)
/ `9 ~, g% z1 f8 b; }/ z, D5 J1 D {
% |- ~2 f! K# M if (IsUsingItem(pItemElem))" t5 ?! P u3 ?- R( \7 ^6 E; J
{5 k2 d3 |% D: x! Y4 e. K
//这个道具无法移动,跳过" u+ N1 g. v4 B( t6 Q3 X
continue;2 q/ v6 p. R9 J# N: ~
}
" ]8 W/ p8 ~1 S \0 H+ Q: H; @ }else{* ]9 `/ ^0 q" A# h
//空位置 不用动' o2 O, V1 M. C. K; T' E
continue;
* }! s3 F. K) j9 m' z5 m( v L# d }
+ [5 {* x* O) K1 c- g$ ]( v7 s; ?8 E //////////////////////////////////////////////////////////////////////////
" t$ b$ x6 L# y //开始移动' r- T" _) x R
if (nSrc == nDestPos); E( S$ e# K# B& C
{0 v( ], r# x! @( O
//原地不动3 f2 o: r5 G: i0 f
nDestPos++;
9 P+ P: a1 o2 Q6 T9 b# g continue;
. T7 r3 a9 O4 p }
& y4 X! y* K4 r ?+ ? pInvSort->MoveItem(i,nDestPos);
+ `2 A3 A/ D7 F( v# @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) C5 K& t S/ _ Sleep(5);
, U( }* `! K* V* B; ^$ N3 _% F- {, q //Error("移动 - %d->%d",nSrc,nDestPos);6 M9 G6 o. C8 j
nDestPos++;6 h7 Y5 `2 ~% h* t5 d" y/ K
}: e- b: [' M! s& T+ l2 N
//取第一个元素的信息+ c) D( U" i3 {5 I8 A" a' \
/* F, S$ i" Q! M( P! _8 U% n+ V: e8 h
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) ]! x5 w/ [( ]' O {9 `# [8 R1 m" H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& |% ?9 ]* _) E) {8 t
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, L8 S# }( H6 s8 G" s a d5 b: ]
}0 E1 J ?( s. X# N: w
*/
! X# y/ n" e d* o, s //////////////////////////////////////////////////////////////////////////
4 {' M# H+ d T1 L break;' `2 R) ~: C1 }0 V' g
}: H6 w' w( B" `" Q3 |
}
; S }5 E$ Z$ X/ }}7 n9 F6 Y, |% D# `3 h I1 ~
m_wndMenu.SetVisible(FALSE);; ] m8 E, Q5 t7 V) y# O
% L. L3 s1 S, y/ V
--------------------------------------------------------------------------------------------------------
$ i# w1 t5 ^4 J; K搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ P* o; U+ A# c/ u
{
' R8 Q9 M1 [$ Z$ E- y; ^BaseMouseCursor();
! Y2 E! I: o7 ~' S) U: v6 |) |}
: ]- B) N1 u3 w7 |7 R4 t4 r! v在其下添加:" s b2 S# `1 D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 \4 ^" ^+ v4 a$ ?& N+ ~! d{
% P+ c3 g ` ]! Tm_wndMenu.DeleteAllMenu();) [# f' r+ @2 y5 V
m_wndMenu.CreateMenu(this);' n7 r+ o& T$ G: I. M3 V1 _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 m7 h2 @ N& _2 e
- d- l7 {! u5 w3 B
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& h% M2 e& U9 @8 o( H: _{
0 U5 F/ S8 Y9 p; t) x+ Q //P以上级别才可以删除所有道具
4 t* F7 G- O' f5 J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* g) U* `9 j+ d1 |7 N7 P}
9 E& ^6 H7 I" u- Y0 I/ r1 dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ z7 N! S z4 d) D7 H3 ]+ V' M: l
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 V7 c3 v. F7 B( H* y- ~) U
m_wndMenu.SetFocus();
" Z4 i T1 n1 S! i}
1 ?' J7 S! J v* X( \! l" H------------------------------------------------------------------------------------------------------------
1 r/ c; u+ W" O+ _; @*************************5 F) Y5 S! }' }, M
WndField.h文件
, o+ S$ `1 e. s! L*************************( ]! @% `( j+ p9 N; @+ A
搜索:BOOL m_bReport;6 K+ ~1 o1 V2 ^' Y# d* Z2 k# ^
其后添加:! }3 p' l4 R& A7 ~
CWndMenu m_wndMenu;) L4 m A! x- @* H+ ]" }$ r8 `
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: e( _$ K8 H: L7 P
其后添加:' [& s, T: q, y6 Y z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 r. j& Z6 i" G
) L% q/ w) X4 X0 B {& A/ q6 R3 |- j' J
|
|