IEnumerator DealDamage() { float dmg = 5 + ModdedPlayer.Stats.spellFlatDmg / 3f; dmg *= ModdedPlayer.Stats.SpellDamageMult; float crit = ModdedPlayer.Stats.RandomCritDamage; dmg *= crit; dmg *= radius / 3.33333f; dmg *= ModdedPlayer.Stats.spell_snowstormDamageMult; var hits = Physics.SphereCastAll(LocalPlayer.Transform.position, radius, Vector3.one, radius, -9); int onHitEffectProcs = 0; if (GameSetup.IsMpClient) { for (int i = 0; i < hits.Length; i++) { if (hits[i].transform.CompareTag("enemyCollide")) { var entity = hits[i].transform.GetComponentInParent <BoltEntity>(); if (entity != null) { var phe = PlayerHitEnemy.Create(GlobalTargets.OnlyServer); phe.Target = entity; phe.getAttackerType = DamageMath.SILENTattackerTypeMagic; phe.Hit = DamageMath.GetSendableDamage(dmg); phe.Send(); if (onHitEffectProcs < 6) { { var hitContext = new COTFEvents.HitOtherParams(dmg, crit != 1, entity, this); COTFEvents.Instance.OnHitSpell.Invoke(hitContext); COTFEvents.Instance.OnHitEnemy.Invoke(hitContext); } ModdedPlayer.instance.OnHit(); onHitEffectProcs++; } yield return(null); EnemyProgression.ReduceArmor(entity, Mathf.CeilToInt(dmg / 100f)); EnemyProgression.Slow(entity, 144, 0.2f, 0.95f); yield return(null); if (ModdedPlayer.Stats.spell_snowstormPullEnemiesIn) { if ((hits[i].point - LocalPlayer.Transform.position).sqrMagnitude > 4) { EnemyProgression.AddKnockbackByDistance(entity.networkId.PackedValue, (LocalPlayer.Transform.position - hits[i].transform.position).normalized, 1); } } } } } } else { for (int i = 0; i < hits.Length; i++) { if (EnemyManager.enemyByTransform.ContainsKey(hits[i].transform.root)) { EnemyProgression prog = EnemyManager.enemyByTransform[hits[i].transform.root]; if (prog == null) { continue; } prog.HitMagic(dmg); prog.Slow(144, 0.2f, 0.85f); prog.ReduceArmor(Mathf.CeilToInt(dmg / 100f)); if (onHitEffectProcs < 6) { ModdedPlayer.instance.OnHit(); onHitEffectProcs++; } { var hitContext = new COTFEvents.HitOtherParams(dmg, crit != 1, prog, this); COTFEvents.Instance.OnHitSpell.Invoke(hitContext); COTFEvents.Instance.OnHitEnemy.Invoke(hitContext); } if (ModdedPlayer.Stats.spell_snowstormPullEnemiesIn) { if ((hits[i].point - LocalPlayer.Transform.position).sqrMagnitude > 4) { prog.AddKnockbackByDistance((LocalPlayer.Transform.position - hits[i].transform.position).normalized, 1); } } yield return(null); } } } }