Example #1
0
        private BaseEntity CreateRocket(Vector3 startPoint, Vector3 direction, bool isFireRocket)
        {
            ItemDefinition projectileItem;

            if (isFireRocket)
            {
                projectileItem = GetFireRocket();
            }
            else
            {
                projectileItem = GetRocket();
            }

            ItemModProjectile component = projectileItem.GetComponent <ItemModProjectile>();
            BaseEntity        entity    = GameManager.server.CreateEntity(component.projectileObject.resourcePath, startPoint, new Quaternion(), true);

            TimedExplosive   timedExplosive   = entity.GetComponent <TimedExplosive>();
            ServerProjectile serverProjectile = entity.GetComponent <ServerProjectile>();

            serverProjectile.gravityModifier = gravityModifier;
            serverProjectile.speed           = projectileSpeed;
            timedExplosive.timerAmountMin    = detonationTime;
            timedExplosive.timerAmountMax    = detonationTime;
            timedExplosive.explosionRadius   = 1000f;
            timedExplosive.canStick          = true;

            entity.SendMessage("InitializeVelocity", (object)(direction * 2f));
            entity.Spawn(true);

            return(entity);
        }
        private BaseEntity CreateRocket(Vector3 startPoint, Vector3 direction, bool isFireRocket)
        {
            ItemDefinition projectileItem;

            if (isFireRocket)
            {
                projectileItem = ItemManager.FindItemDefinition("ammo.rocket.fire");
            }
            else
            {
                projectileItem = ItemManager.FindItemDefinition("ammo.rocket.basic");
            }

            ItemModProjectile component = projectileItem.GetComponent <ItemModProjectile>();
            BaseEntity        entity    = GameManager.server.CreateEntity(component.projectileObject.resourcePath, startPoint, new Quaternion(), true);

            TimedExplosive   timedExplosive   = entity.GetComponent <TimedExplosive>();
            ServerProjectile serverProjectile = entity.GetComponent <ServerProjectile>();

            serverProjectile.gravityModifier = 0;
            serverProjectile.speed           = 25;
            timedExplosive.timerAmountMin    = 300;
            timedExplosive.timerAmountMax    = 300;
            ScaleAllDamage(timedExplosive.damageTypes, configData.DamageControl.DamageMultiplier);

            serverProjectile.InitializeVelocity(direction.normalized * 25);
            entity.Spawn();
            return(entity);
        }
        private bool CanShowPanel(TimedExplosive explosive)
        {
            if (!(explosive?.IsValid() ?? false))
            {
                return(false);
            }

            ServerProjectile proj = explosive.GetComponent <ServerProjectile>();

            if (proj == null)
            {
                return(false);
            }

            //Rain of Fire checks
            if (proj.gravityModifier != 0f ||
                proj.speed != 25f ||
                explosive.timerAmountMin != 300 ||
                explosive.timerAmountMax != 300)
            {
                return(false);
            }

            object result = Interface.Call("MagicPanelCanShow", Name, explosive);

            if (result is bool)
            {
                return((bool)result);
            }

            return(true);
        }
 void OnEntitySpawned(BaseNetworkable entity)
 {
     if (entity is BaseOven)
     {
         if (entity.ShortPrefabName == "jackolantern.happy" || entity.ShortPrefabName == "jackolantern.angry")
         {
             var jack = entity.GetComponent <BaseOven>();
             if (craftedBombs.Contains(jack.OwnerID))
             {
                 jack.gameObject.AddComponent <BombLight>();
                 var            expEnt    = GameManager.server.CreateEntity("assets/prefabs/tools/c4/explosive.timed.deployed.prefab", jack.transform.position, new Quaternion(), true);
                 TimedExplosive explosive = expEnt.GetComponent <TimedExplosive>();
                 explosive.timerAmountMax  = configData.ExplosiveSettings.DetonationTimer;
                 explosive.timerAmountMin  = configData.ExplosiveSettings.DetonationTimer;
                 explosive.explosionRadius = configData.ExplosiveSettings.ExplosionRadius;
                 explosive.damageTypes     = new List <Rust.DamageTypeEntry>
                 {
                     new Rust.DamageTypeEntry {
                         amount = configData.ExplosiveSettings.DamageAmount, type = Rust.DamageType.Explosion
                     }
                 };
                 explosive.Spawn();
                 craftedBombs.Remove(jack.OwnerID);
             }
         }
     }
 }
Example #5
0
        private BaseEntity CreateRocket(Vector3 startPoint, Vector3 direction, bool isFireRocket)
        {
            ItemDefinition projectileItem;

            if (isFireRocket)
            {
                projectileItem = GetFireRocket();
            }
            else
            {
                projectileItem = GetRocket();
            }

            ItemModProjectile component = projectileItem.GetComponent <ItemModProjectile>();
            BaseEntity        entity    = GameManager.server.CreateEntity(component.projectileObject.resourcePath, startPoint, new Quaternion(), true);

            TimedExplosive   timedExplosive   = entity.GetComponent <TimedExplosive>();
            ServerProjectile serverProjectile = entity.GetComponent <ServerProjectile>();

            serverProjectile.gravityModifier = gravityModifier;
            serverProjectile.speed           = projectileSpeed;
            timedExplosive.timerAmountMin    = detonationTime;
            timedExplosive.timerAmountMax    = detonationTime;
            ScaleAllDamage(timedExplosive.damageTypes, configData.DamageControl.DamageMultiplier);

            entity.SendMessage("InitializeVelocity", (object)(direction * 1f));
            entity.Spawn();
            return(entity);
        }
Example #6
0
            private void LaunchRocket(Vector3 targetPos)
            {
                var rocket = rocketType;

                if (useMixedRockets)
                {
                    if (UnityEngine.Random.Range(1, fireChance) == 1)
                    {
                        rocket = fireRocket;
                    }
                }
                var launchPos = Plane.transform.position;

                ItemDefinition    projectileItem = ItemManager.FindItemDefinition(rocket);
                ItemModProjectile component      = projectileItem.GetComponent <ItemModProjectile>();

                BaseEntity entity = GameManager.server.CreateEntity(component.projectileObject.resourcePath, launchPos, new Quaternion(), true);

                TimedExplosive   rocketExplosion  = entity.GetComponent <TimedExplosive>();
                ServerProjectile rocketProjectile = entity.GetComponent <ServerProjectile>();

                rocketProjectile.speed           = rocketSpeed;
                rocketProjectile.gravityModifier = 0;
                rocketExplosion.timerAmountMin   = 60;
                rocketExplosion.timerAmountMax   = 60;
                for (int i = 0; i < rocketExplosion.damageTypes.Count; i++)
                {
                    rocketExplosion.damageTypes[i].amount *= damageModifier;
                }

                Vector3 newDirection = (targetPos - launchPos);

                entity.SendMessage("InitializeVelocity", (newDirection));
                entity.Spawn();
            }
Example #7
0
            private void HandleSuicideExplosion(Item item) // الله أكبر
            {
                player.inventory.containerBelt.Take(new List <Item> {
                    item
                }, item.info.itemid, 1);
                BaseEntity grenade = null;

                switch (item.info.shortname)
                {
                case "grenade.f1":
                    grenade = GameManager.server.CreateEntity("assets/prefabs/weapons/f1 grenade/grenade.f1.deployed.prefab", player.transform.position + new Vector3(0, 1, 0));
                    break;

                case "grenade.beancan":
                    grenade = GameManager.server.CreateEntity("assets/prefabs/weapons/beancan grenade/grenade.beancan.deployed.prefab", player.transform.position + new Vector3(0, 1, 0));
                    break;
                }
                if (grenade == null)
                {
                    return;
                }
                grenade.Spawn();
                TimedExplosive expl = grenade.GetComponent <TimedExplosive>();

                expl.Explode();
                cookingGrenade = false;
                if (!player.IsDead())
                {
                    RemoveActiveItem(player);
                }
                DestroyThis();
            }
Example #8
0
 void OnExplosiveThrown(BasePlayer player, BaseEntity entity)
 {
     if (entity == null)
     {
         return;
     }
     if (entity.ShortPrefabName.Contains("explosive.timed"))
     {
         if (!weaponData.Weapons.ContainsKey("explosive.timed"))
         {
             return;
         }
         if (weaponData.Weapons["explosive.timed"].GlobalModifier != 1.0f)
         {
             TimedExplosive c4 = entity?.GetComponent <TimedExplosive>() ?? null;
             if (c4 != null)
             {
                 for (int i = 0; i < c4.damageTypes.Count; i++)
                 {
                     c4.damageTypes[i].amount += weaponData.Weapons["explosive.timed"].GlobalModifier;
                 }
             }
         }
     }
 }
Example #9
0
 public virtual void SetFuse(float fuseLength)
 {
     if (base.isServer)
     {
         TimedExplosive timedExplosive = this;
         base.Invoke(new Action(timedExplosive.Explode), fuseLength);
     }
 }
 public void Refresh(IAIAgent self, BaseEntity[] entities, int entityCount)
 {
     this.Self            = self;
     this.Entities        = entities;
     this.EntityCount     = entityCount;
     this.AnimalTarget    = null;
     this.AnimalScore     = 0f;
     this.ExplosiveTarget = null;
     this.ExplosiveScore  = 0f;
 }
 private void AddToRocketLaunch(string playerId, TimedExplosive explosive)
 {
     if (!lastLanched.ContainsKey(playerId))
     {
         lastLanched.Add(playerId, explosive);
     }
     else
     {
         lastLanched[playerId] = explosive;
     }
 }
        private TimedExplosive GetRocketLaunch(string playerId)
        {
            TimedExplosive result = null;

            if (lastLanched.ContainsKey(playerId))
            {
                result = lastLanched[playerId];
            }

            return(result);
        }
    private void DoDrop(BaseEntity.RPCMessage msg)
    {
        if (!this.HasItemAmount() || this.HasAttackCooldown())
        {
            return;
        }
        Vector3 vector3_1  = msg.read.Vector3();
        Vector3 vector3_2  = msg.read.Vector3();
        Vector3 normalized = ((Vector3) ref vector3_2).get_normalized();

        if (msg.player.isMounted || msg.player.HasParent())
        {
            vector3_1 = msg.player.eyes.position;
        }
        else if (!this.ValidateEyePos(msg.player, vector3_1))
        {
            return;
        }
        BaseEntity entity1 = GameManager.server.CreateEntity(this.prefabToThrow.resourcePath, vector3_1, Quaternion.LookRotation(Vector3.get_up()), true);

        if (Object.op_Equality((Object)entity1, (Object)null))
        {
            return;
        }
        RaycastHit hit;

        if (Physics.SphereCast(new Ray(vector3_1, normalized), 0.05f, ref hit, 1.5f, 1236478737))
        {
            Vector3    point   = ((RaycastHit) ref hit).get_point();
            Vector3    normal  = ((RaycastHit) ref hit).get_normal();
            BaseEntity entity2 = hit.GetEntity();
            if (Object.op_Implicit((Object)entity2) && entity2 is StabilityEntity && entity1 is TimedExplosive)
            {
                BaseEntity     server         = entity2.ToServer <BaseEntity>();
                TimedExplosive timedExplosive = entity1 as TimedExplosive;
                timedExplosive.onlyDamageParent = true;
                timedExplosive.DoStick(point, normal, server);
            }
            else
            {
                entity1.SetVelocity(normalized);
            }
        }
        else
        {
            entity1.SetVelocity(normalized);
        }
        entity1.creatorEntity = (BaseEntity)msg.player;
        entity1.Spawn();
        this.StartAttackCooldown(this.repeatDelay);
        Interface.CallHook("OnExplosiveDropped", (object)msg.player, (object)entity1);
        this.UseItemAmount(1);
    }
Example #14
0
    private void DoDrop(BaseEntity.RPCMessage msg)
    {
        RaycastHit raycastHit;

        if (!base.HasItemAmount() || base.HasAttackCooldown())
        {
            return;
        }
        Vector3 vector3  = msg.read.Vector3();
        Vector3 vector31 = msg.read.Vector3().normalized;

        if (msg.player.isMounted || msg.player.HasParent())
        {
            vector3 = msg.player.eyes.position;
        }
        else if (!base.ValidateEyePos(msg.player, vector3))
        {
            return;
        }
        BaseEntity baseEntity = GameManager.server.CreateEntity(this.prefabToThrow.resourcePath, vector3, Quaternion.LookRotation(Vector3.up), true);

        if (baseEntity == null)
        {
            return;
        }
        if (!UnityEngine.Physics.SphereCast(new Ray(vector3, vector31), 0.05f, out raycastHit, 1.5f, 1236478737))
        {
            baseEntity.SetVelocity(vector31);
        }
        else
        {
            Vector3    vector32 = raycastHit.point;
            Vector3    vector33 = raycastHit.normal;
            BaseEntity entity   = raycastHit.GetEntity();
            if (!entity || !(entity is StabilityEntity) || !(baseEntity is TimedExplosive))
            {
                baseEntity.SetVelocity(vector31);
            }
            else
            {
                entity = entity.ToServer <BaseEntity>();
                TimedExplosive timedExplosive = baseEntity as TimedExplosive;
                timedExplosive.onlyDamageParent = true;
                timedExplosive.DoStick(vector32, vector33, entity);
            }
        }
        baseEntity.creatorEntity = msg.player;
        baseEntity.Spawn();
        base.StartAttackCooldown(this.repeatDelay);
        Interface.CallHook("OnExplosiveDropped", msg.player, baseEntity, this);
        base.UseItemAmount(1);
    }
Example #15
0
        public virtual float Score(IAIContext context, BaseEntity option)
        {
            TimedExplosive timedExplosive = option as TimedExplosive;

            if (!Object.op_Implicit((Object)timedExplosive))
            {
                return(0.0f);
            }
            float num = 0.0f;

            foreach (DamageTypeEntry damageType in timedExplosive.damageTypes)
            {
                num += damageType.amount;
            }
            return((double)num <= 0.0 ? 0.0f : 1f);
        }
        private void OnEntitySpawned(TimedExplosive explosive)
        {
            NextTick(() =>
            {
                if (!CanShowPanel(explosive))
                {
                    return;
                }

                _isRainOfFireActive = true;
                MagicPanel?.Call("UpdatePanel", Name, (int)UpdateEnum.Image);
                _endTimer?.Destroy();
                _endTimer = timer.In(_pluginConfig.EventEnd, () =>
                {
                    _isRainOfFireActive = false;
                    MagicPanel?.Call("UpdatePanel", Name, (int)UpdateEnum.Image);
                });
            });
        }
Example #17
0
        private void OnExplosiveDropped(BasePlayer player, BaseEntity entity)
        {
            if (!throwerList.ContainsKey(player.UserIDString))
            {
                return;
            }
            if (entity.ShortPrefabName != "grenade.f1.deployed" && entity.ShortPrefabName != "grenade.beancan.deployed")
            {
                return;
            }
            TimedExplosive expl = entity.GetComponent <TimedExplosive>();

            if (!expl)
            {
                return;
            }
            expl.CancelInvoke("Explode");
            expl.SetFuse(throwerList[player.UserIDString]);
        }
Example #18
0
        void CreateExplosive(EType type, BasePlayer player)
        {
            var Details = Explosives[type];
            var expEnt  = GameManager.server.CreateEntity(Details.PrefabName, player.transform.position + new Vector3(0, 1.5f, 0), new Quaternion(), true);

            expEnt.OwnerID       = player.userID;
            expEnt.creatorEntity = player;
            TimedExplosive explosive = expEnt.GetComponent <TimedExplosive>();

            explosive.timerAmountMax  = Details.Fuse;
            explosive.timerAmountMin  = Details.Fuse;
            explosive.explosionRadius = Details.Radius;
            explosive.damageTypes     = new List <Rust.DamageTypeEntry> {
                new Rust.DamageTypeEntry {
                    amount = Details.Damage, type = Rust.DamageType.Explosion
                }
            };
            explosive.Spawn();
        }
        public static bool TryGetBest(
            EntityTargetContext context,
            IList <IOptionScorer <BaseEntity> > scorers,
            BaseEntity[] options,
            int numOptions,
            bool allScorersMustScoreAboveZero,
            out TimedExplosive best,
            out float bestScore)
        {
            bestScore = float.MinValue;
            best      = (TimedExplosive)null;
            BaseEntity baseEntity = (BaseEntity)null;

            for (int index1 = 0; index1 < numOptions; ++index1)
            {
                float num1 = 0.0f;
                bool  flag = true;
                for (int index2 = 0; index2 < ((ICollection <IOptionScorer <BaseEntity> >)scorers).Count; ++index2)
                {
                    if (!((ICanBeDisabled)scorers[index2]).get_isDisabled())
                    {
                        float num2 = scorers[index2].Score((IAIContext)context, options[index1]);
                        if (allScorersMustScoreAboveZero && (double)num2 <= 0.0)
                        {
                            flag = false;
                            break;
                        }
                        num1 += num2;
                    }
                }
                if (flag && (double)num1 > (double)bestScore)
                {
                    bestScore  = num1;
                    baseEntity = options[index1];
                }
            }
            if (Object.op_Inequality((Object)baseEntity, (Object)null))
            {
                best = baseEntity as TimedExplosive;
            }
            return(Object.op_Inequality((Object)best, (Object)null));
        }
        private void CreateExplosive(ExplosiveType type, BasePlayer player)
        {
            ExplosiveInfo info   = explosiveInfo[type];
            BaseEntity    entity = GameManager.server.CreateEntity(info.PrefabName, player.transform.position + new Vector3(0, 1.5f, 0), new Quaternion(), true);

            entity.OwnerID       = player.userID;
            entity.creatorEntity = player;

            TimedExplosive explosive = entity.GetComponent <TimedExplosive>();

            explosive.timerAmountMax  = info.Fuse;
            explosive.timerAmountMin  = info.Fuse;
            explosive.explosionRadius = info.Radius;
            explosive.damageTypes     = new List <Rust.DamageTypeEntry> {
                new Rust.DamageTypeEntry {
                    amount = info.Damage, type = Rust.DamageType.Explosion
                }
            };
            explosive.Spawn();
        }
        public override float Score(IAIContext context, BaseEntity option)
        {
            TimedExplosive timedExplosive = option as TimedExplosive;

            if (!timedExplosive)
            {
                return(0f);
            }
            float single = 0f;

            foreach (DamageTypeEntry damageType in timedExplosive.damageTypes)
            {
                single += damageType.amount;
            }
            if (single <= 0f)
            {
                return(0f);
            }
            return(1f);
        }
Example #22
0
            public void Awake()
            {
                entity = GetComponent <BaseOven>();
                lastOn = false;
                entity.SetFlag(BaseEntity.Flags.On, false);

                var            expEnt    = GameManager.server.CreateEntity("assets/prefabs/tools/c4/explosive.timed.deployed.prefab", entity.transform.position, new Quaternion(), true);
                TimedExplosive explosive = expEnt.GetComponent <TimedExplosive>();

                explosive.timerAmountMax  = ins.configData.Explosives.Timer;
                explosive.timerAmountMin  = ins.configData.Explosives.Timer;
                explosive.explosionRadius = ins.configData.Explosives.Radius;
                explosive.damageTypes     = new List <Rust.DamageTypeEntry> {
                    new Rust.DamageTypeEntry {
                        amount = ins.configData.Explosives.Amount, type = Rust.DamageType.Explosion
                    }
                };
                explosive.Spawn();

                entity.InvokeRepeating(this.ToggleLight, 0.5f, 0.5f);
            }
        void CheckExplosivePosition(TimedExplosive explosive)
        {
            if (explosive == null)
            {
                return;
            }
            var objects = GameObject.FindObjectsOfType(typeof(Zone));

            if (objects != null)
            {
                foreach (Zone zone in objects)
                {
                    if (zone.info.undestr != null)
                    {
                        if (Vector3.Distance(explosive.GetEstimatedWorldPosition(), zone.transform.position) <= (zone.info.Location.GetRadius()))
                        {
                            explosive.KillMessage();
                        }
                    }
                }
            }
        }
Example #24
0
            private void LaunchRocket()
            {
                if (rocketsFired >= rocketOptions.Amount)
                {
                    entity.CancelInvoke(LaunchRocket);
                    return;
                }
                var rocketType = rocketOptions.Type == "Normal" ? basicRocket : fireRocket;

                if (rocketOptions.Mixed && UnityEngine.Random.Range(1, rocketOptions.FireChance) == 1)
                {
                    rocketType = fireRocket;
                }

                Vector3 launchPos = entity.transform.position;
                Vector3 newTarget = Quaternion.Euler(GetRandom(), GetRandom(), GetRandom()) * targetPos;

                BaseEntity rocket = GameManager.server.CreateEntity(rocketType, launchPos, new Quaternion(), true);

                TimedExplosive   rocketExplosion  = rocket.GetComponent <TimedExplosive>();
                ServerProjectile rocketProjectile = rocket.GetComponent <ServerProjectile>();

                rocketProjectile.speed           = rocketOptions.Speed;
                rocketProjectile.gravityModifier = 0;
                rocketExplosion.timerAmountMin   = 60;
                rocketExplosion.timerAmountMax   = 60;
                for (int i = 0; i < rocketExplosion.damageTypes.Count; i++)
                {
                    rocketExplosion.damageTypes[i].amount *= rocketOptions.Damage;
                }

                Vector3 newDirection = (newTarget - launchPos);

                rocket.SendMessage("InitializeVelocity", (newDirection));
                rocket.Spawn();
                ++rocketsFired;
            }
Example #25
0
 private void CheckExplosivePosition(TimedExplosive explosive)
 {
     if (explosive == null) return;
     var objects = UnityEngine.Object.FindObjectsOfType<Zone>();
     if (objects == null) return;
     foreach (var zone in objects)
     {
         if (!HasZoneFlag(zone, ZoneFlags.UnDestr)) continue;
         if (Vector3.Distance(explosive.GetEstimatedWorldPosition(), zone.transform.position) > zone.Info.radius) continue;
         explosive.KillMessage();
         break;
     }
 }
Example #26
0
    public void ServerThrow(Vector3 targetPosition)
    {
        Sensation sensation;

        if (base.isClient)
        {
            return;
        }
        if (!base.HasItemAmount() || base.HasAttackCooldown())
        {
            return;
        }
        BasePlayer ownerPlayer = base.GetOwnerPlayer();

        if (ownerPlayer == null)
        {
            return;
        }
        Vector3 vector3  = ownerPlayer.eyes.position;
        Vector3 vector31 = ownerPlayer.eyes.BodyForward();
        float   single   = 1f;

        base.SignalBroadcast(BaseEntity.Signal.Throw, string.Empty, null);
        BaseEntity baseEntity = GameManager.server.CreateEntity(this.prefabToThrow.resourcePath, vector3, Quaternion.LookRotation((this.overrideAngle == Vector3.zero ? -vector31 : this.overrideAngle)), true);

        if (baseEntity == null)
        {
            return;
        }
        baseEntity.creatorEntity = ownerPlayer;
        Vector3 vector32      = vector31 + (Quaternion.AngleAxis(10f, Vector3.right) * Vector3.up);
        float   throwVelocity = this.GetThrowVelocity(vector3, targetPosition, vector32);

        if (float.IsNaN(throwVelocity))
        {
            vector32      = vector31 + (Quaternion.AngleAxis(20f, Vector3.right) * Vector3.up);
            throwVelocity = this.GetThrowVelocity(vector3, targetPosition, vector32);
            if (float.IsNaN(throwVelocity))
            {
                throwVelocity = 5f;
            }
        }
        baseEntity.SetVelocity((vector32 * throwVelocity) * single);
        if (this.tumbleVelocity > 0f)
        {
            baseEntity.SetAngularVelocity(new Vector3(UnityEngine.Random.Range(-1f, 1f), UnityEngine.Random.Range(-1f, 1f), UnityEngine.Random.Range(-1f, 1f)) * this.tumbleVelocity);
        }
        baseEntity.Spawn();
        base.StartAttackCooldown(this.repeatDelay);
        base.UseItemAmount(1);
        TimedExplosive timedExplosive = baseEntity as TimedExplosive;

        if (timedExplosive == null)
        {
            sensation = new Sensation()
            {
                Type            = SensationType.ThrownWeapon,
                Position        = ownerPlayer.transform.position,
                Radius          = 50f,
                DamagePotential = 0f,
                InitiatorPlayer = ownerPlayer,
                Initiator       = ownerPlayer,
                UsedEntity      = this
            };
            Sense.Stimulate(sensation);
            return;
        }
        float single1 = 0f;

        foreach (DamageTypeEntry damageType in timedExplosive.damageTypes)
        {
            single1 += damageType.amount;
        }
        sensation = new Sensation()
        {
            Type            = SensationType.ThrownWeapon,
            Position        = ownerPlayer.transform.position,
            Radius          = 50f,
            DamagePotential = single1,
            InitiatorPlayer = ownerPlayer,
            Initiator       = ownerPlayer,
            UsedEntity      = timedExplosive
        };
        Sense.Stimulate(sensation);
    }
Example #27
0
    private void DoThrow(BaseEntity.RPCMessage msg)
    {
        Sensation sensation;

        if (!base.HasItemAmount() || base.HasAttackCooldown())
        {
            return;
        }
        Vector3 vector3  = msg.read.Vector3();
        Vector3 vector31 = msg.read.Vector3().normalized;
        float   single   = Mathf.Clamp01(msg.read.Float());

        if (msg.player.isMounted || msg.player.HasParent())
        {
            vector3 = msg.player.eyes.position;
        }
        else if (!base.ValidateEyePos(msg.player, vector3))
        {
            return;
        }
        BaseEntity baseEntity = GameManager.server.CreateEntity(this.prefabToThrow.resourcePath, vector3, Quaternion.LookRotation((this.overrideAngle == Vector3.zero ? -vector31 : this.overrideAngle)), true);

        if (baseEntity == null)
        {
            return;
        }
        baseEntity.creatorEntity = msg.player;
        baseEntity.SetVelocity((msg.player.GetInheritedThrowVelocity() + ((vector31 * this.maxThrowVelocity) * single)) + (msg.player.estimatedVelocity * 0.5f));
        if (this.tumbleVelocity > 0f)
        {
            baseEntity.SetAngularVelocity(new Vector3(UnityEngine.Random.Range(-1f, 1f), UnityEngine.Random.Range(-1f, 1f), UnityEngine.Random.Range(-1f, 1f)) * this.tumbleVelocity);
        }
        baseEntity.Spawn();
        base.StartAttackCooldown(this.repeatDelay);
        Interface.CallHook("OnExplosiveThrown", msg.player, baseEntity, this);
        base.UseItemAmount(1);
        BasePlayer basePlayer = msg.player;

        if (basePlayer != null)
        {
            TimedExplosive timedExplosive = baseEntity as TimedExplosive;
            if (timedExplosive != null)
            {
                float single1 = 0f;
                foreach (DamageTypeEntry damageType in timedExplosive.damageTypes)
                {
                    single1 += damageType.amount;
                }
                sensation = new Sensation()
                {
                    Type            = SensationType.ThrownWeapon,
                    Position        = basePlayer.transform.position,
                    Radius          = 50f,
                    DamagePotential = single1,
                    InitiatorPlayer = basePlayer,
                    Initiator       = basePlayer,
                    UsedEntity      = timedExplosive
                };
                Sense.Stimulate(sensation);
                return;
            }
            sensation = new Sensation()
            {
                Type            = SensationType.ThrownWeapon,
                Position        = basePlayer.transform.position,
                Radius          = 50f,
                DamagePotential = 0f,
                InitiatorPlayer = basePlayer,
                Initiator       = basePlayer,
                UsedEntity      = this
            };
            Sense.Stimulate(sensation);
        }
    }
    private void DoThrow(BaseEntity.RPCMessage msg)
    {
        if (!this.HasItemAmount() || this.HasAttackCooldown())
        {
            return;
        }
        Vector3 vector3_1  = msg.read.Vector3();
        Vector3 vector3_2  = msg.read.Vector3();
        Vector3 normalized = ((Vector3) ref vector3_2).get_normalized();
        float   num1       = Mathf.Clamp01(msg.read.Float());

        if (msg.player.isMounted || msg.player.HasParent())
        {
            vector3_1 = msg.player.eyes.position;
        }
        else if (!this.ValidateEyePos(msg.player, vector3_1))
        {
            return;
        }
        BaseEntity entity = GameManager.server.CreateEntity(this.prefabToThrow.resourcePath, vector3_1, Quaternion.LookRotation(Vector3.op_Equality(this.overrideAngle, Vector3.get_zero()) ? Vector3.op_UnaryNegation(normalized) : this.overrideAngle), true);

        if (Object.op_Equality((Object)entity, (Object)null))
        {
            return;
        }
        entity.creatorEntity = (BaseEntity)msg.player;
        entity.SetVelocity(Vector3.op_Addition(Vector3.op_Addition(msg.player.GetInheritedThrowVelocity(), Vector3.op_Multiply(Vector3.op_Multiply(normalized, this.maxThrowVelocity), num1)), Vector3.op_Multiply(msg.player.estimatedVelocity, 0.5f)));
        if ((double)this.tumbleVelocity > 0.0)
        {
            entity.SetAngularVelocity(Vector3.op_Multiply(new Vector3(Random.Range(-1f, 1f), Random.Range(-1f, 1f), Random.Range(-1f, 1f)), this.tumbleVelocity));
        }
        entity.Spawn();
        this.StartAttackCooldown(this.repeatDelay);
        Interface.CallHook("OnExplosiveThrown", (object)msg.player, (object)entity);
        this.UseItemAmount(1);
        BasePlayer player = msg.player;

        if (!Object.op_Inequality((Object)player, (Object)null))
        {
            return;
        }
        TimedExplosive timedExplosive = entity as TimedExplosive;

        if (Object.op_Inequality((Object)timedExplosive, (Object)null))
        {
            float num2 = 0.0f;
            foreach (DamageTypeEntry damageType in timedExplosive.damageTypes)
            {
                num2 += damageType.amount;
            }
            Sense.Stimulate(new Sensation()
            {
                Type            = SensationType.ThrownWeapon,
                Position        = ((Component)player).get_transform().get_position(),
                Radius          = 50f,
                DamagePotential = num2,
                InitiatorPlayer = player,
                Initiator       = (BaseEntity)player,
                UsedEntity      = (BaseEntity)timedExplosive
            });
        }
        else
        {
            Sense.Stimulate(new Sensation()
            {
                Type            = SensationType.ThrownWeapon,
                Position        = ((Component)player).get_transform().get_position(),
                Radius          = 50f,
                DamagePotential = 0.0f,
                InitiatorPlayer = player,
                Initiator       = (BaseEntity)player,
                UsedEntity      = (BaseEntity)this
            });
        }
    }
    public void ServerThrow(Vector3 targetPosition)
    {
        if (this.isClient || !this.HasItemAmount() || this.HasAttackCooldown())
        {
            return;
        }
        BasePlayer ownerPlayer = this.GetOwnerPlayer();

        if (Object.op_Equality((Object)ownerPlayer, (Object)null))
        {
            return;
        }
        Vector3 position = ownerPlayer.eyes.position;
        Vector3 vector3  = ownerPlayer.eyes.BodyForward();
        float   num1     = 1f;

        this.SignalBroadcast(BaseEntity.Signal.Throw, string.Empty, (Connection)null);
        BaseEntity entity = GameManager.server.CreateEntity(this.prefabToThrow.resourcePath, position, Quaternion.LookRotation(Vector3.op_Equality(this.overrideAngle, Vector3.get_zero()) ? Vector3.op_UnaryNegation(vector3) : this.overrideAngle), true);

        if (Object.op_Equality((Object)entity, (Object)null))
        {
            return;
        }
        entity.creatorEntity = (BaseEntity)ownerPlayer;
        Vector3 aimDir = Vector3.op_Addition(vector3, Quaternion.op_Multiply(Quaternion.AngleAxis(10f, Vector3.get_right()), Vector3.get_up()));
        float   f      = this.GetThrowVelocity(position, targetPosition, aimDir);

        if (float.IsNaN(f))
        {
            aimDir = Vector3.op_Addition(vector3, Quaternion.op_Multiply(Quaternion.AngleAxis(20f, Vector3.get_right()), Vector3.get_up()));
            f      = this.GetThrowVelocity(position, targetPosition, aimDir);
            if (float.IsNaN(f))
            {
                f = 5f;
            }
        }
        entity.SetVelocity(Vector3.op_Multiply(Vector3.op_Multiply(aimDir, f), num1));
        if ((double)this.tumbleVelocity > 0.0)
        {
            entity.SetAngularVelocity(Vector3.op_Multiply(new Vector3(Random.Range(-1f, 1f), Random.Range(-1f, 1f), Random.Range(-1f, 1f)), this.tumbleVelocity));
        }
        entity.Spawn();
        this.StartAttackCooldown(this.repeatDelay);
        this.UseItemAmount(1);
        TimedExplosive timedExplosive = entity as TimedExplosive;

        if (Object.op_Inequality((Object)timedExplosive, (Object)null))
        {
            float num2 = 0.0f;
            foreach (DamageTypeEntry damageType in timedExplosive.damageTypes)
            {
                num2 += damageType.amount;
            }
            Sense.Stimulate(new Sensation()
            {
                Type            = SensationType.ThrownWeapon,
                Position        = ((Component)ownerPlayer).get_transform().get_position(),
                Radius          = 50f,
                DamagePotential = num2,
                InitiatorPlayer = ownerPlayer,
                Initiator       = (BaseEntity)ownerPlayer,
                UsedEntity      = (BaseEntity)timedExplosive
            });
        }
        else
        {
            Sense.Stimulate(new Sensation()
            {
                Type            = SensationType.ThrownWeapon,
                Position        = ((Component)ownerPlayer).get_transform().get_position(),
                Radius          = 50f,
                DamagePotential = 0.0f,
                InitiatorPlayer = ownerPlayer,
                Initiator       = (BaseEntity)ownerPlayer,
                UsedEntity      = (BaseEntity)this
            });
        }
    }
Example #30
0
 void CheckExplosivePosition(TimedExplosive explosive)
 {
     if (explosive == null) return;
     var objects = GameObject.FindObjectsOfType(typeof(Zone));
     if (objects != null)
         foreach (Zone zone in objects)
         {
             if (zone.info.undestr != null)
             {
                 if (Vector3.Distance(explosive.GetEstimatedWorldPosition(), zone.transform.position) <= (zone.info.Location.GetRadius()))
                     explosive.KillMessage();
             }
         }
 }
//////////////////
// DIFFERENTS CASES
//////////////////
        void BirthdayBoomBoom(Item item, string birthdaytype, BaseEntity entity)
        {
            if (debug)
            {
                Puts("BoomBoom sequence");
            }
            Vector3 daboom = new Vector3(entity.transform.position.x, entity.transform.position.y, entity.transform.position.z);

            if (debug)
            {
                Puts($"Vector3 {daboom}");
            }
            TimedExplosive boom = new TimedExplosive();

            //SmokeGrenade boomboom = new SmokeGrenade();
            if (birthdaytype == "explose")
            {
                BaseEntity GrenadeF1 = GameManager.server.CreateEntity("assets/prefabs/weapons/f1 grenade/grenade.f1.deployed.prefab", daboom, new Quaternion(), true);
                if (GrenadeF1 == null)
                {
                    if (debug)
                    {
                        Puts("GrenadeF1 NULL BaseEntity ENTITY !!!!");
                    }
                    else if (debug)
                    {
                        Puts($"oright {GrenadeF1}");
                    }
                }
                boom = GrenadeF1.GetComponent <TimedExplosive>();
                if (boom == null)
                {
                    Puts("boom NULL TimedExplosive ENTITY !!!!");
                }
                if (debug)
                {
                    Puts("F1 BIRTHDAY !!!!");
                }
                boom.Explode();
                return;
            }

            /*if (birthdaytype == "smoke")
             * {
             *  prefab = "assets/prefabs/tools/smoke grenade/grenade.smoke.deployed.prefab";
             *  Puts("SMOKE BIRTHDAY !!!!");
             *  BaseEntity GrenadeSmoke = GameManager.server.CreateEntity(prefab, daboom, new Quaternion(), true);
             *  if (GrenadeSmoke == null) Puts("GrenadeSmoke NULL BaseEntity ENTITY !!!!");
             *  else Puts($"oright {GrenadeSmoke}");
             *  boomboom = GrenadeSmoke.GetComponent<SmokeGrenade>();
             *  if (boomboom != null) Puts($"SmokeGrenade {boomboom}");
             *  boomboom.smokeDuration = 20f;
             *  GrenadeSmoke.Spawn();
             *  //boomboom.Explode();
             *  return;
             * }*/
            string prefab = string.Empty;

            if (birthdaytype == "fire")
            {
                prefab = "assets/bundled/prefabs/fireball.prefab";
            }
            if (birthdaytype == "oil")
            {
                prefab = "assets/bundled/prefabs/oilfireballsmall.prefab";
            }
            if (birthdaytype == "napalm")
            {
                prefab = "assets/bundled/prefabs/napalm.prefab";
            }
            BaseEntity GrenadeFlames = GameManager.server.CreateEntity(prefab, daboom, new Quaternion(), true);

            if (GrenadeFlames == null)
            {
                if (debug)
                {
                    Puts("GrenadeFlames NULL BaseEntity ENTITY !!!!");
                }
                else if (debug)
                {
                    Puts($"oright fireflames {GrenadeFlames}");
                }
            }
            GrenadeFlames?.Spawn();
            timer.Once(flamingtime, () =>
            {
                if (GrenadeFlames != null)
                {
                    GrenadeFlames.Kill();
                }
            });
        }
Example #32
0
        void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo hitInfo)
        {
            if (hitInfo != null &&
                hitInfo.Initiator != null &&
                hitInfo.Initiator.ToPlayer() != null)
            {
                BasePlayer player = hitInfo.Initiator.ToPlayer();

                if (ZoneManager != null)
                {
                    object canBeWounded = ZoneManager.Call("CanBeWounded", player, hitInfo);

                    if (canBeWounded == null)
                    {
                        return;
                    }
                }

                TimedExplosive explosion = null;

                if (hitInfo.WeaponPrefab != null &&
                    hitInfo.WeaponPrefab.ToString().Contains("explosive"))
                {
                    explosion = (hitInfo.WeaponPrefab.GetEntity() as TimedExplosive);
                }

                if (entity.ShortPrefabName.ToString().Contains("player") &&
                    (
                        explosion == null ||
                        explosion.explosionRadius >= player.Distance(entity.GetEntity())
                    )
                    )
                {
                    float totalDamage = (float)0.0;

                    foreach (Rust.DamageType damageType in Enum.GetValues(typeof(Rust.DamageType))) //calculate the damage the player would take
                    {
                        try
                        {
                            if (hitInfo.damageTypes.Get(damageType) > (float)0.0)
                            {
                                if (hitInfo.damageTypes.Get(damageType) > player.baseProtection.Get(damageType)) //damage of attack surpass player protection
                                {
                                    totalDamage += hitInfo.damageTypes.Get(damageType) - player.baseProtection.Get(damageType);
                                }
                            }
                        }
                        catch
                        { }
                    }

                    if (player.health <= totalDamage)
                    {
                        //if (!popupsEnabled)
                        SendReply(player, localization["AboutToDie"]);
                    }
                    //else
                    //    PopupNotifications.Call("CreatePopupNotification", localization["AboutToDie"], player);
                }
            }
        }