Core/Criteria: Add all values of CriteriaStartEvent

This commit is contained in:
Shauren
2021-06-01 21:16:41 +02:00
parent 4b6ddfbbcc
commit 0b2087ae41
36 changed files with 96 additions and 90 deletions
@@ -855,9 +855,9 @@ void CriteriaHandler::UpdateTimedCriteria(uint32 timeDiff)
}
}
void CriteriaHandler::StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry, uint32 timeLost /* = 0 */)
void CriteriaHandler::StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry, uint32 timeLost /* = 0 */)
{
CriteriaList const& criteriaList = sCriteriaMgr->GetTimedCriteriaByType(type);
CriteriaList const& criteriaList = sCriteriaMgr->GetTimedCriteriaByType(startEvent);
for (Criteria const* criteria : criteriaList)
{
if (criteria->Entry->StartAsset != int32(entry))
@@ -886,9 +886,9 @@ void CriteriaHandler::StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry,
}
}
void CriteriaHandler::RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry)
void CriteriaHandler::RemoveCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry)
{
CriteriaList const& criteriaList = sCriteriaMgr->GetTimedCriteriaByType(type);
CriteriaList const& criteriaList = sCriteriaMgr->GetTimedCriteriaByType(startEvent);
for (Criteria const* criteria : criteriaList)
{
if (criteria->Entry->StartAsset != int32(entry))
@@ -3446,8 +3446,8 @@ void CriteriaMgr::LoadCriteriaList()
{
ASSERT(criteriaEntry->Type < CRITERIA_TYPE_TOTAL, "CRITERIA_TYPE_TOTAL must be greater than or equal to %u but is currently equal to %u",
criteriaEntry->Type + 1, CRITERIA_TYPE_TOTAL);
ASSERT(criteriaEntry->StartEvent < CRITERIA_TIMED_TYPE_MAX, "CRITERIA_TYPE_TOTAL must be greater than or equal to %u but is currently equal to %u",
criteriaEntry->StartEvent + 1, CRITERIA_TIMED_TYPE_MAX);
ASSERT(criteriaEntry->StartEvent < uint8(CriteriaStartEvent::Count), "CriteriaStartEvent::Count must be greater than or equal to %u but is currently equal to %u",
criteriaEntry->StartEvent + 1, uint32(CriteriaStartEvent::Count));
ASSERT(criteriaEntry->FailEvent < uint8(CriteriaFailEvent::Count), "CriteriaFailEvent::Count must be greater than or equal to %u but is currently equal to %u",
criteriaEntry->FailEvent + 1, uint32(CriteriaFailEvent::Count));
@@ -276,8 +276,8 @@ public:
virtual void SendAllData(Player const* receiver) const = 0;
void UpdateTimedCriteria(uint32 timeDiff);
void StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry, uint32 timeLost = 0);
void RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry); // used for quest and scripted timed s
void StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry, uint32 timeLost = 0);
void RemoveCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry); // used for quest and scripted timed s
protected:
virtual void SendCriteriaUpdate(Criteria const* criteria, CriteriaProgress const* progress, Seconds timeElapsed, bool timedCompleted) const = 0;
@@ -345,9 +345,9 @@ public:
return itr != _criteriaTreeByCriteria.end() ? &itr->second : nullptr;
}
CriteriaList const& GetTimedCriteriaByType(CriteriaTimedTypes type) const
CriteriaList const& GetTimedCriteriaByType(CriteriaStartEvent startEvent) const
{
return _criteriasByTimedType[type];
return _criteriasByTimedType[size_t(startEvent)];
}
CriteriaList const* GetCriteriaByFailEvent(CriteriaFailEvent condition, int32 asset)
@@ -412,7 +412,7 @@ private:
CriteriaList _scenarioCriteriasByType[CRITERIA_TYPE_TOTAL];
CriteriaList _questObjectiveCriteriasByType[CRITERIA_TYPE_TOTAL];
CriteriaList _criteriasByTimedType[CRITERIA_TIMED_TYPE_MAX];
CriteriaList _criteriasByTimedType[size_t(CriteriaStartEvent::Count)];
std::unordered_map<int32, CriteriaList> _criteriasByFailEvent[size_t(CriteriaFailEvent::Count)];
};
@@ -1858,11 +1858,11 @@ WorldSafeLocsEntry const* Battleground::GetClosestGraveyard(Player* player)
return sObjectMgr->GetClosestGraveyard(*player, player->GetTeam(), player);
}
void Battleground::StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry)
void Battleground::StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry)
{
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
player->StartCriteriaTimer(type, entry);
player->StartCriteriaTimer(startEvent, entry);
}
void Battleground::SetBracket(PVPDifficultyEntry const* bracketEntry)
+1 -1
View File
@@ -280,7 +280,7 @@ class TC_GAME_API Battleground
/* achievement req. */
virtual bool IsAllNodesControlledByTeam(uint32 /*team*/) const { return false; }
void StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry);
void StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry);
virtual bool CheckAchievementCriteriaMeet(uint32 /*criteriaId*/, Player const* /*player*/, Unit const* /*target*/ = nullptr, uint32 /*miscvalue1*/ = 0);
/* Battleground */
@@ -214,7 +214,7 @@ void BattlegroundAB::StartingEventOpenDoors()
DoorOpen(BG_AB_OBJECT_GATE_H);
// Achievement: Let's Get This Done
StartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, AB_EVENT_START_BATTLE);
StartCriteriaTimer(CriteriaStartEvent::SendEvent, AB_EVENT_START_BATTLE);
}
void BattlegroundAB::AddPlayer(Player* player)
@@ -433,7 +433,7 @@ void BattlegroundAV::StartingEventOpenDoors()
DoorOpen(BG_AV_OBJECT_DOOR_A);
// Achievement: The Alterac Blitz
StartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, BG_AV_EVENT_START_BATTLE);
StartCriteriaTimer(CriteriaStartEvent::SendEvent, BG_AV_EVENT_START_BATTLE);
}
void BattlegroundAV::AddPlayer(Player* player)
@@ -142,7 +142,7 @@ void BattlegroundEY::StartingEventOpenDoors()
}
// Achievement: Flurry
StartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, BG_EY_EVENT_START_BATTLE);
StartCriteriaTimer(CriteriaStartEvent::SendEvent, BG_EY_EVENT_START_BATTLE);
}
void BattlegroundEY::AddPoints(uint32 Team, uint32 Points)
@@ -345,7 +345,7 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff)
ToggleTimer();
DemolisherStartState(false);
Status = BG_SA_ROUND_ONE;
StartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, (Attackers == TEAM_ALLIANCE) ? 23748 : 21702);
StartCriteriaTimer(CriteriaStartEvent::SendEvent, (Attackers == TEAM_ALLIANCE) ? 23748 : 21702);
}
if (TotalTime >= BG_SA_BOAT_START)
StartShips();
@@ -367,7 +367,7 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff)
ToggleTimer();
DemolisherStartState(false);
Status = BG_SA_ROUND_TWO;
StartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, (Attackers == TEAM_ALLIANCE) ? 23748 : 21702);
StartCriteriaTimer(CriteriaStartEvent::SendEvent, (Attackers == TEAM_ALLIANCE) ? 23748 : 21702);
// status was set to STATUS_WAIT_JOIN manually for Preparation, set it back now
SetStatus(STATUS_IN_PROGRESS);
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
@@ -224,7 +224,7 @@ void BattlegroundWS::StartingEventOpenDoors()
SpawnBGObject(BG_WS_OBJECT_DOOR_H_4, RESPAWN_ONE_DAY);
// players joining later are not eligibles
StartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, WS_EVENT_START_BATTLE);
StartCriteriaTimer(CriteriaStartEvent::SendEvent, WS_EVENT_START_BATTLE);
}
void BattlegroundWS::AddPlayer(Player* player)
@@ -474,7 +474,7 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* player, GameObject* target
UpdateFlagState(HORDE, BG_WS_FLAG_STATE_ON_PLAYER);
UpdateWorldState(BG_WS_FLAG_UNK_ALLIANCE, 1);
player->CastSpell(player, BG_WS_SPELL_SILVERWING_FLAG, true);
player->StartCriteriaTimer(CRITERIA_TIMED_TYPE_SPELL_TARGET, BG_WS_SPELL_SILVERWING_FLAG_PICKED);
player->StartCriteriaTimer(CriteriaStartEvent::BeSpellTarget, BG_WS_SPELL_SILVERWING_FLAG_PICKED);
if (_flagState[1] == BG_WS_FLAG_STATE_ON_PLAYER)
_bothFlagsKept = true;
}
@@ -492,7 +492,7 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* player, GameObject* target
UpdateFlagState(ALLIANCE, BG_WS_FLAG_STATE_ON_PLAYER);
UpdateWorldState(BG_WS_FLAG_UNK_HORDE, 1);
player->CastSpell(player, BG_WS_SPELL_WARSONG_FLAG, true);
player->StartCriteriaTimer(CRITERIA_TIMED_TYPE_SPELL_TARGET, BG_WS_SPELL_WARSONG_FLAG_PICKED);
player->StartCriteriaTimer(CriteriaStartEvent::BeSpellTarget, BG_WS_SPELL_WARSONG_FLAG_PICKED);
if (_flagState[0] == BG_WS_FLAG_STATE_ON_PLAYER)
_bothFlagsKept = true;
}
+21 -15
View File
@@ -580,6 +580,27 @@ enum class CriteriaFailEvent : uint8
Count
};
enum class CriteriaStartEvent : uint8
{
None = 0, // - NONE -
ReachLevel = 1, // Reach level {#Level}
CompleteDailyQuest = 2, // Complete daily quest "{QuestV2}"
StartBattleground = 3, // Start battleground "{Map}"
WinRankedArenaMatchWithTeamSize = 4, // Win a ranked arena match with team size {#Team Size}
GainAura = 5, // Gain aura "{Spell}"
GainAuraEffect = 6, // Gain aura effect "{SpellAuraNames.EnumID}"
CastSpell = 7, // Cast spell "{Spell}"
BeSpellTarget = 8, // Have spell "{Spell}" cast on you
AcceptQuest = 9, // Accept quest "{QuestV2}"
KillNPC = 10, // Kill NPC "{Creature}"
KillPlayer = 11, // Kill player
UseItem = 12, // Use item "{Item}"
SendEvent = 13, // Send event "{GameEvents}" (player-sent/instance only)
BeginScenarioStep = 14, // Begin scenario step "{#Step}" (for use with "Player on Scenario" modifier only)
Count
};
enum CriteriaFlags
{
CRITERIA_FLAG_SHOW_PROGRESS_BAR = 0x00000001, // Show progress as bar
@@ -590,21 +611,6 @@ enum CriteriaFlags
CRITERIA_FLAG_MONEY_COUNTER = 0x00000020 // Displays counter as money
};
enum CriteriaTimedTypes : uint8
{
CRITERIA_TIMED_TYPE_EVENT = 1, // Timer is started by internal event with id in timerStartEvent
CRITERIA_TIMED_TYPE_QUEST = 2, // Timer is started by accepting quest with entry in timerStartEvent
CRITERIA_TIMED_TYPE_SPELL_CASTER = 5, // Timer is started by casting a spell with entry in timerStartEvent
CRITERIA_TIMED_TYPE_SPELL_TARGET = 6, // Timer is started by being target of spell with entry in timerStartEvent
CRITERIA_TIMED_TYPE_CREATURE = 7, // Timer is started by killing creature with entry in timerStartEvent
CRITERIA_TIMED_TYPE_ITEM = 9, // Timer is started by using item with entry in timerStartEvent
CRITERIA_TIMED_TYPE_UNK = 10, // Unknown
CRITERIA_TIMED_TYPE_UNK_2 = 13, // Unknown
CRITERIA_TIMED_TYPE_SCENARIO_STAGE = 14, // Timer is started by changing stages in a scenario
CRITERIA_TIMED_TYPE_MAX
};
enum CriteriaTypes : uint8
{
CRITERIA_TYPE_KILL_CREATURE = 0,
+6 -6
View File
@@ -15370,7 +15370,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
m_QuestStatusSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
StartCriteriaTimer(CRITERIA_TIMED_TYPE_QUEST, quest_id);
StartCriteriaTimer(CriteriaStartEvent::AcceptQuest, quest_id);
SendQuestUpdate(quest_id);
@@ -16808,7 +16808,7 @@ void Player::KilledMonsterCredit(uint32 entry, ObjectGuid guid /*= ObjectGuid::E
real_entry = killed->GetEntry();
}
StartCriteriaTimer(CRITERIA_TIMED_TYPE_CREATURE, real_entry); // MUST BE CALLED FIRST
StartCriteriaTimer(CriteriaStartEvent::KillNPC, real_entry); // MUST BE CALLED FIRST
UpdateCriteria(CRITERIA_TYPE_KILL_CREATURE, real_entry, addKillCount, 0, killed);
UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_MONSTER, entry, 1, guid);
@@ -26513,14 +26513,14 @@ bool Player::HasAchieved(uint32 achievementId) const
return m_achievementMgr->HasAchieved(achievementId);
}
void Player::StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry, uint32 timeLost/* = 0*/)
void Player::StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry, uint32 timeLost/* = 0*/)
{
m_achievementMgr->StartCriteriaTimer(type, entry, timeLost);
m_achievementMgr->StartCriteriaTimer(startEvent, entry, timeLost);
}
void Player::RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry)
void Player::RemoveCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry)
{
m_achievementMgr->RemoveCriteriaTimer(type, entry);
m_achievementMgr->RemoveCriteriaTimer(startEvent, entry);
}
void Player::ResetCriteria(CriteriaFailEvent condition, int32 failAsset, bool evenIfCriteriaComplete /* = false*/)
+2 -2
View File
@@ -2482,8 +2482,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void ResetAchievements();
void ResetCriteria(CriteriaFailEvent condition, int32 failAsset, bool evenIfCriteriaComplete = false);
void UpdateCriteria(CriteriaTypes type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, Unit* unit = nullptr);
void StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry, uint32 timeLost = 0);
void RemoveCriteriaTimer(CriteriaTimedTypes type, uint32 entry);
void StartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry, uint32 timeLost = 0);
void RemoveCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry);
void CompletedAchievement(AchievementEntry const* entry);
bool ModifierTreeSatisfied(uint32 modifierTreeId) const;
+1 -1
View File
@@ -485,7 +485,7 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPackets::Quest::QuestLogRemove
_player->TakeQuestSourceItem(questId, true); // remove quest src item from player
_player->AbandonQuest(questId); // remove all quest items player received before abandoning quest. Note, this does not remove normal drop items that happen to be quest requirements.
_player->RemoveActiveQuest(questId);
_player->RemoveCriteriaTimer(CRITERIA_TIMED_TYPE_QUEST, questId);
_player->RemoveCriteriaTimer(CriteriaStartEvent::AcceptQuest, questId);
TC_LOG_INFO("network", "%s abandoned quest %u", _player->GetGUID().ToString().c_str(), questId);
+4 -4
View File
@@ -627,25 +627,25 @@ void InstanceScript::DoUpdateCriteria(CriteriaTypes type, uint32 miscValue1 /*=
}
// Start timed achievement for all players in instance
void InstanceScript::DoStartCriteriaTimer(CriteriaTimedTypes type, uint32 entry)
void InstanceScript::DoStartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry)
{
Map::PlayerList const& PlayerList = instance->GetPlayers();
if (!PlayerList.isEmpty())
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
if (Player* player = i->GetSource())
player->StartCriteriaTimer(type, entry);
player->StartCriteriaTimer(startEvent, entry);
}
// Stop timed achievement for all players in instance
void InstanceScript::DoStopCriteriaTimer(CriteriaTimedTypes type, uint32 entry)
void InstanceScript::DoStopCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry)
{
Map::PlayerList const& PlayerList = instance->GetPlayers();
if (!PlayerList.isEmpty())
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
if (Player* player = i->GetSource())
player->RemoveCriteriaTimer(type, entry);
player->RemoveCriteriaTimer(startEvent, entry);
}
// Remove Auras due to Spell on all players in instance
+3 -3
View File
@@ -40,7 +40,7 @@ class Player;
class Unit;
struct InstanceSpawnGroupInfo;
enum CriteriaTypes : uint8;
enum CriteriaTimedTypes : uint8;
enum class CriteriaStartEvent : uint8;
enum EncounterCreditType : uint8;
namespace WorldPackets
{
@@ -223,8 +223,8 @@ class TC_GAME_API InstanceScript : public ZoneScript
void DoUpdateCriteria(CriteriaTypes type, uint32 miscValue1 = 0, uint32 miscValue2 = 0, Unit* unit = nullptr);
// Start/Stop Timed Achievement Criteria for all players in instance
void DoStartCriteriaTimer(CriteriaTimedTypes type, uint32 entry);
void DoStopCriteriaTimer(CriteriaTimedTypes type, uint32 entry);
void DoStartCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry);
void DoStopCriteriaTimer(CriteriaStartEvent startEvent, uint32 entry);
// Remove Auras due to Spell on all players in instance
void DoRemoveAurasDueToSpellOnPlayers(uint32 spell);
+3 -3
View File
@@ -2616,14 +2616,14 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask)
if (Player* player = unit->ToPlayer())
{
player->StartCriteriaTimer(CRITERIA_TIMED_TYPE_SPELL_TARGET, m_spellInfo->Id);
player->StartCriteriaTimer(CriteriaStartEvent::BeSpellTarget, m_spellInfo->Id);
player->UpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, m_spellInfo->Id, 0, 0, m_caster);
player->UpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET2, m_spellInfo->Id);
}
if (Player* player = m_caster->ToPlayer())
{
player->StartCriteriaTimer(CRITERIA_TIMED_TYPE_SPELL_CASTER, m_spellInfo->Id);
player->StartCriteriaTimer(CriteriaStartEvent::CastSpell, m_spellInfo->Id);
player->UpdateCriteria(CRITERIA_TYPE_CAST_SPELL2, m_spellInfo->Id, 0, 0, unit);
}
@@ -3335,7 +3335,7 @@ void Spell::_cast(bool skipCheck)
{
if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CAST_ITEM) && m_CastItem)
{
player->StartCriteriaTimer(CRITERIA_TIMED_TYPE_ITEM, m_CastItem->GetEntry());
player->StartCriteriaTimer(CriteriaStartEvent::UseItem, m_CastItem->GetEntry());
player->UpdateCriteria(CRITERIA_TYPE_USE_ITEM, m_CastItem->GetEntry());
}
@@ -387,7 +387,7 @@ class npc_brann_bronzebeard_anraphet : public CreatureScript
case EVENT_BRANN_UNLOCK_DOOR:
Talk(BRANN_SAY_UNLOCK_DOOR);
_instance->SetBossState(DATA_VAULT_OF_LIGHTS, DONE);
_instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_VAULT_OF_LIGHTS_EVENT);
_instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_VAULT_OF_LIGHTS_EVENT);
events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, 3500);
break;
case EVENT_BRANN_THINK:
@@ -157,7 +157,7 @@ public:
_Reset();
me->SetReactState(REACT_AGGRESSIVE);
instance->SetData(DATA_ONYXIA_PHASE, Phase);
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMED_START_EVENT);
}
void JustEngagedWith(Unit* /*who*/) override
@@ -168,7 +168,7 @@ public:
events.ScheduleEvent(EVENT_TAIL_SWEEP, urand(15000, 20000));
events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 5000));
events.ScheduleEvent(EVENT_WING_BUFFET, urand(10000, 20000));
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMED_START_EVENT);
}
void JustSummoned(Creature* summoned) override
@@ -171,7 +171,7 @@ public:
Initialize();
instance->SetBossState(DATA_HERALD_VOLAZJ, NOT_STARTED);
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_QUICK_DEMISE_START_EVENT);
// Visible for all players in insanity
for (uint32 i = 173; i <= 177; ++i)
@@ -191,7 +191,7 @@ public:
Talk(SAY_AGGRO);
instance->SetBossState(DATA_HERALD_VOLAZJ, IN_PROGRESS);
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_QUICK_DEMISE_START_EVENT);
}
void JustSummoned(Creature* summon) override
@@ -123,7 +123,7 @@ public:
{
BossAI::Reset();
me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE));
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_GOTTA_GO_START_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_GOTTA_GO_START_EVENT);
_nextSubmerge = 75;
_petCount = 0;
}
@@ -140,7 +140,7 @@ public:
door2->SetGoState(GO_STATE_ACTIVE);
Talk(SAY_AGGRO);
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_GOTTA_GO_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_GOTTA_GO_START_EVENT);
events.SetPhase(PHASE_EMERGE);
events.ScheduleEvent(EVENT_CLOSE_DOOR, Seconds(5));
@@ -393,7 +393,7 @@ class boss_fjola : public CreatureScript
TouchSpellId = SPELL_LIGHT_TOUCH;
SpikeSpellId = SPELL_LIGHT_TWIN_SPIKE;
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, EVENT_START_TWINS_FIGHT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, EVENT_START_TWINS_FIGHT);
boss_twin_baseAI::Reset();
}
@@ -432,7 +432,7 @@ class boss_fjola : public CreatureScript
void JustEngagedWith(Unit* who) override
{
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, EVENT_START_TWINS_FIGHT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, EVENT_START_TWINS_FIGHT);
events.ScheduleEvent(EVENT_SPECIAL_ABILITY, 45 * IN_MILLISECONDS);
me->SummonCreature(NPC_BULLET_CONTROLLER, ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY(), ToCCommonLoc[1].GetPositionZ(), 0.0f, TEMPSUMMON_MANUAL_DESPAWN);
boss_twin_baseAI::JustEngagedWith(who);
@@ -812,7 +812,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
_events.Reset();
_icewall = 0;
_events.ScheduleEvent(EVENT_ESCAPE, 1000);
_instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
_instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_NOT_RETREATING_EVENT);
}
void JustDied(Unit* /*killer*/) override
@@ -1061,7 +1061,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
}
}
_invincibility = false;
_instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
_instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_NOT_RETREATING_EVENT);
_events.ScheduleEvent(EVENT_ESCAPE_7, 1000);
break;
case EVENT_ESCAPE_7:
@@ -355,7 +355,7 @@ class instance_halls_of_reflection : public InstanceMapScript
}
break;
case FAIL:
DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT);
DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_NOT_RETREATING_EVENT);
if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID))
jainaOrSylvanas->DespawnOrUnsummon(10000);
@@ -153,7 +153,7 @@ public:
_JustDied();
// start achievement timer (kill Maexna within 20 min)
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMED_START_EVENT);
}
void JustEngagedWith(Unit* /*who*/) override
@@ -78,7 +78,7 @@ public:
{
_Reset();
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
}
void KilledUnit(Unit* /*Victim*/) override
@@ -101,7 +101,7 @@ public:
events.ScheduleEvent(EVENT_HATEFUL, Seconds(1));
events.ScheduleEvent(EVENT_BERSERK, Minutes(6));
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT);
}
void UpdateAI(uint32 diff) override
@@ -383,7 +383,7 @@ public:
SetPhase(PHASE_NOT_STARTED, true);
me->SetReactState(REACT_PASSIVE);
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMED_START_EVENT);
}
uint32 GetData(uint32 data) const override
@@ -582,7 +582,7 @@ public:
Talk(SAY_START_P_ONE);
DoCast(SPELL_BERSERK); // periodic aura, first tick in 10 minutes
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMED_START_EVENT);
}
void EnterEvadeMode(EvadeReason /*why*/) override
@@ -138,7 +138,7 @@ class boss_drakos : public CreatureScript
Talk(SAY_DEATH);
// start achievement timer (kill Eregos within 20 min)
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMED_START_EVENT);
}
void KilledUnit(Unit* /*victim*/) override
@@ -97,7 +97,7 @@ public:
{
Initialize();
_Reset();
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMELY_DEATH_START_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMELY_DEATH_START_EVENT);
}
void JustEngagedWith(Unit* /*who*/) override
@@ -108,7 +108,7 @@ public:
events.ScheduleEvent(EVENT_ARC_LIGHTNING, 15000);
events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 20000);
events.ScheduleEvent(EVENT_RESUME_PULSING_SHOCKWAVE, 1000);
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMELY_DEATH_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMELY_DEATH_START_EVENT);
}
void JustDied(Unit* /*killer*/) override
@@ -68,7 +68,7 @@ class boss_maiden_of_grief : public CreatureScript
events.ScheduleEvent(EVENT_SHOCK_OF_SORROW, urand(20000, 25000));
events.ScheduleEvent(EVENT_PILLAR_OF_WOE, urand(5000, 15000));
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_GOOD_GRIEF_START_EVENT);
}
void JustEngagedWith(Unit* /*who*/) override
@@ -76,7 +76,7 @@ class boss_maiden_of_grief : public CreatureScript
_JustEngagedWith();
Talk(SAY_AGGRO);
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_GOOD_GRIEF_START_EVENT);
}
void KilledUnit(Unit* who) override
@@ -786,7 +786,7 @@ class npc_living_constellation : public CreatureScript
me->DespawnOrUnsummon(1);
if (InstanceScript* instance = me->GetInstanceScript())
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, EVENT_ID_SUPERMASSIVE_START);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, EVENT_ID_SUPERMASSIVE_START);
caster->CastSpell(nullptr, SPELL_BLACK_HOLE_CREDIT, TRIGGERED_FULL_MASK);
caster->ToCreature()->DespawnOrUnsummon(1);
}
@@ -139,7 +139,7 @@ class boss_ignis : public CreatureScript
if (Vehicle* _vehicle = me->GetVehicleKit())
_vehicle->RemoveAllPassengers();
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEVEMENT_IGNIS_START_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEVEMENT_IGNIS_START_EVENT);
}
void JustEngagedWith(Unit* /*who*/) override
@@ -153,7 +153,7 @@ class boss_ignis : public CreatureScript
events.ScheduleEvent(EVENT_END_POT, 40000);
events.ScheduleEvent(EVENT_BERSERK, 480000);
Initialize();
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEVEMENT_IGNIS_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEVEMENT_IGNIS_START_EVENT);
}
void JustDied(Unit* /*killer*/) override
@@ -199,7 +199,7 @@ class boss_kologarn : public CreatureScript
if (!right && !left)
events.ScheduleEvent(EVENT_STONE_SHOUT, 5000);
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, CRITERIA_DISARMED);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, CRITERIA_DISARMED);
}
else
{
@@ -203,7 +203,7 @@ class boss_xt002 : public CreatureScript
Initialize();
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_MUST_DECONSTRUCT_FASTER);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_MUST_DECONSTRUCT_FASTER);
}
void EnterEvadeMode(EvadeReason /*why*/) override
@@ -223,7 +223,7 @@ class boss_xt002 : public CreatureScript
//Tantrum is cast a bit slower the first time.
events.ScheduleEvent(EVENT_TYMPANIC_TANTRUM, urand(TIMER_TYMPANIC_TANTRUM_MIN, TIMER_TYMPANIC_TANTRUM_MAX) * 2);
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_MUST_DECONSTRUCT_FASTER);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_MUST_DECONSTRUCT_FASTER);
}
void DoAction(int32 action) override
@@ -493,7 +493,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
events.SetPhase(PHASE_ONE);
instance->SetData(DATA_DRIVE_ME_CRAZY, uint32(true));
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMED_START_EVENT);
Initialize();
@@ -517,7 +517,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
if (Creature* keeper = ObjectAccessor::GetCreature(*me, instance->GetGuidData(i)))
keeper->SetInCombatWith(me);
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_TIMED_START_EVENT);
DoCastAOE(SPELL_SUMMON_GUARDIAN_2, { SPELLVALUE_MAX_TARGETS, 1 });
DoCast(me, SPELL_SANITY_PERIODIC);
@@ -572,7 +572,7 @@ class instance_ulduar : public InstanceMapScript
case NPC_GUARDIAN_OF_LIFE:
if (!conSpeedAtory)
{
DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, CRITERIA_CON_SPEED_ATORY);
DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, CRITERIA_CON_SPEED_ATORY);
conSpeedAtory = true;
}
break;
@@ -581,7 +581,7 @@ class instance_ulduar : public InstanceMapScript
case NPC_BRIGHTLEAF:
if (!lumberjacked)
{
DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, CRITERIA_LUMBERJACKED);
DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, CRITERIA_LUMBERJACKED);
lumberjacked = true;
}
break;
@@ -171,7 +171,7 @@ public:
if (!instance->GetCreature(DATA_GRAUF))
me->SummonCreature(NPC_GRAUF, GraufLoc);
instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_LODI_DODI_WE_LOVES_THE_SKADI);
instance->DoStopCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_LODI_DODI_WE_LOVES_THE_SKADI);
}
void EnterEvadeMode(EvadeReason /*why*/) override
@@ -235,7 +235,7 @@ public:
SpawnFirstWave();
Talk(SAY_AGGRO);
_phase = PHASE_FLYING;
instance->DoStartCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_LODI_DODI_WE_LOVES_THE_SKADI);
instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_LODI_DODI_WE_LOVES_THE_SKADI);
scheduler
.Schedule(Seconds(6), [this](TaskContext resetCheck)