Danke,hab aber leider net soviel ahnung von C++ ..:( (Grade dabei zu lernen)
PHP Code:
void CWndWorld::ShowMoverMenu( CMover* pTarget )
{
// 메뉴를 띄우기에 적당한 거리인지 확인.
D3DXVECTOR3 vDist = pTarget->GetPos() - g_pPlayer->GetPos();
FLOAT fDistSq = D3DXVec3LengthSq( &vDist );
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
if( (fDistSq < 20.0f * 20.0f) && ( m_bRButtonDown == FALSE || ( pTarget->IsPlayer() && m_bRButtonDown == TRUE ) ) )
#else // __IMPROVE_SYSTEM_VER15
if( (fDistSq < 20.0f * 20.0f) && m_bRButtonDown == FALSE )
#endif // __IMPROVE_SYSTEM_VER15
{
#ifdef __INVISIBLE_FIX
if( !g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) && ( pTarget->HasBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION ) || pTarget->IsMode( TRANSPARENT_MODE ) ) )
return;
#endif // __INVISIBLE_FIX
g_pPlayer->ClearDest();
m_wndMenuMover.DeleteAllMenu();
m_wndMenuMover.SetLargeWidth( 0 );
// 이걸 안해주면 이미 SetCapture가 된 상태라서 매시지가 매뉴에 안간다.
// 처음 눌렀을 때 그냥 닫혀버리게 된다.
ReleaseCapture();
BOOL bView = FALSE;
if( pTarget->IsPlayer() )
{
#if __VER < 12 // __CSC_VER12_1
if( pTarget->m_vtInfo.IsVendorOpen() )
return;
#endif //__CSC_VER12_1
#if __VER >= 12 // __CSC_VER12_1
if( pTarget->m_vtInfo.IsVendorOpen() )
{
m_wndMenuMover.AppendMenu( 0, MMI_QUERYEQUIP , prj.GetText(TID_MMI_QUERYEQUIP) );
}
else
{
#endif //__CSC_VER12_1
m_wndMenuMover.AppendMenu( 0, MMI_TRADE , prj.GetText( TID_MMI_TRADE ) );
m_wndMenuMover.AppendMenu( 0, MMI_ADD_MESSENGER, prj.GetText( TID_MMI_ADD_MESSENGER ) );
m_wndMenuMover.AppendMenu( 0, MMI_INVITE_PARTY , prj.GetText( TID_MMI_INVITE_PARTY ) );
CGuild* pGuild = g_pPlayer->GetGuild();
if( pGuild )
{
CGuildMember* pMember = pGuild->GetMember( g_pPlayer->m_idPlayer );
if( pMember )
{
if( pGuild->m_adwPower[pMember->m_nMemberLv] & PF_INVITATION )
m_wndMenuMover.AppendMenu( 0, MMI_INVITE_COMPANY, prj.GetText( TID_MMI_INVITE_COMPANY ) );
}
}
#if __VER >= 8 // 8차 듀얼존에 관계없이 PVP가능하게함 Neuz, World
if( !g_pPlayer->IsBaseJob() && pTarget->IsDie() == FALSE ) // 레벨이 15이상일때만 메뉴가 나타남.
{
BOOL bInsert = TRUE;
if(g_pPlayer && g_pPlayer->GetWorld() && g_pPlayer->GetWorld()->GetID() == WI_WORLD_GUILDWAR)
bInsert = FALSE;
if(fDistSq < 10.0f)
bInsert = FALSE;
if( bInsert )
{
m_wndMenuMover.AppendMenu( 0, MMI_DUEL, prj.GetText( TID_MMI_DUEL ) );
}
}
#else // __VER >= 8
if( g_eLocal.GetState( EVE_18 ) == 1 )
{
if( pTarget->IsDie() == FALSE ) // 레벨이 15이상일때만 메뉴가 나타남.
{
BOOL bInsert = FALSE;
//if( ::GetLanguage() == LANG_KOR )
// bInsert = ( g_pPlayer->IsRegionAttr( RA_SAFETY ) == FALSE );
//else
bInsert = ( g_pPlayer->IsRegionAttr( RA_FIGHT ) && pTarget->IsRegionAttr( RA_FIGHT ) ); // __JAPAN_PVP
if( bInsert )
{
m_wndMenuMover.AppendMenu( 0, MMI_DUEL, "Duel - 1 vs 1" );
if( g_Party.IsLeader( g_pPlayer->m_idPlayer ) == TRUE )
m_wndMenuMover.AppendMenu( 0, MMI_DUEL_PARTY, "Duel - Party vs Party" );
}
}
}
#endif // __VER >= 8
m_wndMenuMover.AppendMenu( 0, MMI_TRACE, prj.GetText( TID_MMI_TRACE ) );
m_wndMenuMover.AppendMenu( 0, MMI_QUERYEQUIP , prj.GetText(TID_MMI_QUERYEQUIP) );
m_wndMenuMover.AppendMenu( 0, MMI_CHEER , prj.GetText( TID_MMI_CHEER ) );
#if __VER >= 15 // __CAMPUS
CCampus* pCampus = CCampusHelper::GetInstance()->GetCampus();
if( pCampus == NULL )
m_wndMenuMover.AppendMenu( 0, MMI_INVITE_CAMPUS , prj.GetText(TID_GAME_MENU_CAMPUS_INVITATION) );
else
{
if( pCampus->IsMember( pTarget->m_idPlayer ) )
m_wndMenuMover.AppendMenu( 0, MMI_REMOVE_CAMPUS , prj.GetText(TID_GAME_MENU_CAMPUS_SEVERANCE) );
else
m_wndMenuMover.AppendMenu( 0, MMI_INVITE_CAMPUS , prj.GetText(TID_GAME_MENU_CAMPUS_INVITATION) );
}
#endif // __CAMPUS
#if __VER >= 12 // __CSC_VER12_1
}
#endif //__CSC_VER12_1
bView = TRUE;
}
else
{
LPCHARACTER lpCharacter = pTarget->GetCharacter();
if( lpCharacter )
{
int nCount = 0;
UINT nMenu = 0;
for( int j = 0; j < MAX_MOVER_MENU ; ++j )
{
if( lpCharacter->m_abMoverMenu[ j ] )
{
if( nCount == 0 )
nMenu = j;
++nCount;
if( 1 < nCount )
{
break;
}
}
}
if( 1 < nCount )
{
for( int i = 0; i < MAX_MOVER_MENU; i++ )
{
if( i == MMI_QUEST )
{
// 이 캐릭터에게 퀘스트가 있나?
// 퀘스트prop를 뒤져서 동일 이름의 prop이 있는지 확인.
// 확인 되었으면 일단 퀘스트는 존재하는 것.
// prop에서 해당 캐릭터에 해당하는 퀘스트를 수집한다.
// 수집이 완료되면, 내기수행한 퀘스트 갯수와 비교한다.
// 내가 해당 캐릭터에 해당하는 퀘스트보다 적은 갯수이면 더 할 수 있으므로
// 퀘스트 메뉴 활성화.
}
if( lpCharacter->m_abMoverMenu[ i ] )
{
#ifdef __TEXT_MENU
if( lpCharacter->m_abMoverMenu2[ i ] == FALSE )
{
#endif
if( i == MMI_GUILDBANKING )
{
CGuild* pGuild = g_pPlayer->GetGuild();
if( pGuild && g_eLocal.GetState( ENABLE_GUILD_INVENTORY ) )
m_wndMenuMover.AppendMenu( 0, i, prj.GetText( TID_MMI_DIALOG + i ) );
bView = TRUE;
}
#ifdef __JEFF_11_4
else if( i == MMI_ARENA_ENTER )
{
if( g_pPlayer && !g_pPlayer->IsBaseJob() )
m_wndMenuMover.AppendMenu( 0, i, prj.GetText( TID_MMI_DIALOG + i ) );
bView = TRUE;
}
#endif // __JEFF_11_4
#ifdef __EXCHANGE_ADV
else if( i == MMI_EXCHANGE_ADV )
{
m_wndMenuMover.AppendMenu( 0, i, "Exchanger" );
bView = TRUE;
}
#endif
{
m_wndMenuMover.AppendMenu( 0, i, prj.GetText( TID_MMI_DIALOG + i ) );
bView = TRUE;
}
#ifdef __TEXT_MENU
}
else
{
if( i == MMI_GUILDBANKING )
{
CGuild* pGuild = g_pPlayer->GetGuild();
if( pGuild && g_eLocal.GetState( ENABLE_GUILD_INVENTORY ) )
m_wndMenuMover.AppendMenu( 0, i, lpCharacter->m_abMoverMenuText[i] );
bView = TRUE;
}
#ifdef __JEFF_11_4
else if( i == MMI_ARENA_ENTER )
{
if( g_pPlayer )
m_wndMenuMover.AppendMenu( 0, i, lpCharacter->m_abMoverMenuText[i] );
bView = TRUE;
}
#endif // __JEFF_11_4
else
{
m_wndMenuMover.AppendMenu( 0, i, lpCharacter->m_abMoverMenuText[i] );
bView = TRUE;
}
}
#endif
}
}
}
else
{
OnCommand( nMenu, 0, &m_wndMenuMover );
}
}
}
if( bView )
{
CRect rectBound;
GetBoundRect( pTarget, &rectBound );
m_wndMenuMover.Move( CPoint( rectBound.right, rectBound.top ) );
m_wndMenuMover.SetVisible( TRUE );
m_wndMenuMover.SetFocus();
} else
{
m_wndMenuMover.SetVisible( FALSE );
}
}
else
{
if( g_pPlayer->m_pActMover->IsFly() == FALSE )
g_pPlayer->SetDestObj( pTarget ); // 목표가 주어지면 자동 이동
}
}
Vllt ist ja jemand so net und könnte sich das mal anschauen.
lg
EDIT:Habs gefixxt bekommen :)
Danke an alle ;)