Pular para o conteúdo

10% off com ROLEPLAY10

RPScripts

Testador de scripts FiveM

Envie um recurso e veja o que está errado antes de ele chegar ao seu servidor: manifesto, Lua, API do framework e segurança de eventos, além de um sandbox CfxLua que executa seus eventos, threads, exports e callbacks de NUI. Seu código fica no seu navegador.

Solte aqui o ZIP de um recurso

Uma pasta de recurso FiveM em .zip (máx. 5 MB), um único arquivo .lua ou código colado. Nada é enviado: a análise e a simulação rodam nesta aba.

As verificações estáticas e a simulação CfxLua rodam localmente em um Web Worker. Seus arquivos só são enviados à RPScripts se você escolher “Abrir no RPScripts AI”. Resultados simulados não provam que um recurso funciona em um FXServer real ou no GTA V.

O que o testador verifica

  • Sintaxe Lua, incluindo as extensões CfxLua do FiveM (vetores, atribuição composta, navegação segura, hashes com crase)
  • fxmanifest.lua: fx_version, game, scripts e globs que não correspondem a nenhum arquivo, arquivos NUI que não são enviados, lua54, inicialização do ox_lib, dependências
  • Chamadas de QBCore, Qbox, ESX, ox_lib, ox_inventory e ox_target contra versões upstream fixadas, incluindo o lado cliente/servidor
  • Natives que não existem ou existem só do outro lado, segundo as tipagens publicadas pela Cfx.re
  • Eventos de rede tratados sem RegisterNetEvent, callbacks nunca registrados, exports próprios nunca definidos
  • Eventos de servidor que confiam em valores do cliente para dinheiro, itens ou empregos, ações privilegiadas sem checagem de permissão, source usado depois de Wait
  • Loops infinitos sem Wait e handlers de início/parada que rodam para todo recurso

O que roda, o que é simulado e o que precisa de um servidor real

Roda de verdade: seu Lua em CfxLua 5.4 compilado para WebAssembly, com o scheduler do FiveM (CreateThread, Wait, SetTimeout), eventos, msgpack e json, e início e parada de recursos.

Simulado pela RPScripts: um servidor e um cliente por jogador, TriggerServerEvent/TriggerClientEvent com source, exports entre recursos, state bags, callbacks de NUI, comandos com aces, KVP de recurso e test doubles de QBCore, Qbox, ESX, ox_lib, ox_inventory, ox_target, qb-target e oxmysql.

Precisa de um servidor real: natives do jogo (entidades, veículos, peds, mundo), OneSync, o banco de dados, dados reais do framework e scripts em JavaScript ou C#. Quando o código chama esses itens, o resultado indica “parcial” e lista as chamadas.

Exemplos práticos

Um evento de compra que confia no cliente

RegisterNetEvent('shop:buy', function(item, price)
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player or not Items[item] then return end
    if Player.Functions.RemoveMoney('cash', price, 'shop') then
        Player.Functions.AddItem(item, 1)
        TriggerClientEvent('shop:bought', src, item)
    end
end)

O preço vem do cliente, então qualquer jogador pode comprar de graça ou enviar um reembolso de qualquer valor. O analisador sinaliza o padrão (LAB-SEC-001); em seguida, o cenário de payloads hostis envia eventos forjados como um jogador sem emprego e mostra o dinheiro que o servidor entregou.

Correção: buscar o preço no servidor (Items[item].price) e ignorar o que o cliente envia.

Um evento que o FiveM descarta em silêncio

-- client.lua
TriggerServerEvent('shop:sell', 'bread')

-- server.lua
AddEventHandler('shop:sell', function(item) … end) -- LAB-EVT-001

O cliente o dispara com TriggerServerEvent, mas o servidor só usa AddEventHandler. O FiveM o descarta com “was not safe for net”; a simulação mostra a mesma linha no trace, e o LAB-EVT-001 aponta para o handler.

Um loop que congela o cliente

CreateThread(function()
    while true do -- LAB-SCH-001
        if open then DisableControlAction(0, 1, true) end
    end
end)

while true do … end sem Wait nunca cede o controle. O LAB-SCH-001 marca o loop e, no sandbox, o watchdog para a thread com “missing Wait in a loop?” em vez de congelar o seu navegador.

Perguntas frequentes

Preciso do GTA V ou de um servidor FiveM para testar um script?
Não. O testador analisa e verifica o recurso e executa o Lua dele em um sandbox CfxLua no seu navegador. Para tudo que depende do mundo do jogo ou de um banco de dados real, o relatório diz exatamente o que ainda precisa de um servidor real.
Meu código é enviado?
Não. A análise e a simulação rodam em um Web Worker no seu navegador. Só “Abrir no RPScripts AI” envia os arquivos para a sua conta RPScripts, e apenas depois de você entrar.
Um teste aprovado significa que o script funciona no meu servidor?
Significa que o comportamento simulado foi aprovado. É uma evidência forte para a ligação de eventos, as checagens de segurança e os erros de Lua, mas não uma garantia para natives do jogo, OneSync ou a versão exata do seu framework.
Quais frameworks são suportados?
QBCore, Qbox e ESX, além de ox_lib, ox_inventory, ox_target, qb-target e oxmysql. As verificações estáticas usam as APIs upstream fixadas deles; o sandbox carrega test doubles claramente identificados que listam o que implementam.
Ele consegue corrigir os erros?
Abra o recurso no RPScripts AI: ele recebe os achados e os resultados dos testes, propõe uma alteração que você pode revisar como diff, salva como nova versão e o Lab roda as verificações e os cenários de novo.

Corrija o que o testador encontrou

Abra o recurso no RPScripts AI para corrigir os achados com um diff revisável, rodar os testes de novo e baixar o resultado, ou verifique um manifesto com o gerador de fxmanifest.

O sandbox executa o CfxLua do FiveM por meio do FiveLab (MIT), fixado em uma revisão auditada.

Mais ferramentas gratuitas

Todas as ferramentas gratuitas →