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

Изготовление симс объектов на конкретном примере (с использованием IffPencil)

  • Автор темы Автор темы Gilder
  • Дата начала Дата начала
Gilder
2) Я посмотрел код твоего предмета, в игре его не видел. Общая ошибка: многие примитивы у тебя после неудачного выполнения ведут на Error. Из тех, что я видел, это Go To Relative Position, Animate Sim, Manage Inventory. Если, к примеру, сим не может по какой-то причине подойти к предмету, то генерируется ошибка и происходит reset предмета. Запусти игру с ключом "-debug_objects" и посмотри в каких местах возникают ошибки (после каждой ошибки в папку с игрой пишется файл ObjectError*.txt). Чтобы узнать, как правильно расставлять переходы, посмотри другие iff'ы. К примеру, Animate Sim вообще никогда не ведет на Error, а чаще всего замыкается на себя.
 
Глюк локализовался.

1)Спасибо Shy.
2)Ошибка происходит, в BHAV-е #4160 "Coins To Money Change".
В строчке №7 :
Manage Inventory ( 1.x Animate Object in 2.0 )
(Remove token at index stored in Temp 2 of count stored in Temp 0.) {flags = 0, 0, 0, 1} |8|Error|.
Но что конкретно там не так, я пока не понял. Подскажите пожалуйста.
 
Назвние

Уважаемые Модераторы,
Я уже писал, о том, что не плохо было бы сменить название этой темы (названной мной дак длинно, впопыхах и по неопытности). Думаю это стоит сделать. Назвать ее как нибудь вроде, "Разработка симс объектов на примерах", (ведь большая часть постовнаписаных здесь являются решениями каких-то вполне конкретных задач по изменению внешнего вида и начинки предметов. Впрочем, уверен, что у Вас гораздо больше опыта в определении информативного названия тем, посему если вышенаписанное название по каким-то критериям не подходит для данной темы,
буду Вам благодарен за любое другое информативное (по Вашему мнению) название.
С уважением, Gilder.
 
Gilder
Надо полагать, что нет нужного числа токенов, поэтому их и невозможно убрать. Насколько я помню, перед Remove вначале вызывают "Find token of type", чтобы убедится, что токены такого типа у сима есть.
 
Котировки меня доканают

1)Спасибо за отклик Shy.
2)Дело в том, что Find token oftype... впрлне себе есть.
Попробую описать алгоритм функционирования (как я его себе представляю):
Для обмена Монет на Деньги существуют BHAV-ы с номерами от №4140 по №4148 включительно (Ghange1,Change5 ... Change1000). Для большей конкретики будем рассматривать работу банкомата на примере BHAV-а №4143 (Change25). Итак, после (glob: )Standart entry вызывается функция (priv:)Count (с первым параметром 25), эта функция высчитывает сколько денег стоят монеты, она возвращает колличество денег, которое будет добавлено на счет сима после продажи (25-ти в данном случае) монет в Temporary Storage4. Далее, по окончании функции (priv: ) Count, продолжается выполнение Change25 В следующе строчке как раз и стоит
пресловутый Find token of type... он записывает номер токена (index?) в Temp2, колличество(count) в Temp1. Далее идет проверка Temporary Storage 1 >= Local Variable 0, а в Local Variable0 заранее записано 25.
Таким образом Если бы не было достаточного колличества токенов, то (priv: ) Coins To Money вообще не запустился бы.
Впрочем это, то как я себе представляю работу банкомата, а я представляю неправильно, хотябы потому, что банкомат -глючит. Создается впечатление, что Temp-ы по какой-то причине затираются. Подскажите пожалуйста, что, где, почему не так.
Заранее благодарен.
 
Последнее редактирование модератором:
Gilder
Не знаю, вроде бы ошибок в твоем файле нет... А может все-таки продублировать "Find token of type" перед "Remove token"? Еще можно вместо перехода |8|Error| поставить |8|8| и посмотреть, что будет.

Ошибка выдается "Unefined Transition", я правильно догадался?
 
Все та же проблема

1)Спасибо Shy. Действительно ты прав, ошибка Unefined Transition. А если зациклить строчку саму на себя буде ошибка Too many iterations. Честно говоря, я уже не знаю, что и делать с этим безобразием. Попробую преобразовать строчку вто так:
Manage Inventory ( 1.x Animate Object in 2.0 ) (Remove token at index with object GUID:99e81bec 0 of count 1.) {flags = 0, 0, 0, 0} - то есть без указания индекса, пусть ищет по GUID-у.
Очень странный эффект если, как ты и предлогал поставить перед Remove token... строчку Find token... тогда все проходит прекрасно, вот только монеты из инвентаря не удаляются.
Уточни пожалуйста строчка № 8 это что ? (просто я уже так надругался над скриптом, что у меня возможно сменилась нумерация).
С нетерпением жду рекомендаций.
Спасибо.
 
Gilder
Я предлагал поставить 8 в той строке, про которую ты писал в посте, чтобы при неуспешном remove переход шел на ту же строчку, что и при успешном.
 
Последнее редактирование модератором:
Gilder
Я для тестирования использую Sims 1.0 (спасибо Шогалу за отличную идею). Он вполне уживается на одном диске с Makin' Magic. А вообще-то это очень интересный вопрос: что можно выкинуть из игры, чтобы она продолжала нормально работать? Я с этим когда-то разбирался, "изувечив" игру до такого состояния, что она могла только запускаться.
 
Any Help required...

Shy , если я правильно понял твое предложение,
Еще можно вместо перехода |8|Error| поставить |8|8| и посмотреть, что будет.
(ты как я понял предложил в BHAV-e #4160 Coins To Money модифицировать седьмую строчку). Если ее написать вот так:
Manage Inventory ( 1.x Animate Object in 2.0 ) (Remove token at index stored in Temp 2 of count stored in Temp 0.) {flags = 0, 0, 0, 1}|8|8|
то вроде бы действие сима должно завершаться, но деньги со счета будут сняты, а монет он не получит. Сам я не тестировал такой вариант, но по логике вещей развитие событий должно быть именно таким.
До жути обидно, что с этим банкоматом творится все это безобразие. Пожалуйста, подскажите, что делать (или хотя бы где можно информации по этому поводу найти.)
 
Gilder
То, что в теории так должно произойти, я согласен. Но хотелось бы на практике это проверить. Вообще-то во всех (немногочисленных) примерах использования Remove token, которые я видел, оба перехода (после успеха и после неудачи) ведут на одну и ту же строку. Думаю, это не случайно. Ну и еще бы я посоветовал заменить "index stored in Temp" на GUID, если ты это еще не сделал.
 
Gilder, брось-ка мне на мейл самую последнюю версию объекта (где переход уже исправлен)
 
Спасибо

1) Спасибо Shy , неприменно проверю все напрактике, что же касается замены stored in Temp на указание GUID - а, то помнится это давало какой-то неудачный результат (мне это в первую очерядь в голову пришло, поскольку я не очень понимаю, что это за index такой вообще???). Впрочем возможно я просто проставил в функцию неправильнык HEX-ы, если не сложно подскажи какие HEX-ы ныжны???
2)Спасибо Шогал, уже отправил письмо. Пожалуйста напиши о его получении.

Спасибо за помощь.
 
Gilder, я посмотрел твой скрипт - там видимо вместе с количеством маги-монет подсчитывается и количество волшебных палочек ;) На практике еще не экспериментировал, но сейчас пойду проверю...

У меня такое подозрение, что что-то напутано в файле script.txt - а именно номер Temporary Storage, который должен принимать index.
Сам индекс по идее обозначает позицию объекта в инвентаре.
 
Последнее редактирование модератором:
П о поводу index-ов

Спасибо Шогал .
1)А почему, тогда index (Temporary Storage3) при сбое равен 31, он что, зарезервированы под каждый токен??? (ведь в инвентаре сима на момент действия в инвентаре лежат только 100 монет и ничего больше).
2) Откуда вывод о волшебных палочках???
3) Как и что править в script.txt, если та действительно ошибка???
4) И еще по поводу script.txt (что? как? зачем?), помнится о нем уже заходила речь. Но возможно пора поговорить оне по подробнее (в частности в контексте проблемы с банкоматом).
Расскажите пожалуйста.
Заранее благодарен.
 
Gilder
1) Да вообще что-то странное с ним творится... Надо бы расставить контрольные точки в скрипте, и посмотреть как изменяются все Temporary Storage...
2) При попытке продать монеты иногда вместо монет продается волшебная палочка, а монеты остаются. Хотя по количеству я проверил, все-таки скрипт считает только монеты.
Кстати, эта строчка должна вторым концом выходить не на Error, а на сообщение что монет недостаточно
3) script.txt - это "человеческое" декодирование HEX'ов, оно влияет только на вид строчек в редакторе, а на саму игру не влияет.
 
Если продается то палочка, то монеты, то это значит, что или где-то Temporary Storage портится, или же этот индекс может указывать на разные токены (почему -- не понятно, но не внушает мне он доверия). Лучше, мне кажется, действовать через GUID. Для монет он равен 99E81BEC.
 
Правильный вид Menage Inventory

Я уже пытался избавиться от index-а (указывать GUID), но никак не удается привести функцию к нужному виду. (все время моячит at index?, хотя Temp3 из строчки исчезает).
Люди добрые, подскажите, как привести функцию к нужному виду (напишите ожалуйста все четыре параметра,(или 8 HEX-ов))!!!
Спасибо.
 
Gilder
(Лучше поздно, чем никогда.)

Попробуй так:

Manage Inventory (1793, 3, GUID-1, GUID-2),

тогда получится:

Manage Inventory (Remove token of type MAGIC with object GUID:... of count stored in Temp 0.) {flags = 0, 0, 0, 0}

Если ко второму параметру прибавить 4, т.е. написать вместо 3 число 7, то Temp 0 заменится на Temp 1.
 
Gilder
GUID-1 и GUID-2 - это два куска одного GUID'а ;)
Просто GUID имеет тип Longint, а параметр - Integer, и GUID приходится разбивать на два integer'а
 
Назад
Сверху