Создание скрипта
От пустого шаблона до скрипта с админ-панелью, по правилам AI Core.
Создайте его из шаблона
bun run new garbagejob "Garbage routes with pay per stop"
bun install
cd resources/[ai]/ai-garbagejob && git init && bun run buildЗатем добавьте ensure ai-garbagejob в server.cfg. Шаблон даёт вам resource/client, resource/server, resource/common, locales/en.json, CLAUDE.md, который нужно заполнить, и настройку сборки.
Добавьте панель
Напишите resource/server/schema.ts (файлы, вкладки, карточки, виджеты) и создайте new AdminPanel(schema) на сервере. Данные, которые нужны миру (места, блипы, цены, которые видят игроки), получают sync: "all" и читаются на клиенте через new AdminWorld([...]); всё остальное остаётся на сервере.
Используйте библиотеку для всего
// клиент: место, которым пользуются игроки, показывается как prompt или опция target
const points = new Points();
points.add("depot", {
coords: route.depot,
label: Locale("PROMPT_START"),
icon: "truck",
canShow: () => hasJob(["garbage"]),
onPressed: () => callAction(EVENTS.start, [route.id], { fallback: "ERR_FAR" }),
});// сервер: запрос проверяется до того, как что-либо изменится
onClientCallback(
EVENTS.start,
{ args: oneArg((v) => readText(v, 32)), guards: [hasCharacter()], lock: true },
(source, id) => {
if (!isNear(source, route.depot, 3)) return fail("ERR_FAR");
return { ok: true };
},
);Проверьте и перезапустите
bun run typecheck && bun run lint && bun run build
bun tools/rcon.ts --log ../logs/fxserver.log --wait 3 "ensure ai-garbagejob"Проще всего попросить ИИ: откройте папку сервера в Claude Code и опишите скрипт. Правила заставят его использовать шаблон, библиотеку и панель. См. Работа с ИИ.