Pular para o conteúdo

Smart Tags

Além dos campos de entrada do utilizador, as meta tags também podem recuperar dados da API do SignalRGB. Estes são conhecidos como medidores, distintos da classe Meter discutida na secção de Snippets. Existem quatro tipos de medidores visuais disponíveis: linear, area, ocr_textmatch e ocr_numeric.

Além disso, a API oferece sete Propriedades de Conteúdo: nível de áudio, largura de áudio, densidade de áudio, frequência de áudio, matiz de zona, saturação de zona e luminosidade de zona.

Todos os medidores partilham quatro atributos principais:

AtributosDescrição
MeterDefine o nome da variável, acessível via engine.vision.meter, onde meter é o nome escolhido.
TypeEspecifica o tipo do medidor: linear, area, ocr_textmatch ou ocr_numeric
XCoordenada X, em forma normalizada. O medidor é desenhado a partir do seu canto superior esquerdo.
YCoordenada Y, em forma normalizada.

As coordenadas X e Y, juntamente com altura e largura, devem ser inseridas como valores normalizados. Por exemplo, se estou a jogar a uma resolução de 1920x1080 e quero posicionar um pequeno medidor aproximadamente no meio, do lado esquerdo do ecrã, determino que a origem (canto superior esquerdo) do medidor está a 50 píxeis da esquerda e 500 píxeis abaixo do canto superior esquerdo do ecrã.

Isto dá-me:

x = 50, y = 500.

Para os converter para coordenadas normalizadas, divido x pela largura do ecrã (1920) e y pela altura do ecrã (1080), o que resulta (arredondado e no formato correto) em:

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

Embora esta conversão deva teoricamente permitir que um medidor funcione em qualquer resolução com proporção 16:9, muitos jogos apresentam pequenas mudanças de UI entre resoluções. Como formatar medidores para diferentes resoluções será abordado na secção de resolução de problemas no final desta página.

Um medidor linear retorna a percentagem de píxeis ao longo de uma linha horizontal que corresponde a um intervalo HSL especificado, com um valor de 0.0 a 1.0. Por exemplo, um medidor linear cobrindo toda a largura de uma barra de vida verde retornaria um valor de 0.5 com metade da vida.

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

Os medidores lineares requerem quatro atributos adicionais:

AtributoDescrição
WidthO valor de largura, expresso em forma normalizada
HO componente de matiz HSL, variando de 0 a 360
SO componente de saturação HSL, de 0% a 100%
LO componente de luminosidade HSL, de 0% a 100%

Um medidor de área retorna a percentagem de píxeis dentro de uma região retangular que se enquadram num intervalo HSL especificado, com valores de 0.0 a 1.0. Este tipo de medidor pode ser usado para detetar elementos de UI maiores, como caixas de texto ou zonas do minimapa.

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

Os medidores de área requerem cinco atributos adicionais:

AtributoDescrição
WidthO valor de largura, expresso em forma normalizada
HeightO valor de altura, expresso em forma normalizada
HO componente de matiz HSL, variando de 0 a 360
SO componente de saturação HSL, de 0% a 100%
LO componente de luminosidade HSL, de 0% a 100%

Este medidor usa Reconhecimento Ótico de Caracteres (OCR) para procurar uma string específica dentro de uma área retangular definida no ecrã. Se a string for encontrada, retorna 1; se não for encontrada, retorna 0; e se estiver incerto, retorna -1.

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

Os medidores OCR de correspondência de texto requerem quatro atributos adicionais:

AtributoDescrição
WidthA largura, em forma normalizada.
HeightA altura, em forma normalizada.
StringA string a ser procurada. Distingue maiúsculas de minúsculas.
ConfidenceUm valor de 0-100 que especifica o grau de certeza que o medidor deve ter sobre uma correspondência. O padrão é 70 se não especificado.

Este medidor usa Reconhecimento Ótico de Caracteres (OCR) para detetar valores numéricos dentro de uma área retangular no ecrã. Se bem-sucedido, retorna o número como inteiro; se falhar, retorna -1.

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

Os medidores OCR numéricos requerem três atributos adicionais:

AtributoDescrição
WidthA largura, em forma normalizada.
HeightA altura, em forma normalizada.
ConfidenceUm valor de 0-100 que especifica o grau de certeza que o medidor deve ter sobre uma correspondência. O padrão é 70 se não especificado.

As propriedades de conteúdo são medidores de maior densidade que vêm diretamente da API.

  • engine.audio.level retorna o nível de áudio atual em decibéis.
  • engine.audio.width fornece a largura estéreo percebida do áudio de entrada, como uma proporção de 0 a 1.
  • engine.audio.density fornece a densidade de frequência do áudio de entrada, também como uma proporção de 0 a 1 — ruído branco produz valores próximos de 1.0, enquanto tons puros retornam valores próximos de 0.
  • engine.audio.freq retorna um array com 200 elementos, cada um representando o nível atual de uma banda de frequência específica.
  • engine.zone.hue retorna um array de 560 elementos, cada um representando o valor de matiz de um ponto no ecrã. Estes pontos são amostrados de uma grelha 28 x 20.
  • engine.zone.saturation retorna um array de 560 elementos, cada um representando a saturação num ponto do ecrã, amostrado da mesma grelha 28 x 20.
  • engine.zone.lightness retorna um array de 560 elementos, cada um indicando o valor de luminosidade num ponto do ecrã, também amostrado da grelha 28 x 20.

Ao escrever código, podem ocorrer problemas. Abaixo estão alguns problemas comuns com medidores e como corrigi-los:

  • “O meu medidor ou controlo do utilizador não aparece na aplicação”

    • Tente fechar completamente e reiniciar a aplicação. Se o problema persistir, o medidor pode estar formatado incorretamente. Verifique a ortografia e pontuação.
  • “A aplicação ou LightScript continua a bloquear”

    • Isto é frequentemente causado por um medidor malformado. Atributos em falta ou extras podem bloquear a aplicação ou o código. Se os seus medidores estiverem corretos, procure problemas como loops infinitos ou variáveis não declaradas.
  • “O meu medidor aparece, mas não rastreia a área correta do ecrã”

    • As coordenadas normalizadas podem estar incorretas. Lembre-se: é x / largura do ecrã, y / altura do ecrã. Se a matemática não é o seu ponto forte, tente aumentar a largura ou altura do medidor para ajudar a identificar a área correta do ecrã. Tenha apenas em mente que medidores retangulares parecerão comprimidos verticalmente no inspetor.
  • “O meu medidor funciona numa resolução, mas não noutras”

    • Felizmente, não precisará de múltiplos medidores para UI dinâmica. Veja abaixo um exemplo de medidor linear adaptado para múltiplas resoluções.
<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>

Como pode ver, ajustei especificamente o medidor para resoluções 3840x2160 e 2560x1080. Todas as outras resoluções usarão o medidor original.

  • “O meu medidor está posicionado corretamente, mas não aciona”

    • Como programador de LightScript, este será um problema comum. Medidores de área e lineares podem ser instáveis em gradientes ou UI transparente. Abra um slider HSL (como este) e observe o seu ecrã até que as cores correspondam. Comece com intervalos amplos de matiz, saturação e luminosidade até que o medidor acione de forma consistente, depois vá estreitando. Para medidores OCR, certifique-se de que toda a palavra ou número que está a procurar está incluída no medidor, com o mínimo de conteúdo adicional possível. Há um limite para o tamanho do texto ou resolução de ecrã nos quais os medidores OCR funcionarão. Colocar um medidor OCR num texto grande “VITÓRIA” a preencher um ecrã 1920x1080? Sem problema. Mas tente numa caixa de chat em 1280x720 e verá resultados limitados. Além disso, alto contraste entre texto e fundo é ideal para OCR — texto branco em fundo branco não será lido.
  • “O meu medidor aciona demasiado depressa ou sempre”

    • Parabéns, o seu medidor funciona, mas acionar três vezes por segundo provavelmente não é o que quer. UI transparente, ambientes coloridos, explosões e até cutscenes podem causar ativação falsa ou rápida dos seus medidores. Isto será sempre um desafio. Uma solução simples é usar a classe Meter, conforme descrito na próxima secção, Snippets.