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 архив карты.
Пример проекта сделаю позже. Возможно, позже сделаю пример по сборке в бандл.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
20
1 год назад
0
Ставь класс, если хочешь писать на прототипном ООП карты для Warcraft III.
0
37
1 год назад
Отредактирован ScorpioT1000
0
Ждём PSQL to jass
0
29
1 год назад
0
Встроенный ватчер есть, или нужно самому костылить?
0
20
1 год назад
0
nazarpunk, в этом пакете нет вообще кода. Только декларации. Немного не понял что такое ватчер? Это когда скрипт мониторит изменения в файле и перекомпиливает его, когда что то поменялось? Или что то для самого кода?
0
37
1 год назад
0
Kokomi, думаю, именно "висящая" команда в консоли, которая ждет изменения/добавления/удаления файлов в папке и перебилживает проект
0
20
1 год назад
Отредактирован Kokomi
0
ScorpioT1000, tstl умеет это делать. tstl --watch
0
37
1 год назад
Отредактирован ScorpioT1000
0
Кстати, алиас команд dev/build - обычно отличается режимом dev/prod сборки, а не то, что одно собирает, а другое - вотчер
0
20
1 год назад
Отредактирован Kokomi
0
ScorpioT1000, ну во фронте мало, поэтому сделал так, как было сделано в документации к tstl
0
27
1 год назад
0
Как это работает.. есть пример
0
20
1 год назад
Отредактирован Kokomi
0
МрачныйВорон, вы пишите код на 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);
0
29
1 год назад
0
Потом можно будет писать код на классах
Зачем? Это же будет гигансткая обёртка, которая будет предоставлять посредственный функционал.
0
20
1 год назад
0
nazarpunk, пишу для себя, мне так удобнее
0
19
1 год назад
0
Kokomi, таки ты это же уже сделал. :D
0
20
1 год назад
0
Ev3nt, Я сделал ну максимум 10% от того, что нужно. Самые востребованные мне обертки еще не готовы (виджет, предмет), да и реализация событий юнита требует доработок
0
37
1 год назад
0
Получится ещё один вурст скрипт
0
20
1 год назад
0
ScorpioT1000, о, и правда велосипед делаю
0
27
1 год назад
Отредактирован MpW
0
Kokomi, ой сорри. Сначала не понял. Тут оказывается для удобства, ошибки выводит сразу. Хотя это круто. Но мне редко доставляли ошибки, хотя признаюсь, что бывало, что не ту переменную или тип, потом полчаса возишься. Я тут подумал как вы запускаете в мемхаке луа.. я еще не пробовал на древнем 1 26 патче. Не люблю ваши build run как я ненавижу checkpack. Эту штуку придется настраивать. Нужны пошаговые инструкции для нубов
0
29
1 год назад
0
Так же будет контролироваться соблюдение типов.
Только код не исполняется и посему не все типы одинаково полезны.
Загруженные файлы
0
19
1 год назад
0
МрачныйВорон, UjAPI добавляет новые нативки в игру (в том числе функции из мемхака), war3_lua их парчи и добавляет к себе. Kokomi вручную переписывает их объявление в tstl. :D
0
20
1 год назад
0
Ev3nt, вот не надо тут. Я руками только утилиты декларировал. И не надо путать декларации и мой фетиш на ООП
0
19
1 год назад
0
Kokomi, предлагаю создать ООП-тян, чтобы Kokomi полностью удовлетворился.
0
37
1 год назад
Отредактирован ScorpioT1000
0
Так до портирования дотнет можно дойти, а там и великое будущее за 1.26, ААА проекты, первый варкрафт на Луне, покорение других галактик
Чтобы оставить комментарий, пожалуйста, войдите на сайт.