Решение проблемы с сохранениями BufferOverflow [B42.13]

Project Zomboid30 views1 min readby MaDKoTUpdated 7 FebView on Steam ↗

Суть проблемы

Проблема заключается в переполнении буфера (BufferOverflowException) при сохранении данных персонажа. Ошибка происходит в методе WriteStringUTF при попытке записи строки в ByteBuffer, который имеет ограниченный размер.

Когда инвентарь персонажа содержит слишком много предметов (особенно предметов с большим количеством метаданных, как литература), много изученных рецептов, прочитанных журналов и книг, общий размер данных для сохранения превышает выделенный буфер 64KB.
Для игры с модами которые добавляют много рецептов крафта это очень мало.

Решение

Увеличение размера буфера для исправления ошибки сохранения персонажей на сервере:

1.Заходим в папку с игрой и открываем projectzomboid.jar с помошью WinRAR (любого архиватора).
*Для выделенного сервера путь Project Zomboid Dedicated Server\java\projectzomboid.jar

2.Ищем там файл ServerPlayerDB$NetworkCharacterData.class. Лежит в \zombie\savefile.

3.Вытаскиваем его из архива и открываем с помощью программы Recaf - это редактор байт кода который позволяет нам отредактировать файл без заморочек с декомпиляцией и т.д. скачать можно с GitHub, для запуска необходим Java любой версии.

4.Тыкаем два раза по ServerPlayerDB$NetworkCharacterData слева в разделе Workspace (Если его там нет значит вы не выполнили шаг 3). Тыкаем правой кнопкой по ServerPlayerDB$NetworkCharacterData и нажимаем Edit class in assembler.

5.Ищем строки:

ldc 65536 (Тут может быть другое число)
invokestatic java/nio/ByteBuffer.allocate (I)Ljava/nio/ByteBuffer;

6.Меняем ldc 65536 (64KB) на свое значение 1048576 (1MB например). Должно получится вот так:

ldc 1048576
invokestatic java/nio/ByteBuffer.allocate (I)Ljava/nio/ByteBuffer;

7.Нажимаем CTRL+S чтобы сохранить изменение.

8.Снова тыкаем правой кнопкой по ServerPlayerDB$NetworkCharacterData слева в Workspace и экспортируем сохраненный файл в любую папку.

9.Заменяем измененным файлом оригинальный файл.

Вы великолепны!

*Не нужно проделывать это все на стороне клиента, только на стороне сервера.

This guide was created by its original author on the Steam Community. Are you the author and want it removed? Request removal.