Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
q2werty, няп, стандартными способами невозможно. Попытайтесь покурить НВСЕ, но я сильно сомневаюсь.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Можно поковырять мод с Эми Вонг (для третьей части)- там прическа меняется, если попросить домашнего робота над ней "поработать". В диалоге можно эту прическу выбрать.
tundruck73, дак там, наверное, стандартный вызов чаргена использован. В Ф3 можно было практически каждый шаг по отдельности вызывать, вроде.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
ГГ должен прилечь спать на матрас, но когда просыпается он оказывается в другом месте
Тут хотелось бы уточнить ситуацию - где и как ГГ ложится спать. Может быть четыре варианта: а) ГГ ложится спать в одном интерьере - просыпается в другом интерьере b) ГГ ложится спать в интерьере - просыпается на Пустоши (внешняя ячейка) с) ГГ ложится спать на Пустоши - просыпается в интерьере d) ГГ ложится спать в одном месте на Пустоши - просыпается в другом месте Пустоши
Первые два варианта можно решить "инженерно-строительным способом".
Игрок входит в хижину - просыпается в пещере. Создаешь новую ячейку интерьера и в ней строишь сначала стены и всё прочее от хижины. Ставишь там же кровать. Привязываешь всё построенное к ХМаркеру-родителю, даешь маркеру реф-имя. Скрываешь всё построенное, чтоб не мешалось (как это сделать - ответ в Картотеке), затем в этом же месте, в тех же пределах строишь стены пещеры и все остальное для неё. И тоже привязываешь всё это к другому Хмаркеру-родителю, даешь этому маркеру реф-имя и отмечаешь как изначально отключенный. Далее связываешь телепортом дверь от хижины с дверью во внешней локации, а дверь от пещеры - с другой дверью в той локации, где должен выйти наружу игрок, когда проспится. Затем на кровать хижины вешаешь скрипт, который дизейблит маркер хижины и енейблит маркер пещеры и заодно отбирает вещи игрока в нужный контейнер. Команды прописываются в блоке MenuMode 1012 чтобы подмена стен происходила во время сна и была незаметна. Получается: лег спать - стены и дверь хижины исчезли, появились стены и дверь пещеры. Вроде как проснулся в другом месте.
Скачать образец для разбора Там в Гудспрингс возле заправки поставлена хижина. Заходишь в неё, ложишься спать на кровать, просыпаешься в пещере. Выходишь из пещеры уже далеко на севере от Гудспрингс
Игрок входит в хижину - просыпается в Мохаве. Принцип тот же самый. В том месте Мохаве (или другого мира) где должен проснуться ГГ ставишь кровать, вокруг неё строишь стены, всякую обстановку, ставишь двери - в общем создаешь как бы "псевдоинтерьер". Точно так же всё построенное привязываешь к Хмаркеру-родителю. Даешь маркеру имя и отмечаешь изначально отключенным. Далее в том месте, где игрок должен, типа, зайти поспать, ставишь домик, дверь к нему и связываешь телепортом с дверью "псевдоинтерьера". Перед дверью в домик ставишь триггер, скрипт которого при входе в него игрока включает маркер "псевдоинтерьера". А на кровать в этом "псевдоинтерьере" вешаешь скрипт, который в меню-моде отключает маркер "псевдоинтерьера". В итоге: заходишь вроде бы в домик в одном месте Мохаве, но дверь-телепорт переносит тебя совершенно в другую местность. А вокруг - якобы стены интерьера, которые во время сна расстают без следа. И оказываешься в пустыне.
Скачать образец для разбора. Там возле заправки Гудспрингс стоит хижина. Входишь в неё, ложишься спать, просыпаешься в пустыне далеко на северо-востоке. Внимание! Не подключать оба образца в игру или редактор одновременно!
Конечно оба плагина созданы на скорую руку, чтобы только проверить в работе сам принцип. Есть еще нюансы по отработке ситуаций, к примеру - если вдруг игрок зашел в хижину, но не стал ложиться спать и снова вышел, а "псевдоинтерьер уже "материализовался" и на него можно наткнуться по ходу игры ну и т.д. и т.п. Но это уже по ходу работы решается. Насчет двух последних вариантов - тут сложнее. Пока не придумал ничего
Добавлено (30 Марта 2014, 07:32) --------------------------------------------- Что-то я затормозил Вариант С аналогичен варианту В, только делается наоборот: в нужном месте Пустоши размещаешь заскриптованный матрас, строишь вокруг него изначально отключенный "псевдоинтерьер", а телепорт двери из интерьера выводишь в ту местность, куда должен выйти ГГ после пробуждения. В итоге игрок натыкается на матрас, ложится спать, во время сна появляются стены якобы комнаты или пещеры. Проснувшись, игрок выходит из этой, якобы пещеры, а дверь телепорт переносит туда, где нужно тебе, чтоб он появился.
Можно поковырять мод с Эми Вонг (для третьей части)- там прическа меняется, если попросить домашнего робота над ней "поработать". В диалоге можно эту прическу выбрать.
q2werty, в этом моде аж целых 70 (семьдесят!) с хвостиком Эми Вонгов При выборе прически в диалоге скрипт "подсовывает" новую Эми с нужным хайером.
if AWQAmy.hair == 1 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA01 elseif AWQAmy.hair == 2 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA02 elseif AWQAmy.hair == 3 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA03 ... ... ... ... ... elseif AWQAmy.hair == 69 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA69 elseif AWQAmy.hair == 70 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA70
Но по сути же, не должно это быть так сложно! Всего лишь отображение..
Нет. Там нужно менять именно модель. Т.е. модель одной причёски заменяется другой. По сути - одна часть тела заменяется другой. Беседка нам такого инструмента не дала. Авторы НВСЕ - не знаю, не курил.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя Tyddyner
TyddynerOffline
Сообщение №1332
написано: 9 апреля 2014, 11:33
| Отредактировано: Tyddyner - 9 апреля 2014, 11:49
Доброго времени суток. Пытался заняться скриптами (захотел сделать три типа боеприпасов ж/д винтовке - дротики, мусор и костыли) покурил мануалы, почитал чужие скрипты и запилил свой. При попытке сохранения ошибка:
Орфографию проверил, но возможно, недоглядел. Вот сам скрипт:
scn A13RailwayAmmoChoiceScript short A13Key float A13WeaponCond
begin OnEquip player ifMenuMode 1002 ShowMessage a13RailwayAmmoChoice endif end
begin MenuMode 1002 setA13Key to GetButtonPressed ifA13Key < 1 return elseifA13Key == 1 setA13WeaponCond to player.GetWeaponHealthPerc player.AddItemWeapRailwayRifle 1 1 player.EquipItemWeapRailwayRifle 1 0 1 player.SetWeaponHealthPercA13WeaponCond removeme elseifA13Key == 2 setA13WeaponCond to player.GetWeaponHealthPerc player.AddItemWeapRailwayRifleDart 1 1 player.EquipItemWeapRailwayRifleDart 1 0 1 player.SetWeaponHealthPercA13WeaponCond removeme elseifA13Key == 3 setA13WeaponCond to player.GetWeaponHealthPerc player.AddItemWeapRailwayRifleTrash 1 1 player.EquipItemWeapRailwayRifleTrash 1 0 1 player.SetWeaponHealthPerc A13WeaponCond removeme endif end
Строчку 18 выделил голубым.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №1333
написано: 9 апреля 2014, 11:51
| Отредактировано: ValLео - 9 апреля 2014, 16:05
Tyddyner, ifMenuMode - пишется раздельно if MenuMode а также в остальных строчках тоже есть слияния (если текст скрипта приведен вточности) Попробуй так begin OnEquip player if MenuMode 1002 ShowMessage a13RailwayAmmoChoice endif end
begin MenuMode 1002 set A13Key to GetButtonPressed if A13Key < 1 return elseif A13Key == 1 set A13WeaponCond to player.GetWeaponHealthPerc player.AddItem WeapRailwayRifle 1 1 player.EquipItem WeapRailwayRifle 1 0 player.SetWeaponHealthPerc A13WeaponCond removeme elseif A13Key == 2 set A13WeaponCond to player.GetWeaponHealthPerc player.AddItem WeapRailwayRifleDart 1 1 player.EquipItemWeap RailwayRifleDart 1 0 player.SetWeaponHealthPerc A13WeaponCond removeme elseif A13Key == 3 set A13WeaponCond to player.GetWeaponHealthPerc player.AddItem WeapRailwayRifleTrash 1 1 player.EquipItem WeapRailwayRifleTrash 1 0 player.SetWeaponHealthPerc A13WeaponCond removeme endif end ============================= ну или еще: - попробуй убрать последнюю единичку player.EquipItemWeap RailwayRifleDart 1 0 1
насколько понимаю - у equipitem два параметра, а не три
Изменение репутации для пользователя Tyddyner
TyddynerOffline
Сообщение №1334
написано: 9 апреля 2014, 11:56
| Отредактировано: Tyddyner - 9 апреля 2014, 12:06
Странно, что тут куда-то делись пробелы. Нет, в окошке скрипта всё нормально, пробелы стоят:
Даже скопировал вашу строчку и заменил свою - ошибка та же.
Цитата ValLео
player.EquipItem WeapRailwayRifle 1 0
Да, огромное спасибо - оказывается, сохранению скрипта мешала последняя единица, хотя брал мануал о мультирежимном оружии с этого сайта, и там она стояла.
Изменение репутации для пользователя Artem13
Artem13Offline
Сообщение №1335
написано: 9 апреля 2014, 12:39
| Отредактировано: Artem13 - 9 апреля 2014, 12:42
Tyddyner, дико извиняюсь, это моя ошибка - писал тогда мануал по памяти и неточно воспроизвёл аргументы этой функции . ValLео правильно подсказал. Надо будет поправить. ЗЫ Там в комментариях, кстати, эту ошибку уже находили
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя Tyddyner
TyddynerOffline
Сообщение №1336
написано: 9 апреля 2014, 13:10
| Отредактировано: Tyddyner - 9 апреля 2014, 13:11
Так, при использовании скрипта выявились две ошибки:
Если я выбираю стандартные костыли, ко мне в инвентарь добавляется ещё одна, с состоянием 100%, ж/д винтовка, при этом старая винтовка становится неснимаемой и стрелять можно только из неё. Если тыкнуть на добавленную винтовку, то вновь появляется меню выбора и можно выбрать новые винтовки, при этом они добавляются в инвентарь, но экипировать их нельзя, так как старая винтовка неснимаемая. И да, при выборе типа боеприпасов другие винтовки не удаляются, а множатся в инвентаре (но выкинуть их можно).
Если я выбираю любой другой тип боеприпасов, то новая стандартная винтовка не добавляется, всё нормально заменяется на другую, но при этом новая винтовка становится неснимаемой и клавиш выбора нет (скрипт не запускается).
Возможно, это связано с тем, что винтовка изначально у меня в инвентаре?
Это как? Другим, стандартным, оружием нельзя заменить чтоли?
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя Tyddyner
TyddynerOffline
Сообщение №1338
написано: 9 апреля 2014, 13:37
| Отредактировано: Tyddyner - 9 апреля 2014, 13:37
Это как? Другим, стандартным, оружием нельзя заменить чтоли?
Да, так и получается. И ещё сообщения высвечиваются в левом верхнем углу - "вы не можете бросить изношенное оружие" и "вы не можете снять этот предмет".
Изменение репутации для пользователя Artem13
Artem13Offline
Сообщение №1339
написано: 9 апреля 2014, 15:20
| Отредактировано: Artem13 - 9 апреля 2014, 15:27
Tyddyner, кстати, а зачем такие сложности? Почему нельзя использовать встроенный механизм смены типа боеприпаса? Или он работает только для типа Ammo?
Цитата Tyddyner
Оу, вот про это я не знал - в мануале не было написано
Да по сути не обязательно, просто чтобы исключить возможность замены на совпадающий тип.
Сейчас с ходу не подскажу, покопаться надо. Если хочешь посмотреть как делали другие - скачай и распотроши мод Когтебойки за авторством Римайера.
А, нашёл ошибку - в функции EquipItem последние аргументы должны быть 0 1, а не 1 0. Потому что первый аргумент как раз и отвечает за неснимаемость (1 - неснимаемый). Второй - за вывод сообщения об экипировке (0 - не выводится). Т.е. лишняя там не последняя единица была, а первая
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
А, нашёл ошибку - в функции EquipItem последние аргументы должны быть 0 1, а не 1 0. Потому что первый аргумент как раз и отвечает за неснимаемость (1 - неснимаемый). Второй - за вывод сообщения об экипировке (0 - не выводится). Т.е. лишняя там не последняя единица была, а первая
Спасибо. Сейчас попробую, отпишусь.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №1341
написано: 9 апреля 2014, 16:07
| Отредактировано: ValLео - 9 апреля 2014, 16:25
в функции EquipItem последние аргументы должны быть 0 1
Точно. Я, честно говоря, не вчитывался в описание на Беседке, поелику мне сие зело не важно было по причине равнодушия в силу личной незаинтересованности
Так, теперь всё работает, но не без огрехов - в общем, выбираю я, предположим, обычную винтовку, стреляю костылями. Если я захожу в пип-бой, тыкаю на винтовку и вновь выбираю костыли, винтовка не экипируется, приходится выбирать любой другой тип боеприпасов, получать другую винтовку и уже через неё вновь экипировать костыльную.
Изменение репутации для пользователя Artem13
Artem13Offline
Сообщение №1343
написано: 9 апреля 2014, 16:47
| Отредактировано: Artem13 - 10 апреля 2014, 07:14
Tyddyner, просто используй кнопку Отмена - она оменяет не экипировку, а выбор. А чтобы вариант с костылями не появлялся вообще, в сообщении на эту строчку поставь условие - игрок ей не экипирован (выделяешь строку с кнопкой "Ж/д костыли", в нижнем поле тыкаешь ПКМ и создаешь новое условие. В условии выбираешь - по порядку следования полей - player IsEqupped WeapRailwayRifle != 1). Это если я правильно помню функцию - сам там посмотри по смыслу, у меня нет ГЕККа под рукой. Или распотроши указанный ранее мод, там это всё есть.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Может сможет кто-нибудь подсказать: как в скриптом изменить прическу ГГ или НПС?
У непися - можно попробовать потупому, сделать из прически шапку, тогда нпц её оденет если она в инвентарь упадет. На счет ГГ, была такая фишка в Point Lookout, после того как игроку лаботомию делают, появляется шрам и прическа слетает на остриженую. Посмотрите там, может поможет.
Здравствуйте! Мне вспомнились сладкие времена поиска артефактов в сталкере и я подумал сделать мод по их поиску. Техническая суть мода вот в чем: хочу сделать лутлист из артефактов с маленьким шансом дропа, около 1 процента, а лут поместить в "контейнер" и разбросать их по мохаве (много, учитывая что шанс найти мал) Но вся соль в том, что поиск заметного "контейнера" и его открытие - это примитив, поэтому ставлю еле заметные контейнеры в виде камня, кучки и т.п. Как тогда найти "контейнер"? Вот тут то, с чем я не могу справиться - мне нужен скрипт, позволяющий находить контейнер детектором (типа детонатора С4), нужно чтобы скрипт распознавал контейнеры в радиусе метров 10 и если контейнер не пуст - начинал пищать как детонатор адепта. Все скрипты VMS15 по квесту адепта обшарил, не вижу нужных комманд. Хелп, а, братишки? Скину мод на МГ, будет что поискать)
Изменение репутации для пользователя Spalny_Vagon
Spalny_VagonOffline
Сообщение №1346
написано: 19 апреля 2014, 06:11
| Отредактировано: Spalny_Vagon - 19 апреля 2014, 06:18
нужно чтобы скрипт распознавал контейнеры в радиусе метров 10 и если контейнер не пуст - начинал пищать
Мне кажется, проще на каждый контейнер повесить скрипт, который бы заставлял сам контейнер реагировать на сканер - подавать сигнал об обнаружении и светиться. Ну, что-нибудь вроде этого:
Код
short doOnce begin gamemode if player.getequipped (detectorID) if getdistance plaer < 10 && doOnce == 0 && getitemcount (artefactList) pms [shaderID]; контейнер начинает светиться playsound [soundID];звук обнаружения set doOnce to 1 elseif getdistance player > 15 && doOnce == 1 sms [shaderID];удалить шейдер если игрок вышел из зоны set doOnce to 0 elseif getitemcount [artefactFormListID]== 0 && doOnce == 1 sms [shaderID];удалить шейдер после изъятия артефакта set doOnce to 0 endif endif end
====================== Мод "Нью-Йорк" на русском: 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
Изменение репутации для пользователя NVcesium137
NVcesium137Offline
Сообщение №1347
написано: 19 апреля 2014, 08:24
| Отредактировано: NVcesium137 - 19 апреля 2014, 08:58
Добавлено (19 Апреля 2014, 12:24) --------------------------------------------- Вот я скорректировал с айди, но убрал свечение, можно так? Я верно понял что если дистанция меньше 10ед то он автоматом сразу же дает вещь из листа? ЗЫ корень зандера - для теста
scn zArctsScript
short doOnce begin gamemode if player.getequipped zdetonatordetector if getdistance player < 10 && doOnce == 0 && getitemcount zlootarts playsound WPNMineTick; set doOnce to 1 elseif getdistance player > 15 && doOnce == 1 sms [111] set doOnce to 0 elseif getitemcount XanderRoot== 0 && doOnce == 1 sms [222]; set doOnce to 0 endif endif end
скорректировал с айди, но убрал свечение, можно так? Я верно понял что если дистанция меньше 10ед то он автоматом сразу же дает вещь из листа
Никто ничего не дает. Если в контейнере есть любой артефакт из списка, то он реагирует свечением и звуком на приближение грока с детектором в руке. Если игрок после этого удаляется от контейнера, свечение пропадает. Если же никаких артефактов в контейнере нет, то он никак не реагирует на игрока. Если же или игрок все забрал, то свечение так же пропадает. Там нужно еще добавитть блок на тот случай, если игрок убрал детектор в карман. pms - команда на добавление шейдера (PlayMagicShaderVisuals) sms - команда на удаление шейдера (StopMagicShaderVisuals) Поэтому если без шейдеров, просто убрать все, что к ним относится.
====================== Мод "Нью-Йорк" на русском: 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
Изменение репутации для пользователя VIPerMX
VIPerMXOffline
Сообщение №1349
написано: 19 апреля 2014, 09:35
| Отредактировано: VIPerMX - 19 апреля 2014, 12:35
Ребят, такой вопрос. можно как-нибудь (рассмотрю даже варианты с NVSE) заставить скрипт выполнить строчку через заданное ко-во секунд. Я пробовал варианты со счетчиками, но у меня ничего не выходит.
Вот как делал я...
Код
Float fTimer01 Float fTimer02 . . .
short sFlag
BEGIN OnActivate Player
set sFlag to 1 set fTimer01 to 182 set fTimer02 to 114
. . .
activate
END
BEGIN GameMode
If (sFlag == 1) ;----------------------------------------------------------------------- If ( sFlag == 1 ) && (rRecord01.getDisabled == 0) If ( fTimer01 > 0 ) Set fTimer01 to ( fTimer01 - GetSecondsPassed ); playmusic VIPERMXxMQTrack01 ElseIf ( sFlag == 1 ) set sFlag to 2 EndIf Else set sFlag to 2 EndIf ;-------------------------------------------------------------------------- If ( sFlag == 2 ) && (rRecord02.getDisabled == 0) If ( fTimer02 > 0 ) Set fTimer02 to ( fTimer02 - GetSecondsPassed ); playmusic VIPERMXxMQTrack02 ElseIf ( sFlag == 2 ) set sFlag to 3 EndIf Else set sFlag to 3 EndIf
...
EndIf
END
Проблема в том, что скрипт активирует первую доступную песню а вторую нет, где ошибка?! Или как сделать мою задумку?!
Проблема в том, что скрипт активирует первую доступную песню а вторую нет
Код
Float fTimer01 Float fTimer02 short sFlag
BEGIN OnActivate Player set sFlag to 1 set fTimer01 to 182 set fTimer02 to 114 activate END
BEGIN GameMode If rRecord01.getDisabled == 0 If sFlag == 1 playmusic VIPERMXxMQTrack01 set sFlag to 2 elseif sFlag == 2 If fTimer01 >= 0 Set fTimer01 to fTimer01 - GetSecondsPassed else set sFlag to 3 EndIf endif endif
if rRecord02.getDisabled == 0 If sFlag == 3 playmusic VIPERMXxMQTrack02 set sFlag to 4 elseif sFlag == 4 If fTimer02 >= 0 Set fTimer02 to fTimer02 - GetSecondsPassed Else set sFlag to 5 EndIf EndIf endif END
====================== Мод "Нью-Йорк" на русском: 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