- Сообщений: 101
- Спасибо получено: 346
Кооператив в MV
Надо ли, не надо ли? Использовали бы? Есть ли смысл?
Сразу поясню чем отличается кооператив от онлайна.
Онлайн - это игровой мир, к которому подключается N-количество игроков, игра живёт сама по себе.
Кооператив - это когда игрок создаёт игру и к нему подключаются ограниченное количество лиц. Игра не живёт сама по себе.
Полтора года назад, поймав эту мысль я сделал за пару часов плагин и сервер. В основном это был эксперемент синхронизации событий. Т.е. как быть с игровыми событиями, если игроков несколько.
Вот что у меня получилось (видео):
В краце, есть 4 типа событий:
1) Локальные - выполняются только у того игрока (клиента), кто его запускает. Пример: сундук, который могут открыть все игроки.
2) Синхронизированные - выполняет один клиент, но изменения (локальные или обычные переменные) происходят на всех клиентах. Пример: сундук "кто успел тот и открыл"
3) Общие - запускаются сразу у всех игроков. Например сообщения сюжетной линии или катсцена. Перед запуском проверяется, все ли игроки "свободны" (т.е. не находятся в другой сцене (меню, магазин, диалог). Могут быть также сихнронизированными.
4) Общие с жёсткой синхронизацией. Тоже самое что общие, только можно жёстко синхронизировать любую строку события. Когда на одном клиенте процесс выполнения события дойдёт до этой строки, он будет ждать пока и у других клиентов процесс выполнения события не будет на этой строке. Затем она запустится у всех. Так можно синхронизировать каждую строку события между клиентами (игроками).
Звучит сложно, но на самом деле для реализации всех видов событий в самом редакторе использовалась только одна команда плагина и один комментарий.
Выбором в общем событии может управлять только лидер группы (это игрок, который первый подключился)
Да всё просто. Возьмём мою нелюбимую боёвку, стандартную, для примера.А что с боем?
Допустим у нас два игрока, значит у нас группа из двух персонажей.
Игра в одиночку, вы выбираете дейтсвия за первого персонажа, потом за второго.
Допустим вы лидер (первый игрок, сервер). Играя в кооперативе (как я это вижу), вы как обычно выбираете дейтсвия для своего персонажа, а в это время второй игрок просто ждёт. Вы выбрали дейтсвия, теперь управление переходит второму игроку и он выбирает действия своего персонажа.
Ну это был пример со стандартной боёвкой, я её конечно, использовать бы не стал.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Конечно, кооператив за одним компом для меня приоритетнее, и больше интересует как сделать раздельный инвентарь и два экрана на одном мониторе, но учитывая переезд, отсутствие времени и лучшего друга рядом, всем руками "за"
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Я даже просила одного знакомого программиста порыться на тему кооператива для моей игры , но он так и не справился с этим, к сожалению. С тех пор я как-то и перестала надеяться на то, что это возможно. А тут вдруг бац и эта тема!
Только вот расстраивает то, что
Для кооперативных игр, основанных на выборе, это является существенным недостатком и большой проблемойВыбором в общем событии может управлять только лидер группы (это игрок, который первый подключился)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Сообщений: 874
- Спасибо получено: 1544
: )
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Поскольку я имею некоторый опыт в этой области (онлайн кооператив есть в моем движке), поделюсь некоторыми соображениями по этому поводу. Топикстартер, наверняка и так это знает, но насчёт других не уверен.
Главной сложностью при создании сетевых (а особенно кооперативных) игр на любом движке в настоящее время является проблема нехватки ip адресов. Создатели протокола ipv4 в своё время не учли неравномерность распределения ip-адресов по миру (а может и вовсе об этом не думали, не силен в истории) и сделали недостаточно большой длину адреса. В итоге у многих провайдеров просто не хватает адресов для своих абонентов и они садят множество человек на один и тот же, что по-простому называется "серым ip". Поскольку у таких людей нет персональных ip, подключиться извне к ним невозможно, как результат они не могут хостить сетевые игры. Для решения проблемы был создан протокол ipv6, однако ж на дворе 2018 год, а поддерживает его довольно малое количество провайдеров.
В двух словах, не имея белого ip, играть в кооп игры с классическим прямым подключением вы не сможете.
Какие же есть решения?
1. Кооператив через общий сервер. При такой реализации все игроки соединяются через один сервер с белым ip и обмениваются данными тоже. Такое решение могут себе позволить Blizzard в игре Diablo 3, однако оно требует постоянного финансирования и для маленьких/бесплатных игр не годится.
2. Использование hole-punching, чтобы пробиться сквозь nat. Решение частичное, поскольку в некоторых сетях и провайдерах нереализуемо, т.е. позволит хостить не всем, но многим. Для соединения игроков опять же используется сервер с белым ip, однако все дальнейшие данные будут идти напрямую. Главным минусом способа является его сложность, далеко не каждый программист знает как его реализовать.
Очень существенный шаг для решения проблемы сделал Steam, за что Valve нужно сказать большое спасибо. При использовании steam_api разработчикам доступны стим-лобби, своеобразная комбинация способов 1 и 2 (стим сначала пытается пробить нат, а если не выходит - использует прокси). Это позволило родиться многим инди кооп играм. Однако это все актуально, только если вы делаете игру для стима.
Ну и третьим способом является различный изврат, такой как заставлять игроков ставить эмуляторы локальной сети вроде Хамачи, Тангл и т.д.
Решение рабочее, однако по голове за него игроки не погладят.
Хотелось бы услышать мнение топикстартера по этому вопросу
Мои игры: Dolly's Afterlife (платформер) | Crossed Destinies (jRPG) >> Каталог всех игр русскоязычного сообщества RPG Maker <<
Старое: Dolly's Funeral (платформер) >> Скачать RPG Maker MZ <<
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
ZX_Lost_Soul, так вот почему я не могу хостить игры.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
AnnTenna пишет: Для кооперативных игр, основанных на выборе, это является существенным недостатком и большой проблемой
Это не ограничение, можно изменить. Просто написал как сделал изначально.
ZX_Lost_Soul, делать игру и делать плагин - это разные вещи. Если бы я делал игру с кооперативом, то я бы задумался как моя игра будет обеспечивать сетевой режим. Если я планирую свою игру выпускать в Steam, то прикручу Steam API, если другой способ распространения, возможно запущу свой сервер для игроков и т.д. Я же делаю плагин - т.е. некий фрамеворк, представляющий готовый сервер и клиент и их интеграцию с MV, чтобы разработчик игры мог использовать сетевые функции в игре. А как будет обеспечивать доступ к севреру разработчик игры, используя плагин, это по большей части его заботы. Я ведь не всемогущий
Сам же сервер планирую чтобы запускался внутри игры, чтобы не нужно было запускать никакие сторонние программы вместе с игрой. Ну и выделенный тоже можно отдельно сделать.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Мои игры: Dolly's Afterlife (платформер) | Crossed Destinies (jRPG) >> Каталог всех игр русскоязычного сообщества RPG Maker <<
Старое: Dolly's Funeral (платформер) >> Скачать RPG Maker MZ <<
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А как быть с управлением? Два устройства (клавиатура и геймпад) или разные клавиши?Paranoid пишет: Хотелось бы тогда еще и плагин для сплит-скрин игры.
ZX_Lost_Soul, я ещё подумаю.
Хочу пояснить для людей, которые в этом не разбираются как устроенно сейчас. Допустим вы хотите поиграть с товарищем в игру вместе. Вы оба запускаете одинаковую игру на своих компьютерах, только один из вас в игре выбирает опцию <создать игру> (одну кнопку нажать или комнаду плагина вызвать), а второй опцию <подключится к игре>, где ему просто нужно ввести ip адресс первого игрока. Всё. Проблема уже встаёт немного извне я считаю, а именно как далеко виден ip адресс игрока, который создал игру (сервер). Если оба товарища в одной сети (локальная, Wi-fi) - проблем нет. Если сервер имеет "белый" адресс и к нему можно подключится из интернета - проблем нет. Если сервер умён, то может пошаманить с настройками роутера (port forward) и сделать также свой "чёрный" ip доступным из вне (тут я не уверен, но вроде как можно). Ну а если очень хочется поиграть, но ничего из выше указанного нет желания делать, то 5 минут установка бесплатного Hamachi (или алтернативы) и вы оба в виртуальной локальной сети - проблем нет. Итого: решение проблемы подключения, я считаю, это немного выходит за рамки ответственности плагина.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Когда-то эта мысль оттолкнула от подобной идеи.
Вобщем, кажется, большинству подойдёт лишь та его часть, что ивенты запускает и переданные параметры в них закидывает.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Провёл очередной эксперемент, объеденив проблему, о которой писал ZX_Lost_Soul и идею с Split Screen.
Видео
Получился некий гибрид. Это всё ещё сервер - клиент (на одной машине) и это не совсем Split Screen, окна то 2
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
YouTube Видео
P.S. Используются сторонние плагины, всё работает без проблем
Сложности есть с боевой системой. Заставить работать стандартную боёвку по сети - это значит практически написать новую боевую систему. Вот и думаю, стоит тратить время на написание сетевой стандартной боёвки или написать новую, которая изначально расчитана на сеть + PvP. Новую можно на основе моей RTBS (её правда надо с колен поднять). Это даст возможность каждому игроку действовать когда настанет его время хода, а не ждать пока сходят другие и враги.
Alpha ABS передлывать под сеть пока не рассматриваю - её саму надо сперва до ума довести, код уж очень плохой...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
P.S. Alpha ABS шикарна. Ну потрать время, перепиши, как считаешь нужным, зато будешь купаться в славе за счет мультиплеера и своей бс...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Doctor_Bug
-
- Не в сети
- Завсегдатай
-
- Из горизонта события! ▪_■
- Сообщений: 574
- Спасибо получено: 897
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Я перестал поддерживать все свои плагины, так как уходил служить в армию. Теперь, спустя год, довольно сложно всё восстановить, надо время. Я сейчас этим и занимаюсь, у Alpha ABS будет обновление, которое вернёт её в правильное русло.DK пишет: почему ты перестал поддерживать свою бс ?
Не всем может подойти, появятся зависимости ненужные, надо что-то оптимальное. Но стандартную под сеть всё равно не охото переделывать.DK пишет: зачем писать новую бс, если можно подстроить свою под нужды мультиплеера ?
Спасибо.DK пишет: P.S. Alpha ABS шикарна. Ну потрать время, перепиши, как считаешь нужным, зато будешь купаться в славе за счет мультиплеера и своей бс...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
