Scripting en Lua y Watchdog de Seguridad
CraftingEngine integra un entorno de ejecución de LuaJ 3.0.1 seguro y de alto rendimiento que permite a administradores y creadores de contenido programar condiciones dinámicas, fórmulas matemáticas procedimentales y acciones de etapa avanzadas.
1. Arquitectura de Seguridad y Sandbox
Para proteger el rendimiento del servidor, la ejecución de Lua está estrictamente aislada:
- Sin Acceso al Sistema Operativo: Se bloquean las funciones de
io.*,os.executey manipulación de archivos. - Cuota de Instrucciones: La ejecución está limitada por
scripting.max-instructions: 10000, evitando bucles infinitos (while true do). - Watchdog de Tiempo Real: Cualquier script que sobrepase
scripting.execution-timeout-ms: 50es interrumpido de inmediato.
2. Variables de Contexto Disponibles
Cada script ejecutado en el contexto de un crafteo recibe variables globales predefinidas:
-- Datos del jugadorlocal player_name = context.player.namelocal player_uuid = context.player.uuidlocal player_level = context.player.level
-- Variables de estado de la estaciónlocal temp = context.station.get_variable("temperature")local pressure = context.station.get_variable("pressure")
-- Métricas de la etapalocal strikes = context.stage.strikes_count3. Creación de Scripts Reutilizables (presets/scripts/*.lua)
Puedes guardar tus scripts en plugins/CraftingEngine/presets/scripts/:
Ejemplo: Cálculo Dinámico de Enfriamiento (calculate_cooling.lua)
function evaluate(current_temp, ambient_temp, elapsed_seconds) local k = 0.05 -- Constante de enfriamiento local result = ambient_temp + (current_temp - ambient_temp) * math.exp(-k * elapsed_seconds) return math.max(ambient_temp, result)endInvocación desde un Blueprint
stages: - id: "custom_cooling" on_tick: - action: "lua:presets/scripts/calculate_cooling.lua"4. Expresiones Matemáticas en Línea
Para condiciones numéricas simples, CraftingEngine permite evaluar fórmulas matemáticas AST directamente en el YAML:
requirements: conditions: - id: "heat_balance" condition: "math:(station.temperature * 1.5) > (player.level * 10)"Siguientes Pasos
- Guía de API - Registra acciones y condiciones Java personalizadas invocables desde Lua.
- Etapas y Transiciones - Descubre cómo vincular eventos de etapa a scripts.