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

FREE GroupCrafting : 1.0.6 1.0.6

Нет прав для скачивания
C#:
using System;
using UnityEngine;
using Oxide.Core;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("GroupCrafting", "Death", "1.0.6")]
    class GroupCrafting : RustPlugin
    {
        #region Declarations
        const string perm = "groupcrafting.admin";

        Dictionary<ulong, float> PlayerCrafting = new Dictionary<ulong, float>();
        float cacheSpeed;
        #endregion

        #region Hooks
        void OnServerInitialized()
        {
            foreach (var group in permission.GetGroups())
            {
                if (!configData.CraftingSpeed.ContainsKey(group))
                {
                    configData.CraftingSpeed.Add(group, 1);
                }
            }

            UpdateOnlinePlayers();

            Config.WriteObject(configData, true);
            permission.RegisterPermission(perm, this);
        }

        void OnGroupCreated(string name)
        {
            if (!configData.CraftingSpeed.ContainsKey(name))
            {
                configData.CraftingSpeed.Add(name, 1);
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (PlayerCrafting.ContainsKey(player.userID))
            {
                PlayerCrafting.Remove(player.userID);
            }

            var speed = 1f;

            foreach (var group in configData.CraftingSpeed)
            {
                if (!permission.UserHasGroup(player.UserIDString, group.Key) || group.Value < speed)
                {
                    continue;
                }

                speed = group.Value;
            }

            PlayerCrafting.Add(player.userID, speed);
        }

        void OnPlayerDisconnected(BasePlayer player)
        {
            if (PlayerCrafting.ContainsKey(player.userID))
            {
                PlayerCrafting.Remove(player.userID);
            }
        }

        void OnItemCraft(ItemCraftTask task, BasePlayer player, Item item)
        {
            if (!PlayerCrafting.TryGetValue(player.userID, out cacheSpeed))
            {
                return;
            }

            task.blueprint = UnityEngine.Object.Instantiate(task.blueprint);

            if (cacheSpeed == 0)
            {
                task.blueprint.time = 0;
            }
            else
            {
                task.blueprint.time /= cacheSpeed;
            }

        }
        #endregion

        #region Functions
        void UpdateOnlinePlayers()
        {
            foreach (var player in BasePlayer.activePlayerList)
            {
                OnPlayerConnected(player);
            }
        }

        #region Commands
        [ConsoleCommand("gcraft")]
        void ConfigCommand(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();

            if (player != null && !permission.UserHasPermission(player.UserIDString, perm))
            {
                return;
            }

            if (arg.Args == null || arg.Args.Length != 2)
            {
                arg.ReplyWith("Invalid syntax: gcreaft <group> <multiplier>");
                return;
            }

            var group = arg.GetString(0);

            if (string.IsNullOrEmpty(group) || !configData.CraftingSpeed.ContainsKey(group))
            {
                arg.ReplyWith("Error: Group is invalid or does not exist.");
                return;
            }

            var multiplier = arg.GetFloat(1, float.NaN);

            if (float.IsNaN(multiplier))
            {
                arg.ReplyWith("Error: Multiplier is invalid.");
                return;
            }

            configData.CraftingSpeed[group] = multiplier;
            Config.WriteObject(configData, true);

            UpdateOnlinePlayers();
            arg.ReplyWith($"Sucessfully update {group}'s crafting speed to {(multiplier == 0 ? "instant" : $"x{multiplier}")}!");
        }
        #endregion

        #region Config
        void Init()
        {
            LoadConfigVariables();
        }

        ConfigData configData;

        class ConfigData
        {
            public Dictionary<string, float> CraftingSpeed = new Dictionary<string, float>();
        }

        private void LoadConfigVariables()
        {
            configData = Config.ReadObject<ConfigData>();
            SaveConfig(configData);
        }

        protected override void LoadDefaultConfig()
        {
            var config = new ConfigData();
            SaveConfig(config);
        }

        void SaveConfig(ConfigData config)
        {
            Config.WriteObject(config, true);
        }
        #endregion

        #endregion
    }
}

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