Fehler #4182
geschlossen[Spell] Diminishing returns
Beschreibung
Wir haben gerade auf dem normalen Testserver folgende Erkenntnis erlangt:
Man geht her und castet einmal Furcht auf ein Ziel. Nun fängt ein Timer an zu zählen. Dieser geht 18 Sekunden lang. Während dieser unsichtbare Timer läuft, kann man die selbe Spell-Gruppe wie Furcht so oft auf das Ziel machen, wie man möchte. Nach dem ersten Mal hat der Spell nur 50% Dauer, nach dem zweiten Mal 75% und beim dritten Mal ist der Spieler immun. Wenn die 18 Sekunden abgelaufen sind, kann man Furcht wieder mit voller Dauer anwenden.
Normal sollte dieser Timer erst anlaufen, wenn die Dauer des letzten Casts dieser Gruppe abgelaufen ist. Sprich: Ich caste einmal und am Ende der Dauer oder wenn der Effekt abbricht laufen die 18 Sekunden. Das gilt auch für einen zweiten Cast innerhalb der 18 Sekunden des ersten Casts. Wenn dieser zweite Cast abläuft geht der Timer von vorne los. Und so weiter.
Bei Verständnisfragen bitte an Mirage oder mich wenden.
Gruß,
Mirage & Gacko
Von Gacko vor etwa 12 Jahren aktualisiert
Nachtrag: Wäre nett, wenn du, Sioni, das nochmal prüfen könntest :) Wichtig ist vor allem, ob unser Verständnis bzw. unsere Auffassung korrekt ist ;)
Von Melgro vor etwa 12 Jahren aktualisiert
Gacko, ich bin mir sicher du meintest 1.0f, 0.5f, 0.25f und 0.0f und nicht nach dem zweiten mal 75% ;-).
Quelle: src\server\game\Entities\Unit\Unit.cpp
DiminishingLevels diminish = Level;
switch (diminish)
{
case DIMINISHING_LEVEL_1: break;
case DIMINISHING_LEVEL_2: mod = 0.5f; break;
case DIMINISHING_LEVEL_3: mod = 0.25f; break;
case DIMINISHING_LEVEL_IMMUNE: mod = 0.0f; break;
default: break;
}
}
Die Zeiten einiger CC Spells sind auch unterschiedlich angegeben, es gibt da einige Ausnahmen, aber die Regel sagt CC im PVP dauert MAX_DURATION = 10 sec.
Die Ausnahmen sind hier zu finden:
\src\server\game\Spells\SpellMgr.cpp
In der Methode:
int32 GetDiminishingReturnsLimitDuration(DiminishingGroup group, SpellInfo const* spellproto)
int32 GetDiminishingReturnsLimitDuration(DiminishingGroup group, SpellInfo const* spellproto)
{
if (!IsDiminishingReturnsGroupDurationLimited(group))
return 0;
// Explicit diminishing duration
switch (spellproto->SpellFamilyName)
{
case SPELLFAMILY_DRUID:
{
// Faerie Fire - limit to 40 seconds in PvP (3.1)
if (spellproto->SpellFamilyFlags[0] & 0x400)
return 40 * IN_MILLISECONDS;
break;
}
case SPELLFAMILY_HUNTER:
{
// Wyvern Sting
if (spellproto->SpellFamilyFlags[1] & 0x1000)
return 6 * IN_MILLISECONDS;
// Hunter's Mark
if (spellproto->SpellFamilyFlags[0] & 0x400)
return 120 * IN_MILLISECONDS;
break;
}
case SPELLFAMILY_PALADIN:
{
// Repentance - limit to 6 seconds in PvP
if (spellproto->SpellFamilyFlags[0] & 0x4)
return 6 * IN_MILLISECONDS;
break;
}
case SPELLFAMILY_WARLOCK:
{
// Banish - limit to 6 seconds in PvP
if (spellproto->SpellFamilyFlags[1] & 0x8000000)
return 6 * IN_MILLISECONDS;
// Curse of Tongues - limit to 12 seconds in PvP
else if (spellproto->SpellFamilyFlags[2] & 0x800)
return 12 * IN_MILLISECONDS;
// Curse of Elements - limit to 120 seconds in PvP
else if (spellproto->SpellFamilyFlags[1] & 0x200)
return 120 * IN_MILLISECONDS;
break;
}
default:
break;
}
return 10 * IN_MILLISECONDS;
}
Die DIMINISHING_LEVELS müssen nach meinem Auffassen, nach jeder Anwendung des CCs erhöht werden, ob der Cast nun abgebrochen wurde oder noch vor Ablaufen erneut auf das selbe Target gecasted wurde.
Der 18sec Timer sollte beim setzen des DIMINISHING_LEVELS auf 1 bzw. wenn der hitcounter auf 1 gesetzt wird:
File: Unit.cpp
Methode: DiminishingLevels Unit::GetDiminishing(DiminishingGroup group)
...
// If last spell was casted more than 15 seconds ago - reset the count.
if (i->stack == 0 && getMSTimeDiff(i->hitTime, getMSTime()) > 15000)
{
...
gesetzt werden, ansonsten läuft der timer vom ersten hit an runter, egal wie oft man zwischen durch neu gecasted hat,
sonst würde man nie wieder CC-anfällig werden, wenn man dauer-fear/dauer-cyclone/dauer-sheep/etc... casted,
das target ist immun und müsste eigentlich iwann wieder dafür anfällig werden, auch wenn der Caster immer wieder versucht diesen Cast bei
immune durchzubringen.
Anderes Szenario wäre, der Casted warted die ca 15-18sec ab und casted eine Sekunde zu früh, das darf den DR_Timer nicht wieder erhöhen.
So ich warte weiter auf die Beantwortung meiner Bewerbung zum DEV ;-) hehe
Von Sioni vor etwa 12 Jahren aktualisiert
Nach Ende (inklusive erneuern) jedes von DR betroffenen Effekts beginnt ein neuer 15-Sekunden-Timer, solange dieser drauf ist, wird der nächste Effekt der gleichen DR-Kategorie entsprechend abgeschwächt.
Wowwiki sagt zu dem Timer noch folgendes:
It should be noted that the server does not reset diminishing returns after exactly 15 seconds. Instead, it checks every 5 seconds if there are any diminishing returns that should be reset because the last spell in their category was cast on the target more than 15 seconds ago. As a result, a particular diminishing return category may take anywhere between 15 and 20 seconds to reset. Most addons guess that a DR category has reset after 18 seconds by default.
Von sniffy vor fast 10 Jahren aktualisiert
Gibt beim DR auf Rg keine Bugs. Und der DR Timer fängt an, wenn der CC ausgelaufen ist, und fängt nicht an wenn der CC draufkommt. Sonst könnte man alle 5 Sek ein Ziel full Fearen. Und meines Wissens ist 15 korrekt, nicht 18/20.
Auch die darauf folgenden funktionieren korrekt.
Von Sioni vor fast 10 Jahren aktualisiert
- Status wurde von Neu zu Abgewiesen geändert
- Zugewiesen an
Sioniwurde gelöscht
Deckt sich mit meinen Tests der letzten Tage. Danke Sniffy!