Crear un plugin
La forma recomendada de personalizar un juego hecho con La Base de Sky es crear un plugin propio. Así mantienes los cambios separados de los scripts de la base y puedes revisarlos o actualizar la base con menos conflictos.
Ruta recomendada
- Busca primero si existe un handler, evento, dato PBS o ajuste que resuelva el cambio.
- Si el handler existente sirve, registra tu comportamiento desde el plugin.
- Si falta un punto de extensión, valora crear un handler propio que tu código llame. Crear el registro por sí solo no hace que el motor lo invoque.
- Si hay que integrar el cambio en un método existente, usa
alias_methody conserva la llamada al original cuando corresponda. - Reemplaza el método entero solo si no hay una extensión viable. Documenta por qué y qué comportamiento original deja de ejecutarse.
Los handlers disponibles y sus ubicaciones están en la guía de Handlers y puntos de extensión.
Estructura mínima
Un plugin pequeño puede tener solo meta.txt y un script Ruby:
Plugins/
└── [PREFIJO] Mi Plugin/
├── meta.txt
└── main.rb
Name = Mi Plugin
Version = 1.0.0
Essentials = 21.1
Credits = Tu nombre
Usa el prefijo propio del proyecto para la carpeta, el módulo y los identificadores de handlers. Consulta Plugins para los campos adicionales de meta.txt y sus dependencias.
Cómo extender el comportamiento
Prefiere APIs que suman callbacks en vez de cambiar el flujo de un método. Por ejemplo, un evento de juego puede registrar una callback con una clave propia:
EventHandlers.add(:on_new_game, :MIPREFIJO_mi_plugin, proc {
MiPlugin.al_iniciar_partida
})
La clave debe ser única para ese evento. Para opciones de menú, objetos, habilidades, páginas MUI y otros sistemas, consulta Handlers y puntos de extensión; cada sistema tiene sus propios argumentos y valores de retorno.
Parchar con alias_method
Cuando debas ampliar un método, crea un alias con un nombre específico del plugin y llama al original:
class Battle
alias_method :_MIPREFIJO_mi_plugin_orig_pbStartBattle, :pbStartBattle
def pbStartBattle
resultado = _MIPREFIJO_mi_plugin_orig_pbStartBattle
MiPlugin.despues_de_iniciar_combate
resultado
end
end
El nombre del alias debe ser único dentro de la clase o módulo parcheado; no basta con que apunte a otro método. Si dos plugins usan el mismo identificador, el segundo puede reemplazar a qué método apunta el alias del primero y causar recursión o saltarse parte del parche. Incluye un prefijo propio y una abreviatura del plugin/método, y busca ese nombre en todos los plugins antes de usarlo.
Respeta la firma real del método, pasa sus argumentos y conserva su resultado. Si el método acepta argumentos, keywords o bloque, el parche debe conservarlos también.
Cuándo reemplazar un método
Un reemplazo completo descarta el cuerpo anterior. Úsalo como último recurso cuando no sirva un handler, un callback ni un alias que envuelva el original. Antes de hacerlo:
- Busca todos los llamadores y revisa la implementación completa.
- Comprueba si hay plugins que también parchean el método y cuál es su orden de carga.
- Anota qué comportamiento original se omite y por qué no puede conservarse.
- Prefiere proponer un nuevo punto de extensión en la base si varios makers necesitan el mismo cambio.
No cambies directamente los scripts de la base para personalizar un juego salvo que estés trabajando explícitamente en la base.
Comprobación manual
- Inicia el juego y confirma que el plugin aparece sin errores de carga.
- Prueba el caso normal y los límites relevantes del cambio.
- Guarda y recarga si el plugin toca datos persistentes.
- Revisa
errorlog.txtymkxp.log.