|
|
源文件中_Interface文件夹下WndField.cpp文件 g# {8 E0 J4 v( h: l: X) s2 G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ s1 Q& A4 f9 O! |0 R1 B
9 \ R7 G! g& [/ fstruct sItem
$ Q% n: O0 F# R{
1 | x" L9 R: r' N; d ADWORD dwId;
2 H" H9 ] a* {1 @$ bDWORD dwKind2;
; ~6 i ]& `, V* ~- lDWORD dwItemId;5 u; B8 d$ S8 T2 u% }
BYTE nIndex;6 I8 E8 g2 L7 L7 d6 d
sItem(){
3 H- b6 I: {. w3 H+ A; I dwId = dwKind2 = dwItemId = nIndex = 0;
1 h/ a2 Q& A8 w! q}" N. o) `0 A' @1 X. R
bool operator < (const sItem p2)+ t$ L1 u) }( a+ F3 G" M7 R
{
3 S& Z" K9 z0 [ e& y5 s( g( D- S if (dwKind2 == p2.dwKind2)+ p4 d$ F J# A8 j: V4 j, _
{
0 H* R* O n0 v4 G9 {: J% v5 A return dwItemId < p2.dwItemId;
7 l& d. ]+ r# A% j0 r$ ^ }else{6 f7 o/ ^0 p4 Y" H8 R
return dwKind2 < p2.dwKind2;: i* C: M: R8 g% D' q( s' T
}" E4 ]2 W$ Y2 w* V6 ^! N
}
" p4 J* r1 V6 U};' ]: N5 ^; e! {
class CInventorySort- H0 h: z" l% S2 D+ ?( J4 Y
{* D t7 `- k, f& @) v8 l; u
public:
/ J& F5 e+ j, y$ A/ Z$ k- kCInventorySort()2 r0 r( d" d) y& S; R0 C
{
1 V0 F; m9 d" _! x) n c6 E m_dwPos = 0;9 N' p6 Q+ _, n/ i/ B% q! k! ~# e6 @
}
. J7 a& |/ \) e- L+ }3 f~CInventorySort(){}
) x( b1 _% y. U% uprivate:0 x) z% ^) n: L% ]5 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ F( o: D5 Y3 @( F. }$ X# uDWORD m_dwPos;
2 }: @, w9 E9 \# m$ g2 d# A Xpublic: B% ?: s6 g, f- o! {
void Add(BYTE nIndex), z" T/ X5 Y* [% f% o6 S! y- Q
{/ l$ z; N4 M* \/ t2 z3 f
if (m_dwPos >= MAX_INVENTORY)( ~" c7 g, a) B! `0 [0 l
{
* x/ D2 N% e) |. c2 f9 w9 R P return;
5 T2 i, r3 \. J6 P! A0 e" R }' L! t% U: w8 \
m_Item[m_dwPos].nIndex = nIndex;
% B2 }5 ?* [4 R3 m# R% f m_Item[m_dwPos].dwId = m_dwPos;
' q! @ M3 f0 y4 P3 U/ U m_dwPos++;7 H |) h! s& ?0 b# c
}7 p3 @2 u- [& X7 b+ W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 z. R* R. p" D7 ?* h& D" a
{
0 I, i1 ]! y6 E+ V/ U for (int i=0;i<MAX_INVENTORY;i++)
, v* s; N4 ?$ m! h {
4 U, p! g( D( R! v- x+ W; D7 R if (m_Item.dwId == dwId)4 H$ ` Z8 v" F+ N
{) R9 D; n! Y# O
return m_Item.nIndex;% d6 f ~: H7 n( F9 A' L: {
}
0 W- ~5 c5 v6 J6 J# C& g& ^ }+ U# j* D0 F6 X1 M1 B
return 255;9 ?' p$ s6 T! o* d
}
( g6 G7 B& g; A' ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ u* c$ ^) i" j{
# E9 }7 f: O) i% Y BYTE nTmp = 0;
2 V# R( [; B, e+ {, f bool bDest = false,bSrc = false;1 D" K& f( R/ _8 c
for (int i=0;i<MAX_INVENTORY;i++)
; s* K4 ~1 e' L. S8 O# C3 p0 l {- ?4 k }% [' n% b# B! l0 l0 W k
if (dwSrcId == m_Item.dwId)6 ]6 Q7 J% r y( |: r* X K) Z
{
2 ~, W( E" I" K' y9 `1 M. y1 T //id相等 则 改变对应的dest和src D- L j+ I1 Y4 J% p
nTmp = m_Item.nIndex; B7 ?4 n X3 F; m. q5 Q
m_Item.nIndex = dest;! N# Y# }" N9 m$ Z, \
}
S) X% g# \# _ i" S2 t8 l }
' h8 o" X4 u. u3 A //临时数据保存完毕,交换开始1 L) j% ?0 B% `# Q5 |
for (int i=0;i<MAX_INVENTORY;i++)) [/ ^3 n# k0 W# W! k* [
{
. A/ {5 `3 m/ E N8 E3 _ if (dest == m_Item.nIndex)" `& A8 Q. f9 \% a
{
3 I- ^ k' J- g6 r0 M3 n //id相等 则 改变对应的dest和src) O3 P. q0 G2 Q7 s" y9 I1 s$ n2 r& u
m_Item.nIndex = nTmp; }$ V' Z; r& }' A: v+ C" w, h: P
}& x1 M1 K! m. l, v: a0 u9 w( A# ]
}
" Q6 ~5 r* ?8 s' s' j. K8 C}5 K) T4 B* Y7 |, |7 I5 [5 f9 T5 H d f
};6 p8 a; u; Q$ Y: B
-------------------------------------------------------------------------* U. `& I9 [% T
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) F: @; e8 B1 E. Q$ ~- i
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) Z. M' f* e5 i7 ?# S紧靠其上添加:. [' U) `( g. c
if( pWndBase == &m_wndMenu )- @+ B2 [" \# p. r
{
, a! b- e" ?% i5 a+ @# T switch( nID )
6 p2 B" \! k( M5 N7 w' a8 J {" P L M, q( I7 W% Z8 t/ |
case 2:
! c0 Q2 h( E/ w8 S3 n5 J7 j5 m9 { {# b. N1 ~. G, r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% ~3 U0 [2 u7 N$ [; V. N: H
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% ^6 A; C- l# ]! c/ f4 V! `4 e L {: G/ u) E2 V# ^7 {' I! ?+ n5 O
break;
& w7 S f+ ~/ U$ m d) } }
! w$ r$ }( u+ n0 V3 V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ ^; m4 U l6 R6 P/ M [. G {) \. T8 {0 a! O6 I3 h; J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
y9 p) m3 o. l5 `( K if( !pItemElem )8 m' W5 v J3 z2 y1 p6 e
continue;
, L+ h6 g9 u- y; T, u' ?6 L5 q if(pItemElem->GetExtra() > 0)
S+ T& n7 q O$ ?$ ? continue;
3 c" x c2 e6 X% t. y; O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) J+ q2 q/ c9 I7 W# \
continue;
- h5 h7 W7 k3 V* U6 T- Z8 g if( g_pPlayer->IsUsing( pItemElem ) )
. q. m( e" [* x9 m# F4 b7 Z7 h1 H! C3 C continue;. A3 L& k6 c2 [0 }1 v
if( pItemElem->IsUndestructable() == TRUE )
, P1 n7 {; Y L+ p; q8 l {
& w' N: L* R; M! j1 R5 H% O' [ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 \' y' @8 i8 x4 n) b continue;
6 ~" o @! t& b. ~( \- a$ Y }) ?' L1 |' x1 P
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 Q. ]- h/ A# t( S1 h) J
}& O/ t: G5 W. Z
break;
# u( o4 \' c; a z7 c5 R& L7 j }
' w% W9 t2 X: [6 s case 1:
, A @ b/ q- e0 T( C% d {
# r( h8 [2 Z$ K1 p$ `* r; v //整理背包
1 T( j9 h H4 K0 q //////////////////////////////////////////////////////////////////////////( a# x( M, d, a7 T2 g& r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ y0 Y. \9 z/ i& a0 ~; g /////////////////////////////////////////////////////////////////////////// P# U' Q& G# ?, t, O5 E$ ~
//////////////////////////////////////////////////////////////////////////
) H5 U/ p5 Q% s/ R CInventorySort* pInvSort = new CInventorySort;+ W7 ^2 W, _8 ?3 s3 h
vector <sItem> vItem;
1 v: p! t G# P- p. O! j& d vItem.resize(MAX_INVENTORY);//初始化大小
( O7 u1 j6 U# z/ M* v //////////////////////////////////////////////////////////////////////////3 z" o% T9 U1 p
//填充数据
8 A' Z5 I9 T- V# z for (int i=0;i<MAX_INVENTORY;i++)
; N$ o3 ?/ W% O/ `1 V) e1 p9 I {% `, j4 ?/ m* X* \8 w' L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- W; D3 G! w6 B h
if (!pItemElem)0 O5 U9 h' s/ v* Z8 Q
{3 v* E9 L* X2 X+ O* R. w
vItem.dwKind2 = 0xffffffff;
7 N$ x7 d5 R( x3 g vItem.dwItemId = 0xffffffff;
& K1 O# H- z0 c" g5 M# J8 }! E# h vItem.nIndex = i;
! d1 ?: l( ]" m }else {+ M, I/ N8 \9 Y2 X/ w8 v, X) E2 m' x9 m
ItemProp* pProp = pItemElem->GetProp();- |) x4 r b; @9 k) c/ P
vItem.dwKind2 = pProp->dwItemKind2;* e+ ^4 x" O' I) s/ F
vItem.dwItemId = pItemElem->m_dwItemId;
4 A8 o' ~2 J& P9 T- c9 A) q vItem.nIndex = i;1 D/ m( a; F& V6 F! y* u
}3 G& ~* }7 X# |9 E2 a0 J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 Q' h2 i5 ?8 G4 @ }
) q6 {1 g2 t1 }9 f) V; M, @" j //////////////////////////////////////////////////////////////////////////7 Q! C+ i9 k6 A
sort(vItem.begin(),vItem.end());//排序4 b9 K' h+ J% g. A. h w3 ]
//////////////////////////////////////////////////////////////////////////
' w1 ^# ?: b5 e( V' v. O //交换
) I+ m5 w5 U. b1 h# D K+ Y; z. ^ for (size_t i=0;i<vItem.size();i++)4 P' E$ L; D( h$ g
{2 `3 T9 ~( Q2 ?4 h' t. ?
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ K8 g, [5 s: g% Z# F) g
pInvSort->Add(vItem.nIndex);
- E5 N8 G' m- U7 J/ o' f, } }) ?" I7 \' d9 b: b6 {. R/ W
BYTE nDestPos = 0;
; A# _: ] X u9 X for (int i=0;i<MAX_INVENTORY;i++)
3 v$ o0 x7 q, y {
3 _% Y, u. v( P; m# q, O& d5 `8 F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ R8 }2 B. o7 |% M
if (pItemElem)
$ F b! m- X# G {
8 i. M8 W* d7 `) q- ^; E; x if (IsUsingItem(pItemElem))
6 G3 c/ `, x, M8 \0 v/ R3 V" S {
7 q. z1 c* ?$ Q5 n' y1 f& ~# p //这个位置无法放
; l0 _2 v! X8 {: F7 t nDestPos++;
. G' e6 u; X# w# k5 s }6 P( t) ]% O1 s6 |) K
}- ^: s. @0 J ~: p
BYTE nSrc = pInvSort->GetItemSrc(i);& h- g6 O+ i8 K9 @2 G. u: y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 E' }. q% P( N, m0 ]; x* W if (pItemElem)- j2 D+ t8 X7 K( p. o$ I
{9 p" l! P( F4 r4 i1 S
if (IsUsingItem(pItemElem))
) a" l1 e0 L k S {$ ^1 C9 E1 \3 q5 w2 i5 ^4 E% o
//这个道具无法移动,跳过" T8 p" ~# f8 A/ H: @. H" `
continue;/ a. C" I" u2 ^: `' ?; ~
}4 }% @- t, P$ v# t% |* D; E) z0 v
}else{
) f& Z2 K) c# c# A+ L! V) @ //空位置 不用动
6 u) y5 p, N5 m+ z# @' ]% E continue;
, w/ b+ h. _& D' |+ C }
$ M1 |0 B7 P, i. B6 @: @* L //////////////////////////////////////////////////////////////////////////' F/ v/ g% T- I! b
//开始移动/ y; T& ^6 g9 a! f
if (nSrc == nDestPos)+ T* [! w1 q4 v& f/ R' |, x- z, J9 {( h
{
6 L4 P$ ~- D" \ //原地不动
+ T( z( P6 q9 v- T nDestPos++;" B$ h7 c; ^6 M& R3 W: k; z
continue;$ T( T. i9 W0 O1 C
}. f7 _& k# p9 q9 b& r
pInvSort->MoveItem(i,nDestPos);
( v6 F& L& a6 _6 M) g7 @6 _1 Y g_DPlay.SendMoveItem(0,nSrc,nDestPos);; N' ?( z4 I3 ?0 Q
Sleep(5);
& L" d' Q/ e( \* q //Error("移动 - %d->%d",nSrc,nDestPos);
; @- B+ i) i* {9 v6 X3 B nDestPos++;3 l1 m8 F6 [3 f4 E Z2 N
}
+ P0 P/ E- H1 j9 l! x2 ?$ Z) i9 ] //取第一个元素的信息
9 m: z$ X. _4 x* \. h, G /*1 y+ W5 ]% ?- i; @" a
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' `. C4 G1 H1 O! `
{
* \ ?9 |- Z$ {. @ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ d3 N) K' t" P/ e4 `/ |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. s2 R" v8 j% F/ C# H
}
- z4 q: B/ p; e( D */
/ `- y5 t P$ Z //////////////////////////////////////////////////////////////////////////
& {* u% R* {6 ~+ N! R9 ~5 c' s break;
1 M% a8 }8 s' j }
8 B @0 v! X: m9 Y } 6 X y' V! I" [0 N! R- g$ z' w9 \
}6 X4 ?1 P: \+ j; j7 \
m_wndMenu.SetVisible(FALSE);
, P- l7 L& C( p1 d' {5 `) J6 t1 G& O/ @
--------------------------------------------------------------------------------------------------------, a) z/ x) Y D, p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- g! I, Y" y& K& k{! B* X/ e# N) u" P
BaseMouseCursor();
& e" G- Q2 _$ A% `$ Z- q}% w {7 a! \# p
在其下添加:
; i0 m3 _1 d1 mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 j9 d; b2 V1 S
{
& Q3 ^3 ^ M, \ Y8 R" @- Rm_wndMenu.DeleteAllMenu();
6 A& g! W! E- Z+ ~& B/ m! X+ Z$ q% _* am_wndMenu.CreateMenu(this);
3 {3 B1 u& E) R( d0 h* ^9 s! B( cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); ~9 V, {4 t8 h; x6 ~: R
3 T1 ]- K, o, [7 U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 W9 {4 E) ^- N$ R3 _{( s* S0 j0 z6 ]* c4 ]4 l% p! L
//P以上级别才可以删除所有道具% n, A% \: _ y# H0 { |# U' W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: C- ]: V2 m: p
}( i8 h) w/ D0 I8 J k/ n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( N# n2 _& o, s' ^. Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) `2 U; g+ N" |" h. e; km_wndMenu.SetFocus();
- K# \9 X% b2 K" k2 Q( ^}
+ s" a! Q3 V8 E* f- g; m" |------------------------------------------------------------------------------------------------------------
. h; {6 B! s! P% Z! o9 _*************************
- e y# P% _0 ^& k- d; pWndField.h文件3 ]. I, l7 Y7 k3 K6 o
************************* ?8 C3 ~ |0 s* s& ?3 ]; v
搜索:BOOL m_bReport;( i5 V, X+ x# l. p, q1 j, ~
其后添加:
& B4 b. v/ {4 h' |5 u5 q( A) kCWndMenu m_wndMenu;2 k* U* J* u4 V" c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; w: M( { B* z% g1 ]0 N' O
其后添加:, E% X; b. K \/ @, \3 d- ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);
. X" E& W9 w6 f- W) z0 ~5 g% l" a9 f1 l( A$ | A% I" H* I1 }( r
6 d( p1 d% h4 H( d# K
|
|