Доброго времени суток! Проблема такая: работая в редакторе обратил внимание на то, что некоторые объекты перестают отображаться в RenderWindow, то есть они есть, но их не видно. Например исчезают камни, части гор, ландшафта. Как с этим бороться, где-то видел инфу по данной проблеме, но тогда не придал этому значения, а теперь ничего похожего не могу найти. Заранее благодарен.
Нажми F5 при активном окне RenderWindow, это обновление/перезагрузка объектов.
Что и где выбрать, прописать или еще что-нибудь сделать в AI пакете("UseMagic"), чтобы NPC у которого этот AI пакет, в котором он должен бесконечно кастовать спелл(тип каста которого "Концентрация"), бесконечно его кастовал(непрекрощая)?:D
Или выставь время каста большим - CastTimeMax и CastTimeMin или используй шаблон UseMagicRepeat, а лучше и то и другое вместе.
Можно.Делаешь свой активатор или сундук, назначаешь ему Markers\CommentTrigger\CommentTrigger.nif В игре ничего видно не будет, коллизии тоже, а надпись и активация будут.
**** mayor, если квест твой и там стоит галочка автозапуска, то диалогов не будет до первого сохранения и перезагрузки.
***** GreyFox447, вешай скрипт на ГГ (алиас, способность ...):
Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) if akBaseItem as MiscObject == akMiscObject ; или ListMiscObject.Find(akBaseItem as MiscObject) != -1 Game.GetPlayer().AddSpell(akSpell) ; или AddPerk(akPerk) и т.д. endIf EndEvent
Event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) if akBaseItem as MiscObject == akMiscObject ; или ListMiscObject.Find(akBaseItem as MiscObject) != -1 Game.GetPlayer().RemoveSpell(akSpell) ; или RemovePerk(akPerk) и т.д. endIf endEvent -------- akMiscObject - предмет ListMiscObject - форм-лист со списком предметов.
Убери условие на алиас, оставь только ID и деньги. (квест твой, или ты в дефолтный добавлял?)
Добавлено (25.08.2013, 22:44) --------------------------------------------- Для тех, кто не знает, как добавлять/использовать дефолтные нифы не распаковывая BSA.
1. Находим нужный активатор/предмет/статик в СК, открываем его ID (где он редактируется/создаётся). Там прописан ниф этого предмета. Копируем этот путь. 2. Открываем свой предмет и там окошечко Model, жмём кнопку Edit 3. Появляется окно Model Data, там есть Model File Name, жмём рядом кнопку Edit. 4. Появляется виндовое окно Select File, доходим до папки Meshes. 5. В строке "Имя файла" вставляем этот путь и жмём "Открыть". 6. Везде нажимаем ОК.
Так ты писал свои диалоги в дефолтном квесте? А зачем? Не проще ли свой квест сделать и не портить дефолт. К тому же, теперь твои диалоги зависят от этого квеста. Чтобы они заработали, надо запустить этот дефолтный квест, а он запускается через событие смены локации с привязкой к определённой локации, в другом любом месте ничего работать не станет.
Так вот не хочет выполнятся событие OnUpdate()хоть ты тресни. Такой же скрипт, но на объекте типа "Activator" прекрасно работает, но там запуск идёт с помощью OnActivate(). Почему так ? Как исправить ? Помогите пожалуйста.
И не надо исправлять, т.к. данный объект легко уничтожаемый и теряющийся, а событие OnUpdate() весьма коварное - оно может работать даже при отсутствии этого мода и этого скрипта, если оно запущено/зарегистрировано. Лучше сделай это событие в своём квесте или алиасе, ведь регистрация автоматически отменится при выключении этого квеста.
Так что в топиках своего диалога смотрите названия прикрепленных скриптов и копируйте их тоже.
Если скрипты топиков и квестов не переименовывал, то найти их по названию тяжело, проще в папке включить сортировку "по дате", и тогда все твои скрипты окажутся на самом верху, ведь они созданы/изменены позднее остальных скриптов. А там уже просто отсортировать свой-чужой.
Т.е. там (в движке) реализована такая же квазимультизадачность, как в винде?
В принципе да. В Папирусе обработка скриптов происходит только "по требованию", просто так скрипты не проверяются и не обрабатываются, как это было в Обливионе. Запуск скрипта происходит по событию или по обращению к нему другого скрипта. Вот в скрипте Антона сработало событие "объект экипировался" и оно отрабатывает до исполнения всех команд в нём. Поскольку в нём сделан цикл, то обработка этого блока-события не закончится, пока работает цикл. Но если произойдёт другое событие, например "объект снят" или сторонний скрипт запустит в этом какую-то функцию, то эти блоки событий и/или функций будут обрабатываться независимо от исполнения блока OnEquipped. Таких работающих блоков в скрипте может быть сколько угодно. К тому же, если снять и одеть предмет снова, то и новое событие OnEquipped запустит новый блок-событие. Получится уже два таких работающих блока, и так можно запустить хоть сотню одинаковых событий/функций.
Вот в скрипте Антона как раз и произойдёт этот вариант "размножения" блоков события до бесконечности, если ненадолго снимать и опять одевать шапку. О чём я совсем забыл предупредить самого Антона, поэтому его скрипт надо доработать, чтобы избежать подобного.
Подскажите шаблончик скрипта для однократной выдачи перка герою. Т.е. такого, который крепится к квесту, стартующему однократно при первом запуске игры. А то что-то ДЛЦ-шные скрипты мне СК отказывается показывать
У скриптов всегда есть "тип". При создании нового скрипта в квесте ты пишешь название этого скрипта (его ID), а тип скрипта сам добавится. (кнопка Add, в списке верхняя строка [New Script])
Свойству akPerk надо будет назначить твой перк: у окна рядом со скриптом есть кнопочка Properties, на неё нажимаешь и выскочит окошко. Там выделяешь akPerk и жмёшь кнопку Edit Value, там в списке ищешь свой перк, потом везде ОК.
Вот так будет выглядеть готовый скрипт (название придумаешь своё) :
Так вот собственно в чём вопрос: можете написать как из подвала нового дома ветров сделать переход в хранилище?
Не объединяя оба мода и не привязывая их друг к другу? А в каком моде делать "кнопку/дверь/скрипт" этого перехода, в своём новом моде? Сделать можно любой вариант, но нужны пояснения/подробности.
ReferenceAlias Property AliasFollow auto Static Property XMarker auto Idle Property JumpStandingStart Auto Idle Property JumpSoftEnd Auto bool bOn
Event OnEffectFinish(Actor Target, Actor Caster) bOn = false (AliasFollow as aATLisaAliasFollowJampScript).bJumpLocRun = false ; EndEvent
*********************
Часть скрипта на алиасе. Здесь только для локального прыжка, остальное удалено, чтобы не мешалось. Введён шанс "неудачного прыжка", это когда прыгнула, споткнулась и упала. Для реализма.
aATLisaAliasFollowJampScript
Idle Property JumpSoftEnd Auto bool Property bJumpGl Auto Hidden bool Property bJumpLoc Auto Hidden bool Property bJumpLocRun Auto Hidden int Property iJampCrash Auto ; шанс падения при прыжке, %
Не объединяя их. Отредактировать мод дом тёплых ветров и в нём добавить дверь. Ну или там есть лифт и как-то сделать кроме ререхода по этажам переход и в хранилище.
Там напротив штатного телепорта сделан ещё один такой же, который ведёт в хранилище. В самом хранилище будет появляться люк рядом с остальными люками, который ведёт обратно в дом.
Если интересно, то вот там примерно так:
Скритп на активаторе с нифом как телепрот в доме. Устанавливается в доме "Прохладных ветров". ------------------- Activator Property A001_DR_CollectorsNext auto Event OnActivate(ObjectReference akActionRef) if akActionRef == Game.GetPlayer() ObjectReference MarkerRer = Game.GetFormFromFile(0x01002757, "collectors_chamber.esp") as ObjectReference if MarkerRer ObjectReference MarkerDoorRer = MarkerRer.PlaceAtMe(A001_DR_CollectorsNext) MarkerDoorRer.SetPosition(MarkerDoorRer.X, MarkerDoorRer.Y, MarkerDoorRer.Z - 10) Game.GetPlayer().MoveTo(MarkerDoorRer) else Debug.Notification("MarkerRer NONE ") ; @!!!! endif endif EndEvent ======================= Скритп на активаторе с нифом "Люк" ------------------ ObjectReference Property MarkerHomeRer auto Event OnActivate(ObjectReference akActionRef) if akActionRef == Game.GetPlayer() if Game.GetFormFromFile(0x03000D63, "0001BertsBreezehomeRemodel.V.2(collectors).esp") as ObjectReference Game.GetPlayer().MoveTo(MarkerHomeRer) endif self.Disable() self.Delete() endif EndEvent
Спасибо большущее, но я клацаю на новый телепорт и остаюсь на месте. Из другого дома зашёл в хранилище там нового люка нет.
Прошу прощения, это моя невнимательность - запаковщик BSA обрезал название архива, а я не заметил этого. Вот исправленный вариант: http://yadi.sk/d/Rf4LQcw58WbIG
*** Без первоначальной активации телепорта люка в хранилище не будет, он создаётся активатором телепорта.
***** ***** Таким способом можно сделать дверь-телепорт в любой дом их любого мода, причём без привязки к тому моду. Если у кого будет желание, то распишу это дело подробнее.
Сперва открывается мод с нужным домом/локацией, куда мы хотим сделать дверь из своего дома. Там в доме ищется любой удобный маркер, на месте которого будет стоять дверь-активатор. Записывается FormID его референса, этот номер написан окне Reference этого маркера в самом верхнем правом углу в скобках. Закрываем этот мод, он больше не нужен.
Открываем СК и загружаем основной мод. Если мод на основе ESM, то загружаем этот ESM и после загрузки сохраняемся с названием ... - это будет мод-патч к этому ESM. Создаём активатор с понравившимся нифом (способ назначения нифа без распаковки описан в этой теме немного раньше). Создаём активатор для ответной двери, который будет устанавливаться во втором доме, тем же способом.
01002757 - FormId референса маркера, где будет устанавливаться дверь в доме/локации из второго мода. Этот номер написан окне Reference в самом верхнем правом углу в скобках (тырк-тырк по маркеру). Маркер любой удобный для расположения на нём двери (cocMarker, XMarker, и т.д.)
mod_house.esp - название мода с домом/локацией.
aActivatorDoor - активатор второй двери (делается не дверь, а активатор).
if Game.GetFormFromFile(0x03000D63, "myMod.esp") as ObjectReference
Game.GetPlayer().MoveTo(MarkerHomeRef)
endif
self.Disable()
self.Delete()
endif
EndEvent
03000D63 - FormId референса двери-активатора в доме из этого мода. Этот номер написан окне Reference в самом верхнем правом углу в скобках (тырк-тырк по активатору).
MarkerHomeRef - назначается дверь-активатор в доме из этого мода.
В принципе, условие if Game.GetFormFromFile(0x03000D63, "myMod.esp") as ObjectReference для работы не надо, но это как бы защита от лажи из-за отсутствия данного мода, т.к. сама дверь активатор создана и остаётся в этой локации даже без этого мода.
Сохраняем. Всё готово.
Принцип действия: при активации первой двери-активатора идёт проверка на наличие второго мода и получение референса на установку двери, проверяются неудалённые ранее созданные двери во втором доме и по обнаружению удаляются, создаётся новая дверь, игрока телепортирует в нужный дом.
При активации второй двери игрока телепортирует в свой дом и удаляется эта дверь. Если игрок хочет бегать через разные двери, при этом чтобы эта дверь оставалась, надо просто изъять удаляющие команды из второго скрипта (их первого удалять эти команды нельзя, иначе двери могут плодится).
Если вы первый мод выключили, то во втором моде остаётся эта дверь, ведь она создана и записана в сохранке. При актвации такой двери она просто удалится (если удаление вы убрали, то просто не будет никаких срабатываний, т.е. лаж не возникнет).
mayor, Стандартный игровой баг, сохранись в этой локе и перезагрузись.
Уже давно известно, что квесты с автозапуском не дают диалогов до первой перезагрузки, поэтому не стоит этот дело списывать на "игровой баг". Надо учитывать это дело и сразу делать квесты без автозапуска. Запускать квесты можно через события или скриптово (командой). Если кто не умеет делать запуск через событие, то можно сделать свой автозапуск (галочки автозапуска на квесте не должно быть в любом случае). Для этого достаточно повесить на свой квест простенький скрипт:
Event OnInit() if !IsRunning() && !IsCompleted() Start() endif EndEvent
Это аналог галочек на квесте - он будет сам стартовать при первой же загрузки мода. И не будет вашего "бага" и жалоб игроков на отсутствие диалогов у НПС.
до этого создавал торговцев,учителей навыков,диалоги работали (правда только после сейв-лоад).а тут нифига не выходит...
Если всё делал правильно и в итоге не работает, то проверь алиасы (если они есть), с неправильно созданными алиасами квест не запустится. Если и там не найдёшь проблему, то скидывай ESP и скрипты с исходниками, иначе диагноз будет не поставить.
Прописаны то они да, но как. Если правильно понял, то квест NewWorldHouseQuestSvonSkull. Там ошибка с алиасами, квест не запустится.
Все алиасы заполняются в момент старта квеста, причём по очереди сверху вниз. У тебя сперва создаётся предмет в сундуке алиасе, но сам сундук в списке ниже, и поэтому ещё не заполнен его алиас. Так предмету просто негде создаться, и алиас не может быть заполнен, а значит, квест не запустится. Надо сундук сделать выше в списке, а предмет ниже. Для этого надо удалить алиас предмета, но предварительно снять все ссылки на него в других скриптах. Потом создать заново, тогда он окажется ниже сундука. Хотя, лучше нажми в нижнем левом углу >> или << , так передвинь предмет ниже сундука.
После отладки диалога, не забудь снять автозапуск и сделать свой запуск, иначе "баг" останется.
Кстати, для облегчения поиска скриптов и устранения дубликатов этих скриптов с другими модами, надо переименовать все стадийные и топиковые скрипты. Там у окна с командами скрипта есть кнопка Advanced, нажимай и там Rename Script, стираешь название и пишешь своё, потом везде ОК до полного закрытия квеста. И так со всеми скриптами. Если в этих скриптах есть свойства, то после полной переименовки надо опять по новой их все назначить, эти данные теряются.
чего после убийства врага,не исчезает маркер с него и не пишет мол я молодец я убил его?
У тебя не инициализировано свойство, т.е. не назначен свойству ID/объект (квест). Поэтому скрипт видит событие, а команда не передаётся - некуда передать. Пройдись по всем скриптам и проверь заполнение свойств.
**** Если ты используешь алиас, то такие скрипты лучше давать алиасу, а не актёру.
Если свойству назначил нужный квест и при смерти НПС стадия не переключается, то загрузи чистый сейв (до момента, когда этот мод был подключён) и проверь всё снова в игре. От грязных сейвов вылезают всевозможные бяки, а с инициализацией свойств - так это вообще огромный шанс на лажу, если ты их менял (или сами менялись, ведь у тебя много дубликатов, которые СК тебе делал, а не ты сам, от туда и лажа со свойствами).
***** Для проверки срабатывания самого скрипта НПС, введи в него сообщение: Debug.Notification("NPC Death") Потом удали, когда всё заработает.
а я не сейвы загружаю.я при заходе в игру пишу "coc "...
Уже не помню на каком форуме, здесь или на ТесАлле, вот точно так же человек бился с проблемами квестов - один работает, другой нет, потом загружается с нормального сейва - и всё наоборот, уже другие квесты не работают, а эти заработали. Так он так же делал через СОС, и результат соответствующий.
Если хочешь полноценный мод, то делать и тестить его надо полноценно, максимально приближенно к "боевой обстановке" (с нормальными игровыми сейвами).
Нашёл перевозчика. Вот его скрипты: DLC1_TIF__0101682F - в диалоге на старт перевозки, FerrySystemScript - основной квестовый скрипт, где прописано всё необходимое. Они лежат в папке исходников в своей папке Dawnguard.
Но... навряд ли ты там разберёшься, скрипт не из простых. (как говорят, он даже у разрабов не работал)
AleksTirex, вообще замечательно...а если с повозки взять скрипт?мне нужно,чтоб нпц сидел в лодке и после диалога с ним меня телепортировало в мою локу..
Я не думаю, что с повозкой скрипт гораздо проще. Тут проще самому сделать свой собственный скрипт. Главное - правильный алгоритм команд придумать.
Топик с лодочником, если денег хватает, то запуск функции на перевозку в НУЖНУЮ локацию и минус деньги. В функции перевозки: отобрать управление от ГГ привязать к лодке (есть такие команды через AV) дать анимацию сесть в лодку когда сядет - фасттревел по прибытии - всё тоже самое, но наоборот - встать, отвязать, вернуть управление.
Сам лодочник должен или перемещаться по портам, или в каждом порту будет свой лодочник.
В общем, пробуй создать такой скрипт.
Добавлено (02.09.2013, 18:25) --------------------------------------------- В папке Source есть папка Dawnguard, так вот содержимое этой папки скопируй в папку Source.
Мой чудный волшебный колпачок сполз на глаза и я не правильно понял человека, оказывается всё проще: "мне нужно,чтоб нпц сидел в лодке и после диалога с ним меня телепортировало в мою локу.." и если не надо анимация "ГГ сесть в лодку" и всякие разговоры, то... это совсем просто: Делается диалог лодочника, в нём условия "субъект - если сидит > 0" и если надо проверка денег. По окончании диалога - FastTravel(akMarkerTarget), а если локация интерьер, то MoveTo Как и когда сажать лодочника в лодку - на усмотрение автора. (сиденье лодки делается стулом и назначается собственность лодочника)
я в скриптах дуб дубом..сложны они для меня..не в курсе у какого нпц есть подобный скрипт?)
Так нет никакого скрипта, есть только одна команда FastTravel(akMarkerTarget) , которая пишется в топике, окошко End, где обычно пишут переключение стадий квеста. Но предварительно надо там прописать/добавить свойство akMarkerTarget типа ObjectReference, и потом указать этому свойству тот маркер, куда будет телепортироваться ГГ в твоей локе. Чтобы можно было прописать свойство в топик, сперва в окошке скрипта ставишь " ; " (точку с запятой), компилишь скрипт и везде ОК до закрытия квеста. Желательно этот скрипт переименовать, как это делается, написано немного раньше. Потом в скрипт добавляешь свойство и удаляя ";" прописываешь свою команду. (не забудь указать свойству тот маркер)
Все условия только в условиях топика, и ID лодочника, и GetSiting > 0 и количество золота у ГГ.