private static void ApplyDamageOverTime(Actor target, StatusEffects statusEffect, EffectSnapshot effectSnapshot, bool verbose)
        {
            if (!(target.DamageOverTimeEffects.ContainsKey(statusEffect)))
            {
                if (verbose)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine($"{statusEffect} applied!");
                }

                target.DamageOverTimeEffects.Add(statusEffect, effectSnapshot);
            }
            else
            {
                if (verbose)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine($"{statusEffect} refreshed!");
                }

                target.DamageOverTimeEffects[statusEffect] = effectSnapshot;
            }
        }
        public static void ApplyEffect(Actor target, WeaponSkills weaponSkill, bool verbose, EffectSnapshot effectSnapshot = null)
        {
            switch (weaponSkill)
            {
            case WeaponSkills.ArmorCrush:
                if (target.StatusEffects.ContainsKey(StatusEffects.Huton))
                {
                    var newHutonDuration = Math.Min(target.StatusEffects[StatusEffects.Huton] + (long)TimeSpan.FromSeconds(30).TotalMilliseconds, 70000);
                    ApplyEffect(target, StatusEffects.Huton, newHutonDuration, verbose);
                }
                break;

            case WeaponSkills.DancingEdge:
                ApplyEffect(target, StatusEffects.DancingEdge, 20000, verbose);
                break;

            case WeaponSkills.Mutilate:
                Debug.Assert(effectSnapshot != null, "effectSnapshot != null");
                effectSnapshot.Duration = (long)TimeSpan.FromSeconds(30).TotalMilliseconds;
                ApplyDamageOverTime(target, StatusEffects.Mutilate, effectSnapshot, verbose);
                break;

            case WeaponSkills.ShadowFang:
                Debug.Assert(effectSnapshot != null, "effectSnapshot != null");
                effectSnapshot.Duration = (long)TimeSpan.FromSeconds(18).TotalMilliseconds;
                ApplyDamageOverTime(target, StatusEffects.ShadowFang, effectSnapshot, verbose);
                break;
            }
        }