Реклама

Карточный бой, который сервер может переиграть: детерминированный движок браузерной MMO на TypeScript

#Карточный #TypeScript #Зархолд #MMORPG #Клиент
Карточный бой, который сервер может переиграть: детерминированный движок браузерной MMO на TypeScript

Мы делаем «Зархолд» — браузерную MMORPG, в которой любой бой, от первого кобольда до рейдового босса, — это пошаговая карточная дуэль. Клиент написан на React и PixiJS 8, сервер — на Fastify и PostgreSQL, а между ними лежит пакет shared с движком боя на TypeScript. Один и тот же код движка работает в браузере игрока и на сервере. В статье расскажем, как мы устроили движок, чтобы сервер мог переиграть бой ход в ход, как включали серверную проверку, не задев честных игроков, и на каких граблях учились. Код — настоящий, из репозитория, местами сокращён. Читать далее

Мы делаем «Зархолд» — браузерную MMORPG, в которой любой бой, от первого кобольда до рейдового босса, — это пошаговая карточная дуэль. Клиент написан на React и PixiJS 8, сервер — на Fastify и PostgreSQL, а между ними лежит пакет shared с движком боя на TypeScript. Один и тот же код движка работает в браузере игрока и на сервере.

В статье расскажем, как мы устроили движок, чтобы сервер мог переиграть бой ход в ход, как включали серверную проверку, не задев честных игроков, и на каких граблях учились. Код — настоящий, из репозитория, местами сокращён.

Зачем серверу переигрывать бой

В онлайн‑игре с рейтингом доверять клиенту нельзя: если клиент сообщает «я победил», изменённый клиент будет сообщать это всегда. Обычно выбирают одно из двух: