mri-QboxResourcesCuchi Computer

cuchi_computer — Manual

Computadores e laptops utilizáveis no jogo, com sistema operacional em NUI: console com comandos de rede, e-mail, mercado, endereços da darkweb e um assalto de dados (data heist).


Sumário

  1. Dependências
  2. Instalação
  3. Banco de dados
  4. Configuração
  5. Como abrir um computador
  6. Aplicativos
  7. Console — comandos
  8. Data Heist
  9. Endereços
  10. Integrações
  11. Entrypoints para outros recursos
  12. Localização
  13. Estrutura de arquivos

Dependências

RecursoObrigatórioObservação
qb-core ou ESXSimDefinido em Config.Framework e Config.FrameworkResourceName. O recurso precisa iniciar depois do framework
oxmysqlSimTabelas de mercado e e-mail
ox_target ou qb-targetNãoSó se Config.TargetSystem = true. Com false, a interação com os props é por checagem de distância

Instalação

  1. Copie a pasta cuchi_computer para resources/.
  2. Importe o tables.sql (ver Banco de dados).
  3. Adicione ao server.cfg, depois do framework:
    ensure qb-core
    ensure cuchi_computer
  4. Se for usar o item (padrão laptop, definido em Config.UseItem), registre-o no inventário como usável. Para desativar o item, deixe Config.UseItem = "".
  5. Ajuste config.lua: framework, locale, sistema de target e as posições de computadores livres.

Banco de dados

O tables.sql cria três tabelas:

TabelaConteúdo
computers_marketAnúncios do app Market: seller, title, description, timestamp
computers_mail_accountsContas de e-mail: identifier, username, password
computers_mail_mailsMensagens: from, to, object, text, answer_to, timestamp, read

Configuração

Arquivo: config.lua.

Compartilhado

CampoTipoObrigatórioDescrição
Config.FrameworkstringSim"qbcore" ou "esx"
Config.FrameworkResourceNamestringSimNome do recurso do framework. Ex.: "qb-core" ou "es_extended"
Config.FrameworkOptionalExportNamestringSimSó preencha se você renomeou o export que devolve o objeto do core. Vazio usa GetCoreObject (QBCore) ou getSharedObject (ESX)
Config.LocalestringSimIdioma da interface. PT, EN, FR, ES, DA ou DE
Config.UseItemstringSimItem que abre a interface. Padrão: laptop. String vazia desativa o uso por item

Data Heist

CampoTipoObrigatórioDescrição
Config.DataHeists.EnabledboolSimLiga o assalto de dados
Config.DataHeists.DisplayAreaboolSimDesenha as áreas no mapa (útil para configurar)
Config.DataHeists.Reward{min, max}SimRecompensa sorteada entre os dois valores. Padrão: 10000 a 20000
Config.DataHeists.TypeOfDelaystringSim"each" = um cooldown por área; "all" = um cooldown global
Config.DataHeists.Delaynúmero (min)SimCooldown entre assaltos. Padrão: 60
Config.DataHeists.JobsToCalllistaSimJobs que recebem o alerta com o GPS. Padrão: police, sheriff
Config.DataHeists.AreastabelaSim[vector3] = raio em metros. Padrão: as 5 Fleeca + o estacionamento da Arcadius (raio 50)

Servidor

CampoTipoObrigatórioDescrição
Config.Functions.GetIdentifierfunçãoSimDevolve o identificador do jogador. Por padrão usa a license. Comente e use playerObj.PlayerData.citizenid se quiser contas de e-mail por personagem em vez de por conta

Cliente

CampoTipoObrigatórioDescrição
Config.LaptopInVehicleboolSimPermite usar o laptop dentro de veículos
Config.UsePropslista de hashesSimProps do jogo base (laptops, computadores e monitores) que viram computadores interativos. Esvazie a lista para desativar
Config.TargetSystemboolSimtrue usa target nos props; false usa marker + checagem de distância
Config.TargetTypestringSim"ox" ou "qb"
Config.UsablePositionslista de vector3SimCoordenadas onde qualquer jogador pode abrir um computador livre, sem prop e sem item
CustomDrawMarkerfunçãoSimMarker exibido nos pontos interativos. Sobrescreva para mudar o visual
CustomHelpNotificationfunçãoSimNotificação de ajuda (“pressione E”). Sobrescreva para usar o seu sistema
CustomNotificationfunçãoSimNotificação normal. Sobrescreva para usar o seu sistema

Aplicativos

Arquivo: app_config.lua.

CampoTipoObrigatórioDescrição
AppConfig.Market.delayBetweenEachPostnúmero (s)SimCooldown entre anúncios. Padrão: 600
AppConfig.Market.maxPostsnúmeroSimMáximo de anúncios ativos por jogador. Padrão: 5
AppConfig.Market.timeBeforeAutomaticDeletionnúmero (s)SimTempo até o anúncio ser apagado do banco. Padrão: 14 dias
AppConfig.Mail.domainstringSimDomínio dos e-mails. Padrão neste fork: @mriqbox.com
AppConfig.AddresseslistaSimEndereços acessíveis pelo console. Padrão: chat.incognito.net e selldata.com
AppConfig.ThemeslistaSimTemas de cor do sistema. Cada tema define --main-color, --lighter-color, --darker-color, --darkest-color, --app-minimize-color e --app-exit-color. O jogador escolhe pelo app Themes

Como abrir um computador

Há três caminhos, e eles funcionam juntos:

  1. Item — usar o item de Config.UseItem (padrão laptop). Abre um laptop. Com Config.LaptopInVehicle = true, funciona também dentro do veículo.
  2. Prop no mundo — chegar perto de um dos props de Config.UseProps e interagir (target, se Config.TargetSystem = true; senão, marker + tecla).
  3. Posição livre — chegar a uma das Config.UsablePositions. Ali qualquer jogador abre um computador sem precisar de item.

Cada computador ligado recebe um IP na rede interna do recurso. Laptops têm o IP removido ao fechar; computadores fixos apenas ficam marcados como offline — é isso que permite ao netscan e ao ip-tracer encontrarem máquinas de outros jogadores.


Aplicativos

AppDescrição
ConsolePrompt de comando. É por onde passa a rede, os endereços e o data heist
MailCriação de conta, envio, resposta e leitura de e-mails. O endereço é usuario + AppConfig.Mail.domain
MarketAnúncios classificados. Limitado por maxPosts e delayBetweenEachPost; anúncios expiram após timeBeforeAutomaticDeletion
AddressesLista dos endereços de AppConfig.Addresses
InformationsDados da máquina, incluindo o IP atual
ThemesTroca de tema entre os definidos em AppConfig.Themes
BrowserContainer onde os endereços são renderizados

Console — comandos

Digitados dentro do app Console, não no chat do jogo. O console tem autocomplete com Tab e histórico com as setas.

ComandoDescrição
helpLista os comandos disponíveis
versionVersão do sistema
clearLimpa a tela
exitFecha o console
shutdownDesliga o computador
start <app>Abre um aplicativo
taskkill <app>Fecha um aplicativo
netscanLista os IPs ativos na rede
ip-tracer -ip <ip>Localiza a máquina de um IP. Devolve DISCONNECTED se o IP não estiver online
connect <endereço>Acessa um endereço de AppConfig.Addresses
detect -ipData heist. Detecta o servidor alvo se você estiver dentro de uma área configurada
scan -ports <ip>Data heist. Descobre a porta aberta do alvo
infiltrate -ip <ip> -port <porta>Data heist. Invade o servidor
breach -ip <ip> -port <porta>Data heist. Extrai o dump e devolve o caminho de rede do arquivo

Data Heist

Roubo de dados feito inteiramente pelo console, dentro das áreas de Config.DataHeists.Areas (por padrão, as cinco agências Fleeca e o estacionamento da Arcadius Tower).

Fluxo: detect -ip para achar o alvo, scan -ports para descobrir a porta, infiltrate para entrar e breach para gerar o dump. O breach devolve um caminho de rede único (algo como //breach-temp1234/breached/data/dump-5678). Esse caminho é depois vendido no endereço selldata.com, que paga um valor sorteado entre Config.DataHeists.Reward[1] e [2].

Cada assalto disparado envia o alerta ccmp:dataHeistCall com o GPS do jogador para todos os jogadores online cujo job esteja em Config.DataHeists.JobsToCall.

O servidor valida a distância do jogador até o centro da área em toda etapa, e o caminho de rede gerado só pode ser reclamado uma vez — e apenas na área em que foi criado. O cooldown é controlado por Config.DataHeists.Delay, por área ou global conforme TypeOfDelay.


Endereços

Endereços são “sites” acessíveis pelo console com connect <endereço>. Vêm dois:

EndereçoO que faz
chat.incognito.netChat anônimo entre todos os jogadores conectados ao endereço. Cada um escolhe um username ao entrar
selldata.comOnde os dumps do data heist são vendidos

Cada endereço é composto por três arquivos com o mesmo nome: client/addresses/<endereço>.lua, server/addresses/<endereço>.lua e nui/addresses/<endereço>/ (com app.js e app.css). Adicionar um endereço novo significa criar esses arquivos e listar o nome em AppConfig.Addresses.


Integrações

ox_target / qb-target

Com Config.TargetSystem = true, os props de Config.UseProps recebem uma opção de target. O recurso é escolhido em Config.TargetType ("ox" ou "qb"). Com TargetSystem = false, nenhum dos dois é necessário: o recurso desenha o marker de CustomDrawMarker e checa a distância do jogador.

Framework (QBCore / ESX)

O server/main.lua normaliza as funções dos dois frameworks (RegisterServerCallback, GetPlayerFromId, RegisterUsableItem, GetPlayers), então o resto do código é agnóstico. Se o carregamento falhar, o recurso imprime um erro no console pedindo para checar Config.Framework e Config.FrameworkResourceName — quase sempre é ordem de start no server.cfg.


Entrypoints para outros recursos

Dois exports, do lado cliente:

-- Retorna true se o jogador está com um computador aberto.
local open = exports.cuchi_computer:isComputerOpen()
 
-- Retorna true se o computador aberto é um laptop (item), false se é um prop fixo.
local laptop = exports.cuchi_computer:isComputerALaptop()

Evento de cliente

-- Abre a interface. É o mesmo evento disparado pelo item usável.
TriggerClientEvent('cuchi_computer:useItem', source)

Localização

O idioma é definido por Config.Locale no config.lua (não usa convar):

Config.Locale = "PT" -- EN/FR/ES/DA/DE/PT

As traduções ficam duplicadas em dois lugares, porque a UI é NUI pura:

  • locales/lua/<idioma>.lua — textos do lado do jogo (notificações, interações)
  • locales/ui/<idioma>.js — textos da interface e do console

Idiomas disponíveis: pt, en, fr, es, da, de. Para adicionar um idioma, crie os dois arquivos e registre-os em locales/main.lua e locales/main.js.


Estrutura de arquivos

cuchi_computer/
├── client/
│   ├── main.lua                       — props, zonas, markers, target, alerta de data heist
│   ├── nui.lua                        — abertura/fechamento da UI, callbacks NUI, exports
│   ├── overrides.lua                  — enfileira SendNUIMessage até a NUI estar pronta
│   └── addresses/
│       └── chat.incognito.net.lua     — lado cliente do chat anônimo
├── server/
│   ├── main.lua                       — bridge do framework, item usável, callbacks de IP e data heist
│   ├── applications.lua               — mercado e e-mail (queries do oxmysql)
│   ├── fakeIPs.lua                    — registro, consulta e remoção dos IPs da rede
│   ├── version.lua                    — checagem de versão
│   └── addresses/
│       └── chat.incognito.net.lua     — lado servidor do chat anônimo
├── shared/
│   └── functions.lua                  — helpers compartilhados
├── nui/
│   ├── index.html                     — shell do sistema operacional
│   ├── style.css                      — estilos (CSS puro, sem framework)
│   ├── scripts/
│   │   ├── script.js                  — janelas, apps, console
│   │   └── configs/
│   │       ├── applications.js        — definição dos apps (código HTML e tamanho de cada janela)
│   │       └── commands.js            — definição dos comandos do console
│   ├── addresses/
│   │   ├── chat.incognito.net/        — app.js e app.css do chat
│   │   └── selldata.com/              — app.js e app.css da venda de dumps
│   └── assets/                        — imagens dos apps e sons (boot, mensagem)
├── locales/
│   ├── main.lua / main.js             — carregadores de locale
│   ├── lua/                           — pt, en, fr, es, da, de (textos do jogo)
│   └── ui/                            — pt, en, fr, es, da, de (textos da interface)
├── assets/screen.gif                  — animação da tela (256x256, 1:1)
├── config.lua                         — framework, locale, item, props, target, data heist
├── app_config.lua                     — mercado, e-mail, endereços e temas
├── tables.sql                         — computers_market, computers_mail_accounts, computers_mail_mails
└── fxmanifest.lua