C#:
using System;
using System.Collections.Generic;
using System.Globalization;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Core.Libraries.Covalence;
using Rust;
// ____ _ _ _
// / ___|(_) __ _(_) | ___
// \___ \| |/ _` | | |/ _ \
// ___) | | (_| | | | (_) |
// |____/|_|\__, |_|_|\___/
// |___/
// ☽✧✵✧✵✧✵✧✵✧✵✧✵✧☾
// ✦ RUST PLUGINS ✦
// ✦ Discord:sigil0 ✦
// ☽✧✵✧✵✧✵✧✵✧✵✧✵✧☾
namespace Oxide.Plugins
{
[Info("ServerRedirect", "Sigilo", "1.0.1")]
[Description("Redirects players to another server with a delay and message")]
public class ServerRedirect : CovalencePlugin
{
private string targetServerIP;
private int targetServerPort;
private string redirectMessage;
private int redirectDelay;
private Dictionary<string, Timer> playerTimers = new Dictionary<string, Timer>();
private void Init()
{
LoadConfig();
}
protected override void LoadDefaultConfig()
{
Config["TargetServerIP"] = "0.0.0.0";
Config["TargetServerPort"] = 00000;
Config["RedirectDelay"] = 10;
Config["RedirectMessage"] = "This server has moved IP, you will be redirected in {0} seconds.";
}
protected new void LoadConfig()
{
try
{
targetServerIP = Config.Get<string>("TargetServerIP");
targetServerPort = Config.Get<int>("TargetServerPort");
redirectDelay = Config.Get<int>("RedirectDelay");
string messageTemplate = Config.Get<string>("RedirectMessage");
redirectMessage = string.Format(messageTemplate, redirectDelay);
}
catch (Exception ex)
{
PrintError($"Error loading config: {ex.Message}");
throw;
}
SaveConfig();
}
protected new void SaveConfig()
{
Config["TargetServerIP"] = targetServerIP;
Config["TargetServerPort"] = targetServerPort;
Config["RedirectDelay"] = redirectDelay;
Config["RedirectMessage"] = $"This server has moved IP, you will be redirected in {{0}} seconds.";
Config.Save();
}
private void OnPlayerConnected(BasePlayer player)
{
player.ChatMessage(redirectMessage);
timer.Once(redirectDelay, () => RedirectPlayer(player));
}
private void OnPlayerDisconnected(BasePlayer player)
{
}
private void RedirectPlayer(BasePlayer player)
{
ConsoleNetwork.SendClientCommandImmediate(player.Connection, "nexus.redirect", new object[] { targetServerIP, targetServerPort, "" });
}
}
}