botbot 325 Posted May 4, 2017 Share Posted May 4, 2017 (edited) Наврятли разработчики это прочитают, но я всё же напишу способ. Он почти не потребует менять протокол и мало нагрузит сервер. 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 May 4, 2017 by botbot Quote Link to comment Share on other sites More sharing options...
Lexan 16 Posted May 4, 2017 Share Posted May 4, 2017 (edited) Мне кажется, в этом случае лагающие игроки будут часто "дергаться", как это бывает в некоторых онлайн играх (например gta mta или samp) Edited May 4, 2017 by Lexan Satan 1 Quote Link to comment Share on other sites More sharing options...
botbot 325 Posted May 4, 2017 Author Share Posted May 4, 2017 22 минуты назад, Lexan сказал: Мне кажется, в этом случае лагающие игроки будут часто "дергаться", как это бывает в некоторых онлайн играх (например gta mta или samp) Нет, наоборот. У лагающих игроков весь мир будет дёргаться. Но не всегда, а только тогда, когда у них случается рассинхрон (я щас не могу сказать, насколько часто это будет, думаю что редко). Остальные игроки будут видеть игру ровно так, как они её видят сейчас, без рывков. Сравнивать с ГТА бесполезно, там другая архитектура игры. Quote Link to comment Share on other sites More sharing options...
Гидралиск 253 Posted May 4, 2017 Share Posted May 4, 2017 botbot, обьясни мне, как челу далёкому от программирования, что подразумевается под "сумма всех координат"? Quote Link to comment Share on other sites More sharing options...
botbot 325 Posted May 4, 2017 Author Share Posted May 4, 2017 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. Сразу отвечаю на возможный вопрос "зачем такие сложности": контрольная сумма это одно число, довольно маленькое. Она занимает намного меньше места, чем координаты по отдельности, её быстрее отправить и получить. Quote Link to comment Share on other sites More sharing options...
Гидралиск 253 Posted May 4, 2017 Share Posted May 4, 2017 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 перс или моб, то придётся инфу о всех на локе постояно туда-сюда пересылать. Quote Link to comment Share on other sites More sharing options...
botbot 325 Posted May 4, 2017 Author Share Posted May 4, 2017 (edited) 12 минут назад, Гидралиск сказал: Погодь. Но ведь тогда, если кто-то начал на сервере движение, то координаты начнут меняться. Тогда на клиент пойдёт инфа, что чел побежал, и новая сумма координат, которая отличается от той, что на клиенте. А потом ещё обратно серверу посылать сообщение, что нужна синхронизация. И это получится, что синхронизация будет происходить каждую секунду. А если на локации движется только 1 перс или моб, то придётся инфу о всех на локе постояно туда-сюда пересылать. Ну я коротко написал, конечно там всё сложнее. На сервере нет такого понятия как "бег". Там есть дискретная смена положения персонажа. И на клиенте так же. Несколько раз в секунду (обычно 10 раз в секунду) сервер смотрит, не пора ли поменять положение персонажа. И если пора - сдвигает его на 1 клетку. На клиенте так же. Потом, на экранчике, тебе конечно покажут красивый бег с одной клетки на другую. Но это просто анимация. С точки зрения сервера был моментальный телепорт. И поэтому весь процесс, вместе с отправкой контрольной суммы, выглядит так: 1 сервер в очередной раз подвинул всех бегающих на нужные клетки 2 посмотрел, а не пора ли посчитать контрольную сумму (мы считаем её реже, чем двигаем игроков) дальше, допустим что стало пора: 3 посчитал контрольную сумму 4 отправил клиенту все команды на движение объектов + контрольную сумму 5 клиент принял команды на движение и контрольную сумму. 6 клиент подвинул у себя всех игроков 7 клиент посчитал у себя контрольную сумму Edited May 4, 2017 by botbot Quote Link to comment Share on other sites More sharing options...
Гидралиск 253 Posted May 4, 2017 Share Posted May 4, 2017 26 минут назад, botbot сказал: Ну я коротко написал, конечно там всё сложнее. На сервере нет такого понятия как "бег". Там есть дискретная смена положения персонажа. И на клиенте так же. Несколько раз в секунду (обычно 10 раз в секунду) сервер смотрит, не пора ли поменять положение персонажа. И если пора - сдвигает его на 1 клетку. На клиенте так же. Потом, на экранчике, тебе конечно покажут красивый бег с однойжение и контрольную сумму. ... Вообщето уже есть такой параметр как скорость передвижения, и его можно менять навыками и релами. То есть, и в клиенте, и на сервере идёт анализ, сколько времени уйдёт на перемещение с одного места на другое. Ну и что касается синхронизации, то 10 сек. никак не спасёт от рассинхрона. Ну окажется, что противник находится в другом месте, случится телепортаци ( именно оно, а не красивый бег), только какой смысл, если тебе за секунду до этого подрезом с 6 клеток засадили. И ты ещё не определился, сумму координат каждого чела отдельно будут присылаться или всех подвижных объектов. Quote Link to comment Share on other sites More sharing options...
botbot 325 Posted May 5, 2017 Author Share Posted May 5, 2017 17 часов назад, Гидралиск сказал: Вообщето уже есть такой параметр как скорость передвижения, и его можно менять навыками и релами. То есть, и в клиенте, и на сервере идёт анализ, сколько времени уйдёт на перемещение с одного места на другое. Ну и что касается синхронизации, то 10 сек. никак не спасёт от рассинхрона. Ну окажется, что противник находится в другом месте, случится телепортаци ( именно оно, а не красивый бег), только какой смысл, если тебе за секунду до этого подрезом с 6 клеток засадили. Скорость движения на сервере заменяется на интервалы между движениями. И я написал раз в 1 секунду, а не раз в 10 секунд. Цитата И ты ещё не определился, сумму координат каждого чела отдельно будут присылаться или всех подвижных объектов. Читай ещё раз: Цитата Это сумма всех координат всех подвижных объектов на локации. Quote Link to comment Share on other sites More sharing options...
Гидралиск 253 Posted May 5, 2017 Share Posted May 5, 2017 1 час назад, botbot сказал: Скорость движения на сервере заменяется на интервалы между движениями. И я написал раз в 1 секунду, а не раз в 10 секунд. Читай ещё раз: Ну кароче это то же самое, что ежесекундно перезаходить в игру. Рассинхрона не будет, но трафик на телефоне/планшете быстро сожрётся. Quote Link to comment Share on other sites More sharing options...
botbot 325 Posted May 5, 2017 Author Share Posted May 5, 2017 10 минут назад, Гидралиск сказал: Ну кароче это то же самое, что ежесекундно перезаходить в игру. Рассинхрона не будет, но трафик на телефоне/планшете быстро сожрётся. Нет Quote Link to comment Share on other sites More sharing options...
Satan 7 Posted May 8, 2017 Share Posted May 8, 2017 Ненененене..простым смертным, как мне, эта игра станет недоступна и неиграбельна. В нее смогут играть только с хорошим инетом, а на хороших инетах и так все хорошо Quote Link to comment Share on other sites More sharing options...
Anticreeper 0 Posted August 21, 2017 Share Posted August 21, 2017 Думаю админы это не внедрят в игру, т.к. скорей всего алгоритм "передвижения" как на сервере, так и на устройстве прейдётся менять на корню. Quote Link to comment Share on other sites More sharing options...
Magicbeam 174 Posted August 24, 2017 Share Posted August 24, 2017 У нас же рассинхрог ещё искуственно создается, да? Когда-то давно я читал, что какой-то коэффициет даже правили. Как называется эта технология/метод? Просто интерсно почитать, Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.