Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1471
написано: 29 июня 2015, 17:06
| Отредактировано: ITU - 29 июня 2015, 17:07
if IsActionRef player == 1 ShowMessage MyDoorLiftMessage set init to 1 endif
end
begin gamemode
set Button to GetButtonPressed
if ( init == 1 ) if ( Button == 0 ) ; На первый этаж Player.moveto MyMarkerStageA Set init to 0 elseif ( Button == 1 ) ; На второй этаж Player.moveto MyMarkerStageB Set init to 0 elseif ( Button == 2 ) ; На третий этаж Player.moveto MyMarkerStageC Set init to 0 elseif ( Button == 3 ); На четвертый этаж Player.moveto MyMarkerStageD Set init to 0
else Set init to 0 endif endif
end
MyMarkerStageA это XMarkerHeading на каждом этаже И еще можно вставить после телепорта команду autosave, для автосохранений
Или вариант наделать куча дверей и вызывать их MyDoor.Activate 1
Изменение репутации для пользователя BsX
BsXOffline
Сообщение №1472
написано: 6 июля 2015, 11:39
| Отредактировано: BsX - 6 июля 2015, 11:40
вы в конце end не забыли? в сприптах есть открывающие функцию begin и закрывающие end с условиями if так же, закрывающие endif
можно сократить условие if в данном скрипте, я первое попавшие меню скопировал if ( Button == 0 ) && ( init == 1 ) и elseif ( Button == 2 ) && ( init == 1 ) тогда уберется один endif
Как сделать сортировку предметов по полочкам, как, например, в моде Underwater Home?
Сложно и муторно) Лучше самому глянуть от туда скрипты
Создать активаторы с переделанной моделью предмета, с удалением веса и возможности двигаться Создать скрипт раскладывания на эти полки, собственно можно глянуть и в моем домике, и в Underwater Home (примерное содержание: если есть предмет в контейнере, то enable наши активаторы-предметы) Создать скрипт подбирания предметов (почти просто активирование и добавления предмета в инвентарь и disable, только для сокращения количества скриптов, все помещено в один, с словиям, что если это этот предмет, то получить нужный предмет) Расставить эти предметы в гекке, сделать activation ref link по порядку между всеми предметами
ITU, ясно, гляну, попробую. Спасибо, друг, очень помог.
Добавлено (06 Июля 2015, 17:12) --------------------------------------------- ITU, лифт не хочет перемещать на другой уровень, только на тот, на котором я нахожусь. Что не так?
scn Vault23ElevatorScript
short init short Button
begin OnActivate
if IsActionRef player == 1 ShowMessage Vault23ElevatorMessage set init to 1 endif
end
begin gamemode
set Button to GetButtonPressed
if ( init == 1 ) if ( Button == 0 ) ; Player.moveto ElevatorMarkerA Set init to 0 elseif ( Button == 1 ) ; Player.moveto ElevatorMarkerB Set init to 0
else Set init to 0 endif
Я тебя проинтегрировал, я тебя и продифференцирую...
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №1477
написано: 6 июля 2015, 16:03
| Отредактировано: Joopeeter - 6 июля 2015, 16:05
Буквально в двух шагах идёт похожее обсуждение (отсюда и ниже). Возможно, пригодится. P.S. Это не считая десятков, если не сотен, похожих обсуждений в древних и не очень древних глубинах форума.
Практически в любом языке программирования неразумно давать объектам имена, начинающиеся с цифр. Да, это может и корректно работать, но не реже приводит к проблемам по ходу развития проекта... Так или иначе, GECK не вопринял 0bosgun как имя референса. Если референс с таким именем существует и имеет флаг Persistent - дело явно в имени объекта.
Практически в любом языке программирования неразумно давать объектам имена, начинающиеся с цифр. Да, это может и корректно работать, но не реже приводит к проблемам по ходу развития проекта... Так или иначе, GECK не вопринял 0bosgun как имя референса. Если референс с таким именем существует и имеет флаг Persistent - дело явно в имени объекта.
Понял. спасибо А где можно взять информацию о том, как привязать маркер к скрипту PlaseAtMe. А то на офф сайте я не нашел
Ты размещаешь в мире активатор - простой прямоугольный триггер. Где-то рядом ставишь, например, X-маркер. В свойствах референса твоего активатора на закладке Linked Ref выбираешь из списка этот маркер - или есть кнопка для тех, кто метко орудует мышкой в рендер-окошке - главное что в итоге автиватор оказывается привязан к маркеру. В рендер-окошке такие связи отображаются линиями-стрелочками (цвет стрелки выбирается в свойствах линка). В скрипте активатора дальше пишешь что-то вроде
SCRIPTNAME tmpTriggerScript REF tmpRef SHORT tmpFlagOdd BEGIN OnTriggerEnter IF (IsActionRef Player) IF tmpFlagOdd == 0 SET tmpFlagOdd TO 1 SET tmpRef TO GetLinkedRef tmpRef.PlaceAtMe CrRadroach 2 ELSE SET tmpFlagOdd TO 0 ENDIF ENDIF END
и при каждом нечётном входе ГГ в триггер на маркере появляются два таракана
В случае с квестами это однозначно работает не корректно. В частности, результ-скрипты диалогов в упор не видят квесты, ID которых начинаюся с цифры. А компилируются без проблем.
====================== Мод "Нью-Йорк" на русском: 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
Можешь подсказать мне, как сделать, чтоб нпс стоял как вкопанный столб, когда по нему стреляют враги.
Извини за волну вопросов. Просто сайт, откуда я брал все инструкции, не работает уже 2 дня
Добавлено (10 Июля 2015, 22:04) --------------------------------------------- Я тут со скриптами мусолюсь. И у меня есть одна проблема: почему скрипт, которыя я щас напишу, работает частично?
Вот этот кусок работает: scn 0test2
short DoOnce float timer
begin ontriggerenter player if ( Doonce == 0 ) set Timer to 2 set DoOnce to 1 disablePlayerControls player.addscriptpackage MQ08PlayerFallsDownPackage aoutcastZ.enable aoutcastX.enable
endif endif
А это - нет: if ( timer <= 0 && Doonce == 1 ) enablePlayerControls Player.RemoveScriptPackage MQ08PlayerFallsDownPackage endif end
Может кто-то сталкивался?
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №1486
написано: 10 июля 2015, 20:49
| Отредактировано: Joopeeter - 10 июля 2015, 20:55
Хоть и не меня спрашивали... Из художественного описания не совсем понятно, должен ли NPC отстреливаться не сходя с места или должен героически стоять столбом и не обращать внимания на пули. В первом случае нужен пакет (обычно Guard) с радиусом 0 и галкой Continue during combat. Во втором случае SetRestrained 1 в нужный момент. А то ещё можно вообще сделать его как деревянную статую (или бетонную, не знаю какой столб имелся ввиду). И вкопать в нужном месте.
Joopeeter, 0_o что значит запускать таймер? Я думал, что команда SetTimer to 2 и запускает таймер на 2 секунды, а отсчет идет на убывание. По скрипту вижу, что GetSecondsPassed запускает этот процесс, да?
Я хочу, чтоб они стояли и стреляли, а не бегали по карте в поисках укрытия. А то вечно разбегаются по всей карте, как тараканы. ( это я о братстве)
Краем уха слышал, что в скайримовском Папирусе таймеры вот так просто запускаются, останавливаются и ставятся на паузы. В Фоллауте всё это надо делать вручную. Функция GetSecondsPassed возвращает время, прошедшее с момента последнего вызова функции GetSecondsPassed том же скрипте. То есть если скрипт крутится 60 раз в секунду, то первый раз GetSecondsPassed будет 0, а потом где-то в районе 1/60 секунды.
нужен пакет (обычно Guard) с радиусом 0 и галкой Continue during combat
В бою радиус охраны автоматически увеличивается на какую-то фиксированную величину (четыре ярда?), то есть и в позе Guard он всё равно не совсем как прибитый к полу стоит - особенно против рукопашного противника.
Romanko, есть еще команда SetActorsAI, которая выключает/выключает AI(поведения) НПЦ, но с ней есть один глюк, выключать надо после нескольких секунд после появления (нахождения) рядом ГГ, иначе возникают некоторые глюки, движок игры не может поставить НПЦ в правильную позу. Да и эта команда отключает любое поведение совсем, т.е. НПЦ будет стоять не просто как столб, а словно не живые, используется для маникенов
Этот вопрос уже вышел за рамочки темы - согласись, к скриптам оно уже не имеет отношения. Если захочется обсудить стили подробнее, переберись в одну из соседних более подходящих тем...
Разумеется, новый объект практически любого типа создаётся правым кликом мышкой на списке таких объектов в дереве объектов и выборе варианта "New"; однако в случаях, подобных этому, когда у объекта немеряная куча параметров, большинство которых ты не понимаешь (а некоторые параметры стилей не понимает вообще никто), будет разумно сделать копию существующего объекта и подправить какие-то мелочи, ради которых тебе новый объект и понадобился. Меняешь имя (EditorID) подходящего стиля на то, которое хочешь дать своему стилю, и по выходу из редактирования отвечаешь "да, я хочу создать новый объект".
О назначении боевого стиля персонажу. Каждый персонаж имеет "врождённый" стиль, который прописан на закладке параметров персонажа Traits. Кроме этого, если активному пакету поведения назначен определённый стиль, то на время действия пакета именно этот стиль будет действовать вместо "врождённого". И, наконец, чтобы хоть как-то притянуть разговор за уши к теме - имеется скриптовая функция SetCombatStyle, которая переназначает "врождённый" стиль персонажа. Эта функция меняет стиль безвозвратно, заданный стиль по-прежнему уступает стилю пакета, если пакет имеет стиль, и вдобавок вызов этой функции запускает процесс переоценки экипировки NPC, печально знаменитый многократным наложением объектных эффектов - с учётом всего этого всё-таки нельзя не признать, что порой эта функция незаменима.
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №1493
написано: 11 июля 2015, 11:44
| Отредактировано: Joopeeter - 11 июля 2015, 11:45
В бою радиус охраны автоматически увеличивается на какую-то фиксированную величину (четыре ярда?), то есть и в позе Guard он всё равно не совсем как прибитый к полу стоит - особенно против рукопашного противника.
Хм, действительно не прибитый... 4 ярда пакета Guard, конечно, лучше, чем чуть ли не целая ячейка при других пакетах, но я ж помню, что получалась иногда и неподвижность Припоминая, что непись, находящийся в пути (пакеты Patrol и Travel) с установленной галкой Continue during combat, обычно всё-таки продолжает идти по маршруту, а не куда ему взбредёт, попробовал использовать это. Ставим рядом два маркера, слинковываем и запускаем непися в повторяющийся патруль с радиусом 0 и галкой Continue during combat. Если непися атаковать, он начинает быстро-быстро бегать между маркерами, постреливая в противника. Сближаем маркеры на расстояние 100-150 единиц. Атакованный непись перестаёт бегать и начинает постреливать, стоя на одном месте. В мирное время такой патруль выглядит как нервное расхаживание взад-вперёд. Сближаем маркеры ещё. Мирный непись перестаёт ходить, но если его атаковать, он начинает бегать искать укрытие. Также если установить Idle Time на маркерах (для снижения нервозности хождения), то непись, атакованный во время простоя на маркере, бежит искать укрытие. Take Cover Chance, возможно, отбивает желание у непися найти укрытие, но желание время от времени перебежать на ровном месте влево-вправо-вперёд-назад, насколько я заметил, остаётся.
Всем привет! как и многим мне захотелось написать скрипт на переключение одиночного выстрела на автоматический, но проблема в том что я с криптами полный ноль хотя тут есть некоторые пояснения по этому поводу.Но сколько я не пытаюсь это понять только совсем запутался, вот в чем моя просьба к знающим написать мне этот скрипт и немного пояснить где я должен поставить только ID своего оружие .Заранее спасибо .
Изменение репутации для пользователя johnnyclemens
johnnyclemensOffline
Сообщение №1495
написано: 3 августа 2015, 11:09
| Отредактировано: johnnyclemens - 3 августа 2015, 11:11
1. простой. 1.1. Есть ли сисок скриптов для команды AddScriptPackage? 1.2. в какой файле прописаны эти паки и какой прогой они открываются?
2. сложный. Исходные данные. Есть помещение (в принципи любое), в котором находится ГГ. Есть НПС (не компаньоны), призванные консольной окмандой. Задача. Нужен скрипт (через диалог или банально - через команду AddScriptPackage) который заставит этих НПС находится в данном помещении. Ходить, лежать, сидеть и т.д., но не убегать, как сейчас, к месту базовой дислокации.
в какой файле прописаны эти паки и какой прогой они открываются?
Паки - то бишь пакеты поведения, прописаны в мастер файле игры falloutNV.esm а также в файлах-плагинах любых модов, в которых есть созданные авторами мода эти самые пакеты. Открываются в редакторе ГЕКК . Подробно о пакетах поведения читаем ЗДЕСЬ или еще подробней, с "разжевыванием" всех тонкостей - мануалы по моддингу на Тиаруме и особенно руководство по созданию полноценного компаньона..
Ой, всё...
Изменение репутации для пользователя johnnyclemens
Спасибо за разъяснения. Я почему то посчитал, что AddScriptPackage это консольная команда на подобие resurrect или addчего-нибудь. Т.е. выбираешь объект, вбиваешь AddScriptPackage ХХХХ, где ХХХХ - тот самый пакет поведения, готовый по умолчанию. Не прав?
Судя по всему, в том что увидел по ссылке как раз есть и перечень возможных действий. Спасибо!
Изменение репутации для пользователя EngineeringGuy
Возможно_ли переписать данный скрипт таким образом, что_бы контейнер с лутом не опустошался игрой, а сохранял всё в него вложенное
Код
scn MyBackpackScript
ref aactorref ref relcontainer
begin OnActivate set aactorref to GetActionRef if( aactorref.IsSneaking ) if (relcontainer) relcontainer.RemoveAllItems aactorref, 1 relcontainer.disable relcontainer.markfordelete set relcontainer to 0 endif Activate else if( relcontainer == 0 ) set relcontainer to placeatme MyBackpackContainer 1 endif relcontainer.Activate aactorref 1 endif end
Возможно_ли переписать данный скрипт таким образом, что_бы контейнер с лутом не опустошался игрой, а сохранял всё в него вложенное
Чтобы сохранял - тут как-то и речи нет, поскольку контейнер постоянно уничтожается. Можно сделать так, чтобы он уничтожался вместе с содежимым, но, наверное, это не то, что ты хочешь. Если ты хочешь, чтобы это выглядело так, будто персонаж переносит в рюкзаке какое-то содержимое, не идентичное начинке его собственного инвентаря - нужно в принципе переделывать логику работы, и одним скриптом тут не обойтись.
Изменение репутации для пользователя EngineeringGuy