Интересует, по какому принципу производится удаления\восстановления поврежденных частей карты

Принятый ответ

Чтобы понимать процесс восстановления карты - нужно понимать процесс оптимизации карты
Вот процесс оптимизации/защиты карты:

Файлы редактора

В MPQ архиве карты есть файлы которые используются только редактором и при сохранении карты редактор записывает код из некоторых файлов в war3map.j
Файлы, которые удаляются оптимизаторами:
  1. war3mapUnits.doo (расположение созданных в WE юнитов на карте)
  2. war3map.wtg (код из редактора триггеров)
  3. war3map.wct (код из редактора триггеров)
  4. war3map.imp (информация о импорте в карте, редактору он нужен чтобы работать с импортированными файлами, варкрафт war3map.imp не использует)

Оптимизация скрипта

Скрипт карты оптимизируется так:
  1. Удаляются комментарии в скрипте и ненужные пробелы
2. Сокращаются названия функций и переменных
До:
function MyFunction takes nothing returns integer
	local integer MyInteger = 2+2
	return MyInteger
endfunction
После:
function a takes nothing returns integer
	local integer A = 2+2
	return A
endfunction
  1. Все действия функций инициализации объектов карты переносятся в функцию main

Всё это в сумме уменьшает время "загрузки/проверки скрипта" ВМ JASS'а (к примеру: при нажатии на саму карту в списке карт - до оптимизации будет лаг, а после оптимизации он будет значительно меньше) и уменьшает вес самой карты благодаря уменьшению количества символов в war3map.j (см. первый, второй и третий пункты)
И создает эффект "защиты" карты, т.к после обфускации - со скриптом достаточно сложно работать из за "отсутствия" названий функций и переменных

Архив карты

Это способы "защиты" карты, которые не относятся к оптимизации:
  1. Удаление файла (listfile), он содержит названия файлов в карте ((listfile) варкрафтом не используется)
  2. Манипуляции с заголовком архива карты

Оптимизация объектов

Объекты в данном случае - это предметы, юниты, способности и т.д
Редактор карт работает с объектными файлами типа war3map.w3a, war3map.w3u и т.д
А варкрафт может ещё работать с SLK таблицами
Редактор с SLK таблицами работать не может, но если они будут находиться в папке варкрафта, то вполне будет читать их (такой способ подходит только для изучения карты)
Вся суть оптимизации состоит в том, чтобы конвертировать объектные файлы в SLK таблицы
Т.к SLK таблицы намного быстрее читаются варкрафтом, то карта будет заметно быстрее грузиться (но и весят SLK таблицы немного больше объектных файлов)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
32
5 лет назад
0
Восстановление - ну как создание файлов пустышек вместо файлов редактора, с минимум инфо и деслк оптимизацией если она была.
Код до состояния исходников восстановить практически невозможно, кроме явно гуишных триггеров. Разумеется коментарии и описание работы систем вы тоже чудесным образом не восстановите изучая код можно сделать выводы о наличии тех или иных распространенных наработок. Кароче все делается руками и требует наличие немалого опыта.
0
8
5 лет назад
0
Не знаю, чем не устроило тех, кто мне влепил "-", но прикол в том, что такой принцип у всего подобного. Возьмите игры, которые собирают после написания кода с автоматической оптимизацией (что и делает ваш протектор). Иногда для защиты игр (карт варкрафта) возможно применение технологии чтения кода с помощью шифрования, тем самым весь написанный код шифруется, а чтение происходит через отдельную программу, которая дешифрует отдельные куски кода, которые уже скомпилированы для чтения их (это уже более сложные механизмы защиты, и вряд ли они существуют для Warcraft 3). Однако подобное распространено для всего, что имеет защиту в сфере IT, поэтому и написал, что депротектор работает по той же схеме, если не вдаваться в детали его работы.
Почитайте: Декомпиляция
0
32
5 лет назад
0
pAxsIs, эмм а ниче что Jass скриптовый язык, который ни компилируется а интерпретируется? Никакой компиляции в картах варкравта нет, правильно влепили. Скрипт карты не шифруется и может быть только War3map.j, хоть в мпк можно каждому файлу в отдельности указать тип сжатия и шифрования, это не может работать когда дело доходит до совместимости, т.к игра использует один единственный механизм, заложенный разработчиками а не ваш, и прочитать вашу зашифрованную карту никак не сможет.
0
8
5 лет назад
Отредактирован pAxsIs
0
Вы хорошо разбираетесь в тонкостях world editor'a, я не буду с вами спорить в этом предмете, я не претендую на того, кто все знает тут, но будьте повнимательнее пожалуйста

quq_CCCP:
pAxsIs, эмм а ниче что Jass скриптовый язык, который ни компилируется а интерпретируется?
Я и не писал, что он компилируется.
pAxsIs:
с автоматической оптимизацией (что и делает ваш протектор).

quq_CCCP:
Скрипт карты не шифруется
pAxsIs:
Иногда для защиты игр (карт варкрафта) возможно ... шифрование, ... это уже более сложные механизмы защиты, и вряд ли они существуют для Warcraft 3.

Попросили описать принцип работы программ
типа "Дептротекторов"
Я описал принцип, без подробностей реализации.
2
18
5 лет назад
Отредактирован Hodor
2
Ещё файлы, которые удаляются оптимизаторами:
  1. war3map.w3r (регионы)
  2. war3map.w3c (камеры)

Процесс ручного минимального восстановления карты (годится только для изучения карты, используя редактор JNGP):
Этот метод рассчитан только для восстановления после тул векса
1. Восстановление заголовка карты
В Hex редакторе находим "строчку" под номером 200
С блока 04 до блока 07 будет записано "56 78 4F 50" ("VxOP") - всё это нужно обнулить, в итоге получится "00 00 00 00"
2. Восстановление листфайла
Для этого потребуется программа RMPQex, далее открываем карту и создаем листфайл
После этого нужно вставить полученный листфайл в карту
Прямого способа вставить листфайл в карту я не нашел, но есть один рабочий вариант:
Путь к карте или MPQ редактору не должен содержать кириллицу
Открываем карту с помощью MPQ редактора и при открытии используем ранее полученный листфайл
Далее делаем что нибудь в карте, к примеру: можно вытащить war3map.j из папки Scripts и после этого просто закрыть MPQ редактор
Или вместо war3map.j можно добавить файлы из третьего пункта, если они заранее были
3. Добавление файлов для открытия карты редактором
Создаем пустую карту, сохраняем её
Далее, используя MPQ редактор - нужно вытащить war3map.w3i и war3mapUnits.doo и вставить/заменить их в восстанавливаемую карту
4. Восстановление объектных файлов
Если на карте была SLK оптимизация, то нужно применить программу "Silk Object 3"
Вытаскиваем из карты папку Units и сохраняем её куда нибудь
Далее создаем копию карты, открываем в редакторе и сохраняем, после этого - через MPQ редактор вставляем в только что сохраненную карту папку Units
Кидаем копию карты в папку "Silk Object 3"
В конфиге программы указываем имя копии карты (без пути и с w3x)
Так же в конфиге ставим в EXPORT_OBJECT_DATA единицу и сохраняем конфиг, далее запускаем программу и ждем
Потом из папки OUT берем эти файлы и вставляем/заменяем в карту ДО копирования, так же удаляем все файлы из папки Units, не трогая папки в папке Units:
  1. war3map.w3u
  2. war3map.w3t
  3. war3map.w3b
  4. war3map.w3d
  5. war3map.w3a
  6. war3map.w3h
  7. war3map.w3q
  1. Готово. Главное не сохранять карту т.к редактор при сохранении создает карту заново и без war3map.imp он не знает о существовании импорта (из за этого пропадут нестандартные модели, текстуры и т.д)
  2. Если нужно работать со скриптом карты - то лучше использовать деобфускатор RMPQex
2
29
5 лет назад
2
Варкрафт 3 это программа. Если варкрафт 3 может прочитать данные карты в том состоянии, чтобы эта карта работала, значит можно написать другую программу, которая тоже корректно прочтет эти данные. Депротектор и есть эта программа. Естественно, это лишь половина работы, вторая половина заключается в том, чтобы создать файл в таком формате, который прочитает третья программа - World Editor.exe. Никакой магии.
0
18
5 лет назад
0
UPD к пункту 1:
чуть ошибся, в блоках с 04 до 07 нужно вместо обнуления написать "20 00 00 00"
и war3map.w3r это области
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.