From 9d955f42aab3aa6d60f4870adabd2112fccdb5c2 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 25 Apr 2023 08:53:52 -0400 Subject: [PATCH] Core/Skinning: Autolearn skill of skinned mob if not already learned Port From (https://github.com/TrinityCore/TrinityCore/commit/74c280da9eac16c5d4a875ff2ea5aa30034ff1dd) --- Source/Game/Spells/SpellEffects.cs | 4 ++ Source/Scripts/Spells/Generic.cs | 83 +++++++++++++++++++++++++++++- 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 73f19ba0b..9d0f08d91 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -3450,6 +3450,10 @@ namespace Game.Spells loot.FillLoot(creature.GetCreatureTemplate().SkinLootId, LootStorage.Skinning, player, true); player.SendLoot(loot); + if (!Global.SpellMgr.IsPartOfSkillLine(skill, m_spellInfo.Id)) + return; + + // Skill gain for skinning // This formula is still used (10.0.5.48526) if (skill == SkillType.Skinning) { diff --git a/Source/Scripts/Spells/Generic.cs b/Source/Scripts/Spells/Generic.cs index 47b193990..074717203 100644 --- a/Source/Scripts/Spells/Generic.cs +++ b/Source/Scripts/Spells/Generic.cs @@ -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 {