Можно создать новых NPC и добавить им пакет с указанием "лазить по локации". Или создать квест, в нем алиасы на существующих NPC, а на алиасы, опять же, пакет с указанием "лазить там-то" и какими-то условиями.
sansuli, да я, собственно, разобрался. Написал такой скрипт:
Ммм... Ты серьезно ошибся... Смотри внимательно. Функция PlaceAtMe создает новый ObjectReference (новый объект в мире). Она НЕ телепортирует что-то к игроку. То есть, у тебя каждый раз создается новый объект и не удаляется. (Ну если ты не повесил на лабораторию удаляющий скрипт).
В любом случае, телепортировать к игроку ничего не нужно. И даже не обязательно ставить новую лабораторию в какой-то локации. Можно использовать любую лабораторию из любой локации и удаленно её активировать:
Код
ObjectReference Property ArcadiasWorkbench Auto
Event OnEquipped(Actor akActor) If (!akActor.IsInCombat() && !akActor.IsOnMount()) ArcadiasWorkbench.Activate(akActor) EndIf EndEvent
Наверное, он создает лабораторию командой PlaceAtMe только один первый раз. А потом уже перемещает к игроку. Но если создавать новую каждый раз, её надо же обязательно удалять (Disable, Delete).
Может, там что-то такого типа?
Код
Actor Property PlayerRef Auto Furniture Property CraftingAlchemyWorkbench Auto ObjectReference MyBench
Ну сам смотри, удачи... PlaceAtMe - это создание нового объекта в мире (нужно удалять). MoveTo - это перемещение объекта. Но лабораторию нельзя будет перемещать, если она создана в CK. Нужно создавать через PlaceAtMe.
Лично у меня нету проблем и с активацией лаборатории из другой локации... Но у меня и SkyUI нету.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №396
| Тема: Вопросы по скриптам Papyrus
написано: 10 января 2015, 15:29
| Отредактировано: Dsion - 10 января 2015, 15:33
А еще интереснее было бы добавить игроку третью полоску "Энергия Чи", которая восстанавливалась бы во время медитаций и которую можно было бы использовать для временного повышения скорости безоружных атак
elenucia1981, на триггере скрипт, наверное. А у скрипта два ивента: Event OnTriggerEnter(ObjectReference akActionRef) и Event OnTriggerLeave(ObjectReference akActionRef). Выполняюся когда что-то попадает в него (Enter) или вылезает ез него (Leave).
В Enter, наверное, функция, которая проверяет, NPC ли это, и раздевает, если не игрок.
А в Leave нужно добавить одевалку. Вот только её не так просто сделать. Функции, чтоб надеть на NPC его стандартную одежду, нету... (skse не считается). Можно сохранять для каждого список снятой одежны. Но это криво... В общем, лично я только один способ знаю. Если с NPC всё снять. Потом надеть на него какой-то предмет. А потом удалить у него этот предмет, то он надевает обратно всю стандартную одежду... Можно функцию написать. Я такую делал для одного мода.
Подскажите пожалст, после какого события квест перестает отвечать положительно на запрос IsRunning() ?Тоесть даже если завершили все обжективы, и сквест переходит в статус Комплитед, он всеравно отвечает на этот запрос положительно.
Доброго времени суток, помогите пожалуйста: как понизить скорость прокачивания лвл.
Можно, например, понизить скорость прокачки всех навыков. Или увеличить число лвл-апов навыков, необходимых для поднятия уровня (тогда понизится и максимальный уровень). Какой вариант интересует?
Необходимое XP для поднятия уровня ПЕРСОНАЖА: XP = (fXPLevelUpBase)+(Current_Char._Level * fXPLevelUpMult) fXPLevelUpBase и fXPLevelUpMult можно изменить через Game Settings. Это ко второму варианту.
А к первому. XP необоходимое для поднятия уровня одного НАВЫКА: Skill Improve Mult * skill level1.95 + Skill Improve Offset 1.95 - это fSkillUseCurve. Если поставить, скажем, 2.2, то поначалу скилы будут качаться почти с той же скоростью, но чем дальше, тем медленее. И до 100 прокачать будет офигенно сложнее, чем с 1.95 (ванильным)
Ну и еще третий вариант: можно посмотреть, как работает камень-хранитель, который изменяет скорость прокачки навыков.
Добавлено (13 Января 2015, 19:29) --------------------------------------------- Лично я для себя вообще отключил изменение уровня персонажа. Персонаж с самого начала и до конца остается 90 уровнем. Только навыки качаются. И монстры вокруг все максимальной силы с самого начала игры
Лично у меня вообще никаких идей... Чтоб не слетали всякие улучшения, нужно работать только со существующим референсом. То есть, никакого создания новых референсов.
Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
Вот этот ивент, по идее, должен выдавать не только базовый объект (Form), а и конкретный референс. Но нифига. Если игрок что-то берет, то akItemReference = None и ничего с ним не сделать. Возможно, это потому, что у предметов в инвентаре и нету собственного Id... Если они не квестовые или что-то такое.
И как проверить, если ли в инвентаре краденый предмет, тоже без понятия. Даже в Conditions нету.
Добавлено (14 Января 2015, 21:56) --------------------------------------------- Варианты есть, конечно, но они кривые и абсолютно не юзаемые...
То сообщение на человека ориентировано все-таки. Хоть и на новичка в компьютерах. А если еще подробнее описать, то это уже будет ориентировано на обезьяну и оскорбительно.
А ты до сих пор не разобрался что-ли, как обустройство работает? День же уже прошел. Есть, скажем, 3 маркера в состоянии Disabled: кухня, кладовая, столовая. К каждому маркеру прилинкованы другие объекты, чтоб включались (Enable) вместе с ним. А в диалоге скрипт который включает маркер.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №411
| Тема: Вопросы по скриптам Papyrus
написано: 23 января 2015, 09:21
| Отредактировано: Dsion - 23 января 2015, 09:36
Если просто отслеживать загрузку игры, то на алиас игрока можно добавить Event OnPlayerLoadGame() и он будет срабатывать при загрузке игры.
Но, возможно, лучше отслеживать ивент OnLoad() на самом NPC. Потому что в момент загрузки модельки они часто надевают свой стандартный Outfit. Это от разных факторов зависит, которые я все так и не понял. А OnLoad() - это ивент загрузки модели конкретного объекта.
Можно, к примеру, снять всю одежду с кого-то на площади Вайтрана, надеть что-то другое. А потом просто перезайти в Вайтран и NPC снова окажется в стандартном Outfit.
Еще можно переодевать NPC командой SetOutfit(), но у этого способа столько недостатков, что аж описывать страшно.
Если переодевать через SetOutfit(), то не должно быть никаких проблем после загрузки игры... Тогда не знаю. А если переодевать вручную, то, наверное, нужны Алиасы, в которых будут все владельцы колец. Но тогда количество колец будет ограничено.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №413
| Тема: Вопросы по скриптам Papyrus
написано: 24 января 2015, 09:47
| Отредактировано: Dsion - 24 января 2015, 09:45
Это уж тебе точно виднее Если это заклинание (Spell), то будет висеть столько, сколько длительность действия заклинания. Если зачарование, то эффект пропадет, когда предмет снимется итп.
Можно, конечно:
Код
Event OnEffectStart(Actor akTarget, Actor akCaster) akTarget.AllowPCDialogue(true) Utility.Wait(60) akTarget.AllowPCDialogue(false) EndEvent
Не.. Там NPC можно добавлять обычные пакеты. Но если он вступает в бой, обычные пакеты прерываются и включаются (если есть) Combat Override пакеты. Я бы попробовал добавить Combat Override пакет. Хотя это я так... Не проверял...
Сам скрипт должен обновляться. Ивенты и функции должны срабатывать уже новые. Но вот OnInit(), если изменен, заново уже не вызовется. А с чего бы ему вызываться? И значение уже заполненных Property не изменится. Можно было с самого-самого начала проектировать мод с учетом возможности обновления...
Я когда-то таки придумал систему, позволяющую (теоретически) избежать проблем при обновлении. Но тогда уже особо не делал моды и так её и не проверил. Там смысл в полном отсутствии OnInit() где-либо и отсутствии Property в том виде, в котором мы к ним привыкли.