View Single Post
  #1  
Old 02-17-2011, 05:23 PM
sorvani
Dragon
 
Join Date: May 2010
Posts: 965
Default COMMITTED: Bard Pacify songs being "improved"

Edit: just found SE_ChangeAggro, going to add that in and see if it handles it. wanted to post here before edit lockout.

Bard pacification songs are being improved by singing mods. This is a bad thing.

Problem was being discussed over on the PEQ forums.
http://www.peqtgc.com/phpBB2/viewtopic.php?t=11898

Here are the results of #showstats with no modifiers or AA
Code:
NPCID: 294000 SpawnGroupID:61376 
AggroRange: 5 AssistRange: 10
Here is where i started adding modifers
Code:
                                       Aggro | Assist 
No Instrument Mods + No AA =               5 | 10 
Equiped Epic 1.5 (Singing Mod 22 No AA) = 11 | 22 

Started Buying AA's in this order:    
Singing Mastery 1/2/3/4 =            6/7/8/9 | 12/14/16/18 
Ayonae's Tutelage 1/2/3 =           10/11/12 | 20/22/24 
Echo of Taelosia 1/2/3 =            13/14/15 | 26/28/30 
Equiped Epic 1.5 =                        21 | 42
Epic 1.5, All AA + Code change below =     5 | 42
I changed spell_effects.cpp with mixed results. Adding the SE_Lull exception did not change anything. Adding the SE_ChangeFrenzyRad keeps it from modifying the Aggro radius, but does nothing for the assist radius.
Code:
int Mob::CalcSpellEffectValue(int16 spell_id, int effect_id, int caster_level, Mob *caster, int ticsremaining)
{
	int formula, base, max, effect_value;

	if
	(
		!IsValidSpell(spell_id) ||
		effect_id < 0 ||
		effect_id >= EFFECT_COUNT
	)
		return 0;

	formula = spells[spell_id].formula[effect_id];
	base = spells[spell_id].base[effect_id];
	max = spells[spell_id].max[effect_id];

	if(IsBlankSpellEffect(spell_id, effect_id))
		return 0;

	effect_value = CalcSpellEffectValue_formula(formula, base, max, caster_level, spell_id, ticsremaining);

	if(caster && IsBardSong(spell_id) &&
	(spells[spell_id].effectid[effect_id] != SE_AttackSpeed) &&
	(spells[spell_id].effectid[effect_id] != SE_AttackSpeed2) &&
	(spells[spell_id].effectid[effect_id] != SE_AttackSpeed3) &&
	(spells[spell_id].effectid[effect_id] != SE_Lull) &&
	(spells[spell_id].effectid[effect_id] != SE_ChangeFrenzyRad)) {
		int oval = effect_value;
		int mod = caster->GetInstrumentMod(spell_id);
		effect_value = effect_value * mod / 10;
		mlog(SPELLS__BARDS, "Effect value %d altered with bard modifier of %d to yeild %d", oval, mod, effect_value);
	}

	return(effect_value);
}
Reply With Quote