The Elder Scrolls & Fallout 3 Modding

на главную страницу сайта

Форум Oblivion, Skyrim & Fallout 3/4 Modding

Объявление

У нас есть свой сервер Дискорда. Заходите, пообщаемся.
Господа, те кто пользуются фотохостингом http://uploads.ru/ для размещения изображений. Рекомендую воспользоваться для упрощения загрузки вот этой программой.

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

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


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » G.E.C.K. » Вопросы по скриптам в Fallout 3


Вопросы по скриптам в Fallout 3

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

31

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

Как создать область в ячейке (триггер?) и повесить на него скрипт, т.е. чтобы при достижении игроком этой области запустится скрипт?
Пожалуйста полный ответ или ссылку на рус
Заранее спасибо!

В чём именно проблема? Создавай триггер, а потом вещай скрипт:
scn MyTriggerSCRIPT
Begin onTriggerEnter Player
;Твои действия =)
End
;)

0

32

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

В чём именно проблема?

Как создать триггер?:-)
И ещё подскажи плз
Есть квест 00quest, в квесте диалог, на квесте есть скрипт 00script, в скрипте short value
Когда npc общается с игроком нужно присвоить значению value 1
Пишу в result script set value to 1 - ошибка, пишу set 00quest.00script value to 1 - то же самое, как правильно?

0

33

Триггер - любой предмет, если я не ошибаюсь=) Просто ему нужно присвоить Ref...
Создай глобальную переменную, об этом написано в туторе об создании кодового замка.
Затем уже напишеш сэт валуе ту 1=)

0

34

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

Как создать триггер?

Создается он просто. Триггер - это, по сути, обычный активатор.
Идём по пути: World Object>Activator, откроется список жмём ПКМ, выбираем New. Называем например MyTrigger.Вешаем скрипт. Жмём ОК. Потом переходим туда, где нужно разместить триггер. На панели с иконками выбираем квадратик с буквой Т посередине.19-ый значок в списке слева.Далее в окне просмотра жмём и создаём триггер. Далее откроется окно, в котором нужно в ID выбрать созданный до этого активатор. Скрипт тоже нужно выбрать созданный до этого.

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

Есть квест 00quest, в квесте диалог, на квесте есть скрипт 00script, в скрипте short value
Когда npc общается с игроком нужно присвоить значению value 1
Пишу в result script set value to 1 - ошибка, пишу set 00quest.00script value to 1 - то же самое, как правильно?

set MyQuest.Value to 1 вот как надо писать. Сначала идёт название квеста(MyQuest) а потом value to 1
Должно всё работать.Как скрипт составил.Нули ненадо ставить перед названиями.

0

35

Это скрипт-таймер
scn myScript
float timer
short init
begin GameMode
   if init == 0
         set timer to 25
         set init to 1
   else
         if timer > 0
             set timer to timer - getSecondsPassed
        else
            ContainerRef.additem caps001 1
        endif
   endif
end
Через 25 секунд в контейнер ContainerRef добавляется одна крышка, после этого через каждую секунду снова в контейнер начинают добавляться крышки, причём в больших колличествах!
Что нужно дописать, чтобы
1) Через 25 сек добавилась одна крышка и скрипт прекратил выполняться
2) Через каждые 25 сек добавлялось по одной крышке

P.s. в режиме ожидания, например 1 час, крышки не добавляются, как изменить 25 реальных секунд на 25 игровых?

Отредактировано Alex1881 (2010-02-17 11:39:32)

0

36

Подскажи плз пример скрипта, который выполняет какое-то действие один раз в игровой день (например, дабавляет игроку одну крышку)
Заранее спасибо!

0

37

Возможно нужно использовать функцию: GameDaysPassed или GameDays
Посмотри скрипт: HD00RobotQuestScript
;)

0

38

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

Возможно нужно использовать функцию: GameDaysPassed или GameDays

Хе:-) Функция GameDaysPassed, но кроме этой функции нужно ещё и всё остальное;-)

0

39

Немного тупой вопрос. Надо, чтобы игрок пришёл на место и появилась следующая стадия квеста. Поставил маркер на люк - всё равно туда показывает. Ставил XMarker - безрезультатно. Что ещё нужно прописать в XMarker? А то я смотрел квест Ваулта 87, там просто указан XMarker и больше ничего, но стадия квеста выполняется, а у меня нет. Что я забыл сделать?

0

40

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

Немного тупой вопрос. Надо, чтобы игрок пришёл на место и появилась следующая стадия квеста. Поставил маркер на люк - всё равно туда показывает. Ставил XMarker - безрезультатно. Что ещё нужно прописать в XMarker? А то я смотрел квест Ваулта 87, там просто указан XMarker и больше ничего, но стадия квеста выполняется, а у меня нет. Что я забыл сделать?

Для начала нужно усвоить, что стадия квеста (quest stage) и очередное задание квеста (quest objective) - это разные вещи, которые могут быть никак не связаны. Qest Objective информирует игрока о том, что ему надо сделать, и что уже сделано и отображает эту информацию в Пип-бое. А стадия квеста - это ни что иное, как специфическая переменная с дополнительными возможностями, которая используется для организации самого квеста, и о которой игрок не имеет ни малейшего понятия, т.к. она нигде не фигурирует и не отображается. Например, в квесте, где надо продать Рыжую и других хороших людей в рабство, четыре задания (quest objective) и штук двадцать стадий (quest stage). В квесте Doctors есть только стадии, а заданий нет никаких.
Задание (quest objective) ты можешь получить только один раз, и только один раз ты можешь его выполнить или провалить. А стадии квеста (quest stage) могут повторяться сколько угодно раз, и менять их можно в любой момент, например, в квесте, где игрок приносит "технологии" Изгоям, стадия квеста устанавливается в зависимости от того, что именно ты им принес.
Маркеры (xMarkers или любые другие маркеры, или вообще любой предмет-актер) могут указывать на цель очередного задания. Устанавливаются они в quest objectives, для того, чтобы игрок видел новое задание и появлялись отметки на карте и компасе. Для того, чтобы старая отметка пропала, а задание защиталось (или не защиталось), в результ-скрипте или скрипте триггера дается команда: setObjectiveComplited (при этом надо указать квест и установить флаг выполнено-провалено). А для того, чтобы появилось новое задание (и новая отметка, если таковая предусмотрена) - setObjectiveDisplayed.
Стадии квеста также сами не выполняются. Нужно, чтобы где-нибудь в резалт-скрипте (или просто скрипте) была дана команда на установку новой стадии:
setstage [квестID] [номер стадии].

Отредактировано SpalnyVagon (2010-04-22 11:00:34)

0

41

Stalker13

SpalnyVagon всё в принципе расписал, но можно ещё здесь, на сайте почитать тутор по созданию квеста. Прочитай, там достаточно подробно расписано.

0

42

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

Для начала нужно усвоить, что стадия квеста (quest stage) и очередное задание квеста (quest objective) - это разные вещи, которые...

Я вот создавал квест по туториалу IgorRa: создание квеста в Ф3 в 1.1
Описано всё подробно, но честно говоря я немного не понял  :huh: . Чтобы появились отметки на экране и в пип бое, нужно чтобы стадия квеста перешла на следующую. А чтобы она перешла, нужно  команду setstage [квестID] [номер стадии] ввести в скрипт. Но как повесить скрипт на XMarker? Мне нужно, когда ГГ наступает или доходит до маркера, показался следующий quest objective, но для этого нужен скрипт с командой setstage, который нужно куда - то деть... Вот у меня единственный вопрос - куда? В quest objective нету результ-скрипта, на quest stage думаю бессмысленно писать setstage, так куда его вписать?

P.S. Да, да, до меня не сразу доходит, нужно обьяснять по 2 раза  8-)

В результ скрипте стоит это:
SetObjectiveDisplayed TBMWayOfRight 11 1
SetObjectiveCompleted TBMWayOfRight 10 1

Отредактировано Stalker13 (2010-04-22 14:03:24)

0

43

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

появились отметки на экране и в пип бое, нужно чтобы стадия квеста перешла на следующую.

Не стадия, а quest objective. Если у тебя номера стадий и номера заданий совпадают, это ничего не значит. Стадии одно, задания - совсем другое. Если хочешь, чтобы у тебя всегда стадии и задания совпадали, нужно одновременно с новым заданием менять и стадию. А куда вставить не имеет значение. В твоем случае лучше всего подходит триггер. Нарисуй его вокруг своего маркера присвой ему новый ID, напиши новый скрипт и повесь на триггер. Примерно так:

scn [имя скрипта]

begin onTriggerEnter player
if getstage TBMWayOfRight == 10
SetObjectiveCompleted TBMWayOfRight 10 1
SetObjectiveDisplayed TBMWayOfRight 11 1
setstage TBMWayOfRight 11 ;елси хочешь, чтобы у тебя и стадия стала 11.
endif
end

Отредактировано SpalnyVagon (2010-04-22 19:30:14)

0

44

Stalker13

Было б неплохо прочитать весь курс по работе с редактором от беседки. И в частности в 9-м туторе рассказано про квестостроение. Там рассматривается и триггер. Тут http://teamx.ru/node/366
на русском есть.

0

45

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

Не стадия, а quest objective. Если у тебя номера стадий и номера заданий совпадают, это ничего не значит. Стадии одно, задания...

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

Было б неплохо прочитать весь курс по работе с редактором от беседки. И в частности в 9-м туторе рассказано про квестостроение. Там рассматривается и триггер. Тут http://teamx.ru/node/366на русском есть.

Спасибо вам большое, теперь я понял.

0

46

А вот ещё пару вопросов.
1)Как сделать так, чтобы когда квестодатель умирает, квест проваливался(и чтобы появлялось окошко, что он погиб, но это необязательно)
2)Скрипт, чтобы когда мобы убиты и игрок находится в триггере, стадия квеста переходила на новую.
Я сделал так, но неполучилось(как сделать условие, что моб мёртв?):

scn TBMTrig2

begin onTriggerEnter player
if getstage TBMWayOfRight == 11
if TBMMutant1 == 0
  if TBMMutant2 == 0
   if TBMMutant3 == 0
    if TBMMutant4 == 0
     if TBMMutant5 == 0
      if TBMMutant6 == 0
       if TBMMutant7 == 0
        if TBMMutant8 == 0
         if TBMMutant9 == 0
setstage TBMWayOfRight 20
         endif
        endif
       endif
      endif
     endif
    endif
   endif
  endif
endif
endif
end

0

47

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

Я сделал так, но неполучилось(как сделать условие, что моб мёртв?):

Возьми учебник по скриптам. А иначе методом тыка ты долго еще будешь "условия" делать.
Чтобы квест проваливался в случае смерти квестодателя, на последнего можно повесить скрипт такого содержания:

scn QuestodavatelScript
begin ondeath                                 ;этот тип блока выполняется только один раз, в случае смерти акера
show message [messageID]                        ;сообщение на экран, его предварительно нужно создать.
set objectivecomplited [имя квеста] [номер задания] 0 ;                флаг задание провалено
end

Зачем тебе нужно, чтобы игрок находился в триггере? Если задание выполнено (все мутанты убиты, какая разница, где игрок находится). Здесь триггер нужен только для того, чтобы было на что вешать скрипт. А блок onTriggerenter здесь вообще не годится, т.к. он выполняется только один раз, а тебе надо всех зверей сосчитать. И не обязательно скрипт вешать на триггер, можно на любой другой активатор, который находится в зоне боевых действий, а можно не на активатор, а в квестовый скрипт. (мутантов у тебя многовато, имхо, лучше парочку, но матёрых).

scn TBMTrig2
begin gamemode ;            этот тип блока выполняется в каждом фрейме.
if getstage TBMWayOfRight == 11
if TBMMutant1.getdead == 1 && TBMMutant2.getdead == 1 && TBMMutant3.getdead == 1 ;...и так далее. TBMMutant1 и все другие - должны быть Referens
setstage TBMWayOfRight 20
endif
endif
end

0

48

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

scn QuestodavatelScriptbegin ondeath                                 ;этот тип блока выполняется только один раз, в случае смерти актера
show message [messageID]                        ;сообщение на экран, его предварительно нужно создать.
set objectivecomplited [имя квеста] [номер задания] 0 ;                флаг задание провалено
end

У меня выходит, что даже если квест не взят, и даже если он выполнен, всё равно он проваливается. Я поискал примеры и сделал так...

scn TBMZakaz4ukScript

begin OnDeath

if ( GetQuestRunning TBMWayOfRight == 1 )
if ( GetStage TBMWayOfRight >= 10 )
   SetStage TBMWayOfRight 31
  endif
endif
end

А в QuestStage 31 я прописал это:

ShowMessage TBMQuestEpicFail
StopQuest TBMWayOfRight

Вроде работает, но может что-то неправильно?

Отредактировано Stalker13 (2010-04-24 11:03:54)

0

49

Помогите написать скрипт. Делаю мод с анимацией приёма пищи и питья игроком.

Задача: Нужно, чтобы при принятии Ядер-колы на игроке проигрывалась соответсвущая idle-анимация.  Все эффекты от Ядер-колы (радотравление, крышка и восстановление здоровья) должны появится только по окончании проигрывания анимации. Во время анимации питья стоя, игрок должен уметь ходить. Так же должна проигрываться соответсвущая анимация в зависимости от того, на чём сидит игрок(chair, stool, tablechair).

Пока пробую писать скрипт для питья Ядер-колы в стоячем положении:

Код:
scn AnimDrinkNukaColaScript_ML

float timer
short init

begin ScriptEffectUpdate

if player.IsPC1stPerson==0                      ;условие, что игрок будет в виде от 3-го лица
 disablePlayerControls 0 1 1 0 0 1 1          ;игрок сможет только ходить
 if init == 0 
         set timer to 3                                 ;таймер на 3 сек, чтоб успел убрать оружие
         set init to 1 
   else 
         if timer > 0 
             set timer to timer - getSecondsPassed 
        else 
          player.playIdle SodaDrinkingStanding       ;проиграть анимацию
        endif 
   endif 
elseif player.IsPC1stPerson!=0
  showMessage MLnukaDrinkNo1                         ;сообщение просит перейти в вид от 3-го лица
endif

end

begin ScriptEffectFinish
 if player.IsPC1stPerson==0 
  enablePlayerControls
  CastImmediateOnSelf DrinkEatSpell              ;мой перк "Сытость" +5%ОО
  rewardXP 60
  player.additem caps001 1
  player.additem NukaColaBottle 1 1               ;скидывает 1 пустую бутылку
  player.drop NukaColaBottle 1
 endif
end

Эффект вставлен в Ядер-колу с временем 35 секунд.
Скрипт действует неплохо, но ещё не достаточно хорошо.
Вот мои вопросы:
1. Как скриптом переключить игрока в вид от 3-го лица? Или как запретить игроку переключиться в вид от 1-го лица?
2. Как добавить эффект рад-отравления спомощью скрипта(как при обычном принятии Ядер-колы)?
3. Как прекратить выполнения эффекта из скрипта? Это нужно, чтобы если не выполнилось условие прибывание в виде от 3-го лица, отсчёт времени и выполнение эффекта прикратилось(чтобы не появлялось зацикливание и  мегающее сообщение из-за не выполнения условия в EffectUpdate).
4. Как сделать условие, которое выполнялось бы после того, как idle-анимация закончила проигрываться на игроке?

Буду рад любой помощи.

Отредактировано deepNoise (2010-04-25 08:49:56)

0

50

Как написать скрипт оружия чтобы оно стреляло хоть чем, например: браминами(дохлыми) или бутылками или, ножами или, карандашам, и так далее?

0

51

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

Как написать скрипт оружия чтобы оно стреляло хоть чем, например: браминами(дохлыми) или бутылками или, ножами или, карандашам, и так далее?

Есть такое оружие, ракетка называется. Стреляет любыми вещами, которые ты в неё зарядишь.
А если тебе нужно, что какая нибудь пушка другими пулями стерляла(например пистолет дротиками), то это можно выбрать в свойствах оружия. Другое дело как сделать какой нибудь предмет пулей, вот этого я не знаю.

Отредактировано deepNoise (2010-04-27 13:22:39)

0

52

Сделай формлист, напихай в него всякого добра и прицепи его вместо магазина. И будет у тебя пушка всякой фигнёй стрелять... :)
Тока нужно ещё озаботиться, чтоб ГГ мог эту фигню подбирать...

Отредактировано Wulf (2010-04-27 13:57:46)

0

53

Как создать формлист? И что это такое?

Не надо, разобрался.

0

54

Подскажите что с этим скриптом эффекта не так:

scn MLbitaGrabitelyaEffectScript

float timer     ;переменная таймера
short sof
short kof
ref jertva       ;переменная указывает на кого используется эффект

begin ScriptEffectStart
set timer to 8    ;поставить таймер на 8
disablePlayerControls 0 1 1 0 0 0 0
end

begin GameMode

        if timer < 5 && kof==0 
;когда пройдет 3 секунды, убить жертву           
          jertva.killactor
          disablePlayerControls 0 1 1 0 0 0 0
          set kof to 1
          showMessage MLtext1
        endif

        if timer < 2 && sof==0
;когда пройдет 6 секунд, оживить
          enablePlayerControls
          jertva.resurrect 1
          set sof to 1
          showMessage MLtext2
        endif

set timer to timer - getSecondsPassed     ;отнять от таймера 1 секунду
showMessage MLtimer timer

end

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

Отредактировано deepNoise (2010-04-29 08:38:38)

0

55

А на ком висит скрипт?

Наверно имеет смысл почитать wiki.rumor.ru/index.php?title=Oblivion:Programmable_Spell_Effects
или wiki.rumor.ru/index.php?title=Oblivion:My_First_Spell

ЗЫ: Что то ссылки не появляются. Попробуем так "http://wiki.rumor.ru/index.php?title=Oblivion:My_First_Spell" "http://wiki.rumor.ru/index.php?title=Oblivion:Programmable_Spell_Effects"

Отредактировано Wulf (2010-04-29 16:19:03)

0

56

Почитал. Не всё понял, единственное, что нужно OnTrigger использовать.
Переписал скрипт и привязал его к бите:

scn MLbitaGrabitelyaObjectScript

float timer     ;переменная таймера
short startTimer
short sof
short kof
ref jertva       ;переменная указывает на кого используется эффект

begin onTriggerEnter
set timer to 8    ;поставить таймер на 8
disablePlayerControls 0 1 1 0 0 0 0
set startTimer to 1
showMessage MLtext3
end

begin GameMode

if startTimer == 1

        if timer < 5 && kof==0 
;когда пройдет 3 секунды, убить жертву           
          killactor
          disablePlayerControls 0 1 1 0 0 0 0
          set kof to 1
          showMessage MLtext1
        endif

        if timer < 2 && sof==0
;когда пройдет 6 секунд, оживить
          enablePlayerControls
          resurrect 1
          set sof to 1
          set startTimer to 0
          showMessage MLtext2
        endif

         set timer to timer - getSecondsPassed     ;добавить к таймеру 1 секунду
         showMessage MLtimer timer

endif

Но почему то при ударе битой по актеру ни OnTrigger ни OnTriggerEnter не срабатывают(сообщение MLtext3 не выводится). Что я делаю не так?

0

57

А причём тут триггер? Ты ж скрипт эффекта пишешь. Вот сюда ходил? "wiki.rumor.ru/index.php?title=Oblivion:My_First_Spell"

Ну а вообще найди в редакторе оружие репеллент (MS03Repellent) и посмотри как там сделано. Твой случай.

ЗЫ: На всякий случай дам наводку.

"Скрипты для заклинаний (магических эффектов) отличаются от обычных скриптов для объектов. Они "понимают" только три специальных скриптовых блока, в то время как обычные скрипты используют намного больше. Так что же это за скриптовые блоки? С удовольствием вам отвечу. Скриптовый блок - это блок Begin...End с указанным конкретным типом блока, который запускается в определенной ситуации и представляет собой условие. Скрипты для заклинаний имеют следующие типы блоков:

    * ScriptEffectStart - этот блок запускается один раз во время начала кастования заклинания.
    * ScriptEffectUpdate - этот блок будет проигрываться в каждом игровом фрейме в течение действия заклинания.
    * ScriptEffectFinish - этот блок запускается один раз по окончании действия заклинания. "

Отредактировано Wulf (2010-04-30 13:24:24)

0

58

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

begin onTriggerEnter
...
end

begin GameMode

...
endif

Ты блок не закрыл, может дело в этом...

0

59

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

Ты блок не закрыл, может дело в этом...

Нет, не в этом) Я просто end не дописал здесь, там у меня всё есть. А onTriggerEnter так и не работает. Кто нибудь пробовал эту команду раньше?

0

60

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

А onTriggerEnter так и не работает.

А почему он должен работать, если у тебя скрипт висит на бите?

0


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » G.E.C.K. » Вопросы по скриптам в Fallout 3