|
|
源文件中_Interface文件夹下WndField.cpp文件
) Y9 x* z) }( l9 _0 r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& H" ]! P/ R& h" t2 I- [$ \- N# Y3 Z5 Q/ V. E' ]) M
struct sItem
: @6 W& V- f, y8 X{
3 F6 d. c' o/ f! r$ I2 H: [DWORD dwId;
) p% P0 {6 p! S8 vDWORD dwKind2;
" H, m P, E, N( x; d vDWORD dwItemId;7 b5 W% K! V2 x5 E* V
BYTE nIndex;1 l6 {9 H4 \8 t8 n- O: D& K
sItem(){
" W, \# l5 ^+ \ dwId = dwKind2 = dwItemId = nIndex = 0;: @& `0 c5 S" Z( F% Y
}
& t7 I$ A3 |- j' Fbool operator < (const sItem p2)3 c: _) r! P: ?( Z4 F
{
1 b+ D$ i6 _( W6 j- F8 b* Q- V if (dwKind2 == p2.dwKind2)7 E0 I6 ]6 _3 W$ }
{
" r2 T) {8 b; w: G4 t return dwItemId < p2.dwItemId;
3 M9 U" L6 o3 S1 Y- h9 y }else{
# t; R8 P4 o( u7 d return dwKind2 < p2.dwKind2;4 g3 ]% P) r/ C2 k) M. y
}- \& P* G! F7 {$ i! [
}0 @2 p# R7 F( i% }1 v9 B
};
9 Q* C% t; G- |( |9 k/ Yclass CInventorySort
- H1 W- u6 S( }& S f{
% Q+ e- P o: b* N! Hpublic:3 h# B: V9 d) f9 p+ V
CInventorySort()
2 y4 s; w5 F) O& e4 T p+ j{: P( f- F h, z, D" H. c
m_dwPos = 0;& A$ P& I) I8 T! q/ U, N4 c: v
}
+ I, `9 L( d/ o- k7 t3 g9 [~CInventorySort(){}" {$ }3 N0 l4 B4 w
private:9 ?+ ?2 r$ I' A/ S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; C ^* y$ x6 H+ b
DWORD m_dwPos;
8 K8 r _! e; q% o o* [5 z1 P5 |. kpublic:0 g/ d$ ]9 O* h& A
void Add(BYTE nIndex)
# {# k* v" u: d5 K# T8 R{' S! N; G5 V4 }* A* h- V# H. N( f/ C
if (m_dwPos >= MAX_INVENTORY)" B8 S( P4 b7 l" J
{
' W" |7 \! P/ e0 l) F2 }" L% J' g return;
) D/ t; a; t0 O, _ }; s: Y6 A' E2 e2 p" `4 Y. w' e
m_Item[m_dwPos].nIndex = nIndex;+ k0 F1 a- p+ K7 ?- {5 z" S
m_Item[m_dwPos].dwId = m_dwPos;! f v9 c1 l1 Y3 n" m* P: W. W
m_dwPos++;
' N# y5 X' z2 n J0 J! z}
2 P: g, Q6 I; o" ?: c) u3 J. XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 A. ~/ z8 j% {, ^/ o1 B, ^; V
{" V# [% W# G% M0 m! T
for (int i=0;i<MAX_INVENTORY;i++)
3 e9 A9 H* z) u- [5 h: Z {% J6 F! X$ d3 ^& k. X" z. r
if (m_Item.dwId == dwId)3 x" c6 n: P! R9 R( E
{
) w+ H) b7 Z7 U" e% h& H! _ return m_Item.nIndex;$ P" N9 h, J6 T
}
: o5 S) H9 `$ e0 | }
9 @1 W2 p) ?5 k5 _ return 255;
% p1 N& I- p& U9 k5 D. q5 D! K}' [& w9 r" E; C$ B8 V+ x1 a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 V) J- D' N$ p7 j3 h, x9 d n{
. E0 J) `/ I; y4 t* V, W O BYTE nTmp = 0;
f, |5 [% {3 { bool bDest = false,bSrc = false; r$ e# A; O. Y; m6 j+ Y+ @
for (int i=0;i<MAX_INVENTORY;i++)8 r6 c0 ]! @- T% k
{3 R+ h+ L5 Y, Z; A8 T
if (dwSrcId == m_Item.dwId)
3 |' V7 C0 Q0 ` {, ]: |6 R5 m3 x X! X0 U" U
//id相等 则 改变对应的dest和src0 v. M/ L, C5 x/ ]" m- C
nTmp = m_Item.nIndex;9 d& a, `+ Y1 T& A! X
m_Item.nIndex = dest;
: t' b5 W7 C% `) q; M }
& p C& \3 [8 G }$ }) X& e# r' _3 M
//临时数据保存完毕,交换开始" m: R9 Y/ l% e6 ^+ L; [' G# L
for (int i=0;i<MAX_INVENTORY;i++)6 o' t E& S4 A- E& @" S: T) o
{5 D, g- ~6 y! ]$ W
if (dest == m_Item.nIndex)
z; A% D/ t# D8 u7 m {% i( k2 {! ]# v3 \ r
//id相等 则 改变对应的dest和src
% H7 n. l/ G$ q0 G! |0 R% y1 T8 ^( \ m_Item.nIndex = nTmp;9 A ?' @3 z# ?1 e" d; y; C; I
}1 b1 J& J7 z( ~9 ?6 I7 `4 H9 G4 f! ~$ C2 T
}
/ j v- B# O9 n}+ h! H" ]7 n0 n7 {. Q
};* I& I @3 w% C' ^7 u: @
-------------------------------------------------------------------------7 |) O c9 x2 \9 ?9 O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 | a, L1 ^3 j. y* E X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: \4 a/ b* t$ f& x- T1 d7 i紧靠其上添加:, I3 X3 p! c- B: T
if( pWndBase == &m_wndMenu )
+ f! S9 ?; l& Z! q- k) r{0 Y) b8 S# W" H8 @
switch( nID )3 b5 ^, L( K) U2 v
{
6 |) G) G/ H+ v. r case 2:
0 K" c6 E1 I' Z/ C9 b- D" h- e {( J% P! e" ?7 j9 G5 h/ o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ M1 z4 B _9 ~& }% X( s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 i! K& S1 p, W1 o4 E) q {
" x w/ w3 G5 d# G. `1 p break;
/ `- a# q1 x) A0 {0 S5 c } U" [: z9 w% w+ H( S; I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): k# p& n+ ` |4 }
{
0 P: p9 `6 t5 q& A: X% G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 a+ r/ D4 z) N" Z if( !pItemElem ) }! z+ O, t; z9 @! A O% I& E
continue;2 S) w) E: E: `6 T0 C2 O, i
if(pItemElem->GetExtra() > 0)& N+ Q7 S/ E3 {% U3 W9 I. `2 P
continue;! z5 H+ @) a- A3 N3 Z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / d" j7 B! ?5 j9 v6 ?' i' ]
continue;
9 y) e1 n! @8 i3 c if( g_pPlayer->IsUsing( pItemElem ) )/ }# s/ n! [1 s8 c
continue;
; K3 x4 j) I/ d& X if( pItemElem->IsUndestructable() == TRUE )
0 k* j8 |; q5 n* z7 \' G {$ N: C6 W# I5 H) A) @2 f- i
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) l9 E9 _1 |" j+ M
continue;0 A% b( l) k* O1 c
}
* q! r. x! ^8 d S g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, k' G3 R& \- v8 z }
- z7 _. q4 A! ` C# M, w break;
# p; e6 \* w. E }' ]- x4 t+ n3 `- F. e
case 1:
2 [4 m' L+ Y$ P/ {' t6 a) n4 `+ e {3 K7 z/ Y) u+ j) A7 N7 w( O
//整理背包
$ k/ K9 G* N+ @$ b3 u2 @8 l5 q //////////////////////////////////////////////////////////////////////////8 d9 d8 s1 C- C
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 b) A! q6 ^. [/ ~
//////////////////////////////////////////////////////////////////////////
& J c1 w! Z5 F! E3 S( V$ { //////////////////////////////////////////////////////////////////////////: @' h; y5 L+ K
CInventorySort* pInvSort = new CInventorySort;% y4 [( k( o3 o: `0 v$ T. D. V( @
vector <sItem> vItem;
" V0 \" R( Z5 c f/ l vItem.resize(MAX_INVENTORY);//初始化大小
8 [+ Q X0 |# ?. r& s2 ]# }( @ //////////////////////////////////////////////////////////////////////////
# a1 I& m8 Q) M# L" j6 {- Z4 c //填充数据$ K* c; Z: V4 J8 B
for (int i=0;i<MAX_INVENTORY;i++)
/ l* o3 c; I6 d% `/ O- x$ u1 q {
9 {$ A3 D/ V6 s# ]9 W! r- D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 J) |" {6 ]2 t) v0 [ if (!pItemElem)
: j3 q9 U. l" u0 u {
: |- c# U0 h; t( w8 { vItem.dwKind2 = 0xffffffff;2 k( L2 Z: A7 Q5 r
vItem.dwItemId = 0xffffffff;, {& p0 Q! f* S* ~3 W x, `
vItem.nIndex = i;" D0 F5 w$ `: S% V
}else {
2 @# S7 Y- [' t/ T7 p7 d ItemProp* pProp = pItemElem->GetProp();
9 w/ Y4 ?; E1 Y1 L% I2 A4 L& S7 }8 F vItem.dwKind2 = pProp->dwItemKind2;! p W2 x2 Z, ~! C
vItem.dwItemId = pItemElem->m_dwItemId;
+ N3 u! m' P; p vItem.nIndex = i;
8 |& s1 L% \2 \$ ?, l* D2 n }1 p g) K2 n% {
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% X! k2 q( J1 Y' l/ C- o
}
6 m& A( B8 @5 X7 ? //////////////////////////////////////////////////////////////////////////( ^2 Y' C k: k/ k/ q2 R l
sort(vItem.begin(),vItem.end());//排序7 u$ F+ ~; B% a: p. R
//////////////////////////////////////////////////////////////////////////- a4 g) `* R: G" M
//交换. S, B4 ~' b1 M( J
for (size_t i=0;i<vItem.size();i++)
: {# ~5 H# X3 d9 i8 \+ J: n! k# z {
$ _! p) }0 r- J) K1 r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 D4 m% Z3 v7 t8 Y8 k
pInvSort->Add(vItem.nIndex);
2 i' T l# y# t0 U+ ^ }
: n% {7 s6 @/ v: a) o BYTE nDestPos = 0;
: s T5 j7 w: K* T for (int i=0;i<MAX_INVENTORY;i++)
6 e X$ W* L3 m: m {
/ h- d9 K: a+ G7 s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 @1 |8 Z7 A' Z* Q. A$ {+ u
if (pItemElem)* N. _* U8 r, y6 {# m& P
{
d% h6 U! V+ S9 l if (IsUsingItem(pItemElem)): I: q+ v" A' E3 l' a; e8 D! o( ~9 A
{( A' u1 W! v/ i- a; U
//这个位置无法放
+ v0 Z! |: t8 ^4 Y, _+ B6 U nDestPos++;
% @. U ^& {% W }
8 t8 A) w+ c* D2 Q Q3 C }
* ]( r4 B4 y; {7 L BYTE nSrc = pInvSort->GetItemSrc(i);
) {% b$ X' ^5 U) ^8 z: {; p3 U" l: R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& k9 Q5 M M! j- f, a1 I1 R- t if (pItemElem)
2 C3 C8 S' p4 a# V8 |" d" S {% z8 ]1 J1 D; F2 d9 Z# o
if (IsUsingItem(pItemElem))
; }( Z" \! t9 L) c+ j {
. i3 M7 H* {4 v //这个道具无法移动,跳过$ u, d" E) ]) G" o2 ?8 i
continue;
( J& V2 j# X3 R- ~- J5 [$ m }
$ v( w$ d: v+ y( a! j% ~) o }else{" X( I6 t" t9 W' g5 \# B9 M, \# E
//空位置 不用动
3 w; V7 m( C1 Y x# w0 f1 W; i2 U continue;5 \( c; T U# M7 X
}
: H0 x. u& E- } //////////////////////////////////////////////////////////////////////////
( ~1 w( T' N V) X3 p- D7 ?5 h1 q //开始移动
0 K, Z( t, i+ j# T3 v" r2 @" @, } if (nSrc == nDestPos)
8 t% H: _& Q/ E* ^! L, r6 | {
' u0 @, E0 A# v( Z //原地不动
( b6 h6 y* z, y" H8 S3 K7 X nDestPos++;/ p8 ~. G" H% L5 B8 q6 ^$ f `
continue;7 k) Q# z9 e* h4 X8 V( X3 n
}8 l+ G' ^6 i. e! S, ~: k
pInvSort->MoveItem(i,nDestPos);
2 }5 a i6 p( q2 |# Q( M/ q! _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 m/ L0 I7 ]" Y
Sleep(5);6 M% f% E+ m. g5 Q* N2 S1 K' o
//Error("移动 - %d->%d",nSrc,nDestPos);+ J" I( @; }7 y9 S, {- o
nDestPos++;$ ^3 W# b2 l4 V3 O8 `( d' q% o" n
}
+ j- s/ \; Q$ P" V L8 j //取第一个元素的信息' F1 `1 r) N' J3 h
/*
8 T% u6 J: u u7 E( f5 O8 _' M) Q1 { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& ]) b9 g) S6 y0 ^4 U8 l" }1 h9 R {
0 ]7 ?7 o6 M$ f. k v- m& P n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ K/ f; D, t5 Y# a% N; _" a5 R g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' H |0 f; P2 G0 w+ ?; ] }$ z" h: T5 J- ]4 `6 L1 r
*/) y, a: P& L3 I! l$ |- {+ H; p0 u5 H
//////////////////////////////////////////////////////////////////////////: S0 h( m, _8 e0 y- A- ~
break;
5 c7 l/ d. e3 v% r: ]) |# _ }
5 [ t0 W8 `% e. l. i+ U8 Z- \ } 6 |( s1 N1 U) N& p$ b; t: C& o
}9 |& @' b7 a r5 e" M/ V
m_wndMenu.SetVisible(FALSE);' W( F: Q3 T9 Q6 F; q; s; c0 N
f* I2 v4 k3 t7 y$ N( T$ g# _--------------------------------------------------------------------------------------------------------
6 d9 Y- O% q" U; |/ L& e( ^6 P7 l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ E, x% u/ I. U9 c6 Y; K{& M4 y/ j; F0 Y( Z* Y" _
BaseMouseCursor();( n- `& ]- ~/ o4 v6 ^
}* c/ C% i; @: E6 r- y1 M6 j4 q
在其下添加:
! y- X% h* M5 R* w( ]/ h3 @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% o" [4 z3 \% J6 Y
{+ y5 ?4 y& `* o' Y! W9 K8 A/ @, `5 _. U
m_wndMenu.DeleteAllMenu();
8 J# D4 q9 V9 `7 _+ dm_wndMenu.CreateMenu(this);! z7 a: I4 r5 l7 d8 E& A& q/ a" s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 |/ b6 [! D* s& v- k! ^2 C, c2 M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 m! a5 Z7 a `- k( c{
# f* d: ^/ Y0 D3 Q9 I7 K //P以上级别才可以删除所有道具
" ]' t* C0 K+ ^. W9 C3 L; [- L m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 D# w) _0 u- h }+ C; g5 d8 z}" Q( p" S3 `$ a0 A$ k1 q8 E& b4 m8 B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. ]+ j9 {, ?- o- y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 k$ @ z) C `* I- c: \m_wndMenu.SetFocus();; H# H! {! K; B: H' `, K
}
3 ~# r8 ]5 r9 R! {$ C5 A- U------------------------------------------------------------------------------------------------------------
4 q- Y% _4 u# O7 c" s*************************
; w9 ]2 B- E( s+ h& _WndField.h文件* B/ x7 ?. o$ u# i% q
*************************
- R& a7 q3 T# ?/ s搜索:BOOL m_bReport;
2 w' B0 O# a: p) q, S1 F其后添加:
" O9 f2 n7 Z* s- [0 f$ JCWndMenu m_wndMenu;
2 y+ x' D( E+ u' _# L; X7 Q% B- T# p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# Q, s3 k3 B- Q* \+ d( ]
其后添加:
_# Y* y2 r* r( w+ @) q) s! pvirtual void OnRButtonUp(UINT nFlags, CPoint point);* k& D" Q0 U/ i, I# h9 k T
k' ^- O( V) X, X$ e2 j( l5 y+ L; X6 F3 p; d
|
|