Пример #1
0
        public IEnumerator AsyncPlayerHit()
        {
            RaycastHit[] hits = Physics.SphereCastAll(transform.position, radius, Vector3.one, radius);
            for (int i = 0; i < hits.Length; i++)
            {
                if (hits[i].transform.CompareTag("enemyCollide"))
                {
                    EnemyProgression ep = hits[i].transform.gameObject.GetComponentInParent <EnemyProgression>();

                    if (ep != null)
                    {
                        if (isArcane)
                        {
                            ep.HitMagic(dmg * 2);
                            ep.Slow(141, 0.0f, 2);
                            ep.DmgTakenDebuff(140, 1.65f, 10);
                            ep.FireDebuff(140, dmg / 6, 25);
                        }
                        else
                        {
                            ep.HitMagic(dmg / 2);
                            ep.Slow(140, 0.6f, 7);
                            ep.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
                            ep.FireDebuff(140, dmg / 10, 25);
                        }
                        yield return(null);
                    }
                    else
                    {
                        hits[i].transform.SendMessageUpwards("HitMagic", dmg, SendMessageOptions.DontRequireReceiver);
                        yield return(null);
                    }
                }
            }
        }
Пример #2
0
        private void OnTriggerEnter(Collider other)
        {
            if (!setupComplete)
            {
            }

            //if (other.gameObject.CompareTag("PlayerNet"))
            //{
            //    if (!ModSettings.FriendlyFire)
            //    {
            //        return;
            //    }

            //    BoltEntity component3 = other.GetComponent<BoltEntity>();
            //    if (component3 != null && component3.networkId.PackedValue != casterID)
            //    {
            //        if (BoltNetwork.isRunning)
            //        {
            //            ModdedPlayer.instance.DoOnHit();
            //            ModdedPlayer.instance.DoMeleeOnHit();

            //            HitPlayer hitPlayer = HitPlayer.Create(component3, EntityTargets.Everyone);
            //            hitPlayer.damage = Mathf.FloorToInt(Damage);
            //            hitPlayer.Send();
            //            return;

            //        }
            //    }
            //}


            if (other.gameObject.CompareTag("enemyCollide"))
            {
                if (!GameSetup.IsMpClient)
                {
                    EnemyProgression prog = other.GetComponentInParent <EnemyProgression>();
                    if (prog != null)
                    {
                        DamageMath.DamageClamp(Damage, out int d, out int a);
                        for (int i = 0; i < a; i++)
                        {
                            prog.HitMagic(d);
                        }
                        float slowAmount = 0.35f;
                        if (GiveDoubleSlow)
                        {
                            slowAmount *= 2;
                        }

                        prog.Slow(41, 1 - slowAmount, DebuffDuration);
                        if (GiveDmgDebuff)
                        {
                            prog.DmgTakenDebuff(41, 1.15f, DebuffDuration);
                        }
                    }
                }
            }
        }
Пример #3
0
 public static void HostAction(Vector3 pos, float dist, float slowMultipier, float duration, float damage)
 {
     RaycastHit[] hits = Physics.SphereCastAll(pos, dist, Vector3.one, -10);
     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(damage);
             prog.Slow(20, slowMultipier, duration);
             prog.Slow(21, 0, 0.65f);
         }
     }
 }
Пример #4
0
 public static void HostAction(Vector3 pos, float dist, float slowMultipier, float duration, float damage)
 {
     RaycastHit[] hits = Physics.SphereCastAll(pos, dist, Vector3.one, -10);
     DamageMath.DamageClamp(damage, out int dmg, out int rep);
     for (int i = 0; i < hits.Length; i++)
     {
         if (hits[i].transform.CompareTag("enemyCollide"))
         {
             EnemyProgression prog = hits[i].transform.gameObject.GetComponentInParent <EnemyProgression>();
             prog?.Slow(20, slowMultipier, duration);
             for (int a = 0; a < rep; a++)
             {
                 prog?.HitMagic(dmg);
             }
             if (prog == null)
             {
                 hits[i].transform.SendMessageUpwards("HitMagic", dmg, SendMessageOptions.DontRequireReceiver);
             }
         }
     }
 }
Пример #5
0
        private void OnTriggerEnter(Collider other)
        {
            if (!setupComplete)
            {
            }

            if (other.gameObject.CompareTag("enemyCollide"))
            {
                if (!GameSetup.IsMpClient)
                {
                    EnemyProgression prog = other.GetComponentInParent <EnemyProgression>();
                    DamageMath.DamageClamp(Damage, out int d, out int a);
                    if (prog != null)
                    {
                        for (int i = 0; i < a; i++)
                        {
                            prog.HitMagic(d);
                        }
                        float slowAmount = 0.45f;
                        if (GiveDoubleSlow)
                        {
                            slowAmount *= 2;
                        }

                        prog.Slow(41, 1 - slowAmount, DebuffDuration);
                        if (GiveDmgDebuff)
                        {
                            prog.DmgTakenDebuff(41, 1.25f, DebuffDuration);
                        }
                    }
                    else
                    {
                        other.SendMessageUpwards("HitMagic", d, SendMessageOptions.DontRequireReceiver);
                    }
                }
            }
        }
        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);
                    }
                }
            }
        }