• Хостинг игровых серверов

    Максимальная производительность для ваших игровых серверов!

    Заказать сейчас

GPT-3.5 Turbo Тестирую ChatGPT во все щели

Нейросеть GPT-3.5 Turbo доступна всем пользователям. Для доступа к GPT-4 Turbo необходимо приобрести «Prime».
Для того чтобы вывести информацию об игроках в GUI слева вверху экрана, вам нужно обновить код плагина. Ниже приведен обновленный код с соответствующим расположением элементов GUI:

C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, bool> sleepers = new Dictionary<ulong, bool>();
        private Dictionary<ulong, string> playerInfoPanels = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (sleepers.ContainsKey(player.userID))
            {
                sleepers[player.userID] = false;
                UpdatePlayerInfoGUI(player);
            }
        }

        void OnPlayerSleep(BasePlayer player)
        {
            if (!sleepers.ContainsKey(player.userID) || !sleepers[player.userID])
            {
                sleepers[player.userID] = true;
                UpdatePlayerInfoGUI(player);
            }
        }

        void CreatePlayerInfoGUI()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                string panelName = $"playerInfoPanel_{player.userID}";
                playerInfoPanels[player.userID] = panelName;

                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiPanel
                {
                    Image = { Color = "0.1 0.1 0.1 0.8" },
                    RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" }, // Top left corner
                    CursorEnabled = false
                }, "Overlay", panelName);

                container.Add(new CuiLabel
                {
                    Text = { Text = $"Player: {player.displayName}\nStatus: {(sleepers[player.userID] ? "Sleeping" : "Online")}", FontSize = 14, Align = TextAnchor.UpperCenter },
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
                }, panelName);

                CuiHelper.AddUi(player, container);
            }
        }

        void UpdatePlayerInfoGUI(BasePlayer player)
        {
            string panelName = playerInfoPanels[player.userID];
            CuiHelper.DestroyUi(player, panelName);
            CreatePlayerInfoGUI();
        }
    }
}

Этот код обновлен так, чтобы информация об игроках выводилась в GUI в верхнем левом углу экрана. Пожалуйста, протестируйте этот код и убедитесь, что информация отображается в нужном месте. В случае необходимости, вы можете вносить дополнительные изменения в дизайн и расположение элементов GUI.
Исправь код не появляется лого Failed to call hook 'OnServerInitialized' on plugin 'Logo v1.0.0' (KeyNotFoundException: The given key was not present in the dictionary.)
 
Исправь код не появляется лого Failed to call hook 'OnServerInitialized' on plugin 'Logo v1.0.0' (KeyNotFoundException: The given key was not present in the dictionary.)
Конечно! Для устранения ошибки "KeyNotFoundException: The given key was not present in the dictionary." в вашем плагине, вам нужно убедиться, что ключи правильно добавляются в словарь playerInfoPanels. Ниже приведен исправленный код:

C#:
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, bool> sleepers = new Dictionary<ulong, bool>();
        private Dictionary<ulong, string> playerInfoPanels = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (sleepers.ContainsKey(player.userID))
            {
                sleepers[player.userID] = false;
                UpdatePlayerInfoGUI(player);
            }
        }

        void OnPlayerSleep(BasePlayer player)
        {
            if (!sleepers.ContainsKey(player.userID))
            {
                sleepers[player.userID] = true;
                UpdatePlayerInfoGUI(player);
            }
        }

        void CreatePlayerInfoGUI()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                string panelName = $"playerInfoPanel_{player.userID}";
                playerInfoPanels[player.userID] = panelName;

                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiPanel
                {
                    Image = { Color = "0.1 0.1 0.1 0.8" },
                    RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" }, // Top left corner
                    CursorEnabled = false
                }, "Overlay", panelName);

                container.Add(new CuiLabel
                {
                    Text = { Text = $"Player: {player.displayName}\nStatus: {(sleepers[player.userID] ? "Sleeping" : "Online")}", FontSize = 14, Align = TextAnchor.UpperCenter },
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
                }, panelName);

                CuiHelper.AddUi(player, container);
            }
        }

        void UpdatePlayerInfoGUI(BasePlayer player)
        {
            if (playerInfoPanels.ContainsKey(player.userID))
            {
                string panelName = playerInfoPanels[player.userID];
                CuiHelper.DestroyUi(player, panelName);
                CreatePlayerInfoGUI();
            }
        }
    }
}

В этом исправленном коде добавлена проверка наличия ключа в словаре playerInfoPanels перед его использованием, чтобы избежать ошибки "KeyNotFoundException". Пожалуйста, используйте этот обновленный код и проверьте его работоспособность.
 
Конечно! Для устранения ошибки "KeyNotFoundException: The given key was not present in the dictionary." в вашем плагине, вам нужно убедиться, что ключи правильно добавляются в словарь playerInfoPanels. Ниже приведен исправленный код:

C#:
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, bool> sleepers = new Dictionary<ulong, bool>();
        private Dictionary<ulong, string> playerInfoPanels = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (sleepers.ContainsKey(player.userID))
            {
                sleepers[player.userID] = false;
                UpdatePlayerInfoGUI(player);
            }
        }

        void OnPlayerSleep(BasePlayer player)
        {
            if (!sleepers.ContainsKey(player.userID))
            {
                sleepers[player.userID] = true;
                UpdatePlayerInfoGUI(player);
            }
        }

        void CreatePlayerInfoGUI()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                string panelName = $"playerInfoPanel_{player.userID}";
                playerInfoPanels[player.userID] = panelName;

                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiPanel
                {
                    Image = { Color = "0.1 0.1 0.1 0.8" },
                    RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" }, // Top left corner
                    CursorEnabled = false
                }, "Overlay", panelName);

                container.Add(new CuiLabel
                {
                    Text = { Text = $"Player: {player.displayName}\nStatus: {(sleepers[player.userID] ? "Sleeping" : "Online")}", FontSize = 14, Align = TextAnchor.UpperCenter },
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
                }, panelName);

                CuiHelper.AddUi(player, container);
            }
        }

        void UpdatePlayerInfoGUI(BasePlayer player)
        {
            if (playerInfoPanels.ContainsKey(player.userID))
            {
                string panelName = playerInfoPanels[player.userID];
                CuiHelper.DestroyUi(player, panelName);
                CreatePlayerInfoGUI();
            }
        }
    }
}

В этом исправленном коде добавлена проверка наличия ключа в словаре playerInfoPanels перед его использованием, чтобы избежать ошибки "KeyNotFoundException". Пожалуйста, используйте этот обновленный код и проверьте его работоспособность.
Обнови плагин что-бы отоброжался онлайн
 
Обнови плагин что-бы отоброжался онлайн
Для того чтобы плагин отображал информацию только об онлайн игроках, вам нужно изменить логику в вашем плагине. Ниже приведен обновленный код, который будет отображать информацию только об онлайн игроках:

C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, string> playerInfoPanels = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void CreatePlayerInfoGUI()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                string panelName = $"playerInfoPanel_{player.userID}";
                playerInfoPanels[player.userID] = panelName;

                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiPanel
                {
                    Image = { Color = "0.1 0.1 0.1 0.8" },
                    RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" }, // Top left corner
                    CursorEnabled = false
                }, "Overlay", panelName);

                container.Add(new CuiLabel
                {
                    Text = { Text = $"Player: {player.displayName}\nStatus: Online", FontSize = 14, Align = TextAnchor.UpperCenter },
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
                }, panelName);

                CuiHelper.AddUi(player, container);
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (!playerInfoPanels.ContainsKey(player.userID))
            {
                CreatePlayerInfoGUI();
            }
        }

        void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (playerInfoPanels.ContainsKey(player.userID))
            {
                string panelName = playerInfoPanels[player.userID];
                CuiHelper.DestroyUi(player, panelName);
                playerInfoPanels.Remove(player.userID);
            }
        }
    }
}

Этот код будет отображать информацию только об онлайн игроках при запуске сервера и при подключении новых игроков. Также, информация об игроке будет удаляться при его отключении от сервера. Пожалуйста, используйте этот обновленный код и проверьте его работоспособность.
 
Для того чтобы плагин отображал информацию только об онлайн игроках, вам нужно изменить логику в вашем плагине. Ниже приведен обновленный код, который будет отображать информацию только об онлайн игроках:

C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, string> playerInfoPanels = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void CreatePlayerInfoGUI()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                string panelName = $"playerInfoPanel_{player.userID}";
                playerInfoPanels[player.userID] = panelName;

                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiPanel
                {
                    Image = { Color = "0.1 0.1 0.1 0.8" },
                    RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" }, // Top left corner
                    CursorEnabled = false
                }, "Overlay", panelName);

                container.Add(new CuiLabel
                {
                    Text = { Text = $"Player: {player.displayName}\nStatus: Online", FontSize = 14, Align = TextAnchor.UpperCenter },
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
                }, panelName);

                CuiHelper.AddUi(player, container);
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (!playerInfoPanels.ContainsKey(player.userID))
            {
                CreatePlayerInfoGUI();
            }
        }

        void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (playerInfoPanels.ContainsKey(player.userID))
            {
                string panelName = playerInfoPanels[player.userID];
                CuiHelper.DestroyUi(player, panelName);
                playerInfoPanels.Remove(player.userID);
            }
        }
    }
}

Этот код будет отображать информацию только об онлайн игроках при запуске сервера и при подключении новых игроков. Также, информация об игроке будет удаляться при его отключении от сервера. Пожалуйста, используйте этот обновленный код и проверьте его работоспособность.
Поменяй логику кода чтобы онлайн отоброжался слева верху
 
Поменяй логику кода чтобы онлайн отоброжался слева верху
Чтобы поменять логику кода и отображать информацию об онлайн игроках слева вверху экрана, вам нужно изменить расположение элементов GUI в соответствии с вашими требованиями. Вот обновленный код с измененным расположением:

C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, string> playerInfoPanels = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void CreatePlayerInfoGUI()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                string panelName = $"playerInfoPanel_{player.userID}";
                playerInfoPanels[player.userID] = panelName;

                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiPanel
                {
                    Image = { Color = "0.1 0.1 0.1 0.8" },
                    RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" }, // Left top corner
                    CursorEnabled = false
                }, "Overlay", panelName);

                container.Add(new CuiLabel
                {
                    Text = { Text = $"Player: {player.displayName}\nStatus: Online", FontSize = 14, Align = TextAnchor.UpperLeft },
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
                }, panelName);

                CuiHelper.AddUi(player, container);
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (!playerInfoPanels.ContainsKey(player.userID))
            {
                CreatePlayerInfoGUI();
            }
        }

        void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (playerInfoPanels.ContainsKey(player.userID))
            {
                string panelName = playerInfoPanels[player.userID];
                CuiHelper.DestroyUi(player, panelName);
                playerInfoPanels.Remove(player.userID);
            }
        }
    }
}

В этом обновленном коде информация об онлайн игроках будет отображаться слева вверху экрана. Пожалуйста, используйте этот обновленный код и проверьте его работоспособность.
 
Чтобы поменять логику кода и отображать информацию об онлайн игроках слева вверху экрана, вам нужно изменить расположение элементов GUI в соответствии с вашими требованиями. Вот обновленный код с измененным расположением:

C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, string> playerInfoPanels = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void CreatePlayerInfoGUI()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                string panelName = $"playerInfoPanel_{player.userID}";
                playerInfoPanels[player.userID] = panelName;

                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiPanel
                {
                    Image = { Color = "0.1 0.1 0.1 0.8" },
                    RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" }, // Left top corner
                    CursorEnabled = false
                }, "Overlay", panelName);

                container.Add(new CuiLabel
                {
                    Text = { Text = $"Player: {player.displayName}\nStatus: Online", FontSize = 14, Align = TextAnchor.UpperLeft },
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
                }, panelName);

                CuiHelper.AddUi(player, container);
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (!playerInfoPanels.ContainsKey(player.userID))
            {
                CreatePlayerInfoGUI();
            }
        }

        void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (playerInfoPanels.ContainsKey(player.userID))
            {
                string panelName = playerInfoPanels[player.userID];
                CuiHelper.DestroyUi(player, panelName);
                playerInfoPanels.Remove(player.userID);
            }
        }
    }
}

В этом обновленном коде информация об онлайн игроках будет отображаться слева вверху экрана. Пожалуйста, используйте этот обновленный код и проверьте его работоспособность.
Обнови плагин сделай онлайн игроков сколько на сервере и сколько слиперов на сервере всё в маленьком GUI слева верху
 
Обнови плагин сделай онлайн игроков сколько на сервере и сколько слиперов на сервере всё в маленьком GUI слева верху
Для добавления информации о количестве онлайн игроков и спящих игроков на сервере в маленьком GUI в левом верхнем углу экрана, вам нужно обновить код вашего плагина. Вот обновленный код, который отображает информацию об онлайн игроках и спящих игроках в окне GUI:

C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, string> playerInfoPanel = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void CreatePlayerInfoGUI()
        {
            int onlinePlayers = BasePlayer.activePlayerList.Count;
            int sleepingPlayers = BasePlayer.sleepingPlayerList.Count;

            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel
            {
                Image = { Color = "0.1 0.1 0.1 0.8" },
                RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" },
                CursorEnabled = false
            }, "Overlay", "playerInfoPanel");

            container.Add(new CuiLabel
            {
                Text = { Text = $"Online: {onlinePlayers}\nSleeping: {sleepingPlayers}", FontSize = 14, Align = TextAnchor.UpperLeft },
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
            }, "playerInfoPanel");

            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                playerInfoPanel[player.userID] = "playerInfoPanel";
                CuiHelper.AddUi(player, container);
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (!playerInfoPanel.ContainsKey(player.userID))
            {
                CreatePlayerInfoGUI();
            }
        }

        void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (playerInfoPanel.ContainsKey(player.userID))
            {
                string panelName = playerInfoPanel[player.userID];
                CuiHelper.DestroyUi(player, panelName);
                playerInfoPanel.Remove(player.userID);
            }
        }
    }
}

Этот обновленный код создает маленькое GUI окно в левом верхнем углу экрана, отображая информацию о количестве онлайн игроков и спящих игроков на сервере. Пожалуйста, используйте этот обновленный код и проверьте его работоспособность.
 
Для добавления информации о количестве онлайн игроков и спящих игроков на сервере в маленьком GUI в левом верхнем углу экрана, вам нужно обновить код вашего плагина. Вот обновленный код, который отображает информацию об онлайн игроках и спящих игроках в окне GUI:

C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("PlayerInfoGUI", "YourName", "1.0.0")]
    class PlayerInfoGUI : RustPlugin
    {
        private Dictionary<ulong, string> playerInfoPanel = new Dictionary<ulong, string>();

        void OnServerInitialized()
        {
            CreatePlayerInfoGUI();
        }

        void CreatePlayerInfoGUI()
        {
            int onlinePlayers = BasePlayer.activePlayerList.Count;
            int sleepingPlayers = BasePlayer.sleepingPlayerList.Count;

            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel
            {
                Image = { Color = "0.1 0.1 0.1 0.8" },
                RectTransform = { AnchorMin = "0 0.9", AnchorMax = "0.2 1" },
                CursorEnabled = false
            }, "Overlay", "playerInfoPanel");

            container.Add(new CuiLabel
            {
                Text = { Text = $"Online: {onlinePlayers}\nSleeping: {sleepingPlayers}", FontSize = 14, Align = TextAnchor.UpperLeft },
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
            }, "playerInfoPanel");

            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                playerInfoPanel[player.userID] = "playerInfoPanel";
                CuiHelper.AddUi(player, container);
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (!playerInfoPanel.ContainsKey(player.userID))
            {
                CreatePlayerInfoGUI();
            }
        }

        void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (playerInfoPanel.ContainsKey(player.userID))
            {
                string panelName = playerInfoPanel[player.userID];
                CuiHelper.DestroyUi(player, panelName);
                playerInfoPanel.Remove(player.userID);
            }
        }
    }
}

Этот обновленный код создает маленькое GUI окно в левом верхнем углу экрана, отображая информацию о количестве онлайн игроков и спящих игроков на сервере. Пожалуйста, используйте этот обновленный код и проверьте его работоспособность.
Сделай плагин на ускорениче всех печек на плавку с настройкой кфг для каждого ресурса
 
Сделай плагин на ускорениче всех печек на плавку с настройкой кфг для каждого ресурса
Для создания плагина, который ускоряет процесс плавки ресурсов в печках с возможностью настройки скорости для каждого ресурса через конфиг, вам понадобится следующий код:

1. Создайте файл с именем "SpeedSmeltConfig.json" в папке "oxide/config" с следующим содержимым:

JSON:
{
  "Resources": {
    "metal.ore": 2.0,
    "sulfur.ore": 1.5,
    "wood": 1.0
    // Добавьте сюда другие ресурсы и их скорости плавки по желанию
  }
}

2. Создайте плагин с названием "SpeedSmelt", в котором будет код для ускорения плавки ресурсов:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                {"metal.ore", 2.0},
                {"sulfur.ore", 1.5},
                {"wood", 1.0}
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            string itemName = item.info.shortname;
            if (resourceSpeeds.ContainsKey(itemName))
            {
                oven.cookingFraction *= resourceSpeeds[itemName];
            }
        }

        void OnServerInitialized()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (entity != null)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

Этот плагин позволяет настраивать скорость плавки для каждого ресурса в печках на основе конфигурационного файла "SpeedSmeltConfig.json". При загрузке сервера или появлении новой печки, скорость плавки для каждого ресурса устанавливается в соответствии с настройками из конфига.

Не забудьте добавить плагин в папку "oxide/plugins" и перезагрузить сервер для его активации. Пожалуйста, протестируйте плагин и убедитесь, что он работает корректно.
 
Для создания плагина, который ускоряет процесс плавки ресурсов в печках с возможностью настройки скорости для каждого ресурса через конфиг, вам понадобится следующий код:

1. Создайте файл с именем "SpeedSmeltConfig.json" в папке "oxide/config" с следующим содержимым:

JSON:
{
  "Resources": {
    "metal.ore": 2.0,
    "sulfur.ore": 1.5,
    "wood": 1.0
    // Добавьте сюда другие ресурсы и их скорости плавки по желанию
  }
}

2. Создайте плагин с названием "SpeedSmelt", в котором будет код для ускорения плавки ресурсов:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                {"metal.ore", 2.0},
                {"sulfur.ore", 1.5},
                {"wood", 1.0}
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            string itemName = item.info.shortname;
            if (resourceSpeeds.ContainsKey(itemName))
            {
                oven.cookingFraction *= resourceSpeeds[itemName];
            }
        }

        void OnServerInitialized()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (entity != null)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

Этот плагин позволяет настраивать скорость плавки для каждого ресурса в печках на основе конфигурационного файла "SpeedSmeltConfig.json". При загрузке сервера или появлении новой печки, скорость плавки для каждого ресурса устанавливается в соответствии с настройками из конфига.

Не забудьте добавить плагин в папку "oxide/plugins" и перезагрузить сервер для его активации. Пожалуйста, протестируйте плагин и убедитесь, что он работает корректно.
Добавь функцию смены скорости плавки
 
Добавь функцию смены скорости плавки
Для добавления функции смены скорости плавки ресурсов в печках через команду в игре, вам нужно внести следующие изменения в код плагина:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                {"metal.ore", 2.0},
                {"sulfur.ore", 1.5},
                {"wood", 1.0}
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
            LoadCommands();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            string itemName = item.info.shortname;
            if (resourceSpeeds.ContainsKey(itemName))
            {
                oven.cookingFraction *= resourceSpeeds[itemName];
            }
        }

        void OnServerInitialized()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (entity != null)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }

        private void LoadCommands()
        {
            permission.RegisterPermission("speedsmelt.admin", this);

            cmd.AddChatCommand("setsmeltspeed", this, "CmdSetSmeltSpeed");
        }

        private void CmdSetSmeltSpeed(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, "speedsmelt.admin"))
            {
                SendReply(player, "You don't have permission to use this command.");
                return;
            }

            if (args.Length < 2)
            {
                SendReply(player, "Usage: /setsmeltspeed <resource> <speed>");
                return;
            }

            string resource = args[0];
            float speed;
            if (!float.TryParse(args[1], out speed))
            {
                SendReply(player, "Speed must be a number.");
                return;
            }

            if (resourceSpeeds.ContainsKey(resource))
            {
                resourceSpeeds[resource] = speed;
                SaveConfigValues();
                SendReply(player, $"Speed for resource {resource} set to {speed}.");
            }
            else
            {
                SendReply(player, $"Resource {resource} not found in config.");
            }
        }
    }
}

Теперь вы можете использовать команду "/setsmeltspeed <resource> <speed>", чтобы изменить скорость плавки заданного ресурса в печках. Не забудьте предоставить игрокам необходимое разрешение для использования этой команды ("speedsmelt.admin").

Пожалуйста, добавьте этот обновленный код в ваш плагин "SpeedSmelt", перезагрузите сервер и протестируйте функцию смены скорости плавки.
 
Для добавления функции смены скорости плавки ресурсов в печках через команду в игре, вам нужно внести следующие изменения в код плагина:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                {"metal.ore", 2.0},
                {"sulfur.ore", 1.5},
                {"wood", 1.0}
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
            LoadCommands();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            string itemName = item.info.shortname;
            if (resourceSpeeds.ContainsKey(itemName))
            {
                oven.cookingFraction *= resourceSpeeds[itemName];
            }
        }

        void OnServerInitialized()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (entity != null)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }

        private void LoadCommands()
        {
            permission.RegisterPermission("speedsmelt.admin", this);

            cmd.AddChatCommand("setsmeltspeed", this, "CmdSetSmeltSpeed");
        }

        private void CmdSetSmeltSpeed(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, "speedsmelt.admin"))
            {
                SendReply(player, "You don't have permission to use this command.");
                return;
            }

            if (args.Length < 2)
            {
                SendReply(player, "Usage: /setsmeltspeed <resource> <speed>");
                return;
            }

            string resource = args[0];
            float speed;
            if (!float.TryParse(args[1], out speed))
            {
                SendReply(player, "Speed must be a number.");
                return;
            }

            if (resourceSpeeds.ContainsKey(resource))
            {
                resourceSpeeds[resource] = speed;
                SaveConfigValues();
                SendReply(player, $"Speed for resource {resource} set to {speed}.");
            }
            else
            {
                SendReply(player, $"Resource {resource} not found in config.");
            }
        }
    }
}

Теперь вы можете использовать команду "/setsmeltspeed <resource> <speed>", чтобы изменить скорость плавки заданного ресурса в печках. Не забудьте предоставить игрокам необходимое разрешение для использования этой команды ("speedsmelt.admin").

Пожалуйста, добавьте этот обновленный код в ваш плагин "SpeedSmelt", перезагрузите сервер и протестируйте функцию смены скорости плавки.
Сделай настройку скорости только в конфиге
 
Сделай настройку скорости только в конфиге
Для создания плагина, в котором настройка скорости плавки будет происходить только через конфигурационный файл, а не через команду в игре, вам нужно следовать следующему коду:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                {"metal.ore", 2.0},
                {"sulfur.ore", 1.5},
                {"wood", 1.0}
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            string itemName = item.info.shortname;
            if (resourceSpeeds.ContainsKey(itemName))
            {
                oven.cookingFraction *= resourceSpeeds[itemName];
            }
        }

        void OnServerInitialized()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (entity != null)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

В этом коде скорость плавки для каждого ресурса устанавливается из конфигурационного файла "SpeedSmeltConfig.json", который должен находиться в папке "oxide/config". Помимо этого, скорость плавки применяется при старте сервера и появлении новых печек.

Не забудьте добавить этот код в ваш плагин "SpeedSmelt", перезагрузить сервер и проверить его работоспособность.
 
Для создания плагина, в котором настройка скорости плавки будет происходить только через конфигурационный файл, а не через команду в игре, вам нужно следовать следующему коду:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                {"metal.ore", 2.0},
                {"sulfur.ore", 1.5},
                {"wood", 1.0}
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            string itemName = item.info.shortname;
            if (resourceSpeeds.ContainsKey(itemName))
            {
                oven.cookingFraction *= resourceSpeeds[itemName];
            }
        }

        void OnServerInitialized()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (entity != null)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }

                oven.SendNetworkUpdateImmediate();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

В этом коде скорость плавки для каждого ресурса устанавливается из конфигурационного файла "SpeedSmeltConfig.json", который должен находиться в папке "oxide/config". Помимо этого, скорость плавки применяется при старте сервера и появлении новых печек.

Не забудьте добавить этот код в ваш плагин "SpeedSmelt", перезагрузить сервер и проверить его работоспособность.
Сделай код в лучшую сторону
 
Сделай код в лучшую сторону
Вот обновленный код плагина "SpeedSmelt", который содержит оптимизации и улучшения для лучшей работы:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                { "metal.ore", 2.0 },
                { "sulfur.ore", 1.5 },
                { "wood", 1.0 }
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            if (resourceSpeeds.TryGetValue(item.info.shortname, out float speed))
            {
                oven.cookingFraction *= speed;
            }
        }

        private void ApplySpeedSmelt()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }
                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnServerInitialized()
        {
            ApplySpeedSmelt();
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (oven != null)
            {
                ApplySpeedSmelt();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

Этот код содержит оптимизации, такие как использование TryGetValue для получения значения скорости плавки ресурса, улучшенный метод применения скорости плавки ко всем печкам, а также обновление скорости плавки при каждом появлении новой печки.

Пожалуйста, добавьте этот код в ваш плагин "SpeedSmelt", перезагрузите сервер и проверьте его работоспособность.
 
Вот обновленный код плагина "SpeedSmelt", который содержит оптимизации и улучшения для лучшей работы:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                { "metal.ore", 2.0 },
                { "sulfur.ore", 1.5 },
                { "wood", 1.0 }
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            if (resourceSpeeds.TryGetValue(item.info.shortname, out float speed))
            {
                oven.cookingFraction *= speed;
            }
        }

        private void ApplySpeedSmelt()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }
                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnServerInitialized()
        {
            ApplySpeedSmelt();
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (oven != null)
            {
                ApplySpeedSmelt();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

Этот код содержит оптимизации, такие как использование TryGetValue для получения значения скорости плавки ресурса, улучшенный метод применения скорости плавки ко всем печкам, а также обновление скорости плавки при каждом появлении новой печки.

Пожалуйста, добавьте этот код в ваш плагин "SpeedSmelt", перезагрузите сервер и проверьте его работоспособность.
Исправь код SpeedSmelt.cs(45,69): error CS1644: Feature `declaration expression' cannot be used because it is not part of the C# 6.0 language specification
 
Исправь код SpeedSmelt.cs(45,69): error CS1644: Feature `declaration expression' cannot be used because it is not part of the C# 6.0 language specification
Чтобы избежать ошибки CS1644 "Feature `declaration expression' cannot be used because it is not part of the C# 6.0 language specification", давайте воспользуемся более стандартным синтаксисом для получения значения из словаря. Вот обновленный код с исправлением:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                { "metal.ore", 2.0 },
                { "sulfur.ore", 1.5 },
                { "wood", 1.0 }
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            float speed;
            if (resourceSpeeds.TryGetValue(item.info.shortname, out speed))
            {
                oven.cookingFraction *= speed;
            }
        }

        private void ApplySpeedSmelt()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }
                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnServerInitialized()
        {
            ApplySpeedSmelt();
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (oven != null)
            {
                ApplySpeedSmelt();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

Пожалуйста, используйте этот обновленный код, чтобы избежать ошибки CS1644 и убедитесь, что он работает без проблем.
 
Чтобы избежать ошибки CS1644 "Feature `declaration expression' cannot be used because it is not part of the C# 6.0 language specification", давайте воспользуемся более стандартным синтаксисом для получения значения из словаря. Вот обновленный код с исправлением:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                { "metal.ore", 2.0 },
                { "sulfur.ore", 1.5 },
                { "wood", 1.0 }
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            float speed;
            if (resourceSpeeds.TryGetValue(item.info.shortname, out speed))
            {
                oven.cookingFraction *= speed;
            }
        }

        private void ApplySpeedSmelt()
        {
            foreach (BaseOven oven in BaseOven.ovenList)
            {
                foreach (Item item in oven.inventory.itemList)
                {
                    SetSmeltSpeed(oven, item);
                }
                oven.SendNetworkUpdateImmediate();
            }
        }

        void OnServerInitialized()
        {
            ApplySpeedSmelt();
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            BaseOven oven = entity.GetComponent<BaseOven>();
            if (oven != null)
            {
                ApplySpeedSmelt();
            }
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

Пожалуйста, используйте этот обновленный код, чтобы избежать ошибки CS1644 и убедитесь, что он работает без проблем.
Исправь ошибку Error while compiling: SpeedSmelt.cs(55,48): error CS0117: BaseOven' does not contain a definition for ovenList'
 
Исправь ошибку Error while compiling: SpeedSmelt.cs(55,48): error CS0117: BaseOven' does not contain a definition for ovenList'
Для исправления ошибки CS0117 "BaseOven' does not contain a definition for ovenList'", заменим использование "BaseOven.ovenList" на "BaseNetworkable.serverEntities" для получения всех печек на сервере. Вот обновленный код с исправлением:

C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("SpeedSmelt", "YourName", "1.0.0")]
    class SpeedSmelt : RustPlugin
    {
        private DynamicConfigFile configData;
        private Dictionary<string, float> resourceSpeeds = new Dictionary<string, float>();

        private void LoadDefaultConfig()
        {
            Config["Resources"] = new Dictionary<string, float>
            {
                { "metal.ore", 2.0 },
                { "sulfur.ore", 1.5 },
                { "wood", 1.0 }
                // Добавьте сюда другие ресурсы и их скорости плавки по умолчанию
            };
        }

        private void Init()
        {
            configData = Interface.Oxide.DataFileSystem.GetFile("SpeedSmeltConfig");
            LoadDefaultConfig();
            LoadConfigValues();
        }

        private void LoadConfigValues()
        {
            resourceSpeeds = configData.ReadObject<Dictionary<string, float>>();
        }

        private void SaveConfigValues()
        {
            configData.WriteObject(resourceSpeeds);
        }

        private void SetSmeltSpeed(BaseOven oven, Item item)
        {
            float speed;
            if (resourceSpeeds.TryGetValue(item.info.shortname, out speed))
            {
                oven.cookingFraction *= speed;
            }
        }

        private void ApplySpeedSmelt()
        {
            foreach (BaseNetworkable entity in BaseNetworkable.serverEntities)
            {
                BaseOven oven = entity.GetComponent<BaseOven>();
                if (oven != null)
                {
                    foreach (Item item in oven.inventory.itemList)
                    {
                        SetSmeltSpeed(oven, item);
                    }
                    oven.SendNetworkUpdateImmediate();
                }
            }
        }

        void OnServerInitialized()
        {
            ApplySpeedSmelt();
        }

        void Unload()
        {
            SaveConfigValues();
        }
    }
}

Пожалуйста, используйте этот обновленный код, чтобы исправить ошибку CS0117 и убедитесь, что он работает без проблем.
 
Активность
Пока никто не печатает сообщение