{mob.h}
line 591, currently reads:
Code:
void WakeTheDead(int16 spell_id, Mob *target, uint32 duration);
add directly below:
Code:
bool TryCriticalDOT(int16 spell_id);
{spell_effects.cpp}
@~ line 2671, there should be the following code:
Code:
//TODO: account for AAs and stuff
//dont know what the signon this should be... - makes sense
if (caster && caster->IsClient() &&
IsDetrimentalSpell(spell_id) &&
effect_value < 0) {
sint32 modifier = 100;
modifier += caster->CastToClient()->GetFocusEffect(focusImprovedDamage, spell_id);
if(caster){
if(caster->IsClient() && !caster->CastToClient()->GetFeigned()){
AddToHateList(caster, -effect_value);
}
else if(!caster->IsClient())
AddToHateList(caster, -effect_value);
}
effect_value = effect_value * modifier / 100;
add directly beneath it:
Code:
// 2008-10-12 seveian
if (TryCriticalDOT(spell_id))
{
effect_value = (effect_value * 2);
}
can be placed anywhere in the same file:
Code:
// 2008-10-12 seveian
bool Mob::TryCriticalDOT(int16 spell_id)
{
float critChance = 0.00f;
switch(GetAA(aaCriticalAffliction))
{
case 1:
critChance += 0.03f;
break;
case 2:
critChance += 0.06f;
break;
case 3:
critChance += 0.10f;
break;
default:
break;
}
switch (GetAA(aaImprovedCriticalAffliction))
{
case 1:
critChance += 0.03f;
break;
case 2:
critChance += 0.06f;
break;
case 3:
critChance += 0.10f;
break;
default:
break;
}
// since DOTs are the Necromancer forte, give an innate bonus
// however, no chance to crit unless they've trained atleast one level in the AA first
if (GetClass() == NECROMANCER && critChance > 0.0f){
critChance += 0.05f;
}
if (critChance > 0.0f){
if (MakeRandomFloat(0, 1) <= critChance)
{
return true;
}
}
return false;
}