Перейти к содержимому

Hot reload и ресурсы

Во время разработки используется сгенерированная папка прямо в игровой Modules. CLI наблюдает за TypeScript-проектом, собирает его в отдельном локальном месте и начинает синхронизацию только после полной успешной сборки.

save → проверка и компиляция → полная локальная сборка → sync в игру
ошибка ─────────────────────────────────────┘ оставляет прошлую версию
Окно терминала
npx killscript@0.1.2 link "/path/to/KILLSCRIPT/Modules"
npm run install:game
npm run dev

link сохраняет путь текущего компьютера в .killscript/local.json. Файл игнорируется Git, поэтому другой разработчик подключит Windows-путь, macOS SMB mount или другую установку без изменения проекта.

install:game один раз собирает и синхронизирует модуль. dev повторяет тот же безопасный процесс после каждого подходящего изменения и продолжает наблюдать.

Watcher следит за:

  • TypeScript, достижимым от клиентского и Reflex entries;
  • killscript.config.json;
  • top-level объявлениями settings и controls;
  • файлами внутри public/.

Изменение клиентского скрипта подхватывает folder hot reload игры. Реальное изменение scripts/server.lua также запрашивает перезапуск Reflex текущего матча и выводит уведомление. Не выключайте и не включайте модуль только ради серверного кода: в некоторых сборках переключатель списка перезапускает лишь клиент.

При ошибке компиляции неполный результат не копируется. Исправьте первую диагностику и сохраните снова; до этого игра продолжит выполнять последнюю успешную версию.

Кладите файлы в public/ по относительным путям, которые ожидает нативный API:

public/
├── images/
│ └── Icon.png
├── sounds/
│ └── Toggle.ogg
├── ui/
│ └── Hud.uxml
└── localization.csv

Всё содержимое public/ копируется в корень модуля с тем же относительным путём. Например:

const icon = Textures.GetTexture("images/Icon.png");
const sound = Sounds.GetSound("Toggle.ogg");

Сгенерированные имена module.json, config.json, inputs.json и scripts/ зарезервированы. Символические ссылки отклоняются, чтобы релиз случайно не захватил файлы за пределами проекта.

Для игровой Windows-папки через SMB CLI предпочитает замену изменённого файла одним переименованием и повторяет временные ошибки общего доступа. Если файловая система не умеет заменять файл таким способом, применяется восстановимая последовательность через резервную копию; в ней возможен очень короткий промежуток замены.

Целевая папка должна отсутствовать, иметь тот же UUID модуля или marker этого проекта. Чужой модуль никогда не перезаписывается и не удаляется автоматически.

Не редактируйте сгенерированный Lua в SMB-папке: следующая рабочая сборка заменит его. Если синхронизация остановилась, запустите npm run doctor и откройте Решение проблем.