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

Меня кто-нибудь видит?


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

Уважаемые жители форума, пожалуйста помогите. :1anim_bc:

Нужна скриптовая функция, которая устанавливается в 1, когда игрока никто не видит. Если такой нет, предложите, пожалуйста, альтернативу.

Заранее благодарю за беспокойство.

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

такой переменно нету

но есть функции на проверку видимости (по хелпу очень медленные, нельзя вызывать в каждом фрейме и для всех сразу)

 

 

1. GetDetected, "Actor ID"

float timer

Set timer to ( timer + GetSecondsPassed )

if ( timer < 5 ); обеспечмвает вызов GetDetected раз в 5 сек.
Return
endif

Set timer to 0

if ( GetDistance Player <= 1024 )
if ( player->GetDistance "com_chest_02 " <=128 )
	if ( GetDetected Player == 1 )
		ForceGreeting; Игрок схвачен и будет наказан
		Journal EB_Bone 50
	endif
endif
endif

 

 

2. GetLOS, ObjectID

float timer
Set timer to ( timer + GetSecondsPassed )
if ( timer < 5 ); Таймер, чтобы не тестировать слишком часто (улучшает производительность)
Return
endif
Set timer to 0
if ( doOnce == 0 )
if ( GetDistance Player <= 1024 )
	if ( player->GetDistance "hlaalu_loaddoor_ 02_balyn" <= 256 )
		if ( GetLOS Player == 1 )
			ForceGreeting
		endif
	endif
endif
endif

 

если актер под хамелеоном или в невидимости или удачно крадется - функции вернут 0 и условие не сработает

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

А нельзя в ОДНОМ скрипте проверить, видит ли игрока вообще кто нибудь?

А то я вообще отчаялся, даже if ( Player -> GetDetected, Player ) == 0 пробовал

( типа я думал, что если я сам себя не вижу, то никто не видит. )

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

GetDetected, "Actor ID" (returns Boolean/short)

Возвращает ”истину”, если любой вызывающий актер может обнаружить "Actor ID" (спасибо ThePal за это исправление!). Эта функция возвращает 0, если актер скрыт каким-нибудь образом, например, удачно крадется или на нем заклинание невидимости или хамелеона. В соответствии с файлом справки это медленная функция, не вызывайте ее часто (напр. создайте счетчик для вызова ее раз в 3 секунды).

 

Если я правильно понял эта функция показывает: может ли кто-то видеть Игрока (в данном случае) в определенный момент времени.

Прикрепи скрипт №1, который дал Майк к какому-либо объекту в том месте, где Игроку нужно будет осуществить какое-то действие..

Либо если цели иные сделай глобальный скрипт.

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

импосибл, это не сплинтерсел

Жаль, я что-то вроде SC сделать и собирался.

 

Ну, как бы то ни было, всем спасибо за помощь.

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

А в чем проблема собственно? Создай новую глобальную переменную, скажем, Ne_videl типа short с исходным значением 0.

Затем пишется скрипт со строчками

 

if ( GetDetected == 0 ) ; или как там? давно не пользовалась этой функцией. короче, смысл в том, что "никто не видит".

set Ne_videl to 1

 

endif

Этот скрипт нужно прицепить на ключевого для квеста непися, который не должен видеть игрока.

Если вешать не на непися, а на какой-нибудь другой объект, то стоит обойтись проверкой на дистанцию:

if ( GetDistance, player >= 700 )

set Ne_videl to 1

else

set Ne_videl to 0

endif

Но тогда смысл в том, чтобы игроку не подойти слишком близко к "обнаружителю".

Глобальная переменная - это такая хорошая штука, которую можно использовать во всех скриптах.

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

когда игрока никто не видит

если локация самодельная - можно и сделать на тех конкретных НПС что могут толкатся в нужном месте или активатор или еще какая-нить приблуда, а вот чтоб ВСЕХ учитывать, случайных, из других модов, стандартных - вот именно эта ситуация нереал

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

если локация самодельная

Да ладно. И в самоельной и в стандартной локации эта фишка будет работать.

 

а вот чтоб ВСЕХ учитывать, случайных, из других модов, стандартных - вот именно эта ситуация нереал

Хм, а это точно.

Но вообще такого можно добиться, если перепрограммировать движок игры. :)

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

Но вообще такого можно добиться, если перепрограммировать движок игры.

Как это я сам не догадался...

 

Так, люди, давайте разберемся точно: можно ли в ОДНОМ скрипте определить, замечен ли игрок вообще хоть кем-нибудь?

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

  • 4 года спустя...

Вполне рил. Определить можно всё. Я для этого создавал активатор, помещал его в интерьер и вешал на него следующий скрипт:

 

if ( GetDetected player == 1 )
  ; выполняется если игрока видит ХОТЬ КТО-ТО
endif

 

Не спрашиваете почему, это ведомо только Шигорату и Беседке, но if тогда срабатывает не в случае когда игрока "видит" активатор, а в случае, когда игрока видит любой NPC.

Правда GetDetected угол обзора не учитывает, то есть они и спиной "увидят".

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

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

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

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

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

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

Войти

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

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

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