Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
Spalny_Vagon, Попробовал, не сработало. Я к первому оператору ветвления добавил еще else с set sFlаg чтоб осуществлялся переход на следующий трек, если данного нет. Тогда у меня получился жуткий шум, видимо он пытался что-то запустить каждую секунду. Добавил затем дополнительную проверку на флаги - он стал играть последнюю песню и исключительно в меню игры или в пипбое... бред.
В общем я решил на это дело забить, жаль в Фоле нет как в скайриме Утилити.вейт =(
[EDIT]А вот еще вопрос, мне надо запустить скрипт в тот момент, когда игрок активирует (на правую кнопку мыши) прицел определенного оружия. Это вообще реально сделать?!
[EDIT]А вот еще вопрос, мне надо запустить скрипт в тот момент, когда игрок активирует (на правую кнопку мыши) прицел определенного оружия. Это вообще реально сделать?!
Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
AlexBoy050 привет! Вспомнил, что давно в журнале "Игромания" видел и использовал в игре консольную команду set timescale to х Сейчас попробовал её в таком скрипте scn AAATestSCRIPT short sDoOnce Begin OnTriggerEnter player if (sDoOnce == 0) set timescale to 500 Set sDoOnce to 1 endif End
И оказалась она работает - время стало идти быстрее. Проверил здесь Консольные функции в списке такой команды нет! Проверил здесь Функции - то же нет! Но в игре эта не существующая команда (функция) работает Выяснилось, что при отрицательном значении set timescale to -500 Время идёт назад! Солнце садится на востоке! А всходить не хочет
Вечная ночь! Неписи не замедляются, не ускоряются и назад бегать не хотят.
KAIN48, я подозреваю, что автор вопроса хотел как раз таки слоу-моушен
Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Всем привет! Для того чтобы узнать какой предмет находится на слоте быстрой панели, есть команда GetHotkeyItem. А есть ли команда для установки предмета на слот быстрой панели?
Приветствую.В пипбое правым кликом ставится маркер на глобальной карте.Вопрос заключается в том,как заставить НПС напарника ,двигаться к этому маркеру на тактической карте-местности.Телепорт не интересует,так же как и система заранее установленных на местности маячков-маркеров тоже.Если был такой скрипт-напомните код,если встречалось в каком то моде-пришлите ссылку на мод.Заранее благодарен.В случае если будут нужны более подробное изложение условий-то это же в моих интересах,так что при наличии идей спрашивайте.
rusik, Слушай, интересная система, самому интересно, а если это же самое сделать с 10 солдатами, сделать такой тактически-стратегический момент в игре?
Вопрос по триггеру и GameMode. Если я привяжу к триггеру скрипт с GameMode, то он будет активен всё время? Или только тогда активируется, когда игрок войдёт в триггер (т.е. начало с BeginOn TriggerEnter), а выидя из триггера -деактивируется? Хотелось бы уточнить. Спасибо.
Вдохни… взгляни вокруг, поверь в спасенье, Ведь между злом - песчинки доброты… И вспомни, прочитай в безбрежном небе, Что кто-то дышит, пока дышишь ты...
GameMode будет активен всё время, пока триггер в загруженной области. Ну, может, будет пореже обрабатываться, когда он на краю этой области, то есть далеко от игрока. Если надо чтобы работало только когда игрок внутри, то для этого есть блок OnTrigger с параметром player. Ещё можно отслеживать вхождение игрока в блоке OnTriggerEnter, выхождение в блоке OnTriggerLeave, а остальное делать в гейммоде или ещё где-нибудь. Это если получается слишком огромный триггер. Где-то я читал, что большой триггер чересчур жрёт ресурсы, лучше вместо одного большого огородить область несколькими маленькими.
сли надо чтобы работало только когда игрок внутри, то для этого есть блок OnTrigger с параметром player.
Да. Надо чтобы игрок воидя в триггер вызывал взрыв скажем каждые 2 секунды. Это небыло бы проблемой, если спользовать квест, но насколько я знаю, то в квесте надо писать REFы, а триггеров у меня будет таких огромное количевство. В одной клетке 5-10 и в World около сотни. Вот думаю как сделать, чтоб не потребляло много ресурсов.
Вдохни… взгляни вокруг, поверь в спасенье, Ведь между злом - песчинки доброты… И вспомни, прочитай в безбрежном небе, Что кто-то дышит, пока дышишь ты...
Приветствую. Кто сможет подсказать, как остановить проигрывание музыки ХХХ, которую запустил через скрипт PlayMusic ХХХ. Надо чтобы это музыка играла только в определенном месте (интерьере). В свойствах интерьера в разделе тип музыки я выбирал нужное, но воспроизведения так и не было. Пришлось запускать скриптом.. Запустить получилось, но теперь это музло играет везде и всегда. Цикличность нужна, но повторюсь, только чтобы произведение игралось в определенном месте. Я в тупике. Сможет кто-нибудь что-то подсказать?
Привет всем! Помогаю одному человеку сделать короткоствольный миниган, как рельсовая винтовка стреляющий костылями. Переделываем скаченный с Нексуса. Добавили новые стволы и вращение. И решили сделать баллон на спине связанный с миниганом шлангом. Баллон это одежда, а миниган это оружие! Помогите написать скрипт - при взятии в руки минигана, одевается баллон При убирании минигана - баллон снимается. И как сделать что бы баллон не был виден в инвентаре - вроде снять галку Playable?
scn MinigunInnova Begin Gamemode if (Player.IsWeaponInList MiniGunN) && (player.isweaponout ==1) player.additem BacTancN 1 1 player.EquipItem BacTancN 1 1 endif if (Player.IsWeaponInList MiniGunN) && (player.isweaponout ==0) if player.getequipped BacTancN == 1 player.removeitem BacTancN 1 1 endif endif end
Для работы нужен квест, к которому и будет прицеплен скрипт. Квест стартует с началом игры, среднеоборотистый. Где то 1 сек. Ещё нужен форм лист MiniGunN, куда мы поместим наш новый миниган. BacTancN- это баллон.
З.Ы. Если галочку Playable снять, то баллона не только в инвентаре не будет видно, но и в игре. В нашем случае галку снимать не нужно, т.к. баллон удаляется на время когда миниган неэкипирован.
Помогите написать скрипт - при взятии в руки минигана, одевается баллон При убирании минигана - баллон снимается.
А не проще добавить баллон в Armor List во вкладке Art and Sound у этого минигана? Насколько понимаю - в данном поле выбирается список (форм-лист) одежды, которая должна показываться в комплекте с данным оружием. Независимо - есть эта одежда у игрока в инвентаре или нет.
ЦитатаРимайер ()
если галочку Playable снять, то баллона не только в инвентаре не будет видно, но и в игре
а вот и нет (сказала маленькая Никола)... При снятой галочке одежда не отображается в инвентаре, но на неписях её видно.
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
Здрасти! Все не читал ибо лень (92 страницы!!!) Поиск тоже не выручил, решил спросить: Хочу скрипт, на воскрешение ГГ, в доме дока Митчела, но полностью ограбленного, кроме квестовых вещей. Порылся на сайтах, учебник почитал (правда для обливиона), в итоге получилось навоять такое... полностью не рабочее чудо)) Тип скрипта я так понимаю, должно быть Quest... Решил обратиится к знающим, ибо не совсем понимаю как работает таймер, и в целом механика. Со скриптами мало знаком, по Unity.
scn PlayerRessurect
float Timer int DeadSt1 ref MitchelID
Begin GameMode if (player.GetDead == 1); Игрок мертв Set DeadSt1 == 1; переменная DeadSt1 равна 1 и ShowMessage ID; Показ текста и Set Timer to 3; Установка таймера на 3? elseif (player.GetDead == 0); Иначе, если игрок жив то, DeadSt1 == 0; Переменная DeadSt1 false if (DeadSt1 == 1); если, переменная DeadSt1 равна 1, то imod FadeToBlack5sISFX; включение эффекта Темный экран и, DisablePlayerControls 1 1 1 1 0 1 1; Блокировка управления, и Set Timer to 4; Установка таймера на 4? и, set Timer to Timer - GetSecondsPassed; - ??))) 3-4=1? сек?))) PLayer.GetDead == 0 && Player.resethealth && Player.MoveTo RefID; Воскрешаем и перемещаем игрока Player.RemoveCaps001 999999; Забираем все крышки Player.RemoveAllItems; И не квестовые вещи? ShowMessage ID2; показ текста EnablePLayerControls Set Player.GetDead == 0 endif endif endif return; Перезапускаем скрипт, для много разового использования END
Добавлено (16 Января 2015, 21:50) --------------------------------------------- Я не ахти какой скриптер, но явные ошибки уже вижу
ЦитатаKi1burn ()
PLayer.GetDead == 0 && Player.resethealth && Player.MoveTo RefID; Воскрешаем и перемещаем игрока
Строчка не работает. Получается, что там написано, что для выполнения должно пройти одновременно (&&) три проверки условий , но при этом два из перечисленного проверками не являются. Проверка условия тут одна - проверка ГетДед, а резет здоровья и перемещение - это уже команды. Сначала надо проверить - жив ли "поциент" (это проверка условия выполнения команд) Затем - сброс здоровья (выполняемая команда, если условие выполнения истинно) Затем - перемещение. (следующая команда) Все функции - в отдельной строке, а не через знак И (&&), потому что это разные вещи и не могут быть выполнены одновременно. if Player.GetDead == 0 ; если "клиент мертв? == НЕТ " - то.... (сделать следующее) Player.resethealth ; сброс здоровья (зачем? он ведь жив) Player.MoveTo RefID ; переместить игрока к ... endif ; конец цитаты
ЦитатаKi1burn ()
Set Player.GetDead == 0
Неверно. Гет Дед - это встроенная проверка на жив-мертв и настроить (Set) её никак нельзя, потому что она не настраиваемая. Она просто возвращает ноль (нет, не мертв) или единицу (да, мертв) в зависимости от того - жив или нет проверяемый на момент проверки. И вообще - все функции начинающиеся на Get или Is - это функции проверки чего либо.
ЦитатаKi1burn ()
elseif (player.GetDead == 0); Иначе, если игрок жив то, DeadSt1 == 0; Переменная DeadSt1 false
Вторая строчка тут просто висит в воздухе. Кста... компилятор скриптов не ругается при сохранении скрипта? Ставь Глюкоисправитель и тогда, если в скрипте есть некомпилируемые команды и некорректные функции - то будет выскакивать окно с предупреждением и даже с пояснением, в какой строчке искать ошибку. Удобно.
ЦитатаKi1burn ()
Хочу скрипт, на воскрешение ГГ, в доме дока Митчела, но полностью ограбленного, кроме квестовых вещей
Так понимаю - ограбленного не в начале игры, а по ходу? В принципе - можно сделать по аналогии со стартовым квестом. Там игрока "грабють и убивають" и очухивается он у дока М. Рассмотри этот квест, обращая внимание на результ-скрипты стадий квеста и результ-скрипты диалогов.
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
Буду разбиратся... Спс, за коментарий ------------------------Компилятор не ругаетсО( на вторую строчку или я что не так делаю может?!) Хотя на меня ругается, почти во всем, говорит, мол: "рукожоп, куда ты лезешь?!"))) ------------------------ scn PlayerRessurect
float Timer int DeadSt1 ref MitchelID
Begin GameMode if (player.GetDead == 1); Игрок мертв Set DeadSt1 == 1; переменная DeadSt1 равна 1 и ShowMessage ID; Показ текста и Set Timer to 3; Установка таймера на 3? if (DeadSt1 == 1); если, переменная DeadSt1 равна 1, то imod FadeToBlack5sISFX; включение эффекта Темный экран и, DisablePlayerControls 1 1 1 1 0 1 1; Блокировка управления, и Set Timer to 4; Установка таймера на 4? и, set Timer to Timer - GetSecondsPassed; - ??))) 3-4=1? сек?))) Player.IsDead == 0 Player.resethealth && Player.MoveTo RefID; Воскрешаем и перемещаем игрока (&& - используется только в условии?) Player.RemoveCaps001 999999; Забираем все крышки Player.RemoveAllItems; И не квестовые вещи? ShowMessage ID2; показ текста EnablePLayerControls; Снимаем блокировку управления elseif (player.Getav health > 1); Иначе, если игрок жив то, DeadSt1 == 0; Переменная DeadSt1 false endif endif endif return; Перезапускаем скрипт, для много разового использования END ---------------------------- Не могу найти начальный квест, где игрок просыпается у дока Митчела. Не подскажите как его найти? И будет ли запущен скрип на создание перса?! Этого бы не хотелось. Заранее спс х)
квест VCG00 (Добро пожаловать в Вегас), но там больше половины команд отключено, поскольку весь сценарий разборок на кладбище записали в видео. А вот следующий квест - VCG01 (Удар по голове) как раз организует все действия в доме дока после пробуждения. И в 36 стадии квеста как раз и запускается генератор перса (ShowRaceMenu). С 55 стадии - игрок встает и идет к тестеру. Ну и в 200 стадии квест останавливается и запускается следующий- VMQ01 (Расследование). И, насколько понимаю - ты хочешь, чтобы после убийства игрока игра начиналась не с последнего автосохранения, а чтобы Курьер оказывался в доме дока? Не знаю, возможно ли это. В игре функция Player.GetDead используется всего один раз и то не в игровом режиме. Поскольку, если игрок мертв - то игра заканчивается, верно? Может делать не проверку жив-мертв, а проверять уровень здоровья? Когда оно почти в ноль - помутнение в глазах, потеря сознания, темнота, очнулся - гипс...
===========
Цитата
Set DeadSt1 == 1; переменная DeadSt1 равна 1 и
Слово Set означает - настроить\установить Знак == означает равно (это сравнение с чем либо). Сравнение применяется при проверке условия (равно (==), не равно (!=), больше (>), меньше (<), больше либо равно (>=), меньше либо равно (=<). Поэтому данная строчка бессмысленна: настроить переменную, которая равна 1. Настроить на что? Для изменения значения переменной правильно будет Set DeadSt1 to 1 (настроить дедст1 как 1)
Цитата
Player.resethealth && Player.MoveTo RefID; Воскрешаем и перемещаем игрока (&& - используется только в условии?)
В проверке условий. Знак && означает И. То есть - проверяем перечисленные в строке условия: Если - ( первое должно быть ХХХ И второе должно быть YYY И следующее должно быть ZZZ... ) и если все они истинны в данный момент - срабатывает команда. Например (буду писать по русски, чтоб было понятней): Если (КлиентЖив И КлиентЖенщина И Находится в интерьере) переместить его туда-то.. конец если
Если в данный момент какое-либо условие не истинно (например, клиент не в интерьере, а на улице) то никакого перемещения не будет.
Цитата
Player.resethealth && Player.MoveTo RefID
резет здоровья - команда переместить к - тоже команда Команды нельзя ставить с соединительным союзом И (&&) и с разделительным союзом ИЛИ (||). Команды не могут выполнятся одноврменно (И) и не могут выполнятся по выбору (ИЛИ). Команда выполняется, как в армии: получил одну команду - выполнил. После этого получил вторую - выполнил Но никак не одновременно (В атаку! Отступаем!) или по желанию. В скриптах чтение строчек идет сверху вниз. Считывается одна, проверяются условия выполнения. если условия позволяют - выполняются действия. Если на данный момент игры какое-то условие не истинно - строчка пропускается и считывается следующая.
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
Может делать не проверку жив-мертв, а проверять уровень здоровья? Когда оно почти в ноль - помутнение в глазах, потеря сознания, темнота, очнулся - гипс...
Ну допустим, установить проверку на <=5 хп. Если у игрока будет 6 хп, а входящий урон будет 7, то выходит, что игрок помрет, и толку ни какого. От этого условия. У когтя смерти, в редакторе выставлен урон 230, стандартный. Только если поднимать планку... до <=40-50 хп, а это примерно 1\5 всех ХП.
http://modgames.net/load/fallout3/gejmplej/project_survival/17-1-0-18436, тут как то же реализовано воскрешение?!
Замечания по скрипту принял. Буду думать. Но походу сам не допетрю, может кто знающий напишет сразу плагином?))) за спасибо)
Это надо у Дефокса спросить . Я этот мод не смотрела по причине равнодушия к нему (к моду, а не Дефоксу ) И вроде там ГГ не воскрешается, нет? Там отключено сохранение во время игры, чтобы усложнить игру и увеличены требования к осторожности, дабы геймер не лез на рожон, а действовал более осмотрительно, чтоб не погибнуть. И воскрешения там, как я поняла, нет вообще.
Цитата
После смерти игрок не воскрешается и придется только загружать сохранение сделанное во время последнего сна
То есть - игра уходит в меню и нужно заново вручную загружать сохранение. Как-то так.
Ну или можно подождать мастера Ипатова, который расскажет, что надо сделать.
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
А что это за функция такая IsDead? Что-то не слышал о такой, и как переменная она в скрипте не объявлена...В любом случае, это выглядит как функция условия, а значит нужно ставить IF перед ней (ну и соответственно ENDIF в конце условия). Кстати, перед DeadSt1 == 0 так же нужно ставить эту пару IF - ENDIF.
ЦитатаKi1burn ()
return; Перезапускаем скрипт, для много разового использования
Return не перезапускает скрипт, она блокирует выполнение строчек скрипта после нее. Это полезно если она стоит где-то в середине скрипта, чтобы прекратить выполнение при определенных условиях. В конце скрипта ее использовать бессмысленно..
Цитата
Player.RemoveAllItems; И не квестовые вещи?
Нет, квестовые останутся.
Цитата
ref MitchelID
Здесь объявлена ref-переменная, но в скрипте она не используется..Тогда ее можно удалить.
Тут, похоже, вот что... Ki1burn, без обид. Но ты (можно на ты?), похоже, не совсем понимаешь скриптовый язык. Нельзя написать в скрипте по-английски фразу: - иди и сделай то и то. Или фразу: - проверить то и то. Есть набор готовых функций и команд, которые прописаны в движке игры и только эти команды воспринимаются игрой. И в скрипте мы просто оперируем этим, довольно-таки ограниченным, набором. Есть расширитель скриптов FOSE для Фола и NVSE для Вегаса, в которых добавлены дополнительные скриптовые функции и команды, но опять же - ничего другого, что там есть мы не можем "впихнуть" в скрипт. Список стандартных функций.
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
Какой командой сделать проверку на "выбита конечность\ либо нет"?
В смысле, оторвана или просто не функционирует? Если оторвана, то, если не ошибаюсь, только через функцию IsLimbGone можно проверить (на счет нее точно не уверен, не приходилось работать с ней), а если не функционирует, сделать проверку на "здоровье" конечности через Getav, если значение будет <= 0, то значит что конечность как бы не функционирует. Например если If player.getav LeftAttackCondition <= 0, значит "если левая рука не функционирует". Название конечностей такие: perceptioncondition, endurancecondition, leftattackcondition, leftmobilitycondition, rightattackcondition, rightmobilitycondition (в соответствии с частями тела).
Если у игрока будет 6 хп, а входящий урон будет 7, то выходит, что игрок помрет, и толку ни какого. От этого условия.
Да, человек смертен, но это было бы еще полбеды. Плохо то, что он иногда внезапно смертен, вот в чем фокус! (С)
Дайте и игроку возможность быть внезапно смертным Я так считаю: если раненому до 6 Хп игроку наносят смертельный удар - он и должен умереть. Это - биология, физиология и прочие логии... И правильность происходящего. И если НЁХ успевает выдернуть игрока из боя при его 6 Хп до смертельного удара и притащить в дом дока Митчела - это нормально. А если не успела и игрок помер - это тоже нормально. C'est la Vie.