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

Сообщений 181 страница 210 из 418

181

И вопрос можно ли двигать объект с помощью скрипта до определённого места ?

0

182

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

И вопрос можно ли двигать объект с помощью скрипта до определённого места ?

Только актеров, воду, мувебле статик, возможно оружие, миск итемс, ингестибелс (т.е. все то, что берется в инвентарь, сам я не пробовал).

0

183

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

Только актеров, воду, мувебле статик, возможно оружие, миск итемс, ингестибелс (т.е. все то, что берется в инвентарь, сам я не пробовал).

Ну я активатор с помощью скрипта двигаю, а вот мне нужно чтоб он двигался до определённого места, незнаете как это сделать ?

0

184

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

вот мне нужно чтоб он двигался до определённого места

Для того, чтобы аткер сам двигался до определенного места, это самое определенное место (конечная точка маршрута) должно быть каким-лио образом обозначено. Иными словами, там должен находиться какой-нибудь маркер, который будет использован как persistent reference (постоянная ссылка). Актеру задается любой пакет следования (например trevel или patrol). А в самом пакете указывается конечная точка маршрута. Для того, чтобы актер начал выполнять пакет следования, (как и любой другой пакет) вовсе не обязательно использовать скрипты. Он может начать свой пакет либо по времени, либо когда возникнут указанные в пакете условия, либо принудительно.

0

185

Ну я активатор с помощью скрипта двигаю, а вот мне нужно чтоб он двигался до определённого места, незнаете как это сделать ?

Нужно в скрипте сделать таймер. Затем указываем ось движения (пусть это будет X). Потом указываем скорость движения (это будет +10). После того как объект проедет определенное растояние за определенное время, изменяем его скорость на +0. Но он будет без колизии. Нужно делать подмену объектов с помощью Disable и Enable. Или ставить колизию на конечной точке маршрута объекта. Тут я все описал кратко. На самом деле с помощью всего этого можно добиться интересных результатов. Прото подробно это очень долго описывать))) Да и вообще, я бы мог написать туториал об этом, если он хоть коть кому нибуть будет интересен (просто я не видел раньше подобных вопросов).

Отредактировано OZOZ-13 (2011-03-03 11:53:44)

0

186

OZOZ-13 написал(а):

Затем указываем ось движения (пусть это будет X). Потом указываем скорость движения (это будет +10).

Сколько мне раз написать что я это знаю ?

OZOZ-13 написал(а):

После того как объект проедет определенное растояние за определенное время, изменяем его скорость на +0

Вот это уже мне и надо вот мой скрипт движения:

SCN aaaGrafaObjectMoveScript

Float YAchsePosition
Float YAchse

Begin GameMode

    Set YAchsePosition to GetPos Y
    Set YAchse to YachsePosition -10
    SetPos Y Yachse
endif
endif

End

Что в нём нужно добавить чтоб он очтанавливался на нужном мне месте ?

OZOZ-13 написал(а):

Но он будет без колизии

Я написал на той странице что я знаю что он будит без коллизии хватит писать чепуху которую я знаю я об этом писал. Я написал вопрос что в нём нужно добавить чтоб он останавливался на нужном мне месте ? Я неспрашивал про скорость и ось движения так как я это знал, неужели трудно ответить на вопрос который я незнаю ответ ? А не писать то что я давно знаю.

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

Для того, чтобы аткер сам двигался до определенного места, это самое определенное место (конечная точка маршрута) должно быть каким-лио образом обозначено. Иными словами, там должен находиться какой-нибудь маркер, который будет использован как persistent reference (постоянная ссылка). Актеру задается любой пакет следования (например trevel или patrol). А в самом пакете указывается конечная точка маршрута. Для того, чтобы актер начал выполнять пакет следования, (как и любой другой пакет) вовсе не обязательно использовать скрипты. Он может начать свой пакет либо по времени, либо когда возникнут указанные в пакете условия, либо принудительно.

Я про активатор говорю а не про актёра и его пакеты, ты непонял вопрос.

0

187

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

Я про активатор говорю а не про актёра и его пакеты, ты непонял вопрос.

Извини, невнимательно прочитал. По поводу конечной точки:

SCN aaaGrafaObjectMoveScript

Float YAchsePosition
Float YAchse

Begin GameMode
if YAchse > [координата конечной точки движения]
    Set YAchsePosition to GetPos Y
    Set YAchse to YachsePosition -10
    SetPos Y Yachse
endif

End

Своими словами: движение будет происходить до тех пор, пока координата объекта не станет мешьше некоторой величины (или больше, это зависит от направления движения). Кстати, скорость -10 - очень большая. Улетит, не успеешь и глазом мргнуть.

0

188

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

Кстати, скорость -10 - очень большая. Улетит, не успеешь и глазом мргнуть.

Я на примере писал я ставлю 8 мне подходит да и 10 неочень большая скорость я это уже проверял (быстро но можно и быстрей), а вот мог бы напримере if YAchse > [координата конечной точки движения] показать что должно быть ?

0

189

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

YAchse > [координата конечной точки движения] показать что должно быть ?

Должно быть число. В ГЕККе ставишь свой активатор в то место, где он должен остановиться, и смотришь, чему равна в этой точке координата по оси, вдоль которой идет движение (в данном случае Y).

Отредактировано SpalnyVagon (2011-03-03 21:09:10)

0

190

SpalnyVagon, Спасибо за помощь, а можно ли на этом скрипте ещё не изменённым с конечной точкой:

SCN aaaGrafaObjectMoveScript

Float YAchsePosition
Float YAchse

Begin GameMode

    Set YAchsePosition to GetPos Y
    Set YAchse to YachsePosition -10
    SetPos Y Yachse
endif
endif

End

Сделать так чтоб он задейсвовался например каждые 2 дня ? ну или там через каждые 10 часов например ?

0

191

speed_sn1er, вот общий скрипт для повторения определенного действия каждые два дня:

Код:
ScriptName ScriptNameSCRIPT

short FirstDay
short CurrentDay
short Step

Begin GameMode

if (Step == 0)
	set FirstDay to GameDayPassed
	set Step to 1
elseif (Step == 1)
	set CurrentDay to GameDayPassed
	if (CurrentDay >= FirstDay + 2)
	set Step to 2
	endif
elseif (Step == 2)
	; Действие после окончания двух дней
	; Скорее всего, перемещение объекта на исходную позицию (XMarker)
	set Step to 0
endif

End

Отредактировано Sergey_Ros (2011-03-04 15:47:13)

0

192

Sergey_Ros,
Спасибо, а вот например если каждый час или пол часа ?

0

193

Sergey_Ros. Вот если так поставить:

ScriptName ScriptNameSCRIPT

short Firsthour
short Currenthour
short Step

Begin GameMode

if (Step == 0)
    set Firsthour to GamehourPassed
    set Step to 1
elseif (Step == 1)
set Currenthour to GameDayPassed
    if (Currenthour >= Firsthour + 1)
    set Step to 2
    endif
elseif (Step == 1)
    set Step to 0
endif

End

То будит дейстывать каждый час игры ?

Отредактировано speed_sn1er (2011-03-05 21:44:01)

0

194

speed_sn1er
Функции "GameHourPassed" не существует. Если нужно считать часы, то лучше воспользоваться функций "GetSecondsPassed".

Код:
float Timer

Begin GameMode
Set Timer to Timer + GetSecondsPassed
if (Timer >= 60) ; 60 секунд реального времени это 30 минут игрового
; Делаем нужные дела
Set Timer to 0
endif
End

Отредактировано Sergey_Ros (2011-03-05 23:04:53)

0

195

Sergey_Ros, А с этим скриптом будет каждый час ?

0

196

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

Функции "GameHourPassed" не существует. Если нужно считать часы, то лучше воспользоваться функций "GetSecondsPassed".

Или GameDayPassed, из расчета 1 день равен 24 часам. Соответственно 0.5 = 12 часов, 0.25 = 6 часов и т.д. Функция GameDayPassed отсчитывает дни с начала игры, и поэтому не так удобна, как GetSecondsPassed для отсчета небольших промежутков времени, зато она не останавливается при переходе в режим ожидания (клавиша Т).

0

197

SpalnyVagon, Ну дак а скипт будет выполнятся постоянно ? Мне просто нужно что бы объект при движении повторял это движение каждые пол часа игры вот скрипт вопрос он правильный ?   :

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

Отредактировано speed_sn1er (2011-03-06 01:58:18)

0

198

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

зато она не останавливается при переходе в режим ожидания (клавиша Т).

При надобности можно перекидывать текущее значение таймера в блок MenuMod с таким же скриптом. Правда, мне не приходилось использовать скрипты, работающие во время активного меню.

0

199

Вот какая проблема: Я написал новый скрипт. Вот он:

scn 000MOLQuest01StartScript

Short Next
Float Timer
short DoOnce

Begin GameMode
if (DoOnce==0)
  if (player.GetInWorldspace WastelandNV == 1)
   Set Next to 1
   Set DoOnce to 1
  endif
endif
end

Begin GameMode
if ( Next == 1 )
Set Timer to Timer + GetSecondsPassed
if ( Timer >= 6 )
    ShowMessage 000MOLStartMessage     
    Set Timer to 0
    Set Next to 2
endif
endif

if ( Next == 2 )
Set Timer to Timer + GetSecondsPassed
if ( Timer >= 1 )
          Player. MoveTo 000MOLCell01StartXMarkerID
    Set Timer to 0
    Set Next to 3
endif
endif
end

По идеи должно происходить следующее: после того как игрок попал на пустош через некоторое время появляется сообщениею. При нажатии на ок игрок должен телепортироваться в локацию. Но почему то сначала происходит телепортация а потом появляется сообщение. Что нет в этом скрипте?

0

200

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 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

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

Если имеются/остались какие-то вопросы, задавайте. На этот форум я заглядываю несколько раз в день, сюда гораздо чаще.

0

201

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

вот скрипт вопрос он правильный ?

Думаю, нет. У тебя там счетчик времени отдельно, блок организации движения отдельно. А вообще все в игре проверяй сразу, как сделал. Лично у меня еще ни один скрипт с первого раза не заработал. А если заработал с первого раза - значит баг глобальный, и надо начинать все сначала. :D
Очевино, что по истечении заданного времени должна обнуляться не только переменная timer, но и возвращаться в исходное положение как сам активатор, так и переменная YAchse.

Set Timer to Timer + GetSecondsPassed
if (Timer >= 1800)
Set Timer to 0
set YAchse to 0
SetPos Y [координата начала движения]

endif
End

0

202

SpalnyVagon
Я предлагал speed_sn1er такой вариант (может еще кому-то полезен будет):

Код:
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 (YPos < 100)
      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

203

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

(может еще кому-то полезен будет):

elseif (Step == 1)
    if (YPos < 100)  ; Вот это место мне не нравится. YPos нигде не возвращается в исходное положение.
      set YPosVar to (GetPos Y)
      set YPos to (YPosVar - 10)
      SetPos Y YPos
    endif

0

204

SpalnyVagon
Это условие я скопировал из скрипта speed_sn1er. Зачем он именно так проверяет пройденное расстояние, я не знаю. Гораздо лучше и надежнее использовать XMarker с проверкой на расстояние.

Для корректировки скрипта достаточно изменить строку:

Код:
if (YPos < 100)

на что-нибудь в духе:

Код:
if (GetDistance Ref-маркера <= 128)

0

205

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

Это условие я скопировал из скрипта speed_sn1er. Зачем он именно так проверяет пройденное расстояние, я не знаю. Гораздо лучше и надежнее использовать XMarker с проверкой на расстояние.

Да я просто для примера написал, просто я недома тогда был и сидел с ноута а там неидёт фол вот и немог проверить и писал примерно.

0

206

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

0

207

micshkarez, вот шаблон скрипта:

Код:
scn aaaSetStageAfterKillingSCRIPT

short DoOnce

Begin OnDeath Player
if (DoOnce == 0)
  SetStage ИмяКвеста СтадияКвеста ; Например: "SetStage MyQuest 10"
  set DoOnce to 1
endif
End

Скрипт привязать к НПЦ, которого должен убить ГГ.

0

208

Здравствуйте!
Имеется предмет "ModyCarrot", нужно, чтобы когда игрок берёт это предмет отображалось сообщение "ModyCarrotMsg01". А при активации в инвентаре игрока убивало и отрывало голову. Как я понял, нужно использовать

Код:
[actorID].kill[actorID] 1.0

Я пробовал - не работает. Можете помочь? Заранее спасибо!

0

209

Rus-IP, приветствую. Вот скрипт на появление сообщения (привязывать к объекту):

Код:
scn aaaCarrotHeadExploderSCRIPT

Begin onAdd
ShowMessage ModyCarrotMsg01
End

Скрипт на активацию объекта зависит от его типа. Чем является ""ModyCarrot"? Точнее, что более важно, в какой категории в Пип-Бое он находится? Раздел "Помощь"?

0

210

Sergey_Ros, является едой, соответственно, находится в разделе "Помощь".

0


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