XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
NETRAT

offline
Опыт: 83,712
Активность:
[Tool] Wc3 Object Merge
Как известно, при создании нового обьекта в редакторе WorldEdit, его идентификатор получает значение, с первой буквой, совпадающей с первой буквой оригинального идентификатора(для юнитов это первая буква названия расы), а остальные символы получаются из преобразования первого свободного порядкового номера, преобразованного в систему счисления "Цифры + Символы Латиницы", то есть для нового юнита мы получаем идентификатор типа u000 или h000, для новой способности A000, для нового баффа B000 и т.п. Далее мы получаем u001, h001, A001, B001 соответственно. Тенденция понятна. Так вот это хорошо, потому что выглядит красиво, однако, для работы в команде или для установки наработок это просто ужасно, так как на каждой карте могут быть свои u000 и A000 и т.п, которые нам приходится вручную копировать с помощью Редактора Кампаний(кто с этим способом незнаком, ищите статью на сайте), затем отыскивать все используемые в наработке идентификаторы и исправлять их на новые, и все это вручную. Я предлагаю намного более простой и удобный способ.

Для чего нужна утилита?
Утилита предназначена преимущественно для
- Облегчения жизни модмейкерам
- Облегчения импорта обьектов наработок
- Облегчения склеивания разрозненных файлов обьектов (это очень часто случается при командной работе, когда каждый из участников делает свой кусок работы, то обьединение нескольких карт в единую систему превращается в жуткий кошмар, на себе испытал)
- Я бы посоветовал использовать данную утилиту при создании наработок - это максимально упростит импорт вашей наработки на другую карту. Фактически, для импорта наработки будет достаточно всего лишь склеить обьекты(с помощью этой же утилиты, никаких коллизий вообще говоря быть не может) и просто скопировать триггеры. Мапмейкеру, использующему наработку вообще не понадобится нигде менять идентификаторы - работа сводится к минимуму.
- Некоторый способ структурирования информации, визуально в редакторе обьектов это несущественно, однако, если вы используете обьекты в JASS'e, то вам будет намного проще сориентироваться для чего предназначен обьект, если вы выберете ему идентификатор покрасивее.


Подробнее о файлах обьектов:
Файлы обьектов это обычные w3o файлы, содержащие все данные о типах обьектов, используемых в карте и их связях. Манипуляции с этими файлами легко проводятся при помощи пунктов меню Редактора Обьектов(Файл -> Экспорт всех данных / Файл -> Ипорт всех данных)

Полная инструкция по импорту наработок в карту

I. Для начала нам нужно проверить используемые в нашей наработке обьекты и исправить их идентификаторы так, чтобы у нас не было конфликтов с уже имеющимися в карте обьектами. Примечание: Если для наработки уже был применен этот пункт, то его можно пропустить(все эти манипуляции может предварительно произвести автор наработки для облегчения импорта наработки мапперами)
0. С помощью редактора экспортировать файл обьектов нашей наработки и файлы триггеров наработки (wct и wtg).
1. В пункте "Основной файл обьектов" выбираем файл обьектов наработки.
2. Сохраняем список идентификаторов соответствующей кнопкой в какой-нибудь текстовый файл.
3. Открываем текстовый файл и исправляем его - превращаем в список замены идентификаторов - на первом месте в таком списке стоит идентификатор, который будет заменен, на втором месте - идентификатор, которым он будет заменен, после может следовать комментарий, отделяемый от идентификаторов символами "//".
Примечание: как настраивать списки замены читай в "Подробнее о файлах списков замены"
4. Загружаем в поле "Файл списка замены" список замены, который мы формировали в предыдущем пункте.
5. Загружаем в "Список дополнительных файлов" файлы триггеров нашей наработки(которые мы экспортировали в пункте 0).
6. Жмем кнопку "Заменить". Примечание: Результаты замены перезаписываются в исходные файлы.
Примечание: после выполнения этого пункта файлы обьектов и триггеров из карты наработки вообще не трогаем, дабы не возникло путанницы - они нам больше не понадобятся.

II. Теперь, собственно, обьединение наработки и карты.
0. С помощью редактора экспортировать файл обьектов нашей карты и, если перед этим не выполнялся пункт I, то экспортировать файл обьектов нашей карты.
1. В поле "Основной файл обьектов" следует загрузить файл обьектов нашей карты
2. В поле "Добавленный файл обьектов" следует загрузить файл обьектов нашей наработки
3. Выбрать режим обьединения обьектов с совпадающими идентификаторами
a) "Перезаписывать обьекты" - означает что добавляемые обьекты будут полностью заменять обьекты основного файла(с которыми у них совпадают идентификаторы)
б) "Склеивать обьекты" - означает что поля обьектов просто будут добавлены(с заменой) к обьекту основного файла
в) "Не изменять" - обьект не будет добавлен если в основном файле уже имеется обьект с таким же идентификатором
Примечание: Если вы правильно сформировали списки замены в пункте I, то никаких совпадений идентификаторов вообще не будет.
4. Жмем кнопку "Обьединить". Файлы обьектов будут обьединены и записаны в основной файл обьектов.
5. В Редакторе Обьектов карты выбираем "Импорт всех обьектов" и импортируем все обьекты из основного файла в карту.
6. Теперь нам нужно перенести измененные триггеры наработки(если они были, конечно). Здесь есть некоторое неудобство - нам нужно файлы триггеров(которые мы экспортировали перед заменой идентификаторов) добавить в нашу карту. Если перед этим выполнялся пункт I, то следует импортировать файлы триггеров в некоторую временную карты(можно создать новую), при этом мы берем файлы триггеров не из наработки(карту наработки мы вообще после замены идентификаторов не трогаем) а из файлов триггеров, которые мы использовали при замене идентификаторов. Для этого их нужно скопировать в буффер обмена редактора, открыть нашу карту и вставить их туда. Примечание: для упрощения переноса триггеров в нашу карту, их можно обьединить в одну категорию(не изменяя порядка) и скопировать всю категорию.
7. Иногда наработка требует определенных дополнительных манипуляций с триггерами, их так же следует делать с измененными файлами триггеров(естественно, если имел место пункт I).

Подробнее о файлах списков замены:
Файлы обьектов это обычные текстовые файлы(TXT), в которых в каждой строке содержится два идентификатора - первый, это идентификатор который будет разыскиваться, второй - это идентификатор, на который будет заменен первый идентификатор. Эти два идентификаторы отделяются пробелами или знаками табуляции(в-общем любыми white-space знаками), главное - это чтобы их было четное количество - то есть они должны быть записаны парами. Однако же, тут есть одна особенность - дабы в еще большей степени упростить всем нам жизнь, я ввел спец-символ, заменитель любого символа, этот символ - знак процента '%' в идентификаторе, который используется для поиска, он заменяет любой символ - то есть любой символ будет с ним совпадать, когда знак применяется в идентификаторе, используемом для замены, то этот знак будет заменен на соответствующий знак из найденного идентификатора. Эта особенность позволяет использовать маски для замены идентификаторов. Обьясню на примерах:
Цитата:
A00% C00%
В данном случае, будут заменены все идентификаторы, начинающиеся с символов "A00", причем заменены они будут таким образом, что первые три символа будут "C00" а последний символ будет совпадать с последним символом оригинала. То есть идентификатор A00Z будет заменен на C00Z, идентификатор A005 заменен на C005 и так далее. Вполне возможны замена типа
Цитата:
%%00 O%%%
, которая сделает из идентификатора Ah00 идентификатор Oh00 или
Цитата:
%%%% F%%%
, которая сделает из идентификатора Ahab идентификатор Fhab, однако в последней замене коллизий не избежать если у вас есть обьекты типа u000 и A000... В файлах так же могут использоваться спецсимволы '/' после которых текст до конца строки(до знака переноса строки) не будет интерпретироваться, таким образом в файле могут храниться комментарии.

Важная особенность, которую я пока что не упомянул это то что сначала утилита ищет идентификаторы для замены, а только затем их везде соответственно заменяет, поэтому она точно знает что и как нужно изменить, и если вы напишете замену по маске поиска %%%%, то она заменит не все идентификаторы, найденные в полях, а только те, которые реально присутствуют в качестве идентификаторов существующих обьектов. То есть никакие данные она случайно испортить не может.

Ремарки:
1. Заменяет ID только для реально существующих обьектов - то есть, если обьект не оипсан в файле обьектов, то его ID не будет изменен нигде(то есть в полях типа AbilityList он тоже не изменится). Поэтому можете не бояться что данные исказятся.
2. Поддерживаются символы-заменители '%' (это заняло у меня достаточно много времени, учитывая то, что пункт 1 все же выполняется правильно)
3. При замене идентификаторов стандартных способностей, создается кастомная способность с указанным идентификатором, на основании оригинальной способности, стандартная способность при этом обнуляется - то есть становится полностью стандартной.
4. Замена идентификатора способности на идентификатор стандартной способности может вызвать ошибки при использовании файла обьектов.
5. Разумеется, записи, которых нет в файле обьектов, не будут изменены, то есть если вы замените идентификатор стандартной способности Лечение, то ваш стандартный Целитель не изменит свою используемую способность, а все так же будет использовать стандартное лечение.
6. Идентификаторы меняются по порядку записей в списке, каждый новый элемент - это еще один проход по файлу обьектов. В связи с этим вариант
Цитата:
A000 AX00
A%00 AZ00
в итоге изменит идентификатор A000 на AZ00(а не на AX00) и все способности подпадающие под замену A%00 на AZ00, наиболее вероятно что это вызовет ошибки уже в редакторе обьектов.
7. Вместо файлов триггеров можно указывать любые файлы, идентификаторы будут найдены и заменены с учетом регистра.
8. Если идентификатор обьекта из второго файла уже присутствует в первом файле, то обьект из второго файла будет склеен с первым - то есть все поля будут склеены, если поле уже присутствует в обьекте из первого файла, то оно будет перезаписано полем обьекта из второго файла. Фактически первый файл обьектов дополняется с обновлением вторым файлом обьектов.
9. Не обязательно чтобы идентификторы способностей начинались на букву 'A' а баффов на 'B', вы легко можете исправить это, скажем заменой
Цитата:
A%%% F%%%
который заменит первую букву идентификаторов, начинающихся на букву A на букву F. Это всего лишь соглашение, принятой разработчиком для простоты работы (опять же в JASS'e, вероятно).

Саму утилиту можно скачать по ссылке http://xgm.guru/files.php?section=wc3&id=1572
Кто скачал файл WC3ObjectMergeAPI.rar
Всего скачиваний: 13
Ник
Nimensy
МяУт
FeuerFrei
Pavel
Solid
RevaGeR

Отредактировано NETRAT, 17.05.2006 в 11:43.
Старый 08.02.2006, 03:41
Арастиор
Пакон враг безграмотности
offline
Опыт: 52,386
Активность:
Щаз заценю.
Для Портала может реально пригодиться.

Elijahu добавил:
Правда плохо я умею запускать из командной строки.
Старый 08.02.2006, 11:17
NETRAT

offline
Опыт: 83,712
Активность:
Вот именно, задолбемся переносить обьекты, а для кадой карты будем использовать маску типа A%%% A1%% и коллизий с абилами не будет
Напиши в строке Выполнить cmd.exe и подставь строки из примеров со своими путями
Старый 08.02.2006, 12:39
Sergey
Старейший
offline
Опыт: 44,363
Активность:
Испытывать пока не буду. Судя по описанию - неплохая штука. Не помешает добавить в следующей версии еще пару фич:
  1. Сохранение резервной копии файла,в котором мы производим замены.Например, прога создает копию файла и в название добавляет дату и время, когда были начаты замены. Т.е. чтобы в случае чего легко можно было откатить изменения назад на любом этапе.
  2. Очень бы хотелось, чтобы в утилите была возможность не только изменять список способностей, но и формировать этот самый список. К примеру, мы формируем список всех способностей, использованных на карте (или, скажем, только custom способностей). Это все сохраняется в специальный txt файл в столбик
A000
A001
...
Тогда потом можно будет ДОПИСАТЬ для нужных абил их новые имена и использовать этот самый текстовый файл, как ШАБЛОН для замены. По сути получится инструмент для быстрой переименовки любых абил на своей карте.
  1. Чтобы все это удобно работало, неплохо бы сделать возможность вставлять комментарии в файл со строками замены. К примеру,
A000 AX00 абила X
Комментарии ни на что не влияют, но позвоят человеку потом разобраться, что и для чего он переименовывал. Если можно, то при создании текстового файла со списком абил (пункт 2), автоматически для каждой строки создавались комментарии с названиями абил
A000 <название>
  1. Файлы с триггерами тоже можно импортировать. Почему бы не дать возможность параллельно шерстить файл с триггерами и делать аналогичную замену одних абил на другие?Это сэкономит кучу времени для сложных проектов.
Само собой, для файлов с триггерами тоже должны создаваться резервные копии.
Если все это сделаешь, буду твоей утилитой пользоваться :). Давно уже надоело, что в редакторе нету инструмента, чтобы давать своим абилам свои собственные идентификаторы. А так - и впрямь будет очень легко все импортировать.
Старый 08.02.2006, 13:16
NETRAT

offline
Опыт: 83,712
Активность:
Прошу прощения, господа, в той версии которую я выложил сегодня ночью(стало быть от 08.02.2006, 02:41) есть ошибка - ссылки внутри обьектов не исправляются. Я банально забыл включить это опцию... Версия файла обновлена, теперь все работает как надо

NETRAT добавил:
Sergey
1. Не совсем понимаю зачем это? файл обьектов из карты всегда можно достать заново
2. Согласен, ценное замечание
3. Верно
4. Я планировал это сделать, но это, похоже, уже выходит за рамки консольной утилиты, а мне сейчас очень вломы лезть в Win32 =( по-видимому добавится еще два параметра с именами файлов триггеров

Еще я могу добавить возможность модифицировать поля вроде Editor Suffix для удобства, только пока что не представляю что туда писать

Зачем эти резервные копии?

Отредактировано NETRAT, 08.02.2006 в 17:12.
Старый 08.02.2006, 13:53
tysch_tysch
Работаем
offline
Опыт: отключен
ну и где ньюз?=((
утиль утащил на тест
Старый 08.02.2006, 15:36
NETRAT

offline
Опыт: 83,712
Активность:
Ну я так скромненько, ибо утилита консольная, это не всегда удобно (вообще говоря совсем неудобно =()
Старый 08.02.2006, 15:55
Sergey
Старейший
offline
Опыт: 44,363
Активность:
NETRAT, смотри сам: провели мы какое-то преобразование. А в нем произошла ошибка. Но мы то этого не знаем. Чтобы проыерить, нужно импортировать к себе на карту. Мы споскойно импортируем новый набор способностей на свою карту. Сохраняем карту.
После сохранения, страрый набор абил становится уже недоступен. Ведь на карте уже новые объекты - с ошибкой. Копию старых объектов взять неоткуда. Это называется приплыли.
Умный человек, конечно, сам сохранит - копию объектов или копию сценария. Но лишняя страховка не помешает.
Старый 08.02.2006, 16:03
NETRAT

offline
Опыт: 83,712
Активность:
Апдейт - реализованы пункты 2, 3 и 4
Старый 08.02.2006, 16:12
Sergey
Старейший
offline
Опыт: 44,363
Активность:
Отлично. Но на пункт 1 тоже обрати внимание (см 2 сообщения выше). Кроме того, ты пока не описал, как новыми возможностями пользоваться :).
Кстати, можешь решить проблему с описанием тем, что к примеру, если послать команду
WC3ObjectMerge.exe ?
или
WC3ObjectMerge.exe /?
Чтобы выдавалась краткая справка.
Старый 08.02.2006, 16:50
NETRAT

offline
Опыт: 83,712
Активность:
Sergey краткая выдается =) когда параметров нехватает
вероятно, я все это перенесу на Win32, ибо с этими параметрами неудобно мудиться

написал, я всю описуху поправил

NETRAT добавил:
Это у меня была идея сделать безглючный MPQ архиватор с возможностью восстановления файллистов и всякими продвинутыми фичами типа переноса обьектов, инструмента для установки наработок и тому подобного, правда, вряд ли я дойду до этого...

Вроде бы теперь установка наработок и обьединение карт вообще не представляет никаких трудностей, единственное, пожалуй, что может помешать - это если придется учитывать дублирующиеся обьекты
Старый 08.02.2006, 17:17
FeuerFrei

offline
Опыт: 440
Активность:
NETRAT я взялся активно потестить тулзу и кое-что нашел :
если юзать во время работы этих прог то с большей вероятностью тулза вылетает
*(Photoshop,WinAmp( :git: ),WE,KAV....) да....
скорее всего причины не в тулзе а в конфликтах на уровне системных сервисов. :lamo:
Еще тулза от случая к случаю выдает это:
******************************** Execution *************************************
WARNING: UNRECOGNIZED TYPE 73316175 IN OFFSET CD3
Record negf (HEX 6667656E) Offset CCB.
Press any key to continue...
WARNING: UNRECOGNIZED TYPE 61750000 IN OFFSET CFD
Record А? (HEX 3F80) Offset CF5.
Press any key to continue...
WARNING: UNRECOGNIZED TYPE 20000 IN OFFSET D05
Record 1s (HEX 7331) Offset CFD.
Press any key to continue...
WARNING: UNRECOGNIZED TYPE 36D61 IN OFFSET D11
Record un (HEX 6E750000) Offset D09.
Press any key to continue...
WARNING: UNRECOGNIZED TYPE 65646952 IN OFFSET D1D
Record gle (HEX 20656C67) Offset D15.
Press any key to continue...
Хотя работает на одном итом же файле...
Может у меня с головой таво? а
Старый 08.02.2006, 17:24
NETRAT

offline
Опыт: 83,712
Активность:
FeuerFrei it's impossible убедись что у тебя с виндой все в порядке. Вечером гляну код, скажу что это может быть, конфликты на уровне системы практически исключены, Winamp и WE я и сам использую

Тул выдает эту ботву когда на вход подаются не обьектные файлы - естественно он не может их прочитать, если это все же обьектный файл и его читает редактор, то выложи его здесь глянуть на это чудо
Цитата:
C:\WC3ObjectMerge.exe "C:\Warcraft3\Objects1.w3o" r "C:\Warcraft3\ReplacementList.txt" "C:\Warcraft3\Objects2.w3o" "C:\Warcraft3\Trigger.wct" "C:\Warcraft3\Trigger.wtg"
так вот "C:\Warcraft3\Objects1.w3o" и "C:\Warcraft3\Objects2.w3o" - это строго обьектные файлы
Старый 08.02.2006, 17:30
FeuerFrei

offline
Опыт: 440
Активность:
NETRAT я давал тулзе СТРОГО объектные файлы и что меня поразило она сначала схавает файло усе ОК а потом опять даешь ей тоже сомое файло что и первый раз и на те кучу errors.
Насчет вылета хз посмотри код...

FeuerFrei добавил:
ПОНЯЛ!!! там KasperskyAntiVirus воду мутит что-то ему не так...=(
Старый 08.02.2006, 17:47
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
Это у меня была идея сделать безглючный MPQ архиватор с возможностью восстановления файллистов и всякими продвинутыми фичами типа переноса обьектов

NETRAT, скажи, не было ли у тебя приятной мечты/сна/задумки (00) составить прогу, которая корректно бы вносила в *slk БД в варе обьекты - дабы в эдиторе они считались родными? Таким образом можно нехилейший мод забабахать... Имхо, в слк таблицах лежит всё от юнитов и предметов, спеллов до дудадов. В мпк добавить и модель, (с озвучкой, типа SNDxFDSH правда не представляю, как работать, ну да это не беда) и текстуры, и даже абилы написать в blizzard.j не составляет огромного труда - но вот чтобы создать ПРИНЦИПИАЛЬНО новый спелл, со своим ид приказа (если неправильно пишу о приказе - сорри, забыл как там по-настоящему. Например - Immolationon (-off)), со своими новыми параметрами по умолчанию и так, чтобы родными - это хоть и геморно копаться с таблицами, однако оно того стоит.
Ну, как, не было таких мыслей? Если были и ты готов попробовать, я постараюсь оказать тебе всяческую помощь при создании.
Старый 08.02.2006, 17:47
WildCat
General Mapmaker
offline
Опыт: 10,232
Активность:
Что-то мне подсказывает, что для написания с нуля новых заклов придётся перешерстить ещё и dll'ки варика :/
Старый 08.02.2006, 18:05
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Т_Т, да, конечно это убивает. Первые два поля в слк - allies и code. Allies - это походу описание, лежит в текстовиках рядышком (Уровень 1 - герой...). А вот код... Было бы чудом, если его как-то можно было сослать на blizzard.j в противном случае можно убиться танком или выпить йаду на ваш выбор...
Старый 08.02.2006, 18:11
NETRAT

offline
Опыт: 83,712
Активность:
FeuerFrei что-то не понял? два раза прогоняешь файлы что ли? так они после первого раза изменяются

FellGuard это не поможет - все что можно изменить можно изменить via World Edit и EXCEL, затем запихнуть в архив мпку и все будет работать. Все что прошито в .dll изменить почти нереально. Уж поверь, пытался. В-общем это гиблое дело, единственное что из этого можно выжать - это новый метод защиты для модов (для карт не прокатит) методом обфускации идентификаторов полей
Старый 08.02.2006, 19:14
FeuerFrei

offline
Опыт: 440
Активность:
NETRAT нет я даю ему ОБСАЛЮТНО ОДИНАКОВЫЕ файлы
сейчас у меня вообще никакие файлы не обрабатываются :mad:
дурдом...
На комп не пинай на винду тоже тестил в клубе, у себя , у друга...
одна байда НЕ ПАШЕТ так как надо.
Или лыжы не едут, или я еб*ый...

FeuerFrei добавил:
Вот посмотри...
Старый 08.02.2006, 21:47
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
НЕТРАТ, повесь ньюз, закачай файл на сайт (только первый пост в архив добавь)
Старый 08.02.2006, 22:32
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:53.