MOD / Lua API
Tutorial de creación de MODs y API Lua
Aprende a crear MODs de estadísticas, habilidades, gen BUFF, skins y hitboxes. Comprende la gestión, prioridad y límites del sandbox de MODs.
1. Inicio rápido
1.1 ¿Qué es un MOD?
Un MOD es un paquete de contenido creado por jugadores que modifica las estadísticas, habilidades, skins y propiedades de hitbox de las criaturas. El juego incluye dos MODs de ejemplo — DemoCharacterMod y DemoSkinsMod — ubicados en el directorio de MODs del juego (ver ruta arriba). Puedes copiarlos y modificarlos directamente para empezar rápidamente.
1.2 Ubicación del directorio de MODs
| Plataforma | Ruta del directorio Mods |
|---|---|
| Windows (Steam) | El taller de Steam gestiona automáticamente los MODs suscritos |
| Windows (Local) | C:\Users\{Usuario}\AppData\LocalLow\NEXTINDIE Studio\Mesozoic Dawn\Mods\ |
| Linux Server | DirectorioDelJuego\MesozoicDawn_Data\StreamingAssets\Mods\ |
| Android | AlmacenamientoInterno/Android/data/com.../files/Mods/ |
| iOS | AppSandbox/Documents/Mods/ |
1.3 Estructura del directorio de MODs
Mods/
├── DemoCharacterMod/ ← Ejemplo completo (estadísticas+habilidades+hitbox+skin)
│ ├── mod.json ← Manifiesto del MOD
│ ├── preview.jpg ← Imagen de vista previa
│ ├── CharacterAsset/
│ │ └── allo.txt ← Configuración del Alosaurio (los 4 tipos)
│ └── SkinsAsset/
│ └── Crooked mouth.png ← Textura de skin
│
├── DemoSkinsMod/ ← Ejemplo de MOD solo de skins
│ ├── mod.json
│ ├── preview.jpg
│ └── SkinsAsset/
│ ├── allo_deser_allo.txt ← Script de skin
│ └── deser_allo.png ← Textura de skin
│
└── MyFirstMod/ ← Directorio raíz de tu MOD
├── mod.json
└── CharacterAsset/
└── allo.txt 1.4 Crear mod.json
{
"Name": "MyFirstMod",
"Author": "Tu nombre",
"Version": "1.0",
"SupportedVersion": "0.6.*",
"Priority": 0,
"Description": "Mi primer MOD",
"PreviewImagePath": "preview.jpg",
"Tags": "Character"
} | Campo | Obligatorio | Descripción |
|---|---|---|
Name | ✅ | Identificador único del MOD. Se recomienda que coincida con el nombre de la carpeta. |
Author | ✅ | Nombre del autor. |
Version | ✅ | Número de versión del MOD. |
SupportedVersion | ✅ | Versión del juego compatible. Admite comodines * (ej. 0.6.*). |
Priority | ❌ | Prioridad de ejecución (por defecto 0). Valores más altos se ejecutan después (efecto final). |
Description | ❌ | Descripción breve del MOD. |
PreviewImagePath | ❌ | Ruta relativa a la imagen de vista previa (ej. preview.jpg). |
Tags | ❌ | Etiquetas separadas por comas, ej. Character,Skin. |
1.5 La interfaz de MODs en el juego de un vistazo
En la pantalla de inicio, haz clic en Gestión de MODs para abrir la interfaz de MODs. Tiene tres pestañas — MODs locales, Workshop, Administrar MODs — más los botones Crear MOD y Establecer directorio, que cubren todo el recorrido del autor, de la creación a la prueba.
| Pestaña / Botón | Función |
|---|---|
| MODs locales | MODs ya previsualizados en la lista de carga local. Aquí se habilitan/deshabilitan y se eliminan. Lo que el juego carga realmente son los MODs habilitados en esta pestaña. |
| Workshop | Solo Steam. Explora y gestiona los MODs de Workshop a los que estás suscrito (ver, cancelar suscripción), con estado de instalación/descarga. |
| Administrar MODs | Tu banco de trabajo de borradores de MOD. Cada MOD ofrece Previsualizar, Exportar, Editar, Eliminar (y Subir a Workshop en Steam). |
| Crear MOD | Crea un nuevo borrador de MOD, eligiendo una plantilla: En blanco / Ejemplo de skin / Ejemplo de atributos / Ejemplo de genes. |
| Establecer directorio | Apunta a una carpeta externa con permisos de escritura como raíz de MODs, para editar scripts con un editor de texto del PC y sincronizarlos de vuelta al juego. |
1.6 Crea tu MOD (recomendado para principiantes)
El juego incluye una herramienta de creación de MODs — sin crear carpetas a mano:
① Inicia sesión (crear un MOD requiere iniciar sesión; el MOD queda vinculado a tu cuenta).
② Gestión de MODs → clic en Crear MOD.
③ Rellena el nombre (solo letras/números/guión bajo/guión, 1–64 caracteres), autor, versión, versión soportada, descripción, etiquetas, y elige una plantilla.
④ Haz clic en Crear — el sistema genera la estructura del directorio (mod.json más la carpeta de script de ejemplo de la plantilla).
⑤ El MOD aparece entonces en la pestaña Administrar MODs como borrador, aún no en la lista de carga local.
| Plantilla | Qué genera |
|---|---|
| En blanco | Solo mod.json — desde cero. |
| Ejemplo de skin | Esqueleto de script de skin en SkinsAsset/. |
| Ejemplo de atributos | Esqueleto de atributos en CharacterAsset/. |
| Ejemplo de genes | Esqueleto de sobrescritura de genes en GeneBuff/. |
1.7 Editar y previsualizar
① Encuentra tu MOD en Administrar MODs. Si usaste «Establecer directorio», el MOD se sincroniza a esa carpeta externa y puedes abrirlo directo en un editor de texto; si no, edita los scripts Lua (CharacterAsset/*.txt, etc.), PNGs de skin y el preview.jpg dentro de su carpeta en el directorio de MODs del juego.
② Usa el botón Editar de la fila para cambiar versión, versión soportada, descripción y etiquetas (el nombre queda bloqueado).
③ Al terminar, haz clic en Previsualizar para enviar el borrador a la lista de carga de MODs locales.
1.8 Probar en el juego (ciclo de desarrollo del autor)
- Crear: Gestión de MODs → Crear MOD → elige una plantilla → Crear (genera un borrador; ver 1.6).
- Editar: edita los scripts y metadatos en Administrar MODs (ver 1.7).
- Previsualizar: haz clic en Previsualizar para mover el borrador a la lista de carga de MODs locales.
- Habilitar: cambia a MODs locales, confirma que el estado es «Habilitado» (verde) y «Versión soportada» está en verde (rojo significa incompatible con la versión actual del juego — corrige
SupportedVersion). - Probar: entra en un solo jugador o crea una sala — los atributos/habilidades/skins modificados surten efecto de inmediato.
- Iterar: vuelve a Administrar MODs y edita los scripts → crea una sala Host local para actualizar la instantánea de vista previa con el borrador más reciente → vuelve a entrar en la partida para verificar. Después de activar la vista previa sincronizada una vez, no hace falta reiniciar el juego ni volver a activarla.
- Distribuir: cuando estés satisfecho, usa Exportar para generar un archivo
.mody compartirlo; en Steam también puedes Subir a Workshop para publicarlo.
1.9 Modo de vista previa sincronizada (pruebas de desarrollo)
Vista previa sincronizada en Administrar MODs crea una instantánea de ejecución independiente del borrador y la registra en la lista de carga local. El código fuente del autor permanece en el directorio de Administrar MODs; la vista previa sincronizada no publica ni sube el MOD a Workshop.
1.10 Exportar .mod (compartir e instalar)
Exportar empaqueta la copia de trabajo actual de Administrar MODs en un archivo comprimido .mod y abre el selector de ubicación de guardado del sistema. La raíz del paquete es el directorio que contiene mod.json e incluye scripts, imágenes y demás archivos del MOD. Exportar no activa la vista previa, no modifica el borrador, no hace público el MOD ni lo sube a Workshop.
- Autor: en Administrar MODs, pulsa Exportar, guarda el archivo
.modcon el selector del sistema y envíalo a probadores o jugadores. - Destinatario: en la pestaña MODs locales, pulsa Importar MOD, selecciona el
.modrecibido (o un.zipcompatible) y confirma que aparece y está activado en la lista de carga local. - Multijugador: antes de entrar o crear una sala con MOD, todos los participantes deben usar el mismo contenido, versión y estado de activación del MOD. Un paquete exportado no sustituye la publicación en Workshop.
2. MOD de estadísticas de personaje
Crea un archivo .txt en el directorio CharacterAsset/ y define una tabla CharacterAsset para modificar los atributos de las criaturas del juego. Los campos no rellenados conservan los valores originales. A continuación se muestra la configuración completa de allo.txt del DemoCharacterMod incluido en el juego, mostrando todos los campos modificables.
2.1 Ejemplo completo (allo.txt de DemoCharacterMod)
-- Modificar los atributos completos del Alosaurio (*no eliminar los siguientes elementos)
CharacterAsset = {
name = "Alosaurio", -- Nombre del personaje
enable = true, -- Si habilitar el personaje
jump = false, -- Si permitir salto (necesita animación correspondiente)
race = "allo", -- Etiqueta de raza (*obligatorio, clave única de coincidencia)
ropoda = 0, -- Tipo de nido (-1=ninguno, 0=terópodo, 1=saurópodo, 2=ornitisquio)
ropode = 0, -- Tipo de huevo (-1=ninguno, 0=terópodo, 1=saurópodo, 2=ornitisquio)
volume = 2, -- Clase de tamaño 0~5 (ligero→súper)
rank = 7, -- Estrellas 0~12 (nivel S1~SS)
branch = 3, -- Clasificación de familia 0~25
habit = 0, -- Hábito (0=terrestre, 1=hidrófilo, 2=reptil marino, 3=acuático, 4=anfibio, 5=volador)
type = 0, -- Categoría (0=carnívoro, 1=herbívoro, 2=acuático, 3=artrópodo, 4=mamífero, 5=volador)
taste = 0, -- Dieta (0=carnívoro, 1=flores, 2=hojas, 3=omnívoro)
spawn = 0, -- Reproducción (0=ovíparo, 1=vivíparo)
health = 26503.0, -- Puntos de vida
hunger = 12227.0, -- Hambre
water = 3128.0, -- Agua
oxygen = 474.0, -- Oxígeno
stamina = 100.0, -- Aguante
attack = 2802.0, -- Ataque
defend = 779.0, -- Defensa
pen = 5, -- Nivel de penetración 0~10
ten = 3, -- Nivel de tenacidad 0~10
restore = 266.0, -- Capacidad de recuperación
consume = 100.0, -- Consumo de crucero
weight = 3600.0, -- Peso (kg)
speed = 27.01, -- Velocidad al caminar (km/h)
swim = 13.5, -- Velocidad al nadar (km/h)
flying = 0.0, -- Velocidad de vuelo (km/h)
runSpeed = 54.01, -- Velocidad al correr (km/h)
turnSpeed = 0.61, -- Agilidad de giro (grados/s)
growtime = 1560.0, -- Tiempo para alcanzar adulto (segundos)
ovumtime = 1080.0, -- Intervalo de formación de huevos (segundos)
hatching = 2210.0, -- Tiempo de incubación (segundos)
safe = 1800.0, -- Periodo de protección juvenil (segundos)
skill = "LifeDrain,3;", -- Habilidad EX innata
gene = "", -- Gen innato
} 2.2 Clasificación e identidad
| Campo | Tipo | Descripción |
|---|---|---|
race | cadena | Obligatorio. Etiqueta de raza (ej. allo, rex, sauro). |
name | cadena | Nombre mostrado del personaje. |
enable | booleano | Si se permite usar en la interfaz de selección (true/false). |
jump | booleano | Si se permite saltar (necesita animación correspondiente, o dará error). |
volume | entero | Clase de tamaño 0~5 (ligero→súper). |
rank | entero | Estrellas 0~12 (corresponde a nivel S1~SS). |
branch | entero | Clasificación de familia 0~25. |
habit | entero | Hábito 0~5 (0=terrestre, 1=hidrófilo, 2=reptil marino, 3=acuático, 4=anfibio, 5=volador). |
type | entero | Categoría 0~5 (0=carnívoro, 1=herbívoro, 2=acuático, 3=artrópodo, 4=mamífero, 5=volador). |
taste | entero | Dieta 0~3 (0=carnívoro, 1=flores, 2=hojas, 3=omnívoro). |
spawn | entero | Reproducción 0~1 (0=ovíparo, 1=vivíparo). |
ropoda | entero | Tipo de nido -1~2 (-1=ninguno, 0=terópodo, 1=saurópodo, 2=ornitisquio). |
ropode | entero | Tipo de huevo -1~2 (-1=ninguno, 0=terópodo, 1=saurópodo, 2=ornitisquio). |
2.3 Supervivencia y combate
| Campo | Tipo | Descripción |
|---|---|---|
health | numérico | Vida máxima. |
stamina | numérico | Aguante máximo. |
hunger | numérico | Hambre máxima. |
water | numérico | Agua máxima. |
oxygen | numérico | Oxígeno máximo. |
attack | numérico | Ataque base. |
defend | numérico | Defensa base. |
pen | entero | Nivel de penetración 0~10. |
ten | entero | Nivel de tenacidad 0~10. |
restore | numérico | Capacidad de recuperación natural. |
consume | numérico | Consumo de crucero. |
weight | numérico | Peso (kg). |
force | numérico | Fuerza física 0~10000. |
2.4 Velocidad de movimiento (km/h)
| Campo | Tipo | Descripción |
|---|---|---|
speed | numérico | Velocidad al caminar. |
runSpeed | numérico | Velocidad al correr. |
swim | numérico | Velocidad al nadar (0 si no nada). |
flying | numérico | Velocidad de vuelo (0 si no vuela). |
turnSpeed | numérico | Agilidad de giro (grados/s). |
2.5 Parámetros de tiempo
| Campo | Tipo | Descripción |
|---|---|---|
growtime | numérico | Tiempo para alcanzar adulto (segundos). |
ovumtime | numérico | Intervalo de formación de huevos (segundos). |
hatching | numérico | Tiempo de incubación de huevos (segundos). |
safe | numérico | Duración del periodo de protección juvenil (segundos). |
2.6 Eficiencia de órganos (0.0 ~ 1.0)
| Campo | Tipo | Descripción |
|---|---|---|
muscle | numérico | Eficiencia muscular. Afecta la recuperación de aguante de ataque. |
stomach | numérico | Eficiencia estomacal. Afecta la tasa de consumo de comida/agua. |
lung | numérico | Eficiencia pulmonar. Afecta la producción de oxígeno. |
heart | numérico | Eficiencia cardíaca. Afecta la velocidad de regeneración de vida. |
breed | numérico | Eficiencia reproductiva. Afecta la tasa de generación de huevos. |
2.7 Dimensiones corporales y rasgos innatos
| Campo | Tipo | Descripción |
|---|---|---|
length | numérico | Longitud del cuerpo (m) 0.1~100. |
width | numérico | Anchura del cuerpo (m) 0.1~100. |
height | numérico | Altura del cuerpo (m) 0.1~100. |
tempMin | numérico | Temperatura mínima tolerable (°C). |
tempMax | numérico | Temperatura máxima tolerable (°C). |
humidMin | numérico | Humedad mínima tolerable (%). |
humidMax | numérico | Humedad máxima tolerable (%). |
skill | cadena | Habilidad EX innata. Formato: "NombreGen,Nivel;". |
gene | cadena | Gen innato. Mismo formato. |
3. MOD de habilidades
Usa la tabla CharacterSkill para modificar los ataques de los personajes. Cada habilidad se define como par clave-valor (la clave puede nombrarse libremente). Se puede combinar con CharacterAsset en el mismo archivo .txt.
3.1 Ejemplo completo (de DemoCharacterMod)
CharacterSkill = {
attack1 = {
Race = "allo", -- *Obligatorio* etiqueta de raza
AttackOrder = 1, -- Índice de ataque (1=boca1, 2=boca2...)
AttackType = 0, -- Tipo de ataque 0~7 (ver enumeración abajo)
DamageMode = 0, -- Tipo de daño 0~2 (ver enumeración abajo)
Area = nil, -- Zona permitida nil=sin límite, {0,1}=solo tierra+agua somera
AttackRange = 1.0, -- Radio de colisión de ataque (m)
Modify = 2.0, -- Coeficiente de daño (1=sin modificación)
UseStamina = 0.01, -- Porcentaje de aguante consumido (0=por defecto del sistema)
TriggerSkill = "Scars,2;", -- Habilidad activada al impactar (formato: "Nombre,Nivel;")
},
attack2 = {
Race = "allo",
AttackOrder = 2,
AttackType = 1, -- Cola
DamageMode = 1, -- Daño en área AOE
AttackRange = 3.0,
Modify = 0.8,
UseStamina = 0.03,
TriggerSkill = "Blood,2;",
},
} 3.2 Enumeración de AttackType (tipo de ataque)
| Valor | Nombre | Descripción |
|---|---|---|
| 0 | BITE / Mordisco | Ataque de mordisco/desgarro |
| 1 | TAIL / Cola | Golpe de cola/barrido |
| 2 | STEP / Pisoteo | Pisoteo |
| 3 | HAND / Mano | Ataque con extremidades delanteras |
| 4 | BODY / Cuerpo | Embestida corporal |
| 5 | HEAD / Cabeza | Golpe de cabeza |
| 6 | FOOT / Pata | Patada |
| 7 | DASH / Carga | Carga/embestida |
3.3 Enumeración de DamageMode (tipo de daño)
| Valor | Nombre | Descripción |
|---|---|---|
| 0 | Objetivo único | Ataque a un solo objetivo |
| 1 | AOE / Área | Ataque en área (el primer objetivo válido no decae; los siguientes decaen en orden) |
| 2 | Carga | Ataque de carga (requiere animación de carga vinculada) |
3.4 Enumeración de Area (zona disponible)
| Valor | Nombre |
|---|---|
| 0 | Tierra |
| 1 | Agua somera |
| 2 | Agua profunda |
| 3 | Cielo |
4. MOD de hitbox (zonas de impacto)
Usa la tabla CharacterHitGroup para modificar la tasa de penetración de armadura y el multiplicador de daño de cada parte del cuerpo del personaje, creando puntos débiles o blindaje reforzado.
4.1 Constantes de partes del cuerpo
| Constante | Valor | Parte |
|---|---|---|
BODY_HEAD | 0 | Cabeza (punto débil de alta penetración) |
BODY_BODY | 2 | Torso (protegido por armadura) |
BODY_TAIL | 3 | Cola |
BODY_BELLY | 7 | Vientre (punto débil fatal) |
4.2 Ejemplo (de DemoCharacterMod)
CharacterHitGroup = {
head = {
Race = "allo",
PartType = BODY_HEAD,
PenetrationRate = 0.6, -- Tasa de penetración 0~1 (mayor = más fácil de penetrar)
DamageMultiplier = 1.5, -- Multiplicador de daño 0.5~2 (>1 = más daño recibido)
},
body = {
Race = "allo",
PartType = BODY_BODY,
PenetrationRate = 0.05, -- Casi impenetrable
DamageMultiplier = 0.8, -- 20% de reducción de daño
},
belly = {
Race = "allo",
PartType = BODY_BELLY, -- Vientre (valor=7)
PenetrationRate = 0.9, -- Penetración muy alta
DamageMultiplier = 1.8, -- Gran aumento de daño recibido
},
} 5. MOD de gen BUFF
El MOD de gen BUFF sobrescribe los valores y la configuración de genes/habilidades/BUFFs existentes mediante la tabla global CharacterGeneBuff. Al igual que CharacterAsset, el script es XLua (.txt) y puede estar en el mismo archivo o en una subcarpeta GeneBuff/ dedicada.
5.1 Estructura de configuración (CharacterGeneBuff)
CharacterGeneBuff = {
-- Clave = la etiqueta del gen existente a sobrescribir (obtén las TAG en la página lista de habilidades y genes)
Bleed = {
Repeat = "COVER", -- Opcional: regla de sobrescritura
Upgrade = "EXP", -- Opcional: modo de mejora
With = "", -- Opcional: DSL de efecto adjunto, formato tag,nivel;
Copes = "", -- Opcional: etiqueta del objetivo de contrarresto
Effects = { -- *Obligatorio* tabla por nivel (reemplaza los valores por nivel originales)
{ Level = 1, Probability = 0.55, Effect = 0.03, Duration = 5 },
{ Level = 2, Probability = 0.65, Effect = 0.05, Duration = 7 },
}
}
} 5.2 Campos de nivel superior modificables
| Campo | Tipo | Descripción | Obligatorio |
|---|---|---|---|
Repeat | enum | Regla de sobrescritura (ver 5.4) | Opc. |
Upgrade | enum | Modo de mejora (ver 5.4) | Opc. |
With | string | DSL de efecto adjunto tag,nivel; | Opc. |
Copes | string | Etiqueta del objetivo de contrarresto | Opc. |
Effects | array | Tabla de valores por nivel (ver 5.3) | Obligatorio |
5.3 Campos de Effects por nivel
| Campo | Tipo | Descripción | Rango |
|---|---|---|---|
Level | int | Número de nivel (≤0 vuelve al índice) | ≥1 |
Probability | float | Probabilidad de activación | 0~1 |
Chance | float | Probabilidad de síntesis | 0~1 |
Range | int | Alcance del efecto | 0~100 |
Limit | int | Máx. de jugadores afectados | 0~10 |
Effect | float | Valor de fuerza central | Depende del tipo de efecto |
Count | int | Cantidad (con TRIGGER) | — |
Skillful | float | Pericia necesaria para este nivel | — |
Duration | float | Duración (para genes de contrarresto = % de reducción del tiempo de DEBUFF) | -99999~99999 |
Forever | bool | Si el BUFF de este nivel es permanente | — |
IsEffectFixed / IsDurationFixed | bool | Si el valor/tiempo es un número fijo (solo visualización) | — |
5.4 Enums disponibles
| Enum | Valores permitidos |
|---|---|
Upgrade modo de mejora | NONE (sin mejora) / TIME (pericia por tiempo de vida) / EXP (pericia por muertes) / ALL (todas las fuentes) |
Repeat regla de sobrescritura | ONE (rechaza repetición) / ADD (acumular) / COVER (refrescar) |
5.5 Ejemplo completo (DemoCharacterMod/GeneBuff/gene_buff.txt incluido)
CharacterGeneBuff = {
-- ① Sobrescribir los valores por nivel del gen existente Metabolism
Metabolism = {
Effects = {
{ Level = 1, Effect = 0.12, Skillful = 0 },
{ Level = 2, Effect = 0.18, Skillful = 100 },
}
},
-- ② Sobrescribir la probabilidad de activación, valores y duración del gen de habilidad existente Bleed
Bleed = {
Effects = {
{ Level = 1, Probability = 0.55, Effect = 0.03, Duration = 5 },
{ Level = 2, Probability = 0.65, Effect = 0.05, Duration = 7 },
}
}
} 5.6 Otorgar genes innatos a una criatura
-- En el script CharacterAsset de la criatura, usa el campo gene para otorgar genes innatos. Formato: NombreDelGen,Nivel;
CharacterAsset = {
race = "allo",
gene = "Metabolism,2;",
} 5.7 Carga y restricciones
- Se aplica de inmediato: una vez que la sobrescritura tiene éxito, nacimiento / activación / ejecución leen los valores sobrescritos.
- Validación estricta de referencias:
Withdebe sertag,nivel, sin autorreferencia, la etiqueta referenciada debe existir y el nivel debe estar en rango;Copesdebe existir y no autorreferenciarse. Cualquier fallo rechaza la sobrescritura (nunca falla en silencio). - Sin
Effectsválidos → esa sobrescritura falla. - Restauración por sesión: salir / desactivar / reiniciar el MOD restaura automáticamente los genes sobrescritos, evitando residuos entre partidas.
- Paridad en ambos lados: el servidor debe cargar el mismo MOD mediante
GAME_MODS; los hashes deben coincidir para entrar;/modReloadrecarga los valores de genes en caliente.
6. MOD de skins
Usa la tabla CharacterSkin para añadir skins personalizadas a los personajes. Cada archivo .txt define una skin. Los archivos de textura van en la carpeta SkinsAsset/ dentro del directorio del MOD. Consulta el DemoSkinsMod incluido en el juego para ver un ejemplo completo.
6.1 Script de skin
CharacterSkin = {
Race = "allo", -- *Obligatorio* etiqueta de raza
Name = "Crooked mouth", -- *Obligatorio* nombre único de skin (para deduplicación)
Path = "SkinsAsset/Crooked mouth.png", -- *Obligatorio* ruta de textura (relativa a la raíz del MOD)
} 6.2 Requisitos de textura
- Formato: PNG o JPG.
- Resolución: se recomienda que coincida con la textura original (normalmente 2048×2048 o 4096×4096).
- La ruta debe ser relativa al directorio raíz del MOD, no usar rutas absolutas.
6.3 Ejemplo de directorio con múltiples skins
MySkinMod/
├── mod.json
├── preview.jpg
└── SkinsAsset/
├── allo_crooked.txt ← CharacterSkin { Race="allo", Name="Crooked mouth", ... }
├── crooked_allo.png ← Archivo de textura
├── rex_volcano.txt ← Un mismo MOD puede contener skins de varias razas
└── volcano_rex.png 7. Avanzado: Gestión y distribución
7.1 Sistema de prioridad
Cuando varios MODs modifican el mismo campo de la misma raza, el valor de Priority más alto se ejecuta después y prevalece. El valor por defecto es 0. Los MODs con la misma prioridad se ejecutan en orden alfabético.
7.2 Seguridad del sandbox Lua
os,io: comandos del sistema y lectura/escritura de archivos están prohibidos.dofile,loadfile,package: ejecución de archivos locales arbitrarios y carga de bibliotecas dinámicas están prohibidos.
7.3 Empaquetar como archivo .mod
Comprime todos los archivos de la carpeta del MOD en un ZIP y luego cambia la extensión a .mod. Asegúrate de que mod.json esté en la raíz del archivo comprimido. Tanto .mod como .zip son reconocidos por el juego.
7.4 MODs del servidor
El servidor especifica los MODs a cargar mediante la variable de entorno GAME_MODS (separados por comas):GAME_MODS=DemoCharacterMod,MySkinMod
Todos los MODs especificados por el servidor deben estar instalados y habilitados en el cliente para poder unirse. Los MODs adicionales habilitados solo en el cliente no surtirán efecto en ese servidor. Los administradores pueden usar /modReload para recargar la configuración de MODs en caliente.