Иконка ресурса

FREE ExplosiveWeapons : 1.0.5 1.0.5

Нет прав для скачивания
C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using ConVar;
using System.IO;
using System.Text;
using Network;
using UnityEngine;
using Oxide.Game.Rust.Cui;
namespace Oxide.Plugins {
    [Info("ExplosiveWeapons", "Cameron", "1.0.5")]
    [Description("Custom rocket launchers and weapon to make sutff go boom boom, flash flash and owow")]
    public class ExplosiveWeapons : CovalencePlugin {
        int bigRocketCount = 20;
        int littleRocketCount = 12;
        bool jerichoBlowUp = true;
        bool heatSeekerBlowUp = false;
        bool followBlowUp = false;
        bool javalinBlowUp = false;
        int xSize = 100;
        int ySize = 1;
        int maxRange = 250;
        int scatterSize = 3;
        float flashDuration = 4.0f;
        ulong jericoSkin = 2656578790;
        ulong seekerSkin = 2657299588;
        ulong trackSkin = 2657312965;
        ulong javalin = 2657315108;
        ulong multiGrenadeSkin = 2657418159;
        ulong molatoveGrenade = 2657408625;
        ulong flashBangSkin = 2657412999;
        ulong healingSkin = 2657414983;
        ulong impactNadeSkin = 2657418820;
        ulong stunGrenadeSkin = 2657417547;
        int instaHealAmount = 15;
        int passiveHealAmount = 50;
        bool spawnFlares = true;
        int stunDuration = 4;
        HashSet<ulong> skins = new HashSet<ulong>();
#region Config
        private void Init() {
            permission.RegisterPermission("explosiveweapons.notarget", this);
            bigRocketCount = int.Parse(Config["jerichoBigRocketCount"].ToString());
            littleRocketCount = int.Parse(Config["jerichoSmallRocketCount"].ToString());
            xSize = int.Parse(Config["jerichoXSize"].ToString());
            ySize = int.Parse(Config["jerichoYSize"].ToString());
            maxRange = int.Parse(Config["maxRangeForJerichoAndJavalin"].ToString());
            scatterSize = int.Parse(Config["scatterSize"].ToString());
            flashDuration = int.Parse(Config["flashDuration"].ToString());
            jerichoBlowUp = (bool)Config["jericoDestroyOnShoot"];
            heatSeekerBlowUp = (bool)Config["heatSeekerDestroyOnShoot"];
            followBlowUp = (bool)Config["followDestroyOnShoot"];
            javalinBlowUp = (bool)Config["javalinDestroyOnShoot"];
            instaHealAmount = int.Parse(Config["instaHealAmount"].ToString());
            passiveHealAmount = int.Parse(Config["passiveHealAmount"].ToString());
            stunDuration = int.Parse(Config["stunDuration"].ToString());
            //skins
            jericoSkin = ulong.Parse(Config["jericoSkin"].ToString());
            seekerSkin = ulong.Parse(Config["seekerSkin"].ToString());
            trackSkin = ulong.Parse(Config["heatSeekSkin"].ToString());
            javalin = ulong.Parse(Config["javalinSkin"].ToString());
            multiGrenadeSkin = ulong.Parse(Config["scatterNadeSkin"].ToString());
            molatoveGrenade = ulong.Parse(Config["molatoveSkin"].ToString());
            flashBangSkin = ulong.Parse(Config["flashBangSkin"].ToString());
            healingSkin = ulong.Parse(Config["healingSkin"].ToString());
            impactNadeSkin = ulong.Parse(Config["impactNadeSkin"].ToString());
            stunGrenadeSkin = ulong.Parse(Config["stunGrenadeSkin"].ToString());
            if (Config["SpawnFlares"] == null) {
                Config["SpawnFlares"] = true;
                SaveConfig();
            }
            spawnFlares = (bool)Config["SpawnFlares"];
            skins.Add(jericoSkin);
            skins.Add(seekerSkin);
            skins.Add(trackSkin);
            skins.Add(javalin);
            skins.Add(multiGrenadeSkin);
            skins.Add(molatoveGrenade);
            skins.Add(flashBangSkin);
            skins.Add(healingSkin);
            skins.Add(impactNadeSkin);
            skins.Add(stunGrenadeSkin);
        }
        protected override void LoadDefaultConfig() {
            Config["jerichoBigRocketCount"] = 20;
            Config["jerichoSmallRocketCount"] = 12;
            Config["jerichoXSize"] = 100;
            Config["jerichoYSize"] = 1;
            Config["maxRangeForJerichoAndJavalin"] = 250;
            Config["scatterSize"] = 3;
            Config["flashDuration"] = 4.0;
            Config["jericoDestroyOnShoot"] = true;
            Config["heatSeekerDestroyOnShoot"] = false;
            Config["followDestroyOnShoot"] = false;
            Config["javalinDestroyOnShoot"] = false;
            //skins
            Config["instaHealAmount"] = 15;
            Config["passiveHealAmount"] = 50;
            Config["stunDuration"] = 4;
            Config["jericoSkin"] = 2656578790;
            Config["seekerSkin"] = 2657299588;
            Config["heatSeekSkin"] = 2657312965;
            Config["javalinSkin"] = 2657315108;
            Config["scatterNadeSkin"] = 2657418159;
            Config["molatoveSkin"] = 2657408625;
            Config["flashBangSkin"] = 2657412999;
            Config["healingSkin"] = 2657414983;
            Config["impactNadeSkin"] = 2657418820;
            Config["stunGrenadeSkin"] = 2657417547;
        }
#endregion
#region Commands
        [Command("GiveJerico"), Permission("explosiveweapons.admin")]
        private void JericoGive(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("rocket.launcher", 1, jericoSkin), player.inventory.containerBelt);
        }
        [Command("GiveSeeker"), Permission("explosiveweapons.admin")]
        private void GiveSeeker(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("rocket.launcher", 1, seekerSkin), player.inventory.containerBelt);
        }
        [Command("GiveFollow"), Permission("explosiveweapons.admin")]
        private void GiveFollow(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("rocket.launcher", 1, trackSkin), player.inventory.containerBelt);
        }
        [Command("GiveJav"), Permission("explosiveweapons.admin")]
        private void GiveJav(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("rocket.launcher", 1, javalin), player.inventory.containerBelt);
        }
        [Command("givemulti"), Permission("explosiveweapons.admin")]
        private void givemulti(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, multiGrenadeSkin), player.inventory.containerBelt);
        }
        [Command("givemoly"), Permission("explosiveweapons.admin")]
        private void GiveMolly(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.beancan", 1, molatoveGrenade), player.inventory.containerBelt);
        }
        [Command("giveflash"), Permission("explosiveweapons.admin")]
        private void giveflash(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, flashBangSkin), player.inventory.containerBelt);
        }
        [Command("giveimpact"), Permission("explosiveweapons.admin")]
        private void giveimpact(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, impactNadeSkin), player.inventory.containerBelt);
        }
        [Command("givestun"), Permission("explosiveweapons.admin")]
        private void givestun(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, stunGrenadeSkin), player.inventory.containerBelt);
        }
        [Command("giveshealing"), Permission("explosiveweapons.admin")]
        private void givehealing(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, healingSkin), player.inventory.containerBelt);
        }
        [Command("giveall"), Permission("explosiveweapons.admin")]
        private void giveallnades(IPlayer iplayer, string command, string[] args) {
            BasePlayer player = iplayer.Object as BasePlayer;
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, stunGrenadeSkin), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, impactNadeSkin), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, flashBangSkin), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.beancan", 1, molatoveGrenade), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, multiGrenadeSkin), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("rocket.launcher", 1, javalin), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("rocket.launcher", 1, trackSkin), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("rocket.launcher", 1, seekerSkin), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("rocket.launcher", 1, jericoSkin), player.inventory.containerBelt);
            player.inventory.GiveItem(ItemManager.CreateByName("grenade.f1", 1, healingSkin), player.inventory.containerBelt);
        }
#endregion
#region Hooks
        void OnRocketLaunched(BasePlayer player, BaseEntity entity) {
            HeldEntity item = player.GetHeldEntity();
            Item invItem = item.GetItem();
            if(invItem.skin == jericoSkin)  // jerico
            {
                entity.Kill();
                PlayEffect("assets/bundled/prefabs/fx/invite_notice.prefab", player);
                Jerico(player.IPlayer);
                if(jerichoBlowUp) invItem.Remove();
                return;
            }
            else if(invItem.skin == seekerSkin) {
                entity.Kill();
                Vector3 firingDir = player.GetNetworkRotation() * Vector3.forward;
                Collider[] colliders = UnityEngine.Physics.OverlapCapsule(player.transform.position, player.transform.position + (firingDir * 100), 30);
                foreach (Collider col in colliders) {
                    BaseEntity ent = col.ToBaseEntity();
                    if (ent.IsValid()) {
                        if (ent is BasePlayer && ent != player ) {
                            BasePlayer target = ent as BasePlayer;
                            if (target.IPlayer.HasPermission("explosiveweapons.notarget")) {
                                player.ChatMessage($"No Target Found!");
                                return;
                            }
                            player.ChatMessage($"Target aquired! {target.displayName}");
                            TracerRocket(player.transform.position, player.GetNetworkRotation(), ent as BaseCombatEntity);
                            if(heatSeekerBlowUp) invItem.Remove();
                            return;
                        }
                    }
                }
                player.ChatMessage($"No Target Found!");
            }
            else if(invItem.skin == trackSkin) {
                entity.Kill();
                CursorRocket(player.transform.position, player.GetNetworkRotation(), player);
                if(followBlowUp) invItem.DoRemove();
            }
            else if(invItem.skin == javalin) {
                entity.Kill();
                JavalinRocket(player.IPlayer);
                if(javalinBlowUp) invItem.DoRemove();
            }
            return;
        }
        private object OnExplosiveFuseSet(TimedExplosive ent, float fuseLength) {
            if(ent.skinID == molatoveGrenade) {
                OnCollision col = ent.gameObject.AddComponent<OnCollision>();
                col.ent = ent;
            }
            else if(ent.skinID == flashBangSkin) {
                timer.Once(fuseLength - 0.05f, () => {
                    List<BasePlayer> playersNear = FindAllPlayersNear(ent.transform.position, 10);
                    foreach (BasePlayer item in playersNear) {
                        if (item == null || item.gestureList == null) continue;
                        PlayEffect("assets/bundled/prefabs/fx/gestures/cameratakescreenshot.prefab", item);
                    }
                    PlayEffect("assets/bundled/prefabs/fx/survey_explosion.prefab", ent);
                    if (ent != null && !ent.IsDestroyed) ent.Kill();
                    timer.Once(0.2f, () => {
                        foreach (BasePlayer item in playersNear) {
                            if (item == null || item.gestureList == null) continue;
                            MakeUi(item);
                        }
                    }
                    );
                    timer.Once(flashDuration, () => {
                        foreach (BasePlayer item in playersNear) {
                            if (item == null || item.gestureList == null) continue;
                            CuiHelper.DestroyUi(item, "Flashbang");
                        }
                    }
                    );
                }
                );
            }
            else if(ent.skinID == healingSkin) {
                timer.Once(fuseLength - 0.05f, () => {
                    List<BasePlayer> playersNear = FindAllPlayersNear(ent.transform.position, 10);
                    foreach (BasePlayer item in playersNear) {
                        if (item == null) continue;
                        HealPlayer(item);
                    }
                    if(ent != null && !ent.IsDestroyed) ent.Kill();
                }
                );
            }
            else if(ent.skinID == impactNadeSkin) {
                OnCollisionExplode col = ent.gameObject.AddComponent<OnCollisionExplode>();
                col.ent = ent;
            }
            else if(ent.skinID == multiGrenadeSkin) {
                ulong ownerId = ent.OwnerID;
                timer.Once(fuseLength - 0.05f, () => {
                    Vector3 location = ent.transform.position;
                    Vector3 entityRight = ent.transform.right;
                    Vector3 entityForward = ent.transform.forward;
                    Quaternion rotation = ent.transform.rotation;
                    //grenade in a grenade
                    timer.Repeat(0.1f, 5, () => {
                        int randomRight = UnityEngine.Random.Range(scatterSize * -1, scatterSize);
                        int radonomForward = UnityEngine.Random.Range(scatterSize * -1, scatterSize);
                        BaseEntity entity = GameManager.server.CreateEntity("assets/prefabs/weapons/f1 grenade/grenade.f1.deployed.prefab", location + (Vector3.right * randomRight) + (Vector3.forward * radonomForward) + (Vector3.up * 2), rotation);
                        TimedExplosive newNade = entity as TimedExplosive;
                        entity.OwnerID = ownerId;
                        entity.Spawn();
                        newNade.SetFuse(0.5f);
                    }
                    );
                }
                );
            }
            else if(ent.skinID == stunGrenadeSkin) {
                timer.Once(fuseLength - 0.05f, () => {
                    List<BasePlayer> playersNear = FindAllPlayersNear(ent.transform.position, 10);
                    foreach (BasePlayer seeker in playersNear) {
                        if (seeker.IsWounded()) continue;
                        seeker.SetPlayerFlag(BasePlayer.PlayerFlags.Wounded, true);
                        seeker.SendNetworkUpdateImmediate();
                        PlayEffect("assets/prefabs/locks/keypad/effects/lock.code.shock.prefab", seeker);
                    }
                    //PlayEffect("assets/prefabs/locks/keypad/effects/lock.code.shock.prefab", seeker);
                    timer.Once(4, () => {
                        foreach (BasePlayer seeker in playersNear) {
                            seeker.SetPlayerFlag(BasePlayer.PlayerFlags.Wounded, false);
                            seeker.SendNetworkUpdateImmediate();
                        }
                    }
                    );
                    if (ent != null && !ent.IsDestroyed) ent.Kill();
                }
                );
            }
            return false;
        }
        object CanCombineDroppedItem(DroppedItem item, DroppedItem targetItem) {
            if (skins.Contains(targetItem.item.skin) || skins.Contains(item.item.skin) && item.item.skin == targetItem.item.skin) {
                return false;
            }
            return null;
        }
        object CanStackItem(Item item, Item targetItem) {
            if ((skins.Contains(targetItem.skin) || skins.Contains(item.skin)) && item.skin != targetItem.skin) {
                return false;
            }
            return null;
        }
#endregion
        private void JavalinRocket(IPlayer iplayer) {
            BasePlayer player = iplayer.Object as BasePlayer;
            Vector3 firingDir = player.GetNetworkRotation() * Vector3.forward;
            RaycastHit hitInfo;
            Vector3 firingPos = player.eyes.transform.position + Vector3.up + Vector3.up;
            Vector3 target;
            if (UnityEngine.Physics.Raycast(firingPos, firingDir, out hitInfo, maxRange, 1236478737)) {
                target = hitInfo.point;
            }
            else {
                target = firingPos + (firingDir.normalized * maxRange);
            }
            if (spawnFlares) {
                BaseEntity flare = GameManager.server.CreateEntity("assets/prefabs/tools/flareold/flare.deployed.prefab", target);
                flare.Spawn();
            }
            BaseEntity entity = GameManager.server.CreateEntity("assets/content/vehicles/mlrs/rocket_mlrs.prefab", firingPos + firingDir);
            ServerProjectile projectile = entity.GetComponent<ServerProjectile>();
            Vector3 vector3 = projectile.initialVelocity + firingDir * 10;
            //projectile.speed
            projectile.gravityModifier = 0;
            projectile.InitializeVelocity(vector3);
            entity.creatorEntity = (BaseEntity)player;
            entity.OwnerID = player.userID;
            entity.Spawn();
            timer.Once(0.25f, () =>  // Start up motion
            {
                if (entity == null || projectile == null || entity.IsDestroyed) return;
                PlayEffect("assets/content/vehicles/mlrs/effects/pfx_mlrs_backfire.prefab", entity);
                projectile.gravityModifier = -2.5f;
                Vector3 newVel = projectile.initialVelocity + firingDir * 5;
                projectile.InitializeVelocity(newVel);
            }
            );
            timer.Once(4, () =>  //Start flattening out
            {
                if (entity == null || projectile == null || entity.IsDestroyed) return;
                projectile.gravityModifier = 4;
                //4
                Vector3 newVel = projectile.CurrentVelocity + firingDir;
                projectile.InitializeVelocity(newVel);
            }
            );
            timer.Once(7f, () =>  // Rain rain rain
            {
                if (entity == null || projectile == null || entity.IsDestroyed) return;
                Vector3 direction = target - projectile.transform.position;
                projectile.gravityModifier = 0;
                projectile.InitializeVelocity(direction.normalized * 75);
            }
            );
        }
        private void CursorRocket(Vector3 firePoint, Quaternion rot, BasePlayer player) {
            Vector3 firingDir = rot * Vector3.forward;
            BaseEntity entity = GameManager.server.CreateEntity("assets/content/vehicles/mlrs/rocket_mlrs.prefab", firePoint + (firingDir.normalized * 2), rot);
            ServerProjectile projectile = entity.GetComponent<ServerProjectile>();
            Vector3 vector3 = (rot * Vector3.forward).normalized;
            //projectile.speed
            projectile.gravityModifier = 0;
            projectile.InitializeVelocity(vector3);
            entity.OwnerID = player.userID;
            entity.Spawn();
            timer.Repeat(0.1f, 0, () => {
                if (entity == null || projectile == null || entity.IsDestroyed) return;
                Vector3 currentDir = entity.transform.rotation * Vector3.forward;
                // Vector3 newDirection = (player.transform.position - entity.transform.position).normalized * 10;
                Vector3 velocity = Vector3.Lerp(currentDir.normalized, (player.GetNetworkRotation() * Vector3.forward).normalized, UnityEngine.Time.deltaTime * 100);
                projectile.InitializeVelocity(velocity * 20);
            }
            );
        }
        private void TracerRocket(Vector3 firePoint, Quaternion rot, BaseCombatEntity target) {
            BaseCombatEntity player = target;
            Vector3 firingDir = rot * Vector3.forward;
            BaseEntity entity = GameManager.server.CreateEntity("assets/content/vehicles/mlrs/rocket_mlrs.prefab", firePoint + (firingDir.normalized * 2), rot);
            ServerProjectile projectile = entity.GetComponent<ServerProjectile>();
            Vector3 vector3 = (rot * Vector3.forward).normalized;
            //projectile.speed
            projectile.gravityModifier = 0;
            projectile.InitializeVelocity(vector3);
            entity.Spawn();
            timer.Repeat(0.1f, 0, () => {
                if (entity == null || projectile == null || entity.IsDestroyed) return;
                Vector3 currentDir = entity.transform.rotation * Vector3.forward;
                // Vector3 newDirection = (player.transform.position - entity.transform.position).normalized * 10;
                Vector3 velocity = Vector3.Lerp(currentDir.normalized, (player.transform.position + (Vector3.up)- entity.transform.position).normalized, UnityEngine.Time.deltaTime * 40);
                projectile.InitializeVelocity(velocity * 20);
            }
            );
        }
        private List<BasePlayer> FindAllPlayersNear(Vector3 pos, float radius) {
            Collider[] cast = UnityEngine.Physics.OverlapSphere(pos, radius);
            List<BasePlayer> ents = new List<BasePlayer>();
            foreach (Collider item in cast) {
                BaseEntity entity = item.gameObject.ToBaseEntity();
                if (entity.IsValid() && entity is BasePlayer && entity is ScientistNPC == false && entity.IsVisible(pos)) {
                    ents.Add(entity as BasePlayer);
                }
            }
            return ents;
        }
        private void HealPlayer(BasePlayer player) {
            PlayEffect("assets/prefabs/deployable/mixingtable/effects/mixing-table-deploy.prefab", player);
            player.ChatMessage("Healed!");
            player.CancelInvoke(new Action(player.WoundingTick));
            player.RecoverFromWounded();
            player.Heal(instaHealAmount);
            player.metabolism.ApplyChange(MetabolismAttribute.Type.HealthOverTime, passiveHealAmount, 20);
        }
        private void Jerico(IPlayer iplayer) {
            BasePlayer player = iplayer.Object as BasePlayer;
            Vector3 firingDir = player.GetNetworkRotation() * Vector3.forward;
            RaycastHit hitInfo;
            Vector3 firingPos = player.eyes.transform.position + Vector3.up + Vector3.up;
            Vector3 target;
            if (UnityEngine.Physics.Raycast(firingPos, firingDir, out hitInfo, maxRange, 1236478737)) {
                target = hitInfo.point;
            }
            else {
                target = firingPos + (firingDir.normalized * maxRange);
            }
            if (spawnFlares) {
                for (int i = 0; i < 6; i++) {
                    BaseEntity flare = GameManager.server.CreateEntity("assets/prefabs/tools/flareold/flare.deployed.prefab", target + (Vector3.up * 20) + (Vector3.right * UnityEngine.Random.Range(-10, 10)) + (Vector3.forward * UnityEngine.Random.Range(-10, 10)));
                    flare.Spawn();
                }
            }
            BaseEntity entity = GameManager.server.CreateEntity("assets/content/vehicles/mlrs/rocket_mlrs.prefab", firingPos + firingDir);
            ServerProjectile projectile = entity.GetComponent<ServerProjectile>();
            Vector3 vector3 = projectile.initialVelocity + firingDir * 10;
            //projectile.speed
            projectile.gravityModifier = 0;
            projectile.InitializeVelocity(vector3);
            entity.creatorEntity = (BaseEntity)player;
            entity.OwnerID = player.userID;
            entity.Spawn();
            timer.Once(0.25f, () =>  // Start up motion
            {
                if (entity == null || projectile == null || entity.IsDestroyed) return;
                PlayEffect("assets/content/vehicles/mlrs/effects/pfx_mlrs_backfire.prefab", entity);
                projectile.gravityModifier = -2.5f;
                Vector3 newVel = projectile.initialVelocity + firingDir * 5;
                projectile.InitializeVelocity(newVel);
            }
            );
            timer.Once(4, () =>  //Start flattening out
            {
                if (entity == null || projectile == null || entity.IsDestroyed) return;
                projectile.gravityModifier = 4;
                //4
                Vector3 newVel = projectile.CurrentVelocity + firingDir;
                projectile.InitializeVelocity(newVel);
            }
            );
            timer.Once(6f, () =>  // Rain rain rain
            {
                if (entity == null || projectile == null || entity.IsDestroyed) return;
                Vector3 direction = target - projectile.transform.position;
                Vector3 location = entity.transform.position;
                Vector3 entityRight = entity.transform.right;
                Vector3 entityForward = entity.transform.forward;
                Quaternion rotation = entity.transform.rotation;
                timer.Repeat(0.05f, bigRocketCount, () => {
                    if (entity == null || projectile == null || entity.IsDestroyed) return;
                    int randomRight = UnityEngine.Random.Range(xSize * -1, xSize);
                    int radonomForward = UnityEngine.Random.Range(ySize * -1, ySize);
                    PlayEffect("assets/content/vehicles/mlrs/effects/pfx_mlrs_backfire.prefab", entity);
                    SpawnRocket(location + (entityRight * randomRight) + (entityForward * radonomForward), firingDir, player, rotation, direction);
                }
                );
                projectile.gravityModifier = 0;
                projectile.InitializeVelocity(direction.normalized * 75);
            }
            );
        }
        private void SpawnRocket(Vector3 pos, Vector3 target, BasePlayer player, Quaternion rotation, Vector3 direction) {
            BaseEntity entity = GameManager.server.CreateEntity("assets/content/vehicles/mlrs/rocket_mlrs.prefab", pos + target, rotation);
            ServerProjectile projectile = entity.GetComponent<ServerProjectile>();
            Vector3 vector3 = direction.normalized * 75;
            projectile.gravityModifier = 0;
            projectile.InitializeVelocity(vector3);
            entity.creatorEntity = (BaseEntity)player;
            entity.OwnerID = player.userID;
            timer.Once(UnityEngine.Random.Range(0.0f, 3.0f), () => {
                entity.OwnerID = player.userID;
                entity.Spawn();
                timer.Once(2f, () => {
                    if (entity == null || projectile == null || entity.IsDestroyed) return;
                    PlayEffect("assets/content/vehicles/mlrs/effects/pfx_mlrs_backfire.prefab", entity);
                    timer.Repeat(0.05f, littleRocketCount, () => {
                        if (entity == null || projectile == null || entity.IsDestroyed) return;
                        int randomUp = UnityEngine.Random.Range(-20, 20);
                        int radonomForward = UnityEngine.Random.Range(-20, 20);
                        int radonom = UnityEngine.Random.Range(-20, 20);
                        SpawnSmallRocket(entity.transform.position + (Vector3.left * randomUp) + (Vector3.forward * radonomForward), target, player, projectile, direction);
                    }
                    );
                }
                );
            }
            );
        }
        private void SpawnSmallRocket(Vector3 pos, Vector3 target, BasePlayer player, ServerProjectile parentProjectile, Vector3 direction) {
            BaseEntity entity = GameManager.server.CreateEntity("assets/prefabs/ammo/rocket/rocket_basic.prefab", pos + target, parentProjectile.transform.rotation);
            ServerProjectile projectile = entity.GetComponent<ServerProjectile>();
            //projectile.speed
            projectile.gravityModifier = 0;
            Vector3 vector3 = direction.normalized * 75;
            projectile.gravityModifier = 0;
            projectile.InitializeVelocity(vector3);
            entity.creatorEntity = (BaseEntity)player;
            entity.OwnerID = player.userID;
            entity.Spawn();
        }
        private static void PlayEffect(string effect, BaseEntity entity) {
            BaseEntity playerEntity = entity;
            Effect reusableInstance = new Effect();
            reusableInstance.Clear();
            reusableInstance.Init(Effect.Type.Generic, playerEntity, 0, new Vector3(0, 0, 0), new Vector3(0, 0, 0), null);
            reusableInstance.scale = false ? 0.0f : 1f;
            reusableInstance.pooledString = effect;
            EffectNetwork.Send(reusableInstance);
        }
        private void MakeUi(BasePlayer player) {
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                CursorEnabled = false, Image = {
                    Color = "1.0 1.0 1.0 1.0"
                }
                , FadeOut = 1, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 0", OffsetMax = "0 0"
                }
            }
            , "Overlay", "Flashbang");
            CuiHelper.DestroyUi(player, "Flashbang");
            CuiHelper.AddUi(player, container);
        }
        public class OnCollision : MonoBehaviour {
            public BaseEntity ent {
                get;
                set;
            }
            void OnCollisionEnter(Collision collision) {
                PlayEffect("assets/bundled/prefabs/fx/impacts/stab/glass/glass1.prefab", ent);
                for (int i = 0; i < 15; i++) {
                    int randomRight = UnityEngine.Random.Range(-300, 300);
                    int radonomForward = UnityEngine.Random.Range(-300, 300);
                    BaseEntity entity = GameManager.server.CreateEntity("assets/bundled/prefabs/fireball.prefab", ent.transform.position + (Vector3.right * (randomRight / 100)) + (Vector3.forward * (radonomForward / 100)), new Quaternion(), true) as BaseEntity;
                    entity.Spawn();
                }
                ent.Kill();
                Destroy(this);
            }
        }
        public class OnCollisionExplode : MonoBehaviour {
            public TimedExplosive ent {
                get;
                set;
            }
            void OnCollisionEnter(Collision collision) {
                ent.Explode();
                Destroy(this);
            }
        }
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя 15FPS

Сверху