Сохранен 31
https://2ch.hk/gd/res/153165.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Поясните за онлайновость в онлайн-играх

 Аноним 08/02/15 Вск 17:42:33 #1 №153165 
14234065534500.jpg
Допустим мы имеем игру в которой много движущихся объектов и открытый мир. Самое очевидное что приходит на ум - сервер присылает данные только о тех объектах, которые находятся в радиусе видимости объекта, которому присылает. Другой вопрос - с какой частотой сервер присылает данные о близлежащих объектах в онлайн-играх? Как это реализуется? (сокеты) Есть ли какието техники оптимизации? Или я вообще неправильно понимаю онлайновость в играх?
Аноним 08/02/15 Вск 20:51:46 #2 №153210 
>>153165
>Другой вопрос - с какой частотой сервер присылает данные о близлежащих объектах в онлайн-играх

В том же вове все реализовано на извещениях. Как только кто-то что-то сделал - сервер шлет всем по соседству пакет с информацией, например "монстр Х сделал удар по игроку Y".

Полные состояния мира в таком случае достаточно слать раз в несколько секунд, чисто чтобы избежать рассинхронизации.


> Есть ли какието техники оптимизации
Мир разбивается на фрагменты-области. Каждую область считает свой собственный сервер. Очевидно что чем более населенная локация, тем на меньшие куски она дробится.

В некоторых играх возможно динамическое разбиение, например в ЕVE если в одной системе набивается очень много игроков, то она динамически выносится на отдельную железную машину.
Аноним 09/02/15 Пнд 13:17:13 #3 №153324 
>>153210
Как может произойти рассинхрон?

Ты сказал каждую область считает свой собственный сервер, но в ИВЕ выносится на отдельную железную машину. Ты предполагаешь, что на машине может быть несколько серверов? (скриптов-обработчиков)?

Хорошо а что с клиентом тогда? Допустим я двигаюсь по области, с какой частотой клиент должен отправлять мои координаты на сервер? Должен ли я процессы отправки данных на сервер и получение состояния объектов держать в разных сокетах? или даже в параллельных процессах?
Аноним 09/02/15 Пнд 14:54:30 #4 №153340 
Вопрос не от ОПа, можеть кто знает как лучше...
Вот есть у меня некий игровой объект, пусть будет игрок. У него есть предмет, пусть будет меч. У предмета есть ID... Вот что лучше ссылки на все предметы хранить в одной коллекции, а у игрока только ID, по которой его искать в коллекции или лучше ссылку на объект хранить прямо у игрока? Или и там и там, правда тогда геморрно удалять объект...
Аноним 09/02/15 Пнд 17:04:09 #5 №153360 
>>153324
>с какой частотой клиент должен отправлять мои координаты на сервер?
Я бы сделал так, чтобы на сервер отправлялись только изменения состояния. Типа нажал кнопку "повернуть влево" и т.п.
Аноним 09/02/15 Пнд 22:14:01 #6 №153407 
>>153360
Спасибо за ответ/ответы
Аноним 09/02/15 Пнд 22:39:42 #7 №153410 
Тоже постоянно думаю на эту тему и всё интересно если мир без чётких границ между участками то когда игроки находятся на границе соседних миров то получается пока не пойми что. Они должны взаимодействовать с обьектами из разных машин.
Аноним 09/02/15 Пнд 23:22:44 #8 №153418 
>>153324
>Как может произойти рассинхрон
Ну как, клиент же обсчитывает у себя состояние игрового мира, клиентская интерполяция, чтобы ты не видел задержек. И там все очень тонко. Игрок Х дерется с игроком Y, они бьют друг друга одновременно. Пакет от Х долетел до сервера первым, в итоге на сервере, на машине Х и на всех остальных клиентах Х убил Y и не получил урона. А до машины Y этот пакет запоздал - ну пинг у него большой. И у него на машине он успел ударить в ответ прежде чем умереть. В итоге на его машине у Х меньше хп, чем на сервере. Далее Х дерется с монстром - и внезапно на сервере у него хватает хп чтобы победить, а на машине Y - не хватает одного удара, так как у него там меньше хп. И вот рассинхрон набирает обороты, прямо как в том стишке "потому что в кузнице не было гвоздя"

> но в ИВЕ выносится на отдельную железную машину
В еве один железный сервер может обсчитывать несколько систем, если в них мало игроков. Если в системе становится слишком много народу - она выносится на отдельную машину.

Во всяких вовах разбиение задано жестко. Типа каждый квартал штормграда сидит на своей железке (там дохуя народу всегда), а вот в каких-нибудь пустошах одна машина может целый регион обсчитывать, ибо там пусто почти.

>>153340
Лучше ID.
Учитывая что большинство характеристик меча должны существовать в единственном экземпляре, нет никакого смысла плодить миллион инстансов этого меча у каждого игрока/монстра. Плюс стоит сделать эту коллекцию загружаемой из внешних файлов. Тогда, например, ты сможешь менять характеристики меча по ходу разработки, и тебе достаточно будет перезапустить игру чтобы изменения применились. А если ты будешь зашивать его в объект игрока - то тебе придется либо хачить сейвы/внутреннее представление данных игры, либо начинать игру сначала.

> то когда игроки находятся на границе соседних миров то получается пока не пойми что. Они должны взаимодействовать с обьектами из разных машин.

Ну да, так и есть. В таком случае игрок подписывается на события сразу из двух регионов, и числится в списке и там и там.

Вообще это все можно загуглить, например описание устройства мира вов-образной ммо какой-то мне точно попадалось, вроде бы от создателей эмулятора для пиратских серверов.
Аноним 10/02/15 Втр 11:09:16 #9 №153464 
Не стану создавать отдельный тред, поинтересуюсь тут. Есть ммо проект в предрелизной стадии завершения. Серверная часть полностью написана под Node.js

Посоветуйте, если знаете бесплатные сервера, где можно разместить на проверить. Всякие хероку смотрел, сервак под релиз куплю позже, а сейчас нужно потестить и кое-что доработать не на локальном сервере. Наверняка обнаружатся траблы с пингами-хуингами. Заранее спасибо не говорю, ибо большинство из вас дауны, которым лишь бы словить смишнявки и залить на эм дик эй.
Аноним 10/02/15 Втр 11:28:12 #10 №153470 
>>153464
ММО-то про фоллач? :))
Аноним 10/02/15 Втр 11:36:12 #11 №153473 
14235573728080.png
Не стану создавать отдельный тред, поинтересуюсь тут. Есть ммо проект в предрелизной стадии завершения. Серверная часть полностью написана под Java

Идите нахуй, у меня уже убийца вов.
Аноним 10/02/15 Втр 12:12:00 #12 №153479 
>>153470
Космосим.
Аноним 10/02/15 Втр 12:13:24 #13 №153480 
>>153473
Бессмысленный сарказм. Я не заявляю про крутость игры, мне нужна площадка для тестирования перед тем как запустить оф.сервер.
Аноним 10/02/15 Втр 12:14:09 #14 №153481 
>>153480
Зато я заявляю.
Аноним 10/02/15 Втр 12:23:09 #15 №153484 
>>153481
Массовый дудос - убийца Вова, а твой высер напоминает прыщи подростка.

Возможно за простым визуальным представлением кроется глубокий геймплей. Расскажи о нём пару слов.
Аноним 10/02/15 Втр 12:30:06 #16 №153486 
>>153484
можно грабить корованы, но труп 2д.
Аноним 10/02/15 Втр 12:32:42 #17 №153487 
>>153486
Добавь возможность воровать газ и украинский рынок твой.
Аноним 10/02/15 Втр 12:42:43 #18 №153490 
>>153464
> Всякие хероку смотрел
Ну и чем оно тебя не устраивает? Вроде норм сервис, там тебе и бд всякие будут, и прочие навороты. Для постоянной работы сервера бесплатного аккаунта наверное не хватит (там ограничение на число часов цпу в месяц), но потестить должнохватить.
Аноним 10/02/15 Втр 12:47:32 #19 №153493 
>>153490
>Для постоянной работы сервера бесплатного аккаунта наверное не хватит
Читаем до конца о целях.
Аноним 10/02/15 Втр 12:55:09 #20 №153495 
>>153490
>Для постоянной работы сервера бесплатного аккаунта наверное не хватит
Симуляция отключения серва мамкой же.
Аноним 10/02/15 Втр 14:15:19 #21 №153524 
Наверно стоило программач опрашивать. Здесь в основном теоретики.
Аноним 10/02/15 Втр 14:31:18 #22 №153538 
>>153524
Что можно посоветовать нищеброду, который не может заплатить 300 рублей за месяц аренды сервера? Или ты пытался выклянчить у анона ценное дисковое пространство и процессорные мощности его пека для тестирования своего ммо говна? Таким как ты в этом разделе обычно в ротик пикают.
Аноним 10/02/15 Втр 14:37:01 #23 №153543 
>>153538
Собственно, даунов я попросил воздержаться от комментирования. К сожалению, свобода слова не позволяет мне требовать столь необходимые вещи.
Аноним 12/02/15 Чтв 11:12:49 #24 №153886 
>>153165
Реализацию какого-нибудь эмулятора глянь.

Коротко - да, сокеты.
Аноним 13/02/15 Птн 17:47:36 #25 №154095 
>>153418
>>153418
Вопрос. А почему нельзя группировать серверы не по регионам? Т.е обязательно ли клиенту получать данные из своего региона? пусть получает данные из его радиуса видимости. т.е хранится глобальная база объектов с координатами. пишется хитрый алгоритм чтобы выбирать объекты которые внутри твоего радиуса и состояния о них отдаются клиенту? Ты скажешь лучше два физ. сервера со своими регионами и базами данных. НО не будет ли тоже самое если взять один сервер но по мощности равный этим двум?
Аноним 14/02/15 Суб 09:38:45 #26 №154178 
>>154095
В россии, ты можешь жить в Свердловске, а тебе будут выдаваться IP Екатеринбурга. Особенно, сейчас, когда ipv4 закончился.
Аноним 14/02/15 Суб 21:59:49 #27 №154309 
>>154178
регион - кусок карты в игре, который обсчитывает сервер.
Аноним 15/02/15 Вск 02:37:28 #28 №154343 
>>154095
> пишется хитрый алгоритм чтобы выбирать объекты которые внутри твоего радиуса
Угу, и эти алгоритмы строятся как раз на разделении пространства на регионы, содержащие примерно равное количество объектов.

https://ru.wikipedia.org/wiki/Дерево_квадрантов
Аноним 15/02/15 Вск 23:59:52 #29 №154502 
>>154343
>>154343
нет я про другое. Чтобы не париться с подпиской человека на два региона если он на границе стоит (а то и даже на 4 региона!!!!) а лучше чтобы просто отдавать ему инфу об окружающем его пространстве в радиусе 100 координат по Иксу и по игреку. например.
Аноним 16/02/15 Пнд 11:53:01 #30 №154565 
>>154502
> а лучше чтобы просто отдавать ему инфу об окружающем его пространстве в радиусе 100 координат

Так кто ее отдаст-то? Регионы и отдадут. А он уже сам отфильтрует по расстоянию.

Ты либо используешь регионы для существенного уменьшения числа объектов, о которых нужно получать информацию, получая трудоемкость О(N*M), где M - среднее число игроков в регионе << N, либо ищешь расстояния между вообще всеми парами объектов, получая трудоемкость О(N^2).

Не обязательно каждый регион - это отдельный сервер. Но в целом без какого-то логического разделения игроков на группы не обойтись, иначе О(N^2) на любой чих тебя похоронит.
Аноним 16/02/15 Пнд 20:03:53 #31 №154633 
>>154565
а регионы должны хранить инфу об объектах в отдельных БД или в единой бд?
comments powered by Disqus

Отзывы и предложения