profile picture

Rust プラグインに構成を設定する

Published on 2024/09/16
Tags game rust mod plugin oxide

概要

Rust プラグインに構成を設定し JSON ファイルから設定を読み込みます。

参考情報

関連情報

権限の設定

Rust プラグインのチャットコマンドを実装する で作成した ActivePlayers.cs ファイルに構成を設定します。

  1. ファイルの先頭に名前空間への参照を追加します。

    using Newtonsoft.Json;
    
  2. configuration class を定義し構成クラスへの参照となるフィールドを定義します。

    private Configuration _configuration;
    
    private class Configuration
    {
        public string ActivePlayerNameMessage;
    }
    
  3. デフォルトの設定値を使用して新しいプラグイン設定を作成します。

    private Configuration GetDefaultConfig()
    {
        return new Configuration
        {
            ActivePlayerNameMessage = "Active Player: {0}"
        };
    }
    
  4. 既存のプラグイン設定ファイルをロードします。設定ファイルが見つからない場合は、 LoadDefaultConfig メソッドを呼び出して作成します。

    protected override void LoadConfig()
    {
        base.LoadConfig();
    
        try
        {
            _configuration = Config.ReadObject<Configuration>();
    
            if (_configuration == null)
                LoadDefaultConfig();
        }
        catch
        {
            PrintError("Configuration file is corrupt! Check your config file at https://jsonlint.com/");
            LoadDefaultConfig();
            return;
        }
    
        SaveConfig();
    }
    
    protected override void LoadDefaultConfig() => _configuration = GetDefaultConfig();
    
  5. プラグインの設定を oxide/config ディレクトリの JSON ファイルに書き込みます。

    protected override void SaveConfig() => Config.WriteObject(_configuration);
    
  6. チャットコマンドを実行して表示するメッセージを設定ファイルから取得します。

    PrintToChat(player, string.Format(_configuration.ActivePlayerNameMessage, activePlayer.displayName));
    
  7. 全てのソースコードは次の通りです。

    using Newtonsoft.Json;
    
    namespace Oxide.Plugins
    {
        [Info("Active Players", "Unknown Author", "0.1.0")]
        [Description("This plugin displays all active usernames in the chat.")]
        class ActivePlayers : RustPlugin
        {
            private Configuration _configuration;
    
            private class Configuration
            {
                public string ActivePlayerNameMessage;
            }
    
            private Configuration GetDefaultConfig()
            {
                return new Configuration
                {
                    ActivePlayerNameMessage = "Active Player: {0}"
                };
            }
    
            protected override void LoadConfig()
            {
                base.LoadConfig();
    
                try
                {
                    _configuration = Config.ReadObject<Configuration>();
    
                    if (_configuration == null)
                        LoadDefaultConfig();
                }
                catch
                {
                    PrintError("Configuration file is corrupt! Check your config file at https://jsonlint.com/");
                    LoadDefaultConfig();
                    return;
                }
    
                SaveConfig();
            }
    
            protected override void LoadDefaultConfig() => _configuration = GetDefaultConfig();
            protected override void SaveConfig() => Config.WriteObject(_configuration);
    
            void Init()
            {
            }
    
            [ChatCommand("activeplayers")]
            void ActivePlayersCommand(BasePlayer player, string command, string[] args)
            {
                foreach (BasePlayer activePlayer in BasePlayer.activePlayerList)
                {
                    PrintToChat(player, string.Format(_configuration.ActivePlayerNameMessage, activePlayer.displayName));
                }
            }
        }
    }