2023-03-08 11:59:45 -03:00
|
|
|
#include <Encounter/EncounterFight.h>
|
|
|
|
|
|
|
|
namespace Sapphire
|
|
|
|
{
|
|
|
|
class IfritNormalData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
static constexpr int IFRIT = 4126276;
|
|
|
|
static constexpr int HELLFIRE = 0;
|
|
|
|
};
|
|
|
|
class IfritStateOne : public EncounterState
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
IfritStateOne( EncounterFightPtr pEncounter ) : EncounterState( pEncounter )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void init() override
|
|
|
|
{
|
|
|
|
Logger::info( "ifrit FAN CLUB GEOcities <blink>EUNUCH ONLY</blink>" );
|
|
|
|
}
|
|
|
|
|
|
|
|
void update( double deltaTime ) override
|
|
|
|
{
|
|
|
|
auto pIfrit = m_pEncounter->getBNpc( IfritNormalData::IFRIT );
|
|
|
|
}
|
|
|
|
|
|
|
|
void finish() override
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
class IfritStateTwo : public EncounterState
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
IfritStateTwo( EncounterFightPtr pEncounter ) : EncounterState( pEncounter )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void init() override
|
|
|
|
{
|
|
|
|
Logger::info( "ifrit FAN CLUB GEOcities <blink>EUNUCH ONLY</blink>" );
|
|
|
|
}
|
|
|
|
|
|
|
|
void update( double deltaTime ) override
|
|
|
|
{
|
|
|
|
auto pIfrit = m_pEncounter->getBNpc( IfritNormalData::IFRIT );
|
|
|
|
}
|
|
|
|
|
|
|
|
void finish() override
|
|
|
|
{
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class IfritEncounterFight : public EncounterFight
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
IfritEncounterFight( InstanceContentPtr pInstance ) : EncounterFight( pInstance )
|
|
|
|
{
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
void init() override
|
|
|
|
{
|
2023-03-08 12:07:08 -03:00
|
|
|
m_status = EncounterFightStatus::IDLE;
|
|
|
|
|
2023-03-08 11:59:45 -03:00
|
|
|
m_stateStack = std::make_shared< EncounterState::StateStack >();
|
|
|
|
|
|
|
|
// todo: i don't like this
|
|
|
|
auto boss = m_pInstance->createBNpcFromLayoutId( IfritNormalData::IFRIT, 13884, Common::BNpcType::Enemy );
|
|
|
|
addBNpc( boss );
|
|
|
|
|
|
|
|
//instance.sendForward();
|
|
|
|
/*
|
|
|
|
auto ifritStateTwo = std::make_shared< IfritStateTwo >( m_stateStack );
|
|
|
|
m_stateStack->push( ifritStateTwo );*/
|
|
|
|
}
|
|
|
|
|
|
|
|
void addState( EncounterState::EncounterStatePtr pState, bool initState = true ) override
|
|
|
|
{
|
|
|
|
m_stateStack->push( pState );
|
|
|
|
if( initState )
|
|
|
|
pState->init();
|
|
|
|
}
|
|
|
|
|
|
|
|
void start() override
|
|
|
|
{
|
|
|
|
auto ifritInitState = std::make_shared< IfritStateOne >( shared_from_this() );
|
|
|
|
addState( ifritInitState );
|
2023-03-08 12:07:08 -03:00
|
|
|
|
|
|
|
m_status = EncounterFightStatus::ACTIVE;
|
2023-03-08 11:59:45 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
void update( double deltaTime ) override
|
|
|
|
{
|
2023-03-08 14:15:13 -03:00
|
|
|
// todo: better way to start fights here..
|
|
|
|
|
|
|
|
auto ifrit = getBNpc( IfritNormalData::IFRIT );
|
|
|
|
|
|
|
|
if( ifrit; ifrit->hateListGetHighestValue() != 0 && m_status == EncounterFightStatus::IDLE )
|
|
|
|
{
|
|
|
|
start();
|
|
|
|
}
|
|
|
|
|
|
|
|
if( m_status == EncounterFightStatus::ACTIVE && ifrit && !ifrit->hateListGetHighest()->isAlive() )
|
|
|
|
{
|
|
|
|
m_status = EncounterFightStatus::FAIL;
|
|
|
|
}
|
|
|
|
|
2023-03-08 11:59:45 -03:00
|
|
|
if( m_stateStack; !m_stateStack->empty() )
|
|
|
|
{
|
|
|
|
if( m_stateStack->top()->shouldFinish() )
|
|
|
|
{
|
|
|
|
m_stateStack->top()->finish();
|
|
|
|
m_stateStack->pop();
|
|
|
|
}
|
|
|
|
|
|
|
|
m_stateStack->top()->update( deltaTime );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void reset() override
|
|
|
|
{
|
|
|
|
auto boss = m_pInstance->getActiveBNpcByLayoutId( IfritNormalData::IFRIT );
|
2023-03-08 14:15:13 -03:00
|
|
|
if( boss )
|
|
|
|
{
|
|
|
|
removeBNpc( IfritNormalData::IFRIT );
|
|
|
|
m_pInstance->removeActor( boss );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-03-08 11:59:45 -03:00
|
|
|
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
|
|
|
|
EncounterFightStatus getEncounterFightStatus() const override
|
|
|
|
{
|
|
|
|
return m_status;
|
|
|
|
}
|
|
|
|
|
|
|
|
void addBNpc( Entity::BNpcPtr pBNpc ) override
|
|
|
|
{
|
|
|
|
m_bnpcs[ pBNpc->getLayoutId() ] = pBNpc;
|
|
|
|
}
|
|
|
|
|
|
|
|
Entity::BNpcPtr getBNpc( uint32_t layoutId ) override
|
|
|
|
{
|
|
|
|
auto bnpc = m_bnpcs.find( layoutId );
|
|
|
|
if( bnpc != std::end( m_bnpcs ) )
|
|
|
|
return bnpc->second;
|
|
|
|
}
|
2023-03-08 14:15:13 -03:00
|
|
|
|
|
|
|
void removeBNpc( uint32_t layoutId ) override
|
|
|
|
{
|
|
|
|
m_bnpcs.erase( layoutId );
|
|
|
|
}
|
2023-03-08 11:59:45 -03:00
|
|
|
};
|
|
|
|
}
|