View Single Post
  #3  
Old 10-21-2008, 09:00 PM
AndMetal
Developer
 
Join Date: Mar 2007
Location: Ohio
Posts: 648
Default

Here's the spell crit code:
zone/effects.cpp, around line 95 in Client::GetActSpellDamage()
Code:
	if(tt != ST_Self) {
		int chance = 0;
		sint32 ratio = 0;

		//normal spell crit
		if(GetClass() == WIZARD && GetLevel() > 11) {
			chance += 7;
			ratio += 15;
		}
		
		//Normal EQ: no class that has ingenuity has reg spell crit AAs too but people
		//are free to customize so lets make sure they don't stack oddly.
		//afaik all ranks provide a 100% bonus in damage on critical
		switch(GetAA(aaIngenuity))
		{
		case 1:
		case 2:
		case 3: 
			if(ratio < 100)
				ratio = 100;
			break;
		default:
			break;
		}
		
		if(tt == ST_Target || tt == ST_Summoned || tt == ST_Undead) {
			//DD spells only...
			//reference: http://www.graffe.com/AA/
			switch (GetAA(aaSpellCastingFury)) //not sure why this was different from Mastery before, both are DD only
			{
				case 1:
					chance += 2;
					ratio += 33;
					break;
				case 2:
					chance += 4; //some reports between 4.5% & 5%, AA description indicates 4%
					ratio += 66;
					break;
				case 3:
					chance += 7;
					ratio += 100;
					break;
			}
			switch (GetAA(aaSpellCastingFuryMastery)) //ratio should carry over from Spell Casting Fury, which is 100% for all ranks
			{
				case 1:
					chance += 3; //10%, Graffe = 9%?
					break;
				case 2:
					chance += 5; //12%, Graffe = 11%?
					break;
				case 3:
					chance += 7; //14%, Graffe = 13%?
					break;
			}
			chance += GetAA(aaFuryofMagic) * 2;  //doesn't look like this is used
			chance += GetAA(aaFuryofMagicMastery) * 2; //doesn't look like this is used
			chance += GetAA(aaFuryofMagicMastery2) * 2;	//this is the current one used in DB; 16%, 18%, 20%; Graffe guesses 18-19% max
			chance += GetAA(aaAdvancedFuryofMagicMastery) * 2; //guessing, not much data on it

			
			if(ratio < 100)	//chance increase and ratio are made up, not confirmed
				ratio = 100;
		} else if(tt == ST_Tap) {
			if(ratio < 100)	//chance increase and ratio are made up, not confirmed
				ratio = 100;
			
			if(spells[spell_id].classes[SHADOWKNIGHT-1] >= 254 && spell_id != SPELL_LEECH_TOUCH){
				switch (GetAA(aaSoulAbrasion)) //Soul Abrasion
				{
					case 1:
						modifier += 100;
						break;
					case 2:
						modifier += 200;
						break;
					case 3:
						modifier += 300;
						break;
				}
			}
		}
		
		chance += GetAA(aaIngenuity); //nothing stating it's DD only, so we'll apply to all damage spells
		
		chance += GetFocusEffect(focusImprovedCritical, spell_id);

		//crit damage modifiers
		if (GetClass() == WIZARD) { //wizards get an additional bonus
			ratio += GetAA(aaDestructiveFury) * 8; //108%, 116%, 124%, close to Graffe's 207%, 215%, & 225%
		} else {
			switch (GetAA(aaDestructiveFury)) //not quite linear
			{
				case 1:
					ratio += 4; //104%, Graffe = 103%
					break;
				case 2:
					ratio += 8; //108%, Graffe = 107%
					break;
				case 3:
					ratio += 16; //116%, Graffe = 115%
			}
		}
		
		if(chance > 0 && MakeRandomInt(0,100) <= chance) {
			modifier += modifier*ratio/100;
			entity_list.MessageClose(this, false, 100, MT_SpellCrits, "%s delivers a critical blast! (%d)", GetName(), ((-value * modifier) / 100));	
		}
	}
Are you thinking something like this?
Code:
	if(tt != ST_Self) {
		int chance = RuleI(Spells, BaseCritChance);
		sint32 ratio = RuleI(Spells, BaseCritRatio);

		//normal spell crit
		if(GetClass() == WIZARD && GetLevel() > 11) {
			chance += RuleI(Spells, WizCritChance);
			ratio += RuleI(Spells, WizCritRatio);
		}
__________________
GM-Impossible of 'A work in progress'
A non-legit PEQ DB server
How to create your own non-legit server

My Contributions to the Wiki
Reply With Quote