profile picture

Rust プラグインのデータファイルを使用する

Published on 2024/10/01
Tags game rust mod plugin oxide

概要

Rust プラグインのデータファイルを使用して任意のデータを保存します。

参考情報

関連情報

データファイルの使用

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

    using Oxide.Core.Configuration;
    
  2. データファイルのフィールドを作成します。

    DynamicConfigFile dataFile;
    
  3. データファイル oxide/data/MyDataFile.json がすでに存在する場合はロードします。データファイルが存在しない場合は作成します。

    dataFile = Core.Interface.Oxide.DataFileSystem.GetDatafile("MyDataFile");
    
  4. データファイルにデータを保存します。

    dataFile["EpicString"] = "EpicValue";
    dataFile["EpicNumber"] = 42;
    
    dataFile.Save();
    
  5. データファイル oxide/data/MyDataFile.json の内容は次の通りです。

    {
        "EpicNumber": 42,
        "EpicString": "EpicValue"
    }
    
  6. データファイルからデータを取得します。

    // Check if the EpicString exists
    if (dataFile["EpicString"] != null)
    {
        Puts(dataFile["EpicString"] as string); // Outputs: EpicValue
    }
    
    // Check if the EpicNumber exists
    if (dataFile["EpicNumber"] != null)
    {
        Puts(dataFile["EpicNumber"] as string); // Outputs: 42
    }
    

プラグインの初期化時にデータファイルを作成し、初期化終了時にデータファイルの保存、取得を行う例です。

using Oxide.Core.Configuration;

namespace Oxide.Plugins
{
    [Info("DataFiles", "st-little", "0.1.0")]
    [Description("DataFiles")]
    public class DataFiles : RustPlugin
    {
        DynamicConfigFile dataFile;

        #region Oxide Hooks

        private void Init()
        {
            // データファイルの作成
            dataFile = Core.Interface.Oxide.DataFileSystem.GetDatafile("MyDataFile");
        }

        private void OnServerInitialized()
        {
            // データファイルの保存
            dataFile["EpicString"] = "EpicValue";
            dataFile["EpicNumber"] = 42;

            dataFile.Save();

            // データファイルの取得
            // Check if the EpicString exists
            if (dataFile["EpicString"] != null)
            {
                Puts(dataFile["EpicString"] as string); // Outputs: EpicValue
            }

            // Check if the EpicNumber exists
            if (dataFile["EpicNumber"] != null)
            {
                Puts(dataFile["EpicNumber"] as string); // Outputs: 42
            }
        }

        #endregion
    }
}

データオブジェクトの使用

  1. データオブジェクトのクラスを作成します。

    private class StoredData
    {
        public int EpicNumber;
        public string EpicString;
    
        public StoredData()
        {
        }
    }
    
  2. データオブジェクトのフィールドを作成します。

    private StoredData storedData;
    
  3. データファイル oxide/data/MyDataFile.json がすでに存在する場合はロードします。データファイルが存在しない場合は作成します。

    storedData = Core.Interface.Oxide.DataFileSystem.ReadObject<StoredData>("MyDataFile");
    
  4. データオブジェクトでデータを保存します。

    storedData.EpicNumber = 42;
    storedData.EpicString = "EpicValue";
    Core.Interface.Oxide.DataFileSystem.WriteObject("MyDataFile", storedData);
    
  5. データオブジェクトからデータを取得します。

    // Check if the EpicString exists
    if (storedData.EpicString != null)
    {
        Puts(storedData.EpicString); // Outputs: EpicValue
    }
    
    // Check if the EpicNumber exists
    if (storedData.EpicNumber != null)
    {
        Puts(storedData.EpicNumber.ToString()); // Outputs: 42
    }
    

プラグインの初期化時にデータファイルを作成し、初期化終了時にデータファイルの保存、取得を行う例です。

using Oxide.Core.Configuration;

namespace Oxide.Plugins
{
    [Info("DataFiles", "st-little", "0.1.0")]
    [Description("DataFiles")]
    public class DataFiles : RustPlugin
    {
        private class StoredData
        {
            public int EpicNumber;
            public string EpicString;

            public StoredData()
            {
            }
        }

        private StoredData storedData;

        #region Oxide Hooks

        private void Init()
        {
            // ファイルの作成
            storedData = Core.Interface.Oxide.DataFileSystem.ReadObject<StoredData>("MyDataFile");
        }

        private void OnServerInitialized()
        {
            // ファイルの保存
            storedData.EpicNumber = 42;
            storedData.EpicString = "EpicValue";
            Core.Interface.Oxide.DataFileSystem.WriteObject("MyDataFile", storedData);

            // データファイルの取得
            // Check if the EpicString exists
            if (storedData.EpicString != null)
            {
                Puts(storedData.EpicString); // Outputs: EpicValue
            }

            // Check if the EpicNumber exists
            if (storedData.EpicNumber != null)
            {
                Puts(storedData.EpicNumber.ToString()); // Outputs: 42
            }
        }

        #endregion
    }
}