Главная > Урок Симс 2 / Уроки по SimPE / Создание объектов в Симс 2 / Создание модов в Симс 2 > Исправление самоссылающихся объектов

Исправление самоссылающихся объектов


24-11-2010, 01:32. Разместил: Dara_Savelly

Вы создали чудесный меш, он замечательно смотрится в игре, но по какой-то непонятной причине с новым GUID'ом, он не работает как надо. Если же оставить старый GUID и заменить своим объектом исходный максисовский, то все работает отлично. Возникает закономерный вопрос "какого черта"?
(Урок для тех, кто уже знаком с созданием объектов в Симс 2).

Скорее всего объект, который вы клонировали самоссылающийся, то есть где-то в его поведении что-то основано на GUID’е. Поэтому изменив GUID вы потеряли часть функций объекта. Техника исправления этого была выработана довольно давно, но она сводится к описанию работы с каждым таким объектом в отдельности. В данном туториале дается обобщенное объяснение проблемы и несколько способов борьбы с ней. Внимание, материал не для начинающих. Если вы не чувствуете себя уверенно правя файлы и изменяя значения в SimPe, то лучше отложить в сторону этот объект и поработать с другим, который не ссылается сам на себя. Таких, к счастью, большинство.

Суть проблемы (теория).

Суть в том, что ваш объект в каком-то месте обращается к себе в третьем лице. Скажем, у объекта GUID 0x11111111, и в каком-то месте у него прописана команда "посмотри на объект с guid’ом 0x11111111" или "убедись, что это объект с guid’ом 0x11111111", или что-то в этом роде. Это все прекрасно работает, это все равно, что я бы сказал "а потом Rirun вышла на улицу". Я называю себя по имени, но пока я ношу это имя, люди прекрасно понимают, что я хотела сказать этой фразой.

Но когда вы клонируете объект, вы присваиваете ему новый GUID. Предположим, что теперь он 0x22222222, но в коде по прежнему идет обращение к объекту с GUIDом 0x11111111. Это все равно, что я сказала бы " а потом Rirun вышла на улицу ", предварительно сменив имя на, скажем "Narcissus". Возникнет недопонимание, и именно из-за этого ваш объект начинает вести себя странно или не так, как вам хочется.

Решение проблемы (практика).

Вкратце суть такова: просматриваем все BHAV’ы, ищем упоминания старых GUID’ов, и заменяем их на новые. В зависимости от объекта это может быть относительно просто, а может быть и очень сложно.
Первое, что нужно сделать. Это составить таблицу, с информацией о том какие GUID’ы на что были заменены. Для приведенного выше примера табличка выглядит так:
0x11111111 > 0x22222222
Особенно важна эта таблица, если вы работаете с объектом с несколькими GUIDами, потому что вам нужно будет точно, что и на что менять.
Теперь вам нужно проверить каждый BHAV в пакадже. Если у вас нет ни одного BHAVа, то возможно их придется сначала импортировать, но для самоссылающихся объектов это нехарактерно. В любом случае в конце, я объясню, как это сделать.

В дереве ресурсов выберите Behaviour Function, внизу на вкладке List у вас появится список BHAVов. Выберите один из них и перейдите на вкладку Plugin View. Вы увидите в левой части экрана список команд в прямоугольных рамочках. Каждая из них, говорит вашему симу или объекту совершать определенное действие. Просмотрите внимательно эти команды, вам нужны те, в которых есть GUID. Чаще всего (но не всегда) они начинаются с "Set to Next" или "Test Object Type". Вот в качестве примера одна из таких команд для свадебной арки:

Исправление самоссылающихся объектов


Теперь надо найти в вашей таблице этот GUID (в данном случае надо было бы искать GUID 0x2C92CDB3). Если такового в таблице нет, то не трогаем его, скорее всего, идет обращение к другому объекту. Если же нашли этот GUID в списке старых GUIDов, выясните на какой вы его заменили. Предположим, что новый GUID 0x12345678. Разбейте его на пары цифр: 12, 34, 56, 78. А теперь запишите в обратном порядке: 78, 56, 34, 12. В правой части экрана у вас есть несколько небольших текстовых полей под названием Operands. Введите перевернутую последовательность в эти текстовые поля.

Исправление самоссылающихся объектов


Теперь если вы посмотрите на описание команды, то увидите, что GUID поменялся на нужный вам. Нажмите Commit File.

Проделайте это со всеми BHAVами. Как правило, если уж было одно обращение к собственному GUIDу, то будет и еще несколько. Для корректной работы вашего объекта необходимо найти все эти обращения.
Когда вы закончите, то сохраните ваш объект и протестируйте его в игре. Должно работать. Если нет, то значит исходный объект был сложнее, чем предполагалось и потребуется больше внимания и времени, что бы сделать его работоспособным.

Вот собственно и все. Дальнейшее написано для тех, кому не повезло выбрать объект несодержащий BHAVов.

Импорт полу-глобальных BHAVов.

Если ваш объект BHAVов не содержит, то вам возможно придется импортировать их из полу-глобальной библиотеки. В большинстве случаев самоссылающиеся объекты не особо используют полу-глобальные библиотеки, но всякое бывает.
Первое что нужно сделать, это понять, которую из библиотек использует ваш объект. Откройте файл GLOB и посмотрите на значение поля Name на закладке PluginView. Это и есть имя нужной нам библиотеки. Теперь открываем меню Tools и выбираем "Object Tools" > "Import Semi-globals". В появившемся окне в выпадающем списке находим имя нужной библиотеки, и нажимаем scan. В результате мы получим ее содержание.

Самый простой способ получить нужные файлы, это импортировать все BHAVы из библиотеки. При этом надо помнить, что после этого на ваш объект, скорее всего, не будут действовать глобальные хаки, и кроме того, пакадж станет довольно большим. Но это самый надежный способ заставить объект работать. Чтобы им воспользоваться, нажмите import и следуйте инструкциям, данным в основной части туториала.

Более изящный способ заключается в нахождении именно тех BHAVов, которые необходимо поменять, отслеживании всей цепочки их вызова (то есть нахождении тех BHAVов, которые обращаются к изменяемому вами, и тех, которые вызывают их, и т.д.) и импорте всех BHAVов из этой цепочки (как правило она не очень длинная). Это может быть очень трудоемко и дает меньше гарантии, что все заработает, но шансов, что на объект будут действовать хаки, и что он будет совместим с различными дополнениями, больше, да и по размерам пакадж будет меньше.
Вернуться назад