Pular para o conteúdo

Cobertura de sinal

Quantas barras de sinal um telefone tem e o que acontece quando ele não tem nenhuma.

Ele vem desligado de fábrica. Uma cidade que não pediu cobertura recebe o telefone que sempre teve — barras cheias em todos os lugares, nada recusado, nada medido:

-- shared/config/signal.lua
Enabled = false, -- turn it on when you want bars that come from where the player is standing

Ligado e sem mais nada alterado, ainda não acontece muita coisa: sem antenas e sem zonas mortas, o mapa tem cobertura total e a única diferença é um medidor de sinal que finalmente diz a verdade. Adicione uma linha abaixo e isso começa a significar alguma coisa.

Tudo é decidido no servidor, a partir de onde o jogador realmente está. Um cliente que decide o próprio sinal é um cliente sem barras quando alguém está ligando para ele e com quatro barras quando ele está fazendo uma ligação.


A mesma coisa que o modo avião significa, porque é o mesmo fato vindo da direção oposta: a cidade não consegue alcançar aquele telefone.

  • Chamadas recebidas e realizadas são recusadas, e o telefone diz Você está sem sinal aqui em vez de indisponível.
  • As mensagens não serão enviadas, e as mensagens enviadas para ele ficam retidas.
  • Tudo o que a cidade tentou entregar é repassado no momento em que as barras voltam — nada é perdido, tudo espera.
  • O telefone em si continua funcionando: a câmera, as notas, a lanterna, as fotos que já estão nele.

A barra de status desenha as barras que tem e, quando não há nada, exibe Sem serviço.


-- shared/config/signal.lua
City = {
Centre = vector3(195.0, -890.0, 30.0), -- Legion Square, near enough
Full = 3000.0, -- full signal within this
None = 9000.0, -- nothing at all past this
},

Barras cheias na cidade, diminuindo uma a uma conforme você se afasta. Medido em um servidor ativo com os padrões acima:

OndeBarras
Legion Square4
Sandy Shores3
Paleto Bay1

Defina City = false para desativar isso e usar apenas antenas.

Antenas, para uma cidade onde a cobertura é algo para o qual os jogadores podem apontar

Seção intitulada “Antenas, para uma cidade onde a cobertura é algo para o qual os jogadores podem apontar”
Range = 900.0, -- full signal this close to a mast
Fade = 1400.0, -- and nothing this much further out
Masts = {
vector3(-75.0, -818.0, 326.0), -- the tower on Maze Bank
vector3(2358.0, 2570.0, 46.0), -- the masts above Sandy Shores
},

Quando esta lista tem qualquer item, as barras vêm da antena mais próxima e City é ignorado. Uma antena que alguém explodiu representa um bairro sem telefones até que seja consertada — que é a versão que vale a pena ter se a sua cidade quiser fazer algo com isso.

Dead = {
{ Coords = vector3(895.0, -3245.0, -98.0), Radius = 120.0, Bars = 0 }, -- the labs
{ Coords = vector3(480.0, -1310.0, 29.0), Radius = 40.0, Bars = 1 }, -- the chop shop
},

Uma zona morta vence o que quer que as antenas digam e, onde duas se sobrepõem, o menor número vence: um bunker dentro de um vale não tem cobertura melhor por estar em ambos. Bars = 0 é nada; qualquer outro número é um porão que ainda pega uma barra.

É uma esfera porque uma esfera é algo cujo centro você consegue encontrar com um único comando.


exports.mic_phone:GetSignal(src) --> 0 to Config.Signal.Bars
exports.mic_phone:SetJammed(src, true) --> takes their bars away until you give them back

Ambos funcionam mesmo com a cobertura desligada. GetSignal responde a contagem máxima, para que um script possa lê-la sem perguntar se o recurso existe — e o bloqueio de sinal ainda tira as barras de alguém, porque um assalto ou uma prisão que queira um prédio sem telefones funcionando não deveria precisar configurar o recurso inteiro primeiro. Esse é o único caso em que um telefone pode perder o sinal em uma instalação padrão, e acontece porque outro recurso pediu por isso.

O bloqueio fica no lado do servidor de propósito: uma state bag na qual o cliente pudesse escrever seria uma state bag que o cliente poderia limpar. É isso que um assalto, uma prisão ou uma história usa — bloqueie todo mundo no prédio e libere quando acabar.

Ler isso não custa absolutamente nada através da state bag:

if (Player(src).state.phoneSignal or 4) == 0 then
-- nobody is calling the police from in here
end
  • Nenhum tempo importa até que Enabled = true; com isso desligado, nada é medido.
  • O cálculo é feito a cada Config.Signal.Tick segundos, cinco por padrão. É uma verificação de distância contra uma lista curta, e não é nada que alguém precise atualizar a cada segundo.
  • Config.Signal.Tell decide se o telefone avisa quando as barras acabam e quando elas voltam. Ambos vêm ligados: perder o sinal precisa de um motivo, e recuperá-lo é o momento em que tudo o que estava em espera chega.