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

Forcegreeting


LofZ

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

Forcegreeting означает «срочный диалог», это команда в скрипте, которая заставляет говорящего первым начать диалог с игроком.

 

В-основном, эта команда используется

 

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

2. Чтобы защитить говорящего, если есть риск, что игрок убьет его.

 

Например, в подводном гроте среди множества дреугов отыскивается древний дреуг, умеющий разговаривать телепатически. Он должен дать игроку квест. Но ведь игрок не знает, что дреуг не опасен. Скорее Нереварин замахнется оружием, чем решит проверить диалог. Поэтому используется форсгритинг: он сразу дает понять, что дреуг не простой.

 

Форсгритинг хорошо использовать в сочетании с проигрыванием звуков или командой say.

 

Команда Форсгритинг зачастую назначается в связи с дистанцией, т.е. с расстоянием от говорящего до игрока или до другого объекта.

 

if ( GetDistance, Player < 700 )

forcegreeting

endif

 

И самая распространенная ошибка в подобном случае - скрипт зацикливается. Условия выполняются каждый фрейм (игрок находится вблизи говорящего), каждую секунду выпрыгивает окно диалога. Это приводит к зависанию игры.

Поэтому лучше назначать новую локальную переменную типа short. См. ниже

 

Самый простой пример скрипта с forcegreeting

 

 

Но расстояние от говорящего до игрока также играет роль, когда у разных говорящих должен сработать форсгритинг. Вернее модмейкером планируется, что в экстремальной ситуации скрипты сработают последовательно: сначала один непись что-то скажет игроку, а потом другой…

 

Однако, планируемый эффект возможен только если первый говорящий стоит ближе, а второй – дальше, причем очень далеко.

 

Но ведь, если не встраивать разные дополнительные элементы, непросто предугадать, на каком расстоянии от игрока в такой-то окажутся ситуации неписи.

 

И чаще всего при двух командах форсгритинга, они сработают одновременно. Т.е. возникнет очень неприглядный эффект: обе реплики в одном окне. Это выглядит очень скомкано и портит впечатление.

 

Поэтому, если хотите последовательно запустить несколько срочных диалогов, используйте на одном из них скрипт с таймером.

 

begin lofZ-at

 

; составитель – LofZ

 

float timer

 

if ( MenuMode == 1 )

Return

endif

 

if ( once == 1 )

return

endif

 

 

if ( once == 0 )

if ( GetDistance, Player < 1000 ) ; или другое условие, по которому команды могут совпасть

 

set timer to timer + GetSecondsPassed

endif

if ( timer > 2 ) ; время можно менять

forcegreeting

 

set once to 1

endif

endif

 

end

 

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

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

 

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

И даже такого маленького промежутка времени как 2 секунды достаточно, чтобы диалог открылся не в одном окне, а последовательно.

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

Эх, я полтора года страдала, пока не догадалась, как разобраться с проблемой пересекающихся форсгритингов.

Пытаюсь передать свой опыт и информацию. Мож, кому пригодится :1anim_ah:

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

  • 2 недели спустя...

Тут товарищи Хитман, Васк и BagFinder(Dani4) в различной форме благодарили LofZ за Forcegreeting, за что им отдельное предупреждение, а в следующий раз будут плюшки :bg:

А LofZ респект и за это и за весь раздел :ab:

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

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

я чтото тут ваще писал? xD

 

вестимо флуд, полгода назад

Владимир

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

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

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