В кругленькую сумму это выльется, а энтузиастов маловато в наше времяПодскажите, есть ли решения, как логировать полностью всю работу сервера? чтобы потом по имеющимся логам можно было запустить сервер на воспроизведение их, и получить как бы полную видео-запись со всеми данными того, что происходило на сервере. Мне это видится как дополнительный сервис, который для админского персонажа создает проигрывание сервера по записи , при этом можно менять скорость воспроизведения, перематывать, фризить. такая своеобразная "Матрица" получается)
И если нет - кому интересно заморочиться созданием такого на платной основе или как проект на энтузиазме? ))
Что конкретнее нужно в такой вот "видео-записи" ? Сервер это достаточно большая штука. Много чего может происходить из того что просто не видно вооруженным глазом. Это к слову о том что-бы более менее сфокуссировать внимание на что нужно воспроизводить для записи.
Например, можно записать как и куда мобы двигались, какие скиллы использовалли, или как у мобов HP изменялся... Ну и тоже можно такое сделать с персонажа игрока. Но потом будет вопрос о том кака такую запись проигрывать и при каких условияx (например можно ли играть на сервере, и кто может увидить такую запись).
В кратце скажу что да, можно сделать. Но проблема не в том что можно, а как это будет нужно.
Реплеи стандартные не устраивают?
Не все логируется как надо. У L2J например (ну и у вариантов тоже) есть ивенты к которым обычно прикрепляются квесты. Так вот, можно по таким вот ивентам и построить систему записи. Так вот нужно добавить таких ивентов в различные части кода чтобы можно было их собирать. Ну типа вот ивент и вот дата по времени, и сохраняем в базу данных.
А вот после этого нужно еще подумать каким образом можно запись проиграть. Да так чтобы никто ме смог влиять на запись (например проигрываем моба, могут ли другие игроки каким-то образом убить такого вот моба?). Ведь запись это и локация, и то что видно в клиенте, да и различные паузы. Работы будет много что-бы все работало. И больше будет если нужно выписывать статистики ударов, криты ну и другие эффекты.
Разворачиваешь длп систему и принужденно ставишь агенты игрокам и они для тебя стримят свою игру всегда, that`s all
Thread.dumpStack();это не то. и гигатонны мусорного трафика. тем более под задачи, которые изначально указал - пошаговый анализ хода боя в Пвп или Пве
Первый пункт можно сделать очень просто и сердито. Записываем ивент в БД с датой.выходит 2 вопроса основных:
1. логирование работы лайв-сервера с объединением в единый лог всей инфы
2. допиливание механики вопроизведения в обычное ядро сервера этого лога, чтобы он ретранслировал его обратно в пакетку для клинета. Или сразу логировать пакетку? (хз, врядли). Далее сервер одновременно транслирует подключенным по доступу клиентам игры пакеты записи по локации их спектатора, и при этом позволяет существовать спектатору с движением в этом инстансе(или как его назвать), без взаимодествия с миром.
ЗЫ: какая наркомания и дереал будет у неосновных спектаторов, когда главный админ будет вперед- назад проматывать) как в фильмах, где главный герой перестает существовать в реальности, и она произвольно вокруг него существует, при этом со скачками во времени)) жоская наркомания )))
ЗЗЫЫЫ: кажется я ебейшую штуку придумал) это по сути эффект бога , только в ЛА2)
Первый пункт можно сделать очень просто и сердито. Записываем ивент в БД с датой.
A вот второй уже будет сложнее. Тут нужно заменить ИИ мобов и игрока (да, игрок тоже имеет ИИ, только он заточен на исполнения определенных взаимодействий) на исполнение либо ивентов, либо переработанных данных от ивентов, то есть очен прямолинейно и без обычной логики формул для урона/ХП и так далее.
1. Все записывается в базу данных. Не действия, а именно ивенты от того что произошло на сервере. Например персонаж пришел на такую-то позицию и кастанул баф на себя. Это два ивента: куда персонаж пришел, где и когда, ну и какой баф и когда. Сохранение таких данных и организование таких ивентов в лог - давно решенная задача, в принципе можно организовать на любой базе данных (SQL или нет, можно даже это все засунуть в Кафку или NATS если делать нечего).1. все ли ивенты можно так записать? я так понимаю ивент - любое действие чего угодно. от прогулки моба, до клика в инвентаре. Но тогда вопрос как это потом консолидировать во вменяемую структуру, для дальнейшего оформления в пакеты действий для клиента? могу формулировать некорректно, нуб в программировании
2. а зачем нам ии? у нас должна быть запись результатов действий ИИ с лайва, которая просто будет воспроизводится по логу. Куда какой моб чихнул или Вася кликнул. формулы и механики, даже геодвиг для этого - не нужны.
1. Все записывается в базу данных. Не действия, а именно ивенты от того что произошло на сервере. Например персонаж пришел на такую-то позицию и кастанул баф на себя. Это два ивента: куда персонаж пришел, где и когда, ну и какой баф и когда. Сохранение таких данных и организование таких ивентов в лог - давно решенная задача, в принципе можно организовать на любой базе данных (SQL или нет, можно даже это все засунуть в Кафку или NATS если делать нечего).
2. ИИ относится к коду сервера. Можно называть это все не ИИ а чем-то другим, например поведением персонажа. Так вот, нормальное поведение нам ненадо (например аггро или же что будет когда моб начнет убегать...) Все что связанно с нормальным поведением либо игрока или мобa теперь нужно просто отключить, только пакеты генерить. Просто по логу не получиться. Больше половины сервера завязанно либо на поведении игрока, либо мобов.
Ты вообще имеешь представление сколько у тебя лога будет в минуту?))) даже при онлайне в 100 колек. если прямо все записывать. Один юз сосок тебе засрет диск по самые гланды за пару часов)На пальцах мне пока сложно понять. Надо садиться и разбираться в структуре ядра, и как из нее вытащить все нужное. Я правильно понял, что ивентом будет не каждая точка, по которой бежал игрок, а конечная? Хотелось бы сохранять всю траекторию
Как именно завязаны на поведение игрока или мобов? Допустим есть траектория игрока, есть положения мобов. Игрок подбежал и начал бить моба, оба начали юзать скилы и менять полодение. Если есть иефа по всем действиям и координатам движения, то поидее из лога мы можем воссоздать сцену происходящего
На самом деле нам не нужен ивент o том что-бы персонаж куда-то пришел. Просто когда персонаж собирается идти, тогда будет ивент который мы сможем записать. То есть откуда и куда. Если знаем значения скорости, то нам ничего больше не надо (даже на сервере прорабатывать, так как серверный пакет заставит персонажа двигаться, есть нюанс с геодатой, но не критично) прорабатывать. Просто считай что если надо что-то сделать, будет ивент. Если есть изменения по HP/MP/CP, тоже будет ивент. Вот и все.На пальцах мне пока сложно понять. Надо садиться и разбираться в структуре ядра, и как из нее вытащить все нужное. Я правильно понял, что ивентом будет не каждая точка, по которой бежал игрок, а конечная? Хотелось бы сохранять всю траекторию
Как именно завязаны на поведение игрока или мобов? Допустим есть траектория игрока, есть положения мобов. Игрок подбежал и начал бить моба, оба начали юзать скилы и менять полодение. Если есть иефа по всем действиям и координатам движения, то поидее из лога мы можем воссоздать сцену происходящего
Обычному сервере на Яве будет проблематично, особенно если не учли как будут сохранять данные или же сколько потоков будут получать эти ивенты. GC будет зашкаливать. Хотя если использовать batch update, ну и object pool, тогда и будет все хорошо, даже если будут ивенты генериться десятками тысяч. Но увы, это все для отдельного обсуждения. Просто надо понимать что если нужнo решать такие нагрузки, решения будут тоже достаточно эзотерическими.Ты вообще имеешь представление сколько у тебя лога будет в минуту?))) даже при онлайне в 100 колек. если прямо все записывать. Один юз сосок тебе засрет диск по самые гланды за пару часов)
Ты вообще имеешь представление сколько у тебя лога будет в минуту?))) даже при онлайне в 100 колек. если прямо все записывать. Один юз сосок тебе засрет диск по самые гланды за пару часов)
все что ты видишь в клиенте - это результат отправки пакетов от сервера в клиент. По сути так работает реплей - т.к он тупо пишет сокращенный лог пакетов, дропая технические пакеты, но это не то, что ты хочешь.
По сути, ты хочешь хранить дамп хипа и всех потоков за каждый момент времени на протяжении всей жизни сервера, при этом еще в таком виде, чтобы по этому дампу потом можно было воспроизвести игру в реалтайи, да еще и с возможностью перемотки и ускорения/замедления, поэтому тебе придется хранить инфу о каждом объекте и всех его дочерних объектах.
Чтобы воспроизвести состояние каждого объекта на сервере, тебе нужно сохранить состояние каждого серверного объекта в каждый момент времени. Если кратко - в контексте л2 и ява это не реализуемо на современном уровне технологий. В теории, это возможно, но это потребует колоссальных трудозатрат, вычислительных ресурсов и объемов для хранения, а также полное переписывание всего существующего кода эмулятора и наверное еще и солидного куска JVM. Даже если представить, что ты все это переписал, то это сотни гигабайт данных в час.
В простом варианте можно сохранять все пакеты в базу данных как в яндекс метрики, а дальше простая аналитика
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?