Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Веб-версия игры, маскирующая последствия действий

Веб-версия игры, маскирующая последствия действий 8 года 1 мес. назад #90892

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • Учитель2 место 3 место Готв
Для игр на MV веб является родной платформой, так что нет проблем с тем, чтобы сделать страницу, где пользователи смогут играть в сделанную игру, будто это браузерка.

Но при этом от "клиента" не скрываются никакие подробности игры: движок сразу закачивает всю базу данных, а затем по необходимости - любую из карт. Все данные можно посмотреть с помощью инструментов разработчика, встроенных в браузер. При желании можно точно подсмотреть, как что проходится, какие ответы в диалогах правильные, где спрятаны предметы и какие предстоят враги, а также читерить сколько душе угодно. Для сингловых игр это остаётся на совести игрока, так что проблемы нет.

Но такой мощный инструмент хочется использовать и для игр, где есть элемент состязания между игроками: например, кто первый пройдёт подземелье. Если отдавать клиенту всю информацию без ограничения, то первым пройдёт тот, кто умеет открывать инструменты разработчика.

Понятно, что нельзя сделать так, чтобы все вычисления происходили на сервере... То есть можно - сервер тоже может запустить Яваскрипт, но придётся кардинально переписывать движок, разделив функционал на клиент-сервер. Это слишком много работы.

Но, может, есть какие-то решения проще? Например, не подгружать сразу команды в ивентах, а присылать их в ответ на действия игрока? Тогда хоть перебором и можно будет начать взаимодействие в любым ивентом, но что произойдёт в результате - игрок-ботовод знать не будет. Возможно, кто-то уже задумывался над этим или даже клиент-серверная пара для MV уже существует?
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, Ren310, Демий, yuryol

Веб-версия игры, маскирующая последствия действий 8 года 1 мес. назад #90914

  • AnnTenna
  • AnnTenna аватар
  • Вне сайта
  • Администратор
  • ловлю волны настроения
  • Сообщений: 4541
  • Спасибо получено: 4693
  • Проект месяца 3 местоПроект года 2 место3 место в Кодировке2 место ГотвОрганизатор конкурсовПроект месяца 1 местоВетеранРазработчикПобедитель конкурсаДаритель Стимкея
Хороший вопрос, пожалуй. Я выкладывала игру в интернет на МВ, и даже ругается, что мол по незащищенному протоколу связь. А тот же в-контакт разрешает хтмл-5 игры выкладывать только в https -протоколе (через гугл диск) Возможно, я не грамотна в этом вопросе, но вдруг https протокол как раз может быть решением такой проблемы?

Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: RastaManGames

Веб-версия игры, маскирующая последствия действий 8 года 1 мес. назад #90915

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • Учитель2 место 3 место Готв
Нет, протокол защищает данные от третьей стороны, например, от провайдера, ФСБ и человека с радиоприёмником, находящегося рядом с твоим вай-фаем. Но на стороне игрока данные всё равно расшифровываются, прежде чем поступить в Яваскрипт. И даже если расшифровывать их по мере необходимости, у человека за браузером всё равно тот же набор инструментов для отладки, что у автора за РПГ Мейкером (МВ использует стандартную браузерную отладку).

Соответственно, единственное что остаётся - это изменить логику отправляемых данных и не отправлять чувствительные данные, пока игрок не подпишется под соответствующими действиями. Не отправлять последствия выбора в диалогах, пока игрок не выберет пункт диалога, и так далее...

В идеале - сторона игрока должна быть "ведомой", а сторона сервера - "ведущей": игрок только осуществляет ввод, а вся логика и обработка - на стороне сервера. Это же можно было бы использовать для мультиплеера. Но мне страшно подумаь, сколько сил надо угрохать на подобное (особенно если хочется по возможности сохранить совместимость с плагинами).
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna

Веб-версия игры, маскирующая последствия действий 8 года 1 мес. назад #90919

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • Учитель2 место 3 место Готв
Мне в голову пришло такое решение.
  1. Локальные данные - те, которые игрок может получить и просмотреть свободно, если владеет инструментами разработчика.
  2. Глобальные, или чувствительные данные - хранящиеся на сервере. К ним игрок может получить доступ только “честно”, достигнув определённых точек в игре. Честность, то есть право видеть те или иные данные, проверяется на стороне сервера.
  3. Переменные и переключатели меняются только на сервере, кроме:
    Глобальных, оканчивающихся на LOCAL
    Ивентовых, если это указано в мете
    Можно поставить настройку, чтобы по умолчанию переменные и переключатели менялись локально, а только помеченные - на сервере
  4. Данные плагинов, регистрирующиеся как чувствительные, меняются только на сервере.
  5. Все блоки команд внутри условных ветвлений, зависящих от глобальных данных, изымаются из локальных данных и присылаются сервером при соответствии условиям (условия проверяются на стороне сервера).
  6. Карты, персонажи и другие данные могут быть помечены в мете условиями, которые должны выполниться, чтобы сервер отдал их. В этом случае они изымаются из локальных данных и запрашиваются у сервера.
  7. Страницы ивентов и боёв также могут быть помечены условными, чтобы быть изъятыми из локальных данных и присылаться только сервером условно. Условия переключения на страницы, однако, остаются видны локально (иначе игра не будет знать, когда запросить данные).
  8. Блок выбора или отдельные его ветви, даже не зависящие от глобальных данных, могут быть помечены как чувствительные.
  9. Чтобы привести игру в такой вид, её экспорт нужно обработать дополнительным скриптом, который выделит чувствительные данные и сформирует правила, по которым они присылаются. В результате также изменятся локальные игровые данные: чувствительные данные будут заменены на пустышки с кодами для запросов.
  10. Сервер создаёт контейнер для каждой начатой игры, содержащий переключатели, переменные и другие текущие данные игры; включая “текущее место в списке команд”, для диалогов с выбором. Он отвечает на запросы глобальных данных, но только если соблюдаются условия о состоянии места в списке команд, переключателей и прочего. Также он прогоняет присылаемые исполняемые блоки, которые меняют чувствительные переключатели и прочее.
Последнее редактирование: 8 года 1 мес. назад от EvilCat.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, RastaManGames

Веб-версия игры, маскирующая последствия действий 8 года 1 мес. назад #90925

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Программист RubyПроект месяца 1 местоУчительПроект года 1 местоКоммерсант
1. Все что есть в базе МВ - все базу сервера. Не важно какую.
2. Вся графика, тайлы, музыка, видео - все на клиенте.
3. Выбираем протокол, скорее всего UDP.
4. Делаем сессию на сервере, абстратный слой, который позволит играть в игру нескольким людям, в том числе и одновременно.
5. Клиент не знает ничего.
- При загрузке карты с сервера приходит структура карты, которая на клиенте уже собирается из тайлов.
- При передвижении клиент постоянно сообщает координаты чара, сервер отвечает возможно ли передвижение, наткнулся ли чар на эвент и т.п.
- Когда клиент открывает инвентарь, спеллбук и т.п. от сервера приходит сообщение, что он там видит.

Я бы сделал базовый функционал (тот что есть в мейкере по умолчанию) где-то за месяцев 6, обычно я ошибаюсь со сроками в три раза.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, DK, Ren310, Демий, RastaManGames, EvilCat

Веб-версия игры, маскирующая последствия действий 8 года 1 мес. назад #90931

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • Учитель2 место 3 место Готв
Очень масштабно выходит... Тотальный перепил движка.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.209 секунд