Парни, я кажется плохо выразил мысль. Задача не полностью эмулировать все процессы ява-эмулятора (хыхы, масло масленое)), а сделать всего-лишь репродукцию результатов его работы. То есть такой медиа- плеер выдачи пакетов клиенту под заданные цели и с управлением.
Ща попытаюсь объяснить:
Подскажите плиз, что будет если:
1) поставить запись пакетов от сервера к клиенту, поиграть 5 минут. Далее запустить записанный поток пакетов насильно клиенту еще раз? как я понимаю - будет что-то типа реплея, только насильственного и как будто играют за тебя
2) можно вкратце на пальцах, как идет обмен пакетами между сервом и клиентом? как я понима- все что делается и отрисовывается, сначала одобряется сервером. То есть я нажал бежать - сервак получил пакет желания , далее выдал разрешение и характеристики процесса+ возможно промежуточные контрольные точки+ итд. После этого клиент побежал. То есть инфа от клиента - это пожелания, а от сервера - насильно исполняемые клиентом в меру его способностей)) Как я понимаю, на этом реплей и построен - клиенту в спец-моде просто кормится записанная линейка пакетов.
3) Что нам мешает повторить вышеописанное, только имея по сути скоординированные реплеи по всем игрокам? тогда можно будет переключаться между игроками, или наблюдать от третьего лица (в этом случае естественно мы будем видеть не все, что было на сервере, но только то и тогда, когда хоть кто-то из игроков был в этом месте и как-то взаимодействовал)
Была идея сохранять пакеты от сервера к клиенту, ну что-бы типа не генерить их а просто проигрывать, пересылать клиенту. Нe моя идея, но кто как думает так и делает. Те же самые идеи про снапшоты, и гигабайты данных... Никто так не делает. Как вы думаете, как облачные технологии построенны, там логов выше крыши, не только тех которые можно видеть. Так вот, как такие сервисы как Splunk, Datadog или же что-то по проще работают? Просто отсылают кучу логов и засовывают их в специальные базы данных... Так что не только можно это все построить, технологии уже есть и железо очень быстрое стало. Ну это так, к слову о том что уже можно делать, а про что только мечтают.
Насчет проигрывания ивентов. Тут нужна система которая будет представлять из себя пошаговое воспроизведение пакетов из лога. Например монстр умер, а что до этого произошло? Были пакеты о NpcInfo , обновления по HP или дебаффов, ну и в конце пакет Die. Разберем более подробно:
- пакет NpcInfo выдается когда моб или npc входит в обзор игрового персонажа, на Яве это обычно проишодит в KnownList ( у Acis немного подругому, но смысл тот-же), нужен ивент что-бы сохранить данные моба. Что сохраняем? позицию, HP, номерок шаблона по данным о npc, ну и можно какие у него там бафы. Очень не много информации. Не надо весь пакет сохранять так как он будет намного больше (раз в десять)
- обновление по HP. Простой ивент про object id от моба, ну и новое значени по HP. Можно данные записать как и в NpcInfo описанные выше
- дебаффы. Типа пакета AbnormalStatusUpdate
- моб умерает, как пакет Die. Легче чем серверный пакет, координаты где умер, object id ну и можно добавить информацию можно спойлить или нет
Да, нужно собирать все ивенты от пакетов. Но сами пакеты от сервера будут передавать очень много информации, так как клиент может об все значенияx не знать. Так как у нас будет сервер, пакеты мы можеm сами генерить, но нам нужно сократить поток информации который мы будем либо сохранять в БД, либо проигрывать обратно из БД. По сути все что я описал (ивенты и как с ними работать) это и есть основа RPC . Просто надо немного привыкнуть к идее что не все данные нам нужны и что технологии уже есть и были, даже десять лет назад.
Да, именно про эту идею с выдачей пакетов я и думаю. То есть сервер в режиме проигрывания записей логов не полностью реконструирует свою работу, а только выдает копию набора пакетов который он уже ранее выдавал. С той лишь разницей, что надо дописать методы. которые координируют радиус бродкаста пакетов для выбранного клиента - то есть подсовывают ему пакеты, которые удовлетворяют требования по таймлайну и геопозиции.
Про ивенты не совсем понял. что такое ивент ?
Как мне это видится - в клиенте в игре ты тоже не знаешь, что ранее было с мобом, если с ним не взаимодействовал и не видел его респа. так что или пофиг на его раннюю историю, или она будет храниться в логе какого-то игрока, который ранее пинал этого моба допустим после его респа. если с мобом не было ни у каких игроков взаимодействия - таких даже можно не хранить - вычеркиваем для оптимизации. (надо сделать флаг в логах серва на факт взаимодействия).
По написанным тобою пакетам - это уже частная ситуация, допиливается в процессе. В остальном полностью согласен!
Да я не в том плане, что типа ты тупой и не поймешь, а в том, что я написал страницу текста и понял, что там еще две таких надо писать, чтобы закончить мысль. Короче если прям 3.14здец кратко - единственный способ это сделать в том виде в котором ты хочешь, это примерно то, что писал
@Gaikotsu, т.е буквально снапшоты сервера и ВСЕХ клиентов в реальном времени. В этом случае ты сможешь воспроизвести работу сервера БЛИЗКО к оригиналу, но все равно не полностью, т.к в сервере 80% активностей происходят по рандому, то тебе еще и генератор надо сохранять на каждое значение. Короче я не знаю как это можно в целом простым языком объяснить, когда контраргументы вот такие:
зря стер) я бы хоть первую часть ликбеза почитал) а то у меня весьма смутное представление о том, как работает и чем фарширована пакетка сервера.
Так как мне кажется, вы переусложнили то, что хочу сляпать я - поясню как могу. Смотри, есть же реплаи в клиенте, так? Клиент выдерживает кучу пакетов на АК и замесах - а ему еще надо отрисовывать все это и считать кучу геометрии и графики. Даже на древних компах. То есть это не космические технологии и не снапшоты ядра по тикам. Я в данном вариант хочу использовать мод сервера, когда он по сути является просто геометрической подложкой, без нпс, мобов, игроков и тд, чисто террейн. И при этом процесс в нем по нажатию кнопки "Плей" выдает записанную последовательность пакетов из реплея. Просто этот реплей будет более подробный и скоординированный+ не привязаный к игроку, с которого записан реплей, а за счет логики консолидации пакетов со всех игроков, записанных во время реальной работы сервера, даст возможность получать более подробный реплей, и как бы "выходя из тела одного игрока , который писал реплей". Допустим переключаясь между игроками, или вися на геоподложке в режиме спектатора, при взгляде со стороны.
Норм конртраргументы) Раз такой шаристый - должен понимать, какую мысль пытается родить чайник)
Главный вопрос - чтобы что?
по поводу реализации хранения, есть облачные базы данных (amazon, ovh и тп), можно их разместить в одной подсети для более быстрого отклика, чтобы логгер чередовал сервера куда будет сохранять при записи и при этом запоминал этот порядок чтобы потом так-же воспроизвести. Можно даже выебнутся и когда заканчивается место - разворачивается еще один банк данных, подключается в общий порядок и так до бесконечности. Короче место это не проблема. Это конечно всё прикольно, но это уже из серии супер ненужных неокупаемых хотелок, которая нужна просто чтобы глаз радовала, имхо. Грамотная реализация такой фичи обойдется в кругленькую сумму. Представь себе поход на АК, 10 паков по 50-100 рыл. Все ТПшатся, бафаются, хуярятся, ресаются, тпшаются и так на протяжении нескольких часов, кого то выкинуло, кто то еще что-то, параллельно в DE Village кто то создал персонажа, короче оцените просто масштаб того что вам придется сохранять, это просто 3.14здец, но идея конечно прикольная.
Выше уже писал) Чтобы:
1) делать более качественные тесты баланса, чтобы не количеством, а качеством проработки каждого боя работать
2)борьба с дюпами, багами, скамом. Сейчас разборка логов насколько мне известно - анальная боль админов. а так на возражение забаненого товарища ты просто кидаешь ему короткий реплей его косяков. при наличии логирования нетипичного прироста айтемов, которые может говорить о дюпе - ты очень быстро срисуешь его метод, посмотрев, какие операции выполнял человек. (не касается инжектов, хотя и там может чем поможет)
3) это просто АХYEННО) с этого можно было начать и закончить)
У меня сейчас логика ассоциативная - если уже есть подобные решения, пусть и более локальный (реплей. хотя нихyя себе, реплей мас-замеса тоже не кисло по логике такой), и сам клиент нормально тянет мас-замесы, а тем более сам сервер - то такое логирование вполне реалистичная задача не космических масштабов и технологий будущего. Если я не прав- с удовольствием послушаю, где именно
ЗЫ: спасибо что оценил идею
))