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

  1. Busca primero si existe un handler, evento, dato PBS o ajuste que resuelva el cambio.
  2. Si el handler existente sirve, registra tu comportamiento desde el plugin.
  3. 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.
  4. Si hay que integrar el cambio en un método existente, usa alias_method y conserva la llamada al original cuando corresponda.
  5. 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

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:

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

  1. Inicia el juego y confirma que el plugin aparece sin errores de carga.
  2. Prueba el caso normal y los límites relevantes del cambio.
  3. Guarda y recarga si el plugin toca datos persistentes.
  4. Revisa errorlog.txt y mkxp.log.

Artículos relacionados