Stingray Lua API 内の複数の種類のオブジェクトは、データ値を格納および取得するための汎用インタフェースを提供します。
このシステムを使用する方法には、独自の Lua 変数内にデータを格納する方法よりも便利な点がいくつかあります。
データは特定のオブジェクトのライフスパンに関連付けられたままになります。Lua オブジェクトを破棄すると、自動的にメモリが解放されます。
メモリは、Lua 側ではなく C 側で割り当てられます。つまり、Lua ガベージ コレクションで処理する必要はありません。
データはオブジェクトと一緒にパッケージ化され、このオブジェクトにアクセス可能な任意の場所で利用できます。たとえば、データはすべての Lua スレッド内で利用できるため、メインの Lua スレッド内にデータを安全に保管して、ワーカー スレッド内でアクセスすることができます。ただし、Lua テーブルおよび関数への参照を使用できるのは、これらが保存されている同じ Lua コンテキスト内のみです。
このデータ ストレージ メカニズムを提供するすべてのタイプのオブジェクトに、次の 3 つの関数があります。
set_data() get_data() has_data()
保存されたデータの有効な形式は次のとおりです。
データの各部には、それぞれに文字列または整数を指定可能な、1 つまたは複数の一連のキーがインデックスとして付きます。set_data() 関数を呼び出してデータの一部を保存する場合は、保存するデータ値と一緒にキーを引数として渡します。次に、同じ一連のキーを get_data() または has_data() 関数に渡して、データの取得や、データが存在するかどうかの確認を行います。
たとえば、次のコードでは、2 つの一連のキー score および headshots によって値 1 がインデックス付けされます。
stingray.Unit.set_data(player, "score", "headshots", 1) ... local shots = stingray.Unit.get_data(player, "score", "headshots")