rp_computer()

O computador da cidade, peça por peça, e o sistema que roda nele. A bancada decide se aquele PC liga; cada placa-mãe tem o seu boot, o seu Setup e o seu menu de boot; e o OrionOS é o que aparece na tela depois — arquivos presos ao disco, contas das organizações conferidas no servidor, e um app para o TI administrar tudo isso. O computador fica ligado depois que você sai.

Resource
[rp]/rp_computer
Sistema
web/os (iframe na NUI)
Porta com o servidor
callback rp_computer:os
Senhas
bcrypt, só no servidor
Estado do PC
ligados[pc], na memória

A ideia que organiza tudo

O hardware é de verdade, então o sistema também precisa ser. Gabinete, placa-mãe, processador, cooler, memória, vídeo, disco e fonte são itens físicos, e a bancada só deixa ligar o que um PC de verdade ligaria. As fases seguintes da rede — invasão, mineração, sistemas de trabalho — vão perguntar "quanto este PC aguenta?", e um hacker de placa topo não pode ser a mesma pessoa que o de computador de escritório.

O OrionOS é a outra metade. Passou no POST e achou disco, a bancada vira um monitor e o sistema roda dentro dele, num iframe da NUI. Área de trabalho, janelas, Core Office (Word, Excel, PowerPoint e PDF), terminal, e-mail, e para cada organização o app Servidor de contas.

Regra da casa

A tela não decide nada. Onde a peça encaixa, se a senha confere, se a conta pode criar outra conta — tudo chega pronto do servidor. A tela repete algumas regras só para responder na hora, com a mesma mensagem, e o servidor confere de novo sempre.

Os arquivos

  • server/hardware.lua — as regras puras do hardware. Não toca em banco nem inventário: dá para conferir lendo e testar fora do jogo.
  • server/main.lua — a bancada: montar, desmontar, overclock, ligar. É quem abre a sessão do sistema.
  • server/os.lua — o sistema ligado ao jogo: disco, instalação, senha do PC de casa, porta das contas.
  • server/diretorio.lua — o servidor de contas de cada organização.
  • web/os/ — o OrionOS. jogo.js é a ponte; fora do jogo ele se desliga e o sistema roda com dados de exemplo, para desenhar no navegador.

O boot de cada placa-mãe

Cada placa liga do jeito do fabricante dela. A tela do POST, a BIOS, as teclas e — o que realmente muda o conserto — o jeito de avisar que algo deu errado. O perfil mora em shared/bios.lua, e a placa aponta para ele pelo campo bios na ficha técnica.

PlacaFabricante · BIOSAvisa porTeclas
H610MGigabit · Awarde, BIOS de textobipe — memória: longos repetidos; vídeo: um longo e dois curtosDEL / F12
A520MASRook · American Megatrons, BIOS de textobipe — memória: três curtos; vídeo: um longo e oito curtosF2 / F11
B550MSY Click BIOS, UEFILEDs CPU, DRAM, VGA, BOOTDEL / F11
B650MGigabit Aurus, UEFILEDsDEL / F12
X670EGigabit Aurus Master, UEFIdisplay de Q-CodeDEL / F12
Z790ASOS ROC Maximus, UEFIdisplay de Q-CodeDEL / F7

O Q-Code não vem com legenda, como na placa de verdade: 00 processador, 55 memória, d6 vídeo, A2 sem de onde dar boot, AA entregou ao sistema. Quem só conhece bipe fica perdido numa placa sem alto-falante — e é de propósito: trocar de placa muda o jeito de consertar.

Passou no POST, o monitor mostra o boot da placa em tela cheia antes do OrionOS: a BIOS de texto rola as linhas, a UEFI mostra só o logo e as teclas.

As linhas do POST nunca apareciam

.tela .ln começava com opacity: 0, e a animação surgir só define o quadro inicial. Animação sem quadro final termina no valor do próprio elemento — que era zero. A tela da BIOS existia desde a primeira versão da bancada e ninguém nunca a viu. Agora é animation: surgir .2s both: invisível durante o atraso, visível no fim.

Placa nova

bios e modelo na ficha da placa em shared/pecas.lua. Sem isso ela cai no perfil genérico, e o teste de hardware reclama.

O Setup e o menu de boot

Enquanto a tela do POST está de pé, a tecla do fabricante abre o Setup e a outra abre o menu de boot — dá para clicar na linha das teclas, no rodapé da tela, em vez de acertar a tecla. Cada fabricante tem a sua cara, e por baixo é o mesmo modelo de páginas e itens (web/bios.js, conferido por server/bios.lua):

  • Awarde — o menu azul em duas colunas, destaque vermelho, cada entrada abre uma tela.
  • American Megatrons — faixa azul, abas no topo, corpo cinza e a ajuda do item à direita.
  • UEFI — gráfica, na cor da marca: a MSY com o menu de lado, a Aurus e a ROC com abas, cartões de processador, memória e armazenamento, e um monitor de hardware na coluna da direita.

O que se muda ali muda o teste seguinte, porque salvar reinicia o computador: o servidor apaga o último POST, desliga a sessão do sistema e a tela aperta o botão de novo.

A bancada não repete a tela do POST — ela mostra a conta do consumo aberta, watt por watt (processador, vídeo, placa-mãe, memória, discos, ventoinhas), e a ficha da placa: versão da BIOS, as duas teclas, como ela avisa defeito, e o que está gravado no Setup dela (velocidade da memória e se o perfil está ligado, curva das ventoinhas, de qual disco ela dá boot, se tem senha). A tela do fabricante aparece onde ela existe de verdade: no monitor.

ItemO que faz de verdade
Ordem de bootde qual disco o sistema sobe. O menu de boot (F12, F11, F7…) escolhe só desta vez, sem gravar
Perfil de memória
XMP, DOCP, A-XMP ou EXPO, conforme a placa
desligado, a memória roda na velocidade da norma — DDR4 2133, DDR5 4800 — e o processador rende cerca de 8% menos. O POST avisa
Overclocko mesmo número da bancada. Passar do que o silício aguenta é tela azul no boot seguinte
Curva das ventoinhassilencioso esquenta 12%, turbo esfria 10%
Senha do supervisorpedida para entrar no Setup. Hash bcrypt, como as contas; três erros travam a placa até religar
A configuração é da placa, não do gabinete

Tudo isso fica preso ao número de série da placa-mãe. Trocar a placa volta tudo ao padrão de fábrica, como numa placa nova — e a placa antiga leva a senha embora.

Esqueceu a senha do Setup

É o jumper da placa: com o gabinete aberto e o kit de ferramentas na mão, o botão Limpar CMOS da bancada zera a configuração, a senha e o overclock. Custa abrir o gabinete ao lado dele — e é a única saída. Enquanto a senha existir, o controle de overclock da bancada fica travado, porque overclock se mexe no Setup.

Quando o Setup abre

Só quando a tela chegou a ficar de pé: PC que liga, PC sem disco e até a tela azul do overclock — que é justamente onde se precisa dele para desfazer o exagero. Proteção térmica e placa sem imagem não dão tempo.

Os números de série

Cada PC tem a sua chave, e cada disco tem o seu número. A chave (PC-XXXXX-XXXXX-XXXXX) nasce com o gabinete e aparece na bancada e na moldura do monitor. O id numérico continua existindo como endereço interno; a chave é o que o dono vê, anota e denuncia quando roubam.

O que decide onde moram os arquivos é o disco (DK-XXXXXXXX). Os arquivos são do disco, não do PC: tirar o SSD de um gabinete e montar em outro leva tudo junto. É o que faz roubar um disco valer alguma coisa.

Disco em branco

Disco sem linha em rp_computer_discos nunca teve sistema, e o OrionOS abre o instalador. No PC de organização a instalação é automática, "gerenciada pelo TI", com o nome do lugar. No PC pessoal a pessoa escolhe o nome do computador, o próprio nome e uma senha opcional. Instalar formata: o que sobrou de um sistema apagado vai embora.

Os PCs que já existiam no banco antes da chave ganharam uma na primeira subida, junto com a organização calculada pelo lugar.

Do botão à área de trabalho

O computador é que fica ligado, e não a sessão de quem está na frente dele. Sair de perto fecha a tela, mas não desliga nada: voltar cai na mesma área de trabalho, com a mesma conta logada e as mesmas janelas abertas — como o PC do plantão, que ninguém desloga. Quem quiser fechar de verdade aperta o botão de energia; o restart do servidor é a queda de energia que apaga a cidade inteira.

O que isso quer dizer no RP

PC deixado logado é PC aberto para quem sentar depois. Prontuário na tela, e-mail aberto, o app do servidor na mão de quem chegou — o cuidado de sair da conta passa a valer alguma coisa. Um PC tem um teclado: enquanto alguém está usando, ninguém mais senta.

Usar e abrir são coisas diferentes: "Ligar o computador" leva direto para a tela dele, ligado ou não. "Abrir o gabinete" mostra a bancada mesmo com o PC ligado — é onde se troca peça, se limpa o CMOS e onde o botão passa a dizer Voltar ao sistema.

O botão da moldura é do monitor

Sair da tela não desliga o computador. O botão ao lado do LED devolve o jogo — grava o que faltou e vai embora, com o PC ligado atrás. É o botão do monitor, não o do gabinete.

Desligam de verdade: o Desligar do OrionOS, o botão Desligar o computador na bancada, abrir o gabinete para mexer nas peças, limpar o CMOS, salvar no Setup (que reinicia) — e, no gabinete que é item, guardá-lo no bolso ou na mochila: saiu da tomada. No chão ou no porta-malas, ele continua ligado. O Reiniciar do sistema refaz o POST inteiro, com a tela de boot da placa.

  1. POST. A bancada liga o PC. Se passou e achou disco, o servidor grava a sessão do sistema, que sobe do primeiro disco vivo (M.2 antes de SATA).
  2. Um PC, um usuário. A partir daí o PC fica preso a quem ligou: ninguém mais liga, abre o gabinete ou tira o disco enquanto ele usa. Um teclado, uma pessoa.
  3. A tela troca. Depois das linhas da BIOS, a bancada some e aparece o monitor com o iframe.
  4. Iniciar. O sistema pergunta ao servidor o que é este PC: chave, organização, o hardware medido no POST, o disco. O tempo de boot vem da velocidade do disco — HD uns 6 segundos, NVMe pouco mais de 1.
  5. Instalador ou disco. Disco em branco abre a instalação; disco com sistema desce e cai na tela de entrada.
O botão de energia é da moldura

Ele fica na página da bancada, fora do iframe. Desligar por ali pede ao sistema para gravar o que faltou e fecha; se o sistema travou, fecha à força depois de alguns segundos. Uma tela de sistema que só fecha pelo próprio sistema prende o jogador no dia em que o JavaScript quebrar.

O disco na rede

Evento confiável grande trava o canal inteiro do FiveM, e a documentação não dá um número. Então o disco nunca atravessa a rede de uma vez:

  • Desce em blocos de Config.Os.bloco caracteres. O servidor corta em fronteira de caractere UTF-8 — um "ã" partido ao meio chega na tela como lixo.
  • Sobe só o que mudou. A tela guarda o que já foi gravado e manda a diferença: no (cria ou atualiza), anexar (o resto de um conteúdo grande) e apagar. Renomear manda os dados do arquivo sem o conteúdo.
  • O corte do lado da tela não parte emoji. Em JavaScript um emoji são dois caracteres; cortar entre eles gera um texto inválido que o JSON do Lua estraga.
  • Grava sozinho um segundo depois de cada mudança, e grava o que faltou ao desligar.
O servidor confere a cada gravação

Que o sistema está instalado, que alguém entrou (ou que é a instalação acabando de subir), e que o disco ainda está no gabinete. Se alguém tirou o disco enquanto o dono usava, a próxima gravação é recusada e o sistema trava na tela: "O disco do sistema foi removido".

As contas das organizações

Cada organização tem um servidor tipo Active Directory: grupos, contas e auditoria. O computador da organização não tem conta própria — quem senta nele entra com DOMINIO\usuario e a senha do servidor, e a mesma conta vale em qualquer PC daquela organização.

  • A senha só existe como hash bcrypt, feito pelo próprio FXServer. Nem o banco nem a tela sabem a senha de ninguém. Cinco erros seguidos travam a conta.
  • A tela guarda um espelho sem senha. A mudança do administrador roda no espelho primeiro — resposta na hora —, vai ao servidor, é conferida de novo e o diretório de verdade volta para todos os PCs da organização. Conta desativada cai da sessão onde estiver; app negado fecha.
  • O administrador passa por cima da política do PC. O Terminal travado no hospital continua travado para enfermagem e recepção, e abre para quem administra o servidor.
  • Senha temporária obriga a criar uma nova antes de entrar.

A primeira conta

Servidor recém-criado não tem conta nenhuma, e alguém precisa ser o primeiro administrador. A tela de entrada mostra "Criar a primeira conta do servidor" só para:

  1. o chefe do emprego da organização (grade boss, ou a maior grade do emprego);
  2. quem está em Config.Os.fundadores, pelo identifier — vale para sempre;
  3. quem recebeu /pcfundar da staff — vale até sair do servidor.

Depois da primeira conta, conta nova só nasce pelo app Servidor.

Por que não "qualquer um cria o primeiro admin"

Pelo mesmo motivo do painel: uma tela que oferece criar o primeiro administrador entrega a organização a quem chegar primeiro no computador.

O que se ajusta na config

ChavePara quê
Config.Orgsas organizações: emprego do ESX, domínio, servidor, faixa de IP, as áreas do mapa e os grupos com que o servidor nasce. A chave (ems, policia…) é a mesma do perfil do OrionOS
Config.Os.blocoquantos caracteres atravessam a rede por pedido (8000)
Config.Os.discoMax / arquivoMaxteto do disco (4 MB de texto) e de um arquivo (768 KB)
Config.Os.tentativassenhas erradas até a conta travar (5)
Config.Os.fundadoresidentifiers que podem criar a primeira conta em qualquer organização
Config.Serie.pcprefixo da chave do computador
A organização é gravada quando o PC nasce

O PC do mapa pertence à organização cuja área o contém no momento em que ele é criado. Mexer numa área depois não troca o dono de um computador que já existe — é a coluna rp_computers.org. PC fora de qualquer área, e gabinete de jogador, é pessoal.

Tabelas

TabelaO que guarda
rp_computerscada gabinete: o que está montado, a chave (serial), a organização e o lugar dos PCs do mapa
rp_computer_pecasa ficha secreta de cada peça pelo nº de série: defeito, silício, desgaste
rp_computer_discosdisco com sistema: nome do PC, usuário e o hash da senha do dono
rp_computer_arquivoscada arquivo e pasta, por disco — a lixeira é pai = 'lixeira'
rp_computer_contasas contas das organizações, com hash bcrypt
rp_computer_gruposgrupos, se administram o servidor, e os apps negados
rp_computer_auditoriaquem entrou, errou senha, criou ou desativou conta

Todas nascem sozinhas quando o resource sobe.

Comandos

ComandoPara quê
/pcfundar <org|todas> [id]deixa alguém criar a primeira conta de administrador sem ser o chefe do emprego. Exige ACE; vale até a pessoa sair
/pcmodelomire num prop e descubra o nome dele, para pôr na lista de computadores do mapa

Armadilhas que custaram caro

nil no fim da lista de parâmetros

A primeira instalação no jogo travou em "Copiando arquivos do sistema…". O PC da organização não tem senha de disco, esse nil era o último parâmetro e sumiu da tabela Lua: o banco recebeu três valores para quatro ? — "erro de sintaxe perto de '?)'". Agora o vazio vai como '' (ou -1 para número) e o SQL devolve o NULL com NULLIF(?, ''). A mesma coisa esperava por arquivo sem lixeira e por PC do mapa fora de área.

NULLIF(?, '') dentro de aspas simples do Lua

A string da query termina no primeiro ' e o arquivo nem carrega. Query com aspa simples dentro vai em aspas duplas ou em [[ ]].

Tela de erro com o instalador na frente

O instalador é uma camada por cima das outras telas. A falha mostrava a mensagem por baixo dele, e o jogador ficava olhando uma barra parada. Falhar agora remove a camada primeiro.

F8 é o console do jogo

O menu de boot da ASUS de verdade é F8. Dentro do FiveM, F8 abre o console do jogo mesmo com a NUI em foco: a placa ROC usa F7. Vale para qualquer tecla que a tela queira tomar para si.

Arquivo novo no manifesto exige refresh

O OrionOS são dezenas de arquivos em files{}, com curinga. Página ou script novo só chega ao cliente depois de refresh e ensure rp_computer — e quem estava conectado pode continuar com a cópia velha até reconectar.

O que ainda falta

  1. Testar dentro do jogo. A instalação do PC do hospital já rodou; o resto foi testado fora do jogo, com o Lua de verdade para as contas, o Setup e a bancada, e um servidor falso para o sistema. Falta ver no jogo o Setup de cada placa, o menu de boot, o Limpar CMOS e o computador que continua ligado depois que a pessoa sai.
  2. Conferir os empregos mayor (Prefeitura) e banker (Maze Bank), e medir no jogo as áreas da LSPD, da Prefeitura e do Maze Bank.
  3. E-mail entre jogadores. Hoje as mensagens são de exemplo, na memória da tela.
  4. Imprimir vira papel. O sistema já avisa quando imprime; falta o rp_inventory receber e criar o item com o documento.
  5. Queda de servidor vinda do servidor. O console do TI e os sete incidentes existem, mas só na tela. No jogo, a queda deveria vir de evento, sabotagem ou invasão.