Перейти к содержимому

Умные теги

Помимо полей пользовательского ввода, мета-теги также могут получать данные из API SignalRGB. Такие теги называются счётчиками (meters), в отличие от класса Meter, рассмотренного в разделе «Фрагменты кода». Доступны четыре типа визуальных счётчиков: linear, area, ocr_textmatch и ocr_numeric.

Кроме того, API предоставляет семь свойств контента: audio level, audio width, audio density, audio frequency, zone hue, zone saturation и zone lightness.

Все счётчики имеют четыре основных атрибута:

АтрибутыОписание
MeterОпределяет имя переменной, доступной через engine.vision.meter, где meter — выбранное имя.
TypeУказывает тип счётчика: linear, area, ocr_textmatch или ocr_numeric
XКоордината X в нормализованном виде. Счётчик отображается от верхнего левого угла.
YКоордината Y в нормализованном виде.

Координаты X и Y, а также высота и ширина должны быть указаны в нормализованных значениях. Например, при игре в разрешении 1920x1080 и размещении небольшого счётчика примерно посередине левой части экрана начало координат (верхний левый угол) счётчика определяется как 50 пикселей от левого края и 500 пикселей вниз от верхнего левого угла экрана.

Это даёт:

x = 50, y = 500.

Для перевода в нормализованные координаты x делится на ширину экрана (1920), а y — на высоту экрана (1080), что даёт (округлённые значения в правильном формате):

x = “.026”, y = “.463”

Хотя теоретически это преобразование должно позволить счётчику работать при любом разрешении с соотношением сторон 16:9, многие игры имеют небольшие изменения интерфейса между разрешениями. Форматирование счётчиков для разных разрешений рассматривается в разделе устранения неполадок в конце этой страницы.

Линейный счётчик возвращает процент пикселей вдоль горизонтальной линии, соответствующих указанному диапазону HSL, в виде значения от 0.0 до 1.0. Например, линейный счётчик, охватывающий всю ширину зелёной полосы здоровья, вернёт значение 0.5 при половине здоровья.

<meta meter="myLinear" type="linear" x=".1729" y=".9740" width=".0390" h="0-360" s="0-10" l="90-100">

Линейные счётчики требуют четырёх дополнительных атрибутов:

АтрибутОписание
WidthЗначение ширины в нормализованном виде
HКомпонент оттенка HSL, от 0 до 360
SКомпонент насыщенности HSL, от 0% до 100%
LКомпонент яркости HSL, от 0% до 100%

Площадной счётчик возвращает процент пикселей в прямоугольной области, попадающих в указанный диапазон HSL, в виде значений от 0.0 до 1.0. Этот тип счётчика может использоваться для обнаружения более крупных элементов интерфейса, таких как текстовые поля или зоны миникарты.

<meta meter="myArea" type="area" x=".1729" y=".9740" width=".0390" height=".02" h="0-360" s="0-10" l="90-100">

Площадные счётчики требуют пяти дополнительных атрибутов:

АтрибутОписание
WidthЗначение ширины в нормализованном виде
HeightЗначение высоты в нормализованном виде
HКомпонент оттенка HSL, от 0 до 360
SКомпонент насыщенности HSL, от 0% до 100%
LКомпонент яркости HSL, от 0% до 100%

Этот счётчик использует оптическое распознавание символов (OCR) для поиска определённой строки в заданной прямоугольной области экрана. При обнаружении строки возвращает 1; при отсутствии — 0; при неопределённости — -1.

<meta meter="myTextOCR" type="ocr_textmatch" x=".1729" y=".9740" width=".0390" height=".02" string="my string" confidence="70">

OCR-счётчики совпадения текста требуют четырёх дополнительных атрибутов:

АтрибутОписание
WidthШирина в нормализованном виде.
HeightВысота в нормализованном виде.
StringИскомая строка. Чувствительна к регистру.
ConfidenceЗначение от 0 до 100, задающее требуемую уверенность в совпадении. По умолчанию 70, если не указано иное.

Этот счётчик использует оптическое распознавание символов (OCR) для определения числовых значений в прямоугольной области экрана. При успехе возвращает число как целое значение; при неудаче возвращает -1.

<meta meter="myNumOCR" type="ocr_numeric" x=".1729" y=".9740" width=".0390" height=".02" confidence="70">

OCR-счётчики числовых значений требуют трёх дополнительных атрибутов:

АтрибутОписание
WidthШирина в нормализованном виде.
HeightВысота в нормализованном виде.
ConfidenceЗначение от 0 до 100, задающее требуемую уверенность в совпадении. По умолчанию 70, если не указано иное.

Свойства контента — это счётчики с более высокой плотностью данных, поступающие непосредственно из API.

  • engine.audio.level возвращает текущий уровень звука в децибелах.
  • engine.audio.width даёт воспринимаемую стереоширину входящего аудио в виде отношения от 0 до 1.
  • engine.audio.density предоставляет частотную плотность входящего аудио, также в виде отношения от 0 до 1 — белый шум даёт значения, близкие к 1.0, а чистые тоны — близкие к 0.
  • engine.audio.freq возвращает массив из 200 элементов, каждый из которых представляет текущий уровень определённой частотной полосы.
  • engine.zone.hue возвращает массив из 560 элементов, каждый из которых представляет значение оттенка в точке экрана. Точки берутся из сетки 28 x 20.
  • engine.zone.saturation возвращает массив из 560 элементов, каждый из которых представляет насыщенность в точке экрана, взятой из той же сетки 28 x 20.
  • engine.zone.lightness возвращает массив из 560 элементов, каждый из которых указывает значение яркости в точке экрана, также взятой из сетки 28 x 20.

При написании кода могут возникать проблемы. Ниже приведены типичные проблемы со счётчиками и способы их устранения:

  • «Мой счётчик или элемент управления не отображается в приложении»

    • Попробуйте полностью закрыть и перезапустить приложение. Если проблема сохраняется, счётчик может быть неправильно отформатирован. Проверьте правильность написания и пунктуации.
  • «Приложение или LightScript постоянно вылетает»

    • Это часто вызвано неверно сформированным счётчиком. Отсутствующие или лишние атрибуты могут вызвать сбой приложения или кода. Если счётчики правильные, ищите проблемы вроде бесконечных циклов или необъявленных переменных.
  • «Счётчик отображается, но не отслеживает нужную область экрана»

    • Возможно, нормализованные координаты неверны. Помните: x / ширину экрана, y / высоту экрана. Если вычисления затруднительны, попробуйте увеличить ширину или высоту счётчика, чтобы определить правильную область экрана. Имейте в виду, что прямоугольные счётчики будут выглядеть вертикально сжатыми в инспекторе.
  • «Мой счётчик работает при одном разрешении, но не при других»

    • К счастью, для динамического интерфейса не нужно создавать несколько счётчиков. Ниже пример линейного счётчика, адаптированного для нескольких разрешений.
<meta meter="health" tags="vlc,fortnite" x= ".05" y=".9" width=".189" h="70-140" s="40-100" l="40-100" type="linear">
<resolution size="3440x1440" x="0.1666" y="0.8993" width="0.1541"/>
<resolution size="2560x1080" x="0.1666" y="0.8993" width="0.1541"/>
<resolution size="1920x1080" x="0.0557" y="0.9083" width="0.199"/>
</meta>

Как видно, счётчик специально настроен для разрешений 3840x2160 и 2560x1080. Все остальные разрешения будут использовать исходный счётчик.

  • «Счётчик правильно расположен, но не срабатывает»

    • Для разработчика LightScript это будет распространённой проблемой. Площадные и линейные счётчики могут быть капризны на градиентах или прозрачном интерфейсе. Откройте слайдер HSL (например, этот) и наблюдайте за экраном до совпадения цветов. Начните с широких диапазонов оттенка, насыщенности и яркости, пока счётчик не начнёт стабильно срабатывать, затем сужайте. Для OCR-счётчиков убедитесь, что всё искомое слово или число включено в область счётчика с минимальным дополнительным содержимым. Существует ограничение на размер текста или разрешение экрана, при которых OCR-счётчики работают. Поместить OCR-счётчик на большой текст «VICTORY», занимающий весь экран 1920x1080? Без проблем. Но попробуйте это с чатом при 1280x720 — результаты будут ограниченными. Также высокий контраст между текстом и фоном идеален для OCR — белый текст на белом фоне не будет прочитан.
  • «Счётчик срабатывает слишком часто или постоянно»

    • Поздравляю, ваш счётчик работает, но три срабатывания в секунду — вероятно, не то, что нужно. Прозрачный интерфейс, красочные окружения, взрывы и даже катсцены могут вызывать ложные или частые срабатывания счётчиков. Это всегда будет непростой задачей. Простое решение — использовать класс Meter, как описано в следующем разделе, Фрагменты кода.