Core/Spells: Fixed spell effect value truncation when value is a large integer
Port From (https://github.com/TrinityCore/TrinityCore/commit/2d205506bfd3a2bb253db73b121fd147928811ba)
This commit is contained in:
@@ -1827,7 +1827,7 @@ namespace Game.Entities
|
|||||||
return spellInfo.GetMinRange(!IsHostileTo(target));
|
return spellInfo.GetMinRange(!IsHostileTo(target));
|
||||||
}
|
}
|
||||||
|
|
||||||
public float ApplyEffectModifiers(SpellInfo spellInfo, uint effIndex, float value)
|
public double ApplyEffectModifiers(SpellInfo spellInfo, uint effIndex, double value)
|
||||||
{
|
{
|
||||||
Player modOwner = GetSpellModOwner();
|
Player modOwner = GetSpellModOwner();
|
||||||
if (modOwner != null)
|
if (modOwner != null)
|
||||||
|
|||||||
@@ -2765,6 +2765,16 @@ namespace Game.Entities
|
|||||||
basevalue = (float)(basevalue + totalflat) * totalmul;
|
basevalue = (float)(basevalue + totalflat) * totalmul;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ApplySpellMod(SpellInfo spellInfo, SpellModOp op, ref double basevalue, Spell spell = null)
|
||||||
|
{
|
||||||
|
float totalmul = 1.0f;
|
||||||
|
int totalflat = 0;
|
||||||
|
|
||||||
|
GetSpellModValues(spellInfo, op, spell, basevalue, ref totalflat, ref totalmul);
|
||||||
|
|
||||||
|
basevalue = (double)(basevalue + totalflat) * totalmul;
|
||||||
|
}
|
||||||
|
|
||||||
public void GetSpellModValues<T>(SpellInfo spellInfo, SpellModOp op, Spell spell, T baseValue, ref int flat, ref float pct) where T : IComparable
|
public void GetSpellModValues<T>(SpellInfo spellInfo, SpellModOp op, Spell spell, T baseValue, ref int flat, ref float pct) where T : IComparable
|
||||||
{
|
{
|
||||||
flat = 0;
|
flat = 0;
|
||||||
|
|||||||
@@ -4171,11 +4171,11 @@ namespace Game.Spells
|
|||||||
public int CalcValue(out float variance, WorldObject caster = null, int? bp = null, Unit target = null, uint castItemId = 0, int itemLevel = -1)
|
public int CalcValue(out float variance, WorldObject caster = null, int? bp = null, Unit target = null, uint castItemId = 0, int itemLevel = -1)
|
||||||
{
|
{
|
||||||
variance = 0.0f;
|
variance = 0.0f;
|
||||||
float basePointsPerLevel = RealPointsPerLevel;
|
double basePointsPerLevel = RealPointsPerLevel;
|
||||||
// TODO: this needs to be a float, not rounded
|
// TODO: this needs to be a float, not rounded
|
||||||
int basePoints = CalcBaseValue(caster, target, castItemId, itemLevel);
|
int basePoints = CalcBaseValue(caster, target, castItemId, itemLevel);
|
||||||
float value = bp.HasValue ? bp.Value : basePoints;
|
double value = bp.HasValue ? bp.Value : basePoints;
|
||||||
float comboDamage = PointsPerResource;
|
double comboDamage = PointsPerResource;
|
||||||
|
|
||||||
Unit casterUnit = null;
|
Unit casterUnit = null;
|
||||||
if (caster != null)
|
if (caster != null)
|
||||||
@@ -4184,9 +4184,9 @@ namespace Game.Spells
|
|||||||
if (Scaling.Variance != 0)
|
if (Scaling.Variance != 0)
|
||||||
{
|
{
|
||||||
float delta = Math.Abs(Scaling.Variance * 0.5f);
|
float delta = Math.Abs(Scaling.Variance * 0.5f);
|
||||||
float valueVariance = RandomHelper.FRand(-delta, delta);
|
double valueVariance = RandomHelper.FRand(-delta, delta);
|
||||||
value += basePoints * valueVariance;
|
value += (double)basePoints * valueVariance;
|
||||||
variance = valueVariance;
|
variance = (float)valueVariance;
|
||||||
}
|
}
|
||||||
|
|
||||||
// base amount modification based on spell lvl vs caster lvl
|
// base amount modification based on spell lvl vs caster lvl
|
||||||
|
|||||||
Reference in New Issue
Block a user