mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-03 17:27:47 +00:00
add timers and enrage mechanic;
This commit is contained in:
parent
77089d4083
commit
c1589c1f20
2 changed files with 67 additions and 27 deletions
|
@ -18,6 +18,7 @@ namespace Sapphire
|
||||||
bool m_bShouldFinish{ false };
|
bool m_bShouldFinish{ false };
|
||||||
StateStackPtr m_stateStack;
|
StateStackPtr m_stateStack;
|
||||||
std::shared_ptr< EncounterFight > m_pEncounter;
|
std::shared_ptr< EncounterFight > m_pEncounter;
|
||||||
|
uint64_t m_startTime{ 0 };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EncounterState( std::shared_ptr< EncounterFight > pEncounter ) :
|
EncounterState( std::shared_ptr< EncounterFight > pEncounter ) :
|
||||||
|
@ -29,7 +30,7 @@ namespace Sapphire
|
||||||
bool shouldFinish() { return m_bShouldFinish; };
|
bool shouldFinish() { return m_bShouldFinish; };
|
||||||
|
|
||||||
virtual void init() = 0;
|
virtual void init() = 0;
|
||||||
virtual void update( double deltaTime ) = 0;
|
virtual void update( uint64_t deltaTime ) = 0;
|
||||||
|
|
||||||
virtual void finish() = 0;
|
virtual void finish() = 0;
|
||||||
};
|
};
|
||||||
|
@ -53,7 +54,7 @@ namespace Sapphire
|
||||||
|
|
||||||
virtual void init() = 0;
|
virtual void init() = 0;
|
||||||
virtual void start() = 0;
|
virtual void start() = 0;
|
||||||
virtual void update( double deltaTime ) = 0;
|
virtual void update( uint64_t deltaTime ) = 0;
|
||||||
virtual void reset() = 0;
|
virtual void reset() = 0;
|
||||||
|
|
||||||
virtual void addState( EncounterState::EncounterStatePtr pState, bool initState = true ) = 0;
|
virtual void addState( EncounterState::EncounterStatePtr pState, bool initState = true ) = 0;
|
||||||
|
@ -64,6 +65,7 @@ namespace Sapphire
|
||||||
virtual EncounterFightStatus getEncounterFightStatus() const = 0;
|
virtual EncounterFightStatus getEncounterFightStatus() const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
uint64_t m_startTime{ 0 };
|
||||||
EncounterState::StateStackPtr m_stateStack;
|
EncounterState::StateStackPtr m_stateStack;
|
||||||
std::set< Entity::PlayerPtr > m_playerList;
|
std::set< Entity::PlayerPtr > m_playerList;
|
||||||
std::unordered_map< uint32_t, Entity::BNpcPtr > m_bnpcs;
|
std::unordered_map< uint32_t, Entity::BNpcPtr > m_bnpcs;
|
||||||
|
|
|
@ -8,28 +8,6 @@ namespace Sapphire
|
||||||
static constexpr int IFRIT = 4126276;
|
static constexpr int IFRIT = 4126276;
|
||||||
static constexpr int HELLFIRE = 0;
|
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
|
class IfritStateTwo : public EncounterState
|
||||||
{
|
{
|
||||||
|
@ -43,17 +21,73 @@ namespace Sapphire
|
||||||
Logger::info( "ifrit FAN CLUB GEOcities <blink>EUNUCH ONLY</blink>" );
|
Logger::info( "ifrit FAN CLUB GEOcities <blink>EUNUCH ONLY</blink>" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void update( double deltaTime ) override
|
void update( uint64_t deltaTime ) override
|
||||||
{
|
{
|
||||||
|
if( m_startTime == 0 )
|
||||||
|
m_startTime = deltaTime;
|
||||||
|
|
||||||
|
auto timeElapsedMs = deltaTime - m_startTime;
|
||||||
|
|
||||||
auto pIfrit = m_pEncounter->getBNpc( IfritNormalData::IFRIT );
|
auto pIfrit = m_pEncounter->getBNpc( IfritNormalData::IFRIT );
|
||||||
|
|
||||||
|
pIfrit->setRot( pIfrit->getRot() - .2f );
|
||||||
|
pIfrit->sendPositionUpdate();
|
||||||
|
|
||||||
|
if( timeElapsedMs > 5000 )
|
||||||
|
{
|
||||||
|
m_bShouldFinish = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void finish() override
|
void finish() override
|
||||||
{
|
{
|
||||||
|
Logger::info( "stage 2 done, going back to stage 1" );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
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( uint64_t deltaTime ) override
|
||||||
|
{
|
||||||
|
if( m_startTime == 0 )
|
||||||
|
m_startTime = deltaTime;
|
||||||
|
|
||||||
|
auto timeElapsedMs = deltaTime - m_startTime;
|
||||||
|
|
||||||
|
auto pIfrit = m_pEncounter->getBNpc( IfritNormalData::IFRIT );
|
||||||
|
|
||||||
|
pIfrit->setRot( pIfrit->getRot() + .2f );
|
||||||
|
pIfrit->sendPositionUpdate();
|
||||||
|
|
||||||
|
if( timeElapsedMs > 5000 )
|
||||||
|
{
|
||||||
|
auto ifritTwoState = std::make_shared< IfritStateTwo >( m_pEncounter );
|
||||||
|
m_pEncounter->addState( ifritTwoState );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( timeElapsedMs > 10000 )
|
||||||
|
{
|
||||||
|
pIfrit->hateListGetHighest()->die();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void finish() override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class IfritEncounterFight : public EncounterFight
|
class IfritEncounterFight : public EncounterFight
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -65,6 +99,7 @@ namespace Sapphire
|
||||||
void init() override
|
void init() override
|
||||||
{
|
{
|
||||||
m_status = EncounterFightStatus::IDLE;
|
m_status = EncounterFightStatus::IDLE;
|
||||||
|
m_startTime = 0;
|
||||||
|
|
||||||
m_stateStack = std::make_shared< EncounterState::StateStack >();
|
m_stateStack = std::make_shared< EncounterState::StateStack >();
|
||||||
|
|
||||||
|
@ -93,7 +128,7 @@ namespace Sapphire
|
||||||
m_status = EncounterFightStatus::ACTIVE;
|
m_status = EncounterFightStatus::ACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update( double deltaTime ) override
|
void update( uint64_t deltaTime ) override
|
||||||
{
|
{
|
||||||
// todo: better way to start fights here..
|
// todo: better way to start fights here..
|
||||||
|
|
||||||
|
@ -101,6 +136,7 @@ namespace Sapphire
|
||||||
|
|
||||||
if( ifrit; ifrit->hateListGetHighestValue() != 0 && m_status == EncounterFightStatus::IDLE )
|
if( ifrit; ifrit->hateListGetHighestValue() != 0 && m_status == EncounterFightStatus::IDLE )
|
||||||
{
|
{
|
||||||
|
m_startTime = deltaTime;
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +144,7 @@ namespace Sapphire
|
||||||
{
|
{
|
||||||
m_status = EncounterFightStatus::FAIL;
|
m_status = EncounterFightStatus::FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_stateStack; !m_stateStack->empty() )
|
if( m_stateStack; !m_stateStack->empty() )
|
||||||
{
|
{
|
||||||
if( m_stateStack->top()->shouldFinish() )
|
if( m_stateStack->top()->shouldFinish() )
|
||||||
|
@ -150,6 +186,8 @@ namespace Sapphire
|
||||||
auto bnpc = m_bnpcs.find( layoutId );
|
auto bnpc = m_bnpcs.find( layoutId );
|
||||||
if( bnpc != std::end( m_bnpcs ) )
|
if( bnpc != std::end( m_bnpcs ) )
|
||||||
return bnpc->second;
|
return bnpc->second;
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeBNpc( uint32_t layoutId ) override
|
void removeBNpc( uint32_t layoutId ) override
|
||||||
|
|
Loading…
Add table
Reference in a new issue