This commit is contained in:
Ovalord
2018-02-08 22:28:13 +01:00
66 changed files with 1111 additions and 552 deletions

View File

@@ -307,8 +307,7 @@ public:
void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
if (!prisonerGUID)
prisonerGUID = guid;
prisonerGUID = guid;
}
ObjectGuid GetGUID(int32 /*id*/) const override

View File

@@ -366,7 +366,7 @@ public:
// Safeguard to prevent Hadronox dying to NPCs
void DamageTaken(Unit* who, uint32& damage) override
{
if (!who->IsControlledByPlayer() && me->HealthBelowPct(70))
if ((!who || !who->IsControlledByPlayer()) && me->HealthBelowPct(70))
{
if (me->HealthBelowPctDamaged(5, damage))
damage = 0;

View File

@@ -545,18 +545,18 @@ class spell_tyrannus_rimefang_icy_blast : public SpellScriptLoader
}
};
class at_tyrannus_event_starter : public OnlyOnceAreaTriggerScript
class at_tyrannus_event_starter : public AreaTriggerScript
{
public:
at_tyrannus_event_starter() : OnlyOnceAreaTriggerScript("at_tyrannus_event_starter") { }
at_tyrannus_event_starter() : AreaTriggerScript("at_tyrannus_event_starter") { }
bool _OnTrigger(Player* player, const AreaTriggerEntry * /*at*/) override
bool OnTrigger(Player* player, const AreaTriggerEntry * /*at*/) override
{
InstanceScript* instance = player->GetInstanceScript();
if (player->IsGameMaster() || !instance)
return false;
if (instance->GetBossState(DATA_TYRANNUS) != DONE)
if (instance->GetBossState(DATA_TYRANNUS) != IN_PROGRESS && instance->GetBossState(DATA_TYRANNUS) != DONE)
if (Creature* tyrannus = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_TYRANNUS)))
{
tyrannus->AI()->DoAction(ACTION_START_INTRO);

View File

@@ -1044,10 +1044,11 @@ public:
enum WatchCommanderLeonus
{
SAY_COVER = 0,
EVENT_LEONUS_TALK = 1,
EVENT_INFERNAL_RAIN_ATTACK = 2,
EVENT_FEAR_CONTROLLER_CAST = 3,
EVENT_ACTIVE_FALSE = 4,
EVENT_START = 1,
EVENT_LEONUS_TALK = 2,
EVENT_INFERNAL_RAIN_ATTACK = 3,
EVENT_FEAR_CONTROLLER_CAST = 4,
EVENT_ACTIVE_FALSE = 5,
NPC_INFERNAL_RAIN = 18729,
SPELL_INFERNAL_RAIN = 33814,
NPC_FEAR_CONTROLLER = 19393,
@@ -1061,9 +1062,7 @@ struct npc_watch_commander_leonus : public ScriptedAI
void Reset() override
{
_events.Reset();
_events.ScheduleEvent(EVENT_LEONUS_TALK, Minutes(2), Minutes(10));
_events.ScheduleEvent(EVENT_INFERNAL_RAIN_ATTACK, Minutes(2), Minutes(10));
_events.ScheduleEvent(EVENT_FEAR_CONTROLLER_CAST, Minutes(2), Minutes(10));
_events.ScheduleEvent(EVENT_START, Minutes(2), Minutes(10));
}
void SetData(uint32 /*type*/, uint32 data) override
@@ -1086,6 +1085,11 @@ struct npc_watch_commander_leonus : public ScriptedAI
{
switch (eventId)
{
case EVENT_START:
_events.ScheduleEvent(EVENT_LEONUS_TALK, Minutes(2), Minutes(10));
_events.ScheduleEvent(EVENT_INFERNAL_RAIN_ATTACK, Minutes(2), Minutes(10));
_events.ScheduleEvent(EVENT_FEAR_CONTROLLER_CAST, Minutes(2), Minutes(10));
break;
case EVENT_LEONUS_TALK:
Talk(SAY_COVER);
me->HandleEmoteCommand(EMOTE_ONESHOT_SHOUT);

View File

@@ -1953,6 +1953,92 @@ class spell_q13086_cannons_target : public SpellScriptLoader
}
};
enum ThatsAbominable
{
QUEST_THATS_ABOMINABLE = 13264,
NPC_ICY_GHOUL = 31142,
NPC_RISEN_ALLIANCE_SOLDIERS = 31205,
NPC_VICIOUS_GEIST = 31147,
NPC_RENIMATED_ABOMINATION = 31692,
SPELL_ICY_GHOUL_CREDIT = 59591, // Credit for Icy Ghoul
SPELL_VICIOUS_GEISTS_CREDIT = 60042, // Credit for Vicious Geists
SPELL_RISEN_ALLIANCE_SOLDIERS_CREDIT = 60040, // Credit for Risen Alliance Soldiers
};
class spell_q13264_thats_abominable : public SpellScriptLoader
{
public:
spell_q13264_thats_abominable() : SpellScriptLoader("spell_q13264_thats_abominable") { }
class spell_q13264_thats_abominable_SpellScript : public SpellScript
{
PrepareSpellScript(spell_q13264_thats_abominable_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(
{
SPELL_ICY_GHOUL_CREDIT,
SPELL_VICIOUS_GEISTS_CREDIT,
SPELL_RISEN_ALLIANCE_SOLDIERS_CREDIT,
});
}
void HandleKnockBack(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
if (Creature* creature = GetHitCreature())
if (Unit* charmer = GetCaster()->GetCharmerOrOwner())
if (Player* player = charmer->ToPlayer())
if (player->GetQuestStatus(QUEST_THATS_ABOMINABLE) == QUEST_STATUS_INCOMPLETE)
if (GiveCreditIfValid(player, creature))
creature->KillSelf();
}
bool GiveCreditIfValid(Player* player, Creature* creature)
{
uint32 entry = creature->GetEntry();
switch(entry)
{
case NPC_ICY_GHOUL:
player->CastSpell(player, SPELL_ICY_GHOUL_CREDIT, true);
return true;
case NPC_VICIOUS_GEIST:
player->CastSpell(player, SPELL_VICIOUS_GEISTS_CREDIT, true);
return true;
case NPC_RISEN_ALLIANCE_SOLDIERS:
player->CastSpell(player, SPELL_RISEN_ALLIANCE_SOLDIERS_CREDIT, true);
return true;
}
return false;
}
void HandleScript(SpellEffIndex /*effIndex*/)
{
if (Creature* creature = GetCaster()->ToCreature()) {
creature->KillSelf();
creature->DespawnOrUnsummon();
}
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_q13264_thats_abominable_SpellScript::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK);
OnEffectHitTarget += SpellEffectFn(spell_q13264_thats_abominable_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_q13264_thats_abominable_SpellScript();
}
};
enum BurstAtTheSeams
{
NPC_DRAKKARI_CHIEFTAINK = 29099,
@@ -2836,6 +2922,7 @@ void AddSC_quest_spell_scripts()
new spell_q12847_summon_soul_moveto_bunny();
new spell_q13011_bear_flank_master();
new spell_q13086_cannons_target();
new spell_q13264_thats_abominable();
new spell_q12690_burst_at_the_seams();
new spell_q12308_escape_from_silverbrook_summon_worgen();
new spell_q12308_escape_from_silverbrook();