2018-11-23 16:51:07 +11:00
|
|
|
|
#include <Common.h>
|
|
|
|
|
#include <Exd/ExdDataGenerated.h>
|
|
|
|
|
#include <Util/Util.h>
|
|
|
|
|
|
|
|
|
|
#include "Framework.h"
|
2018-12-23 03:53:08 +01:00
|
|
|
|
#include "EventMgr.h"
|
|
|
|
|
#include "Event/EventHandler.h"
|
2018-11-23 16:51:07 +11:00
|
|
|
|
|
2018-12-23 03:53:08 +01:00
|
|
|
|
using namespace Sapphire::Common;
|
2018-11-23 16:51:07 +11:00
|
|
|
|
|
2018-12-23 03:53:08 +01:00
|
|
|
|
Sapphire::World::Manager::EventMgr::EventMgr( Sapphire::FrameworkPtr pFw ) :
|
|
|
|
|
BaseManager( pFw )
|
|
|
|
|
{
|
2018-11-23 16:51:07 +11:00
|
|
|
|
|
2018-12-23 03:53:08 +01:00
|
|
|
|
}
|
2018-11-23 16:51:07 +11:00
|
|
|
|
|
2018-12-23 03:53:08 +01:00
|
|
|
|
std::string Sapphire::World::Manager::EventMgr::getEventName( uint32_t eventId )
|
2018-11-23 16:51:07 +11:00
|
|
|
|
{
|
2018-12-23 03:53:08 +01:00
|
|
|
|
auto pExdData = framework()->get< Data::ExdDataGenerated >();
|
2018-11-23 16:51:07 +11:00
|
|
|
|
uint16_t eventType = eventId >> 16;
|
|
|
|
|
|
|
|
|
|
auto unknown = std::string{ "unknown" };
|
|
|
|
|
|
|
|
|
|
switch( eventType )
|
|
|
|
|
{
|
|
|
|
|
case Event::EventHandler::EventHandlerType::Quest:
|
|
|
|
|
{
|
2018-11-29 16:55:48 +01:00
|
|
|
|
auto questInfo = pExdData->get< Sapphire::Data::Quest >( eventId );
|
2018-11-23 16:51:07 +11:00
|
|
|
|
if( !questInfo )
|
|
|
|
|
return unknown + "Quest";
|
|
|
|
|
|
|
|
|
|
std::string name = questInfo->id;
|
|
|
|
|
std::size_t pos = name.find_first_of( "_" );
|
|
|
|
|
|
|
|
|
|
return name.substr( 0, pos );
|
|
|
|
|
}
|
|
|
|
|
case Event::EventHandler::EventHandlerType::CustomTalk:
|
|
|
|
|
{
|
2018-11-29 16:55:48 +01:00
|
|
|
|
auto customTalkInfo = pExdData->get< Sapphire::Data::CustomTalk >( eventId );
|
2018-11-23 16:51:07 +11:00
|
|
|
|
if( !customTalkInfo )
|
|
|
|
|
return unknown + "CustomTalk";
|
|
|
|
|
|
|
|
|
|
std::string name = customTalkInfo->name;
|
|
|
|
|
std::size_t pos = name.find_first_of( "_" );
|
|
|
|
|
|
|
|
|
|
return customTalkInfo->name.substr( 0, pos );
|
|
|
|
|
}
|
|
|
|
|
case Event::EventHandler::EventHandlerType::Opening:
|
|
|
|
|
{
|
2018-11-29 16:55:48 +01:00
|
|
|
|
auto openingInfo = pExdData->get< Sapphire::Data::Opening >( eventId );
|
2018-11-23 16:51:07 +11:00
|
|
|
|
if( openingInfo )
|
|
|
|
|
return openingInfo->name;
|
|
|
|
|
return unknown + "Opening";
|
|
|
|
|
}
|
|
|
|
|
case Event::EventHandler::EventHandlerType::Aetheryte:
|
|
|
|
|
{
|
2018-11-29 16:55:48 +01:00
|
|
|
|
auto aetherInfo = pExdData->get< Sapphire::Data::Aetheryte >( eventId & 0xFFFF );
|
2018-11-23 16:51:07 +11:00
|
|
|
|
if( aetherInfo->isAetheryte )
|
|
|
|
|
return "Aetheryte";
|
|
|
|
|
return "Aethernet";
|
|
|
|
|
}
|
|
|
|
|
case Event::EventHandler::EventHandlerType::ICDirector:
|
|
|
|
|
{
|
2020-02-24 23:04:25 +11:00
|
|
|
|
// auto contentInfo = pExdData->get< Sapphire::Data::InstanceContent >( eventId & 0xFFFF );
|
|
|
|
|
return "InstanceContentDirector#" + std::to_string( eventId & 0xFFFF );
|
2018-11-23 16:51:07 +11:00
|
|
|
|
}
|
2019-03-31 23:45:03 +02:00
|
|
|
|
case Event::EventHandler::EventHandlerType::QuestBattleDirector:
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
auto qbInfo = pExdData->get< Sapphire::Data::QuestBattle >( eventId & 0xFFFF );
|
|
|
|
|
if( !qbInfo )
|
|
|
|
|
return "unknown";
|
|
|
|
|
auto questInfo = pExdData->get< Sapphire::Data::Quest >( qbInfo->quest );
|
|
|
|
|
if( !questInfo )
|
|
|
|
|
return "unknown";
|
|
|
|
|
|
|
|
|
|
std::string name = questInfo->name;
|
|
|
|
|
std::string remove( ",★_ '()[]-\x1a\x1\x2\x1f\x1\x3.:" );
|
|
|
|
|
Util::eraseAllIn( name, remove );
|
|
|
|
|
name[ 0 ] = toupper( name[ 0 ] );
|
|
|
|
|
return name;
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-23 16:51:07 +11:00
|
|
|
|
|
|
|
|
|
case Event::EventHandler::EventHandlerType::Warp:
|
|
|
|
|
{
|
2018-11-29 16:55:48 +01:00
|
|
|
|
auto warpInfo = pExdData->get< Sapphire::Data::Warp >( eventId );
|
2018-11-23 16:51:07 +11:00
|
|
|
|
if( warpInfo )
|
|
|
|
|
return "WarpTaxi";
|
|
|
|
|
return unknown + "ChocoboWarp"; //who know
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case Event::EventHandler::EventHandlerType::Shop:
|
|
|
|
|
{
|
2018-11-29 16:55:48 +01:00
|
|
|
|
auto shopInfo = pExdData->get< Sapphire::Data::GilShop >( eventId );
|
2018-11-23 16:51:07 +11:00
|
|
|
|
|
|
|
|
|
return "GilShop" + std::to_string( eventId );
|
|
|
|
|
/*if( shopInfo )
|
|
|
|
|
{
|
|
|
|
|
if( shopInfo->name.empty() || shopInfo->name == " " )
|
|
|
|
|
return "GilShop" + std::to_string( eventId );
|
|
|
|
|
return shopInfo->name;
|
|
|
|
|
}*/
|
|
|
|
|
//return unknown + "GilShop";
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
{
|
|
|
|
|
return unknown;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-12-23 03:53:08 +01:00
|
|
|
|
uint32_t Sapphire::World::Manager::EventMgr::mapEventActorToRealActor( uint32_t eventActorId )
|
2018-11-23 16:51:07 +11:00
|
|
|
|
{
|
2018-12-23 03:53:08 +01:00
|
|
|
|
auto pExdData = framework()->get< Data::ExdDataGenerated >();
|
2018-11-29 16:55:48 +01:00
|
|
|
|
auto levelInfo = pExdData->get< Sapphire::Data::Level >( eventActorId );
|
2018-11-23 16:51:07 +11:00
|
|
|
|
if( levelInfo )
|
|
|
|
|
return levelInfo->object;
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|