Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
Я тут накатал было один способ без этой функции, но потом сообразил, что он имеет тот же недостаток, что и с ней: кто бы ни убил когтя, счётчик увеличивается. Хоть и немногие помимо игрока на это способны, но всё же.
Пожалуйста! Помогите склепать такую задачу, по идее не слишком сложна должна быть.
Берется 1 активатор в виде консольной панели, который будет выводить сообщение (разное); 1 активатор рычаг; 5 активаторов переключателей (те, что с красной(выкл) и зелёной(вкл) лампочкой и 1 терминал.
Суть квеста - нужно настроить соотношение давления газа. Нажав на консольной панели нам показывает сообщение (начальный статус) - [0:100]
Рядом с терминалом прикреплены 5 переключателей. Каждый из них обозначает свою скрытую цифру. первый переключатель - это 1; второй - это 2; третий - это 4; четвертый - это 8; пятый - это 16. В терминале следующее сообщение: [Числовой множитель], открыв его выводятся числа: 1, 2, 3, 4.
Нажав на первый переключатель (1), посмотрим на консоль, оно выдаст сообщение [1:99] Если нажать на первый(1) переключатель и на третий(4), а потом посмотреть на консоль, она выдаст сообщение [5:95]. (потому что включены переключатели один(1) и три(4): 1+4=5) Если не меняя включенные переключатели, открыть терминал, можно выбрать множитель - например 3. Теперь сумма всех переключателей умножается на 3. Переключатель один(1) и три(4) будут выводить сообщение у консоли (1+4=5*3=15) - [15:85] Если включить все переключатели, и выставить множитель 4, то сообщение будет [100:0], (вместо 124:0, так как 100 это максимальное должно быть).
Задача: уравновесить давление - нужно [50:50]. Это переключатель один(1), четыре(8) и 5(16) (1+8+16=25) и в терминале ставим множитель на 2, (25*2=50). Теперь поворачиваем рычаг, и открывается большая железная дверь. Ах да, если выставлено любое другое соотношение, кроме как 50:50, то при повороте рычага происходит взрыв с последующей смертью ГГ.
Такая вот идея. Огромное спасибо, если поможете воплотить её в фоллыч.
>>кто бы ни убил когтя, счётчик увеличивается. А увеличивается даже если пишешь плэйера - Player.GetDeadCount ? А все таки как же можно сделать так чтоб при убийстве 20 разных когтей с разным ИД появлялся мессадж? Есть какие сособы? может какие другие команды есть которые можно прописать?
вам наверное этот вопрос несложный
а в gekk нету готового скрипт где это сделано?
>>"Помирить" ты их никак не сможешь, если функция не работает со списками, то она не работает не чуть-чуть а насовсем.. Спасибо за ответ. Жаль значит нужно другой спосб искать
Беседке тоже вопрос был не сложный... Для того, чтоб отследить убийство всего лишь 5 кротокрысов пришлось "мутить" целый квест с кучей переменных, делать отдельный базовый и объектный эффект и цеплять этот эффект к одному определенному оружию. Там правда, упор делался не только на количество, но и на эффект от реппелента : отслеживалось, как убивались крысики - чтоб обязательно со взрывом, но тем не менее... ЗЫ. Убийства отслеживались не по самим крысам, а по "крысиной" фракции". Может и Когтей так же отслеживать?
ЦитатаФиля12 ()
А мне для Фоллаута нужно, там нет этих достижений
Потому то и нет, что в Вегасе разрабам пришлось внести В ДВИЖОК новые функции. Которые отслеживают кучу параметров "изнутри", без всяких внешних, гекковских скриптов.
ЦитатаJoopeeter ()
Хоть и немногие помимо игрока на это способны
Яо-гай, например. У меня вот перк "Друг животных" - так эти мишки гамми мне всегда на помощь приходят.
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
А все таки как же можно сделать так чтоб при убийстве 20 разных когтей с разным ИД появлялся мессадж?
Допустим, я сделаю мод, который добавит в игру новый вид существ по имени "Клошка". Совершенно новое существо. Будет водиться повсеместно и питаться кем попало. Для создания этого существа использую модели-текстуры оригинальных когтей, анимации когтей, все параметры сделаю как у когтей. И для оригинальной игры, и для модов - для всех кроме игрока - это новое существо совершенно не коготь и никакого отношения к когтям не имеет, и поэтому, разумеется, никакая считалка когтей ни за что не согласится убийство этих "клошек" считать убийством когтей. А вот игрок с первого взгляда скажет - это ж коготь! Называется не так, но я же вижу!
Поэтому ответ на твой вопрос категорически отрицательный: никакой мод не сможет считать разных когтей.
Теперь вернёмся к твоей идее списка блюдей когтей. Чтобы не портить базовые объекты и не конфликтовать с другими модами, перво-наперво берём AddSpell и прицепляем на каждого базового когтя из списка свой Actor Effect со скриптовым Base Effect внутри. А скрипт этого эффекта висит ждёт пока носитель эффекта не помрёт, после чего смотрит "IsKiller Player", и если смертельный удар был нанесён ГГ - плюсует какую-то там глобальную переменную. Тот же квестовый скрипт, который поначалу развешивал эффекты, в основное время сидит и ждёт, чтобы та глобальная переменная стала кратна 20, а чуть ой выдаёт сообщение "Наш пострел уже мастер маникюра N-го разряда!"
Такой вариант не будет считать любых когтей, и он будет засчитывать только нанесение смертельного удара - но это довольно-таки похоже на то, чего ты хотел добиться вначале.
Ещё GetCauseOfDeath есть! Правда, будет трудно доказать, что метнул барана (если причина смерти - попадание бараном по лбу) именно ГГ... Пусть считается самоубийством (cf.: suicide by drawing on a cop )
Про GetCauseOfDeath я не забуду, потому что успел хорошенько побиться об неё головой. Потом понял, что она на самом деле толком не работает - то покажет 0 на зашибленном бараном, то -1 на мёртвом, то ещё что-нибудь несуразное...
>>Может и Когтей так же отслеживать? Спасибо за ответ. Интересно, разбирался - там скрипит сидит на самом репеленте и выходит ты репелентом при убийстве считаешь. Так? а мне надо любым оружием: кулак репелент или гранатомет - неважно.
>>перво-наперво берём AddSpell и прицепляем на каждого базового когтя из списка свой Actor Effect со скриптовым Base Effect внутри. >>Тот же квестовый скрипт, который поначалу развешивал эффекты, А как это сделать через скрипт квеста? чего то я не понял - пишу CrDeathClaw.addspell ClawSpell И ничего опять не сохраняется. пишет invalid reference "CrDeathClaw" (only object reference and reference veriables are allowed in this context) CrDeathClaw это ж ведь же базовый коготь? и писал CrDeathClawList.addspell ClawSpell список тоже не сохраняется. как цеплять актор эффект скриптом квеста?
>>плюсует какую-то там глобальную переменную это еще за что такое? как ее делать?
там скрипт сидит на самом репеленте и выходит ты репелентом при убийстве считаешь
А я так и написала в том сообщении: - цеплять этот эффект к одному определенному оружию.
ЦитатаФиля12 ()
пишет invalid reference "CrDeathClaw"
А думать? А взять словарик и перевести, что написано в сообщении об ошибке? invalid reference "CrDeathClaw" (only object reference and reference veriables are allowed in this context) - неверная ссылка. Только референсный объект и ссылка на переменную допустимы в данном контексте. Объект в данном случае - это копия базового Когтя, размещенная в локации (хотя, вроде бы базовому тоже можно дать спелл). Значит ошибка в ClawSpell
ЦитатаФиля12 ()
пишу CrDeathClaw.addspell ClawSpell
А перед этим создал этот самый ClawSpell?
ЦитатаФиля12 ()
>>плюсует какую-то там глобальную переменную это еще за что такое?
Ннуууууууу... Глобальная переменная - это такая же переменная, как и в скриптах, только для её объявления в ГЕКК есть отдельный раздел Globals. И к глобальной переменной (variables по-английски, а не veriables) любой скрипт (хоть полный, хоть результ-скрипт стадии квеста или топика) может обратится напрямую. Т.е. - не надо указывать к какому скрипту относится эта переменная, что значительно упрощает жизнь мододелу.
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
>>Значит ошибка в ClawSpell >>А перед этим создал этот самый ClawSpell? Я пока сделал его как актор эффект у болотника (водяное дыхание) MirklurkWaterBreathing но через addspell он не ставится базовому когтю никак. пробовал еще и прямо его ставить CrDeathClaw.addspell MirklurkWaterBreathing - то же не ставится и ту же ошибку показывает а MirklurkWaterBreathing он у блотника стоит значит должен ставится. я только не пойму почему тогда когтю он не ставится скриптово, через addspell? вы же пишите что базовому спелл можно дать?
>>в ГЕКК есть отдельный раздел Globals Спасибо теперь понял. Я раньше этот раздел видел только не знал зачем он нужен.
>>(variables по-английски, а не veriables) А я по памяти с ошибки печатал. сам ошибся не знаю как скрины тут выкладывать.
Объект в данном случае - это копия базового Когтя, размещенная в локации (хотя, вроде бы базовому тоже можно дать спелл).
Спелл даётся именно базовому объекту (в отличие от CastImmediateOnSelf), но, к сожалению, работать надо через референс. Та же ерунда, что с SetEssential, SetItemValue и другими подобными функциями. У скрипт-экстендера по крайней мере для подобных случаев есть двойной синтаксис (одну и туже функцию можно вызвать через референс с точкой или явно указывая базовый объект в командной строке).
ЦитатаФиля12 ()
CrDeathClaw это ж ведь же базовый коготь? и писал CrDeathClawList.addspell ClawSpell список тоже не сохраняется. как цеплять актор эффект скриптом квеста?
Как это сделать. Создаёшь пустой интерьер (Interior Cell), никакие свойства ему задавать ни к чему. В этот интерьер помещаешь по экземпляру когтей для каждого базового объекта; никак их не настраиваешь, только выставляешь экземплярам флаг Persistent и даёшь имена (EditorId). После чего в скрипте дёргаешь каждого из этих висящих где-то там в пустоте когтей по имени, вызывая для каждого из них AddSpell - после чего про бедняг можно забыть, их смысл жизни исполнен: базовые объекты получили спелл.
Можно наплевать на конфликты и отредактировать базовые объекты, прописав им свой спелл явно - в этом случае пустая комната с когтями в вакууме не нужна.
Добавлено (21 Марта 2015, 22:49) ---------------------------------------------
ЦитатаФиля12 ()
не знаю как скрины тут выкладывать
Рекомендую использовать http://savepic.net/ - шустро, без мусора и даёт готовый BB-код для вставки в форумы...
Заходишь на сайт, ссылку на который тебе дал Ипатов, загружаешь туда нужную картинку (там всего две кнопки: Выберите файл и Отправить) После отправки откроется окно, в котором будут даны коды для вставки. Выбираешь код "превью с миниатюрой" (см. скриншот ниже), копируешь код и вставляешь в свое сообщение.
Цитаты здесь, на форуме: выделяешь в тексте пользователя тот фрагмент, который хочешь процитировать и жмешь под сообщением этого же пользователя кнопку "Цитата".
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
Как это сделать. Создаёшь пустой интерьер (Interior Cell), никакие свойства ему задавать ни к чему. В этот интерьер помещаешь по экземпляру когтей для каждого базового объекта; никак их не настраиваешь, только выставляешь экземплярам флаг Persistent и даёшь имена (EditorId). После чего в скрипте дёргаешь каждого из этих висящих где-то там в пустоте когтей по имени, вызывая для каждого из них AddSpell - после чего про бедняг можно забыть, их смысл жизни исполнен: базовые объекты получили спелл.
Хох! часа 2 сидел разбирался со всем этим Ходил читал туторы - не знал ничего ни как Interior создавать ни как экземляры когтей в окне настраивать, еще скриптовые эффекты эти
Interior сделал, когтей всех выкинул (8 шт разных), назвал их всех, скрипт квеста написал где каждому зверю через addspell добавил актор-эффект. Скрипт сохранился (я рад!). Потом второй скрипит сделал где Script Type - Effect, в base effect его, а потом этот base effect в актор эффект - это я уже в gekk смотрел, на других эффектах.
И опять ничего не работает!
вот такие скрипты написал может что там не так,
скрипт квеста:
scn DeathClawAddSpellScript
short DeathClawAddSpell
Begin GameMode
IF DeathClawAddSpell == 0 SET DeathClawAddSpell TO 1 CrDeathClaw01.addspell ClawSpell CrDeathClaw02.addspell ClawSpell CrDeathClaw03.addspell ClawSpell CrDeathClaw04.addspell ClawSpell CrDeathClaw05.addspell ClawSpell CrDeathClaw06.addspell ClawSpell CrDeathClaw07.addspell ClawSpell CrDeathClaw08.addspell ClawSpell SHOWMESSAGE AllClawAddSpell ENDIF
IF DeathClawCount >= 20 SHOWMESSAGE DeathClawCountMess ENDIF
END
------
скрипт эффекта:
scn DeathClawCuterScript
Begin GameMode
IF IsKiller Player == 1 SET DeathClawCount TO DeathClawCount+1 ENDIF
END
DeathClawCount - это переменая global вместо Begin GameMode пробовал Begin OnDeath и все равно не работает.
------ так еще актор-эффект когтям в actor effect list ставил (без скрипта) и все равно ничего. не появляется мессадж. я уже замучался когтей долбать!
ЦитатаIpatow ()
Рекомендую использовать http://savepic.net/ - шустро, без мусора и даёт готовый BB-код для вставки в форумы...
ЦитатаКсюXa ()
Цитаты здесь, на форуме: выделяешь в тексте пользователя тот фрагмент, который хочешь процитировать и жмешь под сообщением этого же пользователя кнопку "Цитата".
Спасибо! Уже попробовал
Добавлено (22 Марта 2015, 12:27) --------------------------------------------- Еще забыл что на счет когтей написать: если скрипт-считалку из эффектов поставить на самих базовых когтей с Begin OnDeath, тогда все хорошо считается и все нормально. Но там на некоторых когтях уже другие скрипты стоят, как тогда быть? Не охота чтот лезть туда.
IF DeathClawAddSpell == 0 SET DeathClawAddSpell TO 1
А зачем это? Переводим на нормальный язык: Если переменная DeathClawAddSpell равна 0 настраиваем эту переменную как 1. -------- Для чего настраиваем? Больше нигде в скрипте не упоминается эта переменная и что делать скрипту, когда значение переменной равно 1. Так что это просто лишние строчки. Затупила, согласна...
Добавлено (22 Марта 2015, 12:40) ---------------------------------------------
ЦитатаФиля12 ()
скрипт эффекта:
scn DeathClawCuterScript
Begin GameMode
if IsKiller Player == 1 SET DeathClawCount TO DeathClawCount+1 endif
END
Вроде бы у эффектных скриптов надо писать не GameMode а ScriptEffectStart или как-то в этом роде.
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
Извини не смог удержаться... "Cuter" - это не просто "милый", а "ещё более милый"! Воистину,
ЦитатаКсюXa ()
ми-ми-ми...
Лучше что-нибудь брутальное вписать, типа Exterminator
По делу. В скрипте эффекта надо, наверное, сначала проверять GetDead, и только у мёртвого однократно смотреть на IsKiller. И про это где-то говорилось, но тут вроде не было напоминания - базовый эффект должен быть с флажком No Death Dispel.
Из соображений проверки временно добавь какой-нибудь ещё визуальный эффект - скажем, постоянно в Actor Effect воткни какой-нибудь хамелеон (чтоб по полупрозрачности сразу было видно - висит эффект на когте). А в скриптовый эффект вставь в момент обнаружения "ой я помер" навешивание шейдера - скажем, огнемётного: как труп загорелся и дым пошёл, значит, счётчик обновился. Удобнее так проверять, чем всё время в консоль лазить - да и там иногда тоже до нужного не достать (значения переменных эффектового скрипта, например, никакими силами не узнать).
Добавлено (22 Марта 2015, 12:52) ---------------------------------------------
ЦитатаКсюXa ()
Больше нигде в скрипте не упоминается эта переменная и что делать скрипту, когда значение переменной равно 1
Проснись! Это же гейммода, повторяющаяся фрейм за фреймом, и одна-проверка/один-переворот - классический DoOnce, просто более содержательно названный...
ЦитатаКсюXa ()
Вроде бы у эффектных скриптов надо писать не GameMode а ScriptEffectStart или как-то в этом роде.
Ой, что-то и мне проснуться надо. В эффект-скрипте, конечно ScriptEffectUpdate нужен, а не гейммода
Вроде бы у эффектных скриптов надо писать не GameMode а ScriptEffectStart или как-то в этом роде.
Вроде бы да (точнее, ScriptEffectUpdate), но и гейммод, как это ни странно, работает тоже.
ЦитатаIpatow ()
В скрипте эффекта надо, наверное, сначала проверять GetDead, и только у мёртвого однократно смотреть на IsKiller.
А я бы задал условие GetDead в самом актор-эффекте и пусть он сам и проверяет. А проверку глобальной переменной и показ сообщения всунул бы в актор-эффект в ScriptEffectStart (или Finish, в зависимости от настройки условия GetDead). И тогда квест можно остановить после раздачи эффектов, чтобы не гонять гейммод почём зря.
ЦитатаКсюXa ()
Для чего объявлена переменная и что она делает?
Одноразовость же! В отличие от
Код
IF DeathClawCount >= 20 SHOWMESSAGE DeathClawCountMess ENDIF
Чтобы игрок не забыл, какой он замечательный молодец.
Лучше что-нибудь брутальное вписать, типа Exterminator
та хоть что впишу лишь бы работал
ЦитатаIpatow ()
По делу. В скрипте эффекта надо, наверное, сначала проверять GetDead, и только у мёртвого однократно смотреть на IsKiller. И про это где-то говорилось, но тут вроде не было напоминания - базовый эффект должен быть с флажком No Death Dispel.
ЦитатаJoopeeter ()
А я бы задал условие GetDead в самом актор-эффекте и пусть он сам и проверяет.
Хох! пока ничего не получается с этим Если ставлю проверяю GetDead с скрипте-считалке то ничего, а если в актор-эффекте то после того как забью одного зверя сразу получаю мастера. что-то тут не то но я еще покопаюсь в этом
ЦитатаJoopeeter ()
Чтобы игрок не забыл, какой он замечательный молодец.
ну там да - переменную нужно использовать, я просто ее не стал ставить пока. чтобы дойти до этого уровня. я так еще количество с 20 до 4 убрал пока - надоело уже по 20 когтей грохать чтобы только скрипт проверить
Я пока этот скрипт сделаю и так уже мастером по подстриганию когтей стану - без всякого мессаджа
если в актор-эффекте то после того как забью одного зверя сразу получаю мастера. что-то тут не то
Однократно проверяй. Заверни с таким же DoOnce, как заворачивал AddSpell, иначе работает: таак... я умер.. меня убил ГГ.. звезду графу Суворову! таак.. я всё ещё мёртв.. убийца всё ещё ГГ.. звезду графу Суворову! таак... я всё ещё мёртв...
Если ставлю проверяю GetDead с скрипте-считалке то ничего, а если в актор-эффекте то после того как забью одного зверя сразу получаю мастера. что-то тут не то
Я, кажется, путано выразился. Я имел ввиду, что GetDead проверял бы не в скрипте, а поставил бы условие для базового эффекта в поле для условий, в окне актор-эффекта. А скрипт сделал бы срабатывающим однократно при старте или окончании эффекта (в зависимости от настройки условия). А то сейчас на каждом когте крутится ScriptEffectUpdate ради одного единственного срабатывания.
ЦитатаФиля12 ()
Я пока этот скрипт сделаю и так уже мастером по подстриганию когтей стану
Однократно проверяй. Заверни с таким же DoOnce, как заворачивал AddSpell,
Я уже не буду спрашивать так ли я сделал или нет, но главное что вроде получилось что мне надо. как я сделал: первое - выбросил из скриптвого эффекта все проверки на смерть оставил только считалку global и добавил простую переменную
scn DeathClawCuterScript
short DeadCr
BEGIN GameMode IF DeadCr == 0 SET DeadCr TO 1 SET DeathClawCount TO DeathClawCount+1 ENDIF END
а IsKiller Player поставил в актор-эффект только я так и не понял Begin GameMode - Begin ScriptEffectUpdate - какая между ними разница в эффекте скрипта? ставил и то и другое - одинаково работает. оставил как было GameMode
второе - в квесте добавил переменную, даже не добавил а продолжил DeathClawAddSpell
IF DeathClawCount >= 20 && DeathClawAddSpell == 1 SET DeathClawAddSpell TO 2 SHOWMESSAGE DeathClawCountMess ENDIF
может чтото тут не так но в игре вроде все хорошо - мессадж появляется. наконец-то! через сутки борьбы.
вот правда я не пробовал как советовал Joopeeter сделать - добавить результат в эффект скрипта. но я уже и трогать ничего не хочу - работает и пусть работает себе.
Всем спасибо за советы! Очень помогли!
Добавлено (22 Марта 2015, 21:03) ---------------------------------------------
ЦитатаJoopeeter ()
Есть же KillAll...
Ха! Интересная весч - оказалось если писать в консоли KillAll Player то все убийства гг засчитываются. даже нигде не читал об таком, писали просто про чит KillAll и все.
жаль что раньше не знал, а то уже когтей штук 200 перебил пока скрипт проверял. такто дело веселее
Добавлено (09 Апреля 2015, 06:30) --------------------------------------------- Привет! опять борьба! Не знаю даже как быть.
вот хочу сделать захирательную гранату и мне нужно чтобы когда гг или нпц горят, то если прыгнуть в воду, эффект снимался. И еще - чтобы чем дольше эффект, тем сильнее одетые вещи портились.
для оружия вроде есть ModWeaponHealthPerc, чем дольше эффект, тем сильнее оружие портится. Но как быть с минами и гранатами? чтобы не порились. их же не отремонтировать!
и еще - одетые вещи- бронька, шлемы. для них можно как-то сделать так чтобы постепенно портились от эффекта? вроде того как ModWeaponHealthPerc в эффекте скрипта работает, но для бронек.
На счет горения. Вот не знаю как отключить эффект горения когда гг или нпц в воде. есть Dispel для эффекта но как его так прикрутить чтобы снимался в воде? IsSwimming пробовал но чтото не работает
REF target
Begin ScriptEffectUpdate
SET target TO GetSelf
IF target.IsSwimming target.Dispel FireGrenadeEffect ENDIF
END --- это мне для мода для Фаллаут 3 надо если что. Можете помочь?
Да, она так работает. На самом деле тут даже не нужен референс - пишем "если неприцельно IsSwimming, то неприцельно Dispel", и оно самонаведётся куда надо. Неловкий момент там в основном в том, что про ГГ IsSwimming не работает...
Как на ГГ одеть нужную одежду (которя уже в инветаре) например как в ДЛС Мертвые деньги ГГ появляется в комбинезоне уже одетом - в нашем ПОИСКЕ по форуму и так и сяк писал ни черта он не ищет.