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

Скрипт огненой ловушки


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

Смысл идеи.

Нужна огненая ловушка.

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

Вижу я это приблизительно так. Сам огонь двигать на манер лифта.

Я не скриптолог и понимаю в этом с пятого на десятое. Кто сможет соорудить такую вещь? нужен шаблон, по которому можно будет изменять этот скрипт. ставить разное время и урон. Только пожалуста укажите что за что отвечает. Плиз.

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

Begin TTRscrpt

float timer

set timer to ( timer + GetSecondsPassed )

If ( timer >= 10 ); Если прошло определенное кол-во времени...

move x 30, y 30, z 30; Огонь начинает двигаться

move x -30, y -30, z -30

player->addspell "trap_fire00";Урон огнем

set timer to 0;Все начинается заново

endif

End

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

Спасибо за помощь, но возникло несколько вопросов.

 

 

Begin TTRscrpt

 

float timer

 

set timer to ( timer + GetSecondsPassed ); что определяет эта строка? и какие значения тут устанавливать?.

 

If ( timer >= 10 ); Если прошло определенное кол-во времени...

 

move x 30, y 30, z 30; Огонь начинает двигаться; это я так понял стартовое расположение модели огня? то есть точка с которой он начинает подниматся?и их можно изменять ориентируясь на расположение модели в ячейке.

 

move x -30, y -30, z -30; точка на которую он поднимется?

 

player->addspell "trap_fire00";Урон огнем устанавливается значение повреждения?

 

set timer to 0;Все начинается заново

 

endif

 

End

 

Просто у меня эта штука не двигалась. и возможно я не точно выразился. Огонь должен подниматся и опускатся сам. при вхождении перса в его зону огонь наносит повреждения. (Огонь поднят). если перс оказывается в нём. и ничего ему не делать если огонь опушен

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

В общем вешаешь этот скрипт на огонь.

Begin TTRscrpt

float timer

set timer to ( timer + GetSecondsPassed ); эту строчку не трогать!! Она устанавливает отсчет времени.

If ( timer >= 10 ); Если прошло определенное кол-во времени...

move x 30, y 30, z 30; Огонь начинает двигаться
move x -30, y -30, z -30; А это он возвращается на стартовую позицию.

HurtStandingActor, 5.0;Урон типа как огнем, 5 пунктов в секунду.

set timer to 0;Все начинается заново

endif

End

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

Не работает. хоть стреляйся. айдишник обьекта точно не нужен?

я привинчивал скрипт уже всюду. и к активатору и к свету. стоит на месте или движется куда угодно но только не вверх-вниз. :1anim_ac:

или я чего недогоняю.

хyz- имеются в виду конечные координаты? То есть точка в которую должен прийти объект из любой точки ячейки.

координаты с минусом это и есть стартовые координаты? А что если у меня он стоит ниже 0?

Ещё If ( timer >= 10 ); - это время в секндах?

Ну тупой я! Тупой! :1anim_ah:

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

Да не, может я где ошибся, я ж в КС не лазил... :1anim_ah:

Попробую у себя сделать...

Перед move ID стоит...

Еще желательно добавить :

if ( MenuMode == 1 )

return

endif

:1anim_ah:

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

Попробуй этот скрипт:

 

Begin TTRscrpt

short start

if ( MenuMode == 1 )
return
endif

If ( GetStandingPC == 1 )

	if (start == 0)

ID огня->move x 30
ID огня->move x -30

	endif

endif

	set start to 1

End

повесить на какой-нибудь участок пола, а вот этот:

 

Begin TTy

short state

if ( menumode == 1 )
return
endif

HurtStandingActor, 5.0

End

на огонь...

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

move x 30, y 30, z 30; Огонь начинает двигаться

move x -30, y -30, z -30; А это он возвращается на стартовую позицию.

а задержку на стояние огня хоть секунду? :1anim_ad: он-то может и передвинулся на один кадр, и тут же обратно, и двигать совсем не обязательно, можно включать/выключать объект огня

 

 

вобщем на огонь.

 

Begin fire_trap

Short do_once
Short do_to
float timer

if ( do_once == 0 )
Disable; огонь в начале задизеблить
set do_once = 1;
endif

set timer to ( timer + GetSecondsPassed ); таймер пошел

If ( timer >= 10 ); после 10-й секунды полыхнет
if ( do_to == 0 ) штоб каждый кадр тебе не фигачило по заклу
	if GetDistance Player <= 200; любое вменяемое число, радиус огня, иначе тебя грохнет в любом месте ячейки
	Set do_to to 1;
	Enable;
	Cast, "ID_закла", Player; касту сделать свойство алвейз саксес, чтоб игнорировать защиту, в самом закле выставляется время действия и эффект, этим методом устраняется недостаток addspell и необходимость его убирания
	endif;
endif;		
elseif (timer >=12); то бишь 2 секунды после 10-и погорит огонь и исчезнет
Disable;
Set do_to to 0;
set timer to 0;Все начинается заново
endif;


End fire_trap

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

Спасибо Майк

Однако при заводе скрипта выдало не совсем понятное мне сообщение

 

syntax error in line 8 missing "to"

Я так понял оно чегото на синтакс ругается.

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

Ищи ошибки в восьмой строке... Или дописать чего-то или поправить... :1anim_ab: :1anim_ab: Изменено пользователем Тореро
Ссылка на комментарий
Поделиться на другие сайты

syntax error in line 8 missing "to"

Я так понял оно чегото на синтакс ругается.

 

Это значит, что в восьмой строке скрипта пропущено "to"

работа с переменными строится по принципу set... to...

 

if ( doOnce == 0 )
disable
set doOnce to 1
endif

 

чтоб испепелять игрока огнем сперва создай новое заклинание, наносящее урон огнем, потом будешь ссылаться на ID этого заклинания, чтобы его вызвать на Игрока (или на Actor'a)

 

а что означает "лифт" объясни физически как это выглядит?

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

Ага. Сейчас попробую.

А лифт. ну я думал что будет легче двигать огонь вверх/вниз. А оказалось что его можно включать/выключать как лампочку. так даже лучше

+ попробывал. скрипт завёлся нормально. однако в игре ругнулось про

scrpt error: expression

&

Right eval

Результат = 0

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

блин, косяк с последовательностью условий, забыл про эту фигню, поменять надо время, а то он все время на первое условие идет

if (timer >=12);
Disable;
Set do_to to 0;
set timer to 0;

elseif ( timer >= 10 ); 
if ( do_to == 0 ) 
	if ( GetDistance Player <= 200 ); 
		Set do_to to 1;
		Enable;
		Cast, "ID_закла", Player;
	endif;
endif;		
endif;

 

результат = 0 в каком смысле? не работает эффект?

 

и добавить в самое начало после объявления переменных, чтоб в режиме меню не считалось

If ( MenuMode == 1)

Return

Endif

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

Верно. не работает.

Чегото я малость запутался куда это всё ставить... Ага. с таймера заменять. А это значит перед ним If ( MenuMode == 1) ?

Ну не догоняю я это дело! :1anim_be:

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

вах маладца...А кто у нас DoOnсe сетанул на единицу а вернуть забыл? итак у нас огонь дисаблен и с ним странные штуки выходят)) не буит работать) у вас доонс должен сетануться на ноль в конце. а во втором условии If Doonce == 1 указано быть. а если хотите чтобы скрипт исполнился только один раз в конце сетаните DoOnce на 2. и он не повторится.

 

Begin fire_trapscript

 

Short do_once

Short do_to

float timer

 

If ( menumode == 1 )

return

endif

 

if ( DoOnce == 0 )

Disable

Set DoOnce to 1

endif

 

set timer to ( timer + GetSecondsPassed )

 

if (timer >=12);

Disable;

Set do_to to 0;

set timer to 0;

Set DoOnce to 0; а это вы и пропустили здесь можно поставить не ноль, а 2, тогда скрипт выполнится один раз.

 

elseif ( timer >= 10 );

if ( DoOnce == 1 )

if ( do_to == 0 )

if ( GetDistance Player <= 200 );

Set do_to to 1;

Enable;

Cast, "ID_закла", Player;

 

endif

endif;

endif;

endif;

 

end fire_trapscript

 

ну если у вас все остальное правилльно то должно сработать..

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

не верно, do_once используется один раз в начале скрипта при его старте (при входе в ячейку) чтоб однократно задисейблить огонь перед стртом таймера с которого начнется отсчет циклического огня для которого используется переменная do_to

 

Siegrun

синтаксис-то что не соблюдаешь? переменная Short do_once а в скрипте if ( DoOnce == 0 )...

 

Begin fire_trapscript

Short do_once
Short do_to
float timer

If ( menumode == 1 ); отключение в режиме меню
return
endif

if ( DoOnce == 0 ); отключение огня при входе в ячейку, по умолчанию объект включен ведь
Disable
Set do_once to 1
endif

set timer to ( timer + GetSecondsPassed )

if (timer >=12);
Disable;
Set do_to to 0;
set timer to 0;
return;	
elseif ( timer >= 10 ); 
if ( do_to == 0 ); однократное выполнение скрипта в период с 10 по 12 секунду
	if ( GetDistance Player <= 200 ); 
		Set do_to to 1;
		Enable;
		Cast, "ID_закла", Player;
		return;
	endif
endif;
endif;

end fire_trapscript

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

да, синтаксис сами поправите. я о принципе - возвращать надо значения. Прогляди хоть элементарно скрипт кольца для какого нито водного дыхания.. если ты не вернешь значение после какого то времени у тебя игрок так и будет вечно с ним ходить. Само оно не сбросится. Так и тут. Изменено пользователем Siegrun
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Войти

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

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

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