Форум » Записи участника [Dsion]

Результаты поиска
Dsion  Offline  Сообщение №451 | Тема: Вопросы по скриптам Papyrus написано: 25 февраля 2015, 16:51 | Отредактировано: Dsion - 25 февраля 2015, 16:52



Если есть возможность сделать всё прямо в nif файле, то это, конечно, намного лучше. Спору нет.
Но в защиту скриптовых часов тоже скажу слово: все названные @perture недостатки - не правда. Объектов действительно будет несколько, но скрипт только один, не сложный и работающий при любом размещение часов в пространстве.

Dsion  Offline  Сообщение №452 | Тема: Вопросы по скриптам Papyrus написано: 25 февраля 2015, 17:14



Мы пытались вежливо и ненавязчиво направить тебя в нужном направлении. Потому что скрипт в текущем виде - одна большая ошибка.
Если разберешься с массивами или FormList, сможешь сократить его в 20 раз. Нам не стоило об этом говорить?

Dsion  Offline  Сообщение №453 | Тема: Вопросы по Creation Kit. Старая тема написано: 25 февраля 2015, 17:20



Сохранить и загрузить со включенным модом пробовал, да?
Если дело не в этом, то откуда нам-то знать, в чем? Ты же esp не приложил.

Dsion  Offline  Сообщение №454 | Тема: Вопросы по Creation Kit. Старая тема написано: 25 февраля 2015, 17:50



Выложил бы хоть мод... А то чем мы поможем?
Можешь сначала попробовать упрощенный вариант.
Просто фигаришь квест с любым названием, не меняешь на нем никакие настройки. Потом в этом квесте просто хренячишь какой-то диалог с одним вопросом и одним ответом. Ответ - без каких-либо Conditions. И всё. Этот диалог должен появиться у всех NPC после сохранения-загрузки игры.

Dsion  Offline  Сообщение №455 | Тема: Вопросы по скриптам Papyrus написано: 25 февраля 2015, 19:44



slastik, вот еще вариант:


Код
Scriptname SionChestScript extends ObjectReference

;================================================================================

Event OnLoad()
     RegisterForSingleUpdateGameTime(0.0)
EndEvent

;================================================================================

Event OnUpdateGameTime()

     If (!Is3DLoaded())
         Return
     EndIf

     Float AngleZ = Math.Floor(Utility.GetCurrentGameTime() * 720) % 360
     TranslateTo(X, Y, Z, GetAngleX(), GetAngleY(), AngleZ, 1.0, 360.0)

     RegisterForSingleUpdateGameTime(0.05)
EndEvent

;================================================================================

Dsion  Offline  Сообщение №456 | Тема: Вопросы по Creation Kit. Старая тема написано: 25 февраля 2015, 19:50 | Отредактировано: Dsion - 25 февраля 2015, 21:49



ВРЕМЯ ЭЗОТЕРИЧЕСКОГО ХОЛИВАРА!

Dsion  Offline  Сообщение №457 | Тема: Вопросы по скриптам Papyrus написано: 25 февраля 2015, 21:46



Дались вам вообще те состояния...

Dsion  Offline  Сообщение №458 | Тема: Вопросы по скриптам Papyrus написано: 25 февраля 2015, 22:27



Цитата valambar

setactorvalue("Lockpicking") = getactorvalue("Lockpicking") + 1


Можно попробовать вот так:
SomeActor.SetActorValue("magicka", SomeActor.GetBaseActorValue("magicka") + 10.0)

Получать текущее значение лучше функцией GetBaseActorValue. Потому что просто GetActorValue вернет атрибут с учетом баффов и дебаффов.

И с этим, в любом случае, надо осторожно... Наверняка что-то может пойти не так...

Dsion  Offline  Сообщение №459 | Тема: Вопросы по скриптам Papyrus написано: 25 февраля 2015, 23:01



Посмотри в каком-то квесте что-ли... Изольда, например, когда даришь ей бивень, повышает красноречие.

Добавлено (26 Февраля 2015, 02:01)
---------------------------------------------
Квест Favor110, если что...


Dsion  Offline  Сообщение №460 | Тема: Вопросы по скриптам Papyrus написано: 26 февраля 2015, 16:34



Создать в квесте пустой алиас с пометкой Optional, повесить на алиас пакет. А потом при помощи скрипта совать туда NPC:
MyAlias.ForceRefTo(akSpeaker)
и убирать из него NPC:
MyAlias.Clear()

Пакеты на алиасах приоритетнее пакетов на самом NPC. А если NPC сразу в нескольких алиасах с пакетами, то приоритет пакетов будет зависеть от приорититов квестов.

Dsion  Offline  Сообщение №461 | Тема: Вопросы по скриптам Papyrus написано: 27 февраля 2015, 09:36



slastik, на всякий случай, напомню, что скорость течения игрового времени зависит от глобальной переменной. В 20 раз быстрее - это значение по-умолчанию, но многие его меняют.

Кроме ивента OnInit(), на ObjectReference есть еще много других ивентов. Например, OnLoad(), который выполняется каждый раз, когда загружается моделька объекта и становится готовой для анимации.

В том скриптике, что я выкладывал, стрелка движется не плавно. Она каждые секунд 10 синхронизируется со временем и прыгает на 1...2 градуса.
Но можно сделать и иначе: одну синхронизацию со временем в момент загрузки модели, а потом запуск анимации поворота с нужной скоростью (анимации не из NIF, а при помощи функции TranslateTo). Но в этом случае, нужно еще получать значение глобальной переменной скорости времени и использовать для расчета скорости поворота стрелки.

Dsion  Offline  Сообщение №462 | Тема: Вопросы по скриптам Papyrus написано: 27 февраля 2015, 12:50



slastik, я же выложил работающий проверенный скрипт. Я его цеплял к сундуку и сундук всегда поворачивался как нужно. Спать рядом с ним не пробовал, но пропусков времени делал много и большие. Если при каких-то условиях скрипт работает не правильно, я уверен, что это можно легко исправить.

Могу показать еще один вариант, который чуть иначе работает...

Dsion  Offline  Сообщение №463 | Тема: Вопросы по скриптам Papyrus написано: 27 февраля 2015, 13:23



Так говорю же: попробуй мой скриптик. Там нету такой проблемы. Сразу после сна/пропуска они синхронизируются со временем.

Добавлено (27 Февраля 2015, 16:23)
---------------------------------------------
Если игрок спит в то время, когда должно произойти обновление, то обновление все-равно произойдет, но когда он проснется.


Dsion  Offline  Сообщение №464 | Тема: Вопросы по скриптам Papyrus написано: 27 февраля 2015, 14:01



Если в момент, когда должна произойти синхронизация, модель не загружена, всё сразу прерывается. Не происходит синхронизация и не происходит регистрация для следующего обновления. То есть, часы не работают, пока игрок в другой локации. Вообще ничего не происходит. А возобновится ход только когда снова произойдет загрузка модели.

Dsion  Offline  Сообщение №465 | Тема: Вопросы по скриптам Papyrus написано: 27 февраля 2015, 14:05



Именно целиком его и стоило бы взять (для начала)... Ничего туда дописывать не нужно.
Только развернуть стрелку так, чтоб при угле Z = 0 она показывала на "12".

Dsion  Offline  Сообщение №466 | Тема: Вопросы по скриптам Papyrus написано: 27 февраля 2015, 14:19



В момент загрузки модели, стрелка сразу синхронизируется со временем. А потом синхронизируется каждые 0.05 игрового часа и так аж до выгрузки модели. Если игрок нажмет "T" и прождет какое-то время, стрелка синхронизируется сразу после конца ожидания. Со сном, скорее всего, так же.

Dsion  Offline  Сообщение №467 | Тема: Вопросы по скриптам Papyrus написано: 27 февраля 2015, 15:56



Да всё там нормально... :(
Стрелка должна вращаться всегда именно по оси Z. Но эту ось Z можно развернуть как угодно. Часы могут и на полу лежать (осью Z вверх), и на стене висеть (осью Z в сторону игрока перпендикулярно стене) и как угодно еще...
Ладно, сам смотри.

Dsion  Offline  Сообщение №468 | Тема: Вопросы по скриптам Papyrus написано: 28 февраля 2015, 11:42



Если кто-то регулярно занимается скриптами, я бы советовал сесть и просмотреть все функции на всех объектах:
http://www.creationkit.com/Category:Script_Objects

Для актора актуальны Actor Script, ObjectReference Script и Form Script.

Dsion  Offline  Сообщение №469 | Тема: Вопросы по скриптам Papyrus написано: 28 февраля 2015, 12:16



А причем тут ты... Это сообщение было адресовано абсолютно абстрактному посетителю форума, который предпочтет не использовать других как гугл.
Думаешь, lolososo просто так знал этот скрипт, который тебе показал? Нет. Он открыл раздел "Actor Script" на creationkit.com, произвел по странице поиск по слову "Magic", потом открыл справку по функции HasMagicEffect. Он убедился, что это то, о чем ты спрашиваешь, и скопировал оттуда для тебя пример.
Лично я не в теме, почему кто-то не мог сделать этого сам... Но это, опять же, об абстрактном форумчанине.

Dsion  Offline  Сообщение №470 | Тема: Вопросы по скриптам Papyrus написано: 28 февраля 2015, 13:00



Проперти на скриптах можно менять в любой момент из любых других скриптов.
Можно сделать, чтоб после диалога NPC запихивался в проперти любого другого скрипта.
А если нужно на нем ивенты отслеживать, то нужно в алиас запихивать.

Dsion  Offline  Сообщение №471 | Тема: Вопросы по Creation Kit. Старая тема написано: 1 марта 2015, 12:09



Для Heartfires точно не будет достаточно просто поменять глобальную переменную BYOHHPCost? Я посмотрел, что там всё на ней завязано:
1. Condition на диалоге проверят, есть ли у игрока BYOHHPCost золота.
2. Если есть, становится доступным ответ "Я беру. (<Global=BYOHHPCost> зол.)" - тут тоже ничего редактировать не нужно.
3. И в скрипте потом тоже снимается именно BYOHHPCost ед. золота: Game.GetPlayer().RemoveItem(Gold001, BYOHHPCost.GetValueInt())

Добавлено (01 Марта 2015, 15:09)
---------------------------------------------
Попробуй временно отключить мод, над которым работаешь, и временно создать новый маленький модик, который меняет только BYOHHPCost.
Я пока не вижу ничего, что помешало бы этому работать... Но если не работает, разберемся. У меня просто подходящего сэйва нету, чтоб проверить...


Dsion  Offline  Сообщение №472 | Тема: Вопросы по скриптам Papyrus написано: 1 марта 2015, 17:19



А чего бы ей не продолжать валяться после команды "включить"?

Добавлено (01 Марта 2015, 20:19)
---------------------------------------------
Если объект создается алиасом (Create Reference To Object), то можно поставить галочку "Initially Disabled", если нужно скрыть его до какой-то стадии. Если объект создается в какой-то Cell, то у него в настройках тоже есть такая галочка. А потом уже включать.


Dsion  Offline  Сообщение №473 | Тема: Вопросы по моделированию написано: 3 марта 2015, 12:32



Цитата lemniscata

ограничиться описанием или вообще ссылкой на нормальный мануал (можно англоязычный).


Эх, все бы так. А меня только оскорбляют, когда я пытаюсь дать удочку, а не рыбу.
Извините, что не по теме.

Dsion  Offline  Сообщение №474 | Тема: Вопросы по Creation Kit. Старая тема написано: 4 марта 2015, 15:58



lolososo, есть еще чуть другой вариант. Перезапускаемый квест с самозаполняющимися алиасами.

Создаешь многоразовый квест. В нем алиас с галочкой "Optional" и указываешь, что нужно найти в Cell ближайшего NPC. Можно еще дополнительные условия вбить типа максимального уровня, расы итп. На этот алиас добавляешь пакеты какие нужно. А потом дублируешь алиас сколько нужно раз.

Каждый раз, когда будет запускаться этот квест, все алиасы будут заполняться ближайшими NPC (без повторений). И они будут начинать следовать за игроком.

А запуск и остановку квеста можно заклинанием сделать.

Dsion  Offline  Сообщение №475 | Тема: Вопросы по Creation Kit. Старая тема написано: 4 марта 2015, 16:20



йа. только надо убрать квесту галочки "run once" и "start game enabled"

Dsion  Offline  Сообщение №476 | Тема: Вопросы по скриптам Papyrus написано: 7 марта 2015, 14:04 | Отредактировано: Dsion - 7 марта 2015, 14:06



anton, в SKSE есть функция EquipItemEx, которой задается слот. Но как-то с SKSE не очень круто...

Dsion  Offline  Сообщение №477 | Тема: Вопросы по Creation Kit. Старая тема написано: 7 марта 2015, 14:18



А в чем конкретно сложность? Можно считать количество поленьев с помощью переменной. В ивенте OnItemAdded к переменной добавляется положенное количество предметов, а в ивенте OnItemRemoved - отнимается. И из каждого ивента нужно вызвать функцию, которая получит текущее количество поленьев и включит нужный объект. Если переменная не нравится, можно проверять количество поленьев функцией GetItemCount.

Dsion  Offline  Сообщение №478 | Тема: Вопросы по Creation Kit. Старая тема написано: 7 марта 2015, 15:39



это не через перк делается?

Dsion  Offline  Сообщение №479 | Тема: Вопросы по Creation Kit. Старая тема написано: 8 марта 2015, 16:14 | Отредактировано: Dsion - 8 марта 2015, 16:15



Жаль, что не показал весь ивент целиком :(

Можно как-то так:


Код
...
Int excess = GetItemCount(Firewood001) - 50 ;Считаем, сколько поленьев лишних.
If (excess > 0)
    RemoveItem(Firewood001, excess, True, akSourceContainer) ;Возвращаем
EndIf
...

В таком случае, если игрок положит 60 поленьев, то ему вернутся не все, а только 10.

Dsion  Offline  Сообщение №480 | Тема: Вопросы по скриптам Papyrus написано: 8 марта 2015, 21:45



Я тоже не в теме, как такое провернуть. У предметов в инвентарях и контейнерах просто нету своих RefId.
Если бы были, можно было бы делать вот так:

Код
Scriptname SionBowScript extends ObjectReference

ReferenceAlias Property MyAlias Auto

Event OnEquipped(Actor akActor)
     Debug.MessageBox(Self)
     MyAlias.ForceRefTo(Self)
     Utility.Wait(1.0)
     Debug.MessageBox(MyAlias.GetRef())
EndEvent

Но не работает.

А зачем отправлять в алиас экипированный предмет? Мне кажется, без этого можно обойтись...

Форум » Записи участника [Dsion]
Поиск:





Ответ на жалобу смотрите в разделе жалоб