И вопрос можно ли двигать объект с помощью скрипта до определённого места ?
Вопросы по скриптам в Fallout 3
Сообщений 181 страница 210 из 418
Поделиться1822011-03-02 23:17:49
И вопрос можно ли двигать объект с помощью скрипта до определённого места ?
Только актеров, воду, мувебле статик, возможно оружие, миск итемс, ингестибелс (т.е. все то, что берется в инвентарь, сам я не пробовал).
Поделиться1832011-03-02 23:57:46
Только актеров, воду, мувебле статик, возможно оружие, миск итемс, ингестибелс (т.е. все то, что берется в инвентарь, сам я не пробовал).
Ну я активатор с помощью скрипта двигаю, а вот мне нужно чтоб он двигался до определённого места, незнаете как это сделать ?
Поделиться1842011-03-03 11:28:24
вот мне нужно чтоб он двигался до определённого места
Для того, чтобы аткер сам двигался до определенного места, это самое определенное место (конечная точка маршрута) должно быть каким-лио образом обозначено. Иными словами, там должен находиться какой-нибудь маркер, который будет использован как persistent reference (постоянная ссылка). Актеру задается любой пакет следования (например trevel или patrol). А в самом пакете указывается конечная точка маршрута. Для того, чтобы актер начал выполнять пакет следования, (как и любой другой пакет) вовсе не обязательно использовать скрипты. Он может начать свой пакет либо по времени, либо когда возникнут указанные в пакете условия, либо принудительно.
Поделиться1852011-03-03 11:45:38
Ну я активатор с помощью скрипта двигаю, а вот мне нужно чтоб он двигался до определённого места, незнаете как это сделать ?
Нужно в скрипте сделать таймер. Затем указываем ось движения (пусть это будет X). Потом указываем скорость движения (это будет +10). После того как объект проедет определенное растояние за определенное время, изменяем его скорость на +0. Но он будет без колизии. Нужно делать подмену объектов с помощью Disable и Enable. Или ставить колизию на конечной точке маршрута объекта. Тут я все описал кратко. На самом деле с помощью всего этого можно добиться интересных результатов. Прото подробно это очень долго описывать))) Да и вообще, я бы мог написать туториал об этом, если он хоть коть кому нибуть будет интересен (просто я не видел раньше подобных вопросов).
Отредактировано OZOZ-13 (2011-03-03 11:53:44)
Поделиться1862011-03-03 15:23:56
Затем указываем ось движения (пусть это будет X). Потом указываем скорость движения (это будет +10).
Сколько мне раз написать что я это знаю ?
После того как объект проедет определенное растояние за определенное время, изменяем его скорость на +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
Что в нём нужно добавить чтоб он очтанавливался на нужном мне месте ?
Но он будет без колизии
Я написал на той странице что я знаю что он будит без коллизии хватит писать чепуху которую я знаю я об этом писал. Я написал вопрос что в нём нужно добавить чтоб он останавливался на нужном мне месте ? Я неспрашивал про скорость и ось движения так как я это знал, неужели трудно ответить на вопрос который я незнаю ответ ? А не писать то что я давно знаю.
Для того, чтобы аткер сам двигался до определенного места, это самое определенное место (конечная точка маршрута) должно быть каким-лио образом обозначено. Иными словами, там должен находиться какой-нибудь маркер, который будет использован как persistent reference (постоянная ссылка). Актеру задается любой пакет следования (например trevel или patrol). А в самом пакете указывается конечная точка маршрута. Для того, чтобы актер начал выполнять пакет следования, (как и любой другой пакет) вовсе не обязательно использовать скрипты. Он может начать свой пакет либо по времени, либо когда возникнут указанные в пакете условия, либо принудительно.
Я про активатор говорю а не про актёра и его пакеты, ты непонял вопрос.
Поделиться1872011-03-03 16:53:59
Я про активатор говорю а не про актёра и его пакеты, ты непонял вопрос.
Извини, невнимательно прочитал. По поводу конечной точки:
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 - очень большая. Улетит, не успеешь и глазом мргнуть.
Поделиться1882011-03-03 17:10:22
Кстати, скорость -10 - очень большая. Улетит, не успеешь и глазом мргнуть.
Я на примере писал я ставлю 8 мне подходит да и 10 неочень большая скорость я это уже проверял (быстро но можно и быстрей), а вот мог бы напримере if YAchse > [координата конечной точки движения] показать что должно быть ?
Поделиться1892011-03-03 21:06:20
YAchse > [координата конечной точки движения] показать что должно быть ?
Должно быть число. В ГЕККе ставишь свой активатор в то место, где он должен остановиться, и смотришь, чему равна в этой точке координата по оси, вдоль которой идет движение (в данном случае Y).
Отредактировано SpalnyVagon (2011-03-03 21:09:10)
Поделиться1902011-03-03 22:07:55
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 часов например ?
Поделиться1912011-03-04 15:45:36
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)
Поделиться1922011-03-05 21:32:25
Sergey_Ros,
Спасибо, а вот например если каждый час или пол часа ?
Поделиться1932011-03-05 21:38:55
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
endifEnd
То будит дейстывать каждый час игры ?
Отредактировано speed_sn1er (2011-03-05 21:44:01)
Поделиться1942011-03-05 23:02:37
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)
Поделиться1952011-03-06 00:17:05
Sergey_Ros, А с этим скриптом будет каждый час ?
Поделиться1962011-03-06 00:26:23
Функции "GameHourPassed" не существует. Если нужно считать часы, то лучше воспользоваться функций "GetSecondsPassed".
Или GameDayPassed, из расчета 1 день равен 24 часам. Соответственно 0.5 = 12 часов, 0.25 = 6 часов и т.д. Функция GameDayPassed отсчитывает дни с начала игры, и поэтому не так удобна, как GetSecondsPassed для отсчета небольших промежутков времени, зато она не останавливается при переходе в режим ожидания (клавиша Т).
Поделиться1972011-03-06 00:34:25
SpalnyVagon, Ну дак а скипт будет выполнятся постоянно ? Мне просто нужно что бы объект при движении повторял это движение каждые пол часа игры вот скрипт вопрос он правильный ? :
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
Отредактировано speed_sn1er (2011-03-06 01:58:18)
Поделиться1982011-03-06 11:54:51
зато она не останавливается при переходе в режим ожидания (клавиша Т).
При надобности можно перекидывать текущее значение таймера в блок MenuMod с таким же скриптом. Правда, мне не приходилось использовать скрипты, работающие во время активного меню.
Поделиться1992011-03-06 12:42:52
Вот какая проблема: Я написал новый скрипт. Вот он:
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
По идеи должно происходить следующее: после того как игрок попал на пустош через некоторое время появляется сообщениею. При нажатии на ок игрок должен телепортироваться в локацию. Но почему то сначала происходит телепортация а потом появляется сообщение. Что нет в этом скрипте?
Поделиться2002011-03-06 13:35:16
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
Если имеются/остались какие-то вопросы, задавайте. На этот форум я заглядываю несколько раз в день, сюда гораздо чаще.
Поделиться2012011-03-06 15:24:51
вот скрипт вопрос он правильный ?
Думаю, нет. У тебя там счетчик времени отдельно, блок организации движения отдельно. А вообще все в игре проверяй сразу, как сделал. Лично у меня еще ни один скрипт с первого раза не заработал. А если заработал с первого раза - значит баг глобальный, и надо начинать все сначала.
Очевино, что по истечении заданного времени должна обнуляться не только переменная timer, но и возвращаться в исходное положение как сам активатор, так и переменная YAchse.
Set Timer to Timer + GetSecondsPassed
if (Timer >= 1800)
Set Timer to 0
set YAchse to 0
SetPos Y [координата начала движения]
endif
End
Поделиться2022011-03-06 16:03:07
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
Поделиться2032011-03-06 18:06:07
(может еще кому-то полезен будет):
elseif (Step == 1)
if (YPos < 100) ; Вот это место мне не нравится. YPos нигде не возвращается в исходное положение.
set YPosVar to (GetPos Y)
set YPos to (YPosVar - 10)
SetPos Y YPos
endif
Поделиться2042011-03-06 18:36:16
SpalnyVagon
Это условие я скопировал из скрипта speed_sn1er. Зачем он именно так проверяет пройденное расстояние, я не знаю. Гораздо лучше и надежнее использовать XMarker с проверкой на расстояние.
Для корректировки скрипта достаточно изменить строку:
if (YPos < 100)
на что-нибудь в духе:
if (GetDistance Ref-маркера <= 128)
Поделиться2052011-03-07 21:50:56
Это условие я скопировал из скрипта speed_sn1er. Зачем он именно так проверяет пройденное расстояние, я не знаю. Гораздо лучше и надежнее использовать XMarker с проверкой на расстояние.
Да я просто для примера написал, просто я недома тогда был и сидел с ноута а там неидёт фол вот и немог проверить и писал примерно.
Поделиться2062011-03-08 15:45:33
Помогите как сделать чтобы после убийства главным героем NPC квест переходил в следующую стадию?
Поделиться2072011-03-08 16:31:09
micshkarez, вот шаблон скрипта:
scn aaaSetStageAfterKillingSCRIPT short DoOnce Begin OnDeath Player if (DoOnce == 0) SetStage ИмяКвеста СтадияКвеста ; Например: "SetStage MyQuest 10" set DoOnce to 1 endif End
Скрипт привязать к НПЦ, которого должен убить ГГ.
Поделиться2082011-03-08 17:47:03
Здравствуйте!
Имеется предмет "ModyCarrot", нужно, чтобы когда игрок берёт это предмет отображалось сообщение "ModyCarrotMsg01". А при активации в инвентаре игрока убивало и отрывало голову. Как я понял, нужно использовать
[actorID].kill[actorID] 1.0
Я пробовал - не работает. Можете помочь? Заранее спасибо!
Поделиться2092011-03-08 17:55:02
Rus-IP, приветствую. Вот скрипт на появление сообщения (привязывать к объекту):
scn aaaCarrotHeadExploderSCRIPT Begin onAdd ShowMessage ModyCarrotMsg01 End
Скрипт на активацию объекта зависит от его типа. Чем является ""ModyCarrot"? Точнее, что более важно, в какой категории в Пип-Бое он находится? Раздел "Помощь"?
Поделиться2102011-03-08 17:58:41
Sergey_Ros, является едой, соответственно, находится в разделе "Помощь".