Exemple #1
0
// does the caster + group
void Group::GroupBardPulse(Mob* caster, uint16 spell_id) {
	uint32 z;
	float range, distance;

	if(!caster)
		return;

	castspell = true;
	range = caster->GetAOERange(spell_id);

	float range2 = range*range;

	for(z=0; z < MAX_GROUP_MEMBERS; z++)
	{
		if(members[z] == caster)
		{
			caster->BardPulse(spell_id, caster);
			entity_list.AddHealAggro(members[z], caster, caster->CheckHealAggroAmount(spell_id, members[z]));
#ifdef GROUP_BUFF_PETS
			if(caster->GetPet() && caster->HasPetAffinity() && !caster->GetPet()->IsCharmed())
				caster->BardPulse(spell_id, caster->GetPet());
#endif
		}
		else if(members[z] != nullptr)
		{
			distance = DistanceSquared(caster->GetPosition(), members[z]->GetPosition());
			if(distance <= range2) 
			{
				members[z]->BardPulse(spell_id, caster);
				entity_list.AddHealAggro(members[z], caster, caster->CheckHealAggroAmount(spell_id, members[z]));
#ifdef GROUP_BUFF_PETS

				if(members[z]->GetPet() && members[z]->HasPetAffinity() && !members[z]->GetPet()->IsCharmed())
					members[z]->GetPet()->BardPulse(spell_id, caster);
#endif
			} 
			else
			{
				Log.Out(Logs::Detail, Logs::Spells, "Group bard pulse: %s is out of range %f at distance %f from %s", members[z]->GetName(), range, distance, caster->GetName());
			}
		}
	}
}