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

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



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




Spalny_Vagon  Offline  Сообщение №1711 написано: 7 мая 2020, 18:36


Мастер


Цитата YikxX

placedObject

Вот ЭТО динамически созданный объект. Это его Ref нельзя узнать с помощью функции getself, но он для создания взрыва не нужен. Вот если бы на сам взрыв можно было бы повесить скрипт, то его refID с помощью getself узнать не получилось бы.
А вообще эта штука (сокращенно this; set myself to getself, и set myself to this, это одно и то же), эта штука имеет довольно узкое применение. Ее ВСЕГДА (не знаю, почему) используют, если хотят использовать отталкивание, применяя конструкцию типа "mysefl.pushactoraway", и еще ее всегда используют, если один и тот же скрипт используют разные объекты\неписи, которые должны выполнять разные действия. Например, несколько триггеров с одним и тем же скриптом стоят в разных местах, и выполняют разные функции, один убивает, второй лечит. Для того, чтобы они сами знали, кто из них кто, и применяется getself. В остальных случаях без нее, как правило, можно обойтись. Я не знаю, что там было задумано с этими взрывами, но кинуть explosion возле себя НПС может и сам, без всяких промежуточных этапов:
Код
if [улсовие]
placeatme [explosion ID]
endif
и все.
Как убрать постоянные ссылки (refы) из сейвов, я не знаю, но с другой стороны, а зачем? Их не так много, если это НПС. Да и взрывов в игре тоже не так чтоб чересчур.
P.S. Есть один человек, его имя начинается на Ипа..., а заканчивается на ...тов, он точно знает больше меня по этому вопросу. blush

======================
Мод "Нью-Йорк" на русском: 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
YikxX  Offline  Сообщение №1712 написано: 7 мая 2020, 19:28


Местный Дон Кихот Ламанчский


Spalny_Vagon, ага, и еще Юпит..., но что-то никого из них не видать, видимо сильно самоизолировались :)

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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Spalny_Vagon  Offline  Сообщение №1713 написано: 8 мая 2020, 07:20 | Отредактировано: Spalny_Vagon - 8 мая 2020, 07:34


Мастер


Цитата YikxX

но что-то никого из них не видать

Если хотите "призвать" кого-нибудь из тех, чьи имена я не решаюсь произносить вслух,  ZZZzzz  не увлекайтесь пентаграммами, попробуйте написать в ЛС. lol

======================
Мод "Нью-Йорк" на русском: 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
YikxX  Offline  Сообщение №1714 написано: 9 мая 2020, 22:17


Местный Дон Кихот Ламанчский


Spalny_Vagon, неудобно беспокоить занятых людей :D

Почему может не срабатывать cios ? Вместо визуала слышно только бзззззт и все, потом кричер дохнет, через 4 секунды :)

Код
set rSelf to GetSelf

If rSelf.GetDestructionStage < 1
    If DoOnce == 0
  If Timer < 60
   set Timer to Timer + GetSecondsPassed
  else
   set DoOnce to 1
   rSelf.CIOS PlasmaEffect
  Endif
    Endif
    If DoOnce == 1
  If Timer2 < 4
   set Timer2 to Timer2 + GetSecondsPassed
  else
   set DoOnce to 2
   rSelf.DamageActorValue Health 500
  Endif
    Endif
Endif

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Spalny_Vagon  Offline  Сообщение №1715 написано: 10 мая 2020, 06:13


Мастер


Цитата YikxX1335541
Почему может не срабатывать cios
А что за скрипт для начала, эффект или объект? Потому что я не очень большой специалист по эффектам, на самом деле.
А причина, скорее всего одна из двух - или что-то не успевает сработать, или что-то должно срабатывать только один раз, но срабатывает многократно.
Как по мне, то сделано слишком сложно. Два таймера, а ведь внутри PlasmaEffect есть еще и свой собственный скрипт с таймером. Я бы попробовал что-нибудь по-проще, например, вначале в блоке gamemode убить, а потом уже из мертвого в блоке begin ondeath сделать кучку пепла (у Вас вроде как наоборот, вначале эффект, и только через 4 сек начинает убывать здоровье):
Код
Begin onhit
    set doonce to 1
end

begin ondeath
    CIOS PlasmaEffect
end

begin gamemode
if getdead == 0 && doonce == 1
    DamageActorValue Health 500 ; если еще живой, убавлять 500 ед. здоровья в каждом фрейме
endif
end
Это объектный скрипт, естественно. Если Вам нужен "эффектный" скрипт, то я бы посоветовал поковыряться в исходном скрипте плазма-эффекта и у же на этой основе создать свои собственные base effect и object effect.

======================
Мод "Нью-Йорк" на русском: 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
YikxX  Offline  Сообщение №1716 написано: 10 мая 2020, 13:59


Местный Дон Кихот Ламанчский


Spalny_Vagon, скрипт, естественно, объектный, ибо висит на кричере. И онхит там нет ибо кричер не получает никакого дамага извне, кроме скриптового. А блок ондед уже занят дизэйблом и маркфорделете, там "места нет" :) Да и все равно оттуда тоже не работает.

Убрал 2-й таймер - ничего не изменилось. Самое интересное, что эффекты не имеющие таймера в скрипте отлично работают. 30-ти секундный таймер убирать нельзя, ради него все и задумывалось. От порядка эффект-минус здоровье или наоборот тоже ничего не зависит. Походу, нерешаемо, ну и фиг с ним.

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Spalny_Vagon  Offline  Сообщение №1717 написано: 10 мая 2020, 19:49


Мастер


Цитата YikxX

И онхит там нет ибо кричер не получает никакого дамага извне, кроме скриптового.

Способность видеть чужие замыслы у меня пока еще не очень сильно развита, но я работаю над собой :)
Я просто для примера все изобразил, как это все можно сделать вообще без таймеров. Но не зная всей сверхзадачи, как я могу советовать что-то конкретное?
Однако, должен заметить, что сами эффекты, которые подменяют НПС на кучку золы уже подразумевают исчезновение тела НПС, зачем его сразу еще и дисеблить? Пусть валяется, если у него не включен респавн, то через три дня его в любом случае "уборщик трупов" уберет. Что именно делает движок в процессе AttachAshPile, я не знаю, но по идее, если нужно чтобы НПС исчез насовсем, то как раз кучка грязи и должна исчезнуть. Ничего архисложного в "обугливании" нет, на самом деле. Нечто похожее есть в моде "Нью-Йорк". Там тоже нет хита, после диалога ведьма выпивает адскую жидкость и сгорает, оставляя после себя кучу золы. А еще я хочу сказать, что процесс перехода НПС в мир иной не мгновенный. Как правило, ему предшествует анимация. Поэтому, с одной стороны, в блок ondeath не рекомендуется вставлять слишком сложные конструкции, т.к. он выполняется только один раз, и нельзя в этом же блоке оживлять, но с другой стороны, что значит нет места? Там места достаточно. Помимо всего прочего туда можно запихнуть кучу переменных, в т.ч. можно с помощью переменной зафиксировать факт смерти и с ее помощью запустить disable и markfordelete в блок gamemode.

======================
Мод "Нью-Йорк" на русском: 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
YikxX  Offline  Сообщение №1718 написано: 12 мая 2020, 10:51


Местный Дон Кихот Ламанчский


Spalny_Vagon, эксперименты продолжаются :) Опять 3-ка. Задача: насчитать ХР игроку за подорванных миной-пауком вражин. Мину запускает игрок, вражины ее дамажат и она взрывается - взрыв в Destruction Stage при здоровье 30%. Есстессно, игрок ничего не получает, ибо сидит в сторонке и урона вражинам не наносит.
Сделал выборку трупов в округе, за которых надо ХР начислить, но возникла проблема - не могу точно определить откуда труп. CauseOfDeath выдает то 0 - взрыв, то -1 - ничего. Хотя точно известно, что все от взрыва сдохли. IsKiller выдает 1 через раз, если даже CauseOfDeath у актора - взрыв, то есть он стопроцентно убит взрывом мины.
Может есть какой другой способ?

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Spalny_Vagon  Offline  Сообщение №1719 написано: 12 мая 2020, 19:25


Мастер


Цитата YikxX

Задача: насчитать ХР игроку за подорванных миной-пауком вражин.

Я этим никогда не интересовался. Для опытных игроков чем медленнее набирается очередной уровень, тем лучше. А вообще, я думаю, что решение этой проблемы можно найти в тех модах на компаньонов, в которых победы напарника зачислялись ГГ.

======================
Мод "Нью-Йорк" на русском: 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
YikxX  Offline  Сообщение №1720 написано: 13 мая 2020, 01:37


Местный Дон Кихот Ламанчский


Spalny_Vagon, ище б я знал, где таких взять :) Отродясь на 3-ку моды для компаньонов не ставил. Подозреваю, что в разделе Fallout 3 --> Компаньоны, но проверять лень :D

Тем не менее, после 3-х часов ковыряний, реализовал задуманное. Еще бы додуматься, как получать с актора кол-во ХР, которое обычно за его убийство дают (без мегаплагинов для NVSE, а с одним FOSE) и было бы вообще отлично. А так... пока только заданные значения :(

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Spalny_Vagon  Offline  Сообщение №1721 написано: 13 мая 2020, 17:11


Мастер


Цитата YikxX

и было бы вообще отлично. А так... пока только заданные значения

Я думаю, самое время воспользоваться пентаграммой... э-э-э..., ЛС, я хотел сказать.
И побольше лести, он это любит. giveheart

======================
Мод "Нью-Йорк" на русском: 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  Сообщение №1722 написано: 13 мая 2020, 18:49


_


Самое время порыться в глубинах форума, ящитаю! Всё уже спрошено и отвечено.
https://modgames.net/forum/70-1130-1305145-16-1519828177

YikxX  Offline  Сообщение №1723 написано: 13 мая 2020, 21:28


Местный Дон Кихот Ламанчский


JupiterJour, ну нет, перебирать в скрипте все эти глобалы я точно не буду, он и так уже 3-хметровый :) Тем более там речь про НВ, а там с этим нет проблем - делаешь мину напарником, пока не сдохнет о взрыва, и опыт сам начисляется. После взрыва (читай смерти) игра ее сама из напарников выкидывает. К ситуации в 3-ке это отношения не имеет вообще, имхо.

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
JupiterJour  Offline  Сообщение №1724 написано: 13 мая 2020, 22:00


_


Там написано, что если кто-то хочет давать опыт не так и не за то, как и за что это предусмотрено игрой, то ему придётся считать этот опыт вручную. И если он хочет, чтобы опыт давался как в игре, то ему придётся вручную считать этот опыт тем же способом, каким его считает игра.

YikxX  Offline  Сообщение №1725 написано: 14 мая 2020, 02:18


Местный Дон Кихот Ламанчский


JupiterJour, это понятно. Но в игре, в которой и за когтя смерти и за мутанта-бегемота дают 50 ОО на нормальном, не вижу смысла этим заморачиваться. Левел актора такой-то по такой-то - столько то ОО, с такой-то по еще такой-то - столько-то и т.д. 3-4-х градаций вполне достаточно.

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
JupiterJour  Offline  Сообщение №1726 написано: 14 мая 2020, 16:29 | Отредактировано: JupiterJour - 14 мая 2020, 16:33


_


Так что тогда не получается-то? Определить, что враг подвзорвался на ходячей мине или определить, насколько он был страшен?
Первое я бы попробовал сделать через накладываемый от взрыва эффект с отмеченным No death dispell. Эффект обследует своего носителя на предмет живости и если тот не жив, то, наверное, он от того взрыва и помер - считаем опыт и выдаём. Оприходованных помечаем, например, каким-нибудь токеном, чтобы другие взрывы их не считали по второму разу.
Второе можно прикинуть по доступным для скрипта признакам: GetLevel, GetIsCreatureType, GetBaseAV health, GetArmorRating и т.п.

Добавлено (14 Мая 2020, 19:42)
---------------------------------------------
А. Ещё по первому пункту. Надо, наверное, постоянно обследовать местность и помечать вообще всех мёртвых, чтобы взрывы не считали опыт за убитых игроком собственноручно, за которых он уже получил штатным способом. Зависит от того, накладывается ли эффект от взрыва до смерти или после. Если до, то можно просто поставить эффекту условие GetDead и не накладывать его на мёртвых.


YikxX  Offline  Сообщение №1727 написано: 16 мая 2020, 22:24 | Отредактировано: YikxX - 16 мая 2020, 22:25


Местный Дон Кихот Ламанчский


Цитата JupiterJour

Надо, наверное, постоянно обследовать местность и помечать вообще всех мёртвых

Это уже сделано, естественно. Только через откидывание мертвых рефов при скане окресностей (по расстоянию и причине смерти). Все считает точно, сколько акторов убито взрывом мины, за столькоих и опыт начисляется. Эффект не понадобился.

Еще такой вопрос: Почему можно получить скриптово Destruction Stage, но нельзя установить? И собственно, вытекающий из него - как скриптом, висящем на кричере, продамажить его так, чтобы Destruction Stage переключилась на следующую стадию, как-будто кричера враг покоцал? Эффектом?

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Spalny_Vagon  Offline  Сообщение №1728 написано: 17 мая 2020, 06:32


Мастер


Цитата YikxX

Еще такой вопрос: Почему можно получить скриптово Destruction Stage, но нельзя установить?

Как вариант, можно было бы вначале с помощью GetDextructionStage выяснить, дошел ли объект до нужной кондиции, и дальше ускоренно доломать его вручную (DamateObject). Я так понимаю, кричер не робот и destruction data Вы ему сами добавляли?

======================
Мод "Нью-Йорк" на русском: 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
YikxX  Offline  Сообщение №1729 написано: 17 мая 2020, 08:47


Местный Дон Кихот Ламанчский


Spalny_Vagon, робот. Да, сам. С эффектом сработало, но не считается опыт за убитых взрывом :( Если враг сам доломает робота до нужной Destruction Stage - опыт считается. О движок Фоллыча (Вегас), ты непостижим :D

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Spalny_Vagon  Offline  Сообщение №1730 написано: 18 мая 2020, 09:02


Мастер


Цитата YikxX

. О движок Фоллыча (Вегас), ты непостижим

Ну, как по мне, то все логично, причина гибели - пожар, а не поджог.
Если весь этот огород исключительно ради начисления очков за победу, то м.б. имеет смысл вообще отказаться от "автоматики" и всю сцену красивой гибели актера возложить на скрипт? В нем можно будет конкретно указать автора победы с помощью команды killActor. В этом случае никто не сможет украсть лавры у ГГ.

======================
Мод "Нью-Йорк" на русском: 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
YikxX  Offline  Сообщение №1731 написано: 18 мая 2020, 09:18


Местный Дон Кихот Ламанчский


Spalny_Vagon, ага, примерно так и сделал. А начисление опыта не работало, потому-что какой-то криворукий скриптописатель по запарке использовал один и тот же DoOnce в 2-х разных местах :D
В итоге нужное не срабатывало, потому что DoOnce был уже в 1.

Еще такой вопрос: в Вегасе какой способ получения и перебора рефов акторов предпочтительнее - старый через GetFirstRef ... GetNextRef или с массивом (array), который GetRefs ... ForEach ... loop? Или вообще без разницы? Интересует нагрузка на движок, т.е. производительность.

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Spalny_Vagon  Offline  Сообщение №1732 написано: 18 мая 2020, 15:15


Мастер


Цитата YikxX

Еще такой вопрос: в Вегасе какой способ получения и перебора рефов акторов предпочтительнее - старый через

Увы, ни старого, ни нового никогда не использовал. У меня и Вегаса-то нет.

======================
Мод "Нью-Йорк" на русском: 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
Stea1ch  Offline  Сообщение №1733 написано: 11 ноября 2022, 15:36



192
Всем ку! Попытался перенести мину C4 в 3 фолл, но никак - в гекке нет триггера "детонация". Получается обычная мина. Есть идеи как реализовать скриптом?


P.S для модераторов и вебдизайнеров форума: НЕ УБИРАЮТСЯ КАРТИНКИ ПОД СПОЙЛЕР - не возможно открыть полученный спойлер.


Stea1ch  Offline  Сообщение №1734 написано: 11 ноября 2022, 18:30 | Отредактировано: Stea1ch - 11 ноября 2022, 18:30



192
Собственно в NV детонация выполняется простым скриптом:

scn DetonatorOnFire
begin OnFire
     player.DetonatePlacedExplosives
end

Но как я понял такого функционала у движка 3 фолла просто нет...


Stea1ch  Offline  Сообщение №1735 написано: 14 ноября 2022, 17:54



192
Чтож, видимо никак или никто не знает. Другой вопрос: можно ли ограничить количестово помещаемых предметов в контейнер, а так же их тип?

ApeX  Offline  Сообщение №1736 написано: 14 ноября 2022, 17:58



Stea1ch, не это?

Stea1ch  Offline  Сообщение №1737 написано: 15 ноября 2022, 00:20 | Отредактировано: Stea1ch - 15 ноября 2022, 00:26



192
Цитата ApeX

Stea1ch, не это?


Не, тут по весу... Я сейчас ваяю скрипт на 96 листов тетради только потому, что функция GetContainerInventoryCount не работает от слова совсем в гекке 3 фолла, так бы я просто ограничил бы количество и сообщение об ошибке при попытке добавить больше с предложением убрать лишнее, но не судьба... Приходится для каждого предмета создавать переменную для подсчета общего числа... Делаю мод на ремонт брони на верстаке, хотел чтоб можно было только один предмет положить на верстак и чинить его, притом он бы появлялся на верстаке в виде ванили, но придется делать ремонт всего и сразу с подсчетом необходимых ресурсов... хотя... может и смогу реализовать ограничение, только скрипт на рулон туалетной бумаги будет...

Горностай  Offline  Сообщение №1738 написано: 18 ноября 2022, 09:56


Хаотично-нейтральная сущность.


33
Доброго времени года! 

Есть перк. Польза от него состоит в создании "точки входа", а именно — добавлении кнопки. Название для кнопки прописывается нормально, а вот запускаемый по нажатию на неё скрипт... В окошке "Start script" всё прописывается нормально, при нажатии "Рекомпилировать" тоже не ругается, однако cохранить изменения не получается. Кнопка "Ок" нажимается, но окно "Действие перка" не закрывается, закрыть можно только "крестиком" или кнопкой "Сancel", и скрипт, разумеется, не сохраняется, так и остаётся точка ничего не делающей. 
Орфография идеальна, структура тоже, ссылок на несуществующие объекты нет, запускать редактор с NVSE  тоже не помогает. Чего с этим можно сделать? 

ApeX  Offline  Сообщение №1739 написано: 18 ноября 2022, 20:00



Горностай, ошибка может и быть, но не показываться. Power Up еще это лечил. И экстендер гэкковский еще есть. Ссылка.

Горностай  Offline  Сообщение №1740 написано: 19 ноября 2022, 13:54


Хаотично-нейтральная сущность.


33
ApeX, нет, мимо... Попробовал с обоими вариантами, с PowerUp-ом вообще разницы не заметил, Экстендер - молодец, показывает лог... В котором только ругань на очень длинные имена интерьеров в русифицированных ESM и тишина по теме. 

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





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