Вис, погоди маленько, квестовый гейммод медленный, работает раз в 5 секунд. Может, в этом и проблема, а? Кстати, чтоб не гонять гейммод, всё можно перенести в скрипт эффекта, а в квестовом оставить только переменные. И срабатывать будет без задержек.
Set AAAzazaza691Naviki.AAAzazaza691StimPak to AAAzazaza691Naviki.AAAzazaza691StimPak + 1
IF AAAzazaza691Naviki.AAAzazaza691Stimpak>=2 Set AAAzazaza691Naviki.AAAzazaza691Medicine to AAAzazaza691Naviki.AAAzazaza691Medicine + 1 Set AAAzazaza691Naviki.AAAzazaza691Stimpak to 0 endif IF AAAzazaza691Naviki.AAAzazaza691Medicine>=10 player.ModAV medicine 1 Set AAAzazaza691Naviki.AAAzazaza691Medicine to 0 endif End
То есть переменные всегда доступны, так как находятся в квесте, а все проверки и изменения происходят однократно после укола.
То есть переменные всегда доступны, так как находятся в квесте, а все проверки и изменения происходят однократно после укола.
Спасибо, опробую.
Добавлено (26.08.2012, 21:46) --------------------------------------------- Да, всё работает! Продолжаю серию вопросов: при загрузочных скринах (например, когда грузится локация), есть информация о том сколько ты использовал стимуляторов, убил людей и т.д. Что считает эти убийства, вколотые стимуляторы? Интересует "спящих убито" (или как-то так). А цель такая же: убил 5 людей с перком "Песочный человек" скрытность повысилась на 1.
Изменение репутации для пользователя Spalny_Vagon
Spalny_VagonOffline
Сообщение №516
написано: 26 августа 2012, 18:23
| Отредактировано: Spalny_Vagon - 26 августа 2012, 18:26
Как начать диалог между 2-мя НПС? Диалоговый анимационный пакет я сделал, сделал сами диалоги, в разделе Conversation. Но когда на триггере я захожу, один подходит к другому, говорит "Привет", и диалог не начинается. В чем ошибка?
Есть три способа организации разговоров между НПС. 1. Скриптом с временными задержками, как правило применяется при разговорах НПС с самим собой (например, роботы-протектроны, проверяющие билеты) 2. Скриптом с помощью комнанд say (sayto) и блока SayToDone. В блоке gamemode соманда say заставляет НПС говорить конкретную фразу в конкретном топике, а в блоке SayToDone после завершения именно этой фазы дается команда говорить следующему. 3. Используя только квест. В Conversation передача слова от одного НПС к другому и обратно (или к третьему) производится с помощью Link to и Link from. Конкретно: "Первый" должен сказать фразу в топике Hello, link to в этой фразе указывает на фразу "Второго", у "Второго" в его фразе должно быть указано от кого была передача (Link from) и кому передается слово после нее (Link to), и так до упора в топике GoodBy. Разумеется, приоритет квеста должен быть выше, чем у стандартных "говорилок". Начало диалога делается либо с помощью команды startconversation, либо с помощью AI-пакета Find (НПС с этим пакетом с указанием второго собеседника в качестве цели, найдет собеседника и начнет с ним разговор). Прикол. Однажды я дал пакет Find радтараканам с указанием ГГ в качестве цели. В игре тараканы меня находили и пытались пообщаться.
====================== Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294 Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Spalny_Vagon, спасибо, мне подходит 3-ий вариант. Диалог начинаю с АС пакета. Сейчас попробую все приветси в порядок...
Добавлено (26.08.2012, 22:46) --------------------------------------------- А весь диалог нужно делать как: Уместить вопрос-ответ в одном топике, или для каждого вопроса-ответа нужно создавать свой топик?
Добавлено (26.08.2012, 22:53) --------------------------------------------- Создал для каждого вопроса-ответа свой топик, соединил их LinkTo & LinkFrom. Однако, все равно. 1-ый НПС говорит лишь "Привет". Может, дело в 1-ом топике? Там, где написано LinkFrom я решил выставить значение ANY.
Создал для каждого вопроса-ответа свой топик, соединил их LinkTo & LinkFrom. Однако, все равно. 1-ый НПС говорит лишь "Привет". Может, дело в 1-ом топике? Там, где написано LinkFrom я решил выставить значение ANY.
Проверьте приоритет. В топике Hello не нужно указывать от кого, это первая фраза.
====================== Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294 Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Ещё одно - стимпак может "съедаться" тремя способами.
Как раз при любом варианте всё срабатывает, что и требовалось. А за советы - спасибо!
Добавлено (27.08.2012, 20:28) --------------------------------------------- Возможно прописать моему объекту стандартную модель не распаковывая bsa архив? Способ с изменением ID у вещи с нужной моделью не вариант.
Возможно прописать моему объекту стандартную модель не распаковывая bsa архив?
Гм. Имеется в виду - использовать в GECK диалог выбора модели, не имея файл модели, лежащий в нужном месте? Если нужно только выбрать файл - достаточно, чтобы в момент выбора там лежал хоть какой-то NIF, не обязательно тот, который и будет на самом деле. Положить файл в нужную папку с нужным именем, выбрать его в диалоге, после чего удалить этот временный NIF - при дальнейшей работе GECK прекрасно разберётся: раз нет в папке файла и даже самой папки, подгрузим из BSA. Можно обойти использование диалога, просто прописав путь к файлу с помощью FO3Edit - тот не интересуется, есть ли на месте файл сейчас, он тебе верит, что когда будет пора работать, файл уже будет в том или ином виде.
Если тебе нужно переопределить текстуры - тогда на время заполнения полей диалога класть на место надо не какой попало NIF, а настоящий (или по крайней мере такой, у какого текстурированным блокам даны точно такие имена, как у настоящего из BSA). Это тоже можно сделать в FO3Edit - но поскольку для этого надо знать, как именно названы и пронумерованы блоки, а чтобы их имена и номера вручную писать в "список поправок" модели, тебе скорее всего придётся самому заглядывать в NIF - а значит, он всё равно будет для этого вытащен из BSA, и проще временно положить его самого на законное место и расписать текстурные наборы в стандартном диалоге GECK.
Ipatow, спасибо. Теперь такой вопрос: как сделать так, чтобы диалог появился через неделю после другого? То есть: поговорил, прошла неделя, появился другой диалог.
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №527
написано: 28 августа 2012, 18:25
| Отредактировано: Joopeeter - 28 августа 2012, 22:57
как сделать так, чтобы диалог появился через неделю после другого? То есть: поговорил, прошла неделя, появился другой диалог.
Тут пригодится глобальная переменная GameDaysPassed - сколько дней прошло с начала игры. В квестовый скрипт вписываем примерно так:
Code
scn zzQuestScript
short DayX
Begin GameMode
if DayX>0 if DayX<=GameDaysPassed set DayX to -1 endif endif
End
Условие первого диалога: GetQuestVariable zzQuestScript.DayX>-1 (тогда он будет доступен всю эту неделю) Условие второго диалога: GetQuestVariable zzQuestScript.DayX==-1 В первом диалоге в подходящем результ-скрипте пишем:
Code
if zzQuestScript.DayX==0 set zzQuestScript.DayX to GameDaysPassed+7 endif
Вновь вопрос: возможно ли сделать так, чтобы при взломе чего-либо в зависимости от уровня взлома повышалась переменная. Например, заперто на очень лёгкий, взломал - переменная + 1, на лёгкий + 2, на средний + 3 и т.д. Если нет то подойдёт ли этот скрипт просто на повышение переменной при любом взломанном замке?
Есть такое ощущение, что считает движок где-то внутри, а у него не очень-то допытаешься
Похоже, я тут тебя обманул. Допытаться можно функцией GetPCMiscStat, а Песочного человека можно ещё поймать за работой функцией GetSandman. Тогда если через подсчёт, то в квестовом скрипте будет примерно так:
Code
short Sandman short DoOnce
Begin GameMode
if DoOnce==0 set Sandman to GetPCMiscStat "Sandman Kills" set DoOnce to 1 endif
if GetPCMiscStat "Sandman Kills" - Sandman >=5 player.ModAV sneak 1 set Sandman to GetPCMiscStat "Sandman Kills" endif
End
А если через отслеживание действия, то примерно так:
Code
short DoOnce short Sandman
Begin GameMode
if player.GetSandman==1
if DoOnce==0 set Sandman to Sandman+1 set DoOnce to 1 endif
else
if DoOnce==1 if Sandman>=5 player.ModAV sneak 1 set Sandman to 0 endif set DoOnce to 0 endif
endif
End
Действие там длинное, так что по идее квестовый гейммод должен успеть сработать.
Песочного человека можно ещё поймать за работой функцией GetSandman.
хм, а разве нельзя просто в перке, в скрипте (где ещё 50 xp прибавляют) вставить НазваниеКвеста.Перменная + 1? А в скрипте квеста -
Code
If переменная==5 playerModAV sneak 1 Set переменная to 0 ENDIF
Добавлено (30.08.2012, 19:36) --------------------------------------------- И ещё вопрос по поводу этой строчки "Mines Disarmed" - это мины, которые стоят изначально? Или ещё считается если бросил мину и обезвредил?
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №531
написано: 30 августа 2012, 16:16
| Отредактировано: Joopeeter - 30 августа 2012, 16:01
стимпак может "съедаться" тремя способами. Из инвенторя пип-бой (менюмод), с инвентарной кнопки, если стимпак повешен на кнопку (гейммод), а также из пип-боя со страницы эффектов - причём на ней двумя способами: просто кнопка "скушать стимпак" и целевое втыкание стимпака в покалеченные части силуэта ГГ.
А вот интересно, что позволяет именно стимпаку (а не пиву, например) иметь возможность лечить больную голову ГГ и другие части тела. И ещё рад-икс с антирадином на вкладке радиации. Вроде, ничего такого, кроме флажка Medicine их не отличает от прочих предметов из раздела "Помощь", однако, установка этого флага всё равно не даёт возможности лечить переломы морковкой, а лучевую болезнь - стаканом доброго вина.
проверки, набралось ли 5 штук и прибавления навыка в этот результ-скрипт. Как перенесли у стимулятора, а в квесте опять оставить только переменные.
А зачем туда-то? Я не думаю, что за 5 секунд кто-нибудь убьёт 2 и более npc, но для надёжности пожалуй можно. И повторю вопрос: по поводу этой строчки "Mines Disarmed" - это мины, которые стоят изначально? Или ещё считается если бросил мину и обезвредил?
Вроде, ничего такого, кроме флажка Medicine их не отличает от прочих предметов из раздела "Помощь", однако, установка этого флага всё равно не даёт возможности лечить переломы морковкой, а лучевую болезнь - стаканом доброго вина.
Флажок "Лекарство" означает, что числовые значения в базовых эффектах будут скооректированы в соответствии с уровнем врачебного навыка. Поэтому алкоголь должен иметь этот флаг - все же знают, что врачи напиваются гораздо суровее, чем не обезображенные медицинским обучением люди!
О том, что стимпаком является именно стимпак, а не морковка, игра узнаёт из Default Objects (см. меню Gameplay в GECK). Как и о том, кто у нас "рад-Х", кто "антирадин", а кто "загадочный незнакомец"...
Изменение репутации для пользователя Вис
ВисOffline
Сообщение №534
написано: 1 сентября 2012, 07:40
| Отредактировано: Вис - 1 сентября 2012, 07:40
Некоторые делают. Отследить можно функцией GetLockLevel, но учти, что придётся навешивать скрипт на все запертые терминалы сколько их есть, либо дописывать к уже навешенным скриптам. В отличие от дверей, у терминалов запертость настраивается в базовом объекте, но это не сильно облегчает задачу - всё равно перелопачивать придётся вручную. Сам скрипт вроде такого:
Code
scn zzScript
short Lock
Begin OnActivate
if GetLocked set Lock to GetLockLevel else set Lock to -1 endif Activate
End
Begin MenuMode
if Lock>=0 if GetLocked==0 set [переменная] to [переменная]+Lock+1 set Lock to -1 endif endif
Пораньше начать. Я о чём и толкую, нельзя со стороны определить, по крайней мере, стандартными средствами, во что именно сейчас тычет отвёрткой/пальцами игрок. Поэтому отслеживать должен сам тыкаемый объект, а для этого надо на него навесить скрипт. Что было хорошо для одного повышающего навык сейфа, может стать таким вот гемором если надо учесть всё-всё, что заперто в игре. Дверей тоже больше трёхсот, контейнеров - больше пятисот. Надо ещё не накосячить с уже имеющимися на всём этом скриптами. В принципе, есть специальные менюмоды для взлома/хака, но в ГЭКК-вики они не упоминаются среди правильно работающих. К тому же остаётся проблема определения текущего взламываемого объекта.
Изменение репутации для пользователя Вис
ВисOffline
Сообщение №538
написано: 1 сентября 2012, 15:05
| Отредактировано: Вис - 1 сентября 2012, 15:07
Скрипт надо будет чуть изменить из-за того, что висеть он будет и на запертых, и не незапертых контейнерах, так как у контейнеров это настраивается на копии, а не на базовом объекте. Кроме того, если ходил по ссылке, то наверное заметил, что сложность механического замка и сложность терминала нумеруются по-разному:
Code
scn zzScript
short Lock
Begin OnActivate
if GetLocked && GetLockLevel<255 set Lock to GetLockLevel/25+1 else set Lock to -1 endif Activate
End
Begin MenuMode
if Lock>0 if GetLocked==0 set [переменная] to [переменная]+Lock set Lock to -1 endif endif
End
Кстати, там в терминалах я не учёл невзламываемые (правда, что-то не припомню таких в игре). Надо дополнить условие if GetLocked && GetLockLevel<5 НО! В локации может быть много десятков контейнеров и в режиме меню запустятся разом скрипты на каждой копии. Уж не знаю насколько менюмод легче для игры, чем гейммод (если вообще легче), но лучше сначала проверить: поставить штук 50-70-100 копий заскриптованного контейнера и посмотреть насчёт тормозов в разных меню. И, честно говоря, вызывает сомнения целесообразность редактирования многих сотен объектов. Даже не в смысле трудоёмкости, а в смысле что чем меньше лезешь с изменениями в оригинальное, тем лучше. Если по хорошему, то надо будет проверять каждый контейнер через Use Info, и если у него нет копий, подлежащих взлому, скрипт не вешать. И ещё. Если контейнер заперт на взламываемый замок, но также может быть открыт и ключом, то при данном способе в обоих случаях скорее всего будет засчитан успешный взлом. Если, конечно, скрипт срабатывает до отпирания, что вероятней всего.
Добавлено (02.09.2012, 12:29) --------------------------------------------- Я пожалуй буду тут выкладывать скрипты, с которыми у меня проблемы:
Code
scn MS03RobCoMainframeTerminalScript
short MainframeInteract ;Has the player interacted with the mainframe? 0 = no, 1 = yes short Button ;What button did they choose on the message? 0 = "leave it alone", 1 = "place the observer" short MainframeTerminalActive ;Has player placed the Telemetry Unit? 0 = no, 1 = yes
;Settings short AgainstRobots ;is the RobCoRobots faction an enemy of itself? 0 = no (ally), 1 = yes short AgainstPests ;is the RobCoRobots faction an enemy of RobCoPests? 0 = no (neutral), 1 = yes short AgainstPlayer ;is the RobCoRobots faction an enemy of PlayerFaction? 0 = no (ally), 1 = yes
BEGIN OnActivate if IsActionRef player == 1
if (MainframeTerminalActive == 1) Activate ;player has already installed Telemetry Unit, show the terminal elseif (MS03.MS03c2 == 1 && player.getItemCount MS03TelemetryUnit >= 1) ;show the option messagebox ShowMessage MS03MainframeChangeMsg Set MainframeInteract to 1 else ;Show an unusable message ShowMessage MS03MainframeBrokenMsg endif
endif END
BEGIN GameMode
if (MainframeInteract == 1) set button to GetButtonPressed if button > -1 set MainframeInteract to 0
if (button == 0) ShowMessage MS03MainframeChange0Msg