Перейти к содержанию

Скрипт - Лифт [dvp]


Рекомендуемые сообщения

Не хочет запускаться скрипт (пишет ошибку при сохранении скрипта и при загрузке игры), ошибка в строках:

 

If ( [iD лифта] -> GetPos, Z <= [нижняя точка] )

If ( [iD лифта] -> GetPos, Z >= [верхняя точка] )

 

Трабла в том, что скрипт не принимает никакие "[iD лифта]", за исключением "Player" и "Npc", т.е. остальные (Activator, Static) он просто не видит! А кому нужен лифт-npc? Я вешал скрипт на кнопку, в "[iD лифта]" прописывал Static: oc_lift_01.

 

Испробованные варианты: ставил различные кавычки: " и '. Пробовал задавать переменную:

Short liftpos

Set liftpos to oc_lift_01 -> GetPos, Z 13000 ; пробовал тоже в кавычки

соответственно изменяется:

If ( liftpos <= [нижняя точка] )

If ( liftpos >= [верхняя точка] )

 

Ничего не работает. Что делаю неправильно? :(

 

 

ps Кстати, странны еще 2 строчки:

move z, [число]

Ведь при этом, должна двигаться кнопка, а не лифт! Чтобы двигался лифт, нужно написать:

ObjectId -> Move z, [число]

или

ObjectId -> MoveWorld z, [число]

? :unsure: ?

Ссылка на комментарий
Поделиться на другие сайты

лифт наверно должен быть активатором? а не статиком

пробовал...

писал же:

остальные (Activator, Static) он просто не видит!
Ссылка на комментарий
Поделиться на другие сайты

Не понял, как ты хотел его сделать? Вот вариант одного скрипта на лифт.

Лифт опускаеться вниз, при нажатии выключателя (который при этом поворачивается), а потом автоматически поднимается обратно.

Можно поменять условие, вместо активате - на выключателе, поставить set onMe to (GetStandingActor) - уже на самой кабине лифта.

 

Begin @@@

 

float timer

short state

 

if ( MenuMode == 1 )

return

endif

 

if ( OnActivate == 1 ); дернули за ручку

if ( X_State == 0 ); опрос глобальной переменной

"%%%%"->Playsound3DVP "FabBossWhir" 1.0 1.0

; пошел шум от движения лифта

"№№№"->Playsound3DVP "FabBossWhir" 1.0 1.0

; а это щелкнул выключатель

Set X_State to 10

; установили переменную на первое деление

Set state to 10

endif

endif

 

if ( state >= 10 ); первое деление

 

set timer to ( timer + GetSecondsPassed )

;ОБЯЗАТЕЛЬНО поставить таймер!!! Движение завязанно на время, время движения и расстояние определяет скорость перемещения объекта.

 

if ( timer < 5 )

"%%%%"->MoveWorld z -397 ;типа лифт пошел вниз

"_dwrv_neon01"->MoveWorld z -397; а вместе с ним лампочка

"№№№№№"-> Rotate z, 360; а выключатель повернулся

 

elseif ( timer > 21 )

; конечный тайм-код, вернем все на их места и закончим скрипт.

"%%%%"->SetAtStart

;с этого тайм-кода все пошло (поехало) обратно на верх автоматически, можно поменять условия и лифт останется ждать внизу.

set X_State to 0

set state to 0

set timer to 0

; все переменные и время сбрасываем на НУЛЬ.

 

 

elseif ( timer > 18 )

; в этом ключе проиграем немного музыки и подготовимся к подъему

if ( state == 10 )

"%%%%"->Playsound3DVP "FabBossWhir" 1.0 1.0

set state to 60

endif

 

; собственно подъем обратно

"%%%%"->MoveWorld z 397

"_dwrv_neon01"->MoveWorld z 397

"№№№№№"-> Rotate z, -360

endif

 

end

 

Галка references установленна? статик или активатор неважно.

Ссылка на комментарий
Поделиться на другие сайты

EJ-12:

 

Спасибо, конечно, но это не совсем то, что мне нада, вот смысл действия:

Есть 2 этажа, на 1 и 2 этаже кнопки (одинаковые, с одинк. скриптами), Если я наверху, а лифт внизу, то при нажатии кнопки лифт поднимается, захожу в лифт, нажимаю еще раз эту же самую кнопку - он опускается. Если я вверху, и лифт вверху тоже, то при нажатии кнопки, он сразу едет вниз. Еслия я внизу - аналогично.

Скрипт брал [dvp], а он наверное ( :rolleyes: ) его тестил, значит у него работал....

 

>>>Галка references установленна? статик или активатор неважно.

а где именно не подскажешь (и еще, что она делает..., т.к. у меня как раз скрипт при сохданении выдавал ошибку, типа 'oc_lift_01' ... references.... )

Ссылка на комментарий
Поделиться на другие сайты

Все! Исправил!

 

Скрипт-лифт. Вешается на кнопку (или несколько кнопок), которые заставляются двигаться лифт. Внимание! Лифт должен быть активатором и у него должна быть включена функция: References Persist.

 

Begin [Название скрипта]

;Author – [dvp]
;URL - http://fullrest.ru

Short Selector
Short Working
Short status
Short liftpos

Set liftpos to ["ID_лифта] -> GetPos, Z

If ( menumode == 1 )
return
endif

If ( Working == 0 )
If ( OnActivate == 1 )
 If ( Selector == 0 )
 	Set Working to 1
 	Set status to 1
 Elseif ( Selector == 1 )
 	Set Working to 1
 	Set status to 2
 Endif
Endif
Elseif ( Working == 1 )
If ( status == 1 )
 ["ID_лифта] -> Move Z, [скорость опускания с минусом]
 If ( liftpos <= [нижняя точка] )
 	Set status to 0
 	Set Working to 0
 	Set Selector to 1
 Endif
Elseif ( status == 2 )
 ["ID_лифта] -> Move Z, [скорость подъема]
 If ( liftpos >= [верхняя точка] )
 	Set status to 0
 	Set Working to 0
 	Set Selector to 0
 Endif
Endif
Endif

End

 

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

Ссылка на комментарий
Поделиться на другие сайты

Еще 2 траблы с лифтомами, но не факт, что со скриптом (здесь пишу, чтобы форум не засорять :) ). Описание проблемм:

1.

Есть 2 лифта. Первый ходит только вертикально, траектория пути - небольшая. Второй ходит - Z, Y, Z (вертикально, горизонтально (по Y), вертикально), траектория пути большая (сравнительно). Итак: первый лифт ходит как надр: вверх и вних, лагов нет (кроме второй проблеммы). А второй лифт, когда начинает идти по оси Y и проходит некоторое время (где-то на середине траектории Y), игрок (я) как бы "подбрыгивает", но не вверх а просто на лифте, спустя пару секунд игрок падает вниз (через лифт, будто он не материален (внизу пропасть, потом лава)). Как быть? Лифт ведь предназначен для перевозки игрока, а не для "сбрасывания" его в лаву...

2.

Этот "баг" я обнаружил в первом лифте (во-втором вроде нормально), при первом нажатии кнопки - лифт нормально работает, а потом, когда 1 раз нажимаешь кнопку - лифт немного сдвигается (подравнивается?), а начинает двигаться только после 2 нажатия на кнопку.

Примечание: у 1 лифта 2 кнопки (с одинаковым скриптом), у 2 лифта - пока только 1...

Ссылка на комментарий
Поделиться на другие сайты

Разобраться в скрипте на Magic Crapet, Рыбацкой академии, Галеоне и прочих. Впрочем если это в интерьере - странное дело. Но можно, по идее, делать его Disable/Enable за 1 фрейм, тогда Collision обновляются.

Про перевозящие объекты в экстерьерах и про то, как их делать, написано в МСФД8.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...
Разобраться в скрипте на Magic Crapet, Рыбацкой академии, Галеоне и прочих. Впрочем если это в интерьере - странное дело. Но можно, по идее, делать его Disable/Enable за 1 фрейм, тогда Collision обновляются.

Про перевозящие объекты в экстерьерах и про то, как их делать, написано в МСФД8.

 

Так ее кажись с фуллреста убрали...., можно оттуда скриптик вырезать?

Ссылка на комментарий
Поделиться на другие сайты

Значит так, вот отчет:

 

1. Пробовал делать disable/enable лифта, вроде так:

If ( GetDisabled == 0 )
Disable
Else
Enable
EndIf

Вешал его на лифт... Лифт мерцал, Очень заметно, так что такая тема не прокатит (только если делать дисейбл/энейбл намного чаще)

 

2. Пробовал тоже, но при помощи Timer'a, примерно так:

Float Timer

Set Timer to GetSecondsPassed

If ( Timer == 1 )
Enable
Elseif ( Timer >= 5 )
Disable
EndIf

 

Ничего из этого не вышло :( Никогда с Timer'ом "не дружил"...

 

3. Т.к. я проваливаюсь сквозб лифт из-за того, что долго еду по оси ОУ (или по ОХ), то решал на полпути поставить еще 1 лифт, с повешенным на него disable, когда 1 лифт доезжает до координат 2-ого, он останавливается, потом исчезает (disable), а 2 наоборот - появляется (enable) и начинает двигаться, вот так:

[morrscript]

Begin oc_button_02_script

 

;Author - [dvp]

;URL - реклама на форуме запрещена, читай правилаfullrest.ru

;Изменял скрипт - metalolom

;URL - реклама на форуме запрещена, читай правилаmetalolom-tes.narod.ru

 

Short Selector

Short Working

Short status

Short liftposza

Short liftposya

Short liftposzb

Short liftposyb

 

Set liftposza to oc_lift_02a -> GetPos, Z

Set liftposya to oc_lift_02a -> GetPos, Y

Set liftposzb to oc_lift_02b -> GetPos, Z

Set liftposyb to oc_lift_02b -> GetPos, Y

 

If ( MenuMode == 1 )

Return

endif

 

If ( Working == 0 )

If ( OnActivate == 1 )

If ( Selector == 0 )

Set Working to 1

Set status to 1

Elseif ( Selector == 1 )

Set Working to 1

Set status to 2

Endif

Endif

Elseif ( Working == 1 )

If ( status == 1 )

oc_lift_02a -> Move Z, -100

If ( liftposza <= 11220 )

Set Working to 2

Endif

Elseif ( status == 2 )

oc_lift_02b -> Move Z, -100

If ( liftposzb <= 11220 )

Set Working to 2

Endif

Endif

Elseif ( Working == 2 )

If ( status == 1 )

oc_lift_02a -> Move Y, 100

If ( liftposya >= 4668 )

Set Working to 3

oc_lift_02a -> Disable

oc_lift_02b -> Enable

Endif

Elseif ( status == 2 )

oc_lift_02b -> Move Y, -100

If ( liftposyb <= 4668 )

Set Working to 3

oc_lift_02a -> Enable

oc_lift_02b -> Disable

Endif

Endif

Elseif ( Working == 3 )

If ( status == 1 )

oc_lift_02b -> Move Y, 100

If ( liftposyb >= 6248 )

Set Working to 4

Endif

Elseif ( status == 2 )

oc_lift_02a -> Move Y, -100

If ( liftposya <= 3088 )

Set Working to 4

Endif

Endif

Elseif ( Working == 4 )

If ( status == 1 )

oc_lift_02b -> Move Z, 100

If ( liftposzb >= 11724 )

Set status to 0

Set Working to 0

Set Selector to 1

Endif

Elseif ( status == 2 )

oc_lift_02a -> Move Z, 100

If ( liftposza >= 12136 )

Set status to 0

Set Working to 0

Set Selector to 0

Endif

Endif

Endif

 

End

[/morrscript]

 

Эффекта: 0 :(

 

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

Ссылка на комментарий
Поделиться на другие сайты

А не пробовал вместо двух лифтов, в кондиции когда лифт доехал до определенной точки просто обновлять на один фрейм? К примеру:

 

if ( doehal == 1 )
Disable 
Enable
Set doehal to 0
endif

Ссылка на комментарий
Поделиться на другие сайты

>>>LonWolf

 

Можно попробовать, но лифт все равно "моргнет"... Но можно как-то сделать, чтобы не "моргал", об этом в MSFD8 писали, но не написали КАК это сделать :angry:

Ссылка на комментарий
Поделиться на другие сайты

Может и не моргнет. Ты же ставил else - условие, а это ведь один лишний кадр.

Сделал... Похоже скрипт проигнорировал написанное... Лифт даже не обновился. У меня есть еще 1 вариант, чтобы обойти этот баг: когда игрок становится на него, блокировать ему управление, написать что-то вроде "Стойте смирно" и двигать игрока вместе с лифтом... Но это будет выглядеть очень не естественно :(

Вообще есть такая команда: обновить все в ячейке, но в MSFD 8 писали, что она испорчена...

Ссылка на комментарий
Поделиться на другие сайты

Не обновился, говоришь? А как ты узнал?

Ну игрок-то проваливается...

 

Делай тогда тоже самое, что в твоем первом примере, но без else.

 

Сделал... лифт может и обновляется (когда идет по оси Я вниз, чар немного подпрыгивает...), но все равно слетает, когда идет по Oy :angry: А еще кстати забыл сказать, после того, как чар начнет "слетать", стать на лифт уже нельзя -( Всегда проваливаться будешь...

Ссылка на комментарий
Поделиться на другие сайты

Охренеть. У тебя там часом обновление ячейки не идет?

Команда SellUpdate (или как-то так) не работатет (MSFD 8 писали), так бы я ее попробовал юзнануть, но... :(

Ссылка на комментарий
Поделиться на другие сайты

Примечание: обход этой проблемы (необходим Трибунал) в том, чтобы отключить и удалить (SetDelete) объект (для перемещающихся объектов, при перемещении в новую ячейку) и немедленном помещении новой версии (PlaceItem) в ту же позицию, используя глобальный скрипт (смотри лодочный скрипт от MadMax из плагина Fishing Academy Mod). Смотри раздел Советы и Трюки для более подробного объяснения самим MadMax. Это похоже на колдовство, потому что таким образом объект никогда не покидает ячейку, в которой он был создан.

Я так полагаю, это выглядит примерно так:

if ( CellChanged == 1 )
Set oA to GetAngle z * 60;Эти
Set oX to GetPos x;переменные
Set oY to GetPos y;будут 
Set oZ to GetPos z;глобальными.
StartScript cc
endif

Это была часть на лок. скрипт лифта. Теперь, собственно, глобальный:

Begin cc
[id лифта] -> Disable
[id лифта] -> SetDelete 1
[id лифта] -> PlaceItem, oX, oY, oZ, oA
StopScript cc

End

Ссылка на комментарий
Поделиться на другие сайты

Да, но ведь мой лифт не переходин в следующую ячейку.. Но попробую, вместь disable/enable сделать удалить/вставить...

 

 

Мне тебя искрене жаль! И я всей душой надеюсь что тебе удастся победить этот скрипт! А вобще респект за настырность! ;)

Ссылка на комментарий
Поделиться на другие сайты

Да я уже забил на скрипт: надоело жутко! Решил переделать траекторию движения лифта, теперь он будет идти по Oy, Oz, Oy, Oz. Так вот... Благодарю всех за помощь, отдельно LonWolf за упорность, в общем тему можно закрывать...
Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

metalolom!

У меня скрипт для лифта твой не пашет.

Нажимаю на рычаг, лифт идёт, и не хочет останавливатся.

Верхняя точка поставлена.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Может ктонибудь выложить работоспособный скрипт на лифт (вверх-вниз, три кнопки (вызов, поехали и стоп)...

И еще вопрос? Лифт закрывает обыкновенная дверь. , что нужно прописать, чтобы когда лифт приехал, дверь автоматически открылась? :1anim_ah:

 

И есть у разработчика сайт? или откуда вообще где можно найти скрипт

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...