×
Меню
Индекс

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 в виде нулей и цифры в конце.
Для уникальных Неписей это работает нормально (повидимости).