À medida que os projetos se tornam complexos, torna-se importante pensar como os scripts são organizados.Boas práticas de organização podem garantir que o código não seja duplicado entre scripts ou se torne difícil de gerenciar.
Uma maneira melhor de organizar e reutilizar código é com scripts de módulo , um tipo único de script que armazena um conjunto de funções e variáveis projetadas para atender a um propósito compartilhado, como gerenciar o dinheiro do jogador ou inimigos.Código dentro de scripts de módulo pode ser usado por outros scripts.Dessa forma, você pode chamar a mesma função que dá moedas de vários scripts diferentes sempre que um jogador termina uma missão ou encontra uma coleta.
Ao armazenar código comumente usado em scripts de módulo, torna mais fácil manter e organizar o código, pois as alterações só precisam ser feitas em um script de módulo, ao invés de atualizar vários scripts.
Bases de script de módulo
Os scripts de módulo são, na verdade, seu próprio objeto separado em comparação com objetos de script.No Roblox, os scripts de módulo podem ser denotados com um ícone roxo púrpura .
Criar um script de módulo
ModuleScripts são comumente colocados em Serviço de Script de Servidor quando usados por scripts do lado do servidor e ReplicatedStorage quando usados por scripts locais do lado do cliente (como interações de GUI).
- Crie um ModuleScript em Serviço de Script de Servidor .

Estrutura de scripts de módulo
Ao ser criado, cada script de módulo começa com o código abaixo:
local Module = {}return Module
A linha local Module = {} cria uma tabela ou contêiner de código onde as funções e variáveis compartilhadas do módulo podem ser armazenadas.Esta tabela deve ser renomeada para o propósito do módulo, como RewardManager ou ParticleController.Em oposição a outras variáveis que são camel case ( myVariable ), as tabelas de módulo são recomendadas para usar o caso pascal e começar capitalizado ( MyModule ).
local RewardManager = {}return RewardManager
Assim, outros scripts podem usar funções ou variáveis não locais de um módulo, cada módulo termina com return MyModule.Sempre que outro script tenta obter código do módulo, retorne o código de acesso desse script armazenado dentro da tabela do módulo.
Adicionar aos scripts de módulo
Para adicionar uma função ou variável ao módulo que possa ser usada em outro script, digite o nome da tabela do módulo, seguido por um ponto, e o nome da função ou variável, como em TestModule.myVariable.Usar o operador ponto é outra maneira de adicionar código a uma tabela, permitindo que outros scripts acessem esse código sempre que a tabela do módulo for retornada.
local TestModule = {}
-- Adiciona uma variável à tabela 'TestModule'
TestModule.myVariable = 100
-- Adiciona uma função à tabela 'TestModule'
function TestModule.doTask(player)
-- códigode espaço reservado
end
return TestModule
Alcance em scripts de módulo
Para uma função ou variável de módulo ser usada em um script externo, não digite local .
Digitar local na frente de variáveis e funções significa que eles são apenas utilizáveis pelo script.Embora essa seja uma boa prática para a maioria dos scripts para reduzir erros e solucionar problemas, você não pode tornar as funções e variáveis de script de módulo locais.
Qualquer código usado apenas pelo script de módulo deve ainda incluir local .Por instância, o código abaixo inclui a variável local difficultyModifier , que só pode ser usada no script do módulo, e a função getCoinReward() , que pode ser usada em scripts fora do módulo.
local RewardManager = {}
-- Utilizável apenas no script do módulo
local rewardCoins = 50
-- Utilizável apenas no script do módulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilizável em outros scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Use módulos em outros scripts
Por si só, um script de módulo não pode executar código - ele precisa ser carregado em outro script usando a palavra-chave require() .A função require() aceita um argumento, a localização do script do módulo no Explorador.
Para usar um módulo, em um script separado, defina uma variável igual a require(moduleScript).
local MyModule = require(ServerStorage.ModuleScript)
Agora, a variável MyModule contém a tabela de módulos criada naquele script de módulo.Para usar funções e variáveis daquela tabela, digite o nome da variável, seguido por um ponto, e o nome exato do que usar naquele script de módulo, como MyModule.myFunction().Quando o script é executado e chega a essa linha, ele terá acesso àquela função ou variável específica armazenada na tabela de módulos.
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Exemplo de Gerenciador de Recompensas
ModuleScript - Gerente de Recompensas
local RewardManager = {}
-- Utilizável apenas no script do módulo
local rewardCoins = 50
-- Utilizável apenas no script do módulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilizável em outros scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- Carregar script do módulolocal RewardManager = require(ServerStorage.RewardManager)--Função de chamada do script do módulolocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Solução geral de problemas
Algumas das dicas aqui abordam problemas comuns ao trabalhar com scripts de módulo.Tenha em mente que os scripts de módulo podem ser um tópico complicado com mais nuance.Para mais detalhes, veja este guia mais técnico sobre Scripts de Módulo. Problema: Obtenha uma mensagem de erro que inclua: "Infinite yield possible" ou "not a valid member" .
Verifique a ortografia do script do módulo onde ele é carregado.require() deve incluir o caminho e a ortografia exatos do script do módulo, que pode ser chamado de diferente da tabela do módulo. Problema: Obtenha uma mensagem de erro que inclua: "attempt to index global" .
Em qualquer script usando um script de módulo, certifique-se de que ele está carregado usando a função require().Caso não, esse script não pode usar funções e variáveis do script do módulo.
Sumário
Scripts de módulo no Roblox são um método que os codificadores usam para organizar e reutilizar código.Um script de módulo é frequentemente armazenado no ServerStorage (ou ReplicatedStorage para interações baseadas no cliente).A partir daí, outros scripts são capazes de chamar funções e variáveis armazenadas naquele script de módulo.
Por instância, um jogo pode conceder pontos aos jogadores por coletar objetos.Um script de módulo pode lidar com código para dar pontos.Então, scripts para diferentes tipos de objetos podem apenas chamar a função de script do módulo.Isso reduz a necessidade de reutilizar código entre scripts, tornando o código mais fácil de entender e manter.