Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
| Версия | Дата выпуска | Скачивания | Рейтинг |
|---|---|---|---|
| 0.3.1 | 0 | 0,00 звёзд Оценок: 0 | |
| 0.3.0 | 5 | 0,00 звёзд Оценок: 0 | |
| 0.2.0 | 5 | 0,00 звёзд Оценок: 0 |
amxts 0.3.1 — база данных MySQL прямо в плагине, и ничего больше не держит кадр сервера.
Плагины, собранные под 0.3.0, работают на модуле 0.3.1 как есть. Для нового нужен модуль 0.3.1 —npx amxts upgradeставит его на сервер.
MySQL в amxts
Модуль сам говорит с MySQL и MariaDB — без сторонних библиотек, с TLS — и каждый запрос идёт в своём потоке: сервер никогда не ждёт базу. Таблицы описываются на TypeScript, как в Drizzle, строки приходят с типами:
Опечатка в имени колонки видна в редакторе, значения уходят параметрами, а не текстом SQL. Есть транзакции, сырой SQL рядом (JavaScript:import { asc, double, eq, int, table, varchar } from "@amxts/core/database"; export const records = table("records", { id: int().primaryKey().autoincrement(), steamId: varchar(32).notNull(), map: varchar(64).notNull(), time: double().notNull(), }); const db = new Database(env("MYPLUGIN_DB")); // mysql://… или jdbc:mysql://… прямо из панели хостинга await db.create(records); const top = await db.select().from(records) .where(eq(records.map, server.map)) .orderBy(asc(records.time)) .limit(10);db.query), файлы в BLOB-колонках какUint8Array. Другие базы подключаются провайдерами.
Ничего не держит кадр
Распаковка скачанной карты больше не даёт лаг:await fs.extract(bytes)работает в потоке модуля. Так же запись и чтение байтов и новое сжатие —@amxts/core/zlibкак в Node:gzip,gunzip,deflate,inflate.
Новое в API
Каждый новый вызов проверяется против того же действия на Pawn — и быстрее него.
- Своё движение игрока:
player.movement.airAccelerate = 100, friction, stopSpeed и другие — сервер двигает его с ними, а игра предсказывает их, на любом сервере- Свои поля на сущностях, как у игрока:
door.doorSpeed— общие для плагинов, исчезают вместе с сущностью- Кто что слышит: звук и выстрел можно отдать только части игроков —
event.recipients = [...]; звук одному игроку —door.emitSound(sample, { to: player })- HUD без мигания:
new HudLine({ priority: 1 })— строка важнее держит свой каналentity.touch(other),entity.restart(),player.resetMaxSpeed(),player.jumpSlowdown,server.intermission(),fs.existsSync(path, { game: true })- На обычном HLDS теперь слышно событие
move
Исправления
Storage.getтерял последний символ у значения длиннее 1 КБamxclient_cmdиз Pawn-плагина доходит до команд на TypeScript- Плагин можно назвать как файл ядра (
hooks.ts,facade.ts)Infinity | 0и большие числа считаются как в JavaScript- Модуль показывает свою версию в
amxx modules
Что поменять в коде
fs.extract(bytes)теперь промис:await fs.extract(bytes)или синхронныйfs.extractSync(bytes)—npx amxts upgradeперепишет сам- В событии
startSoundevent.recipients— список игроков, а не число — upgrade покажет такие места
Как обновиться
Нужен Node.js 24 или новее: на Node 22 npm 10 на Linux не может поставить тестовый раннер нового проекта.
C-подобный:npm install -D @amxts/cli@latest npx amxts upgrade
Полный список изменений: релиз v0.3.1 на GitHub
Документация: amxts.github.io/docs
amxts 0.3.0 — большое обновление: модуль стал один, ReAPI больше не нужен, а плагины на TypeScript работают не медленнее Pawn.
Главное
amxts — теперь один модуль
В 0.2 было две части: модульamxts_amxxи плагин-хостamxts_host.amxxвplugins.ini, через который события игры шли в TypeScript. В 0.3 хоста нет: модуль сам слушает игру — команды игроков, сообщения, квары, лог, меню и хуки ReGameDLL/ReHLDS. Между игрой и вашим кодом больше нет Pawn.
Заодно amxts стал быстрее: на каждом замере тестового набора плагин на TypeScript работает как минимум так же быстро, как его двойник на Pawn, а на большинстве — быстрее.
ReAPI не нужен
То, что делали натив ReAPIrg_*, модуль делает сам — через API ReGameDLL, а на чистом HLDS через функции игры. Выдача и отбор оружия, смена команды, возрождение, модели, HUD, текстовые меню,game.restartRound()работают одинаково на:
- ReHLDS + ReGameDLL, с ReAPI и без;
- обычном HLDS от Valve с metamod-p.
Сервер только загружает, собирает ваш компьютер
Сервер больше ничего не компилирует: он загружает готовые.aot. Собираетеnpx amxts buildи заливаете — илиamxts dev/build --deployделают это сами, как.smaкомпилируют дома и заливают.amxx. Комплект для сервера стал в разы меньше.
Одна линия — один ABI
Плагин, собранный под 0.3.0, загружается на любом модуле 0.3: 0.3.1, 0.3.2 и дальше. Патч ядра не заставляет ничего пересобирать.
Что нового
Секреты через env() — токен или ключ не попадают в код и в
.aot, а читаются на сервере изaddons/amxts/.envили окружения:
JavaScript:const token = env("MYPLUGIN_TOKEN"); // обязательный: текст const maxRecords = env("MYPLUGIN_MAX", 100); // число const debug = env("MYPLUGIN_DEBUG", false); // вкл/выкл
player.print и server.print
JavaScript:player.print(`С возвращением, ${player.name}!`); player.print("Раунд перезапущен", "center"); server.print("Смена карты через 30 секунд");
Команды с несколькими именами, обработчик получает игрока:
А каждая команда игрока доходит до событияJavaScript:server.addCommand(["/cp", "cp"], (player) => player.print("Чекпоинт сохранён"));"command", гдеpreventDefault()её останавливает.
Что видит каждый игрок — событие
"entityState": меняете то, что сервер шлёт одному игроку про одну сущность, и изменение видит только он.
Плагины, управляющие плагинами —
server.plugins: список всех плагинов (TypeScript и Pawn), остановка, запуск, перезагрузка, вызов публичной функции Pawn-плагина.
Storage с типами —
new Storage<T>(name)хранит любой интерфейс в JSON и один раз забирает nVault-файл с тем же именем, так что при переносе с Pawn ничего не теряется.
Файлы, загрузки и архивы — файлы читаются и пишутся байтами,
fs.extractраспаковывает zip: плагин может скачать карту и положить её на место.
Движение игрока — у событий движения есть
event.touchCountиevent.frameTime: хватает для jump stats безget_pmoveиз ReAPI.
И ещё
- трассировки:
trace.line,player.aim(куда смотрит игрок),canSee;- сообщения по имени:
player.sendиserver.send;- игрок:
player.model,player.info,player.country,player.showMotd;- экран:
player.screen.hintиHudLine.showAll;- выстрелы: остановить выстрел или показать его только части игроков;
- у
amxts devпанель: карта, игроки, FPS, состояние плагинов, клавиши пересборки, смены карты и рестарта раунда;amxts rconшлёт команду серверу.
Как обновиться
Сначала обновите команду пакетным менеджером проекта:
Потом:C-подобный:npm install -D @amxts/cli@latest
Он переведётC-подобный:npx amxts upgrade@amxts/coreна 0.3.0 и модули на их версии, перепишет код под изменения API, соберёт проект и поставит модуль 0.3.0 на сервер изAMXTS_SERVER. Что нужно проверить руками, он перечислит в конце. Плагинamxts_host.amxxи папкиaddons/amxts/tools/иbuild/старого комплекта больше не нужны.
Полный список изменений и таблица несовместимостей: релиз v0.3.0 на GitHub
Документация: amxts.github.io/docs