C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using Network;
using Newtonsoft.Json;
namespace Oxide.Plugins
{
[Info("Command Splitter", "birthdates", "1.0.1")]
[Description("Split one client command into multiple")]
public class CommandSplitter : CovalencePlugin
{
#region Variables
private const string UsePermission = "commandsplitter.use";
#endregion
#region Helpers
/// <summary>
/// Send console reply to <paramref name="connection" />
/// </summary>
/// <param name="connection">Target connection</param>
/// <param name="reply">String reply</param>
private static void SendReply(Connection connection, string reply)
{
if (string.IsNullOrEmpty(reply) || !Net.sv.IsConnected()) return;
using (NetWrite write = Net.sv.StartWrite())
{
write.PacketID(Message.Type.ConsoleMessage);
write.String(reply);
write.Send(new SendInfo(connection));
}
}
#endregion
#region Hooks
/// <summary>
/// On client command, split it into multiple
/// </summary>
/// <param name="connection">Target connection</param>
/// <param name="command">Target command(s)</param>
/// <returns>True, if we should cancel.Null, if we shouldn't</returns>
private object OnClientCommand(Connection connection, string command)
{
var player = connection.player as BasePlayer;
if (player == null || !player.IPlayer.HasPermission(UsePermission)) return null;
var commands = command.Split(_config.Separator.ToCharArray());
foreach (var cmd in commands)
{
var trim = cmd.Trim();
if (string.IsNullOrEmpty(trim)) continue;
var reply = ConsoleSystem.Run(ConsoleSystem.Option.Server.FromConnection(connection).Quiet(), trim,
Array.Empty<object>());
SendReply(connection, reply);
}
return true;
}
private void Init()
{
permission.RegisterPermission(UsePermission, this);
}
#endregion
#region Configuration
private ConfigFile _config;
public class ConfigFile
{
[JsonProperty("Command Separator")] public string Separator { get; set; }
public static ConfigFile DefaultConfig()
{
return new ConfigFile
{
Separator = ";"
};
}
}
protected override void LoadConfig()
{
base.LoadConfig();
_config = Config.ReadObject<ConfigFile>();
if (_config == null) LoadDefaultConfig();
}
protected override void LoadDefaultConfig()
{
_config = ConfigFile.DefaultConfig();
PrintWarning("Default configuration has been loaded.");
}
protected override void SaveConfig()
{
Config.WriteObject(_config);
}
#endregion
}
}