|
|
源文件中_Interface文件夹下WndField.cpp文件
: h' z% T3 ~( }2 L5 H$ L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 W" }$ {! S& O) |0 z( |! `* o
3 B5 o; _! d# P A- Z2 ]struct sItem
1 m t- T) Y/ Z: i{
6 @+ T1 R; u, |( D8 c! KDWORD dwId;
8 m% q$ [/ | @- D; jDWORD dwKind2;
5 S% Z; u2 u* G2 O2 {7 YDWORD dwItemId;- e$ M6 _" K: d7 P0 z, t3 t7 z5 ]
BYTE nIndex;
- i& j: V. s. r7 e# |/ A% c# WsItem(){: o( \% d! U$ r; s7 d5 z
dwId = dwKind2 = dwItemId = nIndex = 0;* Y; a( m& E& Q
}
, B! W3 ^' @+ r" x$ j" Sbool operator < (const sItem p2)* `: B; _4 E5 E$ i, D
{) [; l3 C: ?; j; A* S$ @
if (dwKind2 == p2.dwKind2)
' }& v6 R: v. Z% S' G {) m4 n1 d) |2 [. R, Z3 S
return dwItemId < p2.dwItemId;
' b( ^) d M# p Z }else{' Q4 `+ Z& L3 W6 h9 w
return dwKind2 < p2.dwKind2;
( t$ s p: D( K! g }
0 d3 I8 F2 V+ ]}2 H3 w8 U2 T+ W" e& d8 e N) f
};' s7 D9 i* O9 D- Q0 U$ i! b a
class CInventorySort2 ~1 O; ^& Z. S, B6 q- S
{
0 ] Y2 E! b- E0 bpublic:/ y4 i7 V$ S2 T7 X# g3 E$ V* Q
CInventorySort()& d# J3 o8 a4 d F R
{
. S" y6 O- a* J6 ^ m_dwPos = 0;
; }" d& _; k0 G}1 G+ c0 z) r) K( T* w
~CInventorySort(){}/ w# n. R, X& A/ a4 r K
private:
9 J# Y& c$ a1 D) tsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- f. h3 i6 ?% l U2 Y1 J5 X
DWORD m_dwPos;6 t+ }5 S, a4 O3 C, T; H$ E) q
public:
- _5 i2 I1 Q( j( T+ Fvoid Add(BYTE nIndex)2 E; J( n1 L, Q2 q! X% A
{
" k9 e- o7 x; A& K w( V3 m if (m_dwPos >= MAX_INVENTORY)5 K# s/ P1 k& L7 U" W
{9 z8 ^8 s q3 |2 S0 V" ^$ W7 u
return;
& v3 t/ [" d! k0 g4 P+ e$ d }
4 i2 Y* ^5 v) L' K: W$ r$ G m_Item[m_dwPos].nIndex = nIndex;
# I- Q6 r% z$ } m_Item[m_dwPos].dwId = m_dwPos;
3 K" ]) g$ g1 Z) H5 X: [' x) s9 P m_dwPos++;7 o% N$ O7 ]3 c5 h0 P: N' Z7 e$ K
}
0 k( w. G1 B8 }# D% T0 N/ @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ ^0 t! f; p! I
{
& G/ f1 w$ D# V' p- ]1 `* [ for (int i=0;i<MAX_INVENTORY;i++)
# O4 F/ l; P) U( N6 ^ {
! { N3 x( R' P, m" C if (m_Item.dwId == dwId)4 Q$ ~% @) E+ `5 a# h9 @
{
) r/ `( \6 Z. P: @ return m_Item.nIndex;2 b1 C$ x) @) J2 G& ]
}$ j! {: o' g5 ]/ p4 g" n6 W
}" k0 b/ I, k4 s T
return 255;! y2 L' D o! C
}
1 g9 k3 S G4 f4 u7 gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' f/ [. W+ ?0 r( y- T5 I% ]
{
2 w0 ^ ~0 K( L" d: p& k: q/ G( I BYTE nTmp = 0;* |4 Q% L9 a! ^' A7 y
bool bDest = false,bSrc = false;
( k1 g6 p1 V! l6 S) P9 j3 t7 I for (int i=0;i<MAX_INVENTORY;i++)3 \ k+ h0 K5 a) ~9 X B! R+ y
{
( U) V/ A3 l6 _% l* M9 e' U# ]5 \ if (dwSrcId == m_Item.dwId)
: L2 o7 B( F1 U; F {/ W5 {6 c1 N, }2 M) s
//id相等 则 改变对应的dest和src
% |# K0 q5 |3 Y- C t: [2 S8 _ nTmp = m_Item.nIndex;/ S- ]$ r( G% F- ]9 [$ V, A
m_Item.nIndex = dest;) f/ i$ e, U7 x2 j7 Z; Z
}
+ t$ Z3 ^6 C* n' k/ x8 S }
( \ E) _+ `. m) i# f //临时数据保存完毕,交换开始 p. k. a: O6 g6 J; s0 z
for (int i=0;i<MAX_INVENTORY;i++)
3 R! f: {$ {4 Z {
: B# O7 J# v& p% Y% _ if (dest == m_Item.nIndex)0 D8 Y/ |+ f. T2 t! i
{
& M3 ~3 L4 P& k //id相等 则 改变对应的dest和src
$ Y/ f6 e# B c' H; S8 `7 g7 K m_Item.nIndex = nTmp;
8 D8 @' t* `# t }
3 \+ x! l7 ]& x$ s- R/ a- C }( p: ]- `# V" L5 P/ S/ l* {
}# ^8 Z6 l1 d6 b, s3 ?5 M8 V( t6 Q
};
" h4 Y/ l* y) m0 q-------------------------------------------------------------------------
5 S" k1 j1 m; ?. V. {- q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" V2 K- l( h" v( O* k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 h& m* Z, X! ~
紧靠其上添加:5 p! i3 S; P) F3 \' Y* f
if( pWndBase == &m_wndMenu )) f |2 }) S) F2 R; P( Y+ f) R6 T
{5 B: S: W3 z' f) z6 m( S6 C1 _
switch( nID )
9 i' N4 e" e# I# L" C( a {
% Y; n- ^2 E- J% ^ case 2:/ Z/ E/ K t; U. u. g3 Y
{
. X8 f' o2 V- _/ N5 t4 J, V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" Q1 o9 m: ]# \# ?: W if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# ]! G. u0 X8 w2 l4 w) W1 w& n {2 a: |7 b0 a; h: \& z6 ^7 r
break;% Y% ?- {' J* }7 V' S9 P, r: a8 @
}. h- F( a$ z' |9 E' T. c5 q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); z# `. Q: Z3 ^: a) W# \$ j& y
{( d1 V7 z' y1 e o9 P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 _ x* @% p |' n7 k+ A. r if( !pItemElem )
) x) ?, X/ }5 w continue;9 z4 ?' c# {: K0 [ x2 z$ t
if(pItemElem->GetExtra() > 0)2 t) R+ t' F8 }( ^; x
continue;
) S4 _3 D3 l, Z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , o6 J$ _- D3 U
continue;$ E6 x% }/ E$ d4 s4 P3 L1 ? U, O
if( g_pPlayer->IsUsing( pItemElem ) )1 P: q" F2 q" t4 v! \
continue;3 L# u' {# M5 I0 L
if( pItemElem->IsUndestructable() == TRUE )' y* U; @- j: a3 c5 M+ h2 o
{
6 m0 j8 k7 {3 g; d* Y8 W# w/ h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& N9 \; A% c& b! T continue;! ]- ^5 U& n+ I5 s% a$ q
}" B4 F7 C/ s2 o5 u& j% [1 ]3 T
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- p9 ?) S/ C. g) _$ O% X7 o
}
0 V. b7 ]# R) }1 j5 q9 M break;7 L1 E; H- ]% w( i
}% i; ]1 X, w3 s4 z: J
case 1:
2 {1 r. u4 [9 W# P/ c8 p {
! z, U" {; {, ^: V* r' d1 f8 I //整理背包
- v9 T; I. y# i3 z$ I7 H& l. q //////////////////////////////////////////////////////////////////////////
" i1 [- b) A! j) _$ m //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 O) P* g2 g+ [$ j
//////////////////////////////////////////////////////////////////////////
, \, U# k b2 l; N5 ` //////////////////////////////////////////////////////////////////////////
! T1 _- c3 m" h1 b$ C" c CInventorySort* pInvSort = new CInventorySort;
5 D* g! }5 ?; Q5 Y5 j- j, P vector <sItem> vItem;
& I3 V7 s" {! [( u9 K( T0 l+ \ U& l vItem.resize(MAX_INVENTORY);//初始化大小
4 e f- D5 O4 h; | //////////////////////////////////////////////////////////////////////////0 O+ n0 ~5 e% }9 L. L( c
//填充数据$ N2 P4 x/ A% H: R- t2 s2 W
for (int i=0;i<MAX_INVENTORY;i++)
! D8 h8 r- j& X# P0 d8 V7 a {0 F8 f$ I$ O1 F7 g" ]) g6 A3 |- B l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. q$ [2 i5 S- m4 y, J( e
if (!pItemElem)
, a4 B2 w% j- D6 q/ V {
$ m0 A& Q* S4 S5 U% D) {! Y vItem.dwKind2 = 0xffffffff;5 H f7 P& k: a3 ~7 T" K' K1 x0 m& ]
vItem.dwItemId = 0xffffffff;4 D/ G4 I( a z4 ]. W R- w
vItem.nIndex = i;* p% p2 w: J x! W* A- \; e; t8 D
}else {" R0 d+ L8 m$ r6 `1 `! t
ItemProp* pProp = pItemElem->GetProp();* j4 l \+ R. Z% `; J' Y6 s
vItem.dwKind2 = pProp->dwItemKind2;4 W+ m& U+ @( `- i I' G# H% C
vItem.dwItemId = pItemElem->m_dwItemId;
, U9 q- N6 R _; \( R vItem.nIndex = i;
" n. O }/ g* U. C }/ H3 H- y$ ]# n6 ^+ q- t( v9 d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 A4 Q; ?9 A& `, {8 V5 G# n
}, M4 p, W b) K$ x( s: K6 A2 j
//////////////////////////////////////////////////////////////////////////: n! w5 x9 \3 _0 K; Y7 b4 c p
sort(vItem.begin(),vItem.end());//排序2 a0 Y1 Q" Y2 i3 J' Y
//////////////////////////////////////////////////////////////////////////
( k; n0 x4 e! | F0 V6 b //交换9 z% l4 |1 |$ Y8 A8 [4 W4 ?
for (size_t i=0;i<vItem.size();i++)
5 n7 u8 l2 D+ W7 x6 ^ {
8 h: p9 s7 P# s* N$ e# E2 o9 _8 I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* Y" R% K3 o# l, o
pInvSort->Add(vItem.nIndex);
" ?9 |% i, B* V5 m }2 o% C6 ?3 X4 x+ n3 e9 {+ }1 Q9 w
BYTE nDestPos = 0;, s+ C/ M+ ~( p5 s3 A, i/ t6 B- ?5 v' D
for (int i=0;i<MAX_INVENTORY;i++)
9 `* O4 c5 o) w4 g1 V& `# ?3 K {# [& i) W. `; v) a6 P% I4 |# c! {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 [ \! e0 t! ~
if (pItemElem)
2 B, a6 N* d; C5 `* S6 { {0 H& F% C& a5 L
if (IsUsingItem(pItemElem))
5 n+ D) P5 T# [( K% m {0 i# }4 Z3 v6 I+ k d. ~7 M
//这个位置无法放
+ E0 _) w- c+ ^7 Q nDestPos++;7 Z+ a5 P1 d/ t% f$ J9 r( u" O: `. }7 Y
}
- }' n) |, `# v }
; Q) G- V3 k" |- G BYTE nSrc = pInvSort->GetItemSrc(i);% ]$ b+ i1 r7 |: I9 d3 `( ], y' X n4 G3 ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 b, C1 k+ w. {! P
if (pItemElem)
7 _/ E' Y9 y( x8 g" S; {( `: Z {( @2 ]" H- y$ `2 r5 h3 T
if (IsUsingItem(pItemElem))
' j2 H% k: ^) Y- F# q# i6 L ? {" k4 v, y# e; k( J" o
//这个道具无法移动,跳过# V! M+ [' Y6 A2 S7 p
continue;# P* x* d5 s& A9 X
}/ {( J+ w+ [% X7 e; D$ Q% D
}else{; l( J P; d q2 C3 D4 u
//空位置 不用动6 \, [" M. p! [( |! H! o7 l+ q& X
continue;
, v6 L- |# o) u& Y8 ] }9 }* o' w4 L! @2 p/ e( S: {( B
//////////////////////////////////////////////////////////////////////////
4 ? y4 Z; k; s: X/ K* } //开始移动- K+ X1 y) q, p O% O/ v
if (nSrc == nDestPos)! P& x% _" ]- k
{9 i1 O3 Z, d' v0 B
//原地不动
/ z3 s% d0 \ ] nDestPos++;
0 p+ R% @' E' x$ i1 W continue;" N+ n4 z0 a; z& F& v+ s
}& A6 H5 Q& b! Y' h; U! @+ M5 z
pInvSort->MoveItem(i,nDestPos);& o1 O; j6 Z; L' n% L0 S
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ C* a% v$ B D* O7 n* E3 A: z0 R' N( R Sleep(5);
" D7 Y( P( h- E/ `! s7 \% X [8 N //Error("移动 - %d->%d",nSrc,nDestPos);
& `# r3 }' C, I nDestPos++;9 N' G8 R; _! o! E! ~
}
5 y2 s& b! ^2 d //取第一个元素的信息
& V2 h' P5 t" V/ E# [ /** A7 L* @9 k3 U% Z; O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 F, i& k$ ]8 Z( I" J {
6 G# N `. s& n! C% G% U4 r Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# T! R2 p3 e& W$ X- g/ z1 T g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 V% p4 q7 i, y# L; t8 t
}) t! ^, E; C! ?* U5 u- K: n
*/
( K6 {3 `$ M {% E) X- v' O //////////////////////////////////////////////////////////////////////////
0 e$ b6 D" R7 Q' l* S# Q- o break;
) {* _3 d2 G; M6 G% X }' t: f/ w6 q8 h4 } m
}
$ T1 E+ L& J: ?5 w3 }}0 O$ }0 R3 Z/ q, E. V @6 p; Z# N
m_wndMenu.SetVisible(FALSE);
* V1 f- Y7 R3 I9 e9 g
0 Y, T+ t5 z: X--------------------------------------------------------------------------------------------------------6 x6 Z8 c6 i k6 q* w: }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' I1 z, Z# I! o3 q/ U. Z
{; [# @4 U+ Z% s6 V1 a/ y5 U0 o5 j9 z
BaseMouseCursor();
% k2 k# L2 F# S- U# L( K( U- k}
9 i7 q8 K8 m. g7 d在其下添加:
3 D0 S4 D- l+ n% ^/ n# kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ ]* K \2 V0 G9 y8 @, d, P{ I; R3 z! o7 }8 \; w7 [; C/ i
m_wndMenu.DeleteAllMenu();( Z2 |. c' n% s% ^/ i
m_wndMenu.CreateMenu(this);0 |5 I" I1 t, x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
x0 l( x( ^) i y3 I
9 \. ?* I4 P; d( x1 A1 T8 }+ Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 R2 I0 I: V A1 ?. l: E% V" Z% S
{
; G) a$ b, ]' a" S* n# R //P以上级别才可以删除所有道具
9 ?/ l+ p- ]7 V) u. F& v7 H7 A1 e' t: g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. {7 W' z- N' j
}
0 ~- B2 }) j4 C0 }0 u: fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& F5 w. R0 V$ Lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ k- c8 k. A& T: `! ^# Bm_wndMenu.SetFocus();
a: K+ e: x' @# l4 T. m) j# i* X}
: W+ B6 B% `7 g3 B% _------------------------------------------------------------------------------------------------------------
' l+ t% z& y* |+ C*************************4 v( B4 A& p: V0 h% {
WndField.h文件
- X8 q" c' L3 Z; c/ V( w*************************
) `8 o4 {, z; I! k- R搜索:BOOL m_bReport;' i! z3 c8 |4 j9 }0 B
其后添加:: a: X( Y8 a) O: U5 B( W3 n: W
CWndMenu m_wndMenu;5 J9 h' e5 j( ^' C: y" @9 C
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- x- s" o' ~' k! v; F. W: Q其后添加:
. ~0 o1 a! j0 G: f5 P1 cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
% z, @* z* c8 ]/ Q3 g7 l) t/ g6 ]: }: T" u5 }
$ y* }* ~! P1 K5 ]
|
|