Core/Skinning: Autolearn skill of skinned mob if not already learned

Port From (https://github.com/TrinityCore/TrinityCore/commit/74c280da9eac16c5d4a875ff2ea5aa30034ff1dd)
This commit is contained in:
hondacrx
2023-04-25 08:53:52 -04:00
parent c186c76103
commit 9d955f42aa
2 changed files with 86 additions and 1 deletions
+82 -1
View File
@@ -4755,7 +4755,7 @@ namespace Scripts.Spells.Generic
OnEffectApply.Add(new EffectApplyHandler(UpdateReviveBattlePetCooldown, 0, AuraType.Dummy, AuraEffectHandleModes.Real));
}
}
[Script] // 45313 - Anchor Here
class spell_gen_anchor_here : SpellScript
{
@@ -4891,6 +4891,87 @@ namespace Scripts.Spells.Generic
}
}
enum SkinningLearningSpell
{
Classic = 265856,
Outland = 265858,
Northrend = 265860,
Cataclysm = 265862,
Pandaria = 265864,
Draenor = 265866,
Legion = 265868,
KulTiran = 265870,
Zandalari = 265872,
Shadowlands = 308570,
DragonIsles = 366263
}
[Script] // 8613 - Skinning
class spell_gen_skinning : SpellScript
{
public override bool Validate(SpellInfo spell)
{
return ValidateSpellInfo((uint)SkinningLearningSpell.Outland, (uint)SkinningLearningSpell.Northrend, (uint)SkinningLearningSpell.Cataclysm, (uint)SkinningLearningSpell.Pandaria, (uint)SkinningLearningSpell.Draenor,
(uint)SkinningLearningSpell.KulTiran, (uint)SkinningLearningSpell.Zandalari, (uint)SkinningLearningSpell.Shadowlands, (uint)SkinningLearningSpell.DragonIsles);
}
void HandleSkinningEffect(uint effIndex)
{
Player player = GetCaster().ToPlayer();
if (!player)
return;
var contentTuning = CliDB.ContentTuningStorage.LookupByKey(GetHitUnit().GetContentTuning());
if (contentTuning == null)
return;
uint skinningSkill = player.GetProfessionSkillForExp(SkillType.Skinning, contentTuning.ExpansionID);
if (skinningSkill == 0)
return;
// Autolearning missing skinning skill (Dragonflight)
SkinningLearningSpell getSkinningLearningSpellBySkill()
{
switch ((SkillType)skinningSkill)
{
case SkillType.OutlandSkinning:
return SkinningLearningSpell.Outland;
case SkillType.NorthrendSkinning:
return SkinningLearningSpell.Northrend;
case SkillType.CataclysmSkinning:
return SkinningLearningSpell.Cataclysm;
case SkillType.PandariaSkinning:
return SkinningLearningSpell.Pandaria;
case SkillType.DraenorSkinning:
return SkinningLearningSpell.Draenor;
case SkillType.KulTiranSkinning:
return player.GetTeam() == Team.Alliance ? SkinningLearningSpell.KulTiran : SkinningLearningSpell.Zandalari;
case SkillType.ShadowlandsSkinning:
return SkinningLearningSpell.Shadowlands;
case SkillType.DragonIslesSkinning:
return SkinningLearningSpell.DragonIsles;
case SkillType.ClassicSkinning: // Trainer only
case SkillType.LegionSkinning: // Quest only
default: break;
}
return 0;
}
if (!player.HasSkill(skinningSkill))
{
uint spellId = (uint)getSkinningLearningSpellBySkill();
if (spellId != 0)
player.CastSpell(null, spellId, true);
}
}
public override void Register()
{
OnEffectHitTarget.Add(new EffectHandler(HandleSkinningEffect, 0, SpellEffectName.Skinning));
}
}
// 40307 - Stasis Field
class StasisFieldSearcher : ICheck<Unit>
{