Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
если сделать как в этом моде: выкинул - активировал - мессаг с опциями: поднять, открыть, оставить
"Мессаг с опциями" - это архаизм тех же обливионовских времён, что приседание для изменения режима активации. В фолаутах есть прекрасно работающая система многовариантной активации... Да, можно сделать и как в том моде, и ещё много как, но главное что это не обойдётся одним скриптом на рюкзаке. А когда обслуживаемый модом рюкзак не уникален, мод и вовсе становится нешуточно сложным...
Изменение репутации для пользователя asdas991
asdas991Offline
Сообщение №1502
написано: 26 августа 2015, 11:24
| Отредактировано: asdas991 - 26 августа 2015, 11:26
Товарищи! Можете мне помочь: я в скриптах разбираюсь только на интуитивном уровне и потому не знаю каких либо модификаторов и команд. Я пробовал потрошить некоторые моды на предмет похожих скриптов, но как видите, ничего в них не понял. И потому искренне прошу о помощи.
Что за скрипт: На оружии сидит скрипт, который срабатывает при ударе по трупу. Скрипт проверяет у игрока наличие перка X, наличие > 0 предмета Y и экипированно ли наше оружие. Если все верно, то выскакивает сообщение с неким текстом, предмет Y в количестве 1шт удаляется из инвентаря, труп убирается, спавнится NPС Z.
Если кто - нибудь может мне чем - нибудь помочь, то я буду очень признателен.
asdas991, если вешать скрипт на труп, а не на оружие, то могу помочь. при ударе по трупу, определяет какое оружие одето, и собственно тоже самое будет.
asdas991, если вешать скрипт на труп, а не на оружие, то могу помочь. при ударе по трупу, определяет какое оружие одето, и собственно тоже самое будет.
Спасибо! Только один момент: труп только людской.
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1505
написано: 26 августа 2015, 14:05
| Отредактировано: ITU - 26 августа 2015, 14:10
Возможно и для оружия придумаю, только вот сайт с описанием скриптов не работает,а я на память не помню все
Добавлено (26 Августа 2015, 17:05) --------------------------------------------- Нету не у кого скачанного http://geck.bethsoft.com ? А то он больше не работает ((
Изменение репутации для пользователя КсюXa
КсюXaOffline
Сообщение №1506
написано: 26 августа 2015, 14:06
| Отредактировано: КсюXa - 26 августа 2015, 14:11
Ну на кого повесишь... Если тебе нужен именно любой труп, как для перка? Тогда надо подумать... И определение одетого оружие это NVSE Script
Огромное спасибо! Там, я дальше что - нибудь сам найду, интуитивно подделаю. Труп главное, что бы человеческий, но не гулей, мутантов и тд и тп. Если что, можно вопрос в личку кинуть?
Приветствую всех. Возникла тут заминка со скриптом, может кто сможет помочь. Как это будет выглядеть в игре: ГГ берет в руки большой тесак, вокруг него в небольшом радиусе на кустарниках и около деревьев появляются цветные маркеры, ударив по этому маркеру в инвентарь к ГГ добавляется либо копье либо дрова. Радиус небольшой, около нескольких метров, убрав тесак маркеры перестают отображаться. Как это выглядит с другой стороны: Я вижу это так - маркеры расставлены там где надо. Индивидуальных имен у них нет, слишком много их. Когда у ГГ в руках оружие то работает скрипт на оружии который и активирует появление этих маркеров. как то так. Вариант отслеживания маркером самого ГГ сс оружием в руках - не вариант(маркеров очень много и работающий скрипт на каждом это попа). Есть предложения ?
маркеров очень много и работающий скрипт на каждом это попа
А Enable Parent на них это какая часть тела?
Добавлено: Хотя нет, их же не в маленьком радиусе много, сокращение числа маркеров в десяток раз не решит проблему. А изредка сканировать в массив и часто проявлять находящиеся в радиусе сбора?
И не скрипт на оружии, наверное. Оружейный энчант не на носителя оружия действует - поэтому квестовый скрипт, который сканирует, сначала проверяет наличие нужного оружия в руках ГГ.
Мдя, как обычно лес рук.... Немного покурив мануалы дал ходу больному воображению. Поскольку мне никак в голову не пришло ничего кроме как повесить скрипт на каждый маркер, это и сделал. Пока все это дело в работе, скрипт упрощен дальше аж некуда и мне кажется что должно быть все пучком, я понимаю что это не лучший вариант, но пока другого не придумал.
Данный скрипт вещается на активатор и создается один форм лист в котором оружие, именно то что нам нужно и именно на него и будет реагировать активатор. Активатор по умолчанию отключен, когда наш ГГ приблизится к нему на некоторое расстояние то он станет видимым(Енэблится) если в руках у ГГ оружие указанное в форм листе. Когда ГГ начнет долбить по активатору (у меня это армейский тесак) сработает счетчик и после 10 ударов в инвентарь к ГГ будут добавлены дрова(можно прописать что угодно), далее активатор дисэйблится(соответственно становится невидимым) и скриптово разрушается, после этого он перестает работать. Спустя время - это время ресета в игре, по умолчанию 3 игровых дня, маркер восстанавливается и его можно снова обнаружить и т д.
Код
scn TMGTreeResursMarkerScr
int iState
begin GameMode if iState == 0 if GetDistance player <= 350 && player.IsWeaponInList WeaponForDrovosek Enable else Disable endif endif END
Begin OnHit set iState to iState + 1 if iState == 10 PlaySound UILevelUp Disable set iState to 1 setdestroyed 1 player.AddItem CBHvorost 1 endif END
begin onReset setdestroyed 0 set iState to 0 end
Вот с респом пока есть неясность, по мануалам это так а вот как это в реале пока не понятно, буду тестить.
Да ещё с "тяжёлым" GetDistance'ом... Не могу смотреть на это молча Пожалуй, тот случай, когда экстендер в жилу - "сканирует и проверяет" как бишь его... GetFirstRef, GetNextRef... Ну, Ипатов лучше объяснит. Я б ещё маркер сделал бы живым. В смысле животным, только в виде маркера. SetRestrained 1 его на всякий случай и руби-пили сколько влезет. И прогресс рубки виден, и здоровье маркера само убывает, и топор изнашивается, и респаунятся дрова самостоятельно, и бензопилой быстрее чем ножичком получится без дополнительных скриптовых ухищрений. И карму можно снять за занесённые в Красную книгу виды.
Не будет защиты от коврового бомбометания... Которое не только всю рощу разом на дрова разбирает, так недобитые дрова ещё и разлетятся по ближним оврагам
Недобитое животное-турель, например, никуда не разлетается, стоит где поставили. Пусть маркеры берут пример с него, а не с вороны какой-нибудь. Даже если маркер всё ж будет активатором, подсчёт ударов, я считаю, лучше всё равно перенести в Destruction Data. Чтобы всё-таки трудоёмкость пиления бензопилой и выкидухой различалась - реализм, чтоб его...
Помню когда-то уже задавал подобный вопрос.. но может чего изменилось с тех времен.. Как изменить прическу ГГ таким образом, чтобы не приходилось перезагружать игру? Естественно речь идет о скриптовом варианте.
Цель - поменять прическу на указанную не спрашивая мнения игрока. Грубо говоря, попал ГГ в тюрьму - побрили налысо. С НПС как это делать ясно, но вот как с ГГ без перезагрузки игры?
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1518
написано: 15 сентября 2015, 12:20
| Отредактировано: ITU - 15 сентября 2015, 12:21
q2werty, могу предложить вариант прическу переделать в парик (шапку) Единственно цвет волос будет тот, который поставишь текстурой... А налысо по идеи можно без модели вообще
Я б ещё маркер сделал бы живым. В смысле животным, только в виде маркера.
это интересно.... я об этом не думал. Э-э-э а как дистанцию тогда от этого живого бревна до ГГ измерять ? Смысл в том что пока не возьмешь в руки необходимое оружие то и маркеры не видно, это что бы они не отвлекали.
Делать маркеры живыми это крутой вариант, но нужно лупом проходить по ячейкам и SetRestrained 1 делать, а то живые маркеры\деревья будут вертеться, "смотреть" вокруг. Может даже бегать по локе, если завтыкать и не выставить "без ног\без рук\без головы".
А вообще лучший вариант просто заменить деревья активаторами-триггерами с destruction data и простым скриптом:
Код
int iStage int iPlayer
Begin OnTriggerEnter Player set iPlayer to 1 set iStage to GetDestructionStage End
Begin OnTriggerLeave Player set iPlayer to 0 End
Begin OnDestructionStageChange if iPlayer == 1 if iStage < GetDestructionStage Player.AddItem Brevno01 1 set iStage to GetDestructionStage endif else PlaceAtMe Brevno01 ;можно еще рандомно Х и Y выставить endif End
Когда игрок влезает в триггер и начинает лупить дерево - ему добавляются бревна каждый раз когда меняется DestructionStage. Если игрок не в триггере а деревья под ковровой бомбардировкой - бревна аккуратненько сваливаются под дерево.
DestructionStage'ей можно выставить огромное количество (и тут я сп***л, их всего 8) + заменять модельку каждый раз когда меняется стейдж. Из плюсов - работает надежно. Скрипт запускается только когда игрок влезает в триггер или меняется стейдж.
Но идея с живым триггером, если реализовать грамотно - тоже сработает на ура. Но из минусов - нельзя заменить модельку при определенном % хп, живые твари жрут больше ресурсов даже без AI пакетов, и скрипт будет подурней.
upd: подправил скрипт, а то допустил серьезную ошибку
Я решил пока остановиться на своем варианте. Десяток маркеров на локе у меня не вызывают изменения ФПС. Поскольку маркеров будет не очень много то думаю прокатит. Изменение модели мне не нужно. Как допилю до конца то выложу видео получившегося. При первых тестах все пучком, дальше народ протестит и скажет что и как.
Нужна помощь! Делаю что-то вроде своего убежища, хотел привязать пульт управления дверью убежища к самой двери, все сделал по указаниям Графа
Привзка пульта управления дверью убежища к двери убежища.
Многие спрашивали как дверь убежища привязать к пульту управления дверью убежища так вот я сейчас отвечу.
Нам для начала нужно взять дверь убежища и пульт управления дверью убежища и изменить их ид на свой, вот их id:
VGearDoorR11 - Дверь убежища
VVault11GearDoorControlPanel - Пульт управления дверью убежища
Меняем id на свой. Теперь разберёмся с скриптами, на двери убежища можно неизменять скрипт а на пульте управления нужно поставить свой вот какой должен быть скрипт:
scn AAAGrafaDoorVaultScript
short mode ref myLink
begin onActivate if IsActionRef player == 1 set myLink to getLinkedRef ;the linked ref should be the door. if ((myLink.getOpenState == 3) || (myLink.getOpenState == 1)) && mode != 2 ;door closed or open playgroup Forward 0 ;pull handle out set mode to 2 activate myLink ;activate all the things that this is an activate parent of - klaxon light and activator. endif endif end
begin gameMode
if (mode == 2) if (isAnimPlaying == 0) set myLink to getLinkedRef ;the linked ref should be the door. playgroup Left 1 ;pull handle down set mode to 3 myLink.activate player endif endif
end
После этого скидуем дверь и пульт к двери в основной мир, двойной клик по двери пишем ему Referenc Editor ID жмём ок. Двойной клик по пульту находим вкладку Linked Ref и указываем там нашу дверь, всё дверь с переключателем готова.
Автор:Graf
Сделал все как сказано, но когда пытаюсь привязать пульт к двери в Linked Ref там нет двери. Переделывал все по три раза, и один и тот же итог, хелпуйте, ребят...
Сделал все как сказано, но когда пытаюсь привязать пульт к двери в Linked Ref там нет двери.
Это потому что там не сказано, что копию двери надо назначить постоянной ссылкой.
Добавлено (20 Сентября 2015, 15:06) --------------------------------------------- И объекты не надо плодить без нужды. Если не меняешь ни модель двери, ни другие её свойства, ни скрипт, то и дублировать её не нужно. Если не меняешь ни модель дверной открвалки, ни другие её свойства, ни скрипт (а скрипт а скрипт ты не меняешь - это стандартный GenericControlPodScript, только под другим названием), то и её дублировать тоже не нужно.
тут палка о двух концах - триггер тоже жрёт ресурс, не знаю правда, больше ли скриптового обшаривателя-измерителя, меньше ли
меряли луп и старый типа label и новомодный (очень кстати плохой) while. Это ад. Особенно если еще какие-то лупы инициированы (в других модах). Foreach по локациям вообще убийца фпс'а, его только для array (массив вроде, я хз как по нашему правильно). Можно конечно раз в 5 секунд пробегать лупом (label'ом) на дистанцию в одну ячейку, но ну его в баню. Кругом столько модов с лупами что быть тем самым человеком который доломал своим лупом и так шаткую систему - неее)) А с триггерами проблем практически нет. Спавнили около тысячки триггеров в одну ячейку (без gamemode, только ontriggerenter\leave) и бегали вокруг. Лагало адски из-за количества активных объектов, но просадка фпса не менялась при срабатывании онтриггер блоков, с чего сделали вывод "можно юзать". Около сотки триггеров ведут себя так же как сотня обычных объектов. С живыми маркерами есть 3 основных проблемы. 1) на них толком не повесить скрипт. 2) Они живые, а значит есть вероятность что игра протупит, начнут агриться\бегать по локе\дохнуть\глючить. 3) Они живые#2, игра работает с существами иначе чем с объектами, на них тратится больше ресурсов. Переизбыток существ и акторов в ячейке неизбежно посадит кадры. И вот это уже интересней. Я на недельке поэкспериментирую. Может отсутствие ИИ-пакетов уберет лаги. В таком случае первые 2 минуса можно как-то да обойти, получится очень круто. Масса вещей есть где трюк такой можно провернуть вместо тяжелых лупов. Было б круто.
_KIRA_, так вроде Юпитер вполне определил проблему:
Цитата Joopeeter
Это потому что там не сказано, что копию двери надо назначить постоянной ссылкой.
Другой причины я тоже не вижу. Кстати, там же, у Юпитера в посте, есть дельный совет по размещению объектов ЗЫ. назначить постоянной ссылкой - это значит, что у копии двери (той, что на локации) нужно отметить чек-бокс "Persistent Reference".
КсюXa, спасибо! И тебе и Юпитеру очень благодарен) Теперь немного такая проблема: сделал все как нужно, назначил постоянную ссылку, теперь не могу нажать на пульт управления дверью, в игре он просто стоит, никак нельзя активировать, будь то он обычная текстура