Модератор форума: КсюXa, ApeX  
Форум » Fallout 3 » Мастерская » Помощь по моддингу (Помощь в нелегком модмейкерском деле)

Помощь по моддингу
КсюXa  Offline  Сообщение №1 написано: 9 июля 2010, 18:51


Гид по Мастерской




Тема для общих вопросов по моддингу игры.
Возможно, что ответ на ваш вопрос уже есть в Картотеке.

Ой, всё...
ncrrainjer  Offline  Сообщение №1021 написано: 11 апреля 2014, 03:30



199
ValLеоIpatow, Спасибо огромное за подробный ответ,теперь разобрался!А вот еще вопрос,как сделать линейный диалог?Просто когда я создаю свой диалог(добавляю тем Greeting;добавляю в нее первый топик)А дальше что куда добавлять,чтобы начиналась следующая реплика а предидущая пропадала,а то у меня под конец диалога получается полная каша!Читал туториалы,но там по этому поводу ничего не сказано:(

ValLео  Offline  Сообщение №1022 написано: 11 апреля 2014, 08:13



42
Цитата ncrrainjer

А дальше что куда добавлять



Ну попробуй, что ли, добавить справа в поле Choice.
Гриттинг- это приветствие непися игроку. Когда игрок нажимает "Е" для разговора с НПС - тот непись произносит первым свою фразу из топика Гриттинг. Справа в настройках топиков есть поле выбора топика (Choice), который будет произнесен после гритинга. Топик предварительно нужно создать, расписать в нем тексты ответов игрока и непися и добавить в список топиков квеста. Каша у тебя получается возможно потому, что ты следующий топик добавлял через поле AddTopic. А в таком случае такой топик будет добавлен и показан в игре во всех диалогах данного непися, особенно если у топика нет дополнительных условий произнесения.

ncrrainjer  Offline  Сообщение №1023 написано: 11 апреля 2014, 14:19



199
ValLео, Спасибо,именно эта ошибка и была:)

Добавлено (11 Апреля 2014, 18:19)
---------------------------------------------
Как правильно в скрипте прописать условие "если актер такойто мертв"?


Graf  Offline  Сообщение №1024 написано: 11 апреля 2014, 14:29



179
ncrrainjer,
npcRef.GetDead == 1

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
ncrrainjer  Offline  Сообщение №1025 написано: 11 апреля 2014, 15:36



199
Graf, Спасибо

ValLео  Offline  Сообщение №1026 написано: 11 апреля 2014, 15:52 | Отредактировано: ValLео - 11 апреля 2014, 15:56



42
ncrrainjer, советую проштудировать вот эти странички на сайте Беседки:
Blocktypes, подкатегорию Begin, особенно страничку Functions и для общего развития - Scripting
Многое станет ясным. 
В частности - по твоему вопросу можно почитать тут -  GetDead  ;)

ncrrainjer  Offline  Сообщение №1027 написано: 12 апреля 2014, 06:05



199
ValLео, Спасибо,обязательно почитаю:)

Добавлено (12 Апреля 2014, 10:05)
---------------------------------------------
Никак не могу понять с мертвым актером:( У меня в квесте задача зачистить локацию,выполнение задачи я поставил через смерть созданного мной актера,прописываю в скрипте
(Begin OnDeath
if BoSRaiderUiton01.getDead
setObjectiveCompleted MyQuest 10 1
SetObjectiveDisplayed MyQuest 20 1
endif
end)
Сам скрипт прописываю в самом квесте в result script

Вот по любому сам скрипт неправильно пишу,как сделать это все рабочим???
и еще может можно сделать зачистку как то через радиус локации,а не через отдельного актера,например убить всех враждебных существ в этом радиусе и тогда задача будет выполнена?Просто никак не могу додуматься!


Spalny_Vagon  Offline  Сообщение №1028 написано: 12 апреля 2014, 06:49


Мастер


Цитата ncrrainjer

Сам скрипт прописываю в самом квесте в result script

Блок begin onDeath будет работать только в том случае, если скрипт висит на самом актере, и больше нигде и никак. При этом проверять условие гибели (if BoSRaiderUiton01.getDead) не нужно.
Должно быть или так (квестовый скрипт):
Код
Begin gamemode
if BoSRaiderUiton01.getDead  
setObjectiveCompleted MyQuest 10 1  
SetObjectiveDisplayed MyQuest 20 1  
endif  
end

или так (объектный скрипт на конкретном актере):
Код
Begin onDeath
setObjectiveCompleted MyQuest 10 1  
SetObjectiveDisplayed MyQuest 20 1  
end

Квестовый скрипт, если нужно убить n-ное число актеров, имеющих один и тот же ID, (все носители этого ID должны быть только в том месте, которое нужно зачистить, иначе будет путаница):
Код
Begin gamemode
if getDeadcount [actor ID] >= n  
setObjectiveCompleted MyQuest 10 1  
SetObjectiveDisplayed MyQuest 20 1  
endif  
end
Квестовый скрипт, если нужно убить несколько актеров с разными ID (все жертвы должны быть persistent reference):
Код
Begin gamemode
if BoSRaiderUiton01.getDead && BoSRaiderUiton02.getDead && BoSRaiderUiton03.getDead ;и так далее.
setObjectiveCompleted MyQuest 10 1  
SetObjectiveDisplayed MyQuest 20 1  
endif  
end

======================
Мод "Нью-Йорк" на русском: 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
ncrrainjer  Offline  Сообщение №1029 написано: 12 апреля 2014, 09:37 | Отредактировано: ncrrainjer - 12 апреля 2014, 09:36



199
Spalny_Vagon, Огромное спасибо,буду пробовать:)

Добавлено (12 Апреля 2014, 13:37)
---------------------------------------------
Как сделать,чтобы определенная ветка диалога появлялась на определенной стадии квеста или по его завершению?


ValLео  Offline  Сообщение №1030 написано: 12 апреля 2014, 13:31 | Отредактировано: ValLео - 12 апреля 2014, 13:39



42
Цитата ncrrainjer

Сам скрипт прописываю в самом квесте в result script


Результ-скрипт - это и есть результ-скрипт, т.е. - результирующий скрипт данной фразы, скрипт того, что происходит при произнесения этой фразы (в начале или конце - по выбору). В результ-скрипте не указываются типы блоков, а только функции. И если говорят, что нужно что-то прописать в квестовом скрипте - это имеют в виду именно квестовый скрипт, скрипт, который назначается квесту на первой вкладке настроек квеста.

ncrrainjer  Offline  Сообщение №1031 написано: 12 апреля 2014, 13:46



199
ValLео, Окей Окей,не нужно так нервничать:))Я же еще не настоящий мододел,а только учусь:)Беседкинские обучалки я читал,просто там только функции и их описание,а примеров мало:(Я не смог разобраться как их правильно применить,со временем надеюсь допетрю:)А за помощь большое спасибо:))

ValLео  Offline  Сообщение №1032 написано: 12 апреля 2014, 13:55 | Отредактировано: ValLео - 12 апреля 2014, 14:25



42
ncrrainjer, да я спокоен, как дохлый лев.
А насчет примеров - увы, невозможно в туториалах расписать все ситуации, которые начинающий мододел задумал. ;) Даются лишь общие принципы , а дальше уже надо "включать логику", как говорил доктор Быков.
Насчет подсчета количества убиенных рейдеров был разговор на форуме. Если надо - могу поискать страничку. А общий принцип именно таков, как расписал мастер Спальный Вагон.: если все рейдеры - это n-ое количество одних и тех же копий одного базового рейдера, то достаточно в скрипте указать проверку на количество убитых копий (GetDeadСount.Базовый рейдер >= n).
Если это разные рейдеры, разные базовые объекты - нужно каждой копии в локации дать свое уникальное реф-имя и перечислить эти имена в скрипте (if Первый рейдер.getDead И Второй рейдер.getDead И Третий рейдер.getDead и т.д.)

ncrrainjer  Offline  Сообщение №1033 написано: 12 апреля 2014, 14:33



199
ValLео, не не,с рейдерами я уже разобрался:)Поставил одного и на него скрипт повешал,все работает как надо:))

Добавлено (12 Апреля 2014, 18:32)
---------------------------------------------
А вот с диалогами чтото не выходит,ситуация такая нужно отдать предмет персонажу,но для этого нужно,чтобы этот персонаж об этом предмете заговорил.Я хочу добавить новый топик об этом предмете в GREETING на стадии квеста когда этот предмет нужно отдать.Ставлю все как ты написал,но тема не появляется:(И еще,для завершения квеста нужно написать на терминале отчет о выполнении задания,нужно,чтобы кнопочка написать отчет появилась тоже на определенной стадии квеста (пробовал через проверку на завершение квеста,ничего не выходит)

Добавлено (12 Апреля 2014, 18:33)
---------------------------------------------
Извиняюсь за надоедливость,но уж очень хочется нормально сделать этот квест:)))


ValLео  Offline  Сообщение №1034 написано: 12 апреля 2014, 14:50 | Отредактировано: ValLео - 12 апреля 2014, 19:42



42
Цитата ncrrainjer

нужно отдать предмет персонажу,но для этого нужно,чтобы этот персонаж об этом предмете заговорил


Предмет уже у ГГ :)
Тогда нужно создать приветственную фразу непися в Гриттинге (О! Я, вижу, у тебя есть Пип-Бой) и поставить для этой фразы  условие на наличие у ГГ данного предмета Непись произнесет данную фразу приветствия только тогда, когда у ГГ есть нужный предмет. В противном случае непись скажет другую, приписанную ему фразу.

ncrrainjer  Offline  Сообщение №1035 написано: 12 апреля 2014, 15:10 | Отредактировано: ncrrainjer - 12 апреля 2014, 15:00



199
ValLео, Эмм,Подробнее:Говорим с НПС который поведает нам,что через терминал можно взять задачу найти галодиск,идем к терминалу,берем задачу,находим галодиск и нужно его отдать начальному НПС.
В принципе не важно как эта ветка диалога у него окажется,просто я подумал,что если вставлять топик где нужно отдать галодиск в линейный диалог,то придется опять сначала прослушивать всю муть которую говорит НПС в начале!Поэтому и желательно сделать тему передачи галодиска отдельно.

Добавлено (12 Апреля 2014, 19:10)
---------------------------------------------
ValLео, Сори,не заметил ответ сразу:)А как быть с терминалом?


ValLео  Offline  Сообщение №1036 написано: 12 апреля 2014, 15:23 | Отредактировано: ValLео - 12 апреля 2014, 15:58



42
Проверять нет времени, но приблизительно так: Создаешь квест, создаешь топик Гриттинг. В Гриттинге создаешь первую приветственную фразу, типа: "- Привет, меня зовут старый Грег. Я ищу человека, который сможет подойти вон к тому терминалу и прочитать, что там написано." Отметить у фразы галочку Say to Once (говорить один раз). Добавляешь через Choice еще ветки диалога, если надо. Игрок после беседы идет к терминалу, читает запись. В результ-скрипте строчки терминала вставить команду о показе задания и установки квеста в некую стадию, скажем в стадию 10. Пока игрок не нашел голодиск - стадия квеста остается номер 10. Под эту стадию можно расписать дополнительно еще топики Грега ("Ты нашел голодиск?" или "Чё так долго ищешь?". Игрок идет туда - не знаю куда, находит винтовку старого Грега голодиск , при добавлении голодиска устанавливается стадия квеста, ну скажем в 20. Как устанавливается - варианты разные. Можно голодиску повесить скрипт, который при OnAdd меняет стадию квеста (рекомендуется), можно в квестовом скрипте вставить строчку на проверку у ГГ данного голодиска
(If Player.GetItemCount [ID голодиска] >= 1
SetStage [ID квеста] 20 ) (не рекомендуется, поскольку если голодиск по каким-либо причинам останется у игрока (мало ли, вдруг модмейкер забыл указать команду передачи диска от Гг к неписю) - то квест снова установится в стадию 20 и снова Грег будет произносить дежурную по этому поводу фразу)
Потом в топике Гриттинг создаешь еще одну фразу: "-О! ты принес голодиск!) и в условиях произнесения ставишь GetStage [ID квеста] == 20. И далее через Choice добавляешь нужные фразы последующей беседы. И никакой мешанины. Первую фразу и последующие ответы Гг будут показаны в начале, когда еще нет задания, другие гриттинги, у которых в условиях стоит стадия 10, будут произнесены, пока еще голодиск не найден, а третий гриттинг и дальнейшая беседа будут показаны если только стадия квеста будет 20 (Гг принес голодиск). Можно после приноса голодиска установить через результ-скрипт фразы стадию 30 и привязать к этой стадии еще диалоги: "-А! Помню-помню тебя! Это ты принес голодиск."
PS. Полное повторение туториала о старом Греге ;) Только вместо винтовки - голодиск и вместо добавления задания через диалог - добавление через строчку терминала.

ncrrainjer  Offline  Сообщение №1037 написано: 13 апреля 2014, 03:24 | Отредактировано: ncrrainjer - 13 апреля 2014, 04:15



199
ValLео, Спасибо огромное,сам бы не додумался.

Добавлено (13 Апреля 2014, 07:24)
---------------------------------------------
Всем привет,у меня опять вопрос:На завершающей стадии квеста (а завершить я его хочу через терминал) пишу в резалт скрипте в соответствующей менюшке терминала SetStageCompleted 40 1 (это последняя стадия квеста на ней стоит галочка Complete quest) НО,стадия 40 квеста завершается,а сам квест нет!Как сделать чтобы завершался и сам квест?

tundruck73  Offline  Сообщение №1038 написано: 13 апреля 2014, 03:59



ncrrainjer, в терминале напиши Setstage QuestName 40, а в самом квесте, во вкладке Quest Stage, на стадии 40 отметь "галкой" чекбокс Complete Quest. Примерно так:

Мосье, же не манж па сис жур...
Умер 23.04.2019
ncrrainjer  Offline  Сообщение №1039 написано: 13 апреля 2014, 04:08



199
tundruck73, Именно так все и сделано.И не работает,В предидущем сообщении я немного ошибся там не GetStage а SetStage

Добавлено (13 Апреля 2014, 08:08)
---------------------------------------------
Вот в резалт скрипте квеста у меня ничего не прописано,туда нужно что нибудь писать?Команда СетСтейдж у меня прописана в Резалте терминала.Или в этом то как раз и проблема?


tundruck73  Offline  Сообщение №1040 написано: 13 апреля 2014, 04:19 | Отредактировано: tundruck73 - 13 апреля 2014, 04:20



Да, наверное, в этом. Напиши там SetObjectiveCompleted QuestName ... 1; предыдущая стадия

Мосье, же не манж па сис жур...
Умер 23.04.2019
ncrrainjer  Offline  Сообщение №1041 написано: 13 апреля 2014, 04:25



199
tundruck73, оу,сейчас попробую

Добавлено (13 Апреля 2014, 08:25)
---------------------------------------------
tundruck73, Через SetStage заработало,по первому совету!Просто я сразу не понял,что SetStage имеется в виду как установка стадии:))Спасибо больщое.


ValLео  Offline  Сообщение №1042 написано: 13 апреля 2014, 04:44



42
Цитата ncrrainjer

е понял,что SetStage имеется в виду как установка стадии


Рейнджер, функции ведь не "от фонаря" названы именно так, а не иначе. Все переводится с английского вполне осмысленно.
Set - означает настроить, установить. Stage стадия. Поэтому SetStage - это установить стадию.
SetObjectiveCompleted - Установить цель (задание) как завершенное.
Ну и так далее. Поэтому читая тексты скриптов даже со словарем, можно вполне точно узнать, что скрипт делает.

ncrrainjer  Offline  Сообщение №1043 написано: 13 апреля 2014, 05:28 | Отредактировано: ncrrainjer - 13 апреля 2014, 05:28



199
ValLео, Не,я не об этом.Я понял,что значит эта функция,просто подумал сначала что имеется ввиду функция SetObjectiveDisplayed а не SetStage :)

ValLео  Offline  Сообщение №1044 написано: 13 апреля 2014, 05:46



42
ncrrainjer, значит, тебе просто надо хорошенько разобраться в терминологии, чтоб не путаться :)

ncrrainjer  Offline  Сообщение №1045 написано: 15 апреля 2014, 16:45



199
ValLео, Ну это конечно :) Надеюсь со временем разберусь :)

Добавлено (14 Апреля 2014, 08:14)
---------------------------------------------
А еще вот такой вопрос:Если нужно по сценарию квеста например убрать много объектов или наоборот поставить (по сценарию моего квеста Арсенал Уитона нужно зачистить,а потом якобы здание которое там стоит восстанавливают)Я реализовал это через ХМаркеры Т.Е. 2 маркера у меня убирают ненужные части (через Inable parrent) и еще два маркера достраивают этот дом.Так вот сам вопрос,можно ли реализовать то же самое только без ущерба игре и менее муторно и вообще как это грамотно сделать?

Добавлено (15 Апреля 2014, 20:45)
---------------------------------------------
Ребят,дайте пожалуйста пример использования команды SetGameDaysPassed?Или пример как сделать,чтобы какое нибудь действие выполнялось например через 3 дня?


ValLео  Offline  Сообщение №1046 написано: 15 апреля 2014, 16:58



42
Цитата ncrrainjer

Ребят,дайте пожалуйста пример использования команды SetGameDaysPassed?Или пример как сделать,чтобы какое нибудь действие выполнялось например через 3 дня?

КАРТОТЕКА

ncrrainjer  Offline  Сообщение №1047 написано: 16 апреля 2014, 13:35



199
ValLео, Спасибо большое:)

BigBadBoss  Offline  Сообщение №1048 написано: 22 апреля 2014, 19:56 | Отредактировано: BigBadBoss - 22 апреля 2014, 19:57


Добрый


412
Скажите, добрые люди. Как можно убрать с главного интерфеиса цифры и индикатор, который показывает сколько радиаций у ГГ накопилось и какую дозу он получает на данный момент в секунду?
 Ну индикатор можно стереть в фаиле текстуры. Но вот что делать с цифрами?

Вдохни… взгляни вокруг, поверь в спасенье,
Ведь между злом - песчинки доброты…
И вспомни, прочитай в безбрежном небе,
Что кто-то дышит, пока дышишь ты...

© Copyright: Росана, 2009
Ipatow  Offline  Сообщение №1049 написано: 22 апреля 2014, 20:37 | Отредактировано: Ipatow - 22 апреля 2014, 20:38



Цитата BigBadBoss

Как можно убрать с главного интерфеиса цифры и индикатор, который показывает сколько радиаций у ГГ накопилось и какую дозу он получает на данный момент в секунду?

Насколько я помню, моды вроде DUI позволяют динамически в игре, в частности, отключать панели интерфейса. Если не хочется ставить такой мод - сам поправь xml в папке Data\Menus... Оно наповал недокументированно, но для такой простой задачи достаточно интуитивно понятно. Можно скрыть ненужную панель, можно задвинуть её за край экрана...

BigBadBoss  Offline  Сообщение №1050 написано: 22 апреля 2014, 20:47 | Отредактировано: BigBadBoss - 22 апреля 2014, 23:20


Добрый


412
Да. Документаций мало. Ладно. Что-нить попереставляю, что будет казаться логическим.

 
Всё.Получилось. Надо было только в пунктах "visible" поставить "false".

Вдохни… взгляни вокруг, поверь в спасенье,
Ведь между злом - песчинки доброты…
И вспомни, прочитай в безбрежном небе,
Что кто-то дышит, пока дышишь ты...

© Copyright: Росана, 2009
Форум » Fallout 3 » Мастерская » Помощь по моддингу (Помощь в нелегком модмейкерском деле)
Поиск:





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