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

FREE ZealTreasure : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading.Tasks;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Rust;
using UnityEngine;
using Object = UnityEngine.Object;

namespace Oxide.Plugins
{
    [Info("ZealTreasure", "Kira", "1.0.0")]
    [Description("Клад для сервера Rust")]
    public class ZealTreasure : RustPlugin
    {
        public List<Vector3> Zones = new List<Vector3>();
        public Coroutine Thread;
        public static ZealTreasure _;
        private static readonly int playerLayer = LayerMask.GetMask("Deployed");
        private static readonly Collider[] colBuffer = Vis.colBuffer;

        public class TreasureDetector : MonoBehaviour
        {
            private BasePlayer player;
            private BaseEntity chest;

   
            private void Awake() 
            {
                player = GetComponent<BasePlayer>();

                InvokeRepeating("Find_Chest", 1f, 1f);
            }

            public void Find_Chest()
            {
                var chests = Physics.OverlapSphereNonAlloc(player.transform.position, 50, colBuffer, playerLayer,
                    QueryTriggerInteraction.Collide);

                if (chests <= 0) return;
                for (int i = 0; i < chests; i++)
                {
                    var obj = colBuffer[i].GetComponentInParent<BaseEntity>();
                    if (obj.skinID == 2)
                    {
                        chest = obj;
                    } 
                }

                if (chest == null) return;
                for (int i = 0; i < 50 / player.Distance2D(chest); i++)
                {
                    Effect Sound = new Effect("assets/prefabs/locks/keypad/effects/lock.code.unlock.prefab", player, 0,
                        new Vector3(),
                        new Vector3());
                    EffectNetwork.Send(Sound, player.Connection);


                    player.ChatMessage($"{player.Distance2D(chest)}");
                }

                if (player.Distance2D(chest) < 5)
                {
                    Effect Sound1 = new Effect("assets/prefabs/locks/keypad/effects/lock.code.shock.prefab", player,
                        0,
                        new Vector3(),
                        new Vector3());
                    EffectNetwork.Send(Sound1, player.Connection);
                }
            }

            private void OnDestroy()
            {
            }
        }


        private void Spawn_TreasureChest()
        {
            int Radius = 10;
            if (Thread != null)
            {
                Global.Runner.StopCoroutine(Thread);
            }

            Thread = Global.Runner.StartCoroutine(Generate_TreasureChest(Radius));
        }

        private void OnServerInitialized()
        {
            _ = this;
            foreach (var obj in BasePlayer.activePlayerList)
            {
                UnityEngine.Object.Destroy(obj.gameObject.GetComponent<TreasureDetector>());
            }
        }

        private void Unload()
        {
            if (Thread != null)
            {
                Global.Runner.StopCoroutine(Thread);
            }

            foreach (var obj in BasePlayer.activePlayerList)
            {
                UnityEngine.Object.Destroy(obj.gameObject.GetComponent<TreasureDetector>());
            }
        }
 
        private void OnActiveItemChanged(BasePlayer player, Item oldItem, Item newItem)
        {
            if (newItem != null || oldItem != null)
            {
                if (newItem.info.shortname == "geiger.counter") 
                {
                    if (player.gameObject.GetComponent<TreasureDetector>() == null)
                    {
                        player.gameObject.AddComponent<TreasureDetector>(); 
                        return;
                    }
                }
            }

            if (player.GetComponent<TreasureDetector>() != null)
                UnityEngine.Object.Destroy(player.GetComponent<TreasureDetector>());
        }

        IEnumerator Generate_TreasureChest(int radius)
        {
            foreach (var position in Zones)
            {
                for (int i = 0; i < 1; i++)
                {
                    Vector3 pos = new Vector3(position.x + Core.Random.Range(-radius, radius), 0,
                        position.z + Core.Random.Range(-radius, radius));
                    var ent = GameManager.server.CreateEntity(
                        "assets/prefabs/deployable/large wood storage/box.wooden.large.prefab");
                    ent.transform.position = new Vector3(pos.x, TerrainMeta.HeightMap.GetHeight(pos) - 1, pos.z);
                    ent.transform.hasChanged = true;
                    ent.GetComponent<BaseEntity>().skinID = 2;
                    ent.Spawn();
                    Server.Command($"say Заспавнен сундук {pos.x}");
                    yield return new WaitForSeconds(1f);
                }
            }

            yield return 0;  
        }

        [ConsoleCommand("set.spawnpoint")]
        private void GiveDetector(ConsoleSystem.Arg args)
        {
            Zones.Add(args.Player().transform.position);
            SendReply(args.Player(), $"Точка спавна установлена : {args.Player().transform.position}");
            Spawn_TreasureChest();
        }
 
        private static string HexToRustFormat(string hex)
        {
            if (string.IsNullOrEmpty(hex))
            {
                hex = "#FFFFFFFF";
            } 

            var str = hex.Trim('#');
            if (str.Length == 6) 
                str += "FF";
            if (str.Length != 8)
            {
                throw new Exception(hex);
                throw new InvalidOperationException("Cannot convert a wrong format.");
            }

            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);

            Color color = new Color32(r, g, b, a);
            return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
        }
        
        [ConsoleCommand("dist")]
        private void DistDetector(ConsoleSystem.Arg args)
        {
            BasePlayer player = args.Player();
            CuiElementContainer UI = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "UI_Layer");

            UI.Add(new CuiPanel
            {
                CursorEnabled = false,
                Image =
                {
                    Color = HexToRustFormat("#8B85801C"),
                    Material = "assets/content/ui/ui.background.tile.psd"
                },
                RectTransform = 
                {
                    AnchorMin = "0.8156254 0.02222205",
                    AnchorMax = "0.835417 0.174"
                }
            },"Hud", "UI_Layer");

            UI.Add(new CuiElement
            {
                Name = "IC_Fuel",
                Parent = "UI_Layer",
                Components =
                {
                    new CuiImageComponent
                    {
                        Color = HexToRustFormat("#8B8580"),
                        Sprite = "assets/icons/iscooking.png"
                    },
                    new CuiRectTransformComponent
                    {
                        AnchorMin = "0.1842117 0.03660318",
                        AnchorMax = "0.8421105 0.1891164"
                    }
                }
            });

            CuiHelper.AddUi(player, UI);
        }
    }
}

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