Решение проблем
Начните с:
npm run doctorКоманда проверяет killscript.config.json, точки входа, оба TypeScript-контекста,
результат компилятора и сохранённое подключение к игре. Исправьте первую
найденную ошибку, прежде чем случайно менять generated-файлы или
переустанавливать пакеты.
Игра не показывает модуль
Заголовок раздела «Игра не показывает модуль»Игра не загружает папку TypeScript-проекта. Ей нужна сгенерированная папка
непосредственно внутри Modules:
Modules/└── MyModule/ ├── module.json └── scripts/main.luaЗапустите:
npm run install:game -- --modules "/path/to/KILLSCRIPT/Modules"Откройте или переоткройте список модулей и один раз включите MyModule. Если
уже открытый список не сканирует папку повторно, один раз перезапустите игру.
Дальнейший npm run dev сохраняет UUID и обновляет этот модуль на месте.
Файл .KillScript — упакованный модуль с той же внутренней структурой, а не
одиночный текстовый Lua-скрипт.
Сборка успешна, но лога модуля не видно
Заголовок раздела «Сборка успешна, но лога модуля не видно»Откройте игровую консоль кнопкой ~. Возле поля поиска нажмите значок фильтра и
включите категорию с выводом модулей. Иначе правильное сообщение легко теряется
среди логов движка, сети и voice chat.
На время диагностики добавьте однозначную стартовую строку:
import { logger } from "@killscript/sdk/client";logger("Startup").info("client bundle loaded");После нахождения причины удалите лишнюю диагностику.
Сохранение кода не меняет игру
Заголовок раздела «Сохранение кода не меняет игру»Проверьте, что npm run dev всё ещё запущен и последнее сохранение завершилось
синхронизацией. При ошибке компиляции CLI намеренно оставляет в игре предыдущую
рабочую версию.
Если устарело только поведение Reflex, убедитесь, что scripts/server.lua
действительно изменился. Для реального изменения CLI выводит notice о server
reload. Переключение модуля в списке некоторых сборок перезапускает только
клиент.
npm run dev -- --once превращает следующую сборку в одну команду с понятным
успешным или ошибочным exit code.
Sharing violation через SMB
Заголовок раздела «Sharing violation через SMB»Оставьте dev запущенным: он повторяет временные блокировки. Неудачная сборка
вообще не запускает синхронизацию; если ошибка возникает при замене файла, этот
файл восстанавливается. Обновление всей папки не является одной транзакцией,
поэтому ранее заменённые файлы уже могут относиться к новой сборке.
- редактируйте TypeScript в проекте, а не сгенерированный Lua в SMB-папке;
- закройте инструменты, удерживающие сгенерированный файл;
- проверьте право записи в SMB-папку;
- запустите
npm run doctorи сверьте сохранённый путь.
Синхронизация предпочитает одно переименование с заменой. Если файловая система его отклоняет, восстановимый вариант через резервную копию может создать очень короткий промежуток замены.
Импорт не разрешается
Заголовок раздела «Импорт не разрешается»Используйте статический относительный импорт без расширения:
import "./features/feature";Импорты реализации должны оставаться внутри src/. Клиент не может
импортировать серверную реализацию и наоборот. Пакеты npm с кодом выполнения
отклоняются: перенесите небольшую вспомогательную функцию в src/ или
используйте пакет только с типами.
Не вызывайте Lua require() вручную. Компилятор объединяет вложенные файлы,
потому что загрузчик игры надёжно разрешает только пути верхнего уровня.
Глобальный API или метод отсутствует в TypeScript
Заголовок раздела «Глобальный API или метод отсутствует в TypeScript»Проверьте контекст текущего файла. Камеры, управление, UI, звук и визуальные объекты доступны только клиенту. Reflex-файл получает серверные объявления типов. Перенесите код к его владельцу, а для общей задачи передайте простое состояние через типизированную сеть.
Если элемент публичен и документирован в этом контексте, но отсутствует в
типах, оформите баг покрытия объявлений вместо использования any.
CLI отказывается перезаписывать или удалять папку
Заголовок раздела «CLI отказывается перезаписывать или удалять папку»У цели другой UUID модуля или папка не управляется этим проектом. Это защитная проверка.
- проверьте содержимое и владельца папки;
- выберите другое имя в
killscript.config.jsonили самостоятельно удалите конфликтующую папку после проверки; - снова выполните
npm run install:game.
killscript clean --game тоже удаляет только папку с доказанным владением.