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

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

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

GPT-3.5 Turbo Бот

Нейросеть GPT-3.5 Turbo доступна всем пользователям. Для доступа к GPT-4 Turbo необходимо приобрести «Prime».
Конечно, вот улучшенный и оформленный код плагина для Rust на языке C#, который реализует рандомное выдачу подарков игрокам и вывод их имен после розыгрыша:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();

        void OnServerInitialized()
        {
            timer.Once(300f, StartRandomGiftEvent); // Запуск ивента через 5 минут (300 секунд)
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = BasePlayer.activePlayerList;
            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            Puts("***** Победители ивента 'Рандомный Подарок': *****");
            PrintWinningPlayers();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }

        void PrintWinningPlayers()
        {
            foreach (string playerName in winningPlayers)
            {
                Puts(playerName);
            }
        }
    }
}

Этот код устанавливает таймер для запуска ивента через 5 минут после инициализации сервера. После розыгрыша выводится сообщение о начале ивента, а затем имена игроков-победителей. Надеюсь, этот код соответствует вашим требованиям. Если у вас есть еще какие-либо запросы или вопросы, не стесняйтесь обращаться!
Исправь RandomGiftEvent.cs(25,51): error CS0029: Cannot implicitly convert type `ListHashSet<BasePlayer>' to `System.Collections.Generic.List<BasePlayer>'
 
Исправь RandomGiftEvent.cs(25,51): error CS0029: Cannot implicitly convert type `ListHashSet<BasePlayer>' to `System.Collections.Generic.List<BasePlayer>'
Конечно, чтобы устранить ошибку CS0029, необходимо изменить тип данных переменной selectedPlayers с List<BasePlayer> на HashSet<BasePlayer>. Вот исправленный код:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();

        void OnServerInitialized()
        {
            timer.Once(300f, StartRandomGiftEvent); // Запуск ивента через 5 минут (300 секунд)
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            Puts("***** Победители ивента 'Рандомный Подарок': *****");
            PrintWinningPlayers();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }

        void PrintWinningPlayers()
        {
            foreach (string playerName in winningPlayers)
            {
                Puts(playerName);
            }
        }
    }
}

Теперь переменная selectedPlayers имеет тип HashSet<BasePlayer>, что позволяет избежать ошибки CS0029. Надеюсь, это решит проблему. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться!
 
Конечно, чтобы устранить ошибку CS0029, необходимо изменить тип данных переменной selectedPlayers с List<BasePlayer> на HashSet<BasePlayer>. Вот исправленный код:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();

        void OnServerInitialized()
        {
            timer.Once(300f, StartRandomGiftEvent); // Запуск ивента через 5 минут (300 секунд)
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            Puts("***** Победители ивента 'Рандомный Подарок': *****");
            PrintWinningPlayers();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }

        void PrintWinningPlayers()
        {
            foreach (string playerName in winningPlayers)
            {
                Puts(playerName);
            }
        }
    }
}

Теперь переменная selectedPlayers имеет тип HashSet<BasePlayer>, что позволяет избежать ошибки CS0029. Надеюсь, это решит проблему. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться!
Сделай вывод через сколько ивент будет запущен в чате если 5 секунд то будет отсчёт осталось 5 4 3 2 1
 
Сделай вывод через сколько ивент будет запущен в чате если 5 секунд то будет отсчёт осталось 5 4 3 2 1
Для реализации отсчета времени до запуска ивента в чате можно использовать функцию отправки сообщений в чат через заданные промежутки времени. Вот обновленный код плагина, который выводит отсчет времени до запуска ивента в чате:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();
        private int countdown = 5; // Начальное значение для отсчета времени

        void OnServerInitialized()
        {
            timer.Repeat(1f, 5, StartCountdown); // Запуск отсчета времени 5 секунд
        }

        void StartCountdown()
        {
            if (countdown > 0)
            {
                PrintToChat($"До начала ивента осталось: {countdown}");
                countdown--;
            }
            else
            {
                StartRandomGiftEvent();
            }
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            Puts("***** Победители ивента 'Рандомный Подарок': *****");
            PrintWinningPlayers();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }

        void PrintWinningPlayers()
        {
            foreach (string playerName in winningPlayers)
            {
                Puts(playerName);
            }
        }
    }
}

В этом коде добавлен метод StartCountdown, который отвечает за отсчет времени в чате, и метод OnServerInitialized вызывает повторяющийся таймер для этого отсчета. Надеюсь, это поможет вам реализовать функциональность отсчета времени до начала ивента. Если у вас есть еще вопросы или пожелания, не стесняйтесь обращаться!
 
Для реализации отсчета времени до запуска ивента в чате можно использовать функцию отправки сообщений в чат через заданные промежутки времени. Вот обновленный код плагина, который выводит отсчет времени до запуска ивента в чате:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();
        private int countdown = 5; // Начальное значение для отсчета времени

        void OnServerInitialized()
        {
            timer.Repeat(1f, 5, StartCountdown); // Запуск отсчета времени 5 секунд
        }

        void StartCountdown()
        {
            if (countdown > 0)
            {
                PrintToChat($"До начала ивента осталось: {countdown}");
                countdown--;
            }
            else
            {
                StartRandomGiftEvent();
            }
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            Puts("***** Победители ивента 'Рандомный Подарок': *****");
            PrintWinningPlayers();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }

        void PrintWinningPlayers()
        {
            foreach (string playerName in winningPlayers)
            {
                Puts(playerName);
            }
        }
    }
}

В этом коде добавлен метод StartCountdown, который отвечает за отсчет времени в чате, и метод OnServerInitialized вызывает повторяющийся таймер для этого отсчета. Надеюсь, это поможет вам реализовать функциональность отсчета времени до начала ивента. Если у вас есть еще вопросы или пожелания, не стесняйтесь обращаться!
Доработай через сколько осталось до ивента чтобы когда было 1 ивент запускался и писалось ищем рандомного игрока для получения приза
 
Доработай через сколько осталось до ивента чтобы когда было 1 ивент запускался и писалось ищем рандомного игрока для получения приза
Для доработки функциональности, чтобы ивент запускался при отсчете времени до 1 и выводилось сообщение "Ищем рандомного игрока для получения приза", можно внести следующие изменения в код:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();
        private int countdown = 5; // Начальное значение для отсчета времени

        void OnServerInitialized()
        {
            timer.Repeat(1f, 5, StartCountdown); // Запуск отсчета времени 5 секунд
        }

        void StartCountdown()
        {
            if (countdown > 1)
            {
                PrintToChat($"До начала ивента осталось: {countdown}");
                countdown--;
            }
            else if (countdown == 1)
            {
                PrintToChat("Ищем рандомного игрока для получения приза");
                countdown--;
            }
            else
            {
                StartRandomGiftEvent();
            }
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            Puts("***** Победители ивента 'Рандомный Подарок': *****");
            PrintWinningPlayers();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }

        void PrintWinningPlayers()
        {
            foreach (string playerName in winningPlayers)
            {
                Puts(playerName);
            }
        }
    }
}

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

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();
        private int countdown = 5; // Начальное значение для отсчета времени

        void OnServerInitialized()
        {
            timer.Repeat(1f, 5, StartCountdown); // Запуск отсчета времени 5 секунд
        }

        void StartCountdown()
        {
            if (countdown > 1)
            {
                PrintToChat($"До начала ивента осталось: {countdown}");
                countdown--;
            }
            else if (countdown == 1)
            {
                PrintToChat("Ищем рандомного игрока для получения приза");
                countdown--;
            }
            else
            {
                StartRandomGiftEvent();
            }
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            Puts("***** Победители ивента 'Рандомный Подарок': *****");
            PrintWinningPlayers();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }

        void PrintWinningPlayers()
        {
            foreach (string playerName in winningPlayers)
            {
                Puts(playerName);
            }
        }
    }
}

В этом обновленном коде добавлено условие для вывода сообщения "Ищем рандомного игрока для получения приза" при отсчете времени до 1. После этого ивент запускается и происходит выдача подарков случайным игрокам. Надеюсь, это поможет вам реализовать нужную функциональность. Если у вас есть еще вопросы или пожелания, не стесняйтесь обращаться!
Сделай что-бы в чат писало кто выиграл
 
Сделай что-бы в чат писало кто выиграл
Чтобы выводить в чат сообщение о том, кто выиграл в розыгрыше, можно модифицировать код следующим образом:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();
        private int countdown = 5; // Начальное значение для отсчета времени

        void OnServerInitialized()
        {
            timer.Repeat(1f, 5, StartCountdown); // Запуск отсчета времени 5 секунд
        }

        void StartCountdown()
        {
            if (countdown > 1)
            {
                PrintToChat($"До начала ивента осталось: {countdown}");
                countdown--;
            }
            else if (countdown == 1)
            {
                PrintToChat("Ищем рандомного игрока для получения приза");
                countdown--;
            }
            else
            {
                StartRandomGiftEvent();
            }
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }
            PrintToChat(winnersString);
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }
    }
}

В этом обновленном коде после завершения розыгрыша происходит формирование строки с именами победителей, которая затем выводится в чат с помощью функции PrintToChat(). Теперь сообщение о победителях будет отображаться в чате. Надеюсь, это решит вашу задачу. Если у вас есть еще вопросы или нужна дополнительная помощь, пожалуйста, дайте знать!
 
Чтобы выводить в чат сообщение о том, кто выиграл в розыгрыше, можно модифицировать код следующим образом:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();
        private int countdown = 5; // Начальное значение для отсчета времени

        void OnServerInitialized()
        {
            timer.Repeat(1f, 5, StartCountdown); // Запуск отсчета времени 5 секунд
        }

        void StartCountdown()
        {
            if (countdown > 1)
            {
                PrintToChat($"До начала ивента осталось: {countdown}");
                countdown--;
            }
            else if (countdown == 1)
            {
                PrintToChat("Ищем рандомного игрока для получения приза");
                countdown--;
            }
            else
            {
                StartRandomGiftEvent();
            }
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }
            PrintToChat(winnersString);
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }
    }
}

В этом обновленном коде после завершения розыгрыша происходит формирование строки с именами победителей, которая затем выводится в чат с помощью функции PrintToChat(). Теперь сообщение о победителях будет отображаться в чате. Надеюсь, это решит вашу задачу. Если у вас есть еще вопросы или нужна дополнительная помощь, пожалуйста, дайте знать!
Убери таймер когда будет запущен ивент сделай автоматический ивент каждые 10 секунд
 
Убери таймер когда будет запущен ивент сделай автоматический ивент каждые 10 секунд
Для того чтобы изменить код плагина так, чтобы ивент запускался автоматически каждые 10 секунд без необходимости запуска таймера, вам нужно удалить логику таймера и вместо этого вызывать ивент каждые 10 секунд. Вот обновленный код плагина с обновленной логикой запуска ивента каждые 10 секунд:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                StartRandomGiftEvent();
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }
            PrintToChat(winnersString);
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }
    }
}

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

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private Dictionary<ulong, int> playerGiftCount = new Dictionary<ulong, int>();
        private List<string> winningPlayers = new List<string>();

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                StartRandomGiftEvent();
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            HashSet<BasePlayer> selectedPlayers = new HashSet<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }
            PrintToChat(winnersString);
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);

            switch (randomGift)
            {
                case 1:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773650), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 2:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773649), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
                case 3:
                    player.GiveItem(ItemManager.CreateByItemID(-1692773648), BaseEntity.GiveItemReason.PickedUp);
                    winningPlayers.Add(player.displayName);
                    break;
            }
        }
    }
}

В этом обновленном коде был удален предыдущий таймер, и теперь ивент "Рандомный Подарок" будет запускаться автоматически каждые 10 секунд после инициализации сервера. Надеюсь, это поможет вам реализовать нужную функциональность. Если у вас есть дополнительные вопросы или пожелания, не стесняйтесь обращаться!
Не работает выдача переделай полностью плагин
 
Не работает выдача переделай полностью плагин
Конечно, давайте перепишем плагин полностью, чтобы исправить проблему с выдачей подарков. Вот обновленный код плагина, где исправлена логика выдачи подарков:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private List<string> winningPlayers = new List<string>();

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                StartRandomGiftEvent();
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }
            PrintToChat(winnersString);

            winningPlayers.Clear();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                player.inventory.GiveItem(item);
                winningPlayers.Add(player.displayName);
            }
        }
    }
}

Этот код улучшен и исправлен для правильной выдачи подарков игрокам. Теперь после завершения ивента будет отображаться сообщение с именами победителей. Надеюсь, этот код поможет решить проблему с выдачей подарков. Если у вас есть еще вопросы или нужна дополнительная помощь, не стесняйтесь обращаться!
 
Конечно, давайте перепишем плагин полностью, чтобы исправить проблему с выдачей подарков. Вот обновленный код плагина, где исправлена логика выдачи подарков:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private List<string> winningPlayers = new List<string>();

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                StartRandomGiftEvent();
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                if (!selectedPlayers.Contains(randomPlayer))
                {
                    selectedPlayers.Add(randomPlayer);
                    players.RemoveAt(randomIndex);
                }
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }
            PrintToChat(winnersString);

            winningPlayers.Clear();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                player.inventory.GiveItem(item);
                winningPlayers.Add(player.displayName);
            }
        }
    }
}

Этот код улучшен и исправлен для правильной выдачи подарков игрокам. Теперь после завершения ивента будет отображаться сообщение с именами победителей. Надеюсь, этот код поможет решить проблему с выдачей подарков. Если у вас есть еще вопросы или нужна дополнительная помощь, не стесняйтесь обращаться!
СДЕЛАЙ так что-бы один раз писало кто выиграл и ники игрока кто победил
 
СДЕЛАЙ так что-бы один раз писало кто выиграл и ники игрока кто победил
Для того чтобы плагин RandomGiftPlugin выводил в чат один раз информацию о победителе и именах игроков, которые победили, внесем соответствующие изменения в код:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private HashSet<string> winningPlayers = new HashSet<string>();
        private bool eventRunning = false;

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                if (!eventRunning)
                {
                    StartRandomGiftEvent();
                }
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
            
            if (players.Count < 3)
            {
                Puts("Недостаточно игроков для проведения ивента.");
                return;
            }

            eventRunning = true;

            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                selectedPlayers.Add(randomPlayer);
                players.RemoveAt(randomIndex);
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                player.inventory.GiveItem(item);
                winningPlayers.Add(player.displayName);
            }
        }

        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (eventRunning && winningPlayers.Contains(player.displayName))
            {
                PrintToChat($"Игрок {player.displayName} выиграл и получил приз!");
                winningPlayers.Remove(player.displayName);
            }

            if (winningPlayers.Count == 0)
            {
                eventRunning = false;
            }
        }
    }
}

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

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private HashSet<string> winningPlayers = new HashSet<string>();
        private bool eventRunning = false;

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                if (!eventRunning)
                {
                    StartRandomGiftEvent();
                }
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
           
            if (players.Count < 3)
            {
                Puts("Недостаточно игроков для проведения ивента.");
                return;
            }

            eventRunning = true;

            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                selectedPlayers.Add(randomPlayer);
                players.RemoveAt(randomIndex);
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                player.inventory.GiveItem(item);
                winningPlayers.Add(player.displayName);
            }
        }

        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (eventRunning && winningPlayers.Contains(player.displayName))
            {
                PrintToChat($"Игрок {player.displayName} выиграл и получил приз!");
                winningPlayers.Remove(player.displayName);
            }

            if (winningPlayers.Count == 0)
            {
                eventRunning = false;
            }
        }
    }
}

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

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private HashSet<string> winningPlayers = new HashSet<string>();
        private bool eventRunning = false;

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                if (!eventRunning)
                {
                    StartRandomGiftEvent();
                }
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
           
            if (players.Count < 3)
            {
                Puts("Недостаточно игроков для проведения ивента.");
                return;
            }

            eventRunning = true;

            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                selectedPlayers.Add(randomPlayer);
                players.RemoveAt(randomIndex);
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                if (player.inventory != null)
                {
                    player.inventory.GiveItem(item);
                    winningPlayers.Add(player.displayName);
                }
                else
                {
                    Puts($"Ошибка: Игрок {player.displayName} не имеет инвентаря.");
                }
            }
        }

        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (eventRunning && winningPlayers.Contains(player.displayName))
            {
                PrintToChat($"Игрок {player.displayName} выиграл и получил приз!");
                winningPlayers.Remove(player.displayName);
            }

            if (winningPlayers.Count == 0)
            {
                eventRunning = false;
            }
        }
    }
}

В этом обновленном коде добавлена проверка наличия инвентаря у игрока перед выдачей предмета. Теперь плагин должен корректно выдавать предметы победителям. Попробуйте использовать этот код и проверьте, работает ли теперь выдача предметов как ожидается. Если у вас возникнут дополнительные вопросы или потребуется еще помощь, не стесняйтесь обращаться!
 
П
Для исправления проблемы с выдачей предметов в плагине RandomGiftPlugin, внесем соответствующие изменения в код. Мы также добавим проверку наличия инвентаря у игрока перед выдачей предмета. Вот обновленный код плагина с исправленной логикой выдачи предметов:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private HashSet<string> winningPlayers = new HashSet<string>();
        private bool eventRunning = false;

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                if (!eventRunning)
                {
                    StartRandomGiftEvent();
                }
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);
          
            if (players.Count < 3)
            {
                Puts("Недостаточно игроков для проведения ивента.");
                return;
            }

            eventRunning = true;

            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                selectedPlayers.Add(randomPlayer);
                players.RemoveAt(randomIndex);
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                if (player.inventory != null)
                {
                    player.inventory.GiveItem(item);
                    winningPlayers.Add(player.displayName);
                }
                else
                {
                    Puts($"Ошибка: Игрок {player.displayName} не имеет инвентаря.");
                }
            }
        }

        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (eventRunning && winningPlayers.Contains(player.displayName))
            {
                PrintToChat($"Игрок {player.displayName} выиграл и получил приз!");
                winningPlayers.Remove(player.displayName);
            }

            if (winningPlayers.Count == 0)
            {
                eventRunning = false;
            }
        }
    }
}

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

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private List<string> winningPlayers = new List<string>();
        private bool eventRunning = false;

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                if (!eventRunning)
                {
                    StartRandomGiftEvent();
                }
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);

            if (players.Count < 3)
            {
                Puts("Недостаточно игроков для проведения ивента.");
                return;
            }

            eventRunning = true;

            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                selectedPlayers.Add(randomPlayer);
                players.RemoveAt(randomIndex);
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }
            
            PrintToChat(winnersString);
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                player.GiveItem(item, BaseEntity.GiveItemReason.PickedUp);
                winningPlayers.Add(player.displayName);
            }
        }
    }
}

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

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private List<string> winningPlayers = new List<string>();
        private bool eventRunning = false;

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                if (!eventRunning)
                {
                    StartRandomGiftEvent();
                }
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);

            if (players.Count < 3)
            {
                Puts("Недостаточно игроков для проведения ивента.");
                return;
            }

            eventRunning = true;

            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                selectedPlayers.Add(randomPlayer);
                players.RemoveAt(randomIndex);
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }
           
            PrintToChat(winnersString);
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                player.GiveItem(item, BaseEntity.GiveItemReason.PickedUp);
                winningPlayers.Add(player.displayName);
            }
        }
    }
}

В этом обновленном коде добавлена корректная выдача предметов игрокам и вывод в чат информации о победителях. Теперь при запуске ивента "Рандомный Подарок" каждые 10 секунд будет происходить выдача случайных предметов игрокам, а затем в чат будет отправлено сообщение с именами победителей. Попробуйте использовать этот код и проверьте его работоспособность. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, не стесняйтесь обращаться!
Доделай победителей и выдачу предметов игрокам
 
Доделай победителей и выдачу предметов игрокам
Давайте внесем необходимые изменения в код плагина RandomGiftPlugin, чтобы доработать логику выдачи предметов игрокам и корректный вывод победителей в чат. Обновленный код будет представлен ниже:

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

namespace Oxide.Plugins
{
    [Info("RandomGiftPlugin", "YourName", "1.0.0")]
    class RandomGiftPlugin : RustPlugin
    {
        private List<string> winningPlayers = new List<string>();
        private bool eventRunning = false;

        void OnServerInitialized()
        {
            timer.Every(10f, () =>
            {
                if (!eventRunning)
                {
                    StartRandomGiftEvent();
                }
            });
        }

        void StartRandomGiftEvent()
        {
            Puts("***** Ивент 'Рандомный Подарок' начался *****");

            List<BasePlayer> players = new List<BasePlayer>(BasePlayer.activePlayerList);

            if (players.Count < 3)
            {
                Puts("Недостаточно игроков для проведения ивента.");
                return;
            }

            eventRunning = true;

            List<BasePlayer> selectedPlayers = new List<BasePlayer>();

            while (selectedPlayers.Count < 3 && players.Count > 0)
            {
                int randomIndex = UnityEngine.Random.Range(0, players.Count);
                BasePlayer randomPlayer = players[randomIndex];

                selectedPlayers.Add(randomPlayer);
                players.RemoveAt(randomIndex);
            }

            foreach (BasePlayer player in selectedPlayers)
            {
                GiveRandomGift(player);
            }

            string winnersString = "***** Победители ивента 'Рандомный Подарок': *****\n";
            foreach (string playerName in winningPlayers)
            {
                winnersString += playerName + "\n";
            }

            PrintToChat(winnersString);
            winningPlayers.Clear();
        }

        void GiveRandomGift(BasePlayer player)
        {
            int randomGift = UnityEngine.Random.Range(1, 4);
            Item item = null;

            switch (randomGift)
            {
                case 1:
                    item = ItemManager.CreateByItemID(-1692773650);
                    break;
                case 2:
                    item = ItemManager.CreateByItemID(-1692773649);
                    break;
                case 3:
                    item = ItemManager.CreateByItemID(-1692773648);
                    break;
            }

            if (item != null)
            {
                player.GiveItem(item, BaseEntity.GiveItemReason.PickedUp);
                winningPlayers.Add(player.displayName);
            }
        }
    }
}

Теперь код плагина RandomGiftPlugin был обновлен для корректной выдачи предметов игрокам при запуске ивента "Рандомный Подарок" и вывода их имен в чат как победителей. После вывода информации о победителях список победителей также очищается для следующего розыгрыша. Попробуйте использовать этот код и проверьте его работоспособность. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, не стесняйтесь обращаться!
 
Активность
Пока никто не печатает сообщение