Luacraft - набор Typesctipt деклараций, содержащий все объявления наивных функций. На данный момент в NPM репозитории содержится пакет для версии 1.26 (Warcraft III - Lua), содержащий в себе все наивные функции для версии 1.26. Дополнительно определены нативные функции из UjAPI.

Настройка Typescript To Lua

Предполагается, что у вас есть базовые знания по использованию пакетного менеджера и вы можете инициализировать npm проект.
  1. Скачиваем зависимости
Выполните команду npm install -D typescript-to-lua typescript
  1. Добавьте скрипты в package.json
В JSON файл добавьте скрипты для сборки и наблюдения за изменениями:
  "scripts": {
    "build": "tstl",
    "dev": "tstl --watch"
  }
Пример package.json
{
  "name": "irina-bot-data",
  "version": "1.0.0",
  "description": "",
  "main": "./dist/index",
  "types": "./dist/index",
  "scripts": {
    "build": "tstl",
    "dev": "tstl --watch"
  },
  "files": [
    "dist/**/*.lua",
    "dist/**/*.d.ts"
  ],
  "author": "",
  "license": "MIT",
  "devDependencies": {
    "lua-types": "^2.13.0",
    "typescript": "^4.8.4",
    "luacraft-1.26": "^1.0.5",
    "typescript-to-lua": "^1.10.1"
  }
}
  1. Создайте в корне проекта файл tsconfig.json. Заполните его
Пример файла
{
  "compilerOptions": {
    "target": "esnext",
    "lib": ["esnext"],
    "moduleResolution": "node",
    "strict": true,
    "rootDir": "./src",
    "outDir": "./dist",
    "module": "CommonJS"
  },
  "tstl": {
    "luaTarget": "5.3",
  },
  "strictFunctionTypes": true
}
Вы можете изменить входной и выходной каталог, указав их в rootDir и outDir соответственно.

Подключение luacarft к проекту

  1. Устанавливаем пакет luacraft-1.26
Выполняем команду npm install -D luacraft-1.26.
  1. Подключаем декларацию типов к typescript проекту
Для этого в файле tsconfig.json добавляем путь к типам. Декларации разложены по категориям: типы, функции, константы. Вы можете подключить сразу все указав luacraft-1.26/all, либо любые другие, которые необходимы вам. Изучить можно тут: github.com/kirill-782/luacraft-1.26/tree/master/types. Должно получиться что-то на подобии этого:
{
  "compilerOptions": {
    "types": ["luacraft-1.26/all"]
  }
}
Готово. Теперь автокомплит будет подсказывать вам константы, функции. Так же будет контролироваться соблюдение типов. Рекомендуем включить строгий режим для функций объявив в tsconfig.json следующее значение:
"strictFunctionTypes": true

Сборка проекта

Выполните в корне проекта в терминале команду npm run build. Если в коде отсутствуют ошибки - в выходном каталоге появятся LUA файлы, которые можно подключать к карте Warcraft III. Обратите внимание, что Warcraft III ищет файл war3map.lua в корне карты. Его нужно создать самостоятельно и в нем подключить нужные файлы.. Скопируйте файлы в w3x архив карты.
Пример проекта сделаю позже. Возможно, позже сделаю пример по сборке в бандл.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
38
Кстати, алиас команд dev/build - обычно отличается режимом dev/prod сборки, а не то, что одно собирает, а другое - вотчер
20
ScorpioT1000, ну во фронте мало, поэтому сделал так, как было сделано в документации к tstl
20
МрачныйВорон, вы пишите код на typescript, tstl конвертирует его в lua. LUA код подключается к warcraft III. На данный момент подход похож на классический LUA, но планируется по мере свободного времени сделать обертки на типы. Потом можно будет писать код на классах
Что хочу сделать в итоге:
const dumpType = (e: UnitEvent) => {
  if (e.detail.triggerUnit instanceof CustomTestUnit) {
    print("CustomTestUnit");
  } else {
    print("Unit");
  }
};

const customUnit = new CustomTestUnit(Player(1), FourCC("Hpal"), 0, 0, 0);
const unit = new Unit(Player(0), FourCC("Hpal"), 0, 0, 0);

unit.lifeRegen += 10;

unit.addEventListener("selected", dumpType);
customUnit.addEventListener("selected", dumpType);
30
Потом можно будет писать код на классах
Зачем? Это же будет гигансткая обёртка, которая будет предоставлять посредственный функционал.
20
Ev3nt, Я сделал ну максимум 10% от того, что нужно. Самые востребованные мне обертки еще не готовы (виджет, предмет), да и реализация событий юнита требует доработок
38
Получится ещё один вурст скрипт
27
Kokomi, ой сорри. Сначала не понял. Тут оказывается для удобства, ошибки выводит сразу. Хотя это круто. Но мне редко доставляли ошибки, хотя признаюсь, что бывало, что не ту переменную или тип, потом полчаса возишься. Я тут подумал как вы запускаете в мемхаке луа.. я еще не пробовал на древнем 1 26 патче. Не люблю ваши build run как я ненавижу checkpack. Эту штуку придется настраивать. Нужны пошаговые инструкции для нубов
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.