Вверх Вниз


Модератор форума: Ipatow, КсюXa, ApeX  
Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)
Скрипты
a3apbi4  Offline Сообщение №1 написано: 07 Декабря 2010 в 21:01


Странник


11
Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.




ITU  Offline Сообщение №1471 написано: 29 Июня 2015 в 20:06 | Отредактировано: ITU - Понедельник, 29 Июня 2015, 20:07



995
BsX, сделать обычное скриптовое меню



MyMarkerStageA это XMarkerHeading на каждом этаже
И еще можно вставить после телепорта команду autosave, для автосохранений

Или вариант наделать куча дверей и вызывать их MyDoor.Activate 1

BsX  Offline Сообщение №1472 написано: 06 Июля 2015 в 14:39 | Отредактировано: BsX - Понедельник, 06 Июля 2015, 14:40


Полковник с парада


33
Как сделать, чтобы при нажатие на кнопку дверь блокировалась и ее нельзя было бы открыть с руки?

Добавлено (06 Июля 2015, 14:39)
---------------------------------------------
ITU, вот что пишет.

Я тебя проинтегрировал, я тебя и продифференцирую...
ITU  Offline Сообщение №1473 написано: 06 Июля 2015 в 16:47



995
Цитата BsX ()
Как сделать, чтобы при нажатие на кнопку дверь блокировалась и ее нельзя было бы открыть с руки?

ввести еще переменную в скрипте двери
short block

у кнопки в скрипте set refID_двери.block to 1

в скрипте двери добавить if IsActionRef player == 1 && block == 0

Цитата BsX ()
вот что пишет

вы в конце end не забыли?
в сприптах есть открывающие функцию begin
и закрывающие end
с условиями if так же, закрывающие endif

можно сократить условие if в данном скрипте, я первое попавшие меню скопировал
if ( Button == 0 ) && ( init == 1 )
и
elseif ( Button == 2 ) && ( init == 1 )
тогда уберется один endif

BsX  Offline Сообщение №1474 написано: 06 Июля 2015 в 16:49


Полковник с парада


33
Как сделать сортировку предметов по полочкам, как, например, в моде Underwater Home?

Я тебя проинтегрировал, я тебя и продифференцирую...
ITU  Offline Сообщение №1475 написано: 06 Июля 2015 в 16:55 | Отредактировано: ITU - Понедельник, 06 Июля 2015, 16:55



995
Цитата BsX ()
Как сделать сортировку предметов по полочкам, как, например, в моде Underwater Home?

Сложно и муторно)
Лучше самому глянуть от туда скрипты

Создать активаторы с переделанной моделью предмета, с удалением веса и возможности двигаться
Создать скрипт раскладывания на эти полки, собственно можно глянуть и в моем домике, и в Underwater Home (примерное содержание: если есть предмет в контейнере, то enable наши активаторы-предметы)
Создать скрипт подбирания предметов (почти просто активирование и добавления предмета в инвентарь и disable, только для сокращения количества скриптов, все помещено в один, с словиям, что если это этот предмет, то получить нужный предмет)
Расставить эти предметы в гекке, сделать activation ref link по порядку между всеми предметами

BsX  Offline Сообщение №1476 написано: 06 Июля 2015 в 17:12


Полковник с парада


33
ITU, ясно, гляну, попробую. Спасибо, друг, очень помог.

Добавлено (06 Июля 2015, 17:12)
---------------------------------------------
ITU, лифт не хочет перемещать на другой уровень, только на тот, на котором я нахожусь. Что не так?


Я тебя проинтегрировал, я тебя и продифференцирую...
JupiterJour  Offline Сообщение №1477 написано: 06 Июля 2015 в 19:03 | Отредактировано: Joopeeter - Понедельник, 06 Июля 2015, 19:05


_


1037
Цитата BsX ()
Как сделать сортировку предметов по полочкам

Буквально в двух шагах идёт похожее обсуждение (отсюда и ниже). Возможно, пригодится.
P.S. Это не считая десятков, если не сотен, похожих обсуждений в древних и не очень древних глубинах форума. :)

ITU  Offline Сообщение №1478 написано: 08 Июля 2015 в 10:43



995
BsX

вы как-то не полный код скопировали?
ну сделайте так...

Код
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 )  &&  ( Button == 0 )  
  Player.moveto ElevatorMarkerA   
  Set init to 0   

  elseif ( init == 1 )  && ( Button == 1 ) ;  
  Player.moveto ElevatorMarkerB   
  Set init to 0   

  else   
  Set init to 0   
  endif

end


в Vault23ElevatorMessage
добавьте еще условия GetInCell Ид_Вашего_этажа != 1 , для каждого этажа
чтоб не было в меню текущего этажа

Ipatow  Offline Сообщение №1479 написано: 08 Июля 2015 в 20:12 | Отредактировано: Ipatow - Среда, 08 Июля 2015, 20:17



2337
Цитата
SetAtMe мне не подходит из-за отсутствия настройки места спавна.
PlaceAtMe прекрасно подходит, поскольку место спона прекрасно настраивается. Триггер ведь не вдруг сам собой возник, его руками установили - значит, руками установили и точку спона. Маркер какой-нибудь. А на тот случай, если таких триггеров расставлена по пустошам куча и маркеров спона расставлена такая же куча - маркер прилинкован к триггеру, чтобы скрипт триггера взял себя за GetLinkedRef и нашпиговал результирующее место неписями... Хочется несколько маркеров? Свяжи цепочкой и тащи дедку за репкой.

Цитата
NPSID.enable у меня не работает: гек выдает ошибку
Референс, к которому по имени обращается скрипт, должен быть Persistent. Поставь флажок - ошибка исчезнет.

Romanko  Offline Сообщение №1480 написано: 09 Июля 2015 в 18:47


Странник


10
Цитата Ipatow ()
Референс, к которому по имени обращается скрипт, должен быть Persistent. Поставь флажок - ошибка исчезнет.
Где моя ошибка? Вот скрин глянь http://savepic.su/5830658.png

Ipatow  Offline Сообщение №1481 написано: 09 Июля 2015 в 19:29



2337
Цитата Romanko ()
Где моя ошибка?
Практически в любом языке программирования неразумно давать объектам имена, начинающиеся с цифр. Да, это может и корректно работать, но не реже приводит к проблемам по ходу развития проекта... Так или иначе, GECK не вопринял 0bosgun как имя референса. Если референс с таким именем существует и имеет флаг Persistent - дело явно в имени объекта.

Romanko  Offline Сообщение №1482 написано: 09 Июля 2015 в 19:51


Странник


10
Цитата Ipatow ()
Практически в любом языке программирования неразумно давать объектам имена, начинающиеся с цифр. Да, это может и корректно работать, но не реже приводит к проблемам по ходу развития проекта... Так или иначе, GECK не вопринял 0bosgun как имя референса. Если референс с таким именем существует и имеет флаг Persistent - дело явно в имени объекта.
Понял. спасибо
А где можно взять информацию о том, как привязать  маркер к скрипту PlaseAtMe. А то на офф сайте я не нашел

Ipatow  Offline Сообщение №1483 написано: 09 Июля 2015 в 20:47



2337
Цитата Romanko ()
как привязать маркер к скрипту
Ты размещаешь в мире активатор - простой прямоугольный триггер. Где-то рядом ставишь, например, X-маркер. В свойствах референса твоего активатора на закладке Linked Ref выбираешь из списка этот маркер - или есть кнопка для тех, кто метко орудует мышкой в рендер-окошке - главное что в итоге автиватор оказывается привязан к маркеру. В рендер-окошке такие связи отображаются линиями-стрелочками (цвет стрелки выбирается в свойствах линка). В скрипте активатора дальше пишешь что-то вроде


и при каждом нечётном входе ГГ в триггер на маркере появляются два таракана

Spalny_Vagon  Offline Сообщение №1484 написано: 09 Июля 2015 в 21:10





989
Цитата Ipatow ()
Да, это может и корректно работать
В случае с квестами это однозначно работает не корректно. В частности, результ-скрипты диалогов в упор не видят квесты, ID которых начинаюся с цифры. А компилируются без проблем.

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
Romanko  Offline Сообщение №1485 написано: 10 Июля 2015 в 22:04


Странник


10
Ipatow, все понял, спасибо.

Можешь подсказать мне, как сделать, чтоб нпс стоял как вкопанный столб, когда по нему стреляют враги.

Извини за волну вопросов. Просто сайт, откуда я брал все инструкции, не работает уже 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  Offline Сообщение №1486 написано: 10 Июля 2015 в 23:49 | Отредактировано: Joopeeter - Пятница, 10 Июля 2015, 23:55


_


1037
Цитата Romanko ()
А это - нет

А что это, которое не работает, делает в блоке Begin OnTriggerEnter player? Игрок вошёл в триггер, упал и лежит себе полёживает. Лёжа в триггере игрок по новой в него ну никак не войдёт. Это раз.
Два - таймер при входе в триггер устанавливается на 2, а условие у неработающей части - таймер ноль или меньше. А кто его будет убавлять до нуля? Пушкин?
Я так понимаю, требуется что-то типа такого:
Код
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    
End

Begin GameMode
if DoOnce == 1
set timer to timer - GetSecondsPassed
if timer <= 0
enablePlayerControls   
Player.RemoveScriptPackage MQ08PlayerFallsDownPackage   
set DoOnce to 2
endif
endif   
End


Цитата Romanko ()
нпс стоял как вкопанный столб

Хоть и не меня спрашивали...
Из художественного описания не совсем понятно, должен ли NPC отстреливаться не сходя с места или должен героически стоять столбом и не обращать внимания на пули.
В первом случае нужен пакет (обычно Guard) с радиусом 0 и галкой Continue during combat.
Во втором случае SetRestrained 1 в нужный момент.
А то ещё можно вообще сделать его как деревянную статую (или бетонную, не знаю какой столб имелся ввиду). И вкопать в нужном месте.

Romanko  Offline Сообщение №1487 написано: 11 Июля 2015 в 00:43


Странник


10
Joopeeter, 0_o что значит запускать таймер? Я думал, что команда SetTimer to 2 и запускает таймер на 2 секунды, а отсчет идет на убывание.
По скрипту вижу, что GetSecondsPassed запускает этот процесс, да?

Я хочу, чтоб они стояли и стреляли, а не бегали по карте в поисках укрытия. А то вечно разбегаются по всей карте, как тараканы. ( это я о братстве)

И спасибо за ответ.

JupiterJour  Offline Сообщение №1488 написано: 11 Июля 2015 в 01:27


_


1037
Краем уха слышал, что в скайримовском Папирусе таймеры вот так просто запускаются, останавливаются и ставятся на паузы. В Фоллауте всё это надо делать вручную.
Функция GetSecondsPassed возвращает время, прошедшее с момента последнего вызова функции GetSecondsPassed том же скрипте. То есть если скрипт крутится 60 раз в секунду, то первый раз GetSecondsPassed будет 0, а потом где-то в районе 1/60 секунды.

Ipatow  Offline Сообщение №1489 написано: 11 Июля 2015 в 01:58



2337
Цитата Romanko ()
Я хочу, чтоб они стояли и стреляли, а не бегали по карте в поисках укрытия. А то вечно разбегаются по всей карте, как тараканы.
Если назначенный им стиль боя (Combat Style) устанавливает шанс на "а не перебежать ли мне в укрытие?" (Take Cover Chance) в ноль - то шансов, что боец в укрытие побежит, не будет. Правда, всё равно останется вероятность, что он решит в принципе дать дёру: самоуверенность (Confidence) Foolhardy в теории означает "никогда ни от кого не сбегать", но на практике кто-то тут у нас демонстрировал, что рано или поздно сбегает даже самый упёртый вояка. Правда, там, по-моему, чуть ли не на часы непрерывного боя счёт шёл...

Цитата Joopeeter ()
нужен пакет (обычно Guard) с радиусом 0 и галкой Continue during combat
В бою радиус охраны автоматически увеличивается на какую-то фиксированную величину (четыре ярда?), то есть и в позе Guard он всё равно не совсем как прибитый к полу стоит - особенно против рукопашного противника.

Romanko  Offline Сообщение №1490 написано: 11 Июля 2015 в 08:04


Странник


10
Ipatow,  а как создать комбат стайл?

ITU  Offline Сообщение №1491 написано: 11 Июля 2015 в 08:15 | Отредактировано: ITU - Суббота, 11 Июля 2015, 08:18



995
Romanko, есть еще команда SetActorsAI, которая выключает/выключает AI(поведения)  НПЦ, но с ней есть один глюк, выключать надо после нескольких секунд после появления (нахождения) рядом ГГ, иначе возникают некоторые глюки, движок игры не может поставить НПЦ в правильную позу.
Да и эта команда отключает любое поведение совсем, т.е. НПЦ будет стоять не просто как столб, а словно не живые, используется для маникенов

Ipatow  Offline Сообщение №1492 написано: 11 Июля 2015 в 12:30



2337
Цитата Romanko ()
как создать комбат стайл?
Этот вопрос уже вышел за рамочки темы - согласись, к скриптам оно уже не имеет отношения. Если захочется обсудить стили подробнее, переберись в одну из соседних более подходящих тем...

Разумеется, новый объект практически любого типа создаётся правым кликом мышкой на списке таких объектов в дереве объектов и выборе варианта "New"; однако в случаях, подобных этому, когда у объекта немеряная куча параметров, большинство которых ты не понимаешь (а некоторые параметры стилей не понимает вообще никто), будет разумно сделать копию существующего объекта и подправить какие-то мелочи, ради которых тебе новый объект и понадобился. Меняешь имя (EditorID) подходящего стиля на то, которое хочешь дать своему стилю, и по выходу из редактирования отвечаешь "да, я хочу создать новый объект".

О назначении боевого стиля персонажу. Каждый персонаж имеет "врождённый" стиль, который прописан на закладке параметров персонажа Traits. Кроме этого, если активному пакету поведения назначен определённый стиль, то на время действия пакета именно этот стиль будет действовать вместо "врождённого". И, наконец, чтобы хоть как-то притянуть разговор за уши к теме - имеется скриптовая функция SetCombatStyle, которая переназначает "врождённый" стиль персонажа. Эта функция меняет стиль безвозвратно, заданный стиль по-прежнему уступает стилю пакета, если пакет имеет стиль, и вдобавок вызов этой функции запускает процесс переоценки экипировки NPC, печально знаменитый многократным наложением объектных эффектов - с учётом всего этого всё-таки нельзя не признать, что порой эта функция незаменима.

JupiterJour  Offline Сообщение №1493 написано: 11 Июля 2015 в 14:44 | Отредактировано: Joopeeter - Суббота, 11 Июля 2015, 14:45


_


1037

Menipul  Offline Сообщение №1494 написано: 12 Июля 2015 в 22:36


Странник


17
Всем привет! как и многим мне захотелось написать скрипт на переключение одиночного выстрела на автоматический, но проблема в том что я с криптами полный ноль хотя тут есть некоторые пояснения по этому поводу.Но сколько я не пытаюсь это понять только совсем запутался, вот в чем моя просьба к знающим написать мне этот скрипт и немного пояснить где я должен поставить только ID своего оружие .Заранее  спасибо .

johnnyclemens  Offline Сообщение №1495 написано: 03 Августа 2015 в 14:09 | Отредактировано: johnnyclemens - Понедельник, 03 Августа 2015, 14:11


Странник


3
2 вопроса.

1. простой.
1.1. Есть ли сисок скриптов для команды AddScriptPackage?
1.2. в какой файле прописаны эти паки и какой прогой они открываются?

2. сложный.
Исходные данные. Есть помещение (в принципи любое), в котором находится ГГ. Есть НПС (не компаньоны), призванные консольной окмандой.
Задача. Нужен скрипт (через диалог или банально - через команду AddScriptPackage) который заставит этих НПС находится в данном помещении. Ходить, лежать, сидеть и т.д., но не убегать, как сейчас, к месту базовой дислокации.

Есть у кого нибудь мысли?

Спасибо.

КсюXa  Offline Сообщение №1496 написано: 03 Августа 2015 в 14:51


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


1142
Цитата johnnyclemens ()
1.1. Есть ли сисок скриптов для команды AddScriptPackage?

Что значит - список скриптов? AddScriptPackage, как ты сам написал, - это команда. Скриптовая команда, которая прописывается в каком-нибудь (любом) скрипте, который ты хочешь "заставить" работать. Т.е. - повесил свой скрипт на какой-нибудь, скажем, свой квест и написал команду, типа:
Если данный момент происходит бла-бла-бла
Добавить неписю по имени ХХХ пакет поведения по имени YYY

(имя - это editor ID объекта. Неважно, какого объекта- непися, пакета или одежды и т.д.)
Цитата johnnyclemens ()
в какой файле прописаны эти паки и какой прогой они открываются?

Паки - то бишь пакеты поведения, прописаны в мастер файле игры falloutNV.esm а также в файлах-плагинах любых модов, в которых есть созданные авторами мода эти самые пакеты. Открываются в редакторе ГЕКК .
Подробно о пакетах поведения читаем ЗДЕСЬ
или еще подробней, с "разжевыванием" всех тонкостей - мануалы по моддингу на Тиаруме и особенно руководство по созданию полноценного компаньона..

Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
johnnyclemens  Offline Сообщение №1497 написано: 04 Августа 2015 в 13:49


Странник


3
Спасибо за разъяснения.
Я почему то посчитал, что AddScriptPackage это консольная команда на подобие resurrect или addчего-нибудь. Т.е. выбираешь объект, вбиваешь AddScriptPackage ХХХХ, где ХХХХ - тот самый пакет поведения, готовый по умолчанию. Не прав?

Судя по всему, в том что увидел по ссылке как раз есть и перечень возможных действий. Спасибо!

EngineeringGuy  Offline Сообщение №1498 написано: 05 Августа 2015 в 18:00


Странник


37
Возможно_ли переписать данный скрипт таким образом,
что_бы контейнер с лутом не опустошался игрой, а сохранял всё в него вложенное


Ipatow  Offline Сообщение №1499 написано: 05 Августа 2015 в 21:54



2337
Цитата EngineeringGuy ()
Возможно_ли переписать данный скрипт таким образом,
что_бы контейнер с лутом не опустошался игрой, а сохранял всё в него вложенное
Чтобы сохранял - тут как-то и речи нет, поскольку контейнер постоянно уничтожается. Можно сделать так, чтобы он уничтожался вместе с содежимым, но, наверное, это не то, что ты хочешь. Если ты хочешь, чтобы это выглядело так, будто персонаж переносит в рюкзаке какое-то содержимое, не идентичное начинке его собственного инвентаря - нужно в принципе переделывать логику работы, и одним скриптом тут не обойтись.

EngineeringGuy  Offline Сообщение №1500 написано: 06 Августа 2015 в 03:28


Странник


37
Ipatow, ну, а если сделать как в этом моде: выкинул - активировал - мессаг с опциями: поднять, открыть, оставить

Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)
Поиск: