private static void CastTargetSpellAtVictim(CharacterInstance ch, CharacterInstance victim, SkillData skill, TargetBooleanValues targetValues, int level) { if (targetValues.GroupSpell || targetValues.AreaSpell) { var resType = EnumerationExtensions.GetEnum <ResistanceTypes>(Macros.SPELL_DAMAGE(skill)); if ((targetValues.GroupSpell && !victim.IsSameGroup(ch)) || victim.Immunity.IsSet(ResistanceTypes.Magic) || victim.IsImmune(resType) || skill.CheckSave(level, ch, victim) || (!skill.Flags.IsSet(SkillFlags.ReCastable) && !victim.IsAffectedBy((int)skill.ID))) { return; } if (targetValues.HitVictim && ch != victim) { comm.act(ATTypes.AT_MAGIC, skill.HitVictimMessage, ch, null, victim, ToTypes.Victim); if (targetValues.HitRoom) { comm.act(ATTypes.AT_MAGIC, skill.HitRoomMessage, ch, null, victim, ToTypes.NotVictim); comm.act(ATTypes.AT_MAGIC, skill.HitRoomMessage, ch, null, victim, ToTypes.Character); } } else if (targetValues.HitRoom) { comm.act(ATTypes.AT_MAGIC, skill.HitRoomMessage, ch, null, victim, ToTypes.Room); } if (ch == victim) { if (targetValues.HitVictim) { comm.act(ATTypes.AT_MAGIC, skill.HitVictimMessage, ch, null, ch, ToTypes.Character); } else if (targetValues.HitCharacter) { comm.act(ATTypes.AT_MAGIC, skill.HitCharacterMessage, ch, null, ch, ToTypes.Character); } } else if (targetValues.HitCharacter) { comm.act(ATTypes.AT_MAGIC, skill.HitCharacterMessage, ch, null, victim, ToTypes.Character); } } var retCode = AffectCharacter.spell_affectchar((int)skill.ID, level, ch, victim); if (!targetValues.GroupSpell && !targetValues.AreaSpell) { if (retCode == ReturnTypes.VictimImmune) { ch.ImmuneCast(skill, victim); } else { ch.SuccessfulCast(skill, victim); } } }
private static ReturnTypes CastSingleTargetSpell(SkillData skill, int level, CharacterInstance ch, CharacterInstance victim) { if (CheckFunctions.CheckIfNullObjectCasting(victim, skill, ch)) { return(ReturnTypes.SpellFailed); } if (CheckFunctions.CheckIfTrueCasting( (skill.Type != SkillTypes.Herb && victim.Immunity.IsSet(ResistanceTypes.Magic)) || victim.IsImmune( EnumerationExtensions.GetEnum <ResistanceTypes>(Macros.SPELL_DAMAGE(skill))), skill, ch, CastingFunctionType.Immune, victim)) { return(ReturnTypes.SpellFailed); } if (CheckFunctions.CheckIfTrueCasting( victim.IsAffectedBy((int)skill.ID) && !skill.Flags.IsSet(SkillFlags.Accumulative) && !skill.Flags.IsSet(SkillFlags.ReCastable), skill, ch, CastingFunctionType.Failed, victim)) { return(ReturnTypes.SpellFailed); } var saf = skill.Affects.FirstOrDefault(); if (CheckFunctions.CheckIfTrueCasting(saf != null && saf.Location == (int)ApplyTypes.StripSN && !victim.IsAffectedBy(magic.ParseDiceExpression(ch, saf.Modifier)), skill, ch, CastingFunctionType.Failed, victim)) { return(ReturnTypes.SpellFailed); } return(CheckFunctions.CheckIfTrueCasting(skill.CheckSave(level, ch, victim), skill, ch, CastingFunctionType.Failed, victim) ? ReturnTypes.SpellFailed : ReturnTypes.None); }