View Single Post
  #3  
Old 10-12-2008, 11:17 PM
seveianrex
Sarnak
 
Join Date: Sep 2008
Location: asdf
Posts: 60
Default Revised Version

{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;
}
Reply With Quote