Projekt

Allgemein

Profil

Aktionen

Fehler #20249

offen

Downranking-Formel für Spells veraltet

Von Veylen vor mehr als 8 Jahren hinzugefügt. Vor fast 2 Jahren aktualisiert.

Status:
Bestätigt
Priorität:
Normal
Zugewiesen an:
Kategorie:
Mechanik
Zielversion:
Beginn:
11.08.2016
Update Text Deutsch:
Tags:

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)

Aktionen #2

Von Corrius vor mehr als 8 Jahren aktualisiert

  • Privat wurde von Ja zu Nein geändert
Aktionen #3

Von Veylen vor mehr als 8 Jahren aktualisiert

  • Thema wurde von Donwrank-Formel für Spells veraltet zu Downranking-Formel für Spells veraltet geändert
Aktionen #4

Von Jeora vor fast 5 Jahren aktualisiert

  • Tags wurde auf Spell gesetzt
Aktionen #6

Von Jeora vor etwa 4 Jahren aktualisiert

  • Zugewiesen an wurde auf Left4Info gesetzt
Aktionen #7

Von Bolando vor fast 2 Jahren 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#L2322
Das sieht für mich den Infos der im Ticket genannten Quelle entsprechend aus.

Aktionen

Auch abrufbar als: Atom PDF