Personalização
As configurações estão em config.lua. Os dois arquivos de bridge estão abertos para que você possa adaptar o lado do framework. O tablet em si é HTML puro em html/.
Qual arquivo decide o quê
Seção intitulada “Qual arquivo decide o quê”| Arquivo | O que ele decide | Aberto? |
|---|---|---|
config.lua | Idioma, framework, fotos, o comando do criador, a grade ao vivo, quem pode usar o tablet e props de câmera | Sim |
bridge/client_bridge.lua | Detecção de framework, trabalho do jogador, notificações e o aviso de texto de ajuda | Sim |
bridge/server_bridge.lua | Detecção de framework, identificadores, trabalhos, itens utilizáveis, adição e remoção de itens, notificações | Sim |
items/ | Definições de itens para ox, qb e ESX, e os ícones em items/images/ | Sim |
html/ | O tablet: index.html, app.js, app.css, o mapa (map.js, map.css) e seus blocos em html/tiles/ | Sem escrow |
locales/*.lua | Todas as strings, no jogo e no tablet | Com escrow nesta versão |
client/, server/ | O script | Com escrow |
Geral — config.lua
Seção intitulada “Geral — config.lua”| Opção | O que ela faz | Padrão |
|---|---|---|
Config.Locale | Qual idioma é usado | 'en' |
Config.Framework | esx, qbcore, ou auto para detectar. No QBox, auto o encontra como qbcore via compatibilidade QBCore; para fixar, use qbcore | 'auto' |
Config.EvidenceEnabled | Fotos ativadas ou desativadas. Desativado, Espaço em uma câmera e a captura da grade não fazem nada | true |
Config.CreatorCommand | O comando que abre o criador de admin | 'camcreator' |
Config.CreatorAce | A permissão ACE que o criador precisa | 'mic_cctvcreator.open' |
Config.LiveGridFPS | Quantas vezes a grade atualiza por segundo. De 1 a 15; maior é mais fluido e mais pesado | 5 |
Config.BlackScreenBehindUI | Desenha uma tela preta atrás do tablet para esconder os saltos entre câmeras enquanto a grade atualiza | true |
Config.AllowedJobs | Trabalhos permitidos para abrir o tablet. Vazio significa todos. Veja abaixo | {} |
Config.SpawnDistance | Quão perto você precisa estar para o prop de uma câmera ser gerado | 60.0 |
Config.BreakableCamera | Se as câmeras podem ou não ser quebradas | true |
Config.RepairDistance | Alcance do laser de reparo | 20.0 |
Config.RepairTime | Quanto tempo leva um reparo, em milissegundos | 5000 |
Quem vê qual câmera
Seção intitulada “Quem vê qual câmera”Esta é a parte que vale a pena decidir antes que alguém coloque uma câmera.
Config.AllowedJobs vazio (o padrão)
Seção intitulada “Config.AllowedJobs vazio (o padrão)”- Qualquer pessoa com um
cctv_tabletpode abri-lo. - Uma câmera colocada por um jogador é privada: apenas ele a vê.
- O dono pode então compartilhá-la com seu trabalho — ela se torna uma câmera de trabalho para todos naquele emprego — ou dar a ela um nome de acesso e senha. Qualquer pessoa que digite esses dados em seu tablet adiciona a câmera a ele.
Config.AllowedJobs definido, por exemplo polícia e xerife
Seção intitulada “Config.AllowedJobs definido, por exemplo polícia e xerife”- Apenas esses trabalhos podem abrir o tablet; qualquer outra pessoa recebe aviso de que não está autorizada.
- Uma câmera que um jogador coloca se torna uma câmera de trabalho para o emprego em que ele está naquele momento.
Câmeras do criador de admin
Seção intitulada “Câmeras do criador de admin”Sempre câmeras de trabalho, visíveis para todos os trabalhos marcados no criador. Uma câmera do criador sem nenhum trabalho marcado não fica visível para ninguém.
Evidências e logs
Seção intitulada “Evidências e logs”- Uma foto tirada de uma câmera privada é privada para quem a tirou. Uma foto de uma câmera de trabalho pertence ao trabalho. Ambas podem ser compartilhadas com o seu trabalho a partir da galeria.
- Os logs de violação aparecem para todas as câmeras às quais você tem acesso — os 30 mais recentes. Reparar uma câmera limpa o log dela.
Retirando uma câmera
Seção intitulada “Retirando uma câmera”O dono pode remover sua câmera pelo tablet e recebe o item de volta.
Quebrando e reparando
Seção intitulada “Quebrando e reparando”Com Config.BreakableCamera ativado, uma câmera fica offline quando um tiro atinge cerca de um metro dela, ou quando é atingida por golpe corpo a corpo, explosão ou veículo. O criador pode marcar câmeras individuais como inquebráveis.
O kit de reparo, cctv_repair, liga um laser. Mire-o em uma câmera quebrada dentro de Config.RepairDistance, pressione E e aguarde Config.RepairTime. O kit não é consumido. Backspace ou ESC o guarda.
Controles
Seção intitulada “Controles”Colocando uma câmera (a partir de um item)
| Tecla | O que faz |
|---|---|
| Olhar ao redor | Move a pré-visualização para a superfície que você olha |
| Roda do mouse (scroll) | Gira a câmera |
| E | Coloca; será solicitado um nome |
| Clique direito / ESC | Cancela |
Olhando através de uma câmera
| Tecla | O que faz |
|---|---|
| W / S | Inclina para cima e para baixo |
| A / D | Vira. Câmeras de parede e poste param em 45° para cada lado; modelos 360° dão a volta completa |
| Roda do mouse (scroll) | Zoom |
| Enter | Alterna entre visão normal, visão noturna e térmica |
| Espaço | Tira uma foto para a galeria de evidências |
| Backspace / ESC | Volta para o tablet |
O criador de admin (/camcreator)
Escolha um modelo (parede, parede 360, poste, poste 360), um nome base, os trabalhos que podem vê-la e se ela pode ser quebrada, e então entre no modo de posicionamento:
| Tecla | O que faz |
|---|---|
| ← / → | Troca o modelo |
| Roda do mouse (scroll) | Gira |
| E | Coloca; será solicitado um nome |
| Clique direito / ESC | Volta para o menu do criador |
Comandos e permissões
Seção intitulada “Comandos e permissões”| Comando | Quem | O que faz |
|---|---|---|
/camcreator | Jogadores com a permissão Config.CreatorAce | Abre o criador de admin. Altere o nome com Config.CreatorCommand |
Conceda a permissão no server.cfg com uma linha add_ace para o grupo desejado, por exemplo concedendo mic_cctvcreator.open para group.admin. Se você alterar Config.CreatorAce, conceda o novo nome.
Exports
Seção intitulada “Exports”No lado do cliente (client-side), para outros resources que precisam saber sobre as câmeras:
| Export | Argumentos | Retorno |
|---|---|---|
GetCameraStatus | id da câmera | 'online', 'broken', ou 'offline' se o id for desconhecido |
GetCameraIdFromEntity | handle da entidade | O id da câmera de um prop de câmera gerado, ou nada |
IsPlacing | — | true enquanto o jogador está posicionando uma câmera |
HideNearbyCamera | coords | Oculta o prop de câmera mais próximo dentro de 2 m e o retorna |
UnhideCamera | prop | Mostra novamente um prop ocultado com HideNearbyCamera |
Idiomas
Seção intitulada “Idiomas”Onze vêm inclusos: en, es, fr, de, it, pt, ar, ja, pl, ru, tr. Defina Config.Locale com o código correspondente. O tablet e o texto dentro do jogo usam o mesmo arquivo.
Nesta versão, os arquivos em locales/ fazem parte do código protegido, portanto não podem ser editados. Se precisar de um idioma que não está lá, ou de uma redação diferente, peça no Discord.
A bridge
Seção intitulada “A bridge”| Arquivo | O que ele cobre |
|---|---|
bridge/client_bridge.lua | Detecção de framework, Bridge.GetPlayerJob, Bridge.Notify e Bridge.ShowTextUI / Bridge.HideTextUI para o aviso de reparo |
bridge/server_bridge.lua | Detecção de framework, Bridge.GetPlayerIdentifier, Bridge.GetPlayerJob, Bridge.RegisterUsableItem, Bridge.AddItem, Bridge.AddItemWithMetadata, Bridge.RemoveItem, Bridge.Notify |
Um resource de notificação diferente: altere Bridge.Notify em ambos os arquivos.
Uma text UI diferente (ox_lib, okok…): Bridge.ShowTextUI e Bridge.HideTextUI no arquivo do cliente. No QBCore eles usam o DrawText do próprio QBCore; caso contrário, o texto de ajuda nativo do jogo.
Inventário: quando o ox_inventory está rodando, os itens são adicionados e removidos através dele em qualquer um dos frameworks. Caso contrário, são usadas as funções próprias do framework.
Um framework diferente: defina Config.Framework e preencha o bloco de detecção e as funções de identificador, trabalho e item em ambos os arquivos. Sem um framework, o script recorre ao identificador license: e trata todos como unemployed, mas os itens — incluindo o tablet — só são registrados no ESX e QBCore (incluindo QBox, através da sua compatibilidade com QBCore).