|
|
源文件中_Interface文件夹下WndField.cpp文件- T9 }7 g$ d2 B2 {7 Z) L+ _; h5 s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 `+ t0 q7 ^! B% j
' N. r& P- X2 k a9 L! Q* l# p: H3 g
struct sItem
$ C3 j' j" p& @; {{
- V9 D# F! ?3 d& ?! H9 FDWORD dwId;* G1 v0 H+ b$ W0 y4 h
DWORD dwKind2;. a3 n4 C0 ^0 Y! {, z) p1 }
DWORD dwItemId;! e5 y5 a$ w% I, d; P* c! D
BYTE nIndex;5 U) A" ]( |( E4 Z% P
sItem(){
& o, U) A' j; n dwId = dwKind2 = dwItemId = nIndex = 0;: C: H% \, N- R9 p$ o2 K+ y4 d
}
; D' Y) {* |; `$ Y3 l& obool operator < (const sItem p2)
- N2 d/ J/ p( | Q- I0 O{
N$ V' w7 _! C: c& e4 { if (dwKind2 == p2.dwKind2)" K2 @) I; |( \' J% |* `. g
{
. a/ P. h% L% P' k9 c" K& x% O; T return dwItemId < p2.dwItemId;4 k( k6 c% u) K% S. _9 Q! A
}else{
6 v/ C; R3 R/ Z1 @/ j return dwKind2 < p2.dwKind2;( @ Q/ J; Q0 x) g V" L
}: c5 p% R( B& N3 W0 {4 i
}
; K+ ~0 D- x4 Q};
@2 |8 {1 b8 ?) J; A0 L; ~ S6 ?8 qclass CInventorySort
1 G1 H# y) E6 @7 g" x7 \+ O{- o8 G0 K3 J8 y7 p" Y
public:
n. D' T: B# Z. X" _: DCInventorySort()1 d2 F3 E) S# A$ q; {
{2 d M8 }( X' t4 e, h; s
m_dwPos = 0;7 Z5 G" l# q1 B# Q7 R
}
! W2 X9 o9 m5 ~6 c~CInventorySort(){}
; H* v Y b6 } \! G5 @/ ~1 \private:: r; H8 f4 m0 t2 E9 L; s
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 t' H2 h+ ` Z& D, GDWORD m_dwPos;! L3 L: T* w S7 y5 K
public:0 h: M$ v* |' x1 y& f5 t$ q
void Add(BYTE nIndex)7 n2 S0 S; I0 X& j2 q
{
+ D5 V0 w* G( L4 z5 F% X3 ]/ x if (m_dwPos >= MAX_INVENTORY)# Z* J" C+ w8 F9 q4 P4 m$ J& x" z
{
% _1 Z5 X: M. ~9 h$ h; r! { Z* x1 N/ w return;$ @6 ]; L% V q/ Y% D$ r" T
}# z! _( G- e- ^
m_Item[m_dwPos].nIndex = nIndex;) S. ]% }# U/ v N. y
m_Item[m_dwPos].dwId = m_dwPos;
: X4 v* x7 ?1 O& Z. h7 Q m_dwPos++;0 W% j, ?( x7 {" G) _$ e
}
. [: j8 a8 g9 A( l& ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 m9 d! \9 |& h/ y1 l# Q
{) o' G( s9 E) q4 \& b; u0 T% Y j
for (int i=0;i<MAX_INVENTORY;i++)
6 q# N# t9 F$ n! M, O1 @% I) k {. U4 n( c4 p# T& M+ }" K9 j
if (m_Item.dwId == dwId)/ P! N( e- q3 v0 N, k
{
. q0 q: C4 @# y4 r) g% s return m_Item.nIndex;
* N2 f2 b5 v# n# ^ }
, U0 @- o# L9 T5 [ }
+ d" P" J; I; W. r6 x( { return 255;
6 S# [2 K0 v: T5 k0 j}* e7 w( m( r! p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( @2 l+ ]& M# A; ~* d; v! S{
. s7 d. L/ j! L) e* v: i% g9 u* X5 Z2 H BYTE nTmp = 0;
2 T* `: ?, Q8 H, X n bool bDest = false,bSrc = false;$ \* _4 A+ V7 Z
for (int i=0;i<MAX_INVENTORY;i++)
5 k6 n2 X( R7 B; U2 A {
: z( h: X, I1 B) \ if (dwSrcId == m_Item.dwId)" a/ s1 o' Y, g& j3 T$ b! ]; Y
{
$ r9 b) D3 \2 J //id相等 则 改变对应的dest和src# |, z* A: f7 o" }; K. k
nTmp = m_Item.nIndex;4 [ |6 g0 A& T! W; p
m_Item.nIndex = dest;
& W& Z9 v- [6 w/ G& e' t( I }% v# o8 Q; v7 l7 l: P
}
' {6 x% @ _2 n: T a, S3 ^; K; | //临时数据保存完毕,交换开始
4 @7 V6 |$ \/ h3 B for (int i=0;i<MAX_INVENTORY;i++)" E8 n! H; ]: w9 c! y5 ~& T
{
! g+ E: E6 B( F$ r5 Q8 K if (dest == m_Item.nIndex)" o F3 T8 X, g& y/ g- j5 y( \7 z
{8 R c# d1 Y, o. j" f) ]( H
//id相等 则 改变对应的dest和src, ?2 G. c3 l. N+ f
m_Item.nIndex = nTmp;
1 @8 K/ s9 f( [; y' } }
3 G! o" g2 n; s* ?, D4 D }
- i! c7 k: s( B( @4 g2 Q}" \5 r/ D/ V* |: }& A2 T9 q
};
9 I( d/ P. U0 _0 s- D+ B2 r- {-------------------------------------------------------------------------
5 B- b& \1 J- v3 Z( p% ]7 P7 S依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# `7 `, e2 q8 J) z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 w A8 z G3 { b% L- ~' o! F紧靠其上添加:
0 Q; z/ \ s8 A4 J& u2 Y' O9 R7 ]$ _if( pWndBase == &m_wndMenu )" ^( @6 ~& y# i5 G& I: C
{5 \ d' h; G" z8 _, \% k b0 E
switch( nID )
( U, k5 n$ O, N. [" l8 O, \4 t {
0 q) c. H8 `/ T- c case 2:
* t% L# d/ l) i2 C {
$ j1 N% x0 Z' J4 n //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 \/ p8 Q4 H' \* K P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 x8 w8 q. l$ X! ]! G ? {# l; n5 ~' C6 g& O3 q( W
break;. C4 W) V6 M8 g: A) B" f6 T% Z
}
) v* G4 Z* A! H/ p# u6 M for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ I9 F- H- s B) ~, P {
% k( h, o' s% A5 x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- I7 Y7 P* F; E, z if( !pItemElem )8 I+ y) l$ f7 W' A7 f
continue;) d3 t- t6 ~1 U% U/ o
if(pItemElem->GetExtra() > 0)
, u8 Z W! r1 p, i1 ]( _# L continue;5 W- h2 H' C# {, J: s% J7 e+ x2 J
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & ~6 p+ c1 F* v
continue;' D9 w G9 _' ], t, Y. _
if( g_pPlayer->IsUsing( pItemElem ) )3 E8 L7 Z7 S5 N
continue;
: w" p; Y; W1 \ if( pItemElem->IsUndestructable() == TRUE )/ X v( F* U A( {
{5 V B' x0 O4 v: M. Z5 P, V4 l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); n# I6 Z% `+ Y8 Q( K
continue;
; X9 X% A6 z6 b- R+ G }* ]8 L/ i; Z, F: _$ S1 [/ T" y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: u9 A+ T' e) r3 y9 s, u
}
8 \4 X( u4 Z, e break;
' Y/ M+ d* O& ^/ G }% S! u+ f |) Q0 {
case 1:
1 V* ~4 @0 K" u& \& b& \$ Y. q) ?7 o {
- B. b' b6 N5 f! Z5 ?% U //整理背包
j) N0 c, X4 \" ^3 X" d //////////////////////////////////////////////////////////////////////////
* N% ?2 h7 A( L1 ]) k8 }2 J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- L% Z" {$ f: ]6 u$ X8 |
//////////////////////////////////////////////////////////////////////////
* U' s4 d* ]8 X1 E! b/ I) i //////////////////////////////////////////////////////////////////////////- k/ s/ o1 S4 q+ |0 I0 J
CInventorySort* pInvSort = new CInventorySort;
# J$ M! Q4 N* Y N" c0 e0 G/ c. @' m vector <sItem> vItem;9 [2 d4 j- R+ v% {1 r8 G
vItem.resize(MAX_INVENTORY);//初始化大小
( O" J5 A/ L) n* h( X$ l# \% c //////////////////////////////////////////////////////////////////////////
+ k4 |2 _& n3 {; R //填充数据
1 z5 R& Y2 Z! K* ?# Z: E) ] for (int i=0;i<MAX_INVENTORY;i++)7 J9 s% ?9 \/ `# S4 n9 K/ D( l7 q4 l
{5 _3 F& D; f% N* ]) G) Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: X7 U# t3 @. I: B8 w& u if (!pItemElem)
. P* x0 T' F5 Q% S {
# Z% g j5 y2 h2 d8 O& o9 r8 T vItem.dwKind2 = 0xffffffff;
' a3 Y/ e0 u4 p4 s$ N vItem.dwItemId = 0xffffffff;2 I* j: `2 M# S0 O% b0 c
vItem.nIndex = i;$ y9 S% m; F1 @# ^, f( o& [1 @
}else {
& }$ r9 _. A, h5 A& F5 G ItemProp* pProp = pItemElem->GetProp();- [5 |3 a& Y0 d( J
vItem.dwKind2 = pProp->dwItemKind2;
, O) V: G% e: J6 m8 a4 V. L/ Q vItem.dwItemId = pItemElem->m_dwItemId;$ e T0 W4 d/ D( ~5 K& K( }" E
vItem.nIndex = i;5 ` B* x# H, U! ~9 a, l0 P
}
# `4 C) X% t+ T/ i6 U1 I' ^ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 t& R$ l3 t0 V L, p, t4 r4 n }
9 f5 E7 ], S3 Y- O' K //////////////////////////////////////////////////////////////////////////
. {9 y+ V, K: n/ j" K9 j+ I sort(vItem.begin(),vItem.end());//排序
* f" e- w8 f' L: d //////////////////////////////////////////////////////////////////////////
6 y% x$ G, O8 [9 W2 a0 x. p8 `" a //交换
' `3 u8 G: m3 R for (size_t i=0;i<vItem.size();i++)8 w3 _: |; A( e/ ]0 \. ?0 N
{' J5 C( L' r% V* z- p! Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* Z; z6 o; K" J/ E8 O/ _3 `. C/ F pInvSort->Add(vItem.nIndex);% l: O% D/ t4 Y5 R4 l
}
. p6 L2 j5 p7 [; Y5 C0 b1 t# j/ ] BYTE nDestPos = 0;8 s- N7 D: a9 U" y9 ~! Y
for (int i=0;i<MAX_INVENTORY;i++)2 }! I6 F/ r# g9 E
{
6 P B9 _0 g+ k' l! Q e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 K. Q" l" {# }. J if (pItemElem)/ A9 U0 a; C6 P5 _. j4 z
{
A% r" ^! B- S! `+ c+ l1 O. X! Q& J if (IsUsingItem(pItemElem))
6 E4 q% Q& q) R' b3 `+ j7 u; w/ B {
# L5 T% t6 C/ j0 K9 g( y. W: b& k //这个位置无法放
$ B( `3 J, P1 b$ i _- ]9 R" J nDestPos++;
e; p0 E" F3 C/ p- u4 r0 v }
7 a0 O! m$ f9 H% e* m; z }% b& B- s7 n- r- C
BYTE nSrc = pInvSort->GetItemSrc(i);. t- n+ ]# N1 R# o) d: z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ s/ `) \1 D( @: D/ W1 w. } c. R
if (pItemElem)
4 _; X. z) ~/ G3 s! u) o' I8 _3 { {
9 X, D2 O* @0 ` if (IsUsingItem(pItemElem))* _% g2 }: ]; l& t5 L" q6 r
{& r5 t& L% ?! ]1 s. [4 R
//这个道具无法移动,跳过/ |( X9 G W: L- Q3 F3 `# C- _& E
continue;' L4 @% w, W4 ^" ]
}
2 E: m8 E5 d; B; M( @ }else{
1 c3 Y8 N6 V# s$ p- S: s //空位置 不用动( N9 [& j: _& G) F
continue;
* e# I$ O% q$ Z$ y J5 q- m4 M! l* J }3 p) F3 Q, Z# `) t% p/ M9 O
//////////////////////////////////////////////////////////////////////////
# B% ^) b m. d' s& Z //开始移动0 P! y6 {( m, i
if (nSrc == nDestPos), c' C/ H- T4 f- a1 [3 s
{2 ]& ?4 P* v; R O/ V
//原地不动
( q8 y8 f$ w, ~- X nDestPos++; a) F/ [# L" T) D& F/ J! @. d" }5 i
continue;* T# r4 i6 T8 ^3 _4 d6 {
}& i( K$ c) Z' x, e! M$ y9 K8 L' D) l! E
pInvSort->MoveItem(i,nDestPos);
, n* N* R# q$ x7 @, y( H g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 B% e: {" M- H& j; z Sleep(5);) g3 V# G0 q. C8 I1 Q
//Error("移动 - %d->%d",nSrc,nDestPos);: @- G2 f: p7 E/ P, O! i' N# F E8 b9 F
nDestPos++;, `* a: r% M+ o* _& f3 u
}
, g1 K0 i+ M$ X8 E6 f0 X //取第一个元素的信息
+ U: D* s- p: B2 e8 A, N( i% y7 i9 ^ /*! J! W# R# N0 F% D
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 V" g7 s* J2 ]9 M% x- t
{) W, R2 c& c* f3 J" l
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- a2 c6 C& u: K4 z# \: `, M6 X g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& ]; y( p9 i/ U3 I }
8 S& p+ A+ _: ]3 H */: H4 A: f! i5 ^$ d6 x* e1 a1 b
//////////////////////////////////////////////////////////////////////////
( c% p& O8 V- u- ]- C5 U break;
; t/ c8 l& ]0 Y3 y4 E6 b }' g* P5 M7 k C% r q. \; d1 r
} ' I" S6 [) d' s x
}! }: ^% g/ l& e$ W: U
m_wndMenu.SetVisible(FALSE);
" l* D2 G3 [. c0 {# i- y
. ]5 b8 T$ e3 S1 X7 v* o. W--------------------------------------------------------------------------------------------------------8 M+ W8 S; Z Y9 z+ B
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 i/ r+ }3 q9 ]{
7 `5 P7 i1 R# X; o8 yBaseMouseCursor();
; ], q7 X& o' j0 \}
+ U1 \/ ]& [2 s在其下添加:
/ \5 j; j1 i: k; }$ g0 y: {) avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& @9 Q# H# r* t5 H8 E{
- S) p4 D) L; J7 W1 D( s7 Gm_wndMenu.DeleteAllMenu();
) h# }. Y5 l7 |) N. o; o, z) n# Sm_wndMenu.CreateMenu(this);
) R" c) o7 J- b5 ^/ Km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* F+ ~/ C& _7 d7 Z& d, a
4 w6 v6 }5 `) C0 U" H/ q5 M0 g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: @! P* L8 k8 ?- h3 R# ^+ J{; D' l( V) z# b9 A# V+ D
//P以上级别才可以删除所有道具) @+ s8 q4 w6 r$ U4 O. T" ]9 g, W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 x/ A7 R% @7 j
}
/ r- ^$ c7 v5 q9 `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) {" D5 z: _: y. a6 gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 G( t$ s y# u7 Lm_wndMenu.SetFocus();
8 \9 u) v6 }- c2 A3 G9 X) s}
& p5 ] V$ P7 u+ ?) H; {------------------------------------------------------------------------------------------------------------9 j! }; O( }: T- l6 f+ V
*************************
) ^6 H% j& ~# _WndField.h文件
) I9 y/ T; J3 T b1 o2 g: O************************* W! h8 g' O: H7 V
搜索:BOOL m_bReport;2 c* _. \# x( w, o
其后添加:
% Z4 B, w0 Q. ^2 dCWndMenu m_wndMenu;
, k0 O& x+ @, d; ]2 m( ^' b搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. L" ?1 g5 m9 h1 H3 Y* z5 Z( o
其后添加:
$ O; D( w" D$ ~9 R) u" w* Z' Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
+ I2 I0 Y2 S' g( [; c
2 z2 Y# M& u" p. S
/ D( y* w2 A9 I" p3 n! ^& a |
|