Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
Вот ЭТО динамически созданный объект. Это его 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. Есть один человек, его имя начинается на Ипа..., а заканчивается на ...тов, он точно знает больше меня по этому вопросу.
====================== Мод "Нью-Йорк" на русском: 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
Spalny_Vagon, ага, и еще Юпит..., но что-то никого из них не видать, видимо сильно самоизолировались
А что до чистки - так я не при чем, на вики написано что PlaceAtMe объектов (не пикабельных - те сами чистятся после взятия) без последующей очистки это "бэд моддинг этикет", я и сижу, ковыряюсь. А то так играешь-играешь, а потом у десантников Анклава начинают бошки пропадать или еще что. Сейвы почистил и снова все в порядке. Но ведь всем известно - чисто не там где убирают, а там, где не сорят Модов у меня не так много, так что управлюсь быстро.
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Изменение репутации для пользователя Spalny_Vagon
Spalny_VagonOffline
Сообщение №1713
написано: 8 мая 2020, 07:20
| Отредактировано: Spalny_Vagon - 8 мая 2020, 07:34
Почему может не срабатывать 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
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
А что за скрипт для начала, эффект или объект? Потому что я не очень большой специалист по эффектам, на самом деле. А причина, скорее всего одна из двух - или что-то не успевает сработать, или что-то должно срабатывать только один раз, но срабатывает многократно. Как по мне, то сделано слишком сложно. Два таймера, а ведь внутри 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
Spalny_Vagon, скрипт, естественно, объектный, ибо висит на кричере. И онхит там нет ибо кричер не получает никакого дамага извне, кроме скриптового. А блок ондед уже занят дизэйблом и маркфорделете, там "места нет" Да и все равно оттуда тоже не работает.
Убрал 2-й таймер - ничего не изменилось. Самое интересное, что эффекты не имеющие таймера в скрипте отлично работают. 30-ти секундный таймер убирать нельзя, ради него все и задумывалось. От порядка эффект-минус здоровье или наоборот тоже ничего не зависит. Походу, нерешаемо, ну и фиг с ним.
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
И онхит там нет ибо кричер не получает никакого дамага извне, кроме скриптового.
Способность видеть чужие замыслы у меня пока еще не очень сильно развита, но я работаю над собой Я просто для примера все изобразил, как это все можно сделать вообще без таймеров. Но не зная всей сверхзадачи, как я могу советовать что-то конкретное? Однако, должен заметить, что сами эффекты, которые подменяют НПС на кучку золы уже подразумевают исчезновение тела НПС, зачем его сразу еще и дисеблить? Пусть валяется, если у него не включен респавн, то через три дня его в любом случае "уборщик трупов" уберет. Что именно делает движок в процессе 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
Spalny_Vagon, эксперименты продолжаются Опять 3-ка. Задача: насчитать ХР игроку за подорванных миной-пауком вражин. Мину запускает игрок, вражины ее дамажат и она взрывается - взрыв в Destruction Stage при здоровье 30%. Есстессно, игрок ничего не получает, ибо сидит в сторонке и урона вражинам не наносит. Сделал выборку трупов в округе, за которых надо ХР начислить, но возникла проблема - не могу точно определить откуда труп. CauseOfDeath выдает то 0 - взрыв, то -1 - ничего. Хотя точно известно, что все от взрыва сдохли. IsKiller выдает 1 через раз, если даже CauseOfDeath у актора - взрыв, то есть он стопроцентно убит взрывом мины. Может есть какой другой способ?
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Задача: насчитать ХР игроку за подорванных миной-пауком вражин.
Я этим никогда не интересовался. Для опытных игроков чем медленнее набирается очередной уровень, тем лучше. А вообще, я думаю, что решение этой проблемы можно найти в тех модах на компаньонов, в которых победы напарника зачислялись ГГ.
====================== Мод "Нью-Йорк" на русском: 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
Spalny_Vagon, ище б я знал, где таких взять Отродясь на 3-ку моды для компаньонов не ставил. Подозреваю, что в разделе Fallout 3 --> Компаньоны, но проверять лень
Тем не менее, после 3-х часов ковыряний, реализовал задуманное. Еще бы додуматься, как получать с актора кол-во ХР, которое обычно за его убийство дают (без мегаплагинов для NVSE, а с одним FOSE) и было бы вообще отлично. А так... пока только заданные значения
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
JupiterJour, ну нет, перебирать в скрипте все эти глобалы я точно не буду, он и так уже 3-хметровый Тем более там речь про НВ, а там с этим нет проблем - делаешь мину напарником, пока не сдохнет о взрыва, и опыт сам начисляется. После взрыва (читай смерти) игра ее сама из напарников выкидывает. К ситуации в 3-ке это отношения не имеет вообще, имхо.
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Там написано, что если кто-то хочет давать опыт не так и не за то, как и за что это предусмотрено игрой, то ему придётся считать этот опыт вручную. И если он хочет, чтобы опыт давался как в игре, то ему придётся вручную считать этот опыт тем же способом, каким его считает игра.
JupiterJour, это понятно. Но в игре, в которой и за когтя смерти и за мутанта-бегемота дают 50 ОО на нормальном, не вижу смысла этим заморачиваться. Левел актора такой-то по такой-то - столько то ОО, с такой-то по еще такой-то - столько-то и т.д. 3-4-х градаций вполне достаточно.
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №1726
написано: 14 мая 2020, 16:29
| Отредактировано: JupiterJour - 14 мая 2020, 16:33
Так что тогда не получается-то? Определить, что враг подвзорвался на ходячей мине или определить, насколько он был страшен? Первое я бы попробовал сделать через накладываемый от взрыва эффект с отмеченным No death dispell. Эффект обследует своего носителя на предмет живости и если тот не жив, то, наверное, он от того взрыва и помер - считаем опыт и выдаём. Оприходованных помечаем, например, каким-нибудь токеном, чтобы другие взрывы их не считали по второму разу. Второе можно прикинуть по доступным для скрипта признакам: GetLevel, GetIsCreatureType, GetBaseAV health, GetArmorRating и т.п.
Добавлено (14 Мая 2020, 19:42) --------------------------------------------- А. Ещё по первому пункту. Надо, наверное, постоянно обследовать местность и помечать вообще всех мёртвых, чтобы взрывы не считали опыт за убитых игроком собственноручно, за которых он уже получил штатным способом. Зависит от того, накладывается ли эффект от взрыва до смерти или после. Если до, то можно просто поставить эффекту условие GetDead и не накладывать его на мёртвых.
Изменение репутации для пользователя YikxX
YikxXOffline
Сообщение №1727
написано: 16 мая 2020, 22:24
| Отредактировано: YikxX - 16 мая 2020, 22:25
Надо, наверное, постоянно обследовать местность и помечать вообще всех мёртвых
Это уже сделано, естественно. Только через откидывание мертвых рефов при скане окресностей (по расстоянию и причине смерти). Все считает точно, сколько акторов убито взрывом мины, за столькоих и опыт начисляется. Эффект не понадобился.
Еще такой вопрос: Почему можно получить скриптово Destruction Stage, но нельзя установить? И собственно, вытекающий из него - как скриптом, висящем на кричере, продамажить его так, чтобы Destruction Stage переключилась на следующую стадию, как-будто кричера враг покоцал? Эффектом?
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Еще такой вопрос: Почему можно получить скриптово 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
Spalny_Vagon, робот. Да, сам. С эффектом сработало, но не считается опыт за убитых взрывом Если враг сам доломает робота до нужной Destruction Stage - опыт считается. О движок Фоллыча (Вегас), ты непостижим
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Ну, как по мне, то все логично, причина гибели - пожар, а не поджог. Если весь этот огород исключительно ради начисления очков за победу, то м.б. имеет смысл вообще отказаться от "автоматики" и всю сцену красивой гибели актера возложить на скрипт? В нем можно будет конкретно указать автора победы с помощью команды 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
Spalny_Vagon, ага, примерно так и сделал. А начисление опыта не работало, потому-что какой-то криворукий скриптописатель по запарке использовал один и тот же DoOnce в 2-х разных местах В итоге нужное не срабатывало, потому что DoOnce был уже в 1.
Еще такой вопрос: в Вегасе какой способ получения и перебора рефов акторов предпочтительнее - старый через GetFirstRef ... GetNextRef или с массивом (array), который GetRefs ... ForEach ... loop? Или вообще без разницы? Интересует нагрузка на движок, т.е. производительность.
Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...
Всем ку! Попытался перенести мину C4 в 3 фолл, но никак - в гекке нет триггера "детонация". Получается обычная мина. Есть идеи как реализовать скриптом?
P.S для модераторов и вебдизайнеров форума: НЕ УБИРАЮТСЯ КАРТИНКИ ПОД СПОЙЛЕР - не возможно открыть полученный спойлер.
Изменение репутации для пользователя Stea1ch
Stea1chOffline
Сообщение №1734
написано: 11 ноября 2022, 18:30
| Отредактировано: Stea1ch - 11 ноября 2022, 18:30
Не, тут по весу... Я сейчас ваяю скрипт на 96 листов тетради только потому, что функция GetContainerInventoryCount не работает от слова совсем в гекке 3 фолла, так бы я просто ограничил бы количество и сообщение об ошибке при попытке добавить больше с предложением убрать лишнее, но не судьба... Приходится для каждого предмета создавать переменную для подсчета общего числа... Делаю мод на ремонт брони на верстаке, хотел чтоб можно было только один предмет положить на верстак и чинить его, притом он бы появлялся на верстаке в виде ванили, но придется делать ремонт всего и сразу с подсчетом необходимых ресурсов... хотя... может и смогу реализовать ограничение, только скрипт на рулон туалетной бумаги будет...
Есть перк. Польза от него состоит в создании "точки входа", а именно — добавлении кнопки. Название для кнопки прописывается нормально, а вот запускаемый по нажатию на неё скрипт... В окошке "Start script" всё прописывается нормально, при нажатии "Рекомпилировать" тоже не ругается, однако cохранить изменения не получается. Кнопка "Ок" нажимается, но окно "Действие перка" не закрывается, закрыть можно только "крестиком" или кнопкой "Сancel", и скрипт, разумеется, не сохраняется, так и остаётся точка ничего не делающей. Орфография идеальна, структура тоже, ссылок на несуществующие объекты нет, запускать редактор с NVSE тоже не помогает. Чего с этим можно сделать?
ApeX, нет, мимо... Попробовал с обоими вариантами, с PowerUp-ом вообще разницы не заметил, Экстендер - молодец, показывает лог... В котором только ругань на очень длинные имена интерьеров в русифицированных ESM и тишина по теме.