Иконка ресурса

FREE AutoCommands : 2.0.1 2.0.1

Нет прав для скачивания
C#:
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
namespace Oxide.Plugins {
    [Info("Auto Commands", "Wulf", "2.0.1")]
    [Description("Automatically runs configured commands on player and server events")]
    public class AutoCommands : CovalencePlugin {
#region Configuration
        private Configuration config;
        public class Configuration {
            [JsonProperty("Run commands on player connect")]
            public bool RunCommandsOnConnect = false;
            [JsonProperty("Commands on connect", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<string> ConnectCommands = new List<string> {
                "examplecmd $player.id", "example.cmd"
            }
            ;
            [JsonProperty("Run commands on player disconnect")]
            public bool RunCommandsOnDisconnect = false;
            [JsonProperty("Commands on disconnect", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<string> DisconnectCommands = new List<string> {
                "examplecmd", "example.cmd \"text example\""
            }
            ;
            [JsonProperty("Run commands on server startup")]
            public bool RunCommandsOnStartup = false;
            [JsonProperty("Commands on server startup", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<string> StartupCommands = new List<string> {
                "examplecmd $server.name", "example.cmd"
            }
            ;
#if HURTWORLD || RUST
            [JsonProperty("Run commands on server wipe")]
            public bool RunCommandsOnWipe = false;
            [JsonProperty("Commands on server wipe", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<string> WipeCommands = new List<string> {
                "examplecmd arg", "example.cmd \"text example\""
            }
            ;
#endif
            public string ToJson() => JsonConvert.SerializeObject(this);
            public Dictionary<string, object> ToDictionary() => JsonConvert.DeserializeObject<Dictionary<string, object>>(ToJson());
        }
        protected override void LoadDefaultConfig() => config = new Configuration();
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) {
                    throw new JsonException();
                }
                if (!config.ToDictionary().Keys.SequenceEqual(Config.ToDictionary(x => x.Key, x => x.Value).Keys)) {
                    LogWarning("Configuration appears to be outdated; updating and saving");
                    SaveConfig();
                }
            }
            catch {
                LogWarning($"Configuration file {Name}.json is invalid; using defaults");
                LoadDefaultConfig();
            }
        }
        protected override void SaveConfig() {
            Log($"Configuration changes saved to {Name}.json");
            Config.WriteObject(config, true);
        }
#endregion Configuration
#region Initialization
        private void Init() {
            if (!config.RunCommandsOnConnect) {
                Unsubscribe(nameof(OnUserConnected));
            }
            if (!config.RunCommandsOnDisconnect) {
                Unsubscribe(nameof(OnUserDisconnected));
            }
            if (!config.RunCommandsOnStartup) {
                Unsubscribe(nameof(OnServerInitialized));
            }
#if HURTWORLD || RUST
            if (!config.RunCommandsOnWipe) {
                Unsubscribe(nameof(OnNewSave));
            }
#endif
        }
#endregion Initialization
#region Player Commands
        private void OnUserConnected(IPlayer player) {
            foreach (string command in config.ConnectCommands) {
                ProcessCommand(command, player);
            }
        }
        private void OnUserDisconnected(IPlayer player) {
            foreach (string command in config.DisconnectCommands) {
                ProcessCommand(command, player);
            }
        }
#endregion Player Commands
#region Server Commands
        private void OnServerInitialized() {
            foreach (string command in config.StartupCommands) {
                ProcessCommand(command);
            }
        }
#if HURTWORLD || RUST
        private void OnNewSave() {
            foreach (string command in config.WipeCommands) {
                ProcessCommand(command);
            }
        }
#endif
#endregion Server Commands
#region Helpers
        private void ProcessCommand(string command, IPlayer player = null) {
            if (!command.StartsWith("examplecmd") && !command.StartsWith("example.cmd")) {
                server.Command(ReplacePlaceholders(command, player));
            }
        }
        private string ReplacePlaceholders(string command, IPlayer player = null) {
            if (player != null) {
                command = command.Replace("$player.id", player.Id).Replace("$player.name", player.Name).Replace("$player.ip", player.Address).Replace("$player.language", player.Language.TwoLetterISOLanguageName).Replace("$player.ping", player.Ping.ToString()).Replace("$player.position", player.Position().ToString());
            }
            return command.Replace("$server.name", server.Name).Replace("$server.ip", server.Address.ToString()).Replace("$server.port", server.Port.ToString()).Replace("$server.players", server.Players.ToString()).Replace("$server.language", server.Language.TwoLetterISOLanguageName).Replace("$server.maxplayers", server.MaxPlayers.ToString()).Replace("$server.protocol", server.Protocol).Replace("$server.version", server.Version);
        }
#endregion Helpers
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху