From 44e79ec8ea69a9b9687eab10651b9623365c48a7 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 12 Sep 2023 18:08:48 -0400 Subject: [PATCH] Core/Spells: Removed old combo point code leftovers Port From (https://github.com/TrinityCore/TrinityCore/commit/197d4369c894e9b088f862c7189f4fe20b4836ca) --- .../Framework/Constants/Spells/SpellConst.cs | 2 +- Source/Game/Entities/Player/Player.Combat.cs | 4 +- Source/Game/Entities/Player/Player.cs | 6 +-- Source/Game/Entities/Unit/Unit.cs | 41 ---------------- Source/Game/Spells/Spell.cs | 47 +------------------ Source/Game/Spells/SpellInfo.cs | 7 +-- Source/Scripts/Spells/Druid.cs | 2 +- Source/Scripts/Spells/Rogue.cs | 2 +- 8 files changed, 10 insertions(+), 101 deletions(-) diff --git a/Source/Framework/Constants/Spells/SpellConst.cs b/Source/Framework/Constants/Spells/SpellConst.cs index 7117b24af..13797450a 100644 --- a/Source/Framework/Constants/Spells/SpellConst.cs +++ b/Source/Framework/Constants/Spells/SpellConst.cs @@ -1533,7 +1533,7 @@ namespace Framework.Constants IgnoreCastItem = 0x08, //! Will Not Take Away Cast Item Or Update Related Achievement Criteria IgnoreAuraScaling = 0x10, //! Will Ignore Aura Scaling IgnoreCastInProgress = 0x20, //! Will Not Check If A Current Cast Is In Progress - IgnoreComboPoints = 0x40, //! Will Ignore Combo Point Requirement + // reuse = 0x40, // CastDirectly = 0x80, //! In Spell.Prepare, Will Be Cast Directly Without Setting Containers For Executed Spell IgnoreAuraInterruptFlags = 0x100, //! Will Ignore Interruptible Aura'S At Cast IgnoreSetFacing = 0x200, //! Will Not Adjust Facing To Target (If Any) diff --git a/Source/Game/Entities/Player/Player.Combat.cs b/Source/Game/Entities/Player/Player.Combat.cs index 0c720d6c6..f46292adf 100644 --- a/Source/Game/Entities/Player/Player.Combat.cs +++ b/Source/Game/Entities/Player/Player.Combat.cs @@ -518,8 +518,8 @@ namespace Game.Entities opponent.RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2.DuelEnd); // cleanup combo points - ClearComboPoints(); - opponent.ClearComboPoints(); + SetPower(PowerType.ComboPoints, 0); + opponent.SetPower(PowerType.ComboPoints, 0); //cleanups SetDuelArbiter(ObjectGuid.Empty); diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 0f7c1d67b..115988e47 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -645,8 +645,8 @@ namespace Game.Entities // drunken state is cleared on death SetDrunkValue(0); - // lost combo points at any target (targeted combo points clear in Unit::setDeathState) - ClearComboPoints(); + + SetPower(PowerType.ComboPoints, 0); ClearResurrectRequestData(); @@ -723,7 +723,7 @@ namespace Game.Entities StopCastingCharm(); StopCastingBindSight(); UnsummonPetTemporaryIfAny(); - ClearComboPoints(); + SetPower(PowerType.ComboPoints, 0); GetSession().DoLootReleaseAll(); m_lootRolls.Clear(); OutdoorPvPMgr.HandlePlayerLeaveZone(this, m_zoneUpdateId); diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index bd55e43b1..c44a3f4e1 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -3343,47 +3343,6 @@ namespace Game.Entities return nearMembers[randTarget]; } - public uint GetComboPoints() { return (uint)GetPower(PowerType.ComboPoints); } - - public void AddComboPoints(sbyte count, Spell spell = null) - { - if (count == 0) - return; - - sbyte comboPoints = (sbyte)(spell != null ? spell.m_comboPointGain : GetPower(PowerType.ComboPoints)); - - comboPoints += count; - - if (comboPoints > 5) - comboPoints = 5; - else if (comboPoints < 0) - comboPoints = 0; - - if (!spell) - SetPower(PowerType.ComboPoints, comboPoints); - else - spell.m_comboPointGain = comboPoints; - } - - void GainSpellComboPoints(sbyte count) - { - if (count == 0) - return; - - sbyte cp = (sbyte)GetPower(PowerType.ComboPoints); - - cp += count; - if (cp > 5) cp = 5; - else if (cp < 0) cp = 0; - - SetPower(PowerType.ComboPoints, cp); - } - - public void ClearComboPoints() - { - SetPower(PowerType.ComboPoints, 0); - } - public void ClearAllReactives() { for (ReactiveType i = 0; i < ReactiveType.Max; ++i) diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index 01a3c1fb0..d9ab14d86 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -28,7 +28,6 @@ namespace Game.Spells m_spellInfo = info; m_caster = (info.HasAttribute(SpellAttr6.OriginateFromController) && caster.GetCharmerOrOwner() != null ? caster.GetCharmerOrOwner() : caster); m_spellValue = new SpellValue(m_spellInfo, caster); - m_needComboPoints = m_spellInfo.NeedsComboPoints(); // Get data for type of attack m_attackType = info.GetAttackType(); @@ -2527,10 +2526,6 @@ namespace Game.Spells if (m_CastItem == null) m_powerCost = m_spellInfo.CalcPowerCost(m_caster, m_spellSchoolMask, this); - // Set combo point requirement - if (Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnoreComboPoints) || m_CastItem != null) - m_needComboPoints = false; - int param1 = 0, param2 = 0; SpellCastResult result = CheckCast(true, ref param1, ref param2); // target is checked in too many locations and with different results to handle each of them @@ -3256,18 +3251,8 @@ namespace Game.Spells { Unit unitCaster = m_caster.ToUnit(); if (unitCaster != null) - { - // Take for real after all targets are processed - if (m_needComboPoints) - unitCaster.ClearComboPoints(); - - // Real add combo points from effects - if (m_comboPointGain != 0) - unitCaster.AddComboPoints(m_comboPointGain); - if (m_spellInfo.HasEffect(SpellEffectName.AddExtraAttacks)) unitCaster.SetLastExtraAttackSpell(m_spellInfo.Id); - } // Handle procs on finish if (!m_originalCaster) @@ -4795,21 +4780,6 @@ namespace Game.Spells } } - bool reqCombat = true; - var stateAuras = unitCaster.GetAuraEffectsByType(AuraType.AbilityIgnoreAurastate); - foreach (var aura in stateAuras) - { - if (aura.IsAffectingSpell(m_spellInfo)) - { - m_needComboPoints = false; - if (aura.GetMiscValue() == 1) - { - reqCombat = false; - break; - } - } - } - // caster state requirements // not for triggered spells (needed by execute) if (!_triggeredCastFlags.HasFlag(TriggerCastFlags.IgnoreCasterAurastate)) @@ -4830,7 +4800,7 @@ namespace Game.Spells if (m_spellInfo.ExcludeCasterAuraType != 0 && unitCaster.HasAuraType(m_spellInfo.ExcludeCasterAuraType)) return SpellCastResult.CasterAurastate; - if (reqCombat && unitCaster.IsInCombat() && !m_spellInfo.CanBeUsedInCombat(unitCaster)) + if (unitCaster.IsInCombat() && !m_spellInfo.CanBeUsedInCombat(unitCaster)) return SpellCastResult.AffectingCombat; } @@ -5844,15 +5814,6 @@ namespace Game.Spells return SpellCastResult.ItemAlreadyEnchanted; } - // check if caster has at least 1 combo point for spells that require combo points - if (m_needComboPoints) - { - Player plrCaster = m_caster.ToPlayer(); - if (plrCaster != null) - if (plrCaster.GetComboPoints() == 0) - return SpellCastResult.NoComboPoints; - } - // all ok return SpellCastResult.SpellCastOk; } @@ -8074,7 +8035,6 @@ namespace Game.Spells public object m_customArg; public SpellCastVisual m_SpellVisual; public SpellCastTargets m_targets = new(); - public sbyte m_comboPointGain; public SpellCustomErrors m_customError; public List m_appliedMods = new(); @@ -8106,7 +8066,6 @@ namespace Game.Spells // These vars are used in both delayed spell system and modified immediate spell system bool m_referencedFromCurrentSpell; bool m_executedCurrently; - internal bool m_needComboPoints; uint m_applyMultiplierMask; float[] m_damageMultipliers = new float[SpellConst.MaxEffects]; @@ -8656,10 +8615,6 @@ namespace Game.Spells spell.m_hitMask |= hitMask; spell.m_procSpellType |= procSpellType; - // Do not take combo points on dodge and miss - if (MissCondition != SpellMissInfo.None && spell.m_needComboPoints && spell.m_targets.GetUnitTargetGUID() == TargetGUID) - spell.m_needComboPoints = false; - // _spellHitTarget can be null if spell is missed in DoSpellHitOnUnit if (MissCondition != SpellMissInfo.Evade && _spellHitTarget && !spell.GetCaster().IsFriendlyTo(unit) && (!spell.IsPositive() || spell.m_spellInfo.HasEffect(SpellEffectName.Dispel))) { diff --git a/Source/Game/Spells/SpellInfo.cs b/Source/Game/Spells/SpellInfo.cs index a3d7e4b28..ceefc95b7 100644 --- a/Source/Game/Spells/SpellInfo.cs +++ b/Source/Game/Spells/SpellInfo.cs @@ -548,11 +548,6 @@ namespace Game.Spells return IsChanneled() && !ChannelInterruptFlags.HasFlag(SpellAuraInterruptFlags.Moving | SpellAuraInterruptFlags.Turning); } - public bool NeedsComboPoints() - { - return HasAttribute(SpellAttr1.FinishingMoveDamage | SpellAttr1.FinishingMoveDuration); - } - public bool IsNextMeleeSwingSpell() { return HasAttribute(SpellAttr0.OnNextSwingNoDamage | SpellAttr0.OnNextSwing); @@ -4193,7 +4188,7 @@ namespace Game.Spells // bonus amount from combo points if (comboDamage != 0) { - uint comboPoints = casterUnit.GetComboPoints(); + int comboPoints = casterUnit.GetPower(PowerType.ComboPoints); if (comboPoints != 0) value += comboDamage * comboPoints; } diff --git a/Source/Scripts/Spells/Druid.cs b/Source/Scripts/Spells/Druid.cs index 00e24175d..b3f255f01 100644 --- a/Source/Scripts/Spells/Druid.cs +++ b/Source/Scripts/Spells/Druid.cs @@ -876,7 +876,7 @@ namespace Scripts.Spells.Druid if (caster != null) { // 0.01 * $AP * cp - byte cp = (byte)caster.ToPlayer().GetComboPoints(); + int cp = caster.GetPower(PowerType.ComboPoints); // Idol of Feral Shadows. Can't be handled as SpellMod due its dependency from CPs AuraEffect idol = caster.GetAuraEffect(SpellIds.IdolOfFeralShadows, 0); diff --git a/Source/Scripts/Spells/Rogue.cs b/Source/Scripts/Spells/Rogue.cs index 920cd67f9..a315d4b9c 100644 --- a/Source/Scripts/Spells/Rogue.cs +++ b/Source/Scripts/Spells/Rogue.cs @@ -551,7 +551,7 @@ namespace Scripts.Spells.Rogue 0.0375f // 5 points: ${($m1 + $b1*5 + 0.0375 * $AP) * 8} damage over 16 secs }; - uint cp = caster.GetComboPoints(); + int cp = caster.GetPower(PowerType.ComboPoints); if (cp > 5) cp = 5;