Jump to content

Ещё один вариант убрать рассинхрон (алгоритм)


Recommended Posts

Наврятли разработчики это прочитают, но я всё же напишу способ. Он почти не потребует менять протокол и мало нагрузит сервер.

1 на сервере раз в секунду считаем "контрольную сумму". Это сумма всех координат всех подвижных объектов на локации. Т.е. sum = p1.x + p1.y + p2.x + p2.y + ...

2 Отправляем на клиент полученную сумму. Либо в связке с какими-то другими пакетами, либо отдельно, раз в секунду.

3 Считаем ту же самую сумму что и в пункте 1, но на клиенте. Сравниваем результаты.

4 Если суммы отличаются - клиент запрашивает с сервера полную синхронизацию координат, как при логине.

Как вы понимаете, сумма может быть и сложнее, чем просто координаты. Например, она может включать так же и id объектов и выглядеть как примитивный хеш: obj1.id^(obj1.x + obj1.y) + obj2.id^(obj2.x + obj2.y) + ...

Edited by botbot
Link to post
Share on other sites

Мне кажется, в этом случае лагающие игроки будут часто "дергаться", как это бывает в некоторых онлайн играх (например gta mta или samp)

Edited by Lexan
Link to post
Share on other sites
22 минуты назад, Lexan сказал:

Мне кажется, в этом случае лагающие игроки будут часто "дергаться", как это бывает в некоторых онлайн играх (например gta mta или samp)

Нет, наоборот. У лагающих игроков весь мир будет дёргаться. Но не всегда, а только тогда, когда у них случается рассинхрон (я щас не могу сказать, насколько часто это будет, думаю что редко). Остальные игроки будут видеть игру ровно так, как они её видят сейчас, без рывков.

Сравнивать с ГТА бесполезно, там другая архитектура игры.

Link to post
Share on other sites
23 минуты назад, Гидралиск сказал:

botbot, обьясни мне, как челу далёкому от программирования, что подразумевается под "сумма всех координат"?

Реально много писать. Я попробую очень коротко и упрощённо.

В морской бой играл? Вот там у каждой клеточки есть 2 координаты: одна по горизонтали, вторая по вертикали. В варспе у каждого перса похожие координаты есть. И рассинхрон на самом деле это означает, что координаты у клиента получились не такими, как на сервере.

И вот представь, у нас есть два перса: Nagibator1 и Nagibator2. У первого координаты (22, 15), а у второго (4, 1). Контрольная сумма означает, что мы складываем все 4 числа 22 + 15 + 4 + 1 = 42. Теперь представь, что на клиенте у нас рассинхрон, Nagibator2 стоит в координатах (4, 3) вместо (4, 1). Контрольная сумма сразу получается другая 22 + 15 + 4 + 3 = 44.

Сразу отвечаю на возможный вопрос "зачем такие сложности": контрольная сумма это одно число, довольно маленькое. Она занимает намного меньше места, чем координаты по отдельности, её быстрее отправить и получить.

Link to post
Share on other sites
1 минуту назад, botbot сказал:

...

И вот представь, у нас есть два перса: Nagibator1 и Nagibator2. У первого координаты (22, 15), а у второго (4, 1). Контрольная сумма означает, что мы складываем все 4 числа 22 + 15 + 4 + 1 = 42. Теперь представь, что на клиенте у нас рассинхрон, Nagibator2 стоит в координатах (4, 3) вместо (4, 1). Контрольная сумма сразу получается другая 22 + 15 + 4 + 3 = 44.

Сразу отвечаю на возможный вопрос "зачем такие сложности": контрольная сумма это одно число, довольно маленькое. Она занимает намного меньше места, чем координаты по отдельности, её быстрее отправить и получить.

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

Link to post
Share on other sites
12 минут назад, Гидралиск сказал:

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

Ну я  коротко написал, конечно там всё сложнее. На сервере нет такого понятия как "бег". Там есть дискретная смена положения персонажа. И на клиенте так же. Несколько раз в секунду (обычно 10 раз в секунду) сервер смотрит, не пора ли поменять положение персонажа. И если пора - сдвигает его на 1 клетку. На клиенте так же. Потом, на экранчике, тебе конечно покажут красивый бег с одной клетки на другую. Но это просто анимация. С точки зрения сервера был моментальный телепорт. И поэтому весь процесс, вместе с отправкой контрольной суммы, выглядит так:

1 сервер в очередной раз подвинул всех бегающих на нужные клетки

2 посмотрел, а не пора ли посчитать контрольную сумму (мы считаем её реже, чем двигаем игроков)

дальше, допустим что стало пора:

3 посчитал контрольную сумму

4 отправил клиенту все команды на движение объектов + контрольную сумму

5 клиент принял команды на движение и контрольную сумму.

6 клиент подвинул у себя всех игроков

7 клиент посчитал у себя контрольную сумму

Edited by botbot
Link to post
Share on other sites
26 минут назад, botbot сказал:

Ну я  коротко написал, конечно там всё сложнее. На сервере нет такого понятия как "бег". Там есть дискретная смена положения персонажа. И на клиенте так же. Несколько раз в секунду (обычно 10 раз в секунду) сервер смотрит, не пора ли поменять положение персонажа. И если пора - сдвигает его на 1 клетку. На клиенте так же. Потом, на экранчике, тебе конечно покажут красивый бег с однойжение и контрольную сумму.

...

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

И ты ещё не определился, сумму координат каждого чела отдельно будут присылаться или всех подвижных объектов.

Link to post
Share on other sites
17 часов назад, Гидралиск сказал:

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

Скорость движения на сервере заменяется на интервалы между движениями. И я написал раз в 1 секунду, а не раз в 10 секунд.

Цитата

И ты ещё не определился, сумму координат каждого чела отдельно будут присылаться или всех подвижных объектов.

Читай ещё раз:

Цитата

Это сумма всех координат всех подвижных объектов на локации.

 

Link to post
Share on other sites
1 час назад, botbot сказал:

Скорость движения на сервере заменяется на интервалы между движениями. И я написал раз в 1 секунду, а не раз в 10 секунд.

Читай ещё раз:

 

Ну кароче это то же самое, что ежесекундно перезаходить в игру. Рассинхрона не будет, но трафик на телефоне/планшете быстро сожрётся.

Link to post
Share on other sites
10 минут назад, Гидралиск сказал:

Ну кароче это то же самое, что ежесекундно перезаходить в игру. Рассинхрона не будет, но трафик на телефоне/планшете быстро сожрётся.

Нет

Link to post
Share on other sites

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

Link to post
Share on other sites
  • 3 months later...

Думаю админы это не внедрят в игру, т.к. скорей всего алгоритм "передвижения" как на сервере, так и на устройстве прейдётся менять на корню.

Link to post
Share on other sites

У нас же рассинхрог ещё искуственно создается, да? Когда-то давно я читал, что какой-то коэффициет даже правили. Как называется эта технология/метод? Просто интерсно почитать,

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...