From 28f47643aa773fd7af5f660599990bbf16feff93 Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 9 Apr 2019 23:17:00 +0200 Subject: [PATCH] Questbattle fail can be triggerd using a command and will remove you from the battle --- src/world/Actor/Player.cpp | 3 +++ src/world/Territory/QuestBattle.cpp | 23 +++++++++++++++++++---- src/world/Territory/QuestBattle.h | 3 ++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 904d2c6c..2aad1b9c 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -490,6 +490,9 @@ bool Sapphire::Entity::Player::exitInstance() auto pZone = getCurrentZone(); auto pInstance = pZone->getAsInstanceContent(); + resetHp(); + resetMp(); + // check if housing zone if( pTeriMgr->isHousingTerritory( m_prevTerritoryTypeId ) ) { diff --git a/src/world/Territory/QuestBattle.cpp b/src/world/Territory/QuestBattle.cpp index 68a9fb3f..b0cb598e 100644 --- a/src/world/Territory/QuestBattle.cpp +++ b/src/world/Territory/QuestBattle.cpp @@ -93,12 +93,14 @@ void Sapphire::QuestBattle::onEnterSceneFinish( Entity::Player& player ) void Sapphire::QuestBattle::onUpdate( uint64_t tickCount ) { + if( !m_pPlayer ) + return; + switch( m_state ) { case Created: { - if( !m_pPlayer ) - return; + if( !m_pPlayer->isLoadingComplete() || !m_pPlayer->isDirectorInitialized() || @@ -131,7 +133,20 @@ void Sapphire::QuestBattle::onUpdate( uint64_t tickCount ) break; case DutyFailed: - setSequence( 0xFE ); + { + if( getSequence() != 0xFE ) + { + setSequence( 0xFE ); + m_instanceFailTime = tickCount; + } + + if( ( static_cast< int64_t >( tickCount ) - static_cast< int64_t >( m_instanceFailTime ) ) > 6000 ) + { + m_pPlayer->exitInstance(); + m_pPlayer.reset(); + } + break; + } } auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >(); @@ -349,7 +364,7 @@ void Sapphire::QuestBattle::success() void Sapphire::QuestBattle::fail() { - + m_state = DutyFailed; } uint32_t Sapphire::QuestBattle::getQuestId() const diff --git a/src/world/Territory/QuestBattle.h b/src/world/Territory/QuestBattle.h index 4667d5ce..e1bffc42 100644 --- a/src/world/Territory/QuestBattle.h +++ b/src/world/Territory/QuestBattle.h @@ -84,8 +84,9 @@ namespace Sapphire uint32_t m_questBattleId; Event::Director::DirectorState m_state; - int64_t m_instanceExpireTime; + uint64_t m_instanceExpireTime; uint64_t m_instanceCommenceTime; + uint64_t m_instanceFailTime; std::map< std::string, Entity::EventObjectPtr > m_eventObjectMap; std::unordered_map< uint32_t, Entity::EventObjectPtr > m_eventIdToObjectMap;