From 0e9135125683ed5023108c36893e8cc5f58d3dc2 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 1 Jun 2022 16:06:11 -0400 Subject: [PATCH] Core/Spells: Implemented SPELL_ATTR6_ALLOW_EQUIP_WHILE_CASTING Port From (https://github.com/TrinityCore/TrinityCore/commit/24434c687d8662eff42202c96d11c45fcf00e2f0) --- Source/Framework/Constants/Spells/SpellConst.cs | 2 +- Source/Game/Entities/Player/Player.Items.cs | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Source/Framework/Constants/Spells/SpellConst.cs b/Source/Framework/Constants/Spells/SpellConst.cs index 662b89bb7..8a929e776 100644 --- a/Source/Framework/Constants/Spells/SpellConst.cs +++ b/Source/Framework/Constants/Spells/SpellConst.cs @@ -1809,7 +1809,7 @@ namespace Framework.Constants AiPrimaryRangedAttack = 0x4000, /*Nyi*/ // Ai Primary Ranged Attack NoPushback = 0x8000, /*Nyi*/ // No Pushback NoJumpPathing = 0x10000, /*Nyi*/ // No Jump Pathing - AllowEquipWhileCasting = 0x20000, /*Nyi*/ // Allow Equip While Casting + AllowEquipWhileCasting = 0x20000, // Allow Equip While Casting OriginateFromController = 0x40000, // Originate From Controller Description Client Will Prevent Casting If Not Possessed, Charmer Will Be Caster For All Intents And Purposes DelayCombatTimerDuringCast = 0x80000, /*Nyi*/ // Delay Combat Timer During Cast AuraIconOnlyForCasterLimit10 = 0x100000, // Aura Icon Only For Caster (Limit 10) (Client Only) diff --git a/Source/Game/Entities/Player/Player.Items.cs b/Source/Game/Entities/Player/Player.Items.cs index 25b732af1..afcbbac01 100644 --- a/Source/Game/Entities/Player/Player.Items.cs +++ b/Source/Game/Entities/Player/Player.Items.cs @@ -4942,8 +4942,15 @@ namespace Game.Entities if (IsInCombat() && (pProto.GetClass() == ItemClass.Weapon || pProto.GetInventoryType() == InventoryType.Relic) && m_weaponChangeTimer != 0) return InventoryResult.ItemCooldown; - if (IsNonMeleeSpellCast(false)) - return InventoryResult.ClientLockedOut; + Spell currentGenericSpell = GetCurrentSpell(CurrentSpellTypes.Generic); + if (currentGenericSpell != null) + if (!currentGenericSpell.GetSpellInfo().HasAttribute(SpellAttr6.AllowEquipWhileCasting)) + return InventoryResult.ClientLockedOut; + + Spell currentChanneledSpell = GetCurrentSpell(CurrentSpellTypes.Channeled); + if (currentChanneledSpell != null) + if (!currentChanneledSpell.GetSpellInfo().HasAttribute(SpellAttr6.AllowEquipWhileCasting)) + return InventoryResult.ClientLockedOut; } ContentTuningLevels? requiredLevels = null;