LofZ Опубликовано 6 февраля, 2007 Жалоба Поделиться Опубликовано 6 февраля, 2007 Forcegreeting означает «срочный диалог», это команда в скрипте, которая заставляет говорящего первым начать диалог с игроком. В-основном, эта команда используется 1. Чтобы создать экстремальную ситуацию. Если говорящий очень спешит что-то сказать, не дожидаясь, пока игрок до него доберется,- значит произошло (или происходит) что-то важное. 2. Чтобы защитить говорящего, если есть риск, что игрок убьет его. Например, в подводном гроте среди множества дреугов отыскивается древний дреуг, умеющий разговаривать телепатически. Он должен дать игроку квест. Но ведь игрок не знает, что дреуг не опасен. Скорее Нереварин замахнется оружием, чем решит проверить диалог. Поэтому используется форсгритинг: он сразу дает понять, что дреуг не простой. Форсгритинг хорошо использовать в сочетании с проигрыванием звуков или командой say. Команда Форсгритинг зачастую назначается в связи с дистанцией, т.е. с расстоянием от говорящего до игрока или до другого объекта. if ( GetDistance, Player < 700 )forcegreetingendif И самая распространенная ошибка в подобном случае - скрипт зацикливается. Условия выполняются каждый фрейм (игрок находится вблизи говорящего), каждую секунду выпрыгивает окно диалога. Это приводит к зависанию игры. Поэтому лучше назначать новую локальную переменную типа short. См. ниже Самый простой пример скрипта с forcegreeting Но расстояние от говорящего до игрока также играет роль, когда у разных говорящих должен сработать форсгритинг. Вернее модмейкером планируется, что в экстремальной ситуации скрипты сработают последовательно: сначала один непись что-то скажет игроку, а потом другой… Однако, планируемый эффект возможен только если первый говорящий стоит ближе, а второй – дальше, причем очень далеко. Но ведь, если не встраивать разные дополнительные элементы, непросто предугадать, на каком расстоянии от игрока в такой-то окажутся ситуации неписи. И чаще всего при двух командах форсгритинга, они сработают одновременно. Т.е. возникнет очень неприглядный эффект: обе реплики в одном окне. Это выглядит очень скомкано и портит впечатление. Поэтому, если хотите последовательно запустить несколько срочных диалогов, используйте на одном из них скрипт с таймером. begin lofZ-at ; составитель – LofZ float timer if ( MenuMode == 1 ) Returnendif if ( once == 1 )returnendif if ( once == 0 )if ( GetDistance, Player < 1000 ) ; или другое условие, по которому команды могут совпасть set timer to timer + GetSecondsPassedendif if ( timer > 2 ) ; время можно менятьforcegreeting set once to 1endifendif end Между прочим, здесь таймер продолжает отсчитывать время, даже когда открыто окно диалога. Это значит, что если поставить в таймере второй диалог не через 2 секунды, а через 20, второе окно все равно может открыться сразу после закрытия первого, при условии что игрок будет долго держать открытым первое. Т.к. отчет времени продолжается. И все-таки даже если первое окно открыто долго и время для второго уже истекло, перекрытия все равно не произойдет, - окна будут открываться по очереди. И даже такого маленького промежутка времени как 2 секунды достаточно, чтобы диалог открылся не в одном окне, а последовательно. Ссылка на комментарий Поделиться на другие сайты Поделиться
LofZ Опубликовано 6 февраля, 2007 Автор Жалоба Поделиться Опубликовано 6 февраля, 2007 Эх, я полтора года страдала, пока не догадалась, как разобраться с проблемой пересекающихся форсгритингов. Пытаюсь передать свой опыт и информацию. Мож, кому пригодится :1anim_ah: Ссылка на комментарий Поделиться на другие сайты Поделиться
Владимир Опубликовано 17 февраля, 2007 Жалоба Поделиться Опубликовано 17 февраля, 2007 Тут товарищи Хитман, Васк и BagFinder(Dani4) в различной форме благодарили LofZ за Forcegreeting, за что им отдельное предупреждение, а в следующий раз будут плюшки :bg: А LofZ респект и за это и за весь раздел :ab: Ссылка на комментарий Поделиться на другие сайты Поделиться
mammuthus Опубликовано 6 августа, 2007 Жалоба Поделиться Опубликовано 6 августа, 2007 (изменено) я чтото тут ваще писал? xD вестимо флуд, полгода назадВладимир Изменено 6 августа, 2007 пользователем Владимир Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения