|
|
源文件中_Interface文件夹下WndField.cpp文件
7 o2 J" W) T9 j* c搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
@% ^2 R8 o$ ]0 d2 c+ ?
/ [: k* {7 a% F$ Mstruct sItem7 G Y% W' q2 x8 C* W. H1 t# |
{
9 C3 S$ @: a& o4 y& g6 s' n/ HDWORD dwId;
q$ K& L+ K4 H5 J, H$ o1 a2 ?- vDWORD dwKind2;
; F! q, M) r$ b5 lDWORD dwItemId;
7 b D: S+ K. u7 d( t* mBYTE nIndex;9 U% R& n$ N0 Y2 V( V6 p# F
sItem(){' [6 O2 Z: ~$ S8 e6 T5 O' ~
dwId = dwKind2 = dwItemId = nIndex = 0;
4 u, ^6 }* z2 E0 q3 O}
# a8 k4 y9 `7 |# Z! Xbool operator < (const sItem p2)! v3 l; `* I" L
{
3 G& X7 [" |! y8 d4 Q if (dwKind2 == p2.dwKind2)- [/ f9 I/ y" s9 H n H" L" D. w
{" }* d# z6 U* e0 K
return dwItemId < p2.dwItemId;
2 ]3 B0 D. w' v, X1 y$ r! w }else{
- i" o* u6 O, q; T return dwKind2 < p2.dwKind2;7 N2 `; B/ V, n q+ I$ T
}
; v: m8 D7 ], A7 I; c/ M}
" ~/ q1 I/ ] f5 E3 Z};$ H( G! \1 j( m
class CInventorySort
- U$ r2 C% ?8 W{' ?$ y- {1 i6 z, I" c* |
public:3 z+ H3 [2 @0 _5 e
CInventorySort()
$ l. }. F C0 X) y5 A4 m* B, o# y{
4 Y& G& p3 B7 W! n4 l, X' O6 v m_dwPos = 0;
- P+ i5 h7 l8 W7 J0 E- B}
9 R( L0 G9 H, P8 I* l3 b~CInventorySort(){}
8 I9 F9 E9 B, E% k) v( W: o& O) A, f! iprivate:
' Z" |& n( X2 B) _& p/ FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& Q& U5 D0 B3 |7 F4 C: ^. x5 ?DWORD m_dwPos;
; k/ ^2 v8 @) S! H0 _# F- T# wpublic:; S' S a: h, L+ A# `7 S/ ?8 d* ~
void Add(BYTE nIndex) R1 N0 e' [6 H- a- O) [
{% X: g3 ~7 v+ S1 G' M# z( D
if (m_dwPos >= MAX_INVENTORY)
* q& q o1 P, ]6 A$ d) Z {$ `; G& L- M' P1 L* m8 f1 I0 y
return;
( E- n' @- ?# |: e }4 R c8 {6 k; V
m_Item[m_dwPos].nIndex = nIndex;; s* g$ C* x9 D6 E
m_Item[m_dwPos].dwId = m_dwPos;2 k5 }$ L- b/ t; w+ O# J+ x3 Z. u- c
m_dwPos++;3 T9 t0 h% [% a1 `: ]8 h# l
}" x* o6 M! l7 N- q6 ], o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 V& G$ w% s8 X# E- I7 t, c{
6 g3 I4 |- ^5 c. j6 K: t for (int i=0;i<MAX_INVENTORY;i++)
0 p4 x% l/ v0 M; `9 T' P5 k/ W {
1 q" |7 ^5 B7 w+ t4 b7 h4 u if (m_Item.dwId == dwId), L3 U! R* _" t4 F; c
{' J3 i9 a9 R+ ]' b; ^
return m_Item.nIndex;8 D4 `" p& t- D8 A0 h6 }# t w
}4 }: T2 A" ^1 f1 ^0 L' A- H
}5 B; m/ A: ~6 w" X/ Y- h3 ?
return 255;1 j5 I1 y1 Q! t) G
}- d: ? A. k6 J8 N# i5 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. g: q: D6 V5 I{- O: p& u. F6 u
BYTE nTmp = 0;
+ X! n3 F) n& [# k bool bDest = false,bSrc = false;
5 T( B' j- I; ~% U" J4 d3 N$ A1 U for (int i=0;i<MAX_INVENTORY;i++)3 v) m5 ^0 W4 A; x J
{
) [8 ?3 u9 L* U6 I* K3 k, k if (dwSrcId == m_Item.dwId)& u; t, @) o) A7 w7 j
{
3 G7 S/ e4 L& `$ m* H/ I //id相等 则 改变对应的dest和src; d4 O! O# r0 ^ c# \, ]' N
nTmp = m_Item.nIndex;
& d; J6 O# w# ~) L1 u m_Item.nIndex = dest;
2 q) } T" k& c0 a2 ~ }3 N5 d5 h; k2 T4 ^" R; K, T
}
. D }5 c W& k- Z //临时数据保存完毕,交换开始- C6 Y. T! `2 u" z8 L7 c) U! M# I& q+ T
for (int i=0;i<MAX_INVENTORY;i++)! u9 ?( h R7 H9 u
{
8 I p, E3 G5 ~% \ F/ ], [: F if (dest == m_Item.nIndex)
+ r5 d- I* A4 m3 H1 }# w6 ` {
' W" A2 w& ]- q8 U( Z7 l8 h //id相等 则 改变对应的dest和src
# [5 z u& x+ g; ?$ C, o' b m_Item.nIndex = nTmp;! J# i' m, e9 n7 A
}# K. Q" x& K/ \* O* r. r7 L
}2 `4 v/ I1 V( C) E: `+ R9 O! N
}: f: |7 m& Y8 L$ E I! Y7 X3 M
};, }9 Z3 A) l8 Z. S, M/ ?+ o
-------------------------------------------------------------------------& }! e5 z; }7 B7 R# ?
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' x* t% @! \( b' ^ [1 m7 _8 N搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 J3 {& i, V* u; f, |. C紧靠其上添加:4 q# ?! ~6 }+ d5 }, w4 k
if( pWndBase == &m_wndMenu )
+ g3 B3 z" z) o9 P{7 W$ C8 \5 | w$ n& N
switch( nID )# S4 X: l' h9 `9 R; I
{
! h2 E) L- u% O+ \- Z- k, k& m case 2:& |7 I/ [6 O- S2 ~* c0 v
{
0 e" |6 j+ x0 n //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 g6 i, f* s2 T0 ~; _) L' O( G, Z5 V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 `" C, P2 _3 F7 x( L% g {
5 S! {" T) C. M1 f9 V break;
3 ] x* k+ [; u }
# n$ {" @5 i$ j# D for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# e" R- G! P+ Z6 } {
. ^! u3 o! O! ?" ?# @; E4 l/ ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 U" L/ S6 n5 P" H0 n8 W2 l if( !pItemElem )3 t# ?# r! ^6 r) F+ m& z# z
continue;
1 t0 Q5 E6 v# I9 ?+ I5 @ if(pItemElem->GetExtra() > 0)
( p6 u" I; \2 T5 O! L$ E continue;) N4 @: Y, b& O% y9 O- Y F0 |
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( Q3 c/ I7 T. M1 O2 _9 K( t3 k continue;0 w9 ^0 A7 \" ~. y- k! s$ U9 P
if( g_pPlayer->IsUsing( pItemElem ) )
% `/ }) n1 s* S, C4 {$ O r continue;
5 K5 i! ?. m) ^. g( j4 d, ? if( pItemElem->IsUndestructable() == TRUE )
0 q! S6 ?6 R6 C! R9 @ {8 s) V+ e9 m5 H
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# r) v8 J6 q% `4 G+ Q+ O5 A- m1 q* p
continue;
9 ?5 F8 y [; y# O8 V4 K, ^% `4 U }( F! ]% C. b4 A/ n5 y' u8 C
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 w+ h7 B( j/ |8 T$ x7 ^ }/ B9 ]4 [0 s' y7 f
break;. l8 v* U- P2 f2 v
}
" C7 {1 a2 V" g case 1:
/ e, `, \/ S% b" k" t {
% M* a5 G; b- S; N8 j: o( H+ R //整理背包# R! [/ p# _/ l& G4 Z M: M. Z
/////////////////////////////////////////////////////////////////////////// m( m9 |7 ^6 `8 k+ e
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 ?) T/ Q) H/ |$ C# X) H% p- r+ e
//////////////////////////////////////////////////////////////////////////4 w7 W" w* i* f0 Q9 K* g4 k
//////////////////////////////////////////////////////////////////////////2 a3 H o! M0 R
CInventorySort* pInvSort = new CInventorySort;: z/ o! { B, J2 e1 F4 P% }- L
vector <sItem> vItem;
, F1 h% m; U6 L1 m, U/ B vItem.resize(MAX_INVENTORY);//初始化大小
5 n( F5 } s& B, Y) m& A //////////////////////////////////////////////////////////////////////////( Z1 l- s4 `9 A, o+ q! R
//填充数据
8 g8 b' S! b8 e for (int i=0;i<MAX_INVENTORY;i++)2 a6 T8 V x: j' l
{
@! E. S. `' [4 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 z+ Y$ V* F+ Z. a if (!pItemElem)* b$ m! b" E$ ^1 B3 l8 d& E
{
( x ?% B& r3 ]0 O" Y" q; l g vItem.dwKind2 = 0xffffffff;
C9 g( S2 z3 @& o n9 `+ x vItem.dwItemId = 0xffffffff;' j, M* c5 p2 A1 M, f3 k3 t2 V
vItem.nIndex = i;
5 |6 D% `7 f( r8 E$ \# Q: m8 ? }else {
; e, Q! ~ Y4 R3 ^4 K! V3 K* N7 e2 c ItemProp* pProp = pItemElem->GetProp();
) e# D- C/ g) J m; J$ E+ f" \* {5 z vItem.dwKind2 = pProp->dwItemKind2;
' L7 Y1 V. O% }9 v; e vItem.dwItemId = pItemElem->m_dwItemId;0 @8 q7 E+ Z! ^8 o
vItem.nIndex = i;; Q/ Y4 ?7 P8 h2 F. J$ {8 L( ^5 D) ?
}( u4 Q o$ [- N# c! `& A6 U _1 r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& m: p' j2 H1 o t5 V }
G# ]: z1 {+ d! Y- B( | //////////////////////////////////////////////////////////////////////////
2 n2 e. ]1 Y/ ^3 K- T0 t sort(vItem.begin(),vItem.end());//排序
: e/ [- [) i. W8 z8 b4 O //////////////////////////////////////////////////////////////////////////. V$ z9 a6 \8 a! [" |* c
//交换
2 Z& s4 N! ~% M4 x for (size_t i=0;i<vItem.size();i++)
& V6 | I7 s# B {
: F8 ]1 n$ A% E8 W2 b+ ~$ w! F //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ l% T) s" y+ Y7 b. w3 w$ F
pInvSort->Add(vItem.nIndex);, l& ^& L( h/ I5 V* f0 ^& Y
}
+ L- H( }* J0 h2 I8 |4 N BYTE nDestPos = 0;6 Q- _% z! N% ^+ k
for (int i=0;i<MAX_INVENTORY;i++)
J0 h. }* O) C( `+ g {, @* U/ O! g! m0 x! H2 @* V$ o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 G( q: p$ u+ F+ Q
if (pItemElem)
5 I8 m d. V- q \ {
, ?( B. n/ J$ G7 M# u1 B if (IsUsingItem(pItemElem))
$ ~* \# Z% s. [ {7 Y3 R: }& O$ r7 O
//这个位置无法放
( a& r3 y# W; @# ?+ v nDestPos++;
! Q" g& n! Y0 V; J4 A+ a }
( I8 a" l# \$ J6 }5 j3 U4 ` }! f Y+ i& ?' q
BYTE nSrc = pInvSort->GetItemSrc(i);
' q) E5 T+ B1 a( t5 b: M" b pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 @1 c% J% G$ |
if (pItemElem)
# h* g# \5 _) \4 j7 J& a) m {9 B i. }% C( r* y
if (IsUsingItem(pItemElem))4 }8 S9 ~" p3 u
{: H& V( d, A ^' ]4 I2 w
//这个道具无法移动,跳过
, r- I; Z( s5 B continue;
1 ~7 i8 M. w+ h' z/ R }* `' J! S* h1 ~8 p* x. ^ {9 Y( z
}else{( e& T3 j- X9 I& }
//空位置 不用动7 n5 }# J2 @4 f( J1 ?
continue;- _6 c0 G5 g1 F, ^ o
}# G- g5 u0 ]7 D) b* U* P1 k
//////////////////////////////////////////////////////////////////////////! C @ U+ _# u0 U
//开始移动3 J+ E' J7 U+ N% b
if (nSrc == nDestPos)
0 g: b9 i' k; y) l: F/ A {; X2 {* {0 V4 V1 [; ]2 u3 X- ^ R
//原地不动
. K d7 j: `- |" D6 E' X$ m nDestPos++;% E, c# U2 {; x2 m$ F
continue;" I4 C* T1 y1 f8 n
}+ u! G6 [, n2 w9 s8 a
pInvSort->MoveItem(i,nDestPos);
" n, s) j$ k1 T3 k1 s- N+ y# u g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 ?$ k- F3 Z! _$ y: w Sleep(5);
5 w W( Q8 z8 N+ j- f: o //Error("移动 - %d->%d",nSrc,nDestPos);
0 a q4 |" r- y# `: T6 ?; H nDestPos++;, ~$ f" t: V5 t/ g& G
}
2 R4 Z7 l4 G" j! L" G //取第一个元素的信息/ O; l; i$ N# r, Y# E
/*4 j3 Y; @4 }3 b, m }( @
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& }$ N0 l8 O+ I O9 U& ]! b
{# m' R+ C8 d5 D5 `) u0 s# S9 N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% w. ^+ J3 H' o7 Y& Y+ i9 S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( ]/ W, E( D9 R5 Q1 S# b
}
& B* h+ r/ o( I */7 u8 m6 e* a8 U; k- S- ]
//////////////////////////////////////////////////////////////////////////: x" n9 i5 B5 G$ o R( Y9 S6 A# d4 Q" b
break;5 [1 J/ n8 M1 f0 x9 n% j3 j( Y
} ]: f- u: u( k! l
}
% z+ j/ m1 D5 t}) i. q9 K) r, G/ Z/ z m$ s' n
m_wndMenu.SetVisible(FALSE);) L% `4 ]* h3 z) x
/ q: N* L6 V6 @. e7 K9 v# ]# a--------------------------------------------------------------------------------------------------------
1 V' b V$ H( ^" P9 t/ r1 V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ n% I1 \" x8 K* ~) T* l
{
- X( j1 N' P9 a/ \BaseMouseCursor();
) P: r$ _" ^& W0 T: ~1 I- ^- F u}" P! b- o3 h, W8 q) r' S
在其下添加:
7 u/ |+ O( J$ k) d6 @- mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) _8 L7 L6 Q' V) `{1 Y; H9 I# e e/ v+ s3 ?9 s" h
m_wndMenu.DeleteAllMenu();, D c1 W7 q. v! I1 O3 @( D
m_wndMenu.CreateMenu(this);
5 s" O+ q4 y' K' _2 h1 Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
]) V4 \& z/ J, s1 n9 X9 V) P; v+ w# ^- l- H* }& o; t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 u9 u) g& K4 ~3 A! A: g
{
0 B+ R" [1 D P3 R" v' y //P以上级别才可以删除所有道具
4 a7 E' b/ N' q7 d8 c$ [0 p m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 H& {: q2 j/ \/ M f
}& N2 v1 }/ k) g6 O" q& N- {! A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* o$ m+ Z6 W& am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 B$ P# l2 Y0 o% ?7 W% am_wndMenu.SetFocus();
1 n. w) M. Z5 r: x2 [}3 G1 ^% q( R' ~$ r' K1 {6 y s8 S
------------------------------------------------------------------------------------------------------------1 p3 u3 z0 i9 n) ?- e. u( S$ v
*************************0 d. O1 ~4 |4 @( j
WndField.h文件# o7 ?( H+ ?- x Y
*************************
% `0 X* R3 G9 @搜索:BOOL m_bReport;7 i# K) R) z9 Z5 {. D
其后添加:( l# y. V; X5 L; ~9 W1 ~
CWndMenu m_wndMenu;; a, c: C) v' N6 G. ]0 f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); ?2 z' v! A/ u
其后添加: J% O- w7 x: i2 w5 X
virtual void OnRButtonUp(UINT nFlags, CPoint point);! `0 f" v4 O# E0 V
( Y+ Z9 T# C1 M% R
. _: B- j+ j( W! C3 _ |
|