Если есть возможность сделать всё прямо в nif файле, то это, конечно, намного лучше. Спору нет. Но в защиту скриптовых часов тоже скажу слово: все названные @perture недостатки - не правда. Объектов действительно будет несколько, но скрипт только один, не сложный и работающий при любом размещение часов в пространстве.
Мы пытались вежливо и ненавязчиво направить тебя в нужном направлении. Потому что скрипт в текущем виде - одна большая ошибка. Если разберешься с массивами или FormList, сможешь сократить его в 20 раз. Нам не стоило об этом говорить?
Выложил бы хоть мод... А то чем мы поможем? Можешь сначала попробовать упрощенный вариант. Просто фигаришь квест с любым названием, не меняешь на нем никакие настройки. Потом в этом квесте просто хренячишь какой-то диалог с одним вопросом и одним ответом. Ответ - без каких-либо Conditions. И всё. Этот диалог должен появиться у всех NPC после сохранения-загрузки игры.
Создать в квесте пустой алиас с пометкой Optional, повесить на алиас пакет. А потом при помощи скрипта совать туда NPC: MyAlias.ForceRefTo(akSpeaker) и убирать из него NPC: MyAlias.Clear()
Пакеты на алиасах приоритетнее пакетов на самом NPC. А если NPC сразу в нескольких алиасах с пакетами, то приоритет пакетов будет зависеть от приорититов квестов.
slastik, на всякий случай, напомню, что скорость течения игрового времени зависит от глобальной переменной. В 20 раз быстрее - это значение по-умолчанию, но многие его меняют.
Кроме ивента OnInit(), на ObjectReference есть еще много других ивентов. Например, OnLoad(), который выполняется каждый раз, когда загружается моделька объекта и становится готовой для анимации.
В том скриптике, что я выкладывал, стрелка движется не плавно. Она каждые секунд 10 синхронизируется со временем и прыгает на 1...2 градуса. Но можно сделать и иначе: одну синхронизацию со временем в момент загрузки модели, а потом запуск анимации поворота с нужной скоростью (анимации не из NIF, а при помощи функции TranslateTo). Но в этом случае, нужно еще получать значение глобальной переменной скорости времени и использовать для расчета скорости поворота стрелки.
slastik, я же выложил работающий проверенный скрипт. Я его цеплял к сундуку и сундук всегда поворачивался как нужно. Спать рядом с ним не пробовал, но пропусков времени делал много и большие. Если при каких-то условиях скрипт работает не правильно, я уверен, что это можно легко исправить.
Могу показать еще один вариант, который чуть иначе работает...
Так говорю же: попробуй мой скриптик. Там нету такой проблемы. Сразу после сна/пропуска они синхронизируются со временем.
Добавлено (27 Февраля 2015, 16:23) --------------------------------------------- Если игрок спит в то время, когда должно произойти обновление, то обновление все-равно произойдет, но когда он проснется.
Если в момент, когда должна произойти синхронизация, модель не загружена, всё сразу прерывается. Не происходит синхронизация и не происходит регистрация для следующего обновления. То есть, часы не работают, пока игрок в другой локации. Вообще ничего не происходит. А возобновится ход только когда снова произойдет загрузка модели.
Именно целиком его и стоило бы взять (для начала)... Ничего туда дописывать не нужно. Только развернуть стрелку так, чтоб при угле Z = 0 она показывала на "12".
В момент загрузки модели, стрелка сразу синхронизируется со временем. А потом синхронизируется каждые 0.05 игрового часа и так аж до выгрузки модели. Если игрок нажмет "T" и прождет какое-то время, стрелка синхронизируется сразу после конца ожидания. Со сном, скорее всего, так же.
Да всё там нормально... Стрелка должна вращаться всегда именно по оси Z. Но эту ось Z можно развернуть как угодно. Часы могут и на полу лежать (осью Z вверх), и на стене висеть (осью Z в сторону игрока перпендикулярно стене) и как угодно еще... Ладно, сам смотри.
А причем тут ты... Это сообщение было адресовано абсолютно абстрактному посетителю форума, который предпочтет не использовать других как гугл. Думаешь, lolososo просто так знал этот скрипт, который тебе показал? Нет. Он открыл раздел "Actor Script" на creationkit.com, произвел по странице поиск по слову "Magic", потом открыл справку по функции HasMagicEffect. Он убедился, что это то, о чем ты спрашиваешь, и скопировал оттуда для тебя пример. Лично я не в теме, почему кто-то не мог сделать этого сам... Но это, опять же, об абстрактном форумчанине.
Проперти на скриптах можно менять в любой момент из любых других скриптов. Можно сделать, чтоб после диалога NPC запихивался в проперти любого другого скрипта. А если нужно на нем ивенты отслеживать, то нужно в алиас запихивать.
Для Heartfires точно не будет достаточно просто поменять глобальную переменную BYOHHPCost? Я посмотрел, что там всё на ней завязано: 1. Condition на диалоге проверят, есть ли у игрока BYOHHPCost золота. 2. Если есть, становится доступным ответ "Я беру. (<Global=BYOHHPCost> зол.)" - тут тоже ничего редактировать не нужно. 3. И в скрипте потом тоже снимается именно BYOHHPCost ед. золота: Game.GetPlayer().RemoveItem(Gold001, BYOHHPCost.GetValueInt())
Добавлено (01 Марта 2015, 15:09) --------------------------------------------- Попробуй временно отключить мод, над которым работаешь, и временно создать новый маленький модик, который меняет только BYOHHPCost. Я пока не вижу ничего, что помешало бы этому работать... Но если не работает, разберемся. У меня просто подходящего сэйва нету, чтоб проверить...
А чего бы ей не продолжать валяться после команды "включить"?
Добавлено (01 Марта 2015, 20:19) --------------------------------------------- Если объект создается алиасом (Create Reference To Object), то можно поставить галочку "Initially Disabled", если нужно скрыть его до какой-то стадии. Если объект создается в какой-то Cell, то у него в настройках тоже есть такая галочка. А потом уже включать.
lolososo, есть еще чуть другой вариант. Перезапускаемый квест с самозаполняющимися алиасами.
Создаешь многоразовый квест. В нем алиас с галочкой "Optional" и указываешь, что нужно найти в Cell ближайшего NPC. Можно еще дополнительные условия вбить типа максимального уровня, расы итп. На этот алиас добавляешь пакеты какие нужно. А потом дублируешь алиас сколько нужно раз.
Каждый раз, когда будет запускаться этот квест, все алиасы будут заполняться ближайшими NPC (без повторений). И они будут начинать следовать за игроком.
А запуск и остановку квеста можно заклинанием сделать.
А в чем конкретно сложность? Можно считать количество поленьев с помощью переменной. В ивенте OnItemAdded к переменной добавляется положенное количество предметов, а в ивенте OnItemRemoved - отнимается. И из каждого ивента нужно вызвать функцию, которая получит текущее количество поленьев и включит нужный объект. Если переменная не нравится, можно проверять количество поленьев функцией GetItemCount.