mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-13 09:17:18 +00:00
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);
|
||||
214
src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
Normal file
214
src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
Normal file
@@ -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
|
||||
{
|
||||
public:
|
||||
@@ -525,8 +468,6 @@ void AddSC_instance_scholomance()
|
||||
{
|
||||
new instance_scholomance();
|
||||
new spell_scholomance_fixate();
|
||||
new spell_kormok_summon_bone_mages();
|
||||
new spell_kormok_summon_bone_minions();
|
||||
new spell_scholomance_boon_of_life();
|
||||
new npc_scholomance_occultist();
|
||||
}
|
||||
|
||||
@@ -62,23 +62,12 @@ enum GameobjectIds
|
||||
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>
|
||||
inline AI* GetScholomanceAI(T* obj)
|
||||
{
|
||||
return GetInstanceAI<AI>(obj, ScholomanceScriptName);
|
||||
}
|
||||
|
||||
#define RegisterScholomanceCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetScholomanceAI)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -97,6 +97,7 @@ void AddSC_the_scarlet_enclave_c5();
|
||||
void AddSC_instance_scarlet_monastery(); //Scarlet Monastery
|
||||
void AddSC_boss_kirtonos_the_herald();
|
||||
void AddSC_boss_darkmaster_gandling();
|
||||
void AddSC_boss_kormok();
|
||||
void AddSC_instance_scholomance(); //Scholomance
|
||||
void AddSC_instance_shadowfang_keep(); //Shadowfang keep
|
||||
void AddSC_boss_baroness_anastari();
|
||||
@@ -240,6 +241,7 @@ void AddEasternKingdomsScripts()
|
||||
AddSC_instance_scarlet_monastery(); //Scarlet Monastery
|
||||
AddSC_boss_kirtonos_the_herald();
|
||||
AddSC_boss_darkmaster_gandling();
|
||||
AddSC_boss_kormok();
|
||||
AddSC_instance_scholomance(); //Scholomance
|
||||
AddSC_instance_shadowfang_keep(); //Shadowfang keep
|
||||
AddSC_boss_baroness_anastari();
|
||||
|
||||
Reference in New Issue
Block a user