Начало работы

Введение

amxts позволяет писать плагины AMX Mod X для Counter-Strike 1.6 на TypeScript. Плагин — обычный файл .ts: привычные типы, классы, замыкания, async/await, события, на которые подписываетесь. Он работает на сервере рядом с вашими плагинами на Pawn, и они вызывают друг друга.

plugin
({
name
: "Welcome",
version
: "1.0.0",
author
: "you" });
server
.
addEventListener
("putInServer", (
event
) => {
print
(
event
.
player
, `Добро пожаловать, ${
event
.
player
.
name
}!`);
});
game
.
addEventListener
("takeDamage", (
event
) => {
if (
event
.
attacker
.
team
==
event
.
player
.
team
)
event
.
preventDefault
(); // без урона по своим
});
server
.
addCommand
("/heal", ({
player
}) => {
if (
player
.
health
< 100)
player
.
health
= 100;
});

Что вы получаете

  • TypeScript, каким вы его знаете: number, string, boolean, массивы, Map, классы и интерфейсы, необязательные поля, замыкания, шаблонные строки.
  • Игроки и сущности — объекты: player.health = 100, player.team, player.hideHud.push("money"), Entity.findAll({ classname: "grenade" }) (Игроки и сущности).
  • События как в браузере: server.addEventListener("putInServer", ...) для сервера, game.addEventListener("takeDamage", ...) для игры, с event.preventDefault() (События игры).
  • Редактор знает игру: каждый натив, каждое событие игры и каждое поле сущности приходят с типом и описанием; опечатка — красная строка, а не ошибка на сервере.
  • Ожидание без блокировки: await sleep(1000), await useFetch<Stats>(url), которые сами отменяются, когда игрок уходит (Async).
  • Сохранили — и уже в игре: amxts dev пересобирает плагин при сохранении и перезагружает его на работающем сервере без смены карты (Начало работы).
  • Тесты без игрового сервера: плагин проверяется на фейковом сервере командой npx amxts test (Тесты).
  • Плагины на Pawn продолжают работать: плагин на TypeScript экспортирует для них нативы и форварды и вызывает их собственные (Нативы, Форварды).

Как это работает

Сборка заранее компилирует каждый плагин в машинный код — файл .aot. Модуль amxts_amxx, модуль AMX Mod X, который вы ставите на сервер, загружает эти файлы и выполняет их внутри AMX Mod X. Каждый натив сервера — AMX Mod X, ReAPI, других модулей и других плагинов — это функция с типами, которую плагин может вызвать.

Что нужно серверу

  • AMX Mod X 1.9 или новее.
  • Модуль amxts_amxx на сервере под Windows или Linux: amxts_amxx.dll или amxts_amxx_i386.so — строка amxts_amxx в modules.ini находит его на обеих.
  • Для всех событий игры, которые есть только у ReGameDLL, в том виде, в каком их поднимает игра (playerSpawn, roundEnd, …), — ReHLDS, ReGameDLL и ReAPI. Свойства сущностей, действия с игроком (give, respawn, …) и большинство событий игры работают и без них — через модули самого AMX Mod X, некоторые события — не целиком (установка).
Рекомендуем ReHLDS
amxts собирается и проверяется на ReHLDS с ReGameDLL и ReAPI и на HLDS от Valve. На обычном HLDS плагин пишется так же, а события игры приходят через Ham Sandwich, лог игры и её сообщения: большинство слышно, только когда игра уже сделала своё, поэтому их не остановить и не изменить, а некоторые — fallDamage, giveDefaultItems, движение игрока — не слышно вовсе (сервер без ReAPI).

Как поставить amxts на сервер и куда ложится каждый файл — Установка на сервер.

Чего amxts пока не умеет и что писать вместо этого — в Ограничениях.

Модули

Модуль — пакет на TypeScript, общий для плагинов (Общие модули). Проект перечисляет модули, которыми пользуется, в amxts.config.ts: модуль, который нужен одному из них, идёт вместе с ним, а модуль, которым не пользуется ни один плагин, не собирается. Официальные:

  • menu-core — меню из файлов INI, YAML или JSON или из кода (Меню): модуль, который стоит добавить для меню сервера. Быстрое меню только в коде — это Menu ядра (меню);
  • config-core — конфиги в INI, YAML или JSON, прочитанные в типизированные объекты (Конфиги);
  • resemiclip — кто сквозь кого проходит, правилом над двумя игроками, поверх модуля ReSemiclip (resemiclip);
  • ftp с v0.2 — FTP, FTPS и SFTP: загрузка, скачивание и список файлов на другом сервере, каждый вызов — промис (ftp).

useFetch и fetch для веб-запросов идут вместе с amxts (HTTP). Другие модули — в каталоге модулей, а ещё можно написать свой.

Дальше

Начало работы: проект, первый плагин и команда, которая пересобирает его при каждом сохранении.