Редактируем domain.data & domain.sev (TW без Лунной гавани)

ZERO

Известный пользователь
Пользователь
Регистрация
6 Окт 2019
Сообщения
57
Реакции
52
Предоставляю два варианта гайда:
1) Полный мой разбор с нуля важных компонентов структуры .data и .sev. Осторожно, многобукаф.
2) Лайтовый вариант для клиент-части. Готовые структуры от @Vice, но они для версии 1.5.3 и ниже. В них нету новых структур под 1.5.5, но новые структуры довольно легкие и я про них допишу естественно.
Зачем нужен этот гайд?
1. Domain.data с версии 1.5.5 отличается от версий ниже.
2. Ни один редактор не дает возможности редактировать сами зоны, а многим хотелось бы удалить Лунную гавань на 1.5.5.
3. Возможно кто то напишет наконец то полноценный редактор :44:
4. Редактор дезмонда ломает клиентский файл, если добавить\изменить своё расписание тв (речь про версию 1.5.5) и не совсем верно сохраняет серверный. (на сколько я понял редактор дезмонда основан на структуре подобной той, что скинул @Vice)

Что бы понять что редактировать, нужно просто понять "структуру" файла.
1. Количество зон.

Тут мы указываем сколько у нас зон. Находится в самом начале.
1.png

2. Структура зоны
Она примерно такая:
Первые 28 байтов - Название зоны
Вторые 4 байта - Идентификатор зоны
Третьи 4 байта - Уровень зоны
Четвертые 4 байта - Стоимость зоны
2.png

Остальные байты - Координаты точек из которых состоят зоны, их количество, их связи, количество соседних зон и номера соседних зон.

Рассмотрим чуть подробнее про зоны.
Первые 4+4 байта (синий) это координаты нулевой точки. Она не участвует в создании отрезков.
Вторые 4 байт (красный по бокам) это количество зон - 61.
Потом идут координаты точки Х - 4 байта (зеленый), Y - 4 байта (красный). Х около 700, Y около 200. Это в пикселях, можно выстроить карту в ФШ например.
3.png

Что бы в этом убедиться необходимо выстроить некоторые точки.
4.png

В целом мы убедились что это так.

Дальше смотрим код и видим следующее:
5.png

Выделенные байты - конец кода с координатами точек
Красное подчеркивание - Количество отрезков (59)
Зеленое подчеркивание - Отрезок из двух точек координат
Далее.
6.png

Выделенное - конец кода с постройкой отрезков.
Красное подчеркивание - байты для количества соседних зон.
Последующее дальше байты (4 для каждой зоны) и синее подчеркивание - это id соседних зон.
И так, теперь еще раз и всё вместе :
  1. Название (28 байт)
  2. Идентификатор зоны (4 байта)
  3. Уровень зоны (4 байта)
  4. Стоимость зоны (4 байта)
  5. Координаты какой то точки (4+4 байта,х,y), вероятно нулевая точка
  6. Количество точек зон (4 байта)
  7. Координаты точек для постройки отрезков зоны (для каждой точки 4 (х) + 4 (у) байта, общее количество зависит от количества зон вероятно)
  8. Количество отрезков (4 байта)
  9. Отрезки (для каждого отрезка 4 (id точки) + 4 (id точки) байта, общее количество зависит от количества зон вероятно)
  10. Количество соседних зон (4 байта)
  11. Идентификаторы соседних зон (id) (4 байта для 1 зоны, общее количество зависит от количества соседних зон)

3. Удаляем зону.
Делаем на примере зоны Лунная гавань (остров расы теней) под номером 52.
Первым делом ищем с кем граничит эта зона. Мы уже знаем что это зона "Роковой город" под номером 6. (см. guildmap, например)
А это значит что перед тем как удалять Лунную гавань, необходимо удалить ее из списка соседей у Рокового города.
Найти Роковой город просто. Можно просто пробить по Text - Роковой город (Font - Unicode), либо по каким то другим параметрам основываясь на знаниях структуры.
6.png
Меняем здесь 05 на 04 (подчеркнуто красным), и удаляем полностью байты 34 00 00 00 (подчеркнуто синим)

4. Теперь удаляем саму зону.
Аналогично как в пункте 3 искали Роковой ищем Лунную гавань и согласно структуре из пункта 3 выделяем байты от начала до конца.
Начало - название зоны. Конец - Байты соседних зон. Лунная гавань граничит только с Роковым городом.
7.png

Удаляем выделенное фиол и желтым цветом и готово. Главное не забудьте поправить общее количество зон согласно пункту 1.

5. Настройка расписания
  1. Количество пунктов для расписание ТВ (красным) (4 байта)
  2. День недели 1 зоны (0 - воскресенье, 6 - суббота)
  3. Час (4 байта)
  4. Минута (4 байта)
  5. Количество пунктов для расписание ТВ v2 (черным) (4 байта)
  6. И так же как в п.2-п.4 (4+4+4) байта под день недели, час, минута.
  7. Максимальное количество сражений V2 (4 байта) (я не знаю что это, но смею предположить что это дополнительные какие то битвы)
8.png

Как видно на скриншоте, у нас тут 5 зон для сражений. Начинается с выделенного красным - это количество пунктов для расписания тв. Цветами зеленый, синий, оранж, фиол,серым выделены основные настройки (день недели, час, минута). Розовым подчеркнуто макс. количество сражений.
А вот дальше идут точно такие же настройки, только для второго аналогичного списка (!!!), назовем его Расписания ТВ V2.
Настройки для расписания тв v2 я подчеркну и разделил белым цветом.
Расшифровка расписания ТВ V2: 1) Пятница, 14 час 00 мин 2) Пятница, 22 час 00 мин 3) Четверг, 22 час 00 мин 4) Воскресенье, 16 час 00 мин 5) Воскресенье, 14 час 00 мин
Для чего нужны ТВ v2 до конца мне не ясно. Видимо какие то запасные даты.
К сожалению редактор дезмонда ломает файл при работе с расписанием, поскольку полностью игнорирует пункты связанные V2.
Вот сравнение файла после его редактора (1) и "дефолта"(2)
9.png

Отсюда понятно, что и на сервер части этого не будет.

6. Серверная часть
Начнем с сравнения оригинала vs файл после редактора дезмонда.
10.png

Как мы видим уже есть отличия, хотя их быть не должно, т.к я просто пересохранил файл. У .sev части сохраненной через редактор отсутствует приличный кусок байтов, который относится к настройкам Расписаний V2.
Косяк редактора лишь в том, что он не знает, следовательно не сохраняет всё что касается части V2.
Поэтому пока что проще просто конвертнуть редактором, а потом просто починить часть V2 вручную. В целом структура .sev части мало чем отличается от клиентской.

6.1 Чиним Расписание V2
Я буду делать на примере уже с вырезанной лунной гаванью.
Открываем конец кода и ищем последнюю соседнюю зону 51 зоны (выделено в хексе) и начало обозначения расписания.
Если я верно понял, последовательность тут наоборот. Сначала идут V2, потом V1.
Расшифровка расписания ТВ V2: 1) Суббота, 14 час 00 мин 2) Воскресенье, 14 час 00 мин 3) Суббота, 09 час 00 мин 4) Понедельник, 14 час 00 мин 5) Суббота, 20 час 00 мин
Это кстати больше похоже на правду, нежели в клиенте, ибо я нашел гайд по тв 2019 года на просторах рунета и обнаружил подобную информацию
Расписание ТВ
ТВ проходят в один из 7 временных промежутков:

Пятница 20:00-20:18 (каждые 3 минуты стартует ТВ)
Суббота 9.00 — 9.18
Суббота в 14:00-14:18
Суббота в 20:00-20:18
Воскресенье в 9.00 — 9.18
Воскресенье 14:00-14:18
Воскресенье 20:00-20:18
11.png

Вообщем от начала и до конца удаляем полностью код связанный с расписанием тв обозначенным красным.
После чего вставляем сюда свой код:
Код:
05 00 00 00 06 00 00 00 0e 00 00 00 00 00 00 00
00 00 00 00 0e 00 00 00 00 00 00 00 06 00 00 00
09 00 00 00 00 00 00 00 01 00 00 00 0e 00 00 00
00 00 00 00 06 00 00 00 14 00 00 00 00 00 00 00
0b 00 00 00 05 00 00 00 05 00 00 00 14 00 00 00
00 00 00 00 05 00 00 00 16 00 00 00 00 00 00 00
04 00 00 00 16 00 00 00 00 00 00 00 00 00 00 00
10 00 00 00 00 00 00 00 00 00 00 00 0e 00 00 00
00 00 00 00 0b 00 00 00
Должно получиться так:
12.png

Вывод:
Расшифровка расписания .sev ТВ V2: 1) Суббота, 14 час 00 мин 2) Воскресенье, 14 час 00 мин 3) Суббота, 09 час 00 мин 4) Понедельник, 14 час 00 мин 5) Суббота, 20 час 00 мин
Расшифровка расписания .sev ТВ V1: 1) Пятница, 20 час 00 мин 2) Пятница, 22 час 00 мин 3) Четверг, 22 час 00 мин 4) Воскресенье, 16 час 00 мин 5) Воскресенье, 14 час 00 мин
Как видите, ТВ v1 полностью совпадает с тем, что в клиенте. А вот v2 клало на это болт.
По приоритету ставок я так понял от ТВv2 1-5 до TВv1 1-5 или же что идет раньше, то и приоритетнее.
Установив настройки как на этой версии по стандарту и сделав несколько ставок, я обнаружил приоритет ставок описанный выше. По факту же все мои 10 ставок, включая 2 ставки на гвг 3 уровня, установились на Субботу 14:00 +- несколько минут. Предполагаю, что если два клана поставят друг на друга, одно из гвг пройдет в Воскресенье 14:00+-.
В целом, что бы увидеть разницу нужен наверное огромный онлайн с активными ставками. По факту если вы не почините серверный файлик, на месте ТВv2 у вас будут ТВv1, то есть всеми привычные старые тайминги и всё.
Короче говоря ваше расписание будет работать, т.к ТВv1 встанет на место ТВv2. А вот что случится когда приоритет дойдет до расписания из кода ТВv2, а их там нету уже другой вопрос.
1. Скачиваем архив domain.data.zip в нем лежим файлик domain.data.bt
2. Открываем 010 editor, Run Template -> Open и выбираем этот файлик. Нажимаем Run.
3. Открываем Variables (у кого то справа, у кого то снизу) и видим готовую структуру. Единственное, что она до версии 1.5.3 включительно. Разобраться что к чему тут не сложно, а если не поняли можете открыть 1 вариант гайда.
4.В данной структуре не указано следующие пункты которые идут далее (См. скрин):
13.png

1. Максимальное количество сражений на зонах BattleServerTime, назовем этот параметр к примеру MaxBattle.
2. int coint 3,т.е количество пунктов BattleServerTime v2
3. Дальше идут неуказанные BattleServerTime v2, их структуры аналогичны BattleServerTime
4. MaxBattle v2.

Про серверную часть я расписал в 1 варианте гайда.
Но если вкратце
, то на сервер-части все расписания v2 идут первыми (приоритет), а обычные идут после.
Когда вы конвертируете клиент часть в серверную редактором дезмонда или любым другим на основе подобных структур, не учитывающих v2, ваш серверный файл будет работать, НО происходит следующее: обычные битвы встают на место v2, а расписания v2 просто нету. И если приоритет ставки дойдет до них, то что будет лично мне неизвестно.
С клиент частью же все иначе. Если вы попытаетесь изменить расписание ТВ (Добавить зону например), то ваш клиент будет просто крашиться, т.к ему обязательно нужен тот код для v2.

Прикладываю так же рабочие файлы без Лунной гавани для 1.5.5. Использовать на свой страх и риск.
  • domain.zip: domain.data без лунной гавани и domain.sev без лунной гавани и с расписанием ТВ v2 & ТВ
Готовые структуры для 1.5.3 и ниже:
  • domain.data.zip: структура domain до 1.5.3 предоставленные @Vice
 

Вложения

  • domain.zip
    10 KB · Просмотры: 407
  • domain.data.zip
    573 байт · Просмотры: 427
Последнее редактирование модератором:
Дай Бог тебе здоровья, за такой манул!)
 
  • Like
Реакции: ZERO
Дай Бог тебе здоровья, за такой манул!)
:4:
Пришлось разбираться, ибо темный лес. На 1.5.3 если можно было от 1.5.1 поставить просто файлы и забить, то тут китайцы подсуетились...
 
вот я пока спал этот ишак решил разобрать эту тему и скинул мне, я когда увидел этот гайд я послал его в жепу ибо многобукаф
 
  • Like
Реакции: ZERO
'Run Template'
На скринах прямо-таки жирная подсказка, как всё можно упростить и привести в нормальный вид.

Гайд отличный, заумный! Но почему работаете с файлом, как "австралопитеки"? Используйте структуру при такой работе с файлами. Очень упрощает представление открытого файла. Вот попробуйте структуру domain.data применить в деле.
 

Вложения

  • domain.data.zip
    573 байт · Просмотры: 390
  • Like
Реакции: ZERO
'Run Template'
На скринах прямо-таки жирная подсказка, как всё можно упростить и привести в нормальный вид.

Гайд отличный, заумный! Но почему работаете с файлом, как "австралопитеки"? Используйте структуру при такой работе с файлами. Очень упрощает представление открытого файла. Вот попробуйте структуру domain.data применить в деле.
откуда ты структуру взял? с исходников?
 
'Run Template'
На скринах прямо-таки жирная подсказка, как всё можно упростить и привести в нормальный вид.

Гайд отличный, заумный! Но почему работаете с файлом, как "австралопитеки"? Используйте структуру при такой работе с файлами. Очень упрощает представление открытого файла. Вот попробуйте структуру domain.data применить в деле.
я не программист , просто логическим путем допер :D
это структура до 1.5.3
 
Последнее редактирование модератором:
@Vice, структура кстати не полная (не под 1.5.5). походу по ней как раз дезмонд и делал :2:
 

Реклама

Сверху