Лидеры
Популярный контент
Показан контент с высокой репутацией 19.06.2022 во всех областях
-
5 баллов
-
1 балл
-
1 балл
-
1 балл
-
1 балл; переводим камеру в вид от третьего лица Game.ForceThirdPerson() ; массив актеров actor[] sexActors = new actor[2] ; устанавливаем ж актера sexActors[0] = Game.GetPlayer() ; устанавливаем м актера sexActors[1] = akSpeaker ; если актеры валидны if(sexActors[0] && sexActors[1]) ; создаем строку "<имя npc> уломал <имя игрока> заняться сексом" String comment_02 = sexActors[1].GetBaseObject().getName()comment_02 += " persuaded " + sexActors[0].GetBaseObject().getName() + " for sex" ; выводим ее Debug.Notification( comment_02 ) ; создаем список анимаций, в нашем случае будет всего одна sslBaseAnimation[] anims = new sslBaseAnimation[1] ; находим и присваиваем нужную анимацию anims[0] = SexLab.GetAnimationByName("name_of_animation_which_you_need_check_sexlab_mcm_for_list_of_names") ; если нужна анимация с животными используешь GetCreatureAnimationByName() вместо функции выше ; запускаем анимацию SexLab.StartSex(sexActors, anims) endif Догма опередил уже Но нужно учитывать один момент, у всех могут быть разные наборы анимаций, некоторый моды добавляют анимации к СексЛабу и если у игрока не будет их, то у него запустится случайная анимация.
-
1 баллВ случаях когда тебе нужна функция поведение которое не зависит от того к чему привязан скрипт. Например: scriptname tseSS_Utility Hidden function print(String message) global Debug.Notification("tseSS_Mod: " + message) endFunction Теперь я могу пользоваться этим так в любом скрипте: tseSS_Utility.print("something happened...") В результате чего будет выведено "tseSS_Mod: something happened..." Как видишь нам даже не надо привязывать данный скрипт к чему либо для того чтобы вызвать глобальную функцию.
-
1 балл
-
1 баллотключить доступ к инвентарю можно через Game.DisablePlayerControls(false, false, abActivate = false), полное описание функциивключить соответственно EnableBlablaFunction DisablePlayerControls(bool abMovement = true, bool abFighting = true, bool abCamSwitch = false, \ bool abLooking = false, bool abSneaking = false, bool abMenu = true, bool abActivate = true, bool abJournalTabs = false, \ int aiDisablePOVType = 0) native globalзаметь как указали что мы выключаем именно доступ к меню, мы не стали писать все параметры, а лишь указали которые нас не устраивают по умолчанию и потом перескачили сразу на abActivate, это один из способов в папирусе задавать в функциях нужный аргумент пропуская те которые нас устраивают по-умолчанию. Сам я ее не тестил, но по описанию доступ к карте вроде блокирует abJournalTabs, обычно задание и журнал все вместе идет, возможно не прав ) По отниманию вещей, создай "локацию" в пару ячеек без дверей без ничего, помести в ней сундук, и скриптом:: изъять вещиGame.GetPlayer().RemoveAllItems(RefToMyContainer, true); вернуть вещиRefToMyContainer.RemoveAllItems(Game.GetPlayer(), true)в скрипте добавь property ObjectReference RefToMyContainer и укажи ей в редакторе твой сундук.описание функции:Function RemoveAllItems(ObjectReference akTransferTo = None, bool abKeepOwnership = false, bool abRemoveQuestItems = false) nativeВторой параметр указывает на сохранять ли инфу о владельце вещей, указываем да, и чтобы это работало сундук твой должен быть в паблик зоне, по умолчанию когда ты создашь свою "секретную комнату" для него она таковой и будет. Третий параметр якобы должен изымать еще и квестовые вещи если true, но говорят что не изымает в другом описании ф-ции пишется что вообще это флаг Silent мол изъять по тихому не выводя сообщений, поэкспериментируй с ним если хочешь или оставь false. Не делал маркеры, но думаю проблема в том что ты не создал алиас для маркера в квесте. В случае с npc он у тебя есть и все ок, для маркера надо также.з.ы. по скриптам есть две полезные ссылки:группировка по "модулям"[Скрытое содержимое] функции разом:[Скрытое содержимое]
-
1 баллони сделали проще, чтобы не писать в каждом диалоге по одному и тому же условию, занесли все эти фразы в один квест и расшарили их между собой.добавлю еще что эти функции не самые быстрые, так как они используются в диалогах и перед ними еще ряд более "легких" условий который ограничивают частый вызов непосредственно проверки наготы, то это не сущственно особо. Но принцип работы внутренностей данной функции, она пробегается по всем твоим одетым вещам смотрит не прописаны ли в них нужные ключевые слова и если нет, то считаем перед нами голый. То есть внутри проверок на самом деле гораздо больше происходит и если какой нибудь шутник в своем моде создаст меч с подобным ключевым словом то голым уже не будешь ) Если же тебе надо выяснить через скрипты, я бы советовал пользоваться функциями scse if(!Game.GetPlayer().GetWornForm(0x04)) Debug.Notification("Ч0рт кто спёр мою одежду?!")endif
-
1 балл
-
1 баллУ Бриньельфа эти пакеты скрыты в alias'e квеста, ясно что не понятно по этому по порядку: 1. открой квест TG00 открой вкладку диалогов внимательно посмотри условия и скрипты в каждом, например: "Рад видеть, что у тебя..." ключевое условие GetStage() == 5 то есть этот топик появляется только когда квест уже чуть продвинулся до 5 состояния. а вот в "Никогда и дня честно не работал..." ключевое место скрипт: TG00QuestScript tg00script = GetOwningQuest() as TG00QuestScripttg00script.pTG00FGDone01 = 1который для простоты можно переписать как: (GetOwningQuest() as TG00QuestScript).pTG00FGDone01 = 1что он делает? У данного квеста есть скрипт TG00QuestScript, подключенный в последней вкладке а в скрипте есть Property pTG00FGDone01 вот значение этой проперти мы и устанавливаем в единицу. int Property pTG00FGDone01 Auto ConditionalConditional здесь указывает что эту переменную мы можем использовать также и в условиях квестов/пакетов и т.д. это тоже один из важных моментов. Что сейчас видно из всего этого? Что у нас есть одна ветка диалога в которой есть варианты ответов, при состоянии квеста 5 и при начальном, при чем если вызван начальный мы меняем переменную в скрипте квеста. Но мы еще упустили одну деталь, открой снова "Никогда и дня честно не работал..." и заметь стоять две галочки Walk Away и Walk Away Invisible in Menu и напротив указана ветка TG00BrynjolfWalkAwayTopic (в уроке это описывал, но повторим еще раз), Walk Away указывает что данная ветка вызовется если игрок закончит диалог напри[мер табом, то о чем ты спрашивал. а Walk Away Invisible in Menu указывает на то что данный диалог не будет отображаться в вариантах ответа игроку. если мы откроем этот (TG00BrynjolfWalkAwayTopic) топик, то увидим что в нем есть скрипт: GetOwningQuest().SetStage(5)Все теперь стало на свои места, осталось выяснить как же он форсирует начальный диалог, и как я уже в самом начале говорил, нам нужны alias'ы.Открываем вкладку Quest Aliases, открываем следом BrynjolfAlias: Видим Unique Actor: указан Бриньяльф и в правом нижнем углу то что мы и искали, пакеты. Нас интересует в первую очередь TG00BrynjolfForceGreetPlaza, открываем его: и тут у нас знакомое Package Template: Force Great указан топик: TG00BrynjolfIntroBranchTopic И тут на вкладке Conditions: вот тут то, та property и всплыла. Как раз поэтому она и была со свойством Conditional, чтобы можно было использовать в подобных условиях, в диалогах это тоже работает. теперь далее: по идее нужен refMarker на локации куда ему идти, и скриптом по оканчанию диалога указываешь что вали к нему мол. Или akSpeaker.MoveToInteractionLocation(refToDoorIntavern) говорим ему иди открой дверь в Таверну. А еще лучше настроить еще один ai пакет который и укажет куда ему идти и чего дальше делать. akSpeaker.Disable(true); исчезнет затухая или если false то просто сразу исчезнет Game.GetPlayer().AddItem(refToNote); refToNote property в скрипте диалога с типом Book например в которой ты и укажешь свою записку которую заранее создашь в редакторе.
-
Новостная рассылка