diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2017-08-06 16:07:15 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-08-22 20:10:42 +0200 |
| commit | 129dd7c9091d3fafc0f5e10b795224bc9418d006 (patch) | |
| tree | 82afd663ef4ec56a578f8e4c0174481134811b49 /src/server/scripts | |
| parent | 521a950f9c0facd892c299b9cda5119519e71022 (diff) | |
Core/Scripts: dynamic_spawning follow-up, I had forgotten JustRespawned existed.
- Rename JustRespawned to JustAppeared, which better matches its behavior anyway.
- Properly invoke JustAppeared for new (re-)spawns - fixes #20111.
- Fix Thaddius script to work with dynamic_spawning (mostly unrelated to the above) - Feugen/Stalagg should really be a summon group, but I don't have time to fix that right now.
- Fix default value for DynamicEscortNPC to match worldserver.conf.dist.
(cherry picked from commit 184c45cfe0fbe4f3e4fb701f0f99994df98bdc8a)
Diffstat (limited to 'src/server/scripts')
13 files changed, 34 insertions, 67 deletions
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp index fbf5923f7d6..ccb5f966dfc 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp @@ -107,7 +107,7 @@ class npc_av_marshal_or_warmaster : public CreatureScript events.ScheduleEvent(EVENT_CHECK_RESET, 5000); } - void JustRespawned() override + void JustAppeared() override { Reset(); } diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp index 57f767ce791..d59e12813c4 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp @@ -71,7 +71,7 @@ public: events.ScheduleEvent(EVENT_RANDOM_YELL, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS)); //20 to 30 seconds } - void JustRespawned() override + void JustAppeared() override { Reset(); Talk(SAY_RESPAWN); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 6f406c7f516..229e942103e 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -186,7 +186,7 @@ public: Talk(YELL_KILL); } - void JustRespawned() override + void JustAppeared() override { Talk(YELL_BIRTH); } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index bbde2d90a4a..726a13ed757 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -297,9 +297,9 @@ public: Initialize(); } - void JustRespawned() override + void JustAppeared() override { - BossAI::JustRespawned(); + BossAI::JustAppeared(); Initialize(); } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index cfd5badc3bf..d7bb7470f5f 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -163,9 +163,9 @@ class boss_krik_thir : public CreatureScript SummonAdds(); } - void JustRespawned() override + void JustAppeared() override { - BossAI::JustRespawned(); + BossAI::JustAppeared(); SummonAdds(); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 5547d2d6639..262782979b6 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -567,7 +567,7 @@ class npc_halion_controller : public CreatureScript _twilightDamageTaken = 0; } - void JustRespawned() override + void JustAppeared() override { if (!_instance->GetGuidData(DATA_HALION).IsEmpty() || _instance->GetBossState(DATA_GENERAL_ZARITHRIAN) != DONE) return; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 7f3e76a2406..1ef1018a447 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -445,7 +445,7 @@ struct BloodPrincesBossAI : public BossAI { _spawnHealth = 1; if (!me->isDead()) - JustRespawned(); + JustAppeared(); } void Reset() override @@ -493,7 +493,7 @@ struct BloodPrincesBossAI : public BossAI } } - void JustRespawned() override + void JustAppeared() override { if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BLOOD_PRINCES_CONTROL))) if (controller->AI()->GetData(DATA_INTRO) != DATA_INTRO_DONE) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index f725ea0cc24..928a94e4694 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -690,9 +690,9 @@ class npc_spinestalker : public CreatureScript } } - void JustRespawned() override + void JustAppeared() override { - ScriptedAI::JustRespawned(); + ScriptedAI::JustAppeared(); _instance->SetGuidData(DATA_SINDRAGOSA_FROSTWYRMS, ObjectGuid::Create<HighGuid::Creature>(631, me->GetEntry(), me->GetSpawnId())); // this cannot be in Reset because reset also happens on evade } @@ -827,9 +827,9 @@ class npc_rimefang : public CreatureScript } } - void JustRespawned() override + void JustAppeared() override { - ScriptedAI::JustRespawned(); + ScriptedAI::JustAppeared(); _instance->SetGuidData(DATA_SINDRAGOSA_FROSTWYRMS, ObjectGuid::Create<HighGuid::Creature>(631, me->GetEntry(), me->GetSpawnId())); // this cannot be in Reset because reset also happens on evade } @@ -993,9 +993,9 @@ class npc_sindragosa_trash : public CreatureScript Initialize(); } - void JustRespawned() override + void JustAppeared() override { - ScriptedAI::JustRespawned(); + ScriptedAI::JustAppeared(); // Increase add count if (me->GetEntry() == NPC_FROSTWING_WHELP) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index c047bee9a28..33b48c08c9c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -31,15 +31,12 @@ enum Phases PHASE_NOT_ENGAGED = 1, PHASE_PETS, PHASE_TRANSITION, - PHASE_THADDIUS, - PHASE_RESETTING + PHASE_THADDIUS }; enum AIActions { - ACTION_RESET_ENCOUNTER_TIMER = -1, // sent from instance AI ACTION_BEGIN_RESET_ENCOUNTER = 0, // sent from thaddius to pets to trigger despawn and encounter reset - ACTION_RESET_ENCOUNTER, // sent from thaddius to pets to trigger respawn and full reset ACTION_FEUGEN_DIED, // sent from respective pet to thaddius to indicate death ACTION_STALAGG_DIED, // ^ ACTION_FEUGEN_RESET, // pet to thaddius @@ -171,9 +168,6 @@ struct boss_thaddius : public BossAI { events.SetPhase(PHASE_NOT_ENGAGED); SetCombatMovement(false); - - // initialize everything properly, and ensure that the coils are loaded by the time we initialize - BeginResetEncounter(true); } } @@ -204,9 +198,9 @@ struct boss_thaddius : public BossAI return false; } - void JustRespawned() override + void JustAppeared() override { - if (events.IsInPhase(PHASE_RESETTING)) + if (instance->GetBossState(BOSS_THADDIUS) != DONE) ResetEncounter(); } @@ -225,22 +219,13 @@ struct boss_thaddius : public BossAI { switch (action) { - case ACTION_RESET_ENCOUNTER_TIMER: - if (events.IsInPhase(PHASE_RESETTING)) - ResetEncounter(); - break; case ACTION_FEUGEN_RESET: case ACTION_STALAGG_RESET: - if (!events.IsInPhase(PHASE_NOT_ENGAGED) && !events.IsInPhase(PHASE_RESETTING)) + if (!events.IsInPhase(PHASE_NOT_ENGAGED)) BeginResetEncounter(); break; case ACTION_FEUGEN_AGGRO: case ACTION_STALAGG_AGGRO: - if (events.IsInPhase(PHASE_RESETTING)) - { - BeginResetEncounter(); - return; - } if (!events.IsInPhase(PHASE_NOT_ENGAGED)) return; events.SetPhase(PHASE_PETS); @@ -306,29 +291,24 @@ struct boss_thaddius : public BossAI events.ScheduleEvent(EVENT_TRANSITION_3, Seconds(14), 0, PHASE_TRANSITION); } - void BeginResetEncounter(bool initial = false) + void BeginResetEncounter() { if (instance->GetBossState(BOSS_THADDIUS) == DONE) return; - if (events.IsInPhase(PHASE_RESETTING)) - return; // remove polarity shift debuffs on reset instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_CHARGE_APPLY); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_CHARGE_APPLY); - me->DespawnOrUnsummon(); - me->SetRespawnTime(initial ? 5 : 30); + me->DespawnOrUnsummon(0, Seconds(30)); me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED)); me->SetImmuneToPC(true); - events.SetPhase(PHASE_RESETTING); + me->setActive(false); if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) feugen->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER); if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) stalagg->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER); - - me->setActive(false); } void ResetEncounter() @@ -340,10 +320,9 @@ struct boss_thaddius : public BossAI events.SetPhase(PHASE_NOT_ENGAGED); me->SetReactState(REACT_PASSIVE); - if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) - feugen->AI()->DoAction(ACTION_RESET_ENCOUNTER); - if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) - stalagg->AI()->DoAction(ACTION_RESET_ENCOUNTER); + // @todo these guys should really be moved to a summon group - this is merely a hack to make them work in dynamic_spawning + instance->instance->RemoveRespawnTime(SPAWN_TYPE_CREATURE, 130958, true); // Stalagg + instance->instance->RemoveRespawnTime(SPAWN_TYPE_CREATURE, 130959, true); // Feugen } void UpdateAI(uint32 diff) override @@ -515,7 +494,7 @@ public: { if (GameObject* coil = myCoilGO()) coil->SetGoState(GO_STATE_READY); - me->DespawnOrUnsummon(); + me->DespawnOrUnsummon(0, Hours(24*7)); // will be force respawned by thaddius me->setActive(false); } @@ -532,9 +511,6 @@ public: case ACTION_BEGIN_RESET_ENCOUNTER: BeginResetEncounter(); break; - case ACTION_RESET_ENCOUNTER: - ResetEncounter(); - break; case ACTION_STALAGG_REVIVING_FX: break; case ACTION_STALAGG_REVIVED: @@ -559,7 +535,7 @@ public: break; case ACTION_TRANSITION: me->KillSelf(); // true death - me->DespawnOrUnsummon(); + me->DespawnOrUnsummon(0, Hours(24*7)); if (Creature* coil = myCoil()) { @@ -781,16 +757,10 @@ public: { if (GameObject* coil = myCoilGO()) coil->SetGoState(GO_STATE_READY); - me->DespawnOrUnsummon(); + me->DespawnOrUnsummon(0, Hours(24*7)); // will be force respawned by thaddius me->setActive(false); } - void ResetEncounter() - { - me->Respawn(true); - Initialize(); - } - void DoAction(int32 action) override { switch (action) @@ -798,9 +768,6 @@ public: case ACTION_BEGIN_RESET_ENCOUNTER: BeginResetEncounter(); break; - case ACTION_RESET_ENCOUNTER: - ResetEncounter(); - break; case ACTION_FEUGEN_REVIVING_FX: break; case ACTION_FEUGEN_REVIVED: @@ -827,7 +794,7 @@ public: break; case ACTION_TRANSITION: me->KillSelf(); // true death this time around - me->DespawnOrUnsummon(); + me->DespawnOrUnsummon(0, Hours(24*7)); if (Creature* coil = myCoil()) { diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 1ce1754d47c..659a071216f 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -212,7 +212,7 @@ public: me->CastSpell(me, SPELL_ICE_PRISON, true); } - void JustRespawned() override + void JustAppeared() override { Reset(); } diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 39efccc36d3..0c6ffbd4e82 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -924,7 +924,7 @@ public: me->CastSpell(me, STORM_VISUAL, true); } - void JustRespawned() override + void JustAppeared() override { Reset(); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index a3c4c9d74ce..3e1933cf8c9 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -736,7 +736,7 @@ public: instance->SetGuidData(DATA_LEOTHERAS_EVENT_STARTER, who->GetGUID()); } - void JustRespawned() override + void JustAppeared() override { AddedBanish = false; Reset(); diff --git a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp index 97d49aceda4..38e62341b7c 100644 --- a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp +++ b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp @@ -81,7 +81,7 @@ class boss_doomlord_kazzak : public CreatureScript _events.ScheduleEvent(EVENT_BERSERK, 180000); } - void JustRespawned() override + void JustAppeared() override { Talk(SAY_INTRO); } |
