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