diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-07-12 16:29:00 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-07-12 16:29:00 +0200 |
| commit | 0cea730fa23473a85c47451c3bd13df816f2b6e4 (patch) | |
| tree | 960078875798c5846a1aa465051da876642067e1 /src/server/game/Spells | |
| parent | 252da139adedd20c297ce7bdd2abed2234fa1bb6 (diff) | |
Core: Update to 10.1.5
Diffstat (limited to 'src/server/game/Spells')
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 4 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellInfo.h | 2 |
7 files changed, 45 insertions, 12 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 73aa4247eb8..b95b1e51b01 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -629,6 +629,10 @@ enum AuraType : uint32 SPELL_AURA_535 = 535, // related to profession equipment; NYI; MiscValue[0] = Profession (enum, not id) SPELL_AURA_IGNORE_SPELL_CREATURE_TYPE_REQUIREMENTS = 536, SPELL_AURA_537 = 537, + SPELL_AURA_MOD_FAKE_INEBRIATION_MOVEMENT_ONLY = 538, + SPELL_AURA_ALLOW_MOUNT_IN_COMBAT = 539, + SPELL_AURA_MOD_SUPPORT_STAT = 540, // NYI + SPELL_AURA_MOD_REQUIRED_MOUNT_CAPABILITY_FLAGS = 541, TOTAL_AURAS }; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 198f2626d28..4e3cb502aae 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -605,6 +605,10 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNULL, //535 &AuraEffect::HandleNoImmediateEffect, //536 SPELL_AURA_IGNORE_SPELL_CREATURE_TYPE_REQUIREMENTS implemented in SpellInfo::CheckTargetCreatureType &AuraEffect::HandleNULL, //537 + &AuraEffect::HandleUnused, //538 SPELL_AURA_MOD_FAKE_INEBRIATION_MOVEMENT_ONLY handled clientside + &AuraEffect::HandleNoImmediateEffect, //539 SPELL_AURA_ALLOW_MOUNT_IN_COMBAT implemented in SpellInfo::CanBeUsedInCombat + &AuraEffect::HandleNULL, //540 SPELL_AURA_MOD_SUPPORT_STAT + &AuraEffect::HandleModRequiredMountCapabilityFlags, //541 SPELL_AURA_MOD_REQUIRED_MOUNT_CAPABILITY_FLAGS }; AuraEffect::AuraEffect(Aura* base, SpellEffectInfo const& spellEfffectInfo, int32 const* baseAmount, Unit* caster) : @@ -5196,7 +5200,7 @@ void AuraEffect::HandleAuraOpenStable(AuraApplication const* aurApp, uint8 mode, return; if (apply) - target->ToPlayer()->GetSession()->SendStablePet(target->GetGUID()); + target->ToPlayer()->SetStableMaster(target->GetGUID()); // client auto close stable dialog at !apply aura } @@ -6273,6 +6277,27 @@ void AuraEffect::HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode playerTarget->SendMovementSetCollisionHeight(playerTarget->GetCollisionHeight(), WorldPackets::Movement::UpdateCollisionHeightReason::Force); } +void AuraEffect::HandleModRequiredMountCapabilityFlags(AuraApplication const* aurApp, uint8 mode, bool apply) const +{ + if (!(mode & AURA_EFFECT_HANDLE_REAL)) + return; + + Player* playerTarget = aurApp->GetTarget()->ToPlayer(); + if (!playerTarget) + return; + + if (apply) + playerTarget->SetRequiredMountCapabilityFlag(GetMiscValue()); + else + { + int32 mountCapabilityFlags = 0; + for (AuraEffect* otherAura : playerTarget->GetAuraEffectsByType(GetAuraType())) + mountCapabilityFlags |= otherAura->GetMiscValue(); + + playerTarget->ReplaceAllRequiredMountCapabilityFlags(mountCapabilityFlags); + } +} + void AuraEffect::HandleSuppressItemPassiveEffectBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const { if (!(mode & AURA_EFFECT_HANDLE_REAL)) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 36ac2648176..c90bccead32 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -333,6 +333,7 @@ class TC_GAME_API AuraEffect void HandleStoreTeleportReturnPoint(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleMountRestrictions(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const; + void HandleModRequiredMountCapabilityFlags(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleSuppressItemPassiveEffectBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleForceBreathBar(AuraApplication const* aurApp, uint8 mode, bool apply) const; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 3b7297b3ab6..55dc8c2ba91 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5691,7 +5691,7 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32 if (m_spellInfo->ExcludeCasterAuraType && unitCaster->HasAuraType(m_spellInfo->ExcludeCasterAuraType)) return SPELL_FAILED_CASTER_AURASTATE; - if (reqCombat && unitCaster->IsInCombat() && !m_spellInfo->CanBeUsedInCombat()) + if (reqCombat && unitCaster->IsInCombat() && !m_spellInfo->CanBeUsedInCombat(unitCaster)) return SPELL_FAILED_AFFECTING_COMBAT; } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 16e31fb645c..ce24a21b278 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -393,7 +393,7 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF &Spell::EffectCreateTraitTreeConfig, //303 SPELL_EFFECT_CREATE_TRAIT_TREE_CONFIG &Spell::EffectChangeActiveCombatTraitConfig, //304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG &Spell::EffectNULL, //305 SPELL_EFFECT_305 - &Spell::EffectNULL, //306 SPELL_EFFECT_306 + &Spell::EffectNULL, //306 SPELL_EFFECT_UPDATE_INTERACTIONS &Spell::EffectNULL, //307 SPELL_EFFECT_307 &Spell::EffectNULL, //308 SPELL_EFFECT_CANCEL_PRELOAD_WORLD &Spell::EffectNULL, //309 SPELL_EFFECT_PRELOAD_WORLD @@ -402,6 +402,7 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF &Spell::EffectNULL, //312 SPELL_EFFECT_312 &Spell::EffectNULL, //313 SPELL_EFFECT_CHANGE_ITEM_BONUSES_2 &Spell::EffectNULL, //314 SPELL_EFFECT_ADD_SOCKET_BONUS + &Spell::EffectNULL, //315 SPELL_EFFECT_LEARN_TRANSMOG_APPEARANCE_FROM_ITEM_MOD_APPEARANCE_GROUP }; void Spell::EffectNULL() diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 62730e218cc..7ecb08e3100 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1133,15 +1133,16 @@ std::array<SpellEffectInfo::StaticData, TOTAL_SPELL_EFFECTS> SpellEffectInfo::_d {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 303 SPELL_EFFECT_CREATE_TRAIT_TREE_CONFIG {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 305 SPELL_EFFECT_305 - {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 306 SPELL_EFFECT_306 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 306 SPELL_EFFECT_UPDATE_INTERACTIONS {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 307 SPELL_EFFECT_307 - {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 308 SPELL_EFFECT_308 - {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 309 SPELL_EFFECT_309 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 308 SPELL_EFFECT_CANCEL_PRELOAD_WORLD + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 309 SPELL_EFFECT_PRELOAD_WORLD {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 310 SPELL_EFFECT_310 - {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 311 SPELL_EFFECT_311 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 311 SPELL_EFFECT_ENSURE_WORLD_LOADED {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 312 SPELL_EFFECT_312 - {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_ITEM}, // 313 SPELL_EFFECT_313 - {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 314 SPELL_EFFECT_314 + {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_ITEM}, // 313 SPELL_EFFECT_CHANGE_ITEM_BONUSES_2 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 314 SPELL_EFFECT_ADD_SOCKET_BONUS + {EFFECT_IMPLICIT_TARGET_CASTER, TARGET_OBJECT_TYPE_UNIT}, // 315 SPELL_EFFECT_LEARN_TRANSMOG_APPEARANCE_FROM_ITEM_MOD_APPEARANCE_GROUP } }; SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, SpellInfoLoadHelper const& data) @@ -1677,9 +1678,10 @@ bool SpellInfo::IsGroupBuff() const return false; } -bool SpellInfo::CanBeUsedInCombat() const +bool SpellInfo::CanBeUsedInCombat(Unit const* caster) const { - return !HasAttribute(SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL); + return !HasAttribute(SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL) + || (caster->HasAuraType(SPELL_AURA_ALLOW_MOUNT_IN_COMBAT) && HasAura(SPELL_AURA_MOUNTED)); } bool SpellInfo::IsPositive() const diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 790e38e3b20..770b14cf9c7 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -491,7 +491,7 @@ class TC_GAME_API SpellInfo bool IsRequiringDeadTarget() const; bool IsAllowingDeadTarget() const; bool IsGroupBuff() const; - bool CanBeUsedInCombat() const; + bool CanBeUsedInCombat(Unit const* caster) const; bool IsPositive() const; bool IsPositiveEffect(uint8 effIndex) const; bool IsChanneled() const; |
