Правильно, пользуйтесь кирпичами раге и альтв.Никогда не буду данный мультиплеер в серьез воспринимать для коммерческих целей
Правильно, пользуйтесь кирпичами раге и альтв.Никогда не буду данный мультиплеер в серьез воспринимать для коммерческих целей
Когда чето лучше 5м напишеш звякни, посмотрим что ты там нахуевертилОчередной хлам на базе 5m? - Услышал. Никогда не буду данный мультиплеер в серьез воспринимать для коммерческих целей
"High Developer", смотрю, я стал твоей любимой темой. Не думал, что у меня появится такой преданный фанат.Нам не нужны ваши мультиплееры! У нас есть Farko Launcher!
У 5м нет инъекции в игру. Он загружает GTA5.exe и выполняет у него EntryPoint. Итого гта выполняется внутри процесса fivem.Из всего файвма у нас присутствует только его способ инъекции в игру
Ты же сказал, что сервер - полный авторитет, а клиент - только рисует. Это буквально противоречит.Физику своей машины считает клиент-владелец в гта и отдает наружу результат:позицию, скорость, поворот. Сервер это принимает, хранит как авторитетное состояние сущности и раздает остальным, решая кому видно, кто кем владеет и что происходит по условному урону.
Чат FiveM и Brand тоже по приколу зацепили. Ну а почему нет? Почему мы должны останавливаться на "инъекции в игру".Из всего файвма у нас присутствует только его способ инъекции в игру.
Ясно, пошел нахуйУ 5м нет инъекции в игру. Он загружает GTA5.exe и выполняет у него EntryPoint. Итого гта выполняется внутри процесса fivem.
Я не знаю откуда ты взял эту информацию. Может у тебя есть какой то свой тайный секретный способ о котором знаешь ты? Неизвестно, но поделюсь тем, как это происходит на самом деле в кратце.
Лаунчер вообще не грузит в свой процесс гта как есть. Он сначала порождает копию самого себя отдельным процессом и уже там читает образ игры в память и вручную маппит его поверх собственного модуля - секции, релоки, импорты, заголовки и тд. Под это в бинаре лаунчера зарезервирован пустой кусок памяти по размеру игры, чтобы образ было куда положить.
И только после этого берется точка входа из смапленного образа и вызывается как обычная функция. Это ручной мапинг и селф холовинг, а не загрузил и вызвал EntryPoint
А инъекцией я назвал то, что происходит следом за маппингом. Поменяются импорты игры, накатываются байт патчи и тысячи паттерн хуков. Вот это и есть инъекция, буквальная.
Клиент только рисует в самом начале темы
Тут я выразился обобщенно, не вдаваясь в детали(зачем?), чтобы вводный пост не превратился в лекцию на 10 пролетов.
«Авторитетный сервер» не значит «сервер симулирует все». Это значит, что сервер - единственный источник правды о состоянии: кто чем владеет, кому кого видно, кто кому нанес урон, засчитано ли попадание. А физику своего перса и своей машины считает движок игры на машине владельца, потому что Rage живёт только внутри гта - на сервере его нет и быть не может ни у кого. Итого: клиент симулит своего и рисует чужих, а сервер держит состояние и правила. Противоречия нет - авторитет над состоянием и симуляция физики это разные вещи
Про чат и брендинг
Ну, стоковый чат, брендинг. До чего докапываетесь то? Не понимаю
Мы мультиплеер делаем, нам нужно тестировать то что мы делаем, очевидно же. А чтобы тестировать, нужно чтобы я мог вызвать команду. Чат это решенная задача, лежит готовое. Зачем сидеть и тратить время на переписывание окошка с текстом, пока не доделан неткод? Довольно странная расстановка приоритетов, не находишь? Свое появится тогда, когда это будет актуально.
Пиздец ты конечно. Я твой лаунчер пиарю, а ты буксуешь"High Developer", смотрю, я стал твоей любимой темой. Не думал, что у меня появится такой преданный фанат.
Не знаю, что именно тебя так задело. То, что я написал правду? То, что ты не можешь нормально прокомментировать даже одну строку кода, но уже делаешь свой форк? Или, может, то, что DLC у тебя уж слишком сильно "вдохновлён" NoPixel? А может, мои слова о том, что значки стреляют, а опыта как не было, так и нет?
Честно, не понимаю, в чём проблема, Вермилион, зелёный солдатик. Но, судя по всему, я наступил тебе на больную мозоль, раз ты так часто меня вспоминаешь.
И, кстати, не нужно постоянно полоскать мой Launcher своим ртом. Был бы у тебя опыт и знания давно сделал бы свой и занимался им, а не мной. Пока что складывается впечатление, что твоё главное достижение говорить обо мне вместо того, чтобы работать над собственным проектом.
Ладно, удачи. И лучше займись тем, о чём я тебе уже говорил пользы будет гораздо больше, чем от очередного упоминания моего имени.
Только не надо тебе рекламировать мой лаунчер мы уже видели, как ты прорекламировал свой зелёный Rejoin.Пиздец ты конечно. Я твой лаунчер пиарю, а ты буксуешь

Теперь не видать мне плашки High DesignerТолько не надо тебе рекламировать мой лаунчер мы уже видели, как ты прорекламировал свой зелёный Rejoin.
Какую версию Nano Banana ты использовал?
Что это за тетрис, почему он не зелёного цвета?
Посмотреть вложение 27749
А тогда я могу только представить, как были выданы остальные значки. Эх, мой Vermilion…Теперь не видать мне плашки High Designer![]()
Ну кстати да. Плашку примерно за это и выдали. За поделки для оникса. Хотя там чел по голосу село 3 IQ.Подожди, пока и я не напишу я запустил onyx, может, мне тоже прилетит значок High developer![]()
Ты то куда лезешь? ЧепухаНу кстати да. Плашку примерно за это и выдали. За поделки для оникса. Хотя там чел по голосу село 3 IQ.
Был легендой до того, как вскрылась твоя сучья натура. Оказалось, за маской Masao Nakamura всегда стоял ты - нехороший человек.
ну это хотя бы больше похоже на какие то пояснения отчасти чем первый постМое сочинение на тему как я провел это лето
Физика.
"Физику кто будет считать? Если сервер авторитарный, то он как минимум должен просчитывать весь handling авто и коллизию. Слабо верится, что сервачок на расте всё это воспроизводит." Сначала отмечу, что это вообще забавно даже видеть, но объясню.
Rage физику на сервере не пересчитывает никто из мп, это движок Rockstar и живет он только внутри игры. Физику своей машины считает клиент-владелец в гта и отдает наружу результат:позицию, скорость, поворот. Сервер это принимает, хранит как авторитетное состояние сущности и раздает остальным, решая кому видно, кто кем владеет и что происходит по условному урону. К слову как раз поэтому попадания резолвятся на сервере с лаг-компенсацией. Сервер перематывает мир к моменту, когда стрелок реально видел у себя и там првоеряет попадание и правдоподобность выстрела.
У остальных условная машина появляется как нативная игровая сущность и ее докручивает уже движок между прислананными состояниями. То есть утверждение что раст не воспроизводит физику - верное, но он ее и не должен. Он держит состояние, владение и правила, а физику считает та же гта что и всегда.
Ужасные паппеты.
Ну это вообще мимо. Игроки на сервере это нативные клоны, владелец симулит своего перса, сервер реавторит, у получателя его рисует родной NetBlender полной физикой и интерполяцией. А паппетов делали только для NPC.
"Взяли форк файвм, губы накрасили и всем показывают ебейшую синхронизацию))))"
Ну, хорошо. Из всего файвма у нас присутствует только его способ инъекции в игру. А вот все остальное - нет. Серверную часть файвм мы не запускаем от слова совсем, ее буквально нет в коде. Вся синхра, неткод, хост и прочее прочее - свой Rust/C# с нуля, реимплементация протокола так, чтобы стоковый клиент коннектился.
Гибрид? Ну, я могу согласиться, но это временно т.к в планах сделать и инъекцию своей. А вот то, что это форк - нет и даже не близко.
Зачем QUIC рядом с UDP?
Игровой провод - свой бинарный поверх обычного UDP, это основной транспорт. QUIC у нас не второй игровой протокол. Транспорт сделан сменным за одной датаграм-абстрацией и quinn там как раз высокопроизводительный бэкэнд. Он дает GSO/GRO(склейка кучи пакетов в один системный вызов ес че) и шардинг сокета по ядрам. На высоком пакет-рейте это снимало нашу проблему - стоимость syscall на каждый пакет.
Полноценный QUIC транспорт(connection-id, миграция соединения при смене сети и NAT) держим под нестабильные сети, но 60гц по нему не гоним, для него очевидно нужны надежные и ненадежные каналы, а не просто потоковая надежность QUIC. Если обобщать, то UDP это провод, а QUIC это либо ускоритель отправки, либо опциональный транспорт под конкретные сети. Надеюсь понятно.
А зачем свой протокол????
На 60 гц ты шлешь состояние сотен сущности каждому игроку. Json это килобайты на сущность, условный protobuf это теги и байт на каждом поле. При таком темпе и высоком населении сущностей это получаются гигабиты и загруженный на сериализацию проц. А хотелось сделать красиво аккуратно и главное максимально оптимизировано. Поэтому мы квантуем каждое поле под нужную нам точность и пакуем битами. Если чуть подробнее, то позиция 16 бит на ось, скорость и поворот меньше, тип 3 бита - одна машина или пешеход итого получаем около 17 байт вместо сотен. Плюсом идут дельты, раз в N тиков полный кадр, а между ними только изменения относительно него, стоячая машина трафик не ест вообще. В общем без собственного пакера наша цель(синхра в толпе и вообще большая толпа в точке) недостижима адекватным количеством ресурсов.
Вообще то!!! стресс тесты это часы без остановки!!!
Ну, это факт, только вот задача была другая. Найти потолок вместимости в нынешнем состоянии, сколько игроков держит нода на играбельной частоте. 45 секунд вполне достаточно чтобы зафиксировать устойчивую точку емкости в каждой конфигурации.
И по заявке Inoi:
А почему сделали так, а не иначе?
Авторитетный сервер.
Сетевой код гта во многом верит клиенту, а оттуда ползут все читы. В том числе и по этой причине мы вынесли правду о мире на сервер. Кто, где, кого видит, кто кому нанес урон решает сервер. А физику по прежнему считает сам клиент, но урон резолвит с лаг-компенсацией, а не принимает на веру. Из минусов - было сложно и дороже по CPU. Но из плюсов - чуть меньше читов и лаг компенсация.
Реавторинг клонов вместо релея.
Самый простой путь - принял пакет от игрока, разослал всем как есть.
Не подошло потому что каждому летит вообще все что есть, трафик и такт убиваются от числа людей в одной зоне. Поэтому сервер под каждого получателя пересобирает свою картину - только реально релевантные ему сущности, с его индексами, в его приоритете. Вышло дороже на такте, но зато это можно резать и очень хорошо оптимизировать( на итерации с оптимизацией получили +127%, а там таких еще оч много). По нашему мнению без этого толпа невозможна в одной точке в адекватном формате как этого хотелось нам.
Интерполяция с буфером а не предсказание
Сущности рисуются с задержкой в 100мс и интерполяцией между присланными состояниями(эрмитовы сплайны по скорости). Экстраполяцию при потере пакетов мы зажали - четверть секунды тянем вперед, дальше держим на месте, чтобы человек сквозь текстуры не улетал. Предсказание оставили только своему персонажу. За счет чего в сумме другие едут плавно, даже при потере пакетов.
Ну и ваще, а раст то вам зачем??
На игровом такте в 60гц нельзя ловить паузы от GC. А он дает непредсказуемые фризы под высокой нагрузкой, а бюджет такта у нас 1/60= 16.67мс. Соответственно Rust дает нам работу с памятью без GC и прочей ерунды, отсюда у нас и ровный такт
Спасибо за прочтение!
Гуру нейронок не выкупил, что все ответы через нейронку были составлены?)))ну это хотя бы больше похоже на какие то пояснения отчасти чем первый пост
ичеГуру нейронок не выкупил, что все ответы через нейронку были составлены?)))
хорошо, отдохни, будем ждатьвопросов всё ещё дохуя, но я просто че то устал сегодня