Помогите Система реплеев игры

CraftCoder

Старожил
Пользователь
Баллы
108
Имя в Minecraft
CraftCoderr

@Shevchik ,@fromgate ,@alexandrage , у вас есть какие нибудь идеи по реализации такой штуки?

Мои размышления: необходимо записывать не события, а непосредственно пакеты идущие от сервера к игрокам, но по идее если перехватывать пакеты идущие к какому-то одному игроку, то на реплее не будет видно действий самого игрока. Таким образом нужно для баккит эмулировать какого-то фейкового игрока, которому он будет пытаться отправить пакеты, но при этом игрок не будет учитывать как реальный игрок, в том числе в Bukkit.getOnlinePlayers() и т.п.
 
Ох н*хера. Не представляю сколько на это было потрачено времени, но это что-то прекрасное. Не представляю как это работает, но раз релизнулось на gomme.hd, значит скоро будет и на spigotmc.org.
 
Причём игрока нужно не просто эмулировать, но ещё и тракер действий для него не должен иметь ограничения по радиусу. (Хотя на само деле это относительно просто делается). А дальше просто записываем все пакеты и повторяем. Единственное что придётся немного попотеть с самой паузой, ибо игрокам надо полёт включать, и сбрасывать ускроение, а потом возвращать при отключении паузы.
 
Ох н*хера. Не представляю сколько на это было потрачено времени, но это что-то прекрасное. Не представляю как это работает, но раз релизнулось на gomme.hd, значит скоро будет и на spigotmc.org.
уже полгода прошло, на spigotmc до сих пор ничего нет
Причём игрока нужно не просто эмулировать, но ещё и тракер действий для него не должен иметь ограничения по радиусу. (Хотя на само деле это относительно просто делается). А дальше просто записываем все пакеты и повторяем. Единственное что придётся немного попотеть с самой паузой, ибо игрокам надо полёт включать, и сбрасывать ускроение, а потом возвращать при отключении паузы.
Из ProtocolSupport видно, что ты хорошо умеешь инжектить всякое разное в ядро. Я пока не могу понять как сделать, чтобы эмулированный игрок не учитывался как обычный игрок.
 
уже полгода прошло, на spigotmc до сих пор ничего нет

Из ProtocolSupport видно, что ты хорошо умеешь инжектить всякое разное в ядро. Я пока не могу понять как сделать, чтобы эмулированный игрок не учитывался как обычный игрок.
В каком смысле чтобы не учитывался как игрок? Как минимум наследника EntityPlayer придётся добавить в WorldServer и в EntityTracker. Так что где-то он точно вылезет как игрок. Сам баккит тащит всё из PlayerList, так что можно не добавлять игрока туда, но тогда нужно будет эмулировать изначальный заход игрока самому.

Проще тупо забить и эмулировать настоящего игрока, (Можно даже не через nms, а реально сэмулировать заход игрока), просто писать плагины так чтобы они не учитывали его.
 
Последнее редактирование:
Знаете ребят - напоминает что-то необыкновенное.
Невероятно крутая затея по поводу этого.

Только у меня вопрос - это не будет нагружать сервер?
 
Знаете ребят - напоминает что-то необыкновенное.
Невероятно крутая затея по поводу этого.

Только у меня вопрос - это не будет нагружать сервер?
По идее самая ресурсоемкая часть этой штуки это запись в файл, но по моим подсчетам файлы не будет весить очень много, так что грузить не должно.
 
По идее самая ресурсоемкая часть этой штуки это запись в файл, но по моим подсчетам файлы не будет весить очень много, так что грузить не должно.
Зато весить такой файл станет пару сотен гиг через пару месфцев наверное, если онлайн большой.
 
Немцы знают как это делать, не только этот сервер сделал.
 
Получать отправляемые пакеты от сервера, сохранять их. После изменять в пакетах UUID и EntityId записанных entity и посылать пакеты игрокам в радиусе видимости.
Как вариант, но без понятия насколько трудно реализовать.
 
Вот еще нашел другой сервер с подобном фичей.
 
Я посчитал, что 1 часовой бой в игре bedwars будет весить около 50 метров.
Тогда можно смело отбросить эту идею.
По 50 мб на 1 час. Средняя катка - 10 мин.
За целый день на 1 гб намотает точно.
 
Тогда можно смело отбросить эту идею.
По 50 мб на 1 час. Средняя катка - 10 мин.
За целый день на 1 гб намотает точно.
Сжатие, все дела. Потом архивация в tar.gz. Всеми правдами и неправдами можно сократить размер.
 
Можно сделать если кто-то из модераторов проверил это, или сам игрок. То можно удалить уже саму реплейную игру.
 
Назад
Верх