|
|
源文件中_Interface文件夹下WndField.cpp文件' g, X& [9 z9 X9 |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ r7 M+ E: d% m+ h& [2 d+ ?3 U* {
% G. Y- t! H- b$ K7 k1 qstruct sItem
) T4 Y: h5 i6 N% n& T% a{. s8 ^7 _7 L8 }
DWORD dwId;
4 k7 l* ]/ o. X3 sDWORD dwKind2;
a5 D5 I h7 I' f1 kDWORD dwItemId;( z5 C8 ^5 z! s; \8 g+ J
BYTE nIndex;- C! w" |5 g. n- x0 n% X
sItem(){/ O4 i2 X" M% d D
dwId = dwKind2 = dwItemId = nIndex = 0;
1 L W' Y+ X _' O' ~, n}
) E/ \4 f& H, u% K5 {8 }! b, Ybool operator < (const sItem p2)
& V+ u+ B" Y- V4 J3 E) M& {' B3 x{ p7 e- o, S% R+ a0 V8 I
if (dwKind2 == p2.dwKind2)
* ~. x% `9 R% A9 o2 \; i9 P8 U0 A l {
3 J' v! T# b% R: y8 R return dwItemId < p2.dwItemId;
# f4 r+ Y* j( C0 V* M }else{0 X( B7 ~5 I9 \& c: p( l
return dwKind2 < p2.dwKind2;
$ D9 b% b' R8 w/ i8 B: p! t, B% q }! S0 S7 f2 R7 S& J8 a. s
}
1 e, I, j7 W' z+ T$ b% W};
# G! k4 z- Z' E4 h: k1 r) aclass CInventorySort3 n1 h4 V5 b9 c w2 I
{* I" Q) k+ v% l' @; B4 q
public:5 Z9 V' t. l1 |* W3 o1 N, `
CInventorySort()
, e& r" w' @' `1 X* b3 G5 S; C8 v: I{
, E: {2 R: x" R3 a2 Y m_dwPos = 0;
# c; v* M! g. C H# H}: K# H9 z6 Q* Q% P S
~CInventorySort(){}
; R' R& y: V: |( hprivate: W7 L1 v, `& |( q8 S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, S1 T* d) c$ `, d7 e# ^7 M
DWORD m_dwPos;
" ^* r) V! a( h+ K5 d0 c! Opublic:/ z% c- t5 t7 a6 n9 P
void Add(BYTE nIndex)
( A) y; d$ H2 D$ W( x" I, O. B' z{
) B# b, V# J1 Y3 K5 y3 W* b if (m_dwPos >= MAX_INVENTORY)4 Z3 }5 ~4 y2 G
{
) N( U& { p5 Y! U: T; E return;9 X& G$ n" h# n
}
! |5 b" D5 h* f$ ~ m_Item[m_dwPos].nIndex = nIndex;0 c$ p- S2 l9 {& v3 }5 `5 i
m_Item[m_dwPos].dwId = m_dwPos;
1 j9 J B* T0 b3 h" i6 }0 @8 S m_dwPos++;- x5 n) f" A# G
}1 o2 u6 {- v3 u) X# C* J# l1 N: N0 v' {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 X [) b9 C+ H8 f: r{
) _% z+ L. g1 N, X for (int i=0;i<MAX_INVENTORY;i++)
# b' A9 ?5 f, ~2 | { r T' D7 z' t
if (m_Item.dwId == dwId)
( o. i: D3 \2 s9 g+ }: N {' P; A: N2 y$ D& s- U
return m_Item.nIndex;
+ n f; Q1 r& P9 P }# R k$ o/ Q- P$ B0 R
} s) y) _' [4 q* P0 X
return 255;" P& p% |6 S, r
}% n4 G0 M( n X; a9 E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) s+ N" v: O, ~" |; n
{& `- \7 M( Z! g/ i
BYTE nTmp = 0;
' V+ e. E2 A7 m" b bool bDest = false,bSrc = false;* i2 F/ _& q1 s$ P/ m4 A5 C
for (int i=0;i<MAX_INVENTORY;i++)
+ F$ W( w; S# J& d' | {
# }* E- m( R8 y if (dwSrcId == m_Item.dwId)/ v2 I0 Q8 [) T/ I+ z6 j$ ?
{
3 y) O2 |1 t2 ]3 ]- p. Q8 \: k //id相等 则 改变对应的dest和src* i0 a$ l' p/ D, l; D) [( W6 s
nTmp = m_Item.nIndex;
% J, ~1 V5 s7 A m_Item.nIndex = dest;
+ o- q* C! K( K+ N/ s7 ~) B }
* ~; ?) Y7 B% ^" [7 l }7 S' f7 U6 s! M, c
//临时数据保存完毕,交换开始( U6 g; F/ }4 p9 a c6 D5 V* c
for (int i=0;i<MAX_INVENTORY;i++)6 |. V+ k8 k" J
{
1 L" h1 Q: u* x4 C& C if (dest == m_Item.nIndex)# G, V8 ?3 E$ \1 M. g, [/ @
{
. ~' B& x+ T3 L3 T5 N% @& ^ //id相等 则 改变对应的dest和src1 @/ a: Z8 n: O5 m1 `& a
m_Item.nIndex = nTmp;! f$ A; b+ S$ W0 C( l4 [3 z2 U1 U
}8 L" q6 l5 W$ C+ ~; i
}
2 q* q& t9 L$ ~. _5 @1 r5 F% o3 c1 m4 r}7 |8 Y0 r9 y: P P& x# j0 r
};) g1 F# J. A. y7 t# O
-------------------------------------------------------------------------& r' h$ A/ y) k% v6 p# O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' j' N5 F- u% y; ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# D5 O# l7 X. R7 u6 }/ N* e紧靠其上添加:- }" G4 N$ z! t u0 P, V0 q% I
if( pWndBase == &m_wndMenu )
, n- G9 N+ N/ W* t2 O7 z3 X{. t; n; t% o# E. ~- K
switch( nID )
/ x5 ~; z( d( o/ `# Q+ l* r {
0 ^# B3 P! `) V case 2:
]9 c2 \' j! `3 L; @/ r# Q6 Z( r {
* ^( n& }. G0 v+ }( S8 _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 b. D3 z- Y% P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 W$ a7 X; s/ x) @* X {/ D" s) G" a% w) w2 E, i
break;+ b+ t% S2 ~1 m4 q) V! R
}$ h4 S( I* l4 G: A# g
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; S! t9 \6 I- Q {
/ f8 q. x/ j1 T6 R! ^9 r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: O$ s7 r8 c! y8 G9 m
if( !pItemElem )" Y x/ }% {8 v3 m) ~$ e: v
continue;# R/ P8 Y" \" T. H2 n8 ]# Y/ T, g
if(pItemElem->GetExtra() > 0)
, h0 E/ g$ n5 l0 R5 q- ]* U5 P+ ~ continue;9 E* J( }0 g6 F/ y; H" [4 @; K
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * z- O( V; J) V- f
continue;! c; A r& f+ X7 a
if( g_pPlayer->IsUsing( pItemElem ) )
7 v1 Y3 j- |5 g$ v9 h9 t/ l continue;
# A% p/ i' b5 k) O$ O$ C, U if( pItemElem->IsUndestructable() == TRUE )
: i1 W% _& p/ X+ @7 M5 l/ ` {
) j$ \& m z( j9 w' z$ v+ t+ a g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 \, F+ [& M" m* C) G. H1 y continue;
+ f0 x. k% T: r4 d2 F4 Y }4 S- h& V6 g+ r* a3 @" u, I+ t- ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! G' M9 k/ W2 v9 `7 p* e
}
; J$ r2 A$ ~4 _2 J/ _' V3 [ break;8 c7 V8 Y# X& H: m( Q- g
}, w- U% m0 e, n- |5 d x) Z/ M
case 1:
: k! ?+ c2 r1 F/ G {; E) z5 }6 y( {: S/ I
//整理背包
0 g3 Y' t+ k; f; s- ~/ r //////////////////////////////////////////////////////////////////////////
+ \0 f# D# b( x: s+ p' C0 K //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- f5 A* a6 e: K& _3 q, ~0 \8 h; T& K
//////////////////////////////////////////////////////////////////////////
2 M- W% z5 I6 n! N% w5 V0 ` //////////////////////////////////////////////////////////////////////////
: J4 m) S/ Z/ J CInventorySort* pInvSort = new CInventorySort;
( v- o! C) q* P* L4 h- M: Y vector <sItem> vItem;
1 Q; H/ Y) n$ }; S vItem.resize(MAX_INVENTORY);//初始化大小
5 K+ P+ O; C7 h //////////////////////////////////////////////////////////////////////////
, B0 l( ^% X3 y0 V0 v" ? k //填充数据
& |0 x+ B# {5 W0 h% r for (int i=0;i<MAX_INVENTORY;i++)
4 t: D% S3 L$ L {) s+ l8 |" t$ |: o1 P4 X8 C8 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ G2 U# l" ~5 e
if (!pItemElem)
( P( j6 y1 H7 r ]1 U/ ^( ^. l {2 ?% g- W1 o3 J8 N+ {
vItem.dwKind2 = 0xffffffff;
3 g$ e2 m" s) ~" J8 D vItem.dwItemId = 0xffffffff;( @3 J" S, k2 g! K
vItem.nIndex = i;, y% ?/ m9 p# V' u( @$ G
}else {
' b/ E5 z7 w" S) | ItemProp* pProp = pItemElem->GetProp();4 k& n4 c; h, s7 k+ n5 z
vItem.dwKind2 = pProp->dwItemKind2;
" ?; b7 J9 U6 ~& ?+ H' B1 ~ vItem.dwItemId = pItemElem->m_dwItemId;/ c8 }' }7 ]$ e/ `$ q
vItem.nIndex = i;0 S& d$ @ N$ p6 b" y( l# s* ~3 i
}
0 n b& z7 c/ [# F" o1 E //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 F6 j) Q1 x$ Z8 r
}4 a9 X2 H. Z k4 @) a& @# A* U9 w
//////////////////////////////////////////////////////////////////////////
- C9 t* G0 h, ]6 \ L sort(vItem.begin(),vItem.end());//排序
" s5 u0 E; T" T //////////////////////////////////////////////////////////////////////////
1 v- A" G" \, a, I7 b8 g } //交换- ^4 z' A% p" G* j$ s. x8 u. [
for (size_t i=0;i<vItem.size();i++)
. D. H! j/ a$ ^ {1 V% V) x# j7 |# s' s0 Y; o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& n" M* s' m7 _% r9 \
pInvSort->Add(vItem.nIndex);
" F- T# G! \6 y1 j2 a7 e5 {! W9 b }
+ b2 f+ N2 l7 s: S BYTE nDestPos = 0;
% x$ {) k; e5 f3 c M for (int i=0;i<MAX_INVENTORY;i++)
0 R( ]5 e$ u; [( w w8 G& ] {
$ v: K: L) b7 R z$ d4 N8 A6 Q3 R9 B* b; P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 B5 ?+ B4 h( |3 z. A5 f$ t$ F if (pItemElem)' F/ J7 w+ {3 N+ z
{
1 j) T) m9 _9 N) v8 J$ \ if (IsUsingItem(pItemElem)). b: ^$ M, i8 E' j" `
{
1 A% l) X( G; p# F [. A- ? //这个位置无法放
0 |$ g7 T( C. Y' A* L4 w nDestPos++;
9 l: `4 _9 O/ ~& p0 x, V& W }2 W6 P' I+ ~7 o: i
}, i* H: h4 D8 x8 y' y. i& B s
BYTE nSrc = pInvSort->GetItemSrc(i);
' Y1 d6 R0 R2 |" c. x# f& Z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: [' `3 P) L' o2 J1 h8 A' h
if (pItemElem)' h0 k! U( y. m- L9 V/ C7 k
{
7 P% O" v& E( R, A3 | if (IsUsingItem(pItemElem))
# G9 Q$ v/ _: o* |9 v1 F- t" { {
( T6 l4 t4 Z) t# s //这个道具无法移动,跳过' l; X& @/ S: o: s
continue;
; G' C2 f" J/ h$ T }3 _8 t: r5 S. j) x3 m8 ]
}else{
4 |' e! I5 j% l/ A- J+ U //空位置 不用动
; I- o B0 y1 G! W continue;
' {# `5 k8 g" } }
# v4 ~, x' x0 s, w+ d" ]' q' b //////////////////////////////////////////////////////////////////////////
( j& s- X9 H" N0 w2 P2 i/ W //开始移动1 f# v4 a- M/ L o# l2 m
if (nSrc == nDestPos)
9 ]+ p0 O+ _: S# g8 z4 C {; z3 h9 b$ O0 O4 O7 G. U! I
//原地不动' E' e# W$ {3 S% m/ a
nDestPos++;. P! ^7 }( C: ~4 c2 q
continue;
+ M5 `1 H( i9 g+ Y/ G) `3 C$ o9 l+ g# j }
E! [( t$ G2 N* q pInvSort->MoveItem(i,nDestPos);4 A; J- H; @2 t6 J: m
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 r9 c+ @. l- M! I) J
Sleep(5);+ k! K) A4 j% {& d' ^- |
//Error("移动 - %d->%d",nSrc,nDestPos);
% F8 h- B0 p3 x( L0 ~ nDestPos++;3 k/ `5 V0 f, v! b" x7 z
}
6 t$ f5 L( ? W4 `- Y //取第一个元素的信息 d1 \- x$ B% ?4 j) }
/*
: T2 m: l9 v. a. q if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 B( a" ~* E- F
{, Q7 I2 u% x$ c' U, B
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; [4 h$ V6 A: W) _- s4 ?) ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 l% W' m' i- Y* e& b }5 _( \. ^* d* t- H, ^
*/
6 ^" ?" l; c p4 a4 @ //////////////////////////////////////////////////////////////////////////" K6 N. h4 E+ v6 T* A
break;
8 @: E5 O8 S, d5 A! ~4 ~) s }4 o! i, Y- R& ] ^8 K& r- r7 u. ?4 ^
} ) s3 \3 u& h' X& n0 r9 a3 }" N
}
+ q( p: a( O- m4 Xm_wndMenu.SetVisible(FALSE);
! W+ N1 D& T! k: _4 l- A
/ B9 T7 H9 ]# q2 h' I1 \--------------------------------------------------------------------------------------------------------
% {2 @2 H# w5 d1 u8 E* b" P- V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, O4 Q9 f# w: B1 D% W* V( q{
7 J3 A2 y- V7 v, PBaseMouseCursor();
0 a. T+ _+ ^8 W. h1 U6 ~}( C6 ^# s. L7 e! R' w! x: V
在其下添加:
0 R. W# j- t' D8 _" h# k3 Xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; E8 [3 L6 l0 m{8 h: r; p k$ @2 W+ A
m_wndMenu.DeleteAllMenu();* G6 H( O) A$ b; G1 k
m_wndMenu.CreateMenu(this);
# k2 G" S7 c bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% J: C, K, K' ]# Y6 b& n
/ Q' {! X. J2 [3 S9 ~, V2 Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 ^$ m4 A* H6 x1 v% \( a6 Z. o% {
{
# ^% e6 n0 k$ p! i- h3 ]1 W8 N //P以上级别才可以删除所有道具" f3 S) \$ Y0 c) A# q, o
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 i+ r9 }; p8 P& I3 g3 U}
; ~* G: {8 Y, A& z7 Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 L, p3 z& W6 O5 Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, Q$ ]& V+ G. I; L8 p m" hm_wndMenu.SetFocus();
( v' Y! q9 J @' d- r/ A}. @5 E, a6 E# {, X8 W4 e
------------------------------------------------------------------------------------------------------------$ }, s. L6 U$ m; K! {
*************************4 ]7 n0 C7 [( B8 |9 z o* t
WndField.h文件
* T) p$ b. |* ?7 ?*************************1 S% ?7 o5 r: r6 z6 ^
搜索:BOOL m_bReport;
4 Q' |8 R! E& U( h) k2 J其后添加:
+ f' V% O; H/ T0 N/ z6 h7 b) E9 NCWndMenu m_wndMenu;
6 T% Q$ Y7 j+ C/ N搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 l7 o; U9 i7 r1 I4 o1 q
其后添加:
% c: k& t* i B8 s; Avirtual void OnRButtonUp(UINT nFlags, CPoint point);1 v E I. Z9 F2 T$ x2 ], B
8 ]1 }: {1 N) I3 {9 x2 k; F
- T- r/ p7 h" s2 Y3 e
|
|