Fehler #20249
offenDownranking-Formel für Spells veraltet
Beschreibung
Bei uns ist scheinbar die Formel für den downrank Koeffizienten noch auf Stand 2.2.
In der unit.cpp steht folgendes:
2265 float LvlFactor = (float(spellProto->SpellLevel) + 6.0f) / float(getLevel());
2266 if (LvlFactor > 1.0f)
2267 LvlFactor = 1.0f;
Das ist laut Quellen aber nochmal geändert worden:
If caster level is less than max caster level, then the penalty = 1.0.
If caster level is at or greater than max caster level, then the penalty = (22 + max level - caster level) / 20.
The penalty is capped at 0. Max caster level per spell is also pretty inconsistent, but it's around 4 levels higher than the level at which you get the spell.
Basically, once the caster is 3 levels higher than the max cast level of the spell, the standard coefficient of the spell is multiplied by that penalty (losing 5% of the coefficient per level), with the coefficient reaching zero when the player is 22 levels higher than the max cast level.
Ein Auszug aus dem AddOn DrDamage, wo diese Formel schon übernommen wurde sieht so aus:
1.7.8_release -- Caster.lua -- line 405ff
--CORE: Factor for downranking, factor for spells under level 20
calculation.penaltyMod = 1
if spell.spellLevel then
if (spell.spellLevel < 20) and not baseSpell.NoLowLevelPenalty then
calculation.penaltyMod = 1 - ((20 - spell.spellLevel) * 0.0375)
end
if not (spell.NoDownrank or baseSpell.NoDownrank) then || Ab hier
local mod = math_min(1,math_max(0,(22 + spell.spellLevel + (spell.Downrank or baseSpell.Downrank or 5) - playerLevel) * 0.05))
if mod < 1 then
calculation.penaltyMod = calculation.penaltyMod * mod
calculation.downrank = true
end
end
end
Anmerkung: In r1420 von DrDamage wurde dieser Block auskommentiert. Da diese Version am 20. Nov 2010 hochgeladen wurde, ist das aber schon 4.0.1, auch wenn die Version als 3.3.5 angegeben ist. Die letzte Version die Tatsächlich vor 4.0.1 released wurde ist 1.7.8_release (oben verlinkt)
Von Veylen vor etwa 8 Jahren aktualisiert
- Thema wurde von Donwrank-Formel für Spells veraltet zu Downranking-Formel für Spells veraltet geändert
Von Bolando vor mehr als 1 Jahr aktualisiert
Falls es hilft: In der Unit.cpp der TrinityCore auf GitHub scheint es gefixt zu sein, dort steht im Code:
float Unit::CalculateSpellpowerCoefficientLevelPenalty(SpellInfo const* spellInfo) const
{
if (!spellInfo->MaxLevel || GetLevel() < spellInfo->MaxLevel)
return 1.0f;
return std::max(0.0f, std::min(1.0f, (22.0f + spellInfo->MaxLevel - GetLevel()) / 20.0f));
}
Direkter Link zu der Codezeile: https://github.com/TrinityCore/TrinityCore/blob/3.3.5/src/server/game/Entities/Unit/Unit.cpp#L2322Das sieht für mich den Infos der im Ticket genannten Quelle entsprechend aus.