rpgmaker-mz-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +425 -0
- package/dist/events/commandBuilders.d.ts +405 -0
- package/dist/events/commandBuilders.d.ts.map +1 -0
- package/dist/events/commandBuilders.js +554 -0
- package/dist/events/commandBuilders.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +105 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +81 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +49 -0
- package/dist/registry.js.map +1 -0
- package/dist/tiles/autotile.d.ts +65 -0
- package/dist/tiles/autotile.d.ts.map +1 -0
- package/dist/tiles/autotile.js +201 -0
- package/dist/tiles/autotile.js.map +1 -0
- package/dist/tiles/catalog/dungeon.d.ts +16 -0
- package/dist/tiles/catalog/dungeon.d.ts.map +1 -0
- package/dist/tiles/catalog/dungeon.js +765 -0
- package/dist/tiles/catalog/dungeon.js.map +1 -0
- package/dist/tiles/catalog/index.d.ts +78 -0
- package/dist/tiles/catalog/index.d.ts.map +1 -0
- package/dist/tiles/catalog/index.js +115 -0
- package/dist/tiles/catalog/index.js.map +1 -0
- package/dist/tiles/catalog/inside.d.ts +16 -0
- package/dist/tiles/catalog/inside.d.ts.map +1 -0
- package/dist/tiles/catalog/inside.js +765 -0
- package/dist/tiles/catalog/inside.js.map +1 -0
- package/dist/tiles/catalog/outside.d.ts +16 -0
- package/dist/tiles/catalog/outside.d.ts.map +1 -0
- package/dist/tiles/catalog/outside.js +799 -0
- package/dist/tiles/catalog/outside.js.map +1 -0
- package/dist/tiles/catalog/overworld.d.ts +16 -0
- package/dist/tiles/catalog/overworld.d.ts.map +1 -0
- package/dist/tiles/catalog/overworld.js +585 -0
- package/dist/tiles/catalog/overworld.js.map +1 -0
- package/dist/tiles/catalog/sf.d.ts +16 -0
- package/dist/tiles/catalog/sf.d.ts.map +1 -0
- package/dist/tiles/catalog/sf.js +1313 -0
- package/dist/tiles/catalog/sf.js.map +1 -0
- package/dist/tiles/paint.d.ts +20 -0
- package/dist/tiles/paint.d.ts.map +1 -0
- package/dist/tiles/paint.js +65 -0
- package/dist/tiles/paint.js.map +1 -0
- package/dist/tiles/png.d.ts +11 -0
- package/dist/tiles/png.d.ts.map +1 -0
- package/dist/tiles/png.js +180 -0
- package/dist/tiles/png.js.map +1 -0
- package/dist/tiles/tileCodec.d.ts +95 -0
- package/dist/tiles/tileCodec.d.ts.map +1 -0
- package/dist/tiles/tileCodec.js +186 -0
- package/dist/tiles/tileCodec.js.map +1 -0
- package/dist/tiles/tileFlags.d.ts +98 -0
- package/dist/tiles/tileFlags.d.ts.map +1 -0
- package/dist/tiles/tileFlags.js +129 -0
- package/dist/tiles/tileFlags.js.map +1 -0
- package/dist/tiles/tilegeom.d.ts +29 -0
- package/dist/tiles/tilegeom.d.ts.map +1 -0
- package/dist/tiles/tilegeom.js +111 -0
- package/dist/tiles/tilegeom.js.map +1 -0
- package/dist/tiles/transparency.d.ts +22 -0
- package/dist/tiles/transparency.d.ts.map +1 -0
- package/dist/tiles/transparency.js +59 -0
- package/dist/tiles/transparency.js.map +1 -0
- package/dist/tools/actorTools.d.ts +48 -0
- package/dist/tools/actorTools.d.ts.map +1 -0
- package/dist/tools/actorTools.js +154 -0
- package/dist/tools/actorTools.js.map +1 -0
- package/dist/tools/allTools.d.ts +8 -0
- package/dist/tools/allTools.d.ts.map +1 -0
- package/dist/tools/allTools.js +56 -0
- package/dist/tools/allTools.js.map +1 -0
- package/dist/tools/assetTools.d.ts +113 -0
- package/dist/tools/assetTools.d.ts.map +1 -0
- package/dist/tools/assetTools.js +97 -0
- package/dist/tools/assetTools.js.map +1 -0
- package/dist/tools/batchTools.d.ts +3 -0
- package/dist/tools/batchTools.d.ts.map +1 -0
- package/dist/tools/batchTools.js +138 -0
- package/dist/tools/batchTools.js.map +1 -0
- package/dist/tools/battleTools.d.ts +72 -0
- package/dist/tools/battleTools.d.ts.map +1 -0
- package/dist/tools/battleTools.js +322 -0
- package/dist/tools/battleTools.js.map +1 -0
- package/dist/tools/catalogTools.d.ts +3 -0
- package/dist/tools/catalogTools.d.ts.map +1 -0
- package/dist/tools/catalogTools.js +134 -0
- package/dist/tools/catalogTools.js.map +1 -0
- package/dist/tools/classTools.d.ts +85 -0
- package/dist/tools/classTools.d.ts.map +1 -0
- package/dist/tools/classTools.js +279 -0
- package/dist/tools/classTools.js.map +1 -0
- package/dist/tools/commonEventTools.d.ts +32 -0
- package/dist/tools/commonEventTools.d.ts.map +1 -0
- package/dist/tools/commonEventTools.js +150 -0
- package/dist/tools/commonEventTools.js.map +1 -0
- package/dist/tools/eventCommandTools.d.ts +37 -0
- package/dist/tools/eventCommandTools.d.ts.map +1 -0
- package/dist/tools/eventCommandTools.js +893 -0
- package/dist/tools/eventCommandTools.js.map +1 -0
- package/dist/tools/eventPageTools.d.ts +112 -0
- package/dist/tools/eventPageTools.d.ts.map +1 -0
- package/dist/tools/eventPageTools.js +597 -0
- package/dist/tools/eventPageTools.js.map +1 -0
- package/dist/tools/itemTools.d.ts +82 -0
- package/dist/tools/itemTools.d.ts.map +1 -0
- package/dist/tools/itemTools.js +380 -0
- package/dist/tools/itemTools.js.map +1 -0
- package/dist/tools/listTools.d.ts +58 -0
- package/dist/tools/listTools.d.ts.map +1 -0
- package/dist/tools/listTools.js +99 -0
- package/dist/tools/listTools.js.map +1 -0
- package/dist/tools/mapTools.d.ts +270 -0
- package/dist/tools/mapTools.d.ts.map +1 -0
- package/dist/tools/mapTools.js +1066 -0
- package/dist/tools/mapTools.js.map +1 -0
- package/dist/tools/moveTools.d.ts +43 -0
- package/dist/tools/moveTools.d.ts.map +1 -0
- package/dist/tools/moveTools.js +240 -0
- package/dist/tools/moveTools.js.map +1 -0
- package/dist/tools/objectTools.d.ts +12 -0
- package/dist/tools/objectTools.d.ts.map +1 -0
- package/dist/tools/objectTools.js +221 -0
- package/dist/tools/objectTools.js.map +1 -0
- package/dist/tools/paintTools.d.ts +3 -0
- package/dist/tools/paintTools.d.ts.map +1 -0
- package/dist/tools/paintTools.js +134 -0
- package/dist/tools/paintTools.js.map +1 -0
- package/dist/tools/pluginScanTools.d.ts +22 -0
- package/dist/tools/pluginScanTools.d.ts.map +1 -0
- package/dist/tools/pluginScanTools.js +119 -0
- package/dist/tools/pluginScanTools.js.map +1 -0
- package/dist/tools/pluginTools.d.ts +11 -0
- package/dist/tools/pluginTools.d.ts.map +1 -0
- package/dist/tools/pluginTools.js +63 -0
- package/dist/tools/pluginTools.js.map +1 -0
- package/dist/tools/projectTools.d.ts +11 -0
- package/dist/tools/projectTools.d.ts.map +1 -0
- package/dist/tools/projectTools.js +74 -0
- package/dist/tools/projectTools.js.map +1 -0
- package/dist/tools/skillTools.d.ts +83 -0
- package/dist/tools/skillTools.d.ts.map +1 -0
- package/dist/tools/skillTools.js +369 -0
- package/dist/tools/skillTools.js.map +1 -0
- package/dist/tools/stateTools.d.ts +28 -0
- package/dist/tools/stateTools.d.ts.map +1 -0
- package/dist/tools/stateTools.js +161 -0
- package/dist/tools/stateTools.js.map +1 -0
- package/dist/tools/systemTools.d.ts +86 -0
- package/dist/tools/systemTools.d.ts.map +1 -0
- package/dist/tools/systemTools.js +342 -0
- package/dist/tools/systemTools.js.map +1 -0
- package/dist/tools/tileTools.d.ts +9 -0
- package/dist/tools/tileTools.d.ts.map +1 -0
- package/dist/tools/tileTools.js +34 -0
- package/dist/tools/tileTools.js.map +1 -0
- package/dist/tools/tileTransparency.d.ts +40 -0
- package/dist/tools/tileTransparency.d.ts.map +1 -0
- package/dist/tools/tileTransparency.js +156 -0
- package/dist/tools/tileTransparency.js.map +1 -0
- package/dist/tools/tilesetTools.d.ts +23 -0
- package/dist/tools/tilesetTools.d.ts.map +1 -0
- package/dist/tools/tilesetTools.js +209 -0
- package/dist/tools/tilesetTools.js.map +1 -0
- package/dist/tools/validationTools.d.ts +50 -0
- package/dist/tools/validationTools.d.ts.map +1 -0
- package/dist/tools/validationTools.js +229 -0
- package/dist/tools/validationTools.js.map +1 -0
- package/dist/utils/commit.d.ts +62 -0
- package/dist/utils/commit.d.ts.map +1 -0
- package/dist/utils/commit.js +119 -0
- package/dist/utils/commit.js.map +1 -0
- package/dist/utils/fileHandler.d.ts +49 -0
- package/dist/utils/fileHandler.d.ts.map +1 -0
- package/dist/utils/fileHandler.js +137 -0
- package/dist/utils/fileHandler.js.map +1 -0
- package/dist/utils/records.d.ts +8 -0
- package/dist/utils/records.d.ts.map +1 -0
- package/dist/utils/records.js +10 -0
- package/dist/utils/records.js.map +1 -0
- package/dist/utils/types.d.ts +465 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +5 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/validation/assets.d.ts +53 -0
- package/dist/validation/assets.d.ts.map +1 -0
- package/dist/validation/assets.js +198 -0
- package/dist/validation/assets.js.map +1 -0
- package/dist/validation/createRefs.d.ts +37 -0
- package/dist/validation/createRefs.d.ts.map +1 -0
- package/dist/validation/createRefs.js +89 -0
- package/dist/validation/createRefs.js.map +1 -0
- package/dist/validation/eventCommands.d.ts +70 -0
- package/dist/validation/eventCommands.d.ts.map +1 -0
- package/dist/validation/eventCommands.js +273 -0
- package/dist/validation/eventCommands.js.map +1 -0
- package/dist/validation/gate.d.ts +56 -0
- package/dist/validation/gate.d.ts.map +1 -0
- package/dist/validation/gate.js +50 -0
- package/dist/validation/gate.js.map +1 -0
- package/dist/validation/moveCommands.d.ts +31 -0
- package/dist/validation/moveCommands.d.ts.map +1 -0
- package/dist/validation/moveCommands.js +123 -0
- package/dist/validation/moveCommands.js.map +1 -0
- package/dist/validation/pluginCommands.d.ts +83 -0
- package/dist/validation/pluginCommands.d.ts.map +1 -0
- package/dist/validation/pluginCommands.js +134 -0
- package/dist/validation/pluginCommands.js.map +1 -0
- package/dist/validation/pluginManifest.d.ts +67 -0
- package/dist/validation/pluginManifest.d.ts.map +1 -0
- package/dist/validation/pluginManifest.js +199 -0
- package/dist/validation/pluginManifest.js.map +1 -0
- package/dist/validation/references.d.ts +57 -0
- package/dist/validation/references.d.ts.map +1 -0
- package/dist/validation/references.js +314 -0
- package/dist/validation/references.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Item, Weapon, Armor, Skill } from '../utils/types.js';
|
|
2
|
+
import { ToolDefinition } from '../registry.js';
|
|
3
|
+
/** The editor's shape for a fresh "New Item" (all zeros / sensible defaults). */
|
|
4
|
+
export declare function defaultItem(): Omit<Item, 'id'>;
|
|
5
|
+
/** The editor's shape for a fresh "New Weapon". `etypeId` 1 = Weapon slot; flat param bonuses. */
|
|
6
|
+
export declare function defaultWeapon(): Omit<Weapon, 'id'>;
|
|
7
|
+
/** The editor's shape for a fresh "New Armor". `etypeId` 2 = Shield slot; flat param bonuses. */
|
|
8
|
+
export declare function defaultArmor(): Omit<Armor, 'id'>;
|
|
9
|
+
/**
|
|
10
|
+
* Get all items from the project
|
|
11
|
+
*/
|
|
12
|
+
export declare function getItems(projectPath: string): Promise<(Item | null)[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Get all weapons from the project
|
|
15
|
+
*/
|
|
16
|
+
export declare function getWeapons(projectPath: string): Promise<(Weapon | null)[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Get all armors from the project
|
|
19
|
+
*/
|
|
20
|
+
export declare function getArmors(projectPath: string): Promise<(Armor | null)[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Get all skills from the project
|
|
23
|
+
*/
|
|
24
|
+
export declare function getSkills(projectPath: string): Promise<(Skill | null)[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Get a specific item by ID
|
|
27
|
+
*/
|
|
28
|
+
export declare function getItem(projectPath: string, itemId: number): Promise<Item | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Update an item's data
|
|
31
|
+
*/
|
|
32
|
+
export declare function updateItem(projectPath: string, itemId: number, updates: Partial<Item>): Promise<Item>;
|
|
33
|
+
/**
|
|
34
|
+
* Build one new item record against the current array — the shared per-record
|
|
35
|
+
* source of truth for both `create_item` and `batch_create`. Pure record
|
|
36
|
+
* construction only (`defaultItem()` template + caller overrides + id-last); the
|
|
37
|
+
* effect reference check stays with the caller (it needs cross-file reads).
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildItemRecord(existing: (Item | null)[], input: Partial<Omit<Item, 'id'>>): Item;
|
|
40
|
+
/** Build one new weapon record against the current array (shared by create/batch). */
|
|
41
|
+
export declare function buildWeaponRecord(existing: (Weapon | null)[], input: Partial<Omit<Weapon, 'id'>>): Weapon;
|
|
42
|
+
/** Build one new armor record against the current array (shared by create/batch). */
|
|
43
|
+
export declare function buildArmorRecord(existing: (Armor | null)[], input: Partial<Omit<Armor, 'id'>>): Armor;
|
|
44
|
+
/**
|
|
45
|
+
* Reject an item whose effects point at a non-existent state / skill / common
|
|
46
|
+
* event (P2-3: throw at author time, matching create_skill and its siblings).
|
|
47
|
+
* Shared by `create_item` and `batch_create`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function assertItemEffectRefs(projectPath: string, item: Item): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Create a new item. Only the fields the caller supplies override the
|
|
52
|
+
* `defaultItem()` template; the computed id always wins (spread last).
|
|
53
|
+
*/
|
|
54
|
+
export declare function createItem(projectPath: string, overrides: Partial<Omit<Item, 'id'>>): Promise<Item>;
|
|
55
|
+
/**
|
|
56
|
+
* Create a new weapon. Overrides merge over the `defaultWeapon()` template; the
|
|
57
|
+
* computed id always wins.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createWeapon(projectPath: string, overrides: Partial<Omit<Weapon, 'id'>>): Promise<Weapon>;
|
|
60
|
+
/**
|
|
61
|
+
* Create a new armor. Overrides merge over the `defaultArmor()` template; the
|
|
62
|
+
* computed id always wins.
|
|
63
|
+
*/
|
|
64
|
+
export declare function createArmor(projectPath: string, overrides: Partial<Omit<Armor, 'id'>>): Promise<Armor>;
|
|
65
|
+
/**
|
|
66
|
+
* Update a weapon's data
|
|
67
|
+
*/
|
|
68
|
+
export declare function updateWeapon(projectPath: string, weaponId: number, updates: Partial<Weapon>): Promise<Weapon>;
|
|
69
|
+
/**
|
|
70
|
+
* Update an armor's data
|
|
71
|
+
*/
|
|
72
|
+
export declare function updateArmor(projectPath: string, armorId: number, updates: Partial<Armor>): Promise<Armor>;
|
|
73
|
+
/**
|
|
74
|
+
* Update a skill's data
|
|
75
|
+
*/
|
|
76
|
+
export declare function updateSkill(projectPath: string, skillId: number, updates: Partial<Skill>): Promise<Skill>;
|
|
77
|
+
/**
|
|
78
|
+
* Search items by name or description
|
|
79
|
+
*/
|
|
80
|
+
export declare function searchItems(projectPath: string, searchTerm: string): Promise<Item[]>;
|
|
81
|
+
export declare const itemToolDefinitions: ToolDefinition[];
|
|
82
|
+
//# sourceMappingURL=itemTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"itemTools.d.ts","sourceRoot":"","sources":["../../src/tools/itemTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { readJsonFile, readJsonArraySoft, getDataPath } from '../utils/fileHandler.js';
|
|
3
|
+
import { commitChange } from '../utils/commit.js';
|
|
4
|
+
import { definedOnly } from '../utils/records.js';
|
|
5
|
+
import { firstMissingEffectRef } from '../validation/createRefs.js';
|
|
6
|
+
/** The editor's shape for a fresh "New Item" (all zeros / sensible defaults). */
|
|
7
|
+
export function defaultItem() {
|
|
8
|
+
return {
|
|
9
|
+
name: '',
|
|
10
|
+
description: '',
|
|
11
|
+
iconIndex: 0,
|
|
12
|
+
itypeId: 1, // Regular Item
|
|
13
|
+
scope: 0, // None
|
|
14
|
+
occasion: 0, // Always
|
|
15
|
+
speed: 0,
|
|
16
|
+
successRate: 100,
|
|
17
|
+
repeats: 1,
|
|
18
|
+
tpGain: 0,
|
|
19
|
+
hitType: 0,
|
|
20
|
+
animationId: 0,
|
|
21
|
+
price: 0,
|
|
22
|
+
consumable: true,
|
|
23
|
+
damage: { type: 0, elementId: 0, formula: '0', variance: 20, critical: false },
|
|
24
|
+
effects: [],
|
|
25
|
+
note: '',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** The editor's shape for a fresh "New Weapon". `etypeId` 1 = Weapon slot; flat param bonuses. */
|
|
29
|
+
export function defaultWeapon() {
|
|
30
|
+
return {
|
|
31
|
+
name: '',
|
|
32
|
+
description: '',
|
|
33
|
+
iconIndex: 0,
|
|
34
|
+
wtypeId: 1,
|
|
35
|
+
price: 0,
|
|
36
|
+
params: [0, 0, 0, 0, 0, 0, 0, 0],
|
|
37
|
+
traits: [],
|
|
38
|
+
etypeId: 1,
|
|
39
|
+
animationId: 0,
|
|
40
|
+
note: '',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** The editor's shape for a fresh "New Armor". `etypeId` 2 = Shield slot; flat param bonuses. */
|
|
44
|
+
export function defaultArmor() {
|
|
45
|
+
return {
|
|
46
|
+
name: '',
|
|
47
|
+
description: '',
|
|
48
|
+
iconIndex: 0,
|
|
49
|
+
atypeId: 1,
|
|
50
|
+
price: 0,
|
|
51
|
+
params: [0, 0, 0, 0, 0, 0, 0, 0],
|
|
52
|
+
traits: [],
|
|
53
|
+
etypeId: 2,
|
|
54
|
+
note: '',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get all items from the project
|
|
59
|
+
*/
|
|
60
|
+
export async function getItems(projectPath) {
|
|
61
|
+
const itemsPath = getDataPath(projectPath, 'Items.json');
|
|
62
|
+
return await readJsonFile(itemsPath);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get all weapons from the project
|
|
66
|
+
*/
|
|
67
|
+
export async function getWeapons(projectPath) {
|
|
68
|
+
const weaponsPath = getDataPath(projectPath, 'Weapons.json');
|
|
69
|
+
return await readJsonFile(weaponsPath);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get all armors from the project
|
|
73
|
+
*/
|
|
74
|
+
export async function getArmors(projectPath) {
|
|
75
|
+
const armorsPath = getDataPath(projectPath, 'Armors.json');
|
|
76
|
+
return await readJsonFile(armorsPath);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get all skills from the project
|
|
80
|
+
*/
|
|
81
|
+
export async function getSkills(projectPath) {
|
|
82
|
+
const skillsPath = getDataPath(projectPath, 'Skills.json');
|
|
83
|
+
return await readJsonFile(skillsPath);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get a specific item by ID
|
|
87
|
+
*/
|
|
88
|
+
export async function getItem(projectPath, itemId) {
|
|
89
|
+
const items = await getItems(projectPath);
|
|
90
|
+
return items.find((item) => item && item.id === itemId) || null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Update an item's data
|
|
94
|
+
*/
|
|
95
|
+
export async function updateItem(projectPath, itemId, updates) {
|
|
96
|
+
const items = await getItems(projectPath);
|
|
97
|
+
const itemIndex = items.findIndex((item) => item && item.id === itemId);
|
|
98
|
+
if (itemIndex === -1) {
|
|
99
|
+
throw new Error(`Item with ID ${itemId} not found`);
|
|
100
|
+
}
|
|
101
|
+
items[itemIndex] = { ...items[itemIndex], ...updates, id: itemId };
|
|
102
|
+
const itemsPath = getDataPath(projectPath, 'Items.json');
|
|
103
|
+
await commitChange(itemsPath, items);
|
|
104
|
+
return items[itemIndex];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Build one new item record against the current array — the shared per-record
|
|
108
|
+
* source of truth for both `create_item` and `batch_create`. Pure record
|
|
109
|
+
* construction only (`defaultItem()` template + caller overrides + id-last); the
|
|
110
|
+
* effect reference check stays with the caller (it needs cross-file reads).
|
|
111
|
+
*/
|
|
112
|
+
export function buildItemRecord(existing, input) {
|
|
113
|
+
const maxId = existing.reduce((max, item) => (item && item.id > max ? item.id : max), 0);
|
|
114
|
+
return {
|
|
115
|
+
...defaultItem(),
|
|
116
|
+
...definedOnly(input),
|
|
117
|
+
id: maxId + 1,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/** Build one new weapon record against the current array (shared by create/batch). */
|
|
121
|
+
export function buildWeaponRecord(existing, input) {
|
|
122
|
+
const maxId = existing.reduce((max, w) => (w && w.id > max ? w.id : max), 0);
|
|
123
|
+
return {
|
|
124
|
+
...defaultWeapon(),
|
|
125
|
+
...definedOnly(input),
|
|
126
|
+
id: maxId + 1,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/** Build one new armor record against the current array (shared by create/batch). */
|
|
130
|
+
export function buildArmorRecord(existing, input) {
|
|
131
|
+
const maxId = existing.reduce((max, a) => (a && a.id > max ? a.id : max), 0);
|
|
132
|
+
return {
|
|
133
|
+
...defaultArmor(),
|
|
134
|
+
...definedOnly(input),
|
|
135
|
+
id: maxId + 1,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Reject an item whose effects point at a non-existent state / skill / common
|
|
140
|
+
* event (P2-3: throw at author time, matching create_skill and its siblings).
|
|
141
|
+
* Shared by `create_item` and `batch_create`.
|
|
142
|
+
*/
|
|
143
|
+
export async function assertItemEffectRefs(projectPath, item) {
|
|
144
|
+
const [states, skills, commonEvents] = await Promise.all([
|
|
145
|
+
readJsonArraySoft(getDataPath(projectPath, 'States.json')),
|
|
146
|
+
readJsonArraySoft(getDataPath(projectPath, 'Skills.json')),
|
|
147
|
+
readJsonArraySoft(getDataPath(projectPath, 'CommonEvents.json')),
|
|
148
|
+
]);
|
|
149
|
+
const missing = firstMissingEffectRef(item.effects, { states, skills, commonEvents });
|
|
150
|
+
if (missing) {
|
|
151
|
+
throw new Error(`Cannot create item "${item.name}": ${missing}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Create a new item. Only the fields the caller supplies override the
|
|
156
|
+
* `defaultItem()` template; the computed id always wins (spread last).
|
|
157
|
+
*/
|
|
158
|
+
export async function createItem(projectPath, overrides) {
|
|
159
|
+
const items = await getItems(projectPath);
|
|
160
|
+
const newItem = buildItemRecord(items, overrides);
|
|
161
|
+
await assertItemEffectRefs(projectPath, newItem);
|
|
162
|
+
items.push(newItem);
|
|
163
|
+
const itemsPath = getDataPath(projectPath, 'Items.json');
|
|
164
|
+
await commitChange(itemsPath, items);
|
|
165
|
+
return newItem;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Create a new weapon. Overrides merge over the `defaultWeapon()` template; the
|
|
169
|
+
* computed id always wins.
|
|
170
|
+
*/
|
|
171
|
+
export async function createWeapon(projectPath, overrides) {
|
|
172
|
+
const weapons = await getWeapons(projectPath);
|
|
173
|
+
const newWeapon = buildWeaponRecord(weapons, overrides);
|
|
174
|
+
weapons.push(newWeapon);
|
|
175
|
+
const weaponsPath = getDataPath(projectPath, 'Weapons.json');
|
|
176
|
+
await commitChange(weaponsPath, weapons);
|
|
177
|
+
return newWeapon;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Create a new armor. Overrides merge over the `defaultArmor()` template; the
|
|
181
|
+
* computed id always wins.
|
|
182
|
+
*/
|
|
183
|
+
export async function createArmor(projectPath, overrides) {
|
|
184
|
+
const armors = await getArmors(projectPath);
|
|
185
|
+
const newArmor = buildArmorRecord(armors, overrides);
|
|
186
|
+
armors.push(newArmor);
|
|
187
|
+
const armorsPath = getDataPath(projectPath, 'Armors.json');
|
|
188
|
+
await commitChange(armorsPath, armors);
|
|
189
|
+
return newArmor;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Update a weapon's data
|
|
193
|
+
*/
|
|
194
|
+
export async function updateWeapon(projectPath, weaponId, updates) {
|
|
195
|
+
const weapons = await getWeapons(projectPath);
|
|
196
|
+
const weaponIndex = weapons.findIndex((weapon) => weapon && weapon.id === weaponId);
|
|
197
|
+
if (weaponIndex === -1) {
|
|
198
|
+
throw new Error(`Weapon with ID ${weaponId} not found`);
|
|
199
|
+
}
|
|
200
|
+
weapons[weaponIndex] = { ...weapons[weaponIndex], ...updates, id: weaponId };
|
|
201
|
+
const weaponsPath = getDataPath(projectPath, 'Weapons.json');
|
|
202
|
+
await commitChange(weaponsPath, weapons);
|
|
203
|
+
return weapons[weaponIndex];
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Update an armor's data
|
|
207
|
+
*/
|
|
208
|
+
export async function updateArmor(projectPath, armorId, updates) {
|
|
209
|
+
const armors = await getArmors(projectPath);
|
|
210
|
+
const armorIndex = armors.findIndex((armor) => armor && armor.id === armorId);
|
|
211
|
+
if (armorIndex === -1) {
|
|
212
|
+
throw new Error(`Armor with ID ${armorId} not found`);
|
|
213
|
+
}
|
|
214
|
+
armors[armorIndex] = { ...armors[armorIndex], ...updates, id: armorId };
|
|
215
|
+
const armorsPath = getDataPath(projectPath, 'Armors.json');
|
|
216
|
+
await commitChange(armorsPath, armors);
|
|
217
|
+
return armors[armorIndex];
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Update a skill's data
|
|
221
|
+
*/
|
|
222
|
+
export async function updateSkill(projectPath, skillId, updates) {
|
|
223
|
+
const skills = await getSkills(projectPath);
|
|
224
|
+
const skillIndex = skills.findIndex((skill) => skill && skill.id === skillId);
|
|
225
|
+
if (skillIndex === -1) {
|
|
226
|
+
throw new Error(`Skill with ID ${skillId} not found`);
|
|
227
|
+
}
|
|
228
|
+
skills[skillIndex] = { ...skills[skillIndex], ...updates };
|
|
229
|
+
const skillsPath = getDataPath(projectPath, 'Skills.json');
|
|
230
|
+
await commitChange(skillsPath, skills);
|
|
231
|
+
return skills[skillIndex];
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Search items by name or description
|
|
235
|
+
*/
|
|
236
|
+
export async function searchItems(projectPath, searchTerm) {
|
|
237
|
+
const items = await getItems(projectPath);
|
|
238
|
+
const lowerSearchTerm = searchTerm.toLowerCase();
|
|
239
|
+
return items.filter((item) => !!item &&
|
|
240
|
+
(item.name.toLowerCase().includes(lowerSearchTerm) ||
|
|
241
|
+
item.description.toLowerCase().includes(lowerSearchTerm)));
|
|
242
|
+
}
|
|
243
|
+
export const itemToolDefinitions = [
|
|
244
|
+
{
|
|
245
|
+
name: 'create_item',
|
|
246
|
+
mutates: true,
|
|
247
|
+
description: "Create a new item in data/Items.json. Only `name` is worth passing; omitted fields use the editor's new-item defaults (Regular Item, consumable, no effects). Allocates and returns the next unused item id. An effect referencing a missing record throws: Add/Remove State (code 21/22) → state, Learn Skill (43) → skill, Common Event (44) → common event.",
|
|
248
|
+
inputSchema: {
|
|
249
|
+
name: z.string().describe('Item name'),
|
|
250
|
+
description: z.string().optional().describe('In-game description text'),
|
|
251
|
+
iconIndex: z.number().int().optional().describe('Icon index (IconSet.png)'),
|
|
252
|
+
itypeId: z
|
|
253
|
+
.number()
|
|
254
|
+
.int()
|
|
255
|
+
.optional()
|
|
256
|
+
.describe('Item type: 1 Regular, 2 Key Item, 3 Hidden A, 4 Hidden B'),
|
|
257
|
+
scope: z
|
|
258
|
+
.number()
|
|
259
|
+
.int()
|
|
260
|
+
.optional()
|
|
261
|
+
.describe('Target scope (0 none, 1 one enemy, 7 one ally, …)'),
|
|
262
|
+
occasion: z.number().int().optional().describe('Usable: 0 always, 1 battle, 2 menu, 3 never'),
|
|
263
|
+
price: z.number().int().optional().describe('Buy price (sells for half)'),
|
|
264
|
+
consumable: z.boolean().optional().describe('Consumed on use'),
|
|
265
|
+
successRate: z.number().int().optional().describe('Success rate percent'),
|
|
266
|
+
repeats: z.number().int().optional().describe('Number of hits/repeats'),
|
|
267
|
+
tpGain: z.number().int().optional().describe('User TP gained on use'),
|
|
268
|
+
hitType: z.number().int().optional().describe('0 certain, 1 physical, 2 magical'),
|
|
269
|
+
animationId: z.number().int().optional().describe('Animation id shown on use'),
|
|
270
|
+
damage: z
|
|
271
|
+
.record(z.string(), z.unknown())
|
|
272
|
+
.optional()
|
|
273
|
+
.describe('Damage object { type, elementId, formula, variance, critical }'),
|
|
274
|
+
effects: z
|
|
275
|
+
.array(z.unknown())
|
|
276
|
+
.optional()
|
|
277
|
+
.describe('Effect objects { code, dataId, value1, value2 }'),
|
|
278
|
+
note: z.string().optional().describe('Note field'),
|
|
279
|
+
},
|
|
280
|
+
handler: (ctx, args) => {
|
|
281
|
+
const { dryRun: _dryRun, ...overrides } = args;
|
|
282
|
+
return createItem(ctx.projectPath, overrides);
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
name: 'update_item',
|
|
287
|
+
mutates: true,
|
|
288
|
+
description: "Update an item's properties (shallow merge into the existing record)",
|
|
289
|
+
inputSchema: {
|
|
290
|
+
itemId: z.number().int().positive().describe('The ID of the item to update'),
|
|
291
|
+
updates: z
|
|
292
|
+
.record(z.string(), z.unknown())
|
|
293
|
+
.describe('Object containing item properties to update'),
|
|
294
|
+
},
|
|
295
|
+
handler: (ctx, args) => updateItem(ctx.projectPath, args.itemId, args.updates),
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
name: 'search_items',
|
|
299
|
+
description: 'Search items by name or description',
|
|
300
|
+
inputSchema: { searchTerm: z.string().describe('The search term to find items') },
|
|
301
|
+
handler: (ctx, args) => searchItems(ctx.projectPath, args.searchTerm),
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
name: 'create_weapon',
|
|
305
|
+
mutates: true,
|
|
306
|
+
description: "Create a new weapon in data/Weapons.json. Only `name` is required; omitted fields use the editor's new-weapon defaults (Weapon equip slot, no stat bonuses). `params` is a flat 8-length stat bonus [maxHP, maxMP, atk, def, mat, mdf, agi, luk]. Allocates and returns the next unused weapon id.",
|
|
307
|
+
inputSchema: {
|
|
308
|
+
name: z.string().describe('Weapon name'),
|
|
309
|
+
description: z.string().optional().describe('In-game description text'),
|
|
310
|
+
iconIndex: z.number().int().optional().describe('Icon index (IconSet.png)'),
|
|
311
|
+
wtypeId: z.number().int().optional().describe('Weapon type id (System.json weaponTypes)'),
|
|
312
|
+
price: z.number().int().optional().describe('Buy price'),
|
|
313
|
+
params: z
|
|
314
|
+
.array(z.number())
|
|
315
|
+
.length(8)
|
|
316
|
+
.optional()
|
|
317
|
+
.describe('8 flat stat bonuses [maxHP, maxMP, atk, def, mat, mdf, agi, luk]'),
|
|
318
|
+
animationId: z.number().int().optional().describe('Attack animation id'),
|
|
319
|
+
traits: z.array(z.unknown()).optional().describe('Trait objects { code, dataId, value }'),
|
|
320
|
+
note: z.string().optional().describe('Note field'),
|
|
321
|
+
},
|
|
322
|
+
handler: (ctx, args) => {
|
|
323
|
+
const { dryRun: _dryRun, ...overrides } = args;
|
|
324
|
+
return createWeapon(ctx.projectPath, overrides);
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
name: 'update_weapon',
|
|
329
|
+
mutates: true,
|
|
330
|
+
description: "Update a weapon's properties (shallow merge into the existing record)",
|
|
331
|
+
inputSchema: {
|
|
332
|
+
weaponId: z.number().int().positive().describe('The ID of the weapon to update'),
|
|
333
|
+
updates: z
|
|
334
|
+
.record(z.string(), z.unknown())
|
|
335
|
+
.describe('Object containing weapon properties to update'),
|
|
336
|
+
},
|
|
337
|
+
handler: (ctx, args) => updateWeapon(ctx.projectPath, args.weaponId, args.updates),
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: 'create_armor',
|
|
341
|
+
mutates: true,
|
|
342
|
+
description: "Create a new armor in data/Armors.json. Only `name` is required; omitted fields use the editor's new-armor defaults (Shield equip slot, no stat bonuses). `params` is a flat 8-length stat bonus; `etypeId` is the equip slot (System.json equipTypes: 2 Shield, 3 Head, 4 Body, 5 Accessory). Allocates and returns the next unused armor id.",
|
|
343
|
+
inputSchema: {
|
|
344
|
+
name: z.string().describe('Armor name'),
|
|
345
|
+
description: z.string().optional().describe('In-game description text'),
|
|
346
|
+
iconIndex: z.number().int().optional().describe('Icon index (IconSet.png)'),
|
|
347
|
+
atypeId: z.number().int().optional().describe('Armor type id (System.json armorTypes)'),
|
|
348
|
+
etypeId: z
|
|
349
|
+
.number()
|
|
350
|
+
.int()
|
|
351
|
+
.optional()
|
|
352
|
+
.describe('Equip slot (equipTypes: 2 Shield, 3 Head, 4 Body, 5 Accessory)'),
|
|
353
|
+
price: z.number().int().optional().describe('Buy price'),
|
|
354
|
+
params: z
|
|
355
|
+
.array(z.number())
|
|
356
|
+
.length(8)
|
|
357
|
+
.optional()
|
|
358
|
+
.describe('8 flat stat bonuses [maxHP, maxMP, atk, def, mat, mdf, agi, luk]'),
|
|
359
|
+
traits: z.array(z.unknown()).optional().describe('Trait objects { code, dataId, value }'),
|
|
360
|
+
note: z.string().optional().describe('Note field'),
|
|
361
|
+
},
|
|
362
|
+
handler: (ctx, args) => {
|
|
363
|
+
const { dryRun: _dryRun, ...overrides } = args;
|
|
364
|
+
return createArmor(ctx.projectPath, overrides);
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
name: 'update_armor',
|
|
369
|
+
mutates: true,
|
|
370
|
+
description: "Update an armor's properties (shallow merge into the existing record)",
|
|
371
|
+
inputSchema: {
|
|
372
|
+
armorId: z.number().int().positive().describe('The ID of the armor to update'),
|
|
373
|
+
updates: z
|
|
374
|
+
.record(z.string(), z.unknown())
|
|
375
|
+
.describe('Object containing armor properties to update'),
|
|
376
|
+
},
|
|
377
|
+
handler: (ctx, args) => updateArmor(ctx.projectPath, args.armorId, args.updates),
|
|
378
|
+
},
|
|
379
|
+
];
|
|
380
|
+
//# sourceMappingURL=itemTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"itemTools.js","sourceRoot":"","sources":["../../src/tools/itemTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ToolDefinition } from '../registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Database tables that can be listed as a names-only index. Each is stored as a
|
|
4
|
+
* 1-indexed JSON array whose entries share an `{ id, name }` shape (slot 0 is
|
|
5
|
+
* null), so a single generic lister covers all of them.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LISTABLE_FILES: {
|
|
8
|
+
readonly actors: "Actors.json";
|
|
9
|
+
readonly classes: "Classes.json";
|
|
10
|
+
readonly items: "Items.json";
|
|
11
|
+
readonly weapons: "Weapons.json";
|
|
12
|
+
readonly armors: "Armors.json";
|
|
13
|
+
readonly skills: "Skills.json";
|
|
14
|
+
readonly enemies: "Enemies.json";
|
|
15
|
+
readonly troops: "Troops.json";
|
|
16
|
+
readonly states: "States.json";
|
|
17
|
+
readonly common_events: "CommonEvents.json";
|
|
18
|
+
readonly tilesets: "Tilesets.json";
|
|
19
|
+
readonly maps: "MapInfos.json";
|
|
20
|
+
};
|
|
21
|
+
export type ListableType = keyof typeof LISTABLE_FILES;
|
|
22
|
+
/**
|
|
23
|
+
* The subset of {@link LISTABLE_FILES} that `get_database` dumps in full. Two
|
|
24
|
+
* listable tables are deliberately absent: `maps` is an index, not a record
|
|
25
|
+
* table (`get_map_infos` / `get_map` own it), and a raw `tilesets` dump carries
|
|
26
|
+
* an 8192-entry `flags` array per tileset — `get_tilesets` summarizes it and
|
|
27
|
+
* `get_tile_flags` decodes single entries instead.
|
|
28
|
+
*/
|
|
29
|
+
export declare const DATABASE_TYPES: readonly ["actors", "classes", "items", "weapons", "armors", "skills", "enemies", "troops", "states", "common_events"];
|
|
30
|
+
export type DatabaseType = (typeof DATABASE_TYPES)[number];
|
|
31
|
+
/**
|
|
32
|
+
* Read one database table in full, or a single record from it by id.
|
|
33
|
+
*
|
|
34
|
+
* Every table is a 1-indexed array whose slot 0 is null, so one generic reader
|
|
35
|
+
* replaces the ten per-table `get_*` dumps that each cost a client a tool slot.
|
|
36
|
+
* The return shapes are the ones those tools had: the raw array (slot-0 null
|
|
37
|
+
* included) for a whole table, the record or `null` for a lookup that misses.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getDatabase<T extends {
|
|
40
|
+
id: number;
|
|
41
|
+
}>(projectPath: string, type: DatabaseType, id?: number): Promise<(T | null)[] | T | null>;
|
|
42
|
+
export interface NamedEntry {
|
|
43
|
+
id: number;
|
|
44
|
+
name: string;
|
|
45
|
+
}
|
|
46
|
+
export interface NamedIndex {
|
|
47
|
+
type: ListableType;
|
|
48
|
+
count: number;
|
|
49
|
+
entries: NamedEntry[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Return a compact `{ id, name }` index for one database table — far cheaper
|
|
53
|
+
* than the full-record `get_*`/`search_*` dumps when all you need is to look up
|
|
54
|
+
* or sanity-check an ID before wiring it into an event.
|
|
55
|
+
*/
|
|
56
|
+
export declare function listNames(projectPath: string, type: ListableType): Promise<NamedIndex>;
|
|
57
|
+
export declare const listToolDefinitions: ToolDefinition[];
|
|
58
|
+
//# sourceMappingURL=listTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listTools.d.ts","sourceRoot":"","sources":["../../src/tools/listTools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAajB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,cAAc,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,wHAWjB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACxD,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,EAClB,EAAE,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAIlC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAc5F;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAc,EAiC/C,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { readJsonFile, getDataPath } from '../utils/fileHandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Database tables that can be listed as a names-only index. Each is stored as a
|
|
5
|
+
* 1-indexed JSON array whose entries share an `{ id, name }` shape (slot 0 is
|
|
6
|
+
* null), so a single generic lister covers all of them.
|
|
7
|
+
*/
|
|
8
|
+
export const LISTABLE_FILES = {
|
|
9
|
+
actors: 'Actors.json',
|
|
10
|
+
classes: 'Classes.json',
|
|
11
|
+
items: 'Items.json',
|
|
12
|
+
weapons: 'Weapons.json',
|
|
13
|
+
armors: 'Armors.json',
|
|
14
|
+
skills: 'Skills.json',
|
|
15
|
+
enemies: 'Enemies.json',
|
|
16
|
+
troops: 'Troops.json',
|
|
17
|
+
states: 'States.json',
|
|
18
|
+
common_events: 'CommonEvents.json',
|
|
19
|
+
tilesets: 'Tilesets.json',
|
|
20
|
+
maps: 'MapInfos.json',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The subset of {@link LISTABLE_FILES} that `get_database` dumps in full. Two
|
|
24
|
+
* listable tables are deliberately absent: `maps` is an index, not a record
|
|
25
|
+
* table (`get_map_infos` / `get_map` own it), and a raw `tilesets` dump carries
|
|
26
|
+
* an 8192-entry `flags` array per tileset — `get_tilesets` summarizes it and
|
|
27
|
+
* `get_tile_flags` decodes single entries instead.
|
|
28
|
+
*/
|
|
29
|
+
export const DATABASE_TYPES = [
|
|
30
|
+
'actors',
|
|
31
|
+
'classes',
|
|
32
|
+
'items',
|
|
33
|
+
'weapons',
|
|
34
|
+
'armors',
|
|
35
|
+
'skills',
|
|
36
|
+
'enemies',
|
|
37
|
+
'troops',
|
|
38
|
+
'states',
|
|
39
|
+
'common_events',
|
|
40
|
+
];
|
|
41
|
+
/**
|
|
42
|
+
* Read one database table in full, or a single record from it by id.
|
|
43
|
+
*
|
|
44
|
+
* Every table is a 1-indexed array whose slot 0 is null, so one generic reader
|
|
45
|
+
* replaces the ten per-table `get_*` dumps that each cost a client a tool slot.
|
|
46
|
+
* The return shapes are the ones those tools had: the raw array (slot-0 null
|
|
47
|
+
* included) for a whole table, the record or `null` for a lookup that misses.
|
|
48
|
+
*/
|
|
49
|
+
export async function getDatabase(projectPath, type, id) {
|
|
50
|
+
const records = await readJsonFile(getDataPath(projectPath, LISTABLE_FILES[type]));
|
|
51
|
+
if (id === undefined)
|
|
52
|
+
return records;
|
|
53
|
+
return records.find((record) => record && record.id === id) ?? null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Return a compact `{ id, name }` index for one database table — far cheaper
|
|
57
|
+
* than the full-record `get_*`/`search_*` dumps when all you need is to look up
|
|
58
|
+
* or sanity-check an ID before wiring it into an event.
|
|
59
|
+
*/
|
|
60
|
+
export async function listNames(projectPath, type) {
|
|
61
|
+
const file = LISTABLE_FILES[type];
|
|
62
|
+
if (!file) {
|
|
63
|
+
throw new Error(`Unknown list type: ${type}. Valid types: ${Object.keys(LISTABLE_FILES).join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
const records = await readJsonFile(getDataPath(projectPath, file));
|
|
66
|
+
const entries = records
|
|
67
|
+
.filter((record) => record != null)
|
|
68
|
+
.map((record) => ({ id: record.id, name: record.name }));
|
|
69
|
+
return { type, count: entries.length, entries };
|
|
70
|
+
}
|
|
71
|
+
export const listToolDefinitions = [
|
|
72
|
+
{
|
|
73
|
+
name: 'list_names',
|
|
74
|
+
description: 'Cheap names-only index for a database table. Returns { id, name } entries instead of full records — use it to look up or sanity-check IDs before wiring them into events, without paying the token cost of a full get_*/search_* dump.',
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: z
|
|
77
|
+
.enum(Object.keys(LISTABLE_FILES))
|
|
78
|
+
.describe('Which table to index: actors, classes, items, weapons, armors, skills, enemies, troops, states, common_events, tilesets, or maps.'),
|
|
79
|
+
},
|
|
80
|
+
handler: (ctx, args) => listNames(ctx.projectPath, args.type),
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'get_database',
|
|
84
|
+
description: 'Read a database table in full: actors, classes, items, weapons, armors, skills, enemies, troops, states, or common_events. Returns the raw 1-indexed array (slot 0 is null), or — with `id` — that single record, or null if no such record exists. These are full records: prefer list_names for an id→name index, or search_actors/search_items/search_skills to find records by name, and reach for this only when you need every field. Maps and tilesets are not here: use get_map_infos/get_map and get_tilesets/get_tile_flags. Read-only.',
|
|
85
|
+
inputSchema: {
|
|
86
|
+
type: z
|
|
87
|
+
.enum(DATABASE_TYPES)
|
|
88
|
+
.describe('Which table to read: actors, classes, items, weapons, armors, skills, enemies, troops, states, or common_events.'),
|
|
89
|
+
id: z
|
|
90
|
+
.number()
|
|
91
|
+
.int()
|
|
92
|
+
.positive()
|
|
93
|
+
.optional()
|
|
94
|
+
.describe('Return just this record (null if missing); omitted = the whole table'),
|
|
95
|
+
},
|
|
96
|
+
handler: (ctx, args) => getDatabase(ctx.projectPath, args.type, args.id),
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
//# sourceMappingURL=listTools.js.map
|