Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   [Алгоритмы] Боты для realtime мультиплеера (http://www.flasher.ru/forum/showthread.php?t=208054)

Всеволод 31.05.2014 02:42

Боты для realtime мультиплеера
 
Есть сервер, который позволяет обмениваться клиентам данными в реальном времени, в данном конкретном случае их позициями. Т.е. игрок изменил положение, оно разослалось остальным игрокам.
Если добавлять ботов, то требуется, чтобы у всех игроков каждый из ботов находился в одинаковом положении, при чем, в идеале, взаимодействуя с игроками.
Как считаете, требуется, чтобы сервер сам считал положение ботов? Высчитывать на сервере каждый пиксель тоже не красота, что бы вы могли порекомендовать?

in4core 31.05.2014 02:45

Бот делается как обычный игрок на клиенте, и точно так же будет рассылать серверу об изменении, а он будет рассылать всем клиентам. Тоесть управление создается в вашем случае на клиенте, так как есть большая визуальная часть. Придется писать логику :)

Всеволод 31.05.2014 02:58

Цитата:

Сообщение от in4core (Сообщение 1167054)
Бот делается как обычный игрок на клиенте, и точно так же будет рассылать серверу об изменении, а он будет рассылать всем клиентам. Тоесть управление создается в вашем случае на клиенте, так как есть большая визуальная часть. Придется писать логику :)

т.е., допустим первый, зашедший на сервер игрок, должен будет отправлять в 2,3,4,10 раз больше данных?
или Вы имеет в виду создать "отдельного клиента", который будет управлять именно ботами?

in4core 31.05.2014 03:31

Цитата:

т.е., допустим первый, зашедший на сервер игрок, должен будет отправлять в 2,3,4,10 раз больше данных?
Не понимаю причем тут игрок. Игрок отправляет только свои данные, а вот получает данные о мире в целом.
Проще говоря, первый игрок авторизуется, садиться за танк ( или что там ), сервер при ините передает статус мира, где бот стоит, что делает, и т.п. Так что первый это игрок или 10й разницы никакой.

У вас и получается система, что бот работает на клиенте, он сам ищет пути, сам двигается по интерФрейм или что там у вас, изменяет свои свойства и т.п. Это целая микро-система, и да она заслуживает отдельного клиента. Сервер же в вашем случае просто рассылает статус мира ( карту ) . Причем нужно сделать так, чтобы мир полностью рассылался ТОЛЬКО для зашедших игроков, а для уже играющих только ОБНОВЛЕННЫЕ данные, этим вы сократите траффик , да и просто увеличите скорость работы.
Задача не одного дня, если у нас в казино например боты все на сервере делаются, и то там боты то простейшие, и то заняло от 2х месяцев на отладку, то в вашем случае это серьезная игра и задача может решаться очень долго, взависимости от навыков и кол-во командных людей.

ZackMercury 31.05.2014 03:33

А вы на сервере и не будете высчитывать каждый пиксель. Отправляем только конечные позиции. А клиент будет сам визуализировать всё, что происходит в комнате именно так, как ему нужно, эмитируя как-бы непрерывный обмен данными.

in4core 31.05.2014 03:36

И вот еще добавлю, стоит посмотреть какие данные рассылают современные игры на сервер, тот же diablo 3 например, посмотрите как там мультиплеер сделан, если бы там лились ОГРОМНЕЙШИЕ пачки данных туда суда, такой бы синхронизации не было, был бы отклик от 1 сек и выше, а там отклик чуть ли не в 100 мс.
Как посмотреть? А хрен его знает, каким нить профайлером сети.
Может дяди постарше что подскажут...

ZackMercury 31.05.2014 03:36

Цитата:

У вас и получается система, что бот работает на клиенте, он сам ищет пути, сам двигается по интерФрейм или что там у вас, изменяет свои свойства и т.п.
В идеале бот должен жить на сервере и клиент не должен просчитывать никаких путей. Бот ведь такой же игрок, как и другие игроки.
И ещё, мир полностью никому не должен отсылаться, только то, что видит пользователь вокруг себя.
Тоесть, если карта большая, то мы отсылаем данные только о том, что входит в область экрана.

in4core 31.05.2014 03:39

Цитата:

В идеале бот должен жить на сервере и клиент не должен просчитывать никаких путей.
Это кто тебе сказал о таком идеале? Совершенно не согласен. Задача должна быть решена максимально удобно, в данном случае вполне себе клиент. Чем больше прорисовки - тем клиент на самом деле справедливо. В single player играх напимер боты на сервере чтоль делаются ?:) Хотя смеха ради - там тоже есть сервер)

Добавлено через 2 минуты
Кроме того добавлю. Бот не может жить 100% на сервере, так как все равно половина задач будет решаться на клиенте, и тут уже получается разделеине логики и там и там, разве это хорошо? Логика по сути должна быть в одном месте. Но есть игры где это уместно : шахматы - бот сервер. Одно единственно данное для отправки - позиция и фигура, все остальное решается на сервере, тут удобно. А тут будет решаться сразу 2 задачи, а при боте на клиенте только 1. - выгодно клиент.

ZackMercury 31.05.2014 03:45

Цитата:

Это кто тебе сказал о таком идеале?
Года задротства в онлайн-игры :) И я могу показать, почему это идеал.
Цитата:

Задача должна быть решена максимально удобно, в данном случае вполне себе клиент.
Ну, разумеется, всё это зависит от самой игры, поэтому тут ТС сам должен решить, что ему больше подходит.
Цитата:

В single player играх напимер боты на сервере чтоль делаются ?
Вообще не понял смысла этого предложения.

Добавлено через 2 минуты
Цитата:

Кроме того добавлю. Бот не может жить 100% на сервере, так как все равно половина задач будет решаться на клиенте, и тут уже получается разделеине логики и там и там, разве это хорошо?
Человек говорит про рилтайм, а это значит, что это очень даже хорошо.
Хотя в реальности повторного кода там не будет. Сервер должен хранить всю логику, а клиент её отображать.

caseyryan 31.05.2014 09:52

Цитата:

Как считаете, требуется, чтобы сервер сам считал положение ботов?
Да. Такие вещи должен считать только сервер, и никак иначе.
Цитата:

Кроме того добавлю. Бот не может жить 100% на сервере, так как все равно половина задач будет решаться на клиенте, и тут уже получается разделеине
Сань, ты хоть раз делал реалтайм онлайн игры?
Я делал, и опыта у меня тут хоть отбавляй) Наступал на кучу граблей. И могу тут точно сказать, что SuriTheAngel говорит правильно. Вся логика врагов-ботов должна считаться исключительно на сервере. Ни один клиент не должен иметь возможности управлять врагами.
Даже если предположить, что он не читер. А что если у него, вдруг, интернет рубанулся? Или игра подвисла? Что тогда? Все враги сразу встанут? И о какой половине задач ты говоришь? Все задачи решаются так же на сервере, а клиент их только отрисовывает. Если под задачами ты имеешь в виду анимации, то да, эту часть можно смело доверять клиенту.
Причин, чтобы делать логику врагов на сервере целая гора, и все они вполне обоснованы.

Цитата:

Высчитывать на сервере каждый пиксель тоже не красота, что бы вы могли порекомендовать?
Ну, как бы не красота, конечно, но другого выбора нет. Хотя если посмотреть, то ведь на сервере игровое пространтсво разделяется на комнаты. То есть серверу не придется считать бой для каждого отдельного игрока. Он будет считать для комнаты. А игрокам в комнате лишь рассылать одинаковые данные. Так что схема вполне жизнеспособна
Цитата:

А вы на сервере и не будете высчитывать каждый пиксель. Отправляем только конечные позиции.
Вот тут внесу корректировку. Чтобы знать эту конечную позицию, ее тоже надо сначала рассчитать. А для этого, возможно, потребуется считать каждый пиксель. Все зависит от задачи


Часовой пояс GMT +4, время: 05:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.