mcpField
D
dota2-custom-game-dev

dota2-custom-game-dev

github.com/demon673開発080 回インストール2 日前に更新
リポジトリ

dota2-custom-game-dev について

DOTA2 Custom Game Dev は、Dota 2のカスタムゲーム開発向けスキルで、Lua、TypeScriptToLua、Panorama UI、KVファイルを扱います。ソース編集やAPI検索を案内し、MCPによる実機確認にも対応します。オフラインでは同梱資料を参照できます。

主な機能

  1. 01Lua、TSTL、Panorama、KV開発のガイド
  2. 02TSTLとSolidJS Panoramaプロジェクトの検出
  3. 03同梱されたDota 2 API資料の検索
  4. 04上流からのスナップショット更新
  5. 05MCPツール利用時の実行時検証

活用シーン

  1. 01KV設定からLuaソースまでの追跡
  2. 02Panorama UIの開発やデバッグ
  3. 03ゲームがオフラインの際のAPI検索
  4. 04稼働中のDota 2でのアドオン動作確認

MCP 対応

Dota2 MCPツールが利用できる場合、最新APIの検索や接続状態、コンソール出力、アドオンの動作などの実行時確認に使います。オフライン時は同梱のAPIスナップショットを代替として参照します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/demon673/demon-agent-skill --skill dota2-custom-game-dev

インストール後、Claude Code で/dota2-custom-game-devを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
references/
solid-panorama-ui.md
tstl-dota2.md
upstream-source-map.md
references/vendor/vscode-dota2-tools/
css.css-data.json
html.html-data.json
UPSTREAM.json
references/vendor/vscode-dota2-tools/resource/
dump_panorama_css_properties.json
dump_panorama_events.md
lua_api_changelog.md
PanelList.json
PanelList.md
scripts/
detect_solid_panorama_project.py
detect_tstl_project.py
search_dota2_api.py
update_references.ps1

詳細

DOTA2 カスタムゲーム開発

Lua、TypeScriptToLua/TSTL、SolidJS Panorama UI、Panorama JS/TS、Panorama CSS/XML、KV ファイルを扱う DOTA2 カスタムゲームアドオンの開発や、Dota 2 MCP ツールを利用できる場合の Dota 2 ランタイムのライブ調査に、このスキルを使用してください。

参照ソース

ランタイムが公開している場合は、Dota2 MCP ツールを優先してください。MCP ツールを利用できない場合、Dota 2 が起動していない場合、またはユーザーがオフラインでのソース作業のみを必要としている場合は、同梱の BigCiba/vscode-dota2-tools スナップショットを使用してください。

  • 上流リポジトリ:https://github.com/BigCiba/vscode-dota2-tools
  • ローカルソースマップ:references/upstream-source-map.md
  • TSTL DOTA2 ガイド:references/tstl-dota2.md
  • SolidJS Panorama ガイド:references/solid-panorama-ui.md
  • 更新スクリプト:scripts/update_references.ps1
  • API 検索ヘルパー:scripts/search_dota2_api.py
  • TSTL プロジェクト検出ツール:scripts/detect_tstl_project.py
  • SolidJS Panorama プロジェクト検出ツール:scripts/detect_solid_panorama_project.py

同梱の参照資料を恒久的に正しいものとして扱わないでください。これらはスナップショットであり、ユーザーが最新の API の動作を求めている場合や、API の正確性が重要な場合は、上流から更新してください。

Dota2 MCP ワークフロー

アドオンのテスト、ゲーム内の動作確認、コンソールエラーの読み取り、マップの起動、現在のランタイム状態の調査など、ライブゲームの情報が役立つ場合にのみ Dota2 MCP を使用してください。通常のソース編集で MCP の使用を必須にしないでください。

ライブでのテストやデバッグでは、最初に dota_status を呼び出してください。接続状況、アドオン/マップの状態、次に有効な手順が報告されます。クライアントが dota_status ではなく project_info を公開している場合は、状態確認の代わりに project_info を使用してください。

高速なランタイムループを優先してください。ソースを編集し、リポジトリのビルド/ウォッチコマンドでコンパイルし、ライブゲームをリロードしてから、MCP で確認します。通常のコード編集を反映させるだけの目的で dota_restart を呼び出さないでください。アドオンが対応している場合は、reload_script などのプロジェクトリロードコマンドを使って console_send を呼び出してください。

ユーザーがライブデバッグ/テストを依頼していない限り、ライブゲームの状態を変更したり、破壊的なコンソールコマンドを送信したり、任意のサーバー Lua を実行したりしないでください。通常のソース編集では、まずプロジェクトファイルを読み、MCP の出力は根拠としてのみ使用してください。

プロジェクトの構成

まず、アドオンのルートディレクトリを特定してください。

  • ゲームスクリプト:game/scripts/vscripts/
  • NPC/KV 設定:game/scripts/npc/
  • Panorama レイアウト:content/panorama/layout/custom_game/
  • Panorama JS:content/panorama/scripts/custom_game/
  • Panorama CSS:content/panorama/styles/custom_game/
  • ローカライズ:game/resource/
  • TSTL ソース(存在する場合):src/vscripts/、src/panorama/、src/common/
  • SolidJS Panorama ソース(存在する場合):solid/src/ui/、solid/src/components/、solid/src/utils/

プロジェクトの構成が異なる場合は、addon_game_mode.lua、npc_abilities_custom.txt、custom_net_tables.txt、custom_events.txt、custom_ui_manifest.xml、layout/custom_game、package.json、tsconfig.json、tstl、solid/build.ts、solid/src/ui を検索してください。

TSTL プロジェクトでは、生成された Lua を確認し、TypeScript ソースを編集してください。ユーザーが緊急の生成物へのパッチを明示的に依頼していない限り、game/scripts/vscripts/ 内の生成済み Lua を修正しないでください。

SolidJS Panorama プロジェクトでは、生成された JS/XML/CSS を確認し、Solid TSX、Less/SCSS、宣言ファイル、またはビルドスクリプトを編集してください。ユーザーが緊急の生成物へのパッチを明示的に依頼していない限り、生成済み Panorama アセットを修正しないでください。

API の検索ワークフロー

ライブ/最新の API の動作については、Dota2 MCP API ツールを優先してください。MCP を利用できない場合、大きな JSON ファイルを直接読むのではなく、同梱スクリプトで対象を絞って検索してください。このスキルのディレクトリから以下の例を実行するか、別の作業ディレクトリから実行する場合は、.\scripts をスキルディレクトリの解決済みパスに置き換えてください。

python .\scripts\search_dota2_api.py --kind lua --query CustomGameEventManager
python .\scripts\search_dota2_api.py --kind js --query SendCustomGameEventToServer
python .\scripts\search_dota2_api.py --kind css --query flow-children
python .\scripts\search_dota2_api.py --kind panel --query DOTAAbilityImage
python .\scripts\detect_tstl_project.py <path-to-addon>
python .\scripts\detect_solid_panorama_project.py <path-to-addon>

参照資料がない場合や古くなっている場合は、このスキルのディレクトリから更新してください。

powershell -ExecutionPolicy Bypass -File .\scripts\update_references.ps1

境界

  • サーバー側の Lua が正規の情報源です。経済、ダメージ、インベントリ、報酬、クールダウン、勝利条件について、Panorama クライアントのペイロードを信頼しないでください。
  • Panorama JS はクライアント UI のロジックです。サーバーに意図を送信したり、カスタムネットテーブルから公開状態を読み取ったり、パネルを更新したりできますが、サーバー側の Lua で検証する必要があります。
  • KV ファイルはデータとエンジンとのバインディングを定義します。ScriptFile、BaseClass、AbilitySpecial、モディファイア名、ローカライズトークンが、Lua および Panorama での使用状況と一致していることを確認してください。
  • CSS は Panorama CSS であり、ブラウザー CSS ではありません。最新の Web CSS を使用する前に、DOTA2 CSS のリファレンスを確認してください。
  • XML パネルは Panorama パネルであり、DOM 要素ではありません。ブラウザーのセマンティクスを想定する前に、パネル固有の属性やイベントを確認してください。
  • TSTL の変更では、出力される Lua のセマンティクスを維持してください。this、複数の戻り値、Lua の配列/テーブル、デコレーター、モジュールのインポート、Lua のコロン呼び出しの動作に依存する API に注意してください。
  • TSTL テンプレートプロジェクトでは、生成された Lua と Panorama JS はビルド成果物です。まず src/**/*.ts を修正し、リポジトリのビルド/型チェックコマンドを実行してください。
  • SolidJS Panorama はブラウザー DOM の開発ではありません。コンポーネントは Panorama パネルに描画され、Panorama のイベント/属性を使用し、Panorama CSS/XML の制約を守る必要があります。
  • Solid のエフェクトとサブスクリプションは、onCleanup またはプロジェクトのヘルパーユーティリティを使って、GameEvents、CustomNetTables、タイマー、パネルハンドラーをクリーンアップする必要があります。

一般的なワークフロー

Lua のアビリティまたはモディファイアを扱う場合:

  1. KV エントリと ScriptFile を見つけます。
  2. Lua のクラス名、LinkLuaModifier、固有モディファイア、特殊値の読み取りを調べます。
  3. 利用可能であれば Dota2 MCP API/ランタイムツールを使用します。そうでない場合は、Lua API スナップショットでエンジン呼び出しを検索します。
  4. サーバー/クライアントの境界と権限を検証します。

TSTL の vscripts を扱う場合:

  1. scripts/detect_tstl_project.py を実行するか、その動作を再現して、package.json、tsconfig.json、TSTL パッケージ、ソース/出力のルートを見つけます。
  2. TypeScript のセマンティクスを変更する前に、references/tstl-dota2.md を読みます。
  3. KV の ScriptFile から生成された Lua をたどり、さらに src/vscripts/**/*.ts までさかのぼります。
  4. TypeScript のソースを編集することを優先し、存在するものに応じて、npm run build、npm run build:vscripts、npm run dev、npx tstl -p tsconfig.json など、リポジトリのスクリプトで検証します。
  5. ライブ検証では、マップを再起動する前に、watch/build と console_send(commands="reload_script")、console_output(channel="VScript", level=3) の使用を優先します。
  6. ビルドコマンドに依存関係やネットワークが必要な場合は、許可を求めるか、不足している依存関係を明確に報告します。

Panorama UI を扱う場合:

  1. XML、JS、CSS、custom_ui_manifest.xml の場所を特定します。
  2. JS API で GameEvents、CustomNetTables、Players、Entities、Abilities を検索します。
  3. CSS とパネルの参照を調べ、未サポートのプロパティや誤ったパネル属性がないか確認します。
  4. CustomGameEventManager と GameEvents を介した、JS と Lua 間のイベントの流れをたどります。
  5. ライブ MCP ツールが利用可能な場合は、PanoramaScript を指定した console_output と、Panorama API/CSS/イベントの各ツールを使って、ランタイムエラーとサポートされている UI API を確認します。

SolidJS の Panorama UI を扱う場合:

  1. scripts/detect_solid_panorama_project.py を実行するか、その動作を再現して、package.json.panorama、Solid の依存関係、ソースのルート、ビルドスクリプト、出力のルートを見つけます。
  2. Solid のレンダリング、リアクティビティ、生成される XML/CSS、マニフェストの動作を変更する前に、references/solid-panorama-ui.md を読みます。
  3. package.json.panorama から solid/src/ui/<name>/<name>.tsx へ、さらに生成された content/<addon>/panorama/scripts/custom_game/<name>.js、レイアウト XML、スタイル、custom_ui_manifest.xml へと、UI エントリをたどります。
  4. TSX/Less/SCSS/宣言ファイル/ビルドプラグインのソースを編集することを優先し、npm run build:solid またはプロジェクトに相当するコマンドで検証します。
  5. DOTA2 の信頼境界を守ります。Solid/Panorama は意図の送信と複製された状態の描画を行えますが、サーバーの vscripts が引き続き権限を持ちます。

同期の不具合を扱う場合:

  1. 状態をプッシュイベント、ネットテーブル、ローカル限定の UI 状態のどれにすべきか特定します。
  2. Lua で CustomGameEventManager:RegisterListener、CustomNetTables:SetTableValue、プレイヤーの検証を調べます。
  3. JS で GameEvents.Subscribe、GameEvents.SendCustomGameEventToServer、CustomNetTables.SubscribeNetTableListener を調べます。
  4. ライブ MCP ツールが利用可能な場合は、コンソール出力、エンティティ/モディファイア、安全な Lua 式を調べ、実際のランタイム状態を確認します。
  5. 古い状態、信頼境界、ライフサイクルのリスクを個別に報告します。

出力

API の説明やコードの修正では、以下を含めます。

  • 関係するレイヤー:Lua サーバー、Panorama JS、CSS/XML、KV、またはローカライズ。
  • 使用した正確なプロジェクトファイルと API リファレンス。
  • サーバー/クライアントの信頼境界。
  • コードが TypeScript のソースか、生成された Lua/JS か。
  • SolidJS の Panorama ソースを変更したのか、生成された Panorama アセットを変更したのか。
  • Dota2 MCP のライブデータを使用したか、またはバンドル済み/オフラインのリファレンスに切り替えた理由。
  • バンドル済みのスナップショットを今回のターンで更新していない場合は、そのリファレンスの鮮度に関する注意。

コメント