fix(Scripts/BlackrockSpire): Improved Kormok encounter. (#9394)
Fixes #9101
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1638046780431340000');
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `AiName`='', `ScriptName`='boss_kormok' WHERE `entry`=16118;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `entryorguid`=16118 AND `source_type`=0;
|
||||||
|
|
||||||
|
DELETE FROM `creature_text` WHERE `creatureid`=16118;
|
||||||
|
INSERT INTO `creature_text` VALUES
|
||||||
|
(16118,0,0,'You think you can summon us? We are the ones that summon, not you! We bash you good for this and suck the marrow from your bones!',14,0,100,0,0,0,11968,0,'Kormok - Talk Summon'),
|
||||||
|
(16118,1,0,'You so little and puny... you no make good servants for Kormok!',12,0,100,0,0,0,11959,0,'Kormok - Talk Aggro'),
|
||||||
|
(16118,2,0,'%s becomes enraged!',16,0,100,0,0,0,10677,0,'Kormok - Enrage'),
|
||||||
|
(16118,3,0,'We am free! Thank you little, puny ones.',14,0,100,0,0,0,11873,0,'Kormok - Death');
|
||||||
|
|
||||||
|
UPDATE `spell_dbc` SET `Effect_1`=28, `EffectMiscValueB_1`=64 WHERE `ID` IN (27690,27691,27692,27693);
|
||||||
@@ -0,0 +1,214 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Affero General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ScriptMgr.h"
|
||||||
|
#include "scholomance.h"
|
||||||
|
#include "ScriptedCreature.h"
|
||||||
|
#include "SpellScript.h"
|
||||||
|
#include "TaskScheduler.h"
|
||||||
|
|
||||||
|
enum Spells
|
||||||
|
{
|
||||||
|
SPELL_SHADOWBOLT_VOLLEY = 20741,
|
||||||
|
SPELL_BONE_SHIELD = 27688,
|
||||||
|
|
||||||
|
SPELL_SUMMON_BONE_MAGES = 27695,
|
||||||
|
|
||||||
|
SPELL_SUMMON_BONE_MAGE_FRONT_LEFT = 27696,
|
||||||
|
SPELL_SUMMON_BONE_MAGE_FRONT_RIGHT = 27697,
|
||||||
|
SPELL_SUMMON_BONE_MAGE_BACK_RIGHT = 27698,
|
||||||
|
SPELL_SUMMON_BONE_MAGE_BACK_LEFT = 27699,
|
||||||
|
|
||||||
|
SPELL_SUMMON_BONE_MINION1 = 27690,
|
||||||
|
SPELL_SUMMON_BONE_MINION2 = 27691,
|
||||||
|
SPELL_SUMMON_BONE_MINION3 = 27692,
|
||||||
|
SPELL_SUMMON_BONE_MINION4 = 27693,
|
||||||
|
|
||||||
|
SPELL_SUMMON_BONE_MINIONS = 27687
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Events
|
||||||
|
{
|
||||||
|
EVENT_SHADOWBOLT_VOLLEY = 1,
|
||||||
|
EVENT_SUMMON_MINIONS
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Says
|
||||||
|
{
|
||||||
|
TALK_SUMMON = 0,
|
||||||
|
TALK_AGGRO = 1,
|
||||||
|
TALK_ENRAGE = 2,
|
||||||
|
TALK_DEATH = 3
|
||||||
|
};
|
||||||
|
|
||||||
|
struct boss_kormok : public ScriptedAI
|
||||||
|
{
|
||||||
|
boss_kormok(Creature* creature) : ScriptedAI(creature), _summons(creature) {}
|
||||||
|
|
||||||
|
void Reset() override
|
||||||
|
{
|
||||||
|
_mages = false;
|
||||||
|
|
||||||
|
_scheduler.CancelAll();
|
||||||
|
_scheduler.SetValidator([this]
|
||||||
|
{
|
||||||
|
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||||
|
});
|
||||||
|
|
||||||
|
_summons.DespawnAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IsSummonedBy(Unit* /*summoner*/) override
|
||||||
|
{
|
||||||
|
Talk(TALK_SUMMON);
|
||||||
|
|
||||||
|
_scheduler.Schedule(2s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
DoCastSelf(SPELL_BONE_SHIELD);
|
||||||
|
context.Repeat(45s);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit* /*who*/) override
|
||||||
|
{
|
||||||
|
Talk(TALK_AGGRO);
|
||||||
|
|
||||||
|
_scheduler.Schedule(10s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
DoCastVictim(SPELL_SHADOWBOLT_VOLLEY);
|
||||||
|
context.Repeat(15s);
|
||||||
|
})
|
||||||
|
.Schedule(15s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
DoCast(SPELL_SUMMON_BONE_MINIONS);
|
||||||
|
context.Repeat(12s);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustSummoned(Creature* summon) override
|
||||||
|
{
|
||||||
|
_summons.Summon(summon);
|
||||||
|
DoZoneInCombat(summon);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SummonedCreatureDespawn(Creature* summon) override
|
||||||
|
{
|
||||||
|
_summons.Despawn(summon);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellSchoolMask /*damageSchoolMask*/) override
|
||||||
|
{
|
||||||
|
if (!_mages && me->HealthBelowPctDamaged(25, damage))
|
||||||
|
{
|
||||||
|
_mages = true;
|
||||||
|
|
||||||
|
Talk(TALK_ENRAGE);
|
||||||
|
|
||||||
|
DoCast(SPELL_SUMMON_BONE_MAGES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustDied(Unit* /*killer*/) override
|
||||||
|
{
|
||||||
|
Talk(TALK_DEATH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff) override
|
||||||
|
{
|
||||||
|
_scheduler.Update(diff);
|
||||||
|
|
||||||
|
if (!UpdateVictim())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
TaskScheduler _scheduler;
|
||||||
|
SummonList _summons;
|
||||||
|
bool _mages;
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32 const SummonMageSpells[4] =
|
||||||
|
{
|
||||||
|
SPELL_SUMMON_BONE_MAGE_FRONT_LEFT,
|
||||||
|
SPELL_SUMMON_BONE_MAGE_FRONT_RIGHT,
|
||||||
|
SPELL_SUMMON_BONE_MAGE_BACK_RIGHT,
|
||||||
|
SPELL_SUMMON_BONE_MAGE_BACK_LEFT,
|
||||||
|
};
|
||||||
|
|
||||||
|
// 27695 - Summon Bone Mages
|
||||||
|
class spell_kormok_summon_bone_mages : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_kormok_summon_bone_mages);
|
||||||
|
|
||||||
|
bool Validate(SpellInfo const* /*spell*/) override
|
||||||
|
{
|
||||||
|
return ValidateSpellInfo(SummonMageSpells);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleScript(SpellEffIndex effIndex)
|
||||||
|
{
|
||||||
|
PreventHitDefaultEffect(effIndex);
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < 2; ++i)
|
||||||
|
{
|
||||||
|
GetCaster()->CastSpell(GetCaster(), SummonMageSpells[urand(0, 3)], true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register() override
|
||||||
|
{
|
||||||
|
OnEffectHitTarget += SpellEffectFn(spell_kormok_summon_bone_mages::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 27687 - Summon Bone Minions
|
||||||
|
class spell_kormok_summon_bone_minions : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_kormok_summon_bone_minions);
|
||||||
|
|
||||||
|
bool Validate(SpellInfo const* /*spell*/) override
|
||||||
|
{
|
||||||
|
return ValidateSpellInfo({ SPELL_SUMMON_BONE_MINIONS });
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleScript(SpellEffIndex effIndex)
|
||||||
|
{
|
||||||
|
PreventHitDefaultEffect(effIndex);
|
||||||
|
|
||||||
|
// Possible spells to handle this not found.
|
||||||
|
for (uint32 i = 0; i < 4; ++i)
|
||||||
|
{
|
||||||
|
GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_BONE_MINION1 + i, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register() override
|
||||||
|
{
|
||||||
|
OnEffectHitTarget += SpellEffectFn(spell_kormok_summon_bone_minions::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void AddSC_boss_kormok()
|
||||||
|
{
|
||||||
|
RegisterScholomanceCreatureAI(boss_kormok);
|
||||||
|
RegisterSpellScript(spell_kormok_summon_bone_mages);
|
||||||
|
RegisterSpellScript(spell_kormok_summon_bone_minions);
|
||||||
|
}
|
||||||
@@ -289,63 +289,6 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class spell_kormok_summon_bone_mages : SpellScriptLoader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
spell_kormok_summon_bone_mages() : SpellScriptLoader("spell_kormok_summon_bone_mages") { }
|
|
||||||
|
|
||||||
class spell_kormok_summon_bone_magesSpellScript : public SpellScript
|
|
||||||
{
|
|
||||||
PrepareSpellScript(spell_kormok_summon_bone_magesSpellScript);
|
|
||||||
|
|
||||||
void HandleScript(SpellEffIndex effIndex)
|
|
||||||
{
|
|
||||||
PreventHitDefaultEffect(effIndex);
|
|
||||||
for (uint8 i = 0; i < 2; ++i)
|
|
||||||
GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_BONE_MAGE_FRONT_LEFT + urand(0, 3), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Register() override
|
|
||||||
{
|
|
||||||
OnEffectHitTarget += SpellEffectFn(spell_kormok_summon_bone_magesSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SpellScript* GetSpellScript() const override
|
|
||||||
{
|
|
||||||
return new spell_kormok_summon_bone_magesSpellScript();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class spell_kormok_summon_bone_minions : SpellScriptLoader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
spell_kormok_summon_bone_minions() : SpellScriptLoader("spell_kormok_summon_bone_minions") { }
|
|
||||||
|
|
||||||
class spell_kormok_summon_bone_minionsSpellScript : public SpellScript
|
|
||||||
{
|
|
||||||
PrepareSpellScript(spell_kormok_summon_bone_minionsSpellScript);
|
|
||||||
|
|
||||||
void HandleScript(SpellEffIndex effIndex)
|
|
||||||
{
|
|
||||||
PreventHitDefaultEffect(effIndex);
|
|
||||||
|
|
||||||
for (uint32 i = 0; i < 4; ++i)
|
|
||||||
GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_BONE_MINION1 + i, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Register() override
|
|
||||||
{
|
|
||||||
OnEffectHitTarget += SpellEffectFn(spell_kormok_summon_bone_minionsSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SpellScript* GetSpellScript() const override
|
|
||||||
{
|
|
||||||
return new spell_kormok_summon_bone_minionsSpellScript();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class spell_scholomance_boon_of_life : public SpellScriptLoader
|
class spell_scholomance_boon_of_life : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -525,8 +468,6 @@ void AddSC_instance_scholomance()
|
|||||||
{
|
{
|
||||||
new instance_scholomance();
|
new instance_scholomance();
|
||||||
new spell_scholomance_fixate();
|
new spell_scholomance_fixate();
|
||||||
new spell_kormok_summon_bone_mages();
|
|
||||||
new spell_kormok_summon_bone_minions();
|
|
||||||
new spell_scholomance_boon_of_life();
|
new spell_scholomance_boon_of_life();
|
||||||
new npc_scholomance_occultist();
|
new npc_scholomance_occultist();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,23 +62,12 @@ enum GameobjectIds
|
|||||||
GO_GATE_GANDLING_UP_SOUTH = 177375
|
GO_GATE_GANDLING_UP_SOUTH = 177375
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SpellIds
|
|
||||||
{
|
|
||||||
SPELL_SUMMON_BONE_MAGE_FRONT_LEFT = 27696,
|
|
||||||
SPELL_SUMMON_BONE_MAGE_FRONT_RIGHT = 27697,
|
|
||||||
SPELL_SUMMON_BONE_MAGE_BACK_RIGHT = 27698,
|
|
||||||
SPELL_SUMMON_BONE_MAGE_BACK_LEFT = 27699,
|
|
||||||
|
|
||||||
SPELL_SUMMON_BONE_MINION1 = 27690,
|
|
||||||
SPELL_SUMMON_BONE_MINION2 = 27691,
|
|
||||||
SPELL_SUMMON_BONE_MINION3 = 27692,
|
|
||||||
SPELL_SUMMON_BONE_MINION4 = 27693
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class AI, class T>
|
template <class AI, class T>
|
||||||
inline AI* GetScholomanceAI(T* obj)
|
inline AI* GetScholomanceAI(T* obj)
|
||||||
{
|
{
|
||||||
return GetInstanceAI<AI>(obj, ScholomanceScriptName);
|
return GetInstanceAI<AI>(obj, ScholomanceScriptName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define RegisterScholomanceCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetScholomanceAI)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ void AddSC_the_scarlet_enclave_c5();
|
|||||||
void AddSC_instance_scarlet_monastery(); //Scarlet Monastery
|
void AddSC_instance_scarlet_monastery(); //Scarlet Monastery
|
||||||
void AddSC_boss_kirtonos_the_herald();
|
void AddSC_boss_kirtonos_the_herald();
|
||||||
void AddSC_boss_darkmaster_gandling();
|
void AddSC_boss_darkmaster_gandling();
|
||||||
|
void AddSC_boss_kormok();
|
||||||
void AddSC_instance_scholomance(); //Scholomance
|
void AddSC_instance_scholomance(); //Scholomance
|
||||||
void AddSC_instance_shadowfang_keep(); //Shadowfang keep
|
void AddSC_instance_shadowfang_keep(); //Shadowfang keep
|
||||||
void AddSC_boss_baroness_anastari();
|
void AddSC_boss_baroness_anastari();
|
||||||
@@ -240,6 +241,7 @@ void AddEasternKingdomsScripts()
|
|||||||
AddSC_instance_scarlet_monastery(); //Scarlet Monastery
|
AddSC_instance_scarlet_monastery(); //Scarlet Monastery
|
||||||
AddSC_boss_kirtonos_the_herald();
|
AddSC_boss_kirtonos_the_herald();
|
||||||
AddSC_boss_darkmaster_gandling();
|
AddSC_boss_darkmaster_gandling();
|
||||||
|
AddSC_boss_kormok();
|
||||||
AddSC_instance_scholomance(); //Scholomance
|
AddSC_instance_scholomance(); //Scholomance
|
||||||
AddSC_instance_shadowfang_keep(); //Shadowfang keep
|
AddSC_instance_shadowfang_keep(); //Shadowfang keep
|
||||||
AddSC_boss_baroness_anastari();
|
AddSC_boss_baroness_anastari();
|
||||||
|
|||||||
Reference in New Issue
Block a user