Saltar a contenido

Desarrollo de Plugins

Wayward Crown soporta un sistema de plugins que te permite añadir o reemplazar clases, enemigos, edificios y paquetes de idioma.


Estructura de un Plugin

Los plugins se colocan como carpetas dentro del directorio plugins/:

plugins/
└── my_plugin/
    ├── plugin.json           # Metadatos del plugin (obligatorio)
    ├── content/
    │   ├── adventurer_classes.json   # Clases personalizadas
    │   ├── enemies.json              # Enemigos personalizados
    │   └── buildings.json            # Edificios personalizados
    ├── lang/
    │   ├── en.json                   # Traducción al inglés
    │   └── zh_TW.json               # Traducción al chino tradicional
    └── assets/                       # Recursos de imagen personalizados

plugin.json

{
  "id": "my_plugin",
  "name": "My Plugin",
  "version": "1.0.0",
  "author": "Nombre del Autor",
  "description": "Descripción del plugin"
}

Orden de Carga

  1. Contenido base (game/content/) se carga primero
  2. Los plugins externos se cargan en orden alfabético por nombre de carpeta
  3. Los plugins cargados posteriormente reemplazan las entradas definidas previamente con el mismo ID
  4. Los plugins listados en plugins/disabled.json se omiten completamente

Clases de Aventureros Personalizadas

Define clases en content/adventurer_classes.json:

[
  {
    "id": "NINJA",
    "i18n_key": "class_ninja",
    "color": [30, 30, 30],
    "stats": {
      "hp": [35, 80],
      "str": [5, 15],
      "agi": [10, 25],
      "int": [3, 10],
      "lck": [5, 15]
    },
    "desires": {
      "gold": [0.3, 0.8],
      "safety": [0.0, 0.2],
      "glory": [0.5, 1.0],
      "curiosity": [0.3, 0.7]
    },
    "level_up": {
      "primary": "agi",
      "primary_range": [3, 7],
      "secondary": "str",
      "secondary_range": [1, 3]
    },
    "attack_stat": "agi",
    "attack_range": 5,
    "skills": {
      "3": {"id": "shadow_step", "i18n": "advskill_shadow_step", "effect": {"dodge": 0.2}},
      "6": {"id": "poison_blade", "i18n": "advskill_poison_blade", "effect": {"atk_flat": 6}}
    }
  }
]

Reemplazar Clases Base

Usar el mismo id que una clase base (por ejemplo, "WARRIOR") reemplazará la definición de la clase base.


Enemigos Personalizados

Define enemigos en content/enemies.json:

[
  {
    "id": "ORC",
    "i18n_key": "enemy_orc",
    "color": [100, 150, 50],
    "spawn_tile": "MOUNTAIN",
    "danger_level": 3,
    "stats": {
      "hp": 200,
      "attack": 10,
      "defense": 8,
      "speed": 0.8,
      "xp": 50,
      "gold": 25,
      "attack_range": 3,
      "sight_range": 18
    }
  }
]

Edificios Personalizados

Define edificios en content/buildings.json:

[
  {
    "id": "TAVERN",
    "i18n_key": "building_tavern",
    "color": [160, 120, 60],
    "cost": 180,
    "hp": 700,
    "max_level": 2,
    "upgrade_costs": [300],
    "attracts": null,
    "category": "shop"
  }
]

Plugins de Paquete de Idioma

El tipo de plugin más sencillo -- solo requiere plugin.json y lang/*.json:

plugins/example_jp/
├── plugin.json
└── lang/
    └── ja.json

Los archivos JSON de idioma usan un formato clave-valor con soporte para sustitución con {marcador}:

{
  "window_title": "ウェイワード・クラウン",
  "log_defeated_enemy": "{adv}が{enemy}を倒した(金:{gold} XP:{xp})"
}

Activar / Desactivar

  • Los plugins se pueden activar o desactivar desde el menú de ajustes del juego
  • Los plugins desactivados se registran en plugins/disabled.json
  • Es necesario reiniciar el juego después de desactivar un plugin para que los cambios surtan efecto

Repositorio Remoto de Plugins

El juego soporta la descarga de plugins desde una fuente remota:

  • El índice de plugins se almacena en plugins/repo.json
  • Puedes explorar e instalar plugins desde el menú de ajustes
  • Los plugins descargados se extraen automáticamente en el directorio plugins/