Beispiel #1
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        var bs = collision.gameObject.GetComponent <BulletScript>();

        if (bs != null)
        {
            float dt = 0, dr = 0;
            if (GameState.Instance.Player.Armor > 0)
            {
                dt = HasArmorDT;
                dr = HasArmorDR;
                GameState.Instance.Player.Armor -= bs.Damage + bs.DamagePierce;
            }
            float bulletDamage = DamageUtil.CalculateDamage(bs.Damage, bs.DamagePierce, dt, dr);
            GameState.Instance.Player.Health -= bulletDamage;
            //gameUI.GetComponent<HealthUI>().LoseHealth();
            if (GameState.Instance.Player.Health <= 0)
            {
                Debug.Log("Game Over");
                MessageInterface.PushToBus(new PlayerDeathMessage());
                //gameOverScene.SetActive(true); //TODO make this signal a gamecontroller, preferably using messaging, because I mean DAMN
            }
            Destroy(collision.gameObject);
        }
    }
Beispiel #2
0
        public override void OnJungleClear()
        {
            if (!EntityManager.MinionsAndMonsters.Monsters.Any(m => m.Distance(Player.Instance) < Q.Range))
            {
                return;
            }

            var targets = EntityManager.MinionsAndMonsters.Monsters.Where(t => t.IsValidTarget(Q.Range) && t.IsValidTarget(Q.Range));

            var jungleclear = Features.Find(f => f.NameFeature == "Jungle Clear");

            if (!targets.Any() || jungleclear.SliderValue("mana") > Player.Instance.ManaPercent)
            {
                return;
            }

            var bestTarget = targets.Aggregate((curMax, x) => ((curMax == null && x.IsValid) || x.MaxHealth > curMax.MaxHealth ? x : curMax));

            if (Q.IsReady() && jungleclear.IsChecked("jungleclear.q"))
            {
                Q.Cast(Q.GetPrediction(bestTarget).CastPosition);
            }

            if (E.IsReady() && jungleclear.IsChecked("jungleclear.e") && DamageUtil.Killable(bestTarget, SpellSlot.E) && bestTarget != Orbwalker.LastTarget)
            {
                E.Cast(bestTarget);
            }
        }
Beispiel #3
0
    public void DoFlame(float delta)
    {
        if (!UseFuel(delta))
        {
            return;
        }
        Ray        ray    = new Ray(GetEyePosition(), base.transform.TransformDirection(Quaternion.Euler(aimDir) * Vector3.forward));
        Vector3    origin = ray.origin;
        RaycastHit hitInfo;
        bool       flag = Physics.SphereCast(ray, 0.4f, out hitInfo, flameRange, 1218652417);

        if (!flag)
        {
            hitInfo.point = origin + ray.direction * flameRange;
        }
        float amount = damagePerSec[0].amount;

        damagePerSec[0].amount = amount * delta;
        DamageUtil.RadiusDamage(this, LookupPrefab(), hitInfo.point - ray.direction * 0.1f, flameRadius * 0.5f, flameRadius, damagePerSec, 2230272, true);
        DamageUtil.RadiusDamage(this, LookupPrefab(), base.transform.position + new Vector3(0f, 1.25f, 0f), 0.25f, 0.25f, damagePerSec, 133120, false);
        damagePerSec[0].amount = amount;
        if (Time.realtimeSinceStartup >= nextFireballTime)
        {
            nextFireballTime = Time.realtimeSinceStartup + UnityEngine.Random.Range(1f, 2f);
            Vector3    vector     = ((UnityEngine.Random.Range(0, 10) <= 7 && flag) ? hitInfo.point : (ray.origin + ray.direction * (flag ? hitInfo.distance : flameRange) * UnityEngine.Random.Range(0.4f, 1f)));
            BaseEntity baseEntity = GameManager.server.CreateEntity(fireballPrefab.resourcePath, vector - ray.direction * 0.25f);
            if ((bool)baseEntity)
            {
                baseEntity.creatorEntity = this;
                baseEntity.Spawn();
            }
        }
    }
Beispiel #4
0
        private void Start()
        {
            _rigidbody2D = GetComponent <Rigidbody2D>();
            var health = GetComponentInChildren <HealthBar>();

            _damageUtil   = new DamageUtil(health);
            _movementUtil = new MobileMovementUtil(_rigidbody2D, transform, Bullet, MoveSpeed, true);
        }
Beispiel #5
0
 public virtual void Explode()
 {
     base.health = float.PositiveInfinity;
     Effect.server.Run(explosionEffect.resourcePath, PivotPoint(), base.transform.up, null, true);
     DamageUtil.RadiusDamage(this, LookupPrefab(), CenterPoint(), minExplosionRadius, explosionRadius, damageTypes, 2263296, true);
     if (!base.IsDestroyed)
     {
         Kill();
     }
 }
Beispiel #6
0
    public void OnCollisionEnter2D(Collision2D collision)
    {
        var bs = collision.gameObject.GetComponent <BulletScript>();

        if (bs != null)
        {
            Health -= DamageUtil.CalculateDamage(bs.Damage, bs.DamagePierce, DamageThreshold, DamageResistance);
            bs.Die();
            CheckIfDead();
        }
    }
Beispiel #7
0
 public virtual void Explode()
 {
     this.health = float.PositiveInfinity;
     Effect.server.Run(this.explosionEffect.resourcePath, this.PivotPoint(), ((Component)this).get_transform().get_up(), (Connection)null, true);
     DamageUtil.RadiusDamage((BaseEntity)this, this.LookupPrefab(), this.CenterPoint(), this.minExplosionRadius, this.explosionRadius, this.damageTypes, 2230528, true);
     if (this.IsDestroyed)
     {
         return;
     }
     this.Kill(BaseNetworkable.DestroyMode.None);
 }
Beispiel #8
0
    public void FlameTick()
    {
        RaycastHit raycastHit;
        float      single = UnityEngine.Time.realtimeSinceStartup - this.lastFlameTick;

        this.lastFlameTick = UnityEngine.Time.realtimeSinceStartup;
        BasePlayer ownerPlayer = base.GetOwnerPlayer();

        if (!ownerPlayer)
        {
            return;
        }
        this.ReduceAmmo(single);
        base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        Ray     ray     = ownerPlayer.eyes.BodyRay();
        Vector3 vector3 = ray.origin;
        bool    flag    = UnityEngine.Physics.SphereCast(ray, 0.3f, out raycastHit, this.flameRange, 1218652417);

        if (!flag)
        {
            raycastHit.point = vector3 + (ray.direction * this.flameRange);
        }
        float single1 = (ownerPlayer.IsNpc ? this.npcDamageScale : 1f);
        float item    = this.damagePerSec[0].amount;

        this.damagePerSec[0].amount = item * single * single1;
        DamageUtil.RadiusDamage(ownerPlayer, base.LookupPrefab(), raycastHit.point - (ray.direction * 0.1f), this.flameRadius * 0.5f, this.flameRadius, this.damagePerSec, 2246913, true);
        this.damagePerSec[0].amount = item;
        if (flag && UnityEngine.Time.realtimeSinceStartup >= this.nextFlameTime && raycastHit.distance > 1.1f)
        {
            this.nextFlameTime = UnityEngine.Time.realtimeSinceStartup + 0.45f;
            Vector3     vector31    = raycastHit.point;
            GameManager gameManager = GameManager.server;
            string      str         = this.fireballPrefab.resourcePath;
            Vector3     vector32    = vector31 - (ray.direction * 0.25f);
            Quaternion  quaternion  = new Quaternion();
            BaseEntity  baseEntity  = gameManager.CreateEntity(str, vector32, quaternion, true);
            if (baseEntity)
            {
                baseEntity.creatorEntity = ownerPlayer;
                baseEntity.Spawn();
            }
        }
        if (this.ammo == 0)
        {
            this.SetFlameState(false);
        }
        Item ownerItem = base.GetOwnerItem();

        if (ownerItem != null)
        {
            ownerItem.LoseCondition(single);
        }
    }
Beispiel #9
0
 public virtual void Explode()
 {
     base.health = Single.PositiveInfinity;
     Effect.server.Run(this.explosionEffect.resourcePath, base.PivotPoint(), base.transform.up, null, true);
     DamageUtil.RadiusDamage(this, base.LookupPrefab(), base.CenterPoint(), this.minExplosionRadius, this.explosionRadius, this.damageTypes, 2230528, true);
     if (base.IsDestroyed)
     {
         return;
     }
     base.Kill(BaseNetworkable.DestroyMode.None);
 }
Beispiel #10
0
        public override void Build(Vector3 finalPos, float buildTime, int fallheight, Ease easeType, BuildConfig.BuildableBlueprint blueprint)
        {
            _explosionMask = LayerMask.GetMask(maskList);
            base.Build(finalPos, buildTime, fallheight, easeType, blueprint);

            Tween t = transform.DOMove(finalPos, buildTime).SetEase(easeType).OnComplete(() =>
            {
                DamageUtil.ApplyExplosionDamage(this, finalPos, _blueprint.explodeRadius, _blueprint.damage, _explosionMask, ref _cachedColliders);

                Singleton.instance.particleGod.GenerateParticle(Particle.Type.HelixBomb, finalPos);
                Singleton.instance.audioSystem.PlaySound(SoundBank.Type.HelixBomb);
                RemoveFromPool();
            });
        }
Beispiel #11
0
    private void DoSplash(BasePlayer attacker, Vector3 position, Vector3 direction, int amount)
    {
        Item item = GetItem();

        if (item != null && item.contents != null)
        {
            Item slot = item.contents.GetSlot(0);
            if (slot != null && slot.amount > 0 && !(slot.info == null))
            {
                WaterBall.DoSplash(position, SplashRadius, slot.info, amount);
                DamageUtil.RadiusDamage(attacker, LookupPrefab(), position, MinDmgRadius, MaxDmgRadius, Damage, 131072, true);
            }
        }
    }
Beispiel #12
0
    public void Update()
    {
        if (!isCasted)
        {
            return;
        }

        attackTimer -= Time.deltaTime;
        if (attackTimer <= 0)
        {
            attackTimer = config.attackInterval;
            List <Characer> targets = new List <Characer>();
            if (config.isAoe)
            {
                targets = CharacerSearch.SearchTarget(caster, config.targetType, TargetFieltType.None);
            }
            else
            {
                targets.Add(target);
            }

            foreach (var t in targets)
            {
                DoAttack(t);
            }

            attackTimes++;
        }

        int maxTimes = config.attackTimes;

        if (attackTimes >= maxTimes)
        {
            isCasted = false;

            if (config.onePunch)
            {
                if (overflowDamage > 1)
                {
                    var targets = CharacerSearch.SearchTarget(caster, TargetType.Enemy, TargetFieltType.None);
                    foreach (var t in targets)
                    {
                        var damageInfo = DamageUtil.CalculateDamage(caster, t, overflowDamage);
                        t.BeAttacked(damageInfo);
                    }
                }
            }
        }
    }
Beispiel #13
0
        private void applyDamage()
        {
            Vector3 position = transform.position;

            if (_blueprint != null)
            {
                DamageUtil.ApplyExplosionDamage(this, position, _blueprint.explodeRadius, _blueprint.damage, _explosionMask, ref _cachedCollider);
            }

            Singleton.instance.particleGod.GenerateParticle(Particle.Type.BaseExplosion, position);
            Singleton.instance.audioSystem.PlaySound(SoundBank.Type.Explosion, null, true);

            killTweens();
            RemoveFromPool();
        }
Beispiel #14
0
    public void FlameTick()
    {
        float num = UnityEngine.Time.realtimeSinceStartup - lastFlameTick;

        lastFlameTick = UnityEngine.Time.realtimeSinceStartup;
        BasePlayer ownerPlayer = GetOwnerPlayer();

        if (!ownerPlayer)
        {
            return;
        }
        ReduceAmmo(num);
        SendNetworkUpdate();
        Ray        ray    = ownerPlayer.eyes.BodyRay();
        Vector3    origin = ray.origin;
        RaycastHit hitInfo;
        bool       num2 = UnityEngine.Physics.SphereCast(ray, 0.3f, out hitInfo, flameRange, 1218652417);

        if (!num2)
        {
            hitInfo.point = origin + ray.direction * flameRange;
        }
        float num3   = (ownerPlayer.IsNpc ? npcDamageScale : 1f);
        float amount = damagePerSec[0].amount;

        damagePerSec[0].amount = amount * num * num3;
        DamageUtil.RadiusDamage(ownerPlayer, LookupPrefab(), hitInfo.point - ray.direction * 0.1f, flameRadius * 0.5f, flameRadius, damagePerSec, 2279681, true);
        damagePerSec[0].amount = amount;
        if (num2 && UnityEngine.Time.realtimeSinceStartup >= nextFlameTime && hitInfo.distance > 1.1f)
        {
            nextFlameTime = UnityEngine.Time.realtimeSinceStartup + 0.45f;
            Vector3    point      = hitInfo.point;
            BaseEntity baseEntity = GameManager.server.CreateEntity(fireballPrefab.resourcePath, point - ray.direction * 0.25f);
            if ((bool)baseEntity)
            {
                Interface.CallHook("OnFlameThrowerBurn", this, baseEntity);
                baseEntity.creatorEntity = ownerPlayer;
                baseEntity.Spawn();
            }
        }
        if (ammo == 0)
        {
            SetFlameState(false);
        }
        GetOwnerItem()?.LoseCondition(num);
    }
Beispiel #15
0
        void Explode(BasePlayer player)
        {
            //  Initialize DamageTypeEntry - Explosion
            Rust.DamageTypeEntry dmg = new Rust.DamageTypeEntry();
            dmg.amount = 100;
            dmg.type   = Rust.DamageType.Generic;

            //  Fire Effects
            Effect.server.Run("assets/bundled/prefabs/fx/fire/fire_v2.prefab", player.transform.position, Vector3.up);
            Effect.server.Run("assets/bundled/prefabs/fx/fire/fire_v2.prefab", player.transform.position + new Vector3(1, 0, 1), Vector3.up);
            Effect.server.Run("assets/bundled/prefabs/fx/fire/fire_v2.prefab", player.transform.position + new Vector3(1, 0, 0), Vector3.up);
            Effect.server.Run("assets/bundled/prefabs/fx/fire/fire_v2.prefab", player.transform.position + new Vector3(0, 0, 1), Vector3.up);

            //  Explosion Effect
            Effect.server.Run("assets/prefabs/tools/c4/effects/c4_explosion.prefab", player.transform.position, Vector3.up, null, true);

            //  Initialize HitInfo
            HitInfo hitInfo = new HitInfo()
            {
                Initiator    = null,
                WeaponPrefab = null
            };

            //  Add DamageTypeEntry to HitInfo
            hitInfo.damageTypes.Add(new List <Rust.DamageTypeEntry> {
                dmg
            });

            //  Hurt Player
            DamageUtil.RadiusDamage(null, null, player.transform.position, 5, 10, new List <Rust.DamageTypeEntry> {
                dmg
            }, 133376, true);

            //  Hurt Player
            //  player.Hurt(hitInfo, true);

            timer.Once(5f, () =>
            {
                //  Kill player if still wounded
                if (player.IsWounded())
                {
                    player.DieInstantly();
                }
            });
        }
    public void FlameTick()
    {
        float num1 = Time.get_realtimeSinceStartup() - this.lastFlameTick;

        this.lastFlameTick = Time.get_realtimeSinceStartup();
        BasePlayer ownerPlayer = this.GetOwnerPlayer();

        if (!Object.op_Implicit((Object)ownerPlayer))
        {
            return;
        }
        this.ReduceAmmo(num1);
        this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        Ray        ray    = ownerPlayer.eyes.BodyRay();
        Vector3    origin = ((Ray) ref ray).get_origin();
        RaycastHit raycastHit;
        int        num2 = Physics.SphereCast(ray, 0.3f, ref raycastHit, this.flameRange, 1218652417) ? 1 : 0;

        if (num2 == 0)
        {
            ((RaycastHit) ref raycastHit).set_point(Vector3.op_Addition(origin, Vector3.op_Multiply(((Ray) ref ray).get_direction(), this.flameRange)));
        }
        float num3   = ownerPlayer.IsNpc ? this.npcDamageScale : 1f;
        float amount = this.damagePerSec[0].amount;

        this.damagePerSec[0].amount = amount * num1 * num3;
        DamageUtil.RadiusDamage((BaseEntity)ownerPlayer, this.LookupPrefab(), Vector3.op_Subtraction(((RaycastHit) ref raycastHit).get_point(), Vector3.op_Multiply(((Ray) ref ray).get_direction(), 0.1f)), this.flameRadius * 0.5f, this.flameRadius, this.damagePerSec, 2246913, true);
        this.damagePerSec[0].amount = amount;
        if (num2 != 0 && (double)Time.get_realtimeSinceStartup() >= (double)this.nextFlameTime && (double)((RaycastHit) ref raycastHit).get_distance() > 1.10000002384186)
        {
            this.nextFlameTime = Time.get_realtimeSinceStartup() + 0.45f;
            Vector3    point  = ((RaycastHit) ref raycastHit).get_point();
            BaseEntity entity = GameManager.server.CreateEntity(this.fireballPrefab.resourcePath, Vector3.op_Subtraction(point, Vector3.op_Multiply(((Ray) ref ray).get_direction(), 0.25f)), (Quaternion)null, true);
            if (Object.op_Implicit((Object)entity))
            {
                entity.creatorEntity = (BaseEntity)ownerPlayer;
                entity.Spawn();
            }
        }
        if (this.ammo == 0)
        {
            this.SetFlameState(false);
        }
        this.GetOwnerItem()?.LoseCondition(num1);
    }
Beispiel #17
0
    public void DoAttack(Characer receiver)
    {
        var   d        = DamageUtil.CalculateDamage(caster, receiver, this);
        float hpChange = receiver.BeAttacked(d);

        overflowDamage += d.damage - hpChange;

        if (caster.special == CharacterSpecialType.RealDamage)
        {
            float damage = caster.attack * 1.2f;
            float max    = receiver.maxHp * 0.1f;
            if (damage > max)
            {
                damage = max;
            }
            DamageInfo info = new DamageInfo();
            info.damage = damage;
            receiver.BeAttacked(info);
        }
    }
Beispiel #18
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.GetComponent <Bullet>() != null)
        {
            return;
        }

        var damagable = Util.GetDamagableFromCollider(other);

        if (damagable != null && !_damaged)
        {
            _damaged = true;
            if (damagable.GetComponent <IDamagable>().Damage(damage))
            {
                DamageUtil.ProgressKillQuests(responsible, damagable);
            }
            damagable.gameObject.GetComponent <Rigidbody>().AddForce(GetComponent <Rigidbody>().velocity.normalized *50);
            Destroy(this.gameObject);
        }
    }
        // Start is called before the first frame update
        void Start()
        {
            var rb     = GetComponent <Rigidbody2D>();
            var health = GetComponentInChildren <HealthBar>();

            _mobileInputController = GetComponentInChildren <MobileInputController>();

            _damageUtil   = new DamageUtil(health);
            _movementUtil = new MobileMovementUtil(rb, transform, Bullet, MoveSpeed, false);


            // Set Movement Events
            Jump.onClick.AddListener(() =>
            {
                _movementUtil.Jump();
            });
            Shoot.onClick.AddListener(() =>
            {
                _movementUtil.Shoot();
            });
        }
    public override void OnKilled(HitInfo info)
    {
        double num1 = (double)this.GetFuelAmount() / 500.0;

        DamageUtil.RadiusDamage((BaseEntity)this, this.LookupPrefab(), this.GetEyePosition(), 2f, 6f, this.damagePerSec, 133120, true);
        Effect.server.Run(this.explosionEffect.resourcePath, ((Component)this).get_transform().get_position(), Vector3.get_up(), (Connection)null, false);
        int num2 = Mathf.CeilToInt(Mathf.Clamp((float)(num1 * 8.0), 1f, 8f));

        for (int index = 0; index < num2; ++index)
        {
            BaseEntity entity = GameManager.server.CreateEntity(this.fireballPrefab.resourcePath, ((Component)this).get_transform().get_position(), ((Component)this).get_transform().get_rotation(), true);
            if (Object.op_Implicit((Object)entity))
            {
                Vector3 onUnitSphere = Random.get_onUnitSphere();
                ((Component)entity).get_transform().set_position(Vector3.op_Addition(Vector3.op_Addition(((Component)this).get_transform().get_position(), new Vector3(0.0f, 1.5f, 0.0f)), Vector3.op_Multiply(onUnitSphere, Random.Range(-1f, 1f))));
                entity.Spawn();
                entity.SetVelocity(Vector3.op_Multiply(onUnitSphere, (float)Random.Range(3, 10)));
            }
        }
        base.OnKilled(info);
    }
    public override void OnKilled(HitInfo info)
    {
        float fuelAmount = (float)this.GetFuelAmount() / 500f;

        DamageUtil.RadiusDamage(this, base.LookupPrefab(), this.GetEyePosition(), 2f, 6f, this.damagePerSec, 133120, true);
        Effect.server.Run(this.explosionEffect.resourcePath, base.transform.position, Vector3.up, null, false);
        int num = Mathf.CeilToInt(Mathf.Clamp(fuelAmount * 8f, 1f, 8f));

        for (int i = 0; i < num; i++)
        {
            BaseEntity vector3 = GameManager.server.CreateEntity(this.fireballPrefab.resourcePath, base.transform.position, base.transform.rotation, true);
            if (vector3)
            {
                Vector3 vector31 = UnityEngine.Random.onUnitSphere;
                vector3.transform.position = (base.transform.position + new Vector3(0f, 1.5f, 0f)) + (vector31 * UnityEngine.Random.Range(-1f, 1f));
                vector3.Spawn();
                vector3.SetVelocity(vector31 * (float)UnityEngine.Random.Range(3, 10));
            }
        }
        base.OnKilled(info);
    }
Beispiel #22
0
    public override void OnKilled(HitInfo info)
    {
        float num = (float)GetFuelAmount() / 500f;

        DamageUtil.RadiusDamage(this, LookupPrefab(), GetEyePosition(), 2f, 6f, damagePerSec, 133120, true);
        Effect.server.Run(explosionEffect.resourcePath, base.transform.position, Vector3.up);
        int num2 = Mathf.CeilToInt(Mathf.Clamp(num * 8f, 1f, 8f));

        for (int i = 0; i < num2; i++)
        {
            BaseEntity baseEntity = GameManager.server.CreateEntity(fireballPrefab.resourcePath, base.transform.position, base.transform.rotation);
            if ((bool)baseEntity)
            {
                Vector3 onUnitSphere = UnityEngine.Random.onUnitSphere;
                baseEntity.transform.position = base.transform.position + new Vector3(0f, 1.5f, 0f) + onUnitSphere * UnityEngine.Random.Range(-1f, 1f);
                baseEntity.Spawn();
                baseEntity.SetVelocity(onUnitSphere * UnityEngine.Random.Range(3, 10));
            }
        }
        base.OnKilled(info);
    }
    public void DoFlame(float delta)
    {
        if (!this.UseFuel(delta))
        {
            return;
        }
        Ray ray;

        ((Ray) ref ray).\u002Ector(this.GetEyePosition(), ((Component)this).get_transform().TransformDirection(Quaternion.op_Multiply(Quaternion.Euler(this.aimDir), Vector3.get_forward())));
        Vector3    origin = ((Ray) ref ray).get_origin();
        RaycastHit raycastHit;
        bool       flag = Physics.SphereCast(ray, 0.4f, ref raycastHit, this.flameRange, 1218652417);

        if (!flag)
        {
            ((RaycastHit) ref raycastHit).set_point(Vector3.op_Addition(origin, Vector3.op_Multiply(((Ray) ref ray).get_direction(), this.flameRange)));
        }
        float amount = this.damagePerSec[0].amount;

        this.damagePerSec[0].amount = amount * delta;
        DamageUtil.RadiusDamage((BaseEntity)this, this.LookupPrefab(), Vector3.op_Subtraction(((RaycastHit) ref raycastHit).get_point(), Vector3.op_Multiply(((Ray) ref ray).get_direction(), 0.1f)), this.flameRadius * 0.5f, this.flameRadius, this.damagePerSec, 2230272, true);
        DamageUtil.RadiusDamage((BaseEntity)this, this.LookupPrefab(), Vector3.op_Addition(((Component)this).get_transform().get_position(), new Vector3(0.0f, 1.25f, 0.0f)), 0.25f, 0.25f, this.damagePerSec, 133120, false);
        this.damagePerSec[0].amount = amount;
        if ((double)Time.get_realtimeSinceStartup() < (double)this.nextFireballTime)
        {
            return;
        }
        this.nextFireballTime = Time.get_realtimeSinceStartup() + Random.Range(1f, 2f);
        Vector3    vector3 = Random.Range(0, 10) <= 7 & flag ? ((RaycastHit) ref raycastHit).get_point() : Vector3.op_Addition(((Ray) ref ray).get_origin(), Vector3.op_Multiply(Vector3.op_Multiply(((Ray) ref ray).get_direction(), flag ? ((RaycastHit) ref raycastHit).get_distance() : this.flameRange), Random.Range(0.4f, 1f)));
        BaseEntity entity  = GameManager.server.CreateEntity(this.fireballPrefab.resourcePath, Vector3.op_Subtraction(vector3, Vector3.op_Multiply(((Ray) ref ray).get_direction(), 0.25f)), (Quaternion)null, true);

        if (!Object.op_Implicit((Object)entity))
        {
            return;
        }
        entity.creatorEntity = (BaseEntity)this;
        entity.Spawn();
    }
    public void DoFlame(float delta)
    {
        RaycastHit raycastHit;

        if (!this.UseFuel(delta))
        {
            return;
        }
        Ray     ray     = new Ray(this.GetEyePosition(), base.transform.TransformDirection(Quaternion.Euler(this.aimDir) * Vector3.forward));
        Vector3 vector3 = ray.origin;
        bool    flag    = Physics.SphereCast(ray, 0.4f, out raycastHit, this.flameRange, 1218652417);

        if (!flag)
        {
            raycastHit.point = vector3 + (ray.direction * this.flameRange);
        }
        float item = this.damagePerSec[0].amount;

        this.damagePerSec[0].amount = item * delta;
        DamageUtil.RadiusDamage(this, base.LookupPrefab(), raycastHit.point - (ray.direction * 0.1f), this.flameRadius * 0.5f, this.flameRadius, this.damagePerSec, 2230272, true);
        DamageUtil.RadiusDamage(this, base.LookupPrefab(), base.transform.position + new Vector3(0f, 1.25f, 0f), 0.25f, 0.25f, this.damagePerSec, 133120, false);
        this.damagePerSec[0].amount = item;
        if (Time.realtimeSinceStartup >= this.nextFireballTime)
        {
            this.nextFireballTime = Time.realtimeSinceStartup + UnityEngine.Random.Range(1f, 2f);
            Vector3     vector31    = (UnityEngine.Random.Range(0, 10) <= 7 & flag ? raycastHit.point : ray.origin + ((ray.direction * (flag ? raycastHit.distance : this.flameRange)) * UnityEngine.Random.Range(0.4f, 1f)));
            GameManager gameManager = GameManager.server;
            string      str         = this.fireballPrefab.resourcePath;
            Vector3     vector32    = vector31 - (ray.direction * 0.25f);
            Quaternion  quaternion  = new Quaternion();
            BaseEntity  baseEntity  = gameManager.CreateEntity(str, vector32, quaternion, true);
            if (baseEntity)
            {
                baseEntity.creatorEntity = this;
                baseEntity.Spawn();
            }
        }
    }
Beispiel #25
0
        void doDamage(BaseCombatEntity entity, Vector3 position, BarrelEffect effect)
        {
            List <DamageTypeEntry> damage = new List <DamageTypeEntry>();

            foreach (KeyValuePair <string, float> entry in effect.damageMap)
            {
                if (!Enum.IsDefined(typeof(DamageType), entry.Key))
                {
                    PrintWarning(String.Format(GetMessage("Warning_InvalidDamageType"), entry.Key));
                    continue;
                }
                if (entry.Value == null || entry.Value < 0.0f)
                {
                    PrintWarning(String.Format(GetMessage("Warning_InvalidDamageValue"), new object[] { entry.Key, entry.Value }));
                    continue;
                }
                DamageTypeEntry d = new DamageTypeEntry();
                d.type   = (DamageType)Enum.Parse(typeof(DamageType), entry.Key);
                d.amount = entry.Value;
                damage.Add(d);
            }

            DamageUtil.RadiusDamage(entity, null, position, effect.minRadius, effect.maxRadius, damage, -1, false);
        }
    private IEnumerator MoveWeapon(GameObject weapon, Vector3 direction, float overTime)
    {
        float                startTime     = Time.time;
        var                  startPosition = weapon.GetComponent <Weapon>().Responsible.Equipment.weaponPosition.transform.position;
        var                  endPosition   = startPosition + direction;
        GameObject           damagable     = null;
        HashSet <GameObject> damagables    = new HashSet <GameObject>();

        weapon.GetComponent <Weapon>().Responsible.animator.SetBool("isPunching", true);

        while (Time.time < startTime + overTime)
        {
            weapon.transform.position = Vector3.Lerp(startPosition, endPosition, (Time.time - startTime) / overTime);
            damagables = DamageUtil.FindDamagables(weapon.transform.position, weapon.transform.localScale / 2, weapon);
            yield return(null);
        }

        foreach (var damagableObject in damagables)
        {
            if (damagableObject.GetComponent <IDamagable>().Damage(weapon.GetComponent <Weapon>().damage))
            {
                DamageUtil.ProgressKillQuests(weapon.GetComponent <Weapon>().Responsible, damagableObject);
            }
            damagableObject.GetComponent <Rigidbody>().AddForce(direction.normalized * 50);
        }

        startTime = Time.time;
        while (Time.time < startTime + overTime)
        {
            weapon.transform.position = Vector3.Lerp(endPosition, startPosition, (Time.time - startTime) / overTime);
            yield return(null);
        }

        weapon.transform.position = weapon.GetComponent <Weapon>().Responsible.Equipment.weaponPosition.transform.position;
        weapon.GetComponent <Weapon>().Responsible.animator.SetBool("isPunching", false);
    }
Beispiel #27
0
        //-------------------------------------------KS--------------------------------------------

        void KS()
        {
            if (Q.IsReady())
            {
                var bye = EntityManager.Heroes.Enemies.FirstOrDefault(enemy => enemy.IsValidTarget(Q.Range) && DamageUtil.GetSpellDamage(enemy, SpellSlot.Q, true, true) >= enemy.Health);
                if (bye != null)
                {
                    Q.Cast(bye); return;
                }
            }

            if (W.IsReady())
            {
                var bye = EntityManager.Heroes.Enemies.FirstOrDefault(enemy => enemy.IsValidTarget(W.Range) && DamageUtil.GetSpellDamage(enemy, SpellSlot.W, true, true) >= enemy.Health);
                if (bye != null)
                {
                    W.Cast(bye); return;
                }
            }

            if (Q.IsReady() && W.IsReady())
            {
                var bye = EntityManager.Heroes.Enemies.FirstOrDefault(enemy => enemy.IsValidTarget(Q.Range) && DamageUtil.GetSpellDamage(enemy, SpellSlot.Q, true, true) + DamageUtil.GetSpellDamage(enemy, SpellSlot.W, true, true) >= enemy.Health);
                if (bye != null)
                {
                    W.Cast(bye); return;
                }
            }
        }
Beispiel #28
0
        public override void OnLastHit()
        {
            base.OnLastHit();

            var mode = Features.First(it => it.NameFeature == "Last Hit");

            if (Player.ManaPercent <= mode.SliderValue("lasthit.mana%"))
            {
                return;
            }

            if (Q.IsReady() && mode.IsChecked("lasthit.q"))
            {
                IEnumerable <Obj_AI_Base> IEMinions = EntityManager.MinionsAndMonsters.GetLaneMinions(EntityManager.UnitTeam.Enemy, Player.ServerPosition, Q.Range).Where(minion => minion.Health <= DamageUtil.GetSpellDamage(minion, SpellSlot.Q, true, true)).OrderBy(minion => minion.Distance(Player.Position.To2D()));

                if (IEMinions.Any())
                {
                    switch (mode.SliderValue("lasthit.q.mode"))
                    {
                    case 0:
                        Q.Cast(IEMinions.First());
                        break;

                    case 1:
                        if (Player.CountEnemiesInRange(700) == 0)
                        {
                            Q.Cast(IEMinions.First());
                        }
                        break;

                    case 2:
                        if (!Player.HasBuff("pyromania_particle"))
                        {
                            Q.Cast(IEMinions.First());
                        }
                        break;
                    }
                }
            }

            return;
        }
Beispiel #29
0
        public override void OnLaneClear()
        {
            var mode = Features.First(it => it.NameFeature == "Lane Clear");

            bool UseItem = EntityManager.MinionsAndMonsters.GetLaneMinions(EntityManager.UnitTeam.Enemy, Player.Position, 400).Count() >= 3;

            if (UseItem)
            {
                Activator.tiamat.Cast(); Activator.hydra.Cast();
            }

            if (Player.ManaPercent <= mode.SliderValue("laneclear.mana%"))
            {
                return;
            }

            if (Q.IsReady() && mode.IsChecked("laneclear.q"))
            {
                IEnumerable <Obj_AI_Base> IEMinions = EntityManager.MinionsAndMonsters.GetLaneMinions(EntityManager.UnitTeam.Enemy, Player.ServerPosition, Q.Range).Where(minion => minion.Health <= DamageUtil.GetSpellDamage(minion, SpellSlot.Q, true, true)).OrderBy(minion => minion.Distance(Player.Position.To2D()));

                if (IEMinions.Any())
                {
                    switch (mode.SliderValue("laneclear.q.mode"))
                    {
                    case 0:
                        Q.Cast(IEMinions.First());
                        break;

                    case 1:
                        if (Player.CountEnemiesInRange(700) == 0)
                        {
                            Q.Cast(IEMinions.First());
                        }
                        break;

                    case 2:
                        if (!Player.HasBuff("pyromania_particle"))
                        {
                            Q.Cast(IEMinions.First());
                        }
                        break;
                    }
                }
            }

            if (mode.IsChecked("laneclear.w") && W.IsReady() && Player.ManaPercent >= mode.SliderValue("laneclear.mana%"))
            {
                var WPos = GetBestWPos(true);
                if (WPos != default(Vector3))
                {
                    W.Cast(WPos);
                }
            }

            return;
        }
Beispiel #30
0
        /*
         *  Spells[0] = Q
         *  Spells[1] = W
         *  Spells[2] = E
         *  Spells[3] = R
         */

        public override void OnCombo()
        {
            var target  = TargetSelector.GetTarget(((Spell.Chargeable)Spells[0]).MaximumRange, DamageType.Magical);
            var rTarget = TargetSelector.GetTarget(Spells[3].Range, DamageType.Magical);

            if (target == null || !target.IsValidTarget())
            {
                return;
            }

            var combo = Features.Find(f => f.NameFeature == "Combo");
            var Q     = ((Spell.Chargeable)Spells[0]);
            var W     = ((Spell.Skillshot)Spells[1]);
            var E     = ((Spell.Skillshot)Spells[2]);
            var R     = ((Spell.Skillshot)Spells[3]);

            if (combo.IsChecked("combo.q") && Q.IsReady() && target.Distance(Player.Instance) < Q.MaximumRange && !castingR)
            {
                if (!Q.IsCharging)
                {
                    Q.StartCharging();
                }
                else if (Q.Range == Q.MaximumRange)
                {
                    if (Q.Cast(target.ServerPosition))
                    {
                    }
                }
                else
                {
                    var qPrediction    = Q.GetPrediction(target);
                    var predictionPost = Prediction.Position.PredictUnitPosition(target, 410);

                    if (predictionPost.Distance(Player.Instance) > Q.Range && Q.IsCharging)
                    {
                        return;
                    }

                    if (qPrediction.HitChancePercent >= 87)
                    {
                        Q.Cast(qPrediction.CastPosition);
                    }
                }
            }

            if (Q.IsCharging)
            {
                return;
            }

            if (combo.IsChecked("combo.r") && R.IsReady() && R.IsInRange(rTarget) && ((!Q.IsInRange(rTarget) && DamageUtil.Killable(rTarget, SpellSlot.R, 50)) || castingR))
            {
                var predictionR = R.GetPrediction(rTarget);

                if (predictionR.HitChancePercent >= 80)
                {
                    if (!castingR)
                    {
                        castingR = true;
                        Orbwalker.DisableMovement  = true;
                        Orbwalker.DisableAttacking = true;
                    }

                    R.Cast(predictionR.CastPosition);
                }
                else if (castingR && predictionR.HitChancePercent >= 70)
                {
                    R.Cast(predictionR.CastPosition);
                }
            }
            else if (!R.IsReady())
            {
                castingR = false;
                Orbwalker.DisableMovement  = false;
                Orbwalker.DisableAttacking = false;
            }

            if (combo.IsChecked("combo.w") && W.IsReady() && W.IsInRange(target) && !castingR)
            {
                var predictionW   = W.GetPrediction(target);
                var posPrediction = Prediction.Position.PredictUnitPosition(target, 500);

                if (predictionW.HitChancePercent >= 85 && predictionW.CastPosition.Distance(posPrediction) < 70)
                {
                    W.Cast(predictionW.CastPosition);
                }
            }

            if (combo.IsChecked("combo.e") && E.IsReady() && E.IsInRange(target) && !castingR)
            {
                var predictionE = E.GetPrediction(target);

                if (predictionE.HitChancePercent >= 80)
                {
                    E.Cast(predictionE.CastPosition);
                }
            }
        }