mirror of
https://github.com/ZhengPeiRu21/mod-individual-progression
synced 2025-11-29 23:44:51 +08:00
Resolve AI Casting bug in Sapphiron AI
This commit is contained in:
@@ -18,7 +18,7 @@ REPLACE INTO `creature_template` (`entry`, `modelid1`, `name`, `subname`, `minle
|
|||||||
(351015, 15942, "Tomb Horror", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 27.35, 2000, 2700, 1.0, 1.0, 1, 64, 2048, 0, 6, 72, 351015, 0, 0, 1, 19891, 'SmartAI', 1, 1.0, 35.0, 1.0, 1.15, 1.0, 144, 1, 1023393531, 0, 0, ''),
|
(351015, 15942, "Tomb Horror", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 27.35, 2000, 2700, 1.0, 1.0, 1, 64, 2048, 0, 6, 72, 351015, 0, 0, 1, 19891, 'SmartAI', 1, 1.0, 35.0, 1.0, 1.15, 1.0, 144, 1, 1023393531, 0, 0, ''),
|
||||||
(351016, 16594, "Naxxramas Cultist", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 30.75, 2000, 3700, 1.0, 1.0, 8, 32832, 2048, 0, 7, 72, 351016, 0, 0, 1206, 9596, 'SmartAI', 0, 1.0, 12.0, 10.0, 2.2, 1.0, 144, 1, 1023391483, 0, 0, ''),
|
(351016, 16594, "Naxxramas Cultist", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 30.75, 2000, 3700, 1.0, 1.0, 8, 32832, 2048, 0, 7, 72, 351016, 0, 0, 1206, 9596, 'SmartAI', 0, 1.0, 12.0, 10.0, 2.2, 1.0, 144, 1, 1023391483, 0, 0, ''),
|
||||||
(351017, 16598, "Naxxramas Acolyte", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 30.75, 2000, 3700, 1.0, 1.0, 8, 32832, 2048, 0, 7, 72, 351017, 0, 0, 1248, 9661, 'SmartAI', 0, 1.0, 12.0, 10.0, 2.2, 1.0, 144, 1, 1023391483, 0, 0, ''),
|
(351017, 16598, "Naxxramas Acolyte", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 30.75, 2000, 3700, 1.0, 1.0, 8, 32832, 2048, 0, 7, 72, 351017, 0, 0, 1248, 9661, 'SmartAI', 0, 1.0, 12.0, 10.0, 2.2, 1.0, 144, 1, 1023391483, 0, 0, ''),
|
||||||
(351018, 16033, "Sapphiron", "", 63, 63, 21, 1.0, 2.14286, 20.0, 1.0, 3, 0, 63.0, 1800, 1700, 1.0, 1.0, 1, 0, 2048, 0, 6, 76, 351018, 0, 0, 246755, 322238, '', 0, 1.0, 950.0, 2.0, 1.3, 1.0, 188, 1, 2093694843, 16, 1073741825, 'boss_sapphiron_40'),
|
(351018, 16033, "Sapphiron", "", 63, 63, 21, 1.0, 2.14286, 20.0, 1.0, 3, 0, 63.0, 1800, 1700, 1.0, 1.0, 1, 0, 2048, 0, 6, 76, 351018, 0, 0, 246755, 322238, '', 0, 1.0, 950.0, 2.0, 1.3, 1.0, 188, 1, 2093694843, 16, 1073741825, 'boss_sapphiron'),
|
||||||
(351019, 15945, "Kel'Thuzad", "", 63, 63, 21, 1.0, 1.14286, 20.0, 1.0, 3, 0, 62.5, 2500, 2000, 1.0, 1.0, 2, 0, 2048, 0, 6, 76, 351019, 0, 0, 1002755, 1457838, '', 0, 1.0, 1200.0, 600.0, 1.3, 1.0, 0, 1, 2093694843, 0, 3221225473, 'boss_kelthuzad_40'),
|
(351019, 15945, "Kel'Thuzad", "", 63, 63, 21, 1.0, 1.14286, 20.0, 1.0, 3, 0, 62.5, 2500, 2000, 1.0, 1.0, 2, 0, 2048, 0, 6, 76, 351019, 0, 0, 1002755, 1457838, '', 0, 1.0, 1200.0, 600.0, 1.3, 1.0, 0, 1, 2093694843, 0, 3221225473, 'boss_kelthuzad_40'),
|
||||||
(351020, 16110, "Loatheb", "", 63, 63, 21, 0.8, 2.0, 20.0, 1.0, 3, 0, 50.0, 1250, 1700, 1.0, 1.0, 1, 64, 2048, 0, 6, 76, 351020, 0, 0, 1292142, 1579285, '', 0, 1.0, 1600.0, 2.0, 1.5, 1.0, 180, 1, 2093694843, 0, 1073741825, 'boss_loatheb_40'),
|
(351020, 16110, "Loatheb", "", 63, 63, 21, 0.8, 2.0, 20.0, 1.0, 3, 0, 50.0, 1250, 1700, 1.0, 1.0, 1, 64, 2048, 0, 6, 76, 351020, 0, 0, 1292142, 1579285, '', 0, 1.0, 1600.0, 2.0, 1.5, 1.0, 180, 1, 2093694843, 0, 1073741825, 'boss_loatheb_40'),
|
||||||
(351021, 9760, "Patchwork Golem", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 37.5, 2500, 3700, 1.0, 1.0, 1, 64, 2048, 0, 6, 72, 351021, 0, 0, 3798, 4965, 'SmartAI', 0, 1.0, 28.0, 2.0, 1.15, 1.0, 144, 1, 1022066674, 0, 0, ''),
|
(351021, 9760, "Patchwork Golem", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 37.5, 2500, 3700, 1.0, 1.0, 1, 64, 2048, 0, 6, 72, 351021, 0, 0, 3798, 4965, 'SmartAI', 0, 1.0, 28.0, 2.0, 1.15, 1.0, 144, 1, 1022066674, 0, 0, ''),
|
||||||
|
|||||||
@@ -46,7 +46,15 @@ enum Spells
|
|||||||
SPELL_FROST_EXPLOSION = 28524,
|
SPELL_FROST_EXPLOSION = 28524,
|
||||||
|
|
||||||
// Visuals
|
// Visuals
|
||||||
SPELL_SAPPHIRON_DIES = 29357
|
SPELL_SAPPHIRON_DIES = 29357,
|
||||||
|
|
||||||
|
// 10 and 25 Man Spells
|
||||||
|
SPELL_FROST_AURA_10 = 28531,
|
||||||
|
SPELL_FROST_AURA_25 = 55799,
|
||||||
|
SPELL_TAIL_SWEEP_10 = 55697,
|
||||||
|
SPELL_TAIL_SWEEP_25 = 55696,
|
||||||
|
SPELL_LIFE_DRAIN_10 = 28542,
|
||||||
|
SPELL_LIFE_DRAIN_25 = 55665,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Misc
|
enum Misc
|
||||||
@@ -75,10 +83,18 @@ enum Events
|
|||||||
EVENT_HUNDRED_CLUB = 14
|
EVENT_HUNDRED_CLUB = 14
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Unlike other Naxx 40 scripts, this overwrites all versions of the UI
|
||||||
|
// This is due to AI casting used in the spell script
|
||||||
|
|
||||||
class boss_sapphiron_40 : public CreatureScript
|
class boss_sapphiron_40 : public CreatureScript
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
static boolean isNaxx40Sapp(uint32 entry)
|
||||||
|
{
|
||||||
|
return (entry == NPC_SAPPHIRON_40);
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
boss_sapphiron_40() : CreatureScript("boss_sapphiron_40") { }
|
boss_sapphiron_40() : CreatureScript("boss_sapphiron") { }
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const override
|
CreatureAI* GetAI(Creature* pCreature) const override
|
||||||
{
|
{
|
||||||
@@ -159,7 +175,14 @@ public:
|
|||||||
{
|
{
|
||||||
BossAI::EnterCombat(who);
|
BossAI::EnterCombat(who);
|
||||||
EnterCombatSelfFunction();
|
EnterCombatSelfFunction();
|
||||||
me->CastSpell(me, SPELL_FROST_AURA, true);
|
if (isNaxx40Sapp(me->GetEntry()))
|
||||||
|
{
|
||||||
|
me->CastSpell(me, SPELL_FROST_AURA, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
me->CastSpell(me, RAID_MODE(SPELL_FROST_AURA_10, SPELL_FROST_AURA_25), true);
|
||||||
|
}
|
||||||
events.ScheduleEvent(EVENT_BERSERK, 900000);
|
events.ScheduleEvent(EVENT_BERSERK, 900000);
|
||||||
events.ScheduleEvent(EVENT_CLEAVE, 5000);
|
events.ScheduleEvent(EVENT_CLEAVE, 5000);
|
||||||
events.ScheduleEvent(EVENT_TAIL_SWEEP, 10000);
|
events.ScheduleEvent(EVENT_TAIL_SWEEP, 10000);
|
||||||
@@ -259,11 +282,25 @@ public:
|
|||||||
events.RepeatEvent(10000);
|
events.RepeatEvent(10000);
|
||||||
return;
|
return;
|
||||||
case EVENT_TAIL_SWEEP:
|
case EVENT_TAIL_SWEEP:
|
||||||
me->CastSpell(me, SPELL_TAIL_SWEEP, false);
|
if (isNaxx40Sapp(me->GetEntry()))
|
||||||
|
{
|
||||||
|
me->CastSpell(me, SPELL_TAIL_SWEEP, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
me->CastSpell(me, RAID_MODE(SPELL_TAIL_SWEEP_10, SPELL_TAIL_SWEEP_25), false);
|
||||||
|
}
|
||||||
events.RepeatEvent(10000);
|
events.RepeatEvent(10000);
|
||||||
return;
|
return;
|
||||||
case EVENT_LIFE_DRAIN:
|
case EVENT_LIFE_DRAIN:
|
||||||
me->CastCustomSpell(SPELL_LIFE_DRAIN, SPELLVALUE_MAX_TARGETS, 5, me, false);
|
if (isNaxx40Sapp(me->GetEntry()))
|
||||||
|
{
|
||||||
|
me->CastCustomSpell(SPELL_LIFE_DRAIN, SPELLVALUE_MAX_TARGETS, 5, me, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
me->CastCustomSpell(RAID_MODE(SPELL_LIFE_DRAIN_10, SPELL_LIFE_DRAIN_25), SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5), me, false);
|
||||||
|
}
|
||||||
events.RepeatEvent(24000);
|
events.RepeatEvent(24000);
|
||||||
return;
|
return;
|
||||||
case EVENT_BLIZZARD:
|
case EVENT_BLIZZARD:
|
||||||
@@ -281,7 +318,14 @@ public:
|
|||||||
{
|
{
|
||||||
cr->GetMotionMaster()->MoveRandom(40);
|
cr->GetMotionMaster()->MoveRandom(40);
|
||||||
}
|
}
|
||||||
events.RepeatEvent(6500);
|
if (isNaxx40Sapp(me->GetEntry()))
|
||||||
|
{
|
||||||
|
events.RepeatEvent(6500);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
events.RepeatEvent(RAID_MODE(8000, 6500));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case EVENT_FLIGHT_START:
|
case EVENT_FLIGHT_START:
|
||||||
@@ -305,7 +349,14 @@ public:
|
|||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
currentTarget.Clear();
|
currentTarget.Clear();
|
||||||
events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, 3000);
|
events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, 3000);
|
||||||
iceboltCount = 3;
|
if (isNaxx40Sapp(me->GetEntry()))
|
||||||
|
{
|
||||||
|
iceboltCount = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iceboltCount = RAID_MODE(2, 3);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case EVENT_FLIGHT_ICEBOLT:
|
case EVENT_FLIGHT_ICEBOLT:
|
||||||
{
|
{
|
||||||
@@ -413,14 +464,15 @@ public:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class spell_sapphiron_frost_explosion : public SpellScriptLoader
|
// This will overwrite the declared 10 and 25 man frost explosion to handle all versions of the spell script
|
||||||
|
class spell_sapphiron_frost_explosion_40 : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
spell_sapphiron_frost_explosion() : SpellScriptLoader("spell_sapphiron_frost_explosion") { }
|
spell_sapphiron_frost_explosion_40() : SpellScriptLoader("spell_sapphiron_frost_explosion") { }
|
||||||
|
|
||||||
class spell_sapphiron_frost_explosion_SpellScript : public SpellScript
|
class spell_sapphiron_frost_explosion_40_SpellScript : public SpellScript
|
||||||
{
|
{
|
||||||
PrepareSpellScript(spell_sapphiron_frost_explosion_SpellScript);
|
PrepareSpellScript(spell_sapphiron_frost_explosion_40_SpellScript);
|
||||||
|
|
||||||
void FilterTargets(std::list<WorldObject*>& targets)
|
void FilterTargets(std::list<WorldObject*>& targets)
|
||||||
{
|
{
|
||||||
@@ -445,18 +497,18 @@ public:
|
|||||||
|
|
||||||
void Register() override
|
void Register() override
|
||||||
{
|
{
|
||||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sapphiron_frost_explosion_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
|
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sapphiron_frost_explosion_40_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SpellScript* GetSpellScript() const override
|
SpellScript* GetSpellScript() const override
|
||||||
{
|
{
|
||||||
return new spell_sapphiron_frost_explosion_SpellScript();
|
return new spell_sapphiron_frost_explosion_40_SpellScript();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void AddSC_boss_sapphiron_40()
|
void AddSC_boss_sapphiron_40()
|
||||||
{
|
{
|
||||||
new boss_sapphiron_40();
|
new boss_sapphiron_40();
|
||||||
// new spell_sapphiron_frost_explosion();
|
new spell_sapphiron_frost_explosion_40();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user