Модератор форума: КсюXa, ApeX  
Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)

Скрипты
a3apbi4  Offline  Сообщение №1 написано: 7 декабря 2010, 18:01



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




Cleric  Offline  Сообщение №841 написано: 20 октября 2012, 22:00



155
rizys-mod,
скриптом действие на 1 раз сделать.
Скрипт в студию, если можно.

KAIN48  Offline  Сообщение №842 написано: 20 октября 2012, 23:41 | Отредактировано: KAIN48 - 21 октября 2012, 02:26


Шаманистый шаман


Cleric, Привет!
Цитата Cleric

Как сделать терминал одноразовым? То есть - активировал терминал, прошёлся по нескольким суб-меню, долез до нужной по квесту кнопки в терминале (допустим - "включить самоунитожение"), вышел из терминала, активировал его снова, а там вместо предыдущего меню что-нибудь типа "терминал заблокирован". Как это сделать?


Как вариант это можно сделать через квест и его стадии.
Мне было нужно сделать, что бы после второго нажатия кнопки, вместо Руки Смерти в зону забрасывалась Крыса.
Sergey_Ros с сайта «Лабортории Mod-Tec» посоветовал мне сделать через квест.
Создать квест, в котором только две стадии - 1 и 2

На нужной кнопке в терминале в Item Condition сделать условие на стадии квеста GetStage (Имя квеста) == 1

Создать дубликат кнопки в которой сделать условием GetStage (Имя квеста) == 2 (Терминал заблокирован)

Получится, что при стадии квеста 1 будет показываться одна кнопка, а при стадии квеста 2 другая.
Стадии можно поменять, каким нибудь событием, или попробовать в Item Result Script первой кнопки добавить SetStage (ID квеста) 2
У меня стадия менялась после убийства Руки Смерти скриптом на ней.

Пока.

Мы вышли из дома, когда во всех... Поздно вышли!
JupiterJour  Offline  Сообщение №843 написано: 21 октября 2012, 02:25 | Отредактировано: Joopeeter - 21 октября 2012, 02:28


_


А чего с квестом-то мудрить? Можно на том самом терминале объявить переменную, значение которой меняется в результ-скрипте нужной кнопки, и условие - GetScriptVariable. Только надо будет отметить галку Persistent Reference на копии и дать ей RefID.
Хотя в вопросе было
Цитата Cleric

долез до нужной по квесту кнопки


так что да, раз квест со стадиями всё равно уже есть...
Или так:

zzMessage надо создать заранее.

Spalny_Vagon  Offline  Сообщение №844 написано: 21 октября 2012, 05:59 | Отредактировано: Spalny_Vagon - 21 октября 2012, 09:25


Мастер


Для реализма можно добавить в скрипт блок gamemode, в котором после взрыва происходила замена работающего терминала на поломанный:
Code
float timer
short blocked

begin onactivate
     if Blocked==0    
       Activate    
     else    
       ShowMessage zzMessage; типа "Всё, доигрался"    
       set timer to 1
     endif    
End

begin gamemode
if blocked == 1
     if timer < 0
        set blocked to 2
        placeatme GrenadePulseExplosion
        TerminalDeskHulk01.enable  ;модель настольная, настенных, на сколько я помню, в игре нет.
        disable
      else
         set timer to timer - getsecondspassed
      endif
    endif
end

Если время до подрыва достаточно большое, то можно было бы еще и на экран таймер вывести, который бы секунды в левом углу отсчитывал (5, 4, 3, 2, 1... ).

======================
Мод "Нью-Йорк" на русском: 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
JupiterJour  Offline  Сообщение №845 написано: 21 октября 2012, 07:00 | Отредактировано: Joopeeter - 21 октября 2012, 07:17


_


Цитата Spalny_Vagon

секунды в левом углу отсчитывал


И иконки от через до :)

Cleric  Offline  Сообщение №846 написано: 21 октября 2012, 12:12



155
Цитата Joopeeter

Или так:


Вот у меня по этому скрипту вопрос. Он фурычит, спору нет, но... можно ли его: а) привязать к одному терминалу (который идёт как суб-меню), а результ-скрипт присвоить другому терминалу (который оригинальный)? Или тупо RefID указать оригинального терминала? б) Если в результ-скрипте у меня уже
Code
PlayBink "c11.bik" 1 1 1 1
стоит - можно ли туда s
Code
et [RefID терминала].Blocked to 1
добавить?

JupiterJour  Offline  Сообщение №847 написано: 21 октября 2012, 12:53


_


Цитата Cleric

можно ли туда set [RefID терминала].Blocked to 1 добавить?


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

Cleric  Offline  Сообщение №848 написано: 21 октября 2012, 13:34



155
Joopeeter, значит, если я результ-скрипт повешу на суб-меню, указав Ref оригинального терминала, а сам скрипт повешу на оригинальный терминал, то оригинальный терминал отключится, только после взимодействия с суб-меню, верно? А если неверно, то как сделать именно вышеописанное?

JupiterJour  Offline  Сообщение №849 написано: 21 октября 2012, 14:14


_



Demolir  Offline  Сообщение №850 написано: 22 октября 2012, 06:46



420
В качестве отключения терминала можно на финальной стадии так же использовать команду SetDestroyed 1 После этого терминал превратится в статичный объект, т.е. его уже не активировать.

***********************

У меня назрела парочка вопросов:

- если функции подобной GetActiveMunuSelection не существует, есть ли возможность как-то выделить в скрипте предмет, относящийся к разделу MiscItem? Можно было бы использовать тип блока Begin OnEquip для этих целей, но в отличии от былых времен, этот тип блока уже не работает для MiscItem, а переводить предмет в раздел Armor или Weapon как-то совсем неохота, сам предмет по стилистике для этих разделов вовсе не годится. Использовать функцию GetItemCount тоже не то, она просто отмечает предмет в интвентаре, но не дает возможности работать конкретно с ним.
- как корректно изменить тип иконки для Message? Дело в том, что я пробовал изменять ее в списке самого сообщения, и даже редактировал в разделе Menu Icon, но на деле в игре продолжает отображаться улыбчивая ряшка. Особенно несуразно это выглядит когда г.г. с потрохами рвется на мине, и подобная иконка сообщает об этом.

Не судите, да не судимы будите...
Spalny_Vagon  Offline  Сообщение №851 написано: 22 октября 2012, 11:05


Мастер


Цитата Demolir

предмет в раздел Armor или Weapon как-то совсем неохота,


Переведите его в ingestible, предметам-активаторам каких бы то ни было процессов в разделе "помощь" самое место.

======================
Мод "Нью-Йорк" на русском: 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
JupiterJour  Offline  Сообщение №852 написано: 22 октября 2012, 12:01


_


Цитата Demolir

есть ли возможность как-то выделить в скрипте предмет, относящийся к разделу MiscItem? Можно было бы использовать тип блока Begin OnEquip для этих целей, но в отличии от былых времен, этот тип блока уже не работает для MiscItem, а переводить предмет в раздел Armor или Weapon как-то совсем неохота, сам предмет по стилистике для этих разделов вовсе не годится. Использовать функцию GetItemCount тоже не то, она просто отмечает предмет в интвентаре, но не дает возможности работать конкретно с ним


Ну, раз его не выцепишь снаружи, можно подобраться изнутри. Вот эта конструкция работает с одним "но": после использования предмет исчезает и заново появляется в инвентаре только после закрытия пип-боя.

Но вообще-то это, конечно, извращение. Размещение активируемых предметов в "Помощи" - действительно общая практика, так что все уже привыкли, что книги, таблетки и бутерброды там в одной куче.

Demolir  Offline  Сообщение №853 написано: 23 октября 2012, 14:48



420
Цитата Joopeeter

Но вообще-то это, конечно, извращение. Размещение активируемых предметов в "Помощи" - действительно общая практика



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

Спасибо за подсказ.

Не судите, да не судимы будите...
JupiterJour  Offline  Сообщение №854 написано: 24 октября 2012, 02:42


_


Цитата Demolir

проще сделать так


Смотрю на свой скрипт, смотрю на твой, э-э-э... неужели проще? :)
Ладно, но одну вещь необходимо в него добавить: MarkForDelete, потому что надо "думать, как динозавр" окончательно избавляться от использованных MiscItem'ов.

Demolir  Offline  Сообщение №855 написано: 24 октября 2012, 04:54



420
Цитата Joopeeter

э-э-э... неужели проще?



Проще в том, что не нужно постоянно давать подтверждение (я писал об этом). Т.е. если НЕ нажимаем left Shift, то предмет просто удаляется, если нажимаем, то активируем его в обязательном порядке. Кстати, если ключевых предметов >= 2, то закрывать/листать пипбой уже не требуется, т.к. предметы визуально не удаляются.

з.и. Про MarkForDelete я забыл, это верно.

Не судите, да не судимы будите...
JupiterJour  Offline  Сообщение №856 написано: 24 октября 2012, 14:18


_


Посмотрел чуть внимательней и вот стало интересно: а без переменной stAr будет работать? Просто я раз видел подобную конструкцию (с IsKeyPressed и переменной, реагирующей на нажатие/отпускание кнопки) в блоке GameMode. Она там была, как выяснилось, для того, чтобы скрипт при нажатии срабатывал однократно, а тут вроде OnDrop и так прогоняется всего один раз.
Это так, из любопытства вопрос, сам-то я ФОСЕ не пользуюсь.
Цитата Demolir

предметы визуально не удаляются.


Главное, чтоб наоборот, не дублировались. :) А то сталкивался с таким глюком при манипуляциях с заскриптованными предметами в инвентаре.

Demolir  Offline  Сообщение №857 написано: 24 октября 2012, 22:48 | Отредактировано: Demolir - 24 октября 2012, 22:49



420
Цитата Demolir

как корректно изменить тип иконки для Message?



Сей вопрос еще в силе. К сожалению, решения пока не нашел. unsure

Не судите, да не судимы будите...
emo877  Offline  Сообщение №858 написано: 7 ноября 2012, 06:14 | Отредактировано: emo877 - 7 ноября 2012, 07:40



49
Если скрипт слишком длинный (while-циклы с исп.nvse), чтобы исполниться внутри фрейма, он ,вероятно, продолжается в следующем (не перезапускается же)? А если это квест-скрипт, и частота активации квеста выше скорости исполнения скрипта - скрипт перезапустится? (понятно, что это оч.нежелательно)

Каковы для фнв-движка ограничения на размер скрипта (в печатном виде и\или компилированом)?
У меня компилир.(см. фнв-едитом) часть порядка 12к, я видел у людей бОльшие, но чрезв.редко.
Где про это можно почитать (английский нормально)?
(нагуглил) IIRC the script size limit is 16KB compiled, 32KB uncompiled.

Другое: как правильнее - playerREF или просто player? (в скрипт-эффекте, на произвольном нпц,
в конструкции вида buddy.getdetected player)

meosen  Offline  Сообщение №859 написано: 7 ноября 2012, 10:43 | Отредактировано: meosen - 7 ноября 2012, 10:50


Учитель биологии


102
Цитата emo877

Другое: как правильнее - playerREF или просто player? (в скрипт-эффекте, на произвольном нпц,
в конструкции вида buddy.getdetected player)



Пишется просто Player, без REF. По личному опыту знаю что так правильно и по WIKI от Бетезды, по ГЕККУ.

Для НПС всегда нужно делать REF то есть должно у вас выглядеть так: buddyREF.getdetected player)

2) У меня проблема с моим любительским собачьим модом. https://modgames.net/load/107-1-0-12601 Все время происходит один и тот же неприятный собачий глюк. А именно: собака вдруг, безо всякой причины, берет и садится на свою собачью пятую точку, и не двигается. Сдвинуть с места помогает только смена стилей движения (ближе-дальше) или присутствие врага. Происходит такое бывает то через каждые 5 мниут реального времени, то за час ниразу не сядет. Но глюк известый и проявляется не только у меня, но и удргих пользователей моего мода. Глюк конечно не смертельный, но неприятный. :)

Очень хотелось бы услышать мнения человека разбирающегося в скриптах и распологающим небольшим количеством времени для теста.

скрипт собаки.


"Выше закона может быть только любовь, выше права - лишь милость, и выше справедливости - лишь прощение.” (Патриарх Алексий II)"

Учить детей - это очень весело...нет, правда! Главное все делать с душой.

"Мы любим не за что то, а потому что любовь - это образ Божий в человеке!"
emo877  Offline  Сообщение №860 написано: 7 ноября 2012, 12:58



49
0) насчёт "разбирающегося" - это не про меня. Своё состояние я бы охарактеризовал как замедленное протрезвение от нубского восторженного заблуждения, что "скрипты - это просто!".

1) по поводу (не совсем). На скрипт я посмотрел, единственное, что (не по делу) подумалось - раз он прямо на собаке, я бы не стал каждый фрейм в гейммоде "долбать" этот ignoreCrime. Наверняка же есть управляющий "делами вообще" квест-скрипт, та же заявка на ресуррект куда-то предназначается же ж. Хотя личного опыта за актуальность освежения ignoreCrime у меня нет.

1) (ближе к делу) что же до самовольного поведения псины, я бы наверное полез в её - общесобачий, да? - набор анимаций. И либо прописал бы в условиях идла "сидение на эопе" правило "для всех кроме Мухтара" (любительский мод, кому какое дело до "потроганой" анимации), либо, что хлопотнее, вынес бы Мухтара в отдельный вид существ с копией собачьего набора анимаций - но только для него. И там уже раздавал бы условия как душе угодно (напр, "сидеть разрешается только если сидит хозяин").
Обливионская компаньонша Соня ,кстати, умиляла тем, что (вне боя) старательно обезьянничала действия РС, в т.ч. и садилась.

Но это совет примитивный - подозреваю, что знающие предложили бы что-то из области ai-packages (чтоб собачка была постоянно занята каким-то делом, и с убранными галками "idles").

Успехов! good

Galko  Offline  Сообщение №861 написано: 7 ноября 2012, 13:39


GALAктическая мартышка


как правильнее - playerREF или просто player

Форма Player является жестко зашитой в движок, поэтому не нуждается в каких-либо дополнительных "пояснениях" типа Ref. Эт я так... просто поясняю.

Ваше счастье, что я не ваше счастье
meosen  Offline  Сообщение №862 написано: 7 ноября 2012, 14:10 | Отредактировано: meosen - 7 ноября 2012, 14:15


Учитель биологии


102
Цитата emo877

1) (ближе к делу) что же до самовольного поведения псины, я бы наверное полез в её - общесобачий, да? - набор анимаций. И либо прописал бы в условиях идла "сидение на эопе" правило "для всех кроме Мухтара" (любительский мод, кому какое дело до "потроганой" анимации), либо, что хлопотнее, вынес бы Мухтара в отдельный вид существ с копией собачьего набора анимаций - но только для него. И там уже раздавал бы условия как душе угодно (напр, "сидеть разрешается только если сидит хозяин").



Все бы хорошо, да только никак не могу найти где редактировать енту Idle анимацию. Точнее я нашел где удалить эту анимацию, но тогда все игровые соабки перестанут сидеть. Это конечно не смертельно но нихт гут. :)

"Выше закона может быть только любовь, выше права - лишь милость, и выше справедливости - лишь прощение.” (Патриарх Алексий II)"

Учить детей - это очень весело...нет, правда! Главное все делать с душой.

"Мы любим не за что то, а потому что любовь - это образ Божий в человеке!"
Demolir  Offline  Сообщение №863 написано: 7 ноября 2012, 14:13



420
Интересный вопрос. Дело в том, что PlayerRef многократно использовали сами разработчики (например, в скрипте боксерских бинтов), но там есть одна особенность: почти всегда PlayerRef есть в условиях "если цель игрок/не игрок".

Ref BoxingTapeTarget
Set BoxingTapeTarget to GetOwnerLastTarget

If (BoxingTapeTarget != PlayerRef)
endif

Еще встречается в некоторых специфических триггерах begin OnTriggerEnter playerRef . Видимо,в некоторых случаях, окончание Ref все-таки нужно указывать.

Не судите, да не судимы будите...
meosen  Offline  Сообщение №864 написано: 7 ноября 2012, 14:21


Учитель биологии


102
Цитата Demolir

Еще встречается в некоторых специфических триггерах begin OnTriggerEnter playerRef



Можете, если не трудно, привести пример когда и в каком случае использовался данный скрипт? Я просто сколько со скриптами не работал и по ВИКИ ГеКК овской не лазил то везде было просто; begin OnTriggerEnter player (без REF)

"Выше закона может быть только любовь, выше права - лишь милость, и выше справедливости - лишь прощение.” (Патриарх Алексий II)"

Учить детей - это очень весело...нет, правда! Главное все делать с душой.

"Мы любим не за что то, а потому что любовь - это образ Божий в человеке!"
Demolir  Offline  Сообщение №865 написано: 8 ноября 2012, 01:17



420
Не трудно. Он используется в скрипте VES02GeckomanGSScript, правда лишь однажды.

Собственно, Вы можете вбить в поисковик PlayerRef и просмотреть все скрипты, что отловятся.

Не судите, да не судимы будите...
JupiterJour  Offline  Сообщение №866 написано: 8 ноября 2012, 14:01 | Отредактировано: Joopeeter - 8 ноября 2012, 14:03


_


Цитата emo877

Наверняка же есть управляющий "делами вообще" квест-скрипт


Я б этот игнор 1/0 поместил в результ-скрипты соответственно компаньонских/вольнобродячих пакетов или нанимательных/увольнительных диалогов.

emo877  Offline  Сообщение №867 написано: 23 ноября 2012, 05:50



49
А всё-таки, пипл! Самое интересное я так и не осознал:
Цитата emo877

Если скрипт слишком длинный (while-циклы с исп.nvse), чтобы исполниться внутри фрейма, он ,вероятно, продолжается в следующем (не перезапускается же)? А если это квест-скрипт, и частота активации квеста выше скорости исполнения скрипта - скрипт перезапустится? (понятно, что это оч.нежелательно)


Нашёл англ. обсуждение проблемы, с утверждением [по моему ощущению, весьма знающего человека]:
Any function that takes longer than the time allocated to the script will cause the script to exit, and start over at the top the next time it is scheduled to run. Мой перевод: если функция требует для исполнения время большее чем отведено [в фрейме] для скрипта, скрипт будет прерван и в следующий раз запущен с начала. Из чего следует его совет "затяжные" функции помещать в самом конце скрипта и не расчитывать на то, что что-то дальнейшее будет исполнено.
ссылка на архив треда Atomicity

ps. а ещё у меня очень долго чудовищно непредсказуемо работал скрипт из-за того, что я не знал,
что значения вычисляемых меток ограничены байтом (0..255). Библия.

valambar  Offline  Сообщение №868 написано: 9 декабря 2012, 17:10 | Отредактировано: valambar - 9 декабря 2012, 17:13



513
Очень простой вопрос, на который не нахожу ответа.

Нужно описание скриптовых функций, которые появились в Нью-Вегасе и которых не было в Ф3.

Конкретно - функции проверки потребности в сне - голода - жажды.

Описание скриптовых комманд нашел только для Ф3, а там разумеется их нет.

Поглядел вот здесь :

http://geck.bethsoft.com/index.p...._1.1%29

Там тоже не нашел.

Spalny_Vagon  Offline  Сообщение №869 написано: 9 декабря 2012, 19:50


Мастер


Цитата valambar

Конкретно - функции проверки потребности в сне - голода - жажды.


На сколько я знаю, там ничего и не проверяется. Есть актор-эффекты (пять степеней голода, жажды и бессонницы), на худ выводится информация о текущем значении. Как только потрбность в чем-либо достигает величины 200, 400, 600, 800 или 1000, включается соответствующий актор-эффект, который убирает силу, выносливость и т.д.
Например, если на ГГ висит starvation200 (первая степень голода), то у него уменьшается сила на 1, а если starvation600, то сила -3, выносливость -1, харизма -2.
Движок с течением времени постоянно добавляет голод, жажду и сонливость, а вода, кровати и ingestible имеют эффекты, которые их уменьшают, вот и все.
Наличие же воздействия конкретного актор-эффекта проверяется функцией IsSpellTarget [magicID]

======================
Мод "Нью-Йорк" на русском: 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
valambar  Offline  Сообщение №870 написано: 9 декабря 2012, 20:30



513
Цитата Spalny_Vagon

На сколько я знаю, там ничего и не проверяется. Есть актор-эффекты (пять степеней голода, жажды и бессонницы), на худ выводится информация о текущем значении. Как только потрбность в чем-либо достигает величины 200, 400, 600, 800 или 1000, включается соответствующий актор-эффект, который убирает силу, выносливость и т.д.



То есть получается, что надо проверить на наличие актор-эффекта? А как такая функция звучит?

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





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