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

FREE LuckyBlock : 0.0.3 0.0.3

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Rust;
using System.Collections.Generic;
using System.Linq;
using ConVar;
using Oxide.Core.Plugins;
using UnityEngine;
using Physics = UnityEngine.Physics;
using Vector3 = UnityEngine.Vector3;

namespace Oxide.Plugins
{
    [Info("LuckyBlock", "JSONCMD", "0.0.3")]
    class LuckyBlock : RustPlugin
    {
        #region Variables
        [PluginReference] private Plugin IQChat;
        
        private ConfigData Configuration;
        private readonly List<float> RandomShift = new List<float> 
        {
            9f,
            -9f,
            -9.5f,
            9.5f,
            8f,
            -8f,
            10f,
            -10f
        };
        private List<Vector3> SpawnPoints = new List<Vector3>();
        private List<StorageContainer> LuckyLastList = new List<StorageContainer>();

        #endregion
        void Init() => ReadConfig();
        private void OnServerInitialized() => NextTick(() => {
            
            GetRoads(); 
            Puts($"Найдено позиций : {SpawnPoints.Count}");
            OnPlayerToggleTimer(); 
        });

        #region WorldTimers
        public void OnPlayerToggleTimer()
        {      
            timer.Every(Configuration.timer_timer, () =>
            {
                
                foreach (var pos in SpawnPoints)
                {
                    StorageContainer boxes = (StorageContainer)GameManager.server.CreateEntity("assets/bundled/prefabs/radtown/dmloot/dm c4.prefab",pos) as StorageContainer;
                    boxes.enableSaving = true;
                    boxes.skinID = 228;
                    boxes.SetFlag(BaseEntity.Flags.Busy, true);
                    boxes.SetFlag(BaseEntity.Flags.Locked, true);
                    boxes.Spawn();
                    boxes.inventory.Clear();

                    if (!LuckyLastList.Contains(boxes))
                        LuckyLastList.Add(boxes);

                    boxes.Invoke(() => 
                    {
                        if (LuckyLastList.Contains(boxes))
                            LuckyLastList.Remove(boxes);
                        boxes.Kill(); 
                    }, Configuration.destroySeconds);
                }
            });
            
        }
        #endregion

        #region Hooks
        void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
        {
            if (entity == null || info == null || entity.skinID != 228) return;

            int Index = Oxide.Core.Random.Range(0, 100);

            if (Index >= 0 && Index <= 49)
            {
                SpawnRockets(info.Initiator);
            }
            else if (Index >= 50 && Index <= 60)
            {
                var items = entity as StorageContainer;

                foreach (var dictionaryConfig in Configuration.c_items)
                {
                    ItemManager.CreateByName($"{dictionaryConfig.shortname}", dictionaryConfig.amount,
                            dictionaryConfig.skinID).MoveToContainer(items.inventory);
                }
            }
            else if (Index >= 61 && Index <= 75)
            {
                
            }else
            {
                rust.RunServerCommand($"entity.spawn polarbear ({entity.transform.position.x},{entity.transform.position.y},{entity.transform.position.z})");
            }
        }

        void Unload()
        {
            foreach (StorageContainer storageContainer in LuckyLastList.Where(x => x != null && !x.IsDestroyed))
                storageContainer.Kill();
        }
        #endregion

        #region Functional Voids
        private void SpawnRockets(BaseEntity ent)
        {
            var position = ent.transform.position;
            var radius = 3;
            var damage = 50;
            var effects = new List<string>
            {
                "assets/prefabs/weapons/rocketlauncher/effects/rocket_explosion.prefab"
            };
            foreach (var effect in effects)
            {
                var x = Core.Random.Range(-radius, radius);
                var y = Core.Random.Range(0, radius);
                var z = Core.Random.Range(-radius, radius);
                Effect.server.Run(effect, position + new Vector3(x, y, z));
            }

            Effect.server.Run("assets/prefabs/weapons/rocketlauncher/effects/rocket_explosion.prefab", position);
            List<BaseCombatEntity> entities = new List<BaseCombatEntity>();
            Vis.Entities(position, radius, entities);

            if (entities == null || entities.Count == 0) return;

            foreach (var entitys in entities.Where(x => x.health > 0))
                entitys.Hurt(damage, DamageType.Explosion);
        }

        public void SendChat(BasePlayer player, string Message, Chat.ChatChannel channel = Chat.ChatChannel.Global)
        {
            if (IQChat)
                IQChat?.Call("API_ALERT_PLAYER", player, Message, "", "");
            else player.SendConsoleCommand("chat.add", channel, 0, Message);
        }
        
        bool GetCheckPositiont(Vector3 Position)
        {
            if (Physics.CheckSphere(Position, 15f, LayerMask.GetMask("Construction", "Default", "Deployed", "Trigger", "Player (Server)", "Trigger", "Prevent Building" )))
                return false;
            return true;
        }
        private void GetRoads()
        {
            foreach (PathList x in TerrainMeta.Path.Roads)
                foreach (var point in x.Path.Points.Where(p => GetCheckPositiont(p)))
                {
                    Vector3 SpawnPosition = new Vector3(point.x + RandomShift.GetRandom(), point.y, point.z + RandomShift.GetRandom());
                    SpawnPosition.y = TerrainMeta.HeightMap.GetHeight(SpawnPosition);
                    SpawnPoints.Add(SpawnPosition);
                }
        }
        #endregion

        #region Config
        class ConfigData
        {
            [JsonProperty("Время спавна лакиблока")] public float timer_timer = 3600f;
            [JsonProperty("Время диспавна лакиблока")] public float destroySeconds = 360f;
            [JsonProperty("Список предметов при уничтожении")] public List<itemData> c_items;
        }
        class itemData
        {
            public string shortname { get; set; }
            public int amount { get; set; }
            public ulong skinID { get; set; }
            
            public itemData(string shortname, int amount, ulong skinID = 0)
            {
                this.shortname = shortname;
                this.amount = amount;
                this.skinID = skinID;
            }
        }
        void ReadConfig()
        {
            Configuration = Config.ReadObject<ConfigData>();
        }
        void SaveConfig(object config) => Config.WriteObject(config, true);
        protected override void LoadDefaultConfig()
        {
            var config = new ConfigData();
            config.c_items = new List<itemData>()
            {
                new itemData("rifle.ak", 1)
            };
            SaveConfig(config);
            ReadConfig();
        }
        #endregion
    }
}

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

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

Сверху