Вверх Вниз


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


Странник


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




Spalny_Vagon  Offline Сообщение №1711 написано: 07 Мая 2020 в 21:36





951
Цитата 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

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
YikxX  Offline Сообщение №1712 написано: 07 Мая 2020 в 22:28


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


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

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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
Spalny_Vagon  Offline Сообщение №1713 написано: 08 Мая 2020 в 10:20 | Отредактировано: Spalny_Vagon - Пятница, 08 Мая 2020, 10:34





951
Цитата YikxX ()
А что до чистки - так я не при чем, на вики написано что
Ну, так там же еще написано, что как раз для удаления таких объектов и следует применять конструкцию
Код
placedObject.Disable
placedObject.MarkForDelete
И у меня нет причин им не верить. Я этим пользуюсь регулярно для удаления всего, что мне не нужно, хотя в другом месте написано, что то, что было размещено на локации изначально, на самом деле не удаляется, а очень хорошо дисеблится. Что касается проблемы мусора после PlaceAtMe, то я решил ее просто - я эту команду стараюсь не использовать.

Добавлено (08 Мая 2020, 10:32)
---------------------------------------------
Цитата YikxX ()
но что-то никого из них не видать
Если хотите "призвать" кого-нибудь из тех, чьи имена я не решаюсь произносить вслух,  ZZZzzz  не увлекайтесь пентаграммами, попробуйте написать в ЛС. lol

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
YikxX  Offline Сообщение №1714 написано: 10 Мая 2020 в 01:17


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


2628
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 в 09:13





951
Цитата 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.

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
YikxX  Offline Сообщение №1716 написано: 10 Мая 2020 в 16:59


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


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

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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
Spalny_Vagon  Offline Сообщение №1717 написано: 10 Мая 2020 в 22:49





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

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
YikxX  Offline Сообщение №1718 написано: 12 Мая 2020 в 13:51


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


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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
Spalny_Vagon  Offline Сообщение №1719 написано: 12 Мая 2020 в 22:25





951
Цитата YikxX ()
Задача: насчитать ХР игроку за подорванных миной-пауком вражин.
Я этим никогда не интересовался. Для опытных игроков чем медленнее набирается очередной уровень, тем лучше. А вообще, я думаю, что решение этой проблемы можно найти в тех модах на компаньонов, в которых победы напарника зачислялись ГГ.

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
YikxX  Offline Сообщение №1720 написано: 13 Мая 2020 в 04:37


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


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

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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
Spalny_Vagon  Offline Сообщение №1721 написано: 13 Мая 2020 в 20:11





951
Цитата YikxX ()
и было бы вообще отлично. А так... пока только заданные значения
Я думаю, самое время воспользоваться пентаграммой... э-э-э..., ЛС, я хотел сказать.
И побольше лести, он это любит. giveheart

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
JupiterJour  Offline Сообщение №1722 написано: 13 Мая 2020 в 21:49


_


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

YikxX  Offline Сообщение №1723 написано: 14 Мая 2020 в 00:28


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


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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
JupiterJour  Offline Сообщение №1724 написано: 14 Мая 2020 в 01:00


_


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

YikxX  Offline Сообщение №1725 написано: 14 Мая 2020 в 05:18


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


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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
JupiterJour  Offline Сообщение №1726 написано: 14 Мая 2020 в 19:29 | Отредактировано: JupiterJour - Четверг, 14 Мая 2020, 19:33


_


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

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


YikxX  Offline Сообщение №1727 написано: 17 Мая 2020 в 01:24 | Отредактировано: YikxX - Воскресенье, 17 Мая 2020, 01:25


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


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

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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
Spalny_Vagon  Offline Сообщение №1728 написано: 17 Мая 2020 в 09:32





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

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
YikxX  Offline Сообщение №1729 написано: 17 Мая 2020 в 11:47


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


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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
Spalny_Vagon  Offline Сообщение №1730 написано: 18 Мая 2020 в 12:02





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

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
YikxX  Offline Сообщение №1731 написано: 18 Мая 2020 в 12:18


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


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

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

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
Spalny_Vagon  Offline Сообщение №1732 написано: 18 Мая 2020 в 18:15





951
Цитата YikxX ()
Еще такой вопрос: в Вегасе какой способ получения и перебора рефов акторов предпочтительнее - старый через
Увы, ни старого, ни нового никогда не использовал. У меня и Вегаса-то нет.

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)
  • Страница 58 из 58
  • «
  • 1
  • 2
  • 56
  • 57
  • 58
Поиск: