• Уважаемый посетитель!!!
    Если Вы уже являетесь зарегистрированным участником проекта "миХей.ру - дискусcионный клуб",
    пожалуйста, восстановите свой пароль самостоятельно, либо свяжитесь с администратором через Телеграм.

Изменение функциональности предмета

  • Автор темы Автор темы Gilder
  • Дата начала Дата начала

Gilder

Участник
1)Еще вот какой возник вопрос.Склонировал я книжный шкаф и полез в Object Functions. Plugin View выдал мне нечто.... очень (ну просто до боли) напоминающее скрипт IIFPencil. С IIFPencil было относительно ясно, начало - нулевая строка и два параметра в конце каждой строки - номера переходов |True|False| а здесь как? Имена функций ипримитивов выглядят вполне человеолюбиво (по ним иногда хотя бы примерно можно догадаться об их назначении) но вот надпись null ->null (вызывающа в памяти воспоминания о C++) мне не ясна совершенно впрчем как и назначение ( а / и точнее способ использования) двух окошечек Settings/ То есть интуитивно понятно, что в эти окошечки забиваются параметры функций... но все равно общее ошушение непоняток остается.
2)Нет для обучнеия на свете ничего лучше чем конкретика. Воьмем к примеру такую задачу - сделать шкаф при чтении книг из которого увеличивался бы не "Кухонный" навык а "Логический" и чтобы на время чтения к примеру все характеристики (Голод, потребность в общении.... и т.д. ) увеличивались на мизерном уровне (т.е. фактически - просто перестали уменьшаться). Если кто нибудь может расписать по пунктам как такое можно сделать буде прост замечательно.
3)Кстати вот еще вопрос народился, как известно сим существо капризное и чего нибудь у него почти всегда падает, (он устает, хочет есть и т.д.) а можно ли вытащить коэффицент уменьшения этих параметров и если да, то как?
 
Gilder, Симс2-хакинг очень похож не Симс1. Внутреннее устройство объектов похоже, поэтому и Iff Pencil тебе все это напоминает (мне тоже напоминает :D). Между симс1-и симс2-хакингом, конечно, есть и немалая разница, но лично я до нее еще не добралась.
В BHAV'ах по-прежнему есть True и False, да и все остальное тоже есть, но ведь OBJf (т.е. Object Functions) - это тебе не BHAV. :) null стоит там, где в Iff Pencil'е были просто нули, а там, где должны быть прописаны номера BHAV'ов, они и прописаны. ;) Номер - это Instance, хотя, думается, ты и так это уже знаешь. А BHAV - это Behavior functions (скорее всего тем более знаешь :D).

ЗЫ: А еще объявляется конкурс на лучшее название этой темы
"Изменение функциональности предмета" - по-моему, самое разумное. Ну или что-то в этом роде.
 
Вот кстати к вопросу о смене функций попыталс создать зеркальце чтоб "Обшение" у смиа росло а 3 других мотива падали результат здесь (ссылка дважды правлена, теперь там zip-файл) Сразу скажу результат неудачный. предмнт сделан клонированием без перекраски. Пока чистая функциональность ни анимации ни звука но и она не рпботает. Подскажите пожалуйста чего там не так?
Переправил ссылку (правда и предыдущая у меня работала)
P.S.Олечка , Дюкаша Спасибо за отклик!
Если все же не получится скачать, что ж придется мне наверное завести себе еще ящичек где-нибудь в дргом месте поскольку пологаю, что это не последняя моя ссылка (хотя странно, раньше никаких проблем со скачиванием с front-а не было)
 
Gilder, качаться-то теперь качается, но не открывается. Вопрос на засыпку: а ты раньше выкладывал туда rar'ы? А то у нас уже однажды были проблемы такого рода с одним товарищем, вот, почитай, что тогда об этом Shy сказал (см. вторую часть поста). Может, его бы лучше в зип? ;)
 
Gilder, в функции "Interaction - Social Up" в четвертой строчке переход по false на нулевую. Зачем? Чтобы Social вырос до 1000? И как должна функциональность работать?
 
Как у нас с анимацией?

1)Так, кажется с зеркалом я разобрался.
Правильно ли мое предроложение, что мотивы (motives) сима лежат в диапазоне от 0 до 100? Если так то все было очень просто в моем BHAV-е (Behavior Function) увеличение\уменьшение мотивов происходило до тех пор пока мотив Social был < 1000 !!! следовательно никогда не прекращался, а поскольку я не удосужился подключить анимацию то на то чтобы опустить\ поднять мотивы сима уходила от силы секунда - две.
2)Подскажите пожалуйста как добавить в BHAV проигрывание анимации?
3)Shy
Gilder, в функции "Interaction - Social Up" в четвертой строчке переход по false на нулевую. Зачем? Чтобы Social вырос до 1000? И как должна функциональность работать?
Функциональность должна увеличивать Social motive и уменьшать при этом Hygiene motive Enviroment motive Bladder motive.
При этом весь этот процесс должен происходить плавно а то прще было бы использовать my motives: Social Assign To.....
но чтоб все действительно плавно выходило (как мне кажется) достаточно \ необходимо добавить проигрывание анимации.
 
Может кто нибудь помнит как назывался примитив (или функция, уже не помню) отвечавшая за вставку фрагмента анимации в The Sims (№1)? Подскажите пожалуйста. А то ставить себе игрушку (порядка 3 Gb) только для того чтоб IIFPencil указывал в BHAV-ах имена функций, это как то перебор...
Заранее благодарен.
 
Gilder, "Animate Sim". А примитивы - они тоже функции.
Кстати, ставить что-то еще совершенно необязательно, подобного рода простую инфу вполне можно найти и где-нибудь на HR, например. ;) Более того, достаточно просто порыться SimPE внутри разных скриптов Симс 2 и ты на него непременно наткнешься. Смысл вроде бы очевиден из названия.
Другой разговор, что я не знаю, каковы отличия у анимации в Симс 1 и Симс 2. Здесь я наткнулась еще на нечто под названием "Animate Overlay". Что это - не знаю. Кроме того, в Симс 1 анимация обычно замыкалась по ветви True сама на себя, здесь же я почти такого не вижу. Разбираться еще не пыталась. "Важные государственные дела держат", черт бы их взял. :mad:
Имена самих анимационных файлов должны быть в STR'ах, как и раньше.

Насчет самого по себе плавного изменения потребностей. Для начала ты просто делаешь это не так. Во всяком случае не так, как это сделано в игре. Там используется не прибавление-убавление неких небольших количеств простым сложением-вычитанием, а функции типа:
Set Motive Change: my motives Energy (0x5) += Const 0x1001:2 per hour, stop at Const 0x2000:0
Поскольку ты англочитающий, то смысл должен понять. ;) Const - это константы, находящиеся в BCON'ах. Насколько я понимаю, которые начинаются на 1 - лежат в самих файлах предметов, а которые на 2 - в полуглобалах. Здесь вообще очень много полуглобалов. Эта строка взята из полуглобального файла кроватей, соответственно Const 0x1001:2 должна быть у каждой кровати своя и лежать в файле этой самой кровати (понятное дело - у разных кроватей разное "качество сна", т.е. скорость восстановления энергии), а Const 0x2000:0 - общая для всех кроватей в полуглобале. Вроде бы так, по идее... Ну, "в файле" - это условное понятие в данном случае. Конечно, файл у них общий, objects.package. Номера групп разные.

Так, мне, с сожалению, надо на работу убегать.
Gilder, скачай disaSim2 здесь. Как с ней обращаться - надеюсь, разберешься. Не бог весть, как удобно, но зато много инфы дает. ;) И в дальнейшем следи за обновлениями, наш Магистр продолжает над ней работать. :)
 
Последнее редактирование:
Gilder, у тебя никакой плавности в таком скрипте и быть не могло, т.к. увеличение мотива происходит за один игровой такт. Лучше воспользуйся советом Дюкаши и сделай все через Set Motive Change. А потом уж займись анимацией.

Кстати, анимация в TS-1 замыкалась на себя не по True, а по False. Сейчас сделано немного по-другому. Замыканию на себя по False соответствует строчка "No Event Tree" в расшифровке примитива. Если же указано какое-то конкретное Event Tree, то скрипт с этим номером будет выполняться в течение проигрывания анимации. В качестве параметра этому скрипту передается номер одного из event'ов, который задан в файле с анимацией. В принципе, подобная схема была и в TS-1, только раньше event'ы обрабатывались в том же скрипте, а не в другом, как сейчас. Ну а чем отличаются "Animate Object" и "Animate Overlay" я не знаю.
 
М-да, надо мне вспоминать, как устроена анимация... :D Сказать честно, я с ней имела дело один раз в жизни: в Симс-Колледже. Но постараюсь и здесь до нее рано или поздно добраться.
 
Второй раз в первый класс

1)Спасибо Дюкаша, конечно же использовать одну функцию вместо полудесятка более простых гораздо удобнее, но... я кажется совсем потерял форму (придется почти всему заново учиться), поэтому вопрос - глупее не придумаешь....
И так, что надо сделать чтобы получить Set Motive Change: my motives Energy (0x5) += Const 0x1001:2 per hour, stop at Const 0x2000:0?
Нажав стрелко-кнопку OpCode и выбрав на появившеся через десяток секунд вкладке Primitives строчку Set Motive Change (0x1D) (и нажав кнопку Use) можно получить строчку BHAV-а Set Motive Change (0x001D). А дальше как? На изменение HEX-ов (Operands) строчка не реагирует (разумеется пробывал далеко невсе варианты, но....). Или я тут вообще чего то напутал?
2)Спасибо Shy. Однако если честно я почти ничего про анимацию не понял, а еще больше забыл... Хотелось бы более подробно об этом. кроме того здорово было бы добавить конкретики, например при использовании предмета можно заставить сима подойти к нему (как я понимаю примитив Go To Relative Position (0x1B) нужен именно для таких случаев) а вот как можно проигрыват анимацию чтобы сим не стоял столбом перед зеркалом а делал бы чего-то. Подскажите пожалуйста (лучше пошагово) как такого добиться? (Каюсь общие суждения мне пока не очень то по зубам).
3)По поводу disaSim2 Запустив ее из Total Comander 6.03 (с командной строкой disaSim2.exe GildersSocialRelictMirrorVer01.package output.txt) получил в окне консоли следующую странную надпись: 700 of 3 BHAV processed при этом первое число в этой строчке молниеносно росло(я отключил программу только когда это число перевалило за полтора миллиона). Что я сделал не так?
Заранее благодарн (если ответы на мои вопросы уже где то есть пожалуйста бейте меня ссылками)
 
Gilder,
1) Мне, к сожалению, сейчас особо некогда проверять самой, но советую посмотреть внимательно на устройство подобной строки в уже имеющихся файлах, поэкспериментировать с ней (ну понятное дело, что не с оригинальным файлом нужно баловаться, а извлечь это дело и вставить куда-нибудь) и сделать выводы. Та строка, что я тебе приводила, находится в скрипте "Sleep - Set Motives" из objects.package. Он имеет group 0x7F4437F2 и instance 00002018. Впрочем, можешь и со своей изначально баловаться, только мне кажется, что с уже готовой это проще. А изменений ее ты в SimPE особо и не увидишь. Для этого и нужна disaSims2. ;)
2) Вот для того, чтобы сим что-то делал и запускают функцию Animate Sim. :D Она должна ссылаться на STR (Text Lists) с соответствующим номером, где прописаны названия самих файлов анимации. Где лежат эти файлы - не знаю, не искала. Раньше, кажется, было так: анимация по false замыкалась сама на себя и до тех пор, пока выполнение данного фрагмента анимации не заканчивалось, она уходила по fals'овой ветви. Посему по этой же ветви вместо перехода на себя (точнее, перед ним) иногда ставились переходы на некие функции, которые должны были выполняться одновременно с анимацией. Когда анимация заканчивалась - она уходила по ветви True к продолжению скрипта. Что касается забытого, то про анимацию в Симс 1 и в частности про events, можно почитать все там же - в "Некоторой документации по Iff Pencil 2 и скриптам". Ты ее что, удалил? Ай-ай-ай, как нехорошо. Но она по-прежнему доступна для скачивания все там же. Опять же экспериментируй и смотри через disaSim2. ;) Даже Shy не может тебе сказать все точно, видишь ведь, что тайну загадочного Animate Overlay пока еще никто не разгадал. :D
3) Видимо, ты попытался использовать версию disaSim2 из начала темы с клонированным объектом, т.е. имеющим group 0xFFFFFFFF. Она на это не рассчитана. Нужно было качать последнюю версию, выложенную Shy ближе к концу темы, она спокойно работает с таким номером группы, не зацикливается. Кстати, если ты сам еще этого не заметил, то в SimPE есть аналог прежнего Rewrite, называется Sort. Рекомендую использовать, прежде чем работать со скриптом, в частности, смотреть его через disaSim2.
 
HEX не редактируется

1)Дюкаша я пошел по твоим следам и отловил
"Sleep - Set Motives" из objects.package
Как я понимаю
Set Motive Change: my motives Energy (0x5) += Const 0x1001:2 per hour, stop at Const 0x2000: - это вторая строчка скрипта
Но у меня эта строчка по прежнему (а точнее так же как и свежесозданый Set Motives Change) Set Motive Change (0x001D).
выделил этот BHAV отдельно и запаковал в новый package.
после этого пропустил пакет через disaSim2 (спасибо Дюкаша за подсказку действительно в конце темы был обновленный и не циклящийся вариант, спасибо Shy как я понимаю создание данныой утилиты - ваша заслуга) получил следующее
disaSim2 написал(а):
###
# Group = 7F4437F2, Instance = 2018
# Title = Sleep - Set Motives
#
# Format = 8007, Params = 0, Locals = 0
# Tree type = 0, Header flag = BA, Tree version = 5 (5)

0: Set Motive Change: clear all; true: 3, false: error
1: Set Motive Change: my motives Energy (0x5) += Const 0x1001:2 per hour, stop at Const 0x2000:0; true: 2, false: error
2: Set Motive Change: my motives Comfort (0x6) += Const 0x1001:0 per hour, stop at Const 0x1001:1; true: true, false: error
3: Motives - Set Home Asleep; true: 1, false: error
После чего опять открыл package и заменил все hex-ы на FF (помнится в IIFPencil-e после таких зверств функция менялась изрядно) а ей хот бы хны... сохранил изменения и опять пропустил через disaSim2 результат меня убил на месте поскольку ни одна строчка справкиdisaSim не изменилась. Что это может означать?
2)Впрочем возможно я кругом ошибаюсь. Я исхожу из моего небольшого опыта работы с IFFPensil-ом т.е. в окошке Op Code выбирается функция, котора далее настраивается изменение HEX-ов. С перым у меня все в порядке (при нажатии стрелко-кнопки появляется обширный список доступных функций), а вот на изменение HEX-ов строчка никак не реагирует (и кнопко-стрелка заблокирована) единственным зарегистрированным исключением является примитив Expression, тут даже по нажатию кноопочки довольно удобная формачка-редактор вылезает. Хотелось бы узнать это нормальная ситуация, или только у меня такие неприятности с редактированием Hex. И с чем это связано? (например с пиратской копией игры, которую я использую??? ) и наконец как такое лечить может кто уже сталкивался с такими неприятностями?
Заранее благодарен.
 
Gilder, это за что ты ее таким зверствам подверг? :D
В SimPE функция не будет меняться - это я тебе уже говорила. Ну не совершенен этот SimPE и не рассчитан на нужды хакеров. Для этого наш Магистр и пишет disaSim2. ;) А вот чтобы в disaSim2 функция не менялась - это ты, друг, что-то делаешь не то. Может, SimPE тебе изменения не сохранил? Он это любит. Чтобы это от пиратки зависело - как-то не верится. Пиратский objects.package создает проблемы с текстовыми ресурсами, но BHAV'ов это касаться никак не должно. Я, правда, сама сейчас мучаю скрипт, выгрызенный из лицензии, т.е. из ее копии, но вполне уверена, что с пиратским будет все то же самое.
После изменения всех Operands на FF функция приобретает вид довольно жалкий:
И усе. :D
Но я не сторонник таких крайних мер. Зачем менять все на FF? Пойдем путем менее глобальных экспериментов.
У нас имеются следующие коды потребностей симов:
--------------
Энергия (Energy) - 05
Комфорт (Comfort) - 06
Голод (Hunger) - 07
Гигиена (Hygienа) - 08
Мочевой пузырь (Bladder) - 09
Социальность (Social) - 0E
Веселье (Fun) - 0F
-------------
Взято из тутора, который мы тут мучили с Олечкой. ;) Хотя, кстати, в disaSim2 их и так видно.
Если внимательно посмотреть на Operands в строках, касающихся изменения энергии и изменения комфорта (а где какая - видно из расшифровки disaSims2), можно заметить, что значения 05 и 06 соответственно находятся в третьем слева окошке Operands. В качестве проверки заменим в одной из строк 06 на 09. В SimPE изменений не видно. Пропустим результат через disaSim2. Функция теперь послушно говорит:
Set Motive Change: my motives Bladder (0x9) += Const 0x1001:2 per hour, stop at Const 0x2000:0;
Стало быть, третье окошко в Operands в данном случае отвечает за выбор того самого motive, которое мы change. Ну а путем других подобных экспериментов можно разобраться и где прописана какая константа, и где само по себе действие (плюс, минус и т.д.), хотя это все, небось, осталось, как в Симс 1, можно оттуда вспомнить. Но я все равно никогда не могла это запомнить наизусть. :D
 
Попытка 2

1)Странно предыдущий пост не появился...
Попоробовал прерделать зеркальце ипрользуя Set Motive Change
вот результат
Опять не вышло, и наверняка опять мешает какая то мелочь элимнтарная. Но я до нее никак не додумаюсь. Подскажите что не так?
Симптомы: сим подходит к зеркалу... и все. при повторном испроьзовании иконка исчеает недолетев до края экрана.
2)Исходя из вышеуказанного мне похоже нужны пояснения о том как вообще действует Set Motive Change.
3)Сразу замечу сто функциональность сузилась до простого поднятия Social motive.
 
Gilder, как вообще он действует, я, к сожалению, точно не знаю, а Магистр появится не раньше понедельника, да и не факт, что у него будет время сюда зайти. Я с твоим предметом похимичила, ощутимого результата пока не добилась, но два замечания на будущее все же сделаю.
Во-первых, обязательно используй при отладке объектов debug mode. Хакер без debug'а - это не хакер. ;) О том, как его включить, написано в прикрепленной теме раздела "Информация по игре...", той, которая про код для включения режима разработчика. Думаю, найдешь. Файлы с ошибками генерятся в папке Logs - в Моих документах\EA Games\The Sims2. Соответственно, увидишь, что ошибка у тебя там вылетает самая любимая: :D Undefined Transition в строке 1 твоего скрипта.
Во-вторых, лучше запоминай уроки Магистра, ;) и в частности не замыкай что попало на Error по ветви False. Shy тебе уже говорил в прошлом году, что на Error нельзя замыкать функции, которые могут пойти по False, и в частности любые Go to relative position. Ты тогда поставил Error в подобной же функции для приближения сима к твоему "банкомату". У Shy перед ним "села собачка" :D и он даже сразу не понял, откуда вылетела ошибка. А все потому, что Error не на месте стоит. Здесь собачек никаких нет, :D и я не знаю, почему функция идет по fals'овой ветви, но почему-то идет. На данный момент я ее уже два раза изменила: сначала на Go to relative position c другими параметрами, потом - на семиглобальную функцию Route to mirror, которая используется в других действиях с зеркалом. Но она почему-то упорно все равно идет на False. Я там Error, конечно, убрала, поставила на данный момент Dialog - вот этот Dialog и вылетает все время. Но главное, что я этот Dialog направила все равно опять же на Set Motive Change, но все равно социалка не растет. Если будет время в ближайшие дни, буду химичить дальше.
А пока что можешь считать, что я тебе "подкинула информацию для размышлений", как любит говорить наш Магистр. :D
 
Как правильно?

Спасибо Дюкаша я честно забивал debug-овый код но оказалось что у меня в файле userStartup.cheat была строчка boolProp testingCheatsEnabled false (возможно она и мешала), вобщем так или иначе а debuger я запустил только раза с десятого... а строчки на Error замыкал совершенно сознательно как раз чтобы отладчик в случае чего сработал...
Сейчас бъюсь над 2-мя вопросами, ежели кто знает ответы пожалуйста напишите.
1)Как правильно использовать Go To Relative Position (и при каких условиях он впадает в false)?
2)Как правильно использовать Set Motive Change (и впринципе функции прикрепленные к игровому времени, а не напрямую к такту игры)?
 
Gilder, ну зачем же так испытывать работу отладчика, да еще невключенного, да еще в такой функции, как go to relative position? Это нелепо. Очевидно, что такая функция может пойти на false в совершенно нормальной игровой ситуации, тут и проверять нечего. Ее fals'овую ветвь можно замкнуть на false, чтобы она в случае невозможности подойти к предмету просто остановилась, а вообще, если хочешь в процессе отладки точно понять, как идет в разных случаях твоя функция - по true или по false, удобнее всего использовать dialogs с разными текстами. Я еще в свое время занималась таким извращенством: делала go to relative position с четко заданной позицией типа in front of, facing, а по fals'овой ветви пускала ее на другую go to relative position с позицией somewhere near, facing. Вообще, функция это достаточно простая, и вроде бы гадать тут должно быть особо не о чем: функция идет на false, когда что-то не дает симу занять требуемую позицию, например, там находится какой-то предмет или другой сим, или просто что-то мешает ему пройти к нужной клетке. Но ситуация с конкретно твоим объектом несколько непонятная, потому что я так и не разобралась, что же симу там мешало. Я бы тебе предложила вместо того, чтобы ждать у моря погоды, которой тут особо и не от кого ждать, кроме Shy, порыться в родных функциях зеркала, поэкспериментировать, меняя в них что-то, сравнить с твоей функцией, чтобы решить для начала вопрос по крайней мере с Go to relative position.
 
Назад
Сверху