ShowRepairMenu 30
По логике вещей, этот параметр влияет на стоимость починки у торговца, по аналогии с ShowBarterMenu. Но вот работает ли он - неизвестно.
Форум «Лабортории Mod-Tec» |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Форум «Лабортории Mod-Tec» » G.E.C.K. Community » Помощь по скриптам Fallout 3 и Fallout: New Vegas
ShowRepairMenu 30
По логике вещей, этот параметр влияет на стоимость починки у торговца, по аналогии с ShowBarterMenu. Но вот работает ли он - неизвестно.
Привет всем!
Помогите мне пожалуйста решить такой вопрос, если он в принципе решаем.
Мне нужно скрыть вот до этого момента показ радиостанции в Питбое ( момент нажатия на кнопку сообщения "загрузить в Питбой")
Сейчас она (радиостанция) не работает. В TalkingActivator есть такая галочка Non-Pipboy. Как вы мне в прошлый раз показали с голочкой Cont.Broadcast это работает, логично предположить, что Non-Pipboy может быть убрана по такому же принципу. Если дописать
AAARadioOffisTARef. SetNon-Pipboy 1 сработает наверное! Или это слишком просто! Я сейчас пойду поищу в OSFM, и если найду то отпишу что нашёл.
Scn AAAKainRadioScript
Short Stage
Short Button
Begin onactivate
if (Stage == 0)
ShowMessage AAARadioOffisMessage
Set Stage to 1
endif
End
Begin GameMode
if (Stage == 1)
Set Button to GetButtonPressed
if (Button > -1)
if (Button == 0)
AAARadioOffisTARef. SetBroadcastState 1
Set Stage to 2
elseif (Button == 1)
Set Stage to 2
endif
endif
endif
End
Пока.
Я вернулся за 1 минуту. Только открыл и понял. Какие Питбои - это же Обливион! Вся надежда на Вас.
Отредактировано K.A.I.N.48 (26.02.11 12:05:23)
K.A.I.N.48
Сперва замечу, что правильно писать/говорить Пип-Бой.
Возможный вариант решения проблемы
Я предполагаю, что радиостанция включается в первый раз через специальное сообщение, т.е. до этого игрок не знает про станцию ничего. Следовательно, не обязательно загружать станцию до ее активации. Под загрузкой я подразумеваю автоматическое добавление радиостанции в Пип-Бой, а под активацией - включение проигрывания музыки/голоса через специальное сообщение. Иначе говоря, запуск - это станция в неактивном состоянии; активация - начало проигрывания нужных звуковых файлов.
Как решить проблему
Раз станция неактивна до определенного момента, значит игре не обязательно ее обрабатывать. Делаем следующее:
- Открываем окно Ref-копии объекта, исполняющего роль радиостанции.
- Устанавливаем флажок напротив поля "Initially Disabled".
- Изменяем скрипт следующим образом:
Код:ccn AAAKainRadioScript Short Stage Short Button Begin OnActivate if (Stage == 0) ShowMessage AAARadioOffisMessage Set Stage to 1 endif End Begin GameMode if (Stage == 1) Set Button to GetButtonPressed if (Button > -1) if (Button == 0) AAARadioOffisTARef.Enable if (AAARadioOffisTARef.GetDisabled != 1) AAARadioOffisTARef.SetBroadcastState 1 Set Stage to 2 endif elseif (Button == 1) Set Stage to 2 endif endif endif End
Как изменился скрипт
Раз мы отключили объект, значит, в будущем мы его планируем включить. Что и делаем командой "AAARadioOffisTARef.Enable". Также я добавил проверку на включение объекта "if (AAARadioOffisTARef.GetDisabled != 1)". Это может быть важно, т.к. скрипт может сработать быстрее, чем загрузится объект. То есть команда "AAARadioOffisTARef.SetBroadcastState 1" не сработает, потому что в этот момент объект "AAARadioOffisTARef" не был полностью загружен.
P.S.
Вообще, надо освежить знания, перечитать этот момент на вики. Может, это и не обязательно в данном случае.
Sergey_Ros,
Привет!
А я ведь пробывал делать так, как ты мне показал. Посмотрел на скрипт добавления радиостанций после выхода игрока из дома дока Митчела, в самом начале игры. И видел Enable. А про Initially Disabled мне раньше обьясняли Wulf и BloodBear.
Я вообщем то правильно рассуждал. Только исполнял не правильно? вот этого не делал if (AAARadioOffisTARef.GetDisabled != 1). Так как до твоего обьяснения не видел разницы между загрузкой и активацией.
Хотя предпосылки для этого были.
У меня запись с радиостанцией была видна со старта игры.
Звук не проигрывался - до момента активации кнопкой сообщения.
Немного подумать и скорее всего можно было увидеть и понять. Но только не для меня, к сожалению я до сих пор лишь тупо копирую и комбинирую известные мне варианты скриптов.
Правда читаю, каждый вечер Учебник по скриптам, но всё равно он слишком сложен для новичка. В нём не расскрыты основы.
Допустим написано "возвращает 1", как возвращает, куда возвращает, зачем возвращает, а если не возвращает..... Вопросов сразу куча. А ответов на них там нет.
А как вы смотрите на то, что я буду выданные мне вами скрипты. Расписывать и описав конкретную ситуацию ипользования, конкретные обьекты, написав комментари в строчки скрипта выкладывать у вас в "Панноптикуме". Даже если и ошибусь - вы всегда сможете подправить. Могу со скринами всех окон использованных при настройке обьектов. Своего рода мини уроки по всей подготовке и написанию конкретного скрипта. (например вот этого для начала), я такое дело хотел начать на другом сайте, после 10 марта, но ведь ни кто не мещает это делать у вас и там.
Хоть так вам смогу ответить за помощь.
Пока
K.A.I.N.48, скриптинг требует больше практики и меньше теории на первых стадиях обучения. Сперва надо понять, как работают переменные, операторы, блоки в самой игре, т.е. наглядно. Это поможет разобраться в логике скриптов и их исполнении.
написано "возвращает 1", как возвращает, куда возвращает, зачем возвращает, а если не возвращает.....
Дело в том, что слово "возвращает" действительно самое подходящее для описания процесса возврата функцией значения переменной. Термин больше относится к сфере программирования, но понять его можно и так.
Пример
У нас есть функция "KillActor". С помощью этой функции мы можем убить НПЦ. Мы берем эту функцию, и пишем следующую строку кода "ЖительУбежища.KillActor". Исполнение строчки происходит следующим образом:
- берется НПЦ с Ref-именем "ЖительУбежища";
- над ним исполняется функция "KillActor" (убить актера);
- если функция исполнилась успешно и актер мертв, то она (функция) возвращает значение переменной "1", означающее, что функция выполнилась успешно и актер мертв;
- если функция не выполнилась (сбой в логике скрипта, баг, глюк игры и прочее), то функция вернет значение "0", означающее, что функция не выполнилась и актер жив.
Для удобства понимания можно представить, что "0" - это "Нет", а "1" - это "Да".
Если все равно не понятно, что такое "возврат значения", спрашивайте.
На счет выкладки скриптов в Паноптикуме
Да, мы будем только рады такой инициативе. И вам полезно, и другим начинающим в скриптинге. Скрипты можно выкладывать в теме: Ваши идеи для скриптов. Вопросы же по самим скриптам и их работе можно оставлять в этой теме.
я такое дело хотел начать на другом сайте
А что за сайт?
Хоть так вам смогу ответить за помощь.
Вы сами нам помогаете становиться лучше .
Вопрос такой этот скрипт правильно я написал ? вот скрипт:
SCN aaaGrafaObjectMoveScript
Float YAchsePosition
Float YAchse
float TimerBegin GameMode
if YAchse > 100
Set YAchsePosition to GetPos Y
Set YAchse to YachsePosition -10
SetPos Y Yachse
endifSet Timer to Timer + GetSecondsPassed
if (Timer >= 60)
Set Timer to 0
endif
End
Этот скрипт должен выполнять движение объекта каждые пол игрового часа, выполняет ли это скрипт ?
Отредактировано Серёга (06.03.11 02:51:27)
Серёга, продублирую из ЛС:
short Step float Timer float StartPosition float YPosVar float YPos Begin GameMode if (Step == 0) set StartPosition to (GetPos Y) set Step to 1 elseif (Step == 1) if (GetDistance ИмяОбъектаМаркера <= 128) set YPosVar to (GetPos Y) set YPos to (YPosVar - 10) SetPos Y YPos endif set Timer to (Timer + GetSecondsPassed) if (Timer >= 60) SetPos Y StartPosition set Timer to 0 endif endif End
Это рабочий скрипт.
Сообщение от Sergey_Ros
short Next short Button float Timer Begin GameMode if (Next == 0) if (Player.GetInWorldspace WastelandNV == 1) set Next to 1 endif elseif (Next == 1) set Timer to Timer + GetSecondsPassed if (Timer >= 6) set Timer to 0 set Next to 2 endif elseif (Next == 2) ShowMessage 000MOLStartMessage set Button to GetButtonPressed if (Button == -1) Return elseif (Button == 0) ; Первая кнопка (Игрок согласен - да) Player.MoveTo 000MOLCell01StartXMarkerID set Next to 3 elseif (Button == 1) ; Вторая кнопка (Игрок против - нет) set Next to 3 endif endif End
Какой бы вариант ответа я не выбирал игрок не телепортируется и сообщение вновь появляется через некоторое время.
OZOZ-13, попробуй так:
short Next short Button float Timer Begin GameMode if (Next == 0) if (Player.GetInWorldspace WastelandNV == 1) set Next to 1 endif elseif (Next == 1) set Timer to Timer + GetSecondsPassed if (Timer >= 6) set Next to 2 endif elseif (Next == 2) ShowMessage 000MOLStartMessage set Button to GetButtonPressed if (Button > -1) if (Button == 0) ; Первая кнопка (Игрок согласен - да) Player.MoveTo 000MOLCell01StartXMarkerID set Next to 3 if (Button == 1) ; Вторая кнопка (Игрок против - нет) set Next to 3 endif endif endif End
Не помогло. То же самое.
Отредактировано OZOZ-13 (06.03.11 20:00:17)
OZOZ-13, на сколько я знаю, начинать имена для объектов с цифр не самая лучшая идея. Например, из-за этого перестают корректно работать локации. Точно так же может быть и с маркером, сообщением и прочими объектами.
Sergey_Ros, попробую исправить.
Не помогло. Сделаю немного по другому.
Перенес строчку set Button to GetButtonPressed на уровень выше. Т.е. выше строчки ShowMessage 000MOLStartMessage и УРА!!! Игрок телепортируется в локацию. Но после телепортации сообщение сново появляется. В этот раз при нажатии "да" или "нет" ничего не происходит (по идеи ничего происходить не должно). Теперь нужно как то избавиться от повторного появления сообщения.
Доброго времени суток!
По возможности не буду многословен. Есть НПС которого по сюжету Юзер он же Player он же ГГ, должен истребить (как врага народа), и есть команда НПСа оного которая мстить будет за смерть лидера. До момента смерти представители команды Сандбоксёрят после смерти должны разбрестись по пустоши и отлавливать ГГ, выполняя пакет засады. Вопрос в следующем, будет ли работать приведенный ниже скрипт.
scn KillerScript ; Название скрипта
begin OnDeath Player ; запуск после смерти НПС от руки ГГ
if CDL01Kilya01Ref.RemoveScriptPackage ; остановка текущих пакетов АИ
CDL01Kilya01Ref.addscriptpackage CDL07Kil ; запуск пакета засады с привязкой к маркеру
endif
if CDL01Kilya02Ref.RemoveScriptPackage ; остановка текущих пакетов АИ
CDL01Kilya02Ref.addscriptpackage CDL07Kil01 ; итд для каждого
endif
end
Gvinpin, более корректно будет так:
scn KillerScript Begin OnDeath Player CDL01Kilya01Ref.RemoveScriptPackage CDL01Kilya01Ref.AddScriptPackage CDL07Kil CDL01Kilya02Ref.RemoveScriptPackage CDL01Kilya02Ref.AddScriptPackage CDL07Kil01 ... End
более корректно будет так:
БЛАГОДАРЮ!
Здравствуйте. Помогите как сделать чтобы когда главный герой убивал NPC квест переходил в следующую стадию?
micshkarez, я видел сообщение на другом форуме, что у вас ничего не вышло. Можно увидеть скрипт, который вы использовали? Именно ваш, а не мой шаблон. Посмотрю, что может быть не так.
Хочу сделать альтернативное получение навыков ближнего боя. Через установку триггера в комнате которую ГГ попадёт после выполнения поручения (или ряда поручений).
scn CDL07KLtriggerSCRIPT
begin onTriggerEnter player
player.Addperk KhanTrick ;перк удар ханов
player.Addperk LegionAssault ; перк удар легионеров
end
Каким образом устроить проверку на наличие этих перков у ГГ, дабы не происходило повторное начисление(чревато ли это последствиями?)
Или может разумнее начислить указанные перки результирующими скриптами по мере выполнения поставленных задач? Какое состояние функции в этом случае стоит выбрать для проверки, на наличии у ГГ данных перков?
Sergey_Ros,
Вот:
scn aaaSetStageAfterKillingSCRIPT
short DoOnce
Begin OnDeath Player
if DoOnce == 0
SetStage ActorMoyQuest 20
set DoOnce to 1
endif
End
Каким образом устроить проверку на наличие этих перков у ГГ, дабы не происходило повторное начисление
Используйте функцию "НПЦ.HasPerk ИмяСкриптаДляПроверки". Пример: "if (Player.HasPerk ModTecSpirit == 1)". Подробнее: HasPerk
(чревато ли это последствиями?)
Скорее всего возникнут проблемы с теми перками, которые имеют несколько уровней развития. Возможно, когда ГГ имеет какой-либо перк 3-его уровня, при добавлении ему того же перка 1-ого уровня, первый заменится вторым, т.е. уровень перка понизится. На практике не проверял, точно не знаю, будет ли так.
Или может разумнее начислить указанные перки результирующими скриптами по мере выполнения поставленных задач?
Разумнее. Но это должно быть как-то обыграно. Как в игре, собственно.
micshkarez, а скрипт прикреплен к НПЦ, которого должен убить ГГ? Просто сам скрипт корректный. Не знаю, в чем может быть проблема.
Не взыщите за примитивность вопросов, хочу помещение сделать чтобы заходя в него ГГ вещи свои принудительно оставлял в контейнере а выходя получал обратно. Будет ли верна следующая комбинация?
scn trigger01SCRIPT ;скрипт триггера входа
begin onTriggerEnter player ;вход в триггер
Player.RemoveAllItems ContainerRef ;изъятие вещей
end
scn trigger02SCRIPT ;скрипт триггера выхода
begin onTriggerEnter player
Player.AddAllItems ContainerRef ;возврат вещей
end
А за оказываемую помощь, огромное СПАСИБО!
Перки фракционных боевых навыков одним новым объединил, зашел проверить ввел с консоли, получил ответ: не найден параметр перка, компилируемый сценарий не сохранен.
Повесил для пробы скриптом на очки, перк работает, т.е перк по любому должен где то скриптом упомянутся?
хочу добавить перк по типу "старуха с косой" из раздела Challenge, начисляющие ранги по мере получения или уничтожения, но не хочу чтобы он на автомате запускался. Для выбора (на примере терминала) в случае положительного ответа запустит перк и отсчет, будет ли приведенный далее результ. скрипт терминала соответствовать поставленной задаче
if (rank == 0)
player.addperk xxxxxxxPerk ; запуск перка
showmessage ChallengeMessageхххххх ; окно сообщения
UnlockChallenge Challengeххххххх ; запуск счетчика
endif
Не знаю почему, смущает строка с UnlockChallenge
Отредактировано Gvinpin (10.03.11 07:36:10)
Будет ли верна следующая комбинация?
Будет. Но еще возможен вариант реализовать тот же процесс через скрипт на двери. Игрок заходит в здание, с него снимают всю экипировку. Игрок выходит из него, ему возвращают все вещи. Насколько я знаю, в Вегасе так и сделано. Таким образом можно избежать создания двух разных скриптов и триггеров.
не найден параметр перка, компилируемый сценарий не сохранен.
Вы вводили FormID или EditorID? EditorID - это уникальный восьмизначный идентификатор объекта в мире игры. Пример: XX00000F - это ID объекта (Caps001, Крышки), где XX - порядковый номер плагина в листе загрузки (т.е. если у вас плагин запущен 5-ым в списке, код будет 05. Если 20-ым, то 20 и т.д.)
В консоли нужно вводить EditorID.
Не знаю почему, смущает строка с UnlockChallenge
Я тоже не знаю, все правильно .
Как сделать так чтобы при входе в дверь все вещи удалялись в контейнер
Куда вообще поместить ID этого контейнера в скрипте?
Как сделать так чтобы при входе в дверь все вещи удалялись в контейнерКуда вообще поместить ID этого контейнера в скрипте?
функция:Player.RemoveAllItems ContainerRef. где ContainerREF твой контейнер
collapse, чуть выше как раз упоминался схожий случай. Вот код для двери:
scn aaaPickpocketDoorSCRIPT Begin onActivate Player Player.RemoveAllItems RefИмяКонтейнера Activate End
Каждый раз активируя дверь, у игрока будут удаляться все вещи из инвентаря.
А как например зделать так чтобы при активации двери (телепорт) дверь закрывалась за замок ?
Вы вводили FormID
Писал так - player.addperk 0200bd6f - в ходе экспериментировал с заменой второй цифры. Другие перки "родные" вводимые в качестве проверки принимались без проблем. Проверил большинство перков ФНВ абсолютно все используются скриптами. Вот и этот стоило скриптом упомянуть заработал. Может быть чего то недопонимаю, но скриптовое упоминание у перка будет по любому. Так что пока на эту тему переживания отложил, начну собирать в кучу опытным путём проверю. За помощь СПАСИБО, УДАЧИ!
Серёга, если нужен скрипт для двери, то так:
scn aaaAutoClosedDoorSCRIPT Begin onLoad if (Locked == 1) Lock 100 ; Уровень замка "Очень сложно". endif End Begin onActivate Player set Locked to 1 Activate End
По идее, должно работать.
Gvinpin, на здоровье, успехов!
Вы здесь » Форум «Лабортории Mod-Tec» » G.E.C.K. Community » Помощь по скриптам Fallout 3 и Fallout: New Vegas