{"id":162272,"date":"2024-10-11T19:50:33","date_gmt":"2024-10-11T17:50:33","guid":{"rendered":"https:\/\/hifivem.com\/?p=162272"},"modified":"2026-08-10T07:53:30","modified_gmt":"2026-08-10T05:53:30","slug":"linguagens-de-codificacao-fivem","status":"publish","type":"post","link":"https:\/\/rpcrate.com\/pt\/fivem-coding-languages\/","title":{"rendered":"Linguagens de Programa\u00e7\u00e3o FiveM: Lua, JavaScript e C# Comparadas"},"content":{"rendered":"<p><strong>O FiveM oferece suporte oficial a Lua, JavaScript e C#. Escolha o ambiente de execu\u00e7\u00e3o que melhor se adapta \u00e0 sua estrutura, habilidades da equipe e bibliotecas necess\u00e1rias \u2014 n\u00e3o uma suposta classifica\u00e7\u00e3o de desempenho universal.<\/strong> Todos os tr\u00eas podem chamar nativos do FiveM, lidar com eventos e expor APIs de recursos. As diferen\u00e7as pr\u00e1ticas s\u00e3o o limite de ambiente de execu\u00e7\u00e3o, o ecossistema de pacotes, o fluxo de trabalho de constru\u00e7\u00e3o e o c\u00f3digo j\u00e1 usado por suas depend\u00eancias.<\/p>\n<p>A configura\u00e7\u00e3o e os exemplos de c\u00f3digo aqui s\u00e3o voltados ao FiveM para GTA V Legacy. O Enhanced tem regras diferentes de runtime e de compatibilidade; verifique <a href=\"https:\/\/docs.fivem.net\/docs\/developers\/legacy-vs-enhanced\/\">as altera\u00e7\u00f5es de Legacy para Enhanced do Cfx.re<\/a> antes de aplic\u00e1-las a um servidor Enhanced.<\/p>\n<h2 id=\"fivem-language-comparison\">Compara\u00e7\u00e3o de linguagens FiveM<\/h2>\n<div aria-label=\"Tabela com rolagem horizontal\" class=\"fmx-guide-table\" role=\"region\" tabindex=\"0\">\n<table>\n<thead>\n<tr>\n<th>Ambiente de execu\u00e7\u00e3o<\/th>\n<th>Boa op\u00e7\u00e3o<\/th>\n<th>Limite importante<\/th>\n<th>Fluxo de trabalho t\u00edpico<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Lua<\/td>\n<td>Estruturas Lua existentes, recursos compactos e exemplos diretos FiveM<\/td>\n<td>CfxLua \u00e9 um ambiente de execu\u00e7\u00e3o Lua 5.4 modificado, n\u00e3o uma instala\u00e7\u00e3o arbitr\u00e1ria do sistema Lua<\/td>\n<td>Edite os arquivos de origem e carregue-os atrav\u00e9s do manifesto de recursos<\/td>\n<\/tr>\n<tr>\n<td>JavaScript<\/td>\n<td>Equipes usando ferramentas JavaScript\/TypeScript e npm<\/td>\n<td>Scripts de cliente n\u00e3o recebem APIs de navegador ou Node.js; scripts de servidor usam o ambiente de execu\u00e7\u00e3o Node do FiveM<\/td>\n<td>Execute o c\u00f3digo-fonte diretamente ou compile\/empacote TypeScript em JavaScript listado no manifesto<\/td>\n<\/tr>\n<tr>\n<td>C#<\/td>\n<td>Equipes .NET, c\u00f3digo de dom\u00ednio tipado e projetos compilados<\/td>\n<td>O recurso deve enviar os assemblies e arquivos esperados pelo ambiente de execu\u00e7\u00e3o Cfx.re<\/td>\n<td>Crie a partir de um modelo Cfx.re e, em seguida, implante a sa\u00edda da compila\u00e7\u00e3o<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2 id=\"lua-the-direct-framework-path\">Lua: o caminho direto do framework<\/h2>\n<p>O Cfx.re documenta <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/runtimes\/lua\/\" rel=\"nofollow noopener\">CfxLua como um ambiente de execu\u00e7\u00e3o Lua 5.4 modificado<\/a>. Isso importa quando voc\u00ea compara o c\u00f3digo FiveM com tutoriais Lua mais antigos: os recursos da linguagem e o comportamento do ambiente de execu\u00e7\u00e3o devem ser verificados em rela\u00e7\u00e3o ao CfxLua, n\u00e3o inferidos do pacote do sistema operacional de um servidor.<\/p>\n<p>Lua \u00e9 geralmente a escolha menos disruptiva quando o framework e os recursos vizinhos j\u00e1 est\u00e3o escritos em Lua. Voc\u00ea pode manter eventos, exporta\u00e7\u00f5es e configura\u00e7\u00e3o compartilhada na mesma linguagem e evitar adicionar uma etapa de compila\u00e7\u00e3o apenas por estilo. Um pequeno manifesto pode listar scripts separados para cliente, servidor e compartilhados. Mantenha segredos apenas do servidor e verifica\u00e7\u00f5es de autoridade fora dos arquivos do cliente, mesmo quando ambos os lados usam Lua.<\/p>\n<p>A sintaxe curta facilita a leitura dos manipuladores de eventos, mas n\u00e3o substitui o design da interface. Documente cada carga \u00fatil de evento, valide os valores no servidor e evite tratar um evento do cliente como prova de que dinheiro, invent\u00e1rio ou permiss\u00f5es s\u00e3o v\u00e1lidos.<\/p>\n<h2 id=\"javascript-and-typescript-know-which-side-is-running\">JavaScript e TypeScript: saiba qual lado est\u00e1 sendo executado<\/h2>\n<p class=\"translation-block\">O <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/runtimes\/javascript\/\" rel=\"nofollow noopener\">guia oficial do ambiente de execu\u00e7\u00e3o JavaScript<\/a> descreve o suporte a ES2017 e uma distin\u00e7\u00e3o essencial entre cliente e servidor. Scripts do cliente executam no ambiente do cliente FiveM e n\u00e3o t\u00eam APIs de navegador nem de Node.js. Scripts do servidor usam um ambiente Node.js personalizado. No ambiente Legacy, o padr\u00e3o documentado do servidor \u00e9 Node.js 16; um recurso pode selecionar Node.js 22 com <code>node_version '22'<\/code> em <code>fxmanifest.lua<\/code>.<\/p>\n<p class=\"translation-block\">N\u00e3o presuma que um pacote que funciona em um projeto Node comum tamb\u00e9m funciona em um script do cliente FiveM. Mantenha acesso ao sistema de arquivos, banco de dados e depend\u00eancias npm do servidor no lado do servidor. Para defini\u00e7\u00f5es de editor e TypeScript, a Cfx.re publica os pacotes <code>@citizenfx\/client<\/code> e <code>@citizenfx\/server<\/code>. Eles melhoram a verifica\u00e7\u00e3o de tipos, mas n\u00e3o fornecem APIs ausentes no ambiente de execu\u00e7\u00e3o escolhido.<\/p>\n<p>FiveM tamb\u00e9m documenta restri\u00e7\u00f5es de afinidade de thread para algumas chamadas nativas do lado do servidor. Quando o c\u00f3digo Node ass\u00edncrono precisa retornar ao thread principal do jogo, siga a documenta\u00e7\u00e3o do ambiente de execu\u00e7\u00e3o e use <code data-no-translation=\"\" translate=\"no\">setImmediate<\/code> , onde for necess\u00e1rio. Teste o JavaScript compilado que voc\u00ea realmente implanta, incluindo mapas de origem e ordem de inicializa\u00e7\u00e3o, em vez de apenas a fonte TypeScript.<\/p>\n<h2 id=\"c-use-the-supported-project-shape\">C#: use o formato de projeto suportado<\/h2>\n<p class=\"translation-block\">A <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/runtimes\/csharp\/\" rel=\"nofollow noopener\">documenta\u00e7\u00e3o do ambiente de execu\u00e7\u00e3o C#<\/a> fornece modelos de projeto e orienta\u00e7\u00f5es de compila\u00e7\u00e3o atuais. Comece por ela, em vez de copiar uma estrutura antiga de assemblies de um aplicativo .NET sem rela\u00e7\u00e3o com o seu projeto. Um recurso C# normalmente tem um projeto que referencia os assemblies CitizenFX compat\u00edveis, compila seu c\u00f3digo e coloca os arquivos resultantes onde o manifesto pode carreg\u00e1-los.<\/p>\n<p>C# pode ser uma \u00f3tima op\u00e7\u00e3o quando a equipe j\u00e1 usa tipos, ferramentas e pr\u00e1ticas de teste .NET. A desvantagem \u00e9 operacional: contribuidores e CI precisam do SDK e do comando de constru\u00e7\u00e3o corretos, e o artefato implantado deve permanecer sincronizado com sua fonte. Registre o modelo, a estrutura de destino e o processo de lan\u00e7amento no reposit\u00f3rio para que uma atualiza\u00e7\u00e3o do servidor seja reproduz\u00edvel.<\/p>\n<h2 id=\"the-shared-model-manifests-natives-events-and-exports\">O modelo compartilhado: manifestos, nativos, eventos e exporta\u00e7\u00f5es<\/h2>\n<p>A escolha da linguagem n\u00e3o altera o contrato do recurso. Cada recurso precisa de um <code data-no-translation=\"\" translate=\"no\">fxmanifest.lua<\/code> que declara metadados e os arquivos a serem carregados. O c\u00f3digo do cliente \u00e9 executado para jogadores conectados; o c\u00f3digo do servidor \u00e9 executado sob o FXServer. Arquivos compartilhados s\u00e3o entregues a ambos os lados, portanto, n\u00e3o devem conter credenciais ou decis\u00f5es de confian\u00e7a apenas do servidor.<\/p>\n<ul>\n<li><strong>Nativos<\/strong> exp\u00f5em fun\u00e7\u00f5es de jogo e plataforma. Verifique a refer\u00eancia nativa atual e se um nativo \u00e9 do lado do cliente ou do servidor.<\/li>\n<li><strong>Eventos<\/strong> movem mensagens dentro ou atrav\u00e9s do limite cliente\/servidor. Trate a entrada de rede como n\u00e3o confi\u00e1vel e valide-a no lado do servidor.<\/li>\n<li><strong>Exports<\/strong> publicam fun\u00e7\u00f5es para outros recursos. Mantenha nomes, par\u00e2metros, valores de retorno e depend\u00eancias de inicializa\u00e7\u00e3o documentados.<\/li>\n<li><strong>Depend\u00eancias<\/strong> pertencem ao manifesto ou \u00e0 ordem de inicializa\u00e7\u00e3o do servidor quando outro recurso deve estar dispon\u00edvel primeiro.<\/li>\n<\/ul>\n<p>Um servidor de linguagem mista \u00e9 normal. O limite est\u00e1vel \u00e9 o evento ou exporta\u00e7\u00e3o documentado, n\u00e3o a linguagem de implementa\u00e7\u00e3o por tr\u00e1s dele. Isso torna poss\u00edvel substituir um recurso sem reescrever toda a pilha.<\/p>\n<h2 id=\"how-to-choose-for-a-real-project\">Como escolher para um projeto real<\/h2>\n<ol>\n<li><strong>Comece com o framework.<\/strong> Se o servidor depende de um ESX, QBCore, Qbox ou recurso aut\u00f4nomo estabelecido, use seus pontos de extens\u00e3o e conven\u00e7\u00f5es de linguagem suportados.<\/li>\n<li><strong>Listar bibliotecas necess\u00e1rias.<\/strong> Confirme que cada driver de banco de dados, UI bridge e pacote \u00e9 compat\u00edvel com o ambiente de execu\u00e7\u00e3o do cliente ou servidor onde ser\u00e1 executado.<\/li>\n<li><strong>Considere as habilidades da equipe.<\/strong> Prefira a linguagem que os colaboradores podem revisar, testar e manter depois que o autor original sair.<\/li>\n<li><strong>Defina a compila\u00e7\u00e3o.<\/strong> Lua pode ser enviado diretamente; TypeScript e C# geralmente precisam de compila\u00e7\u00e3o reproduz\u00edvel e um diret\u00f3rio de sa\u00edda claro.<\/li>\n<li><strong>Prototipagem do limite.<\/strong> Prove uma chamada nativa, um evento de rede validado pelo servidor, uma exporta\u00e7\u00e3o e um rein\u00edcio de depend\u00eancia antes de construir o recurso completo.<\/li>\n<\/ol>\n<h2 id=\"minimal-verification-checklist\">Lista m\u00ednima de verifica\u00e7\u00e3o<\/h2>\n<ul>\n<li>Inicie o recurso em um servidor de teste e inspecione os logs do servidor e do cliente F8.<\/li>\n<li>Reconecte um cliente limpo e reinicie o recurso para expor arquivos ausentes ou suposi\u00e7\u00f5es de ordena\u00e7\u00e3o.<\/li>\n<li>Envie cargas inv\u00e1lidas e n\u00e3o autorizadas e confirme que o servidor as rejeita.<\/li>\n<li>Verifique a vers\u00e3o documentada do Node ou a sa\u00edda de compila\u00e7\u00e3o .NET no host de implanta\u00e7\u00e3o real.<\/li>\n<li>Fixe as vers\u00f5es das depend\u00eancias e mantenha uma c\u00f3pia de revers\u00e3o do \u00faltimo recurso funcional.<\/li>\n<\/ul>\n<p>N\u00e3o h\u00e1 raz\u00e3o baseada em evid\u00eancias para coroar uma das tr\u00eas linguagens de programa\u00e7\u00e3o FiveM como universalmente a mais r\u00e1pida ou mais popular para cada recurso. Selecione Lua, JavaScript\/TypeScript ou C# a partir dos fatos de ambiente de execu\u00e7\u00e3o suportados, da estrutura circundante e do custo de manuten\u00e7\u00e3o que sua equipe pode realmente suportar.<\/p>\n<h2 id=\"enhanced-runtime-differences\">Diferen\u00e7as do ambiente de execu\u00e7\u00e3o no Enhanced<\/h2>\n<p>Enhanced altera o ambiente de execu\u00e7\u00e3o JavaScript e C# e alguns comportamentos da plataforma. Use a documenta\u00e7\u00e3o para a edi\u00e7\u00e3o exata do cliente\/servidor em vez de aplicar suposi\u00e7\u00f5es do Legacy Node ou Mono a ela. Reconstrua e teste as depend\u00eancias contra esse ambiente.<\/p>","protected":false},"excerpt":{"rendered":"<p>O FiveM oferece suporte oficial a Lua, JavaScript e C#. Escolha o ambiente de execu\u00e7\u00e3o que melhor se adapta \u00e0 sua estrutura, habilidades da equipe e bibliotecas necess\u00e1rias \u2014 n\u00e3o uma suposta classifica\u00e7\u00e3o de desempenho universal. Todos os tr\u00eas podem chamar nativos do FiveM, lidar com eventos e expor APIs de recursos. As diferen\u00e7as pr\u00e1ticas s\u00e3o o limite de ambiente de execu\u00e7\u00e3o, o ecossistema de pacotes, o fluxo de trabalho de constru\u00e7\u00e3o e o c\u00f3digo j\u00e1 usado por suas depend\u00eancias.<\/p>","protected":false},"author":1,"featured_media":162273,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2340,1899],"tags":[3001],"class_list":["post-162272","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lua-scripting","category-tutorials","tag-fivem-script"],"_links":{"self":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts\/162272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/comments?post=162272"}],"version-history":[{"count":1,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts\/162272\/revisions"}],"predecessor-version":[{"id":212551,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/posts\/162272\/revisions\/212551"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/media\/162273"}],"wp:attachment":[{"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/media?parent=162272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/categories?post=162272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpcrate.com\/pt\/wp-json\/wp\/v2\/tags?post=162272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}