MSFD Определяем, замечен ли один актер другим
[no fix] GetDetected, "Actor ID" (returns Boolean/short)
If ( GetDetected, Player == 1 )
Возвращает “истину”, если любой вызывающий актер может обнаружить "Actor ID" (спасибо ThePal за это исправление!).
Эта функция возвращает 0, если актер скрыт каким-нибудь образом, например, удачно крадется или на нем заклинание невидимости или хамелеона.
В соответствии с файлом справки это медленная функция, не вызывайте ее часто (напр. создайте счетчик для вызова ее раз в 3 секунды).
Пример: Игрок должен взять объект незамеченным – если не «пойман».
Begin jeanneScript
float timer
short nolore
if ( GetJournalIndex "EB_Bone" < 20 )
Return
endif
if ( GetJournalIndex EB_Bone >= 40 )
Return
endif
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
End jeanneScript
GetDetected calling an NPC's ID if there's more than one reference in the game will return nothing.
For example:
getDetected, "fargoth"
will return 1, but:
GetDetected "Imperial Guard"
Returns nothing. (Not 0, it doesn’t return a value). However if you reference an exact NPC:
GetDetected "Imperial Guard00000002"
A value is returned.
(Forum info / Fliggerty )
Т.е. один НПС может детектировать другого, но нужно точно знать его ID.
В случае "клонов", т.е. тех кого больше чем одна штука, требуется лезть в консоль чтобы уточнить ID конкретного стражника.
Т.к. игра добавляет "скрытый" уникализатор ID в виде нулей и цифры в конце.
Для уникальных Неписей это работает нормально (повидимости).