private static void HandleRegionDamage(FieldManager field, SkillCast skillCast) { if (!field.State.Players.TryGetValue(skillCast.CasterObjectId, out Character caster)) { // Handle NPCs/Triggers sending skills return; } List <DamageHandler> damages = new(); foreach (IFieldActor <NpcMetadata> mob in field.State.Mobs.Values) { foreach (CoordF effectCoord in skillCast.EffectCoords) { if ((mob.Coord - effectCoord).Length() > skillCast.SkillAttack.RangeProperty.Distance) { continue; } DamageHandler damage = DamageHandler.CalculateDamage(skillCast, caster, mob); mob.Damage(damage, caster.Value.Session); damages.Add(damage); } } if (damages.Count <= 0) { return; } field.BroadcastPacket(SkillDamagePacket.RegionDamage(skillCast, damages)); }
private static void HandleRegionDamage(GameSession session, SkillCast skillCast) { List <DamageHandler> damages = new(); bool isCrit = DamageHandler.RollCrit(session.Player.Stats[StatId.CritRate].Total); foreach (IFieldActor <NpcMetadata> mob in session.FieldManager.State.Mobs.Values) { foreach (CoordF effectCoord in skillCast.EffectCoords) { if ((mob.Coord - effectCoord).Length() > skillCast.SkillAttack.RangeProperty.Distance) { continue; } DamageHandler damage = DamageHandler.CalculateDamage(skillCast, session.Player.FieldPlayer, mob, isCrit); mob.Damage(damage, session); damages.Add(damage); } } if (damages.Count <= 0) { return; } session.FieldManager.BroadcastPacket(SkillDamagePacket.RegionDamage(skillCast, damages)); }