A medida que los proyectos se vuelven complejos, es importante pensar cómo se organizan los scripts.Las buenas prácticas de organización pueden garantizar que el código no se duplique entre los scripts o se vuelva difícil de gestionar, administrar.
Una mejor manera de organizar y reutilizar el código es con scripts de módulo , un tipo único de script que almacena un conjunto de funciones y variables diseñadas para cumplir con un propósito compartido, como administrar el dinero de los jugadores o enemigos.El código dentro de los scripts de módulo se puede usar por otros scripts.De esa manera, puedes llamar a la misma función que da monedas de múltiples scripts diferentes cada vez que un jugador termina una misión o encuentra una recogida.
Al almacenar código comúnmente utilizado en scripts de módulo, facilita el mantenimiento y la organización del código ya que solo se necesitan hacer cambios a un script de módulo, en lugar de actualizar múltiples scripts.
Base de script de módulo
Los scripts de módulo son en realidad su propio objeto separado en comparación con los objetos de script.En Roblox, los scripts de módulo se pueden denotar con un ícono púrpura .
Crear un guión de script
Los ModuleScripts se colocan comúnmente en ServerScriptService cuando se utilizan por los scripts del lado del servidor y ReplicatedStorage cuando se utilizan por los scripts locales del lado del cliente (como las interacciones de GUI).
- Crea un ModuleScript en ServerScriptService .

Estructura de los scripts de módulo
Cuando se crea, cada guión de módulo comienza con el código siguiente:
local Module = {}return Module
La línea local Module = {} crea una tabla o contenedor de código donde se pueden almacenar las funciones compartidas y las variables del módulo.Esta tabla debería renombrarse al propósito del módulo, como RewardManager o ParticleController.A diferencia de otras variables que son de caso camello ( myVariable ), se recomiendan las tablas de módulo para usar el caso pascal y comenzar con mayúscula ( MyModule ).
local RewardManager = {}return RewardManager
Así que otros scripts pueden usar las funciones o variables no locales de un módulo, cada módulo termina con return MyModule .Cada vez que otro script intenta obtener código del módulo, devuelve ese código de acceso al script almacenado dentro de la tabla del módulo.
Añadir a los scripts de módulo
Para agregar una función o variable al módulo que se pueda usar en otro script, escriba el nombre de la tabla del módulo, seguido de un punto, y el nombre de la función o variable, como en TestModule.myVariable .El uso del operador punto es otra forma de agregar código a una tabla, permitiendo que otros scripts accedan a ese código cada vez que se devuelve la tabla de módulos.
local TestModule = {}
-- Agrega una variable a la tabla 'TestModule'
TestModule.myVariable = 100
-- Añade una función a la tabla 'TestModule'
function TestModule.doTask(player)
-- códigode reemplazo
end
return TestModule
Scope en scripts de módulo
Para que una función o variable de módulo se use en un script externo, no escriba local .
Escribir local delante de variables y funciones significa que solo son útiles por ese script.Aunque esta es una buena práctica para la mayoría de los scripts para reducir errores y solucionar problemas, no puedes hacer que las funciones y variables de script de módulo sean locales.
Cualquier código utilizado solo por ese script de módulo debe seguir incluyendo local .Por instancia, el código a continuación incluye la variable local difficultyModifier , que solo se puede usar en el script de ese módulo, y la función getCoinReward() , que se puede usar en scripts fuera del módulo.
local RewardManager = {}
-- Solo se puede usar en el script del módulo
local rewardCoins = 50
-- Solo se puede usar en el script del módulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilizable en otros scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Usar módulos en otros scripts
Por sí solo, un script de módulo no puede ejecutar código; debe cargarse en otro script usando la palabra clave require().La función require() acepta un argumento, la ubicación del script del módulo en el Explorador.
Para usar un módulo, en un script separado, establece una variable igual a require(moduleScript) .
local MyModule = require(ServerStorage.ModuleScript)
Ahora, la variable MyModule contiene la tabla de módulos creada en ese script de módulo.Para usar funciones y variables de esa tabla, escriba el nombre de la variable, seguido de un punto, y el nombre exacto de lo que usar en ese guión de módulo, como MyModule.myFunction() .Cuando el script se ejecuta y llega a esa línea, accederá a esa función o variable específica almacenada en la tabla de módulos.
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Ejemplo de gestor de recompensas
ModuleScript - Administrador de recompensas
local RewardManager = {}
-- Solo se puede usar en el script del módulo
local rewardCoins = 50
-- Solo se puede usar en el script del módulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilizable en otros scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Guión - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- Cargar guión de scriptlocal RewardManager = require(ServerStorage.RewardManager)--Llamar función desde el guión del scriptlocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Solucionamiento de problemas generales
Algunos de los consejos aquí abordan problemas comunes al trabajar con scripts de módulo.Tenga en cuenta que los scripts de módulo pueden ser un tema complicado con más matices.Para obtener más detalles, consulte esta guía más técnica sobre scripts de módulo. Problema: Obtenga un mensaje de error que incluya: "Infinite yield possible" o "not a valid member" .
Compruebe la ortografía del guión del módulo donde se carga. require() debe incluir el camino y la ortografía exactos del script del módulo, que puede llamarse de manera diferente a la tabla del módulo. Problema: Obtenga un mensaje de error que incluya: "attempt to index global" .
En cualquier script que use un script de módulo, asegúrate de que se cargue usando la función require().Si no, ese script no puede usar funciones y variables del guión del módulo.
Resumen
Guiones de módulo en Roblox son un método que los codificadores utilizan para organizar y reutilizar el código.Un guión de módulo se almacena a menudo en ServerStorage (o ReplicatedStorage para interacciones basadas en el cliente).Desde allí, otros scripts pueden llamar funciones y variables almacenadas en ese guión de módulo.
Por instancia, un juego puede otorgar puntos a los jugadores por recolectar objetos.Un guión de módulo puede manejar código para dar puntos.Entonces, los scripts para diferentes tipos de objetos solo pueden llamar la función de script del módulo.Esto reduce la necesidad de reutilizar el código entre los scripts, lo que hace que el código sea más fácil de entender y mantener.