本文へ移動
cccskills
無料GitHub で公開日本語紹介

add-lua-binding-simple

C++の`string_id`や列挙型、読み取り専用の基本型をLuaへ公開するためのバインディング追加手順を示し、登録と動作確認を支援します。

原文原文の説明を見る

Add simple Cataclysm-BN Lua bindings for string_id types, enums, and basic read-only C++ types. Use when exposing straightforward C++ types to Lua.

cataclysmbn/Cataclysm-BNスター 1,285(GitHub 1,285 + cccskills 0)

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • C++のID型をLuaに公開したいとき
  • 列挙型をLuaスクリプトで使いたいとき
  • 基本クラスの読み取り専用バインディング追加

日本語での紹介

できること

Cataclysm-BNで、単純なC++型をLuaから利用できるようにする手順を案内します。対象はstring_id型、列挙型、読み取り専用の基本クラスなどです。型に応じてsrc/catalua_luna_doc.hへドキュメント用マクロを追加し、適切なcatalua_bindings_*.cppで登録する方法を示します。メンバーやメソッドの公開に使うマクロ、既存コードのパターンも確認できます。追加後はビルドし、Luaコンソールで値の生成やメソッド呼び出しを確かめます。

こんなときに便利

ゲーム内スクリプトから既存のC++型や定数を参照させたい開発者に向いています。大規模なクラス連携ではなく、IDや列挙値、基本的な読み取り専用データを公開したい場面で使えます。

使い方の例

  • 「このstring_id型をLuaへ公開する手順を教えて」
  • 「この列挙型をLuaバインディングに追加して」
  • 「読み取り専用クラスをLuaから参照できるようにして」

注意点

C++の編集とビルドが必要です。資料ではlinux-fullプリセットでのビルドと、ゲーム内Luaコンソールでの確認例を示しています。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

含まれるファイル(1)

  • SKILL.md3.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Add Simple Lua Binding

This skill helps you add Lua bindings for simple C++ types like string_id, enums, or basic classes.

What You'll Do

  1. Identify the type you want to bind (e.g., my_type, my_enum)
  2. Choose the binding file (usually src/catalua_bindings_ids.cpp for IDs, or a relevant catalua_bindings_*.cpp)
  3. Add Luna documentation macro to src/catalua_luna_doc.h
  4. Register the binding in the appropriate function
  5. Build and test the changes

Step-by-Step Instructions

For string_id types

// In src/catalua_luna_doc.h, add:
LUNA_ID( my_type, "MyType" )

// In src/catalua_bindings_ids.cpp, in reg_game_ids():
reg_id<my_type, has_int_id>( lua );
// Use true if type has int_id, false otherwise

For enum types

// In src/catalua_luna_doc.h, add:
LUNA_ENUM( my_enum, "MyEnum" )

// In appropriate catalua_bindings_*.cpp file:
{
    auto values = sol::initializers(
        "VALUE_ONE", my_enum::VALUE_ONE,
        "VALUE_TWO", my_enum::VALUE_TWO
    );
    luna::set_enum( lua, values );
}

Note: Use trailing return types and auto throughout (see patterns below).

For simple data types (read-only)

// In src/catalua_luna_doc.h, add:
LUNA_DOC( my_class, "MyClass" )

// In appropriate catalua_bindings_*.cpp:
#define UT_CLASS my_class
{
    auto ut = luna::new_usertype<UT_CLASS>(
        lua,
        luna::no_bases,
        luna::no_constructor
    );

    // Add members
    SET_MEMB( my_field );      // Mutable field
    SET_MEMB_RO( const_field ); // Read-only field
    SET_FX( my_method );        // Method
}
#undef UT_CLASS

Important Patterns

Documentation Comments

DOC( "Description of the type" );
DOC( "Additional details about usage" );

Member Macros

  • SET_MEMB(name) - Mutable member variable or property
  • SET_MEMB_RO(name) - Read-only member
  • SET_FX(name) - Member function
  • SET_FX_T(name, signature) - Member function with specific overload

Luna Macros

  • LUNA_ID(CppType, "LuaName") - For string_id/int_id pairs
  • LUNA_DOC(CppType, "LuaName") - For documentation-only types
  • LUNA_ENUM(CppType, "LuaName") - For enum types
  • LUNA_VAL(CppType, "LuaName") - For value types
  • LUNA_PTR_VAL(CppType, "LuaName") - For pointer types

Testing

After adding bindings:

# Build
cmake --build --preset linux-full --target cataclysm-bn-tiles

# Test in Lua console (debug menu -> Lua console)
local my_id = MyTypeId.new("some_id")
print(my_id:str())
print(my_id:is_valid())

Common Issues

  1. Linker errors: Make sure the type header is included
  2. Missing comparison operators: Some types need operator== and operator<
  3. Build errors: Check macro syntax and semicolons

Files to Modify

  • src/catalua_luna_doc.h - Add LUNA_* macro
  • src/catalua_bindings_ids.cpp - For ID types
  • src/catalua_bindings_*.cpp - For other types (choose appropriate file)

References

  • Lua Integration Docs: docs/en/mod/lua/explanation/lua_integration.md
  • Existing Examples: src/catalua_bindings_ids.cpp
  • Luna System: src/catalua_luna.h

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

add-lua-binding-api

無料概要あり

Cataclysm-BNのC++側で、ゲーム機能や定数、コールバックなどをLuaから呼び出せるAPIとして登録するスキルです。

  • Luaからマップ操作を呼び出したいとき
  • Lua APIに定数を追加したいとき
  • Luaからコールバックを登録したいとき
cataclysmbn/Cataclysm-BN1,2852026年10月27日 更新

add-lua-binding-complex

無料概要あり

複雑なC++クラスをLuaから利用できるように、メソッドや継承、プロパティ、演算子、オブジェクトの所有権を含むバインディングの追加を支援します。

  • C++クラスをLuaに公開したいとき
  • 継承を含むバインディングを追加したいとき
  • Lua向けのプロパティや演算子を登録したいとき
cataclysmbn/Cataclysm-BN1,2852026年10月27日 更新

changelog-gen

無料概要あり

Gitの指定範囲に含まれる変更を調べ、英語・韓国語・日本語のゲーム更新履歴を作成・同期します。プレイヤー向けの項目整理や画像・動画の掲載にも対応します。

  • Gitの差分から更新履歴を作りたいとき
  • 複数言語のリリースノートを整えたいとき
  • 関連する変更をまとめて掲載したいとき
cataclysmbn/Cataclysm-BN1,2852026年10月27日 更新

deno-script

無料概要あり

Cataclysm-BN向けのDeno/TypeScriptスクリプトを、プロジェクトの規約に沿って作成・修正します。CLIや移行処理、コード生成、Gitフックなどの実装を支援します。

  • Deno製のCLIを作りたいとき
  • データ移行スクリプトを書きたいとき
  • コードやドキュメントを生成したいとき
cataclysmbn/Cataclysm-BN1,2852026年10月27日 更新

i18n-context

無料概要あり

同じ英語文字列が文脈によって異なる意味になる場合に、gettextの文脈情報を追加し、対象言語のPO翻訳を修正するスキルです。

  • 同じラベルを用途ごとに訳し分けたいとき
  • JSON翻訳に文脈を加えたいとき
  • PO翻訳を更新して検証したいとき
cataclysmbn/Cataclysm-BN1,2852026年10月27日 更新

lua-binding-reference

無料概要あり

Cataclysm-BNのLuaバインディング実装で使うLunaマクロ、型登録、ライブラリ、ビルド手順やよくあるエラーを調べるリファレンスです。

  • Lua向けの型登録方法を確認したいとき
  • オーバーロード関数を登録したいとき
  • バインディングのビルドエラーを調べたいとき
cataclysmbn/Cataclysm-BN1,2852026年10月27日 更新

cataclysmbn のスキルをすべて見る

このスキルの問題を報告する