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

FREE ChristmasTreePresents : 1.0.1 1.0.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("Christmas Tree Presents", "redBDGR", "1.0.1")]
    [Description("Spawns Christmas presents under Christmas trees")]
    class ChristmasTreePresents : RustPlugin
    {
        private int minNumOfPresents = 3;
        private int maxNumOfPresents = 4;
        private bool treeNeedsAllOrnaments = true;
        private bool treeNeedsToBeOnFoundation = true;

        private bool presentSpawned;
        private bool Changed;

        #region Configuration

        protected override void LoadDefaultConfig()
        {
            Config.Clear();
            LoadVariables();
        }

        private void LoadVariables()
        {
            minNumOfPresents = Convert.ToInt32(GetConfig("Settings", "Minimum number of presents per tree", 3));
            maxNumOfPresents = Convert.ToInt32(GetConfig("Settings", "Maximum number of presents per tree", 4));
            treeNeedsAllOrnaments = Convert.ToBoolean(GetConfig("Settings", "Tree needs all ornaments", true));
            treeNeedsToBeOnFoundation = Convert.ToBoolean(GetConfig("Settings", "Tree needs to be on foundation", true));

            if (!Changed) return;
            SaveConfig();
            Changed = false;
        }

        #endregion

        #region Oxide Hooks

        private void Init()
        {
            LoadVariables();
        }

        private void OnEntitySpawned(BaseNetworkable entity)
        {
            if (presentSpawned)
                return;
            if (entity.ShortPrefabName != "giftbox_loot")
                return;
            presentSpawned = true;
            timer.Once(1f, () => presentSpawned = false);
            foreach(ChristmasTree tree in UnityEngine.Object.FindObjectsOfType<ChristmasTree>())
                SpawnPresents(tree);
        }

        #endregion

        #region Helper Methods

        private void SpawnPresents(ChristmasTree tree)
        {
            if (treeNeedsAllOrnaments)
                if (!CheckOrnaments(tree))
                    return;
            if (treeNeedsToBeOnFoundation)
                if (!CheckBuilding(tree))
                    return;
            for (int i = 0; i < UnityEngine.Random.Range(minNumOfPresents, maxNumOfPresents + 1); i++)
                CreatePresent(new Vector3(UnityEngine.Random.Range(-1.2f, 1.2f), 0, UnityEngine.Random.Range(-1.2f, 1.2f)) + tree.transform.localPosition, Quaternion.Euler(0f, UnityEngine.Random.Range(0f, 360f), 0f));
        }

        private static void CreatePresent(Vector3 pos, Quaternion rot)
        {
            BaseEntity present = GameManager.server.CreateEntity("assets/prefabs/misc/xmas/giftbox/giftbox_loot.prefab", pos, rot);
            present.Spawn();
        }

        private static bool CheckOrnaments(ChristmasTree tree)
        {
            return tree.GetComponent<StorageContainer>().inventory.IsFull();
        }

        private static bool CheckBuilding(ChristmasTree tree)
        {
            DecayEntity decay = tree.GetComponent<DecayEntity>();
            if (decay == null)
                return false;
            return decay.GetBuilding() != null;
        }

        #endregion

        private object GetConfig(string menu, string datavalue, object defaultValue)
        {
            var data = Config[menu] as Dictionary<string, object>;
            if (data == null)
            {
                data = new Dictionary<string, object>();
                Config[menu] = data;
                Changed = true;
            }
            object value;
            if (data.TryGetValue(datavalue, out value)) return value;
            value = defaultValue;
            data[datavalue] = value;
            Changed = true;
            return value;
        }
    }
}

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