Multiplayer — различия между версиями
Bmor (обсуждение | вклад) |
Bmor (обсуждение | вклад) |
||
Строка 97: | Строка 97: | ||
==Необходимости для игры с мультиплеером== | ==Необходимости для игры с мультиплеером== | ||
+ | |||
+ | ===Внешние настройки=== | ||
* Работоспособный настроенный [[Cloud]]; | * Работоспособный настроенный [[Cloud]]; | ||
* Так же, нужно завести игру на мультиплеерном сервере (на 1й этаж) и получить 4 праметра: '''app_multiplayer''', '''key_multiplayer''', '''server_multiplayer''', '''server_websocket'''; | * Так же, нужно завести игру на мультиплеерном сервере (на 1й этаж) и получить 4 праметра: '''app_multiplayer''', '''key_multiplayer''', '''server_multiplayer''', '''server_websocket'''; | ||
Строка 115: | Строка 117: | ||
[[Файл:Multiplayer_2_waiting.png|400px]] | [[Файл:Multiplayer_2_waiting.png|400px]] | ||
* | * | ||
+ | |||
+ | ===Информация об оппоненте=== | ||
+ | |||
+ | ==Реванш и всё о нём== | ||
+ | |||
+ | =Игра с другом= |
Версия 09:05, 19 июля 2017
Объект необходим для мультиплеерной игры (пока что) между двумя (живыми) людьми.
Содержание
Параметры объекта Multiplayer
Общие параметры
- multiplayer appId - айди приложения на сервере мультиплеера
- timeout - таймаут для поиска игры - сколько времени мультиплеер будет ждать живого игрока
- long timeout - длинный таймаут, для прерывания игры в нештатной ситуации - сколько игра будет ждать при потере связи, сворачивании приложения и т.п.
- turnTime - сумарное время на ход игрока (с учетом спецэффектов)
- seed - номер игрового уровня, пака или еще чего-то, известного конкретной механике
игра с другом
- таблица друзей - таблица парсовых друзей
- текст приглашения - id текстовой записи
Добавляемые свойства
получена информация об играх на сервере - обработчик ответа на game_infos
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
Поиск игры
игра создана - на сервере живой игрок найден и инфа о нём загружена (обычно)
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
живой игрок не найден - таймаут на поиск оппонента закончился
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
Обработчики потери\восстановления соединение
сокет потерян - начинаем повторное подключение - приложение потеряло соединение с сервером и пытается его восстановить
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
повторное подключение успех - соединение с сервером восстановлено
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
сокет потерян = повторное подключение невозможно - приложение не смогло восстановить связь и полностью отрубилось от текущей игровой сессии
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
отвалился другой игрок - проблемы с соединением у оппонента
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
вернулся другой игрок - оппонент восстановил связь, игра продолжается
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
другой игрок не вернется - оппонент не смог восстановить соединение
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
другой игрок не сможет начать игру - оппонент отвалился до начала игры
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
Обработчики реванша
нам предложили реванш - мы получили запрос на реванш от оппонента
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
реванш принят - оппонент принял наш запрос на реванш
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
реванш невозможен - по каким-то причинам мы\оппонент не можем начать реванш (например если мы потеряли коннект либо оппонент завершил игровую сессию)
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
- объект слушателя - объект у которого мы меняем состояние.
- состояние - Значение нового состояния.
Состояния
- game_infos - запрос у сервера информации по играм (на данный момент кол-во играющих людей: фейковое и настоящее), предварительно указав нужное кол-во записей в параметре param
- want_game - запускает поиск оппонента, предварительно необходимо в параметр seed указать сид комнаты\игры\механики
- abandon - закрывает сокет, прерывает текущее соединение. Необходимо вызывать при отмене поиска игры, отмене самой игры (выхода например), фейловой попытке реванша (если, например, не соблюдены какие-то условия) и любых других действиях, при которых мы покидаем текущего оппонента.
- want_revanche - отправляем запрос на реванш. Если мы уже получили такой запрос от оппонента - вызов этого состояния будет расцениваться как принятие реванша.
- invite - отправляет приглашение поиграть выбранному другу, предварительно необходимо задать параметр seed, дабы он знал куда мы его тащим.
- accept - принимает приглашение поиграть
- confirm - подтвердить свои намерения играть с этим игроком
Как пользоваться этой штукой?
Сразу оговорюсь, вся описанная тут информация основывается на личном опыте, своеобразном восприятии и плохой памяти. Возможны неточности или излишняя информация. Так же, на момент написания статьи мультиплеер работает только с HiddenList.
Для примера будет использован проект HiddenBattle.
Необходимости для игры с мультиплеером
Внешние настройки
- Работоспособный настроенный Cloud;
- Так же, нужно завести игру на мультиплеерном сервере (на 1й этаж) и получить 4 праметра: app_multiplayer, key_multiplayer, server_multiplayer, server_websocket;
- Далее эти параметры необходимо записать в .icf (app/platform) в раздел [Cloud];
- Ну и, собственно, нужен сам объект Multiplayer.
Настройки хидденлиста под мультиплеер
Описание параметров хиденлиста описаны здесь .
Что из этого нам нужно:
- 1
- 2
Поиск игры
- Для начала поиска необходимо определиться, во что именно мы хотим играть (выбрать seed). В моём случае, это номер пака с хидденами и локации в экономике:
- После выбора пака\игры и соблюдения всех условий, записываем seed мультиплееру и вызываем ему состояние want_game'. На этом этапе было бы неплохо показать игроку какое-то окно с визуальным отображением ожидания чего-то, но это на вкус и цвет...