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

FREE OreEvent : 0.0.1 0.0.1

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using Facepunch;
using Rust;
using UnityEngine;
using Random = System.Random;

namespace Oxide.Plugins
{
    [Info("OreEvent", "OxideRussia", "0.0.1")]
    public class OreEvent : RustPlugin
    {
        public string SulfurOre = "assets/bundled/prefabs/autospawn/resource/ores/sulfur-ore.prefab";
        public string MetalOre = "assets/bundled/prefabs/autospawn/resource/ores/metal-ore.prefab";
        public string StonesOre = "assets/bundled/prefabs/autospawn/resource/ores/stone-ore.prefab";
        
        void OnServerInitialized()
        {
            timer.Every(7200f, () =>
            {
                SpawnOre();
            });
        }

        void Unload()
        {
            if (OreList.Count > 0)
            {
                foreach (var bases in OreList)
                {
                    if (bases != null && !bases.IsDestroyed)
                        bases.Kill();
                }
                OreList?.Clear();
            }
        }

        private string GetGridString(Vector3 position)
        {
            Vector2 adjPosition = new Vector2((World.Size / 2f) + position.x, (World.Size / 2f) - position.z);
            return $"{NumberToString((int)(adjPosition.x / 150f))}{(int)(adjPosition.y / 150f)}";
        }
        private string NumberToString(int number)
        {
            bool a = number > 25;
            Char c = (Char)(65 + (a ? number - 26 : number));
            return a ? "A" + c : c.ToString();
        }
        
        static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0);
        static double CurrentTime() { return DateTime.UtcNow.Subtract(epoch).TotalSeconds; }
        
        private double IsBlocked() 
        {
            var lefTime = SaveRestore.SaveCreatedTime.ToUniversalTime().Subtract(epoch).TotalSeconds + 8640000 - CurrentTime();
            return lefTime > 0 ? lefTime : 0;
        }

        static float GetGroundPosition(Vector3 pos)
        {
            float y = TerrainMeta.HeightMap.GetHeight(pos);
            RaycastHit hit;
            if (Physics.Raycast(new Vector3(pos.x, pos.y + 20f, pos.z), Vector3.down, out hit, Mathf.Infinity, LayerMask.GetMask(new[] {
                "Terrain", "World", "Default", "Construction", "Deployed"
            }
            )) && !hit.collider.name.Contains("rock_cliff")) return Mathf.Max(hit.point.y, y);
            return y;
        }

        static Vector3 RandomCircle(Vector3 center, float radius = 2)
        {
            float ang = UnityEngine.Random.value * 360;
            Vector3 pos = Vector3.zero;
            pos.x = center.x + radius * Mathf.Sin(ang * Mathf.Deg2Rad);
            pos.z = center.z + radius * Mathf.Cos(ang * Mathf.Deg2Rad);
            pos.y = TerrainMeta.HeightMap.GetHeight(pos);



            return pos;
        }
        
        HashSet<BaseEntity> OreList = new HashSet<BaseEntity>();
        [ChatCommand("cosmofarm")]
        void startcosmo(BasePlayer player)
        {
            if (!player.IsAdmin) return;
            var online = BasePlayer.activePlayerList.Count;
            if (online < 1)
            {
                player.ChatMessage("Ты лох");
                return;
            }
            SpawnOre();
        }
        void SpawnOre()
        {

            if (OreList.Count > 0)
            {
                foreach (var bases in OreList)
                {
                    if (bases != null && !bases.IsDestroyed)
                        bases.Kill();
                }
                OreList?.Clear();
            }
            var online = BasePlayer.activePlayerList.Count;
            if (online < 1) return;

            var monument = UnityEngine.Object.FindObjectsOfType<MonumentInfo>().FirstOrDefault(p => p.name.Contains("launch_site_1"));
            if (monument == null)
            {
                Puts("Air Field not found! Spawn Ore disabled!");
                return;
            }

            var pos = monument.transform.position + monument.transform.rotation * new Vector3(30f, 4f, 30f);

            for (int i = 0; i < 80; i++)
            {
                var entity = GameManager.server.CreateEntity(SulfurOre, RandomCircle(pos, UnityEngine.Random.Range(-10, 10)));
                entity.enableSaving = false;
                entity.Spawn();
                OreList.Add(entity);
            }
            for (int i = 0; i < 80; i++)
            {
                var entity = GameManager.server.CreateEntity(MetalOre, RandomCircle(pos, UnityEngine.Random.Range(-15, 15)));
                entity.enableSaving = false;

                entity.Spawn();
                OreList.Add(entity);
            }
            for (int i = 0; i < 100; i++)
            {
                var entity = GameManager.server.CreateEntity(StonesOre, RandomCircle(pos, UnityEngine.Random.Range(-17, 17)));
                entity.enableSaving = false;
                entity.Spawn();
                OreList.Add(entity);
            }
            Server.Broadcast("<color=#a5e664>ВНИМАНИЕ!!!</color>\nНа сервере запустился <color=#ffa500>ивент</color>, в центре космодрома куча камней, успейте собрать все до единого.");

            /*timer.In(7200, () =>
            {
                SpawnOre();
            });*/
        }
    }
}

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