Для реализации отсчета времени до запуска ивента в чате можно использовать функцию отправки сообщений в чат через заданные промежутки времени. Вот обновленный код плагина, который выводит отсчет времени до запуска ивента в чате:
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
вызывает повторяющийся таймер для этого отсчета. Надеюсь, это поможет вам реализовать функциональность отсчета времени до начала ивента. Если у вас есть еще вопросы или пожелания, не стесняйтесь обращаться!