Cataclysm-BNのC++側で、ゲーム機能や定数、コールバックなどをLuaから呼び出せるAPIとして登録するスキルです。
- Luaからマップ操作を呼び出したいとき
- Lua APIに定数を追加したいとき
- Luaからコールバックを登録したいとき
Cataclysm-BN向けのDeno/TypeScriptスクリプトを、プロジェクトの規約に沿って作成・修正します。CLIや移行処理、コード生成、Gitフックなどの実装を支援します。
Write or modify Cataclysm-BN Deno/TypeScript scripts. Use for scripts, tools, migrations, generators, git hooks, and CLI utilities.
実行スコア 未検証
インストール方法を見るCataclysm-BN向けのDeno/TypeScriptスクリプトを、プロジェクトの既存規約に合わせて作成・修正します。shebangと必要な権限、モジュールの説明コメント、JSRからの依存関係の読み込み、Valibotによる入力検証、Cliffyを使ったCLIなどを扱います。ファイル操作には標準ライブラリを使い、外部コマンドの実行やエラー処理も含めて実装します。移行・変換、開発補助、Gitフック、コードやドキュメントの生成といった用途が対象です。
プロジェクトの流儀に沿ったスクリプトを新しく用意したいときや、既存のDenoツールに機能を追加したいときに使えます。スクリプトをCLIとして実行可能にし、権限や検証方法も整えたい場合にも向いています。
Deno環境が必要です。完成前に deno check、deno fmt、deno lint などで確認し、実行ファイルとして使う場合は実行権限を付ける手順が示されています。
この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Write Deno/TypeScript scripts following Cataclysm: Bright Nights conventions.
Start scripts with the proper shebang and required permissions:
#!/usr/bin/env -S deno run --allow-read --allow-write --allow-run --allow-env
Common permission flags:
--allow-read - File system read access--allow-write - File system write access--allow-run - Run subprocesses--allow-env - Access environment variables--allow-net - Network access (only if needed)Add a module-level JSDoc comment explaining the script's purpose:
/**
* @module
*
* Brief description of what this script does
*
* Longer explanation if needed with examples or usage notes.
*/
This pattern is used in existing scripts like:
scripts/gen_cli_docs.tsscripts/utils.tsscripts/affected_files.tsUse JSR imports for standard library and well-known packages:
import { Command } from "@cliffy/command"
import { exists } from "@std/fs"
import { join } from "@std/path"
import { partition } from "@std/collections"
import * as v from "@valibot/valibot"
DO NOT use npm or http imports unless absolutely necessary. Prefer JSR.
For data validation, use Valibot (NOT Zod):
import * as v from "@valibot/valibot"
const MySchema = v.object({
name: v.string(),
count: v.pipe(v.number(), v.minValue(0)),
tags: v.array(v.string()),
})
type MyType = v.InferOutput<typeof MySchema>
const parser = v.safeParser(MySchema)
const result = parser(data)
if (result.success) {
const validated = result.output
}
For command-line interfaces, use Cliffy:
import { Command } from "@cliffy/command"
const main = new Command()
.name("script-name")
.version("1.0.0")
.description("What this script does")
.option("-o, --output <file>", "Output file path")
.arguments("<input:string>")
.action(async ({ output }, input) => {
// Implementation
})
if (import.meta.main) {
await main.parse(Deno.args)
}
Use @std/fs for file system operations:
import { exists, walk } from "@std/fs"
import { basename, join } from "@std/path"
if (await exists("path/to/file")) {
const content = await Deno.readTextFile("path/to/file")
}
for await (const entry of walk("src", { exts: [".ts"] })) {
console.log(entry.path)
}
Use Deno.Command for subprocesses:
const cmd = new Deno.Command("git", {
args: ["status"],
stdout: "piped",
stderr: "piped",
})
const { success, stdout, stderr } = await cmd.output()
if (success) {
const output = new TextDecoder().decode(stdout)
}
Handle errors with proper types:
try {
await someOperation()
} catch (error) {
const message = error instanceof Error ? error.message : String(error)
console.error(`Error: ${message}`)
Deno.exit(1)
}
Define colors as utility functions:
const colors = {
red: (text: string) => `\x1b[31m${text}\x1b[0m`,
yellow: (text: string) => `\x1b[33m${text}\x1b[0m`,
green: (text: string) => `\x1b[32m${text}\x1b[0m`,
dim: (text: string) => `\x1b[2m${text}\x1b[0m`,
}
console.log(colors.green("Success!"))
console.warn(colors.yellow("[WARNING] Something happened"))
console.error(colors.red("[ERROR] Failed"))
Look at these existing scripts for patterns:
scripts/gen_cli_docs.ts
scripts/utils.ts
scripts/affected_files.ts
tools/hooks/pre-commit.ts
tools/hooks/install-hooks.ts
Scripts location:
scripts/tools/tools/hooks/Before submitting:
deno check your-script.ts
deno fmt your-script.ts
deno lint your-script.ts
Make the script executable:
chmod +x your-script.ts
Add to deno.jsonc tasks if the script should be easily runnable:
{
"tasks": {
"your-task": "deno run --allow-... scripts/your-script.ts"
}
}
#!/usr/bin/env -S deno run [permissions]@module JSDoc commentdeno check before considering completechmod +x)if (import.meta.main) guard for executable scriptsdeno check and deno fmt@ts-ignore or @ts-expect-errorconst commandExists = async (cmd: string): Promise<boolean> => {
try {
const process = new Deno.Command("command", {
args: ["-v", cmd],
stdout: "piped",
stderr: "piped",
})
const { success } = await process.output()
return success
} catch {
return false
}
}
const getRepoRoot = async (): Promise<string> => {
const cmd = new Deno.Command("git", {
args: ["rev-parse", "--show-toplevel"],
stdout: "piped",
})
const { stdout } = await cmd.output()
return new TextDecoder().decode(stdout).trim()
}
import { walk } from "@std/fs"
for await (const entry of walk("data", { exts: [".json"] })) {
const content = await Deno.readTextFile(entry.path)
const data = JSON.parse(content)
// Process data
}
const results = await Promise.all([
operation1(),
operation2(),
operation3(),
])
Use Deno scripts for:
Don't use Deno scripts for:
まだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
Cataclysm-BNのC++側で、ゲーム機能や定数、コールバックなどをLuaから呼び出せるAPIとして登録するスキルです。
複雑なC++クラスをLuaから利用できるように、メソッドや継承、プロパティ、演算子、オブジェクトの所有権を含むバインディングの追加を支援します。
C++の`string_id`や列挙型、読み取り専用の基本型をLuaへ公開するためのバインディング追加手順を示し、登録と動作確認を支援します。
Gitの指定範囲に含まれる変更を調べ、英語・韓国語・日本語のゲーム更新履歴を作成・同期します。プレイヤー向けの項目整理や画像・動画の掲載にも対応します。
同じ英語文字列が文脈によって異なる意味になる場合に、gettextの文脈情報を追加し、対象言語のPO翻訳を修正するスキルです。
Cataclysm-BNのLuaバインディング実装で使うLunaマクロ、型登録、ライブラリ、ビルド手順やよくあるエラーを調べるリファレンスです。