Форум «Лабортории Mod-Tec»

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум «Лабортории Mod-Tec» » G.E.C.K. Community » Помощь по скриптам Fallout 3 и Fallout: New Vegas


Помощь по скриптам Fallout 3 и Fallout: New Vegas

Сообщений 31 страница 60 из 350

31

Wulf написал(а):

ShowRepairMenu 30

По логике вещей, этот параметр влияет на стоимость починки у торговца, по аналогии с ShowBarterMenu. Но вот работает ли он - неизвестно.

0

32

Привет всем!
Помогите мне пожалуйста решить такой вопрос, если он в принципе решаем.
Мне нужно скрыть вот до этого момента показ радиостанции в Питбое ( момент нажатия на кнопку сообщения "загрузить в Питбой")
Сейчас она (радиостанция) не работает. В 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)

0

33

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.
Вообще, надо освежить знания, перечитать этот момент на вики. Может, это и не обязательно в данном случае.

0

34

Sergey_Ros,
Привет!
А я ведь пробывал делать так, как ты мне показал. Посмотрел на скрипт добавления радиостанций после выхода игрока из дома дока Митчела, в самом начале игры. И видел Enable. А про Initially Disabled мне раньше обьясняли Wulf и BloodBear.
Я вообщем то правильно рассуждал. Только исполнял не правильно? вот этого не делал if (AAARadioOffisTARef.GetDisabled != 1). Так как до твоего обьяснения не видел разницы между загрузкой и активацией.
Хотя предпосылки для этого были.
У меня запись с радиостанцией была видна со старта игры.
Звук не проигрывался - до момента активации кнопкой сообщения.
Немного подумать и скорее всего можно было увидеть и понять. Но только не для меня, к сожалению я до сих пор лишь тупо копирую и комбинирую известные мне варианты скриптов.
Правда читаю, каждый вечер Учебник по скриптам, но всё равно он слишком сложен для новичка. В нём не расскрыты основы.
Допустим написано "возвращает 1", как возвращает, куда возвращает, зачем возвращает, а если не возвращает..... Вопросов сразу куча. А ответов на них там нет.
А как вы смотрите на то, что я буду выданные мне вами скрипты. Расписывать и описав конкретную ситуацию ипользования, конкретные обьекты, написав комментари в строчки скрипта выкладывать у вас в "Панноптикуме". Даже если и ошибусь - вы всегда сможете подправить. Могу со скринами всех окон использованных при настройке обьектов. Своего рода мини уроки по всей подготовке и написанию конкретного скрипта. (например вот этого для начала), я такое дело хотел начать на другом сайте, после 10 марта, но ведь ни кто не мещает это делать у вас и там.
Хоть так вам смогу ответить за помощь.
Пока

0

35

K.A.I.N.48, скриптинг требует больше практики и меньше теории на первых стадиях обучения. Сперва надо понять, как работают переменные, операторы, блоки в самой игре, т.е. наглядно. Это поможет разобраться в логике скриптов и их исполнении.

K.A.I.N.48 написал(а):

написано "возвращает 1", как возвращает, куда возвращает, зачем возвращает, а если не возвращает.....

Дело в том, что слово "возвращает" действительно самое подходящее для описания процесса возврата функцией значения переменной. Термин больше относится к сфере программирования, но понять его можно и так.

Пример
У нас есть функция "KillActor". С помощью этой функции мы можем убить НПЦ. Мы берем эту функцию, и пишем следующую строку кода "ЖительУбежища.KillActor". Исполнение строчки происходит следующим образом:
- берется НПЦ с Ref-именем "ЖительУбежища";
- над ним исполняется функция "KillActor" (убить актера);
- если функция исполнилась успешно и актер мертв, то она (функция) возвращает значение переменной "1", означающее, что функция выполнилась успешно и актер мертв;
- если функция не выполнилась (сбой в логике скрипта, баг, глюк игры и прочее), то функция вернет значение "0", означающее, что функция не выполнилась и актер жив.

Для удобства понимания можно представить, что "0" - это "Нет", а "1" - это "Да".

Если все равно не понятно, что такое "возврат значения", спрашивайте.

На счет выкладки скриптов в Паноптикуме
Да, мы будем только рады такой инициативе. И вам полезно, и другим начинающим в скриптинге. Скрипты можно выкладывать в теме: Ваши идеи для скриптов. Вопросы же по самим скриптам и их работе можно оставлять в этой теме.

K.A.I.N.48 написал(а):

я такое дело хотел начать на другом сайте

А что за сайт?

K.A.I.N.48 написал(а):

Хоть так вам смогу ответить за помощь.

Вы сами нам помогаете становиться лучше :).

0

36

Вопрос такой этот скрипт правильно я написал ? вот скрипт:

SCN aaaGrafaObjectMoveScript

Float YAchsePosition
Float YAchse
float Timer

Begin GameMode
if YAchse > 100
    Set YAchsePosition to GetPos Y
    Set YAchse to YachsePosition -10
    SetPos Y Yachse
endif

Set Timer to Timer + GetSecondsPassed
if (Timer >= 60)
Set Timer to 0
endif
End

Этот скрипт должен выполнять движение объекта каждые пол игрового часа, выполняет ли это скрипт ?

Отредактировано Серёга (06.03.11 02:51:27)

0

37

Серёга, продублирую из ЛС:

Код:
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

Это рабочий скрипт.

0

38

Сообщение от 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

Какой бы вариант ответа я не выбирал игрок не телепортируется и сообщение вновь появляется через некоторое время.

0

39

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

0

40

Не помогло. То же самое. :'(

Отредактировано OZOZ-13 (06.03.11 20:00:17)

0

41

OZOZ-13, на сколько я знаю, начинать имена для объектов с цифр не самая лучшая идея. Например, из-за этого перестают корректно работать локации. Точно так же может быть и с маркером, сообщением и прочими объектами.

0

42

Sergey_Ros, попробую исправить.

0

43

Не помогло. Сделаю немного по другому.

0

44

Перенес строчку set Button to GetButtonPressed на уровень выше. Т.е. выше строчки ShowMessage 000MOLStartMessage и УРА!!! Игрок телепортируется в локацию. Но после телепортации сообщение сново появляется. В этот раз при нажатии "да" или "нет" ничего не происходит (по идеи ничего происходить не должно). Теперь нужно как то избавиться от повторного появления сообщения.

0

45

Доброго времени суток!
По возможности не буду многословен. Есть НПС которого по сюжету Юзер он же Player он же ГГ, должен истребить (как врага народа), и есть команда НПСа оного которая мстить будет за смерть лидера. До момента смерти представители команды Сандбоксёрят после смерти должны разбрестись по пустоши и отлавливать ГГ, выполняя пакет засады. Вопрос в следующем, будет ли работать приведенный ниже скрипт.

scn KillerScript ; Название скрипта

begin OnDeath Player ; запуск после смерти НПС от руки ГГ
   if CDL01Kilya01Ref.RemoveScriptPackage ; остановка текущих пакетов АИ
      CDL01Kilya01Ref.addscriptpackage CDL07Kil ; запуск пакета засады с привязкой к маркеру
   endif
   if CDL01Kilya02Ref.RemoveScriptPackage ; остановка текущих пакетов АИ
      CDL01Kilya02Ref.addscriptpackage CDL07Kil01  ; итд для каждого
   endif
end

0

46

Gvinpin, более корректно будет так:

Код:
scn KillerScript

Begin OnDeath Player
  CDL01Kilya01Ref.RemoveScriptPackage
  CDL01Kilya01Ref.AddScriptPackage CDL07Kil
  CDL01Kilya02Ref.RemoveScriptPackage
  CDL01Kilya02Ref.AddScriptPackage CDL07Kil01
  ...
End

0

47

Sergey_Ros написал(а):

более корректно будет так:

БЛАГОДАРЮ!

0

48

Здравствуйте. Помогите как сделать чтобы когда главный герой убивал NPC квест переходил в следующую стадию?

0

49

micshkarez, я видел сообщение на другом форуме, что у вас ничего не вышло. Можно увидеть скрипт, который вы использовали? Именно ваш, а не мой шаблон. Посмотрю, что может быть не так.

0

50

Хочу сделать альтернативное получение навыков ближнего боя. Через установку триггера в комнате которую ГГ попадёт после выполнения поручения (или ряда поручений).

scn CDL07KLtriggerSCRIPT
begin onTriggerEnter player
player.Addperk KhanTrick ;перк удар ханов
player.Addperk LegionAssault ; перк удар легионеров
end
Каким образом устроить проверку на наличие этих перков у ГГ, дабы не происходило повторное начисление(чревато ли это последствиями?)

Или может разумнее начислить указанные перки результирующими скриптами по мере выполнения поставленных задач? Какое состояние функции в этом случае стоит выбрать для проверки, на наличии у ГГ данных перков?

0

51

Sergey_Ros,
Вот:

scn aaaSetStageAfterKillingSCRIPT

short DoOnce

Begin OnDeath Player
if DoOnce == 0
  SetStage ActorMoyQuest 20
  set DoOnce to 1
endif
End

0

52

Gvinpin написал(а):

Каким образом устроить проверку на наличие этих перков у ГГ, дабы не происходило повторное начисление

Используйте функцию "НПЦ.HasPerk ИмяСкриптаДляПроверки". Пример: "if (Player.HasPerk ModTecSpirit == 1)". Подробнее: HasPerk

Gvinpin написал(а):

(чревато ли это последствиями?)

Скорее всего возникнут проблемы с теми перками, которые имеют несколько уровней развития. Возможно, когда ГГ имеет какой-либо перк 3-его уровня, при добавлении ему того же перка 1-ого уровня, первый заменится вторым, т.е. уровень перка понизится. На практике не проверял, точно не знаю, будет ли так.

Gvinpin написал(а):

Или может разумнее начислить указанные перки результирующими скриптами по мере выполнения поставленных задач?

Разумнее. Но это должно быть как-то обыграно. Как в игре, собственно.
micshkarez, а скрипт прикреплен к НПЦ, которого должен убить ГГ? Просто сам скрипт корректный. Не знаю, в чем может быть проблема.

0

53

Не взыщите за примитивность вопросов, хочу помещение сделать чтобы заходя в него ГГ вещи свои принудительно оставлял в контейнере а выходя получал обратно. Будет ли верна следующая комбинация?

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)

0

54

Gvinpin написал(а):

Будет ли верна следующая комбинация?

Будет. Но еще возможен вариант реализовать тот же процесс через скрипт на двери. Игрок заходит в здание, с него снимают всю экипировку. Игрок выходит из него, ему возвращают все вещи. Насколько я знаю, в Вегасе так и сделано. Таким образом можно избежать создания двух разных скриптов и триггеров.

Gvinpin написал(а):

не найден параметр перка, компилируемый сценарий не сохранен.

Вы вводили FormID или EditorID? EditorID - это уникальный восьмизначный идентификатор объекта в мире игры. Пример: XX00000F - это ID объекта (Caps001, Крышки), где XX - порядковый номер плагина в листе загрузки (т.е. если у вас плагин запущен 5-ым в списке, код будет 05. Если 20-ым, то 20 и т.д.)
В консоли нужно вводить EditorID.

Gvinpin написал(а):

Не знаю почему, смущает строка с UnlockChallenge

Я тоже не знаю, все правильно :).

0

55

Как сделать так чтобы при входе в дверь все вещи удалялись в контейнер
Куда вообще поместить ID этого контейнера в скрипте?

0

56

collapse написал(а):

Как сделать так чтобы при входе в дверь все вещи удалялись в контейнерКуда вообще поместить ID этого контейнера в скрипте?

функция:Player.RemoveAllItems ContainerRef. где ContainerREF твой контейнер

0

57

collapse, чуть выше как раз упоминался схожий случай. Вот код для двери:

Код:
scn aaaPickpocketDoorSCRIPT

Begin onActivate Player
Player.RemoveAllItems RefИмяКонтейнера
Activate
End

Каждый раз активируя дверь, у игрока будут удаляться все вещи из инвентаря.

0

58

А как например зделать так чтобы при активации двери (телепорт) дверь закрывалась за замок ?

0

59

Sergey_Ros написал(а):

Вы вводили FormID

Писал так - player.addperk 0200bd6f -  в ходе экспериментировал с заменой второй цифры. Другие перки "родные" вводимые в качестве проверки принимались без проблем. Проверил большинство перков ФНВ абсолютно все используются скриптами. Вот и этот стоило скриптом упомянуть заработал. Может быть чего то недопонимаю, но скриптовое упоминание у перка будет по любому. Так что пока на эту тему переживания отложил, начну собирать в кучу опытным путём проверю. За помощь СПАСИБО, УДАЧИ!

0

60

Серёга, если нужен скрипт для двери, то так:

Код:
scn aaaAutoClosedDoorSCRIPT

Begin onLoad
if (Locked == 1)
  Lock 100    ; Уровень замка "Очень сложно".
endif
End

Begin onActivate Player
set Locked to 1
Activate
End

По идее, должно работать.

Gvinpin, на здоровье, успехов!

+1


Вы здесь » Форум «Лабортории Mod-Tec» » G.E.C.K. Community » Помощь по скриптам Fallout 3 и Fallout: New Vegas