Aller au contenu

Développement de plugins

Wayward Crown dispose d'un système de plugins qui vous permet d'ajouter ou de remplacer des classes, des ennemis, des bâtiments et des packs de langue.


Structure d'un plugin

Les plugins sont placés en tant que dossiers dans le répertoire plugins/ :

plugins/
└── my_plugin/
    ├── plugin.json           # Métadonnées du plugin (requis)
    ├── content/
    │   ├── adventurer_classes.json   # Classes personnalisées
    │   ├── enemies.json              # Ennemis personnalisés
    │   └── buildings.json            # Bâtiments personnalisés
    ├── lang/
    │   ├── en.json                   # Traduction anglaise
    │   └── zh_TW.json               # Traduction en chinois traditionnel
    └── assets/                       # Ressources graphiques personnalisées

plugin.json

{
  "id": "my_plugin",
  "name": "My Plugin",
  "version": "1.0.0",
  "author": "Author Name",
  "description": "Plugin description"
}

Ordre de chargement

  1. Le contenu de base (game/content/) est chargé en premier
  2. Les plugins externes sont chargés par ordre alphabétique du nom de dossier
  3. Les plugins chargés ultérieurement remplacent les entrées précédemment définies ayant le même ID
  4. Les plugins listés dans plugins/disabled.json sont complètement ignorés

Classes d'aventuriers personnalisées

Définissez les classes dans 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}}
    }
  }
]

Remplacement des classes de base

Utiliser le même id qu'une classe de base (ex. "WARRIOR") remplacera la définition de la classe de base.


Ennemis personnalisés

Définissez les ennemis dans 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
    }
  }
]

Bâtiments personnalisés

Définissez les bâtiments dans 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 pack de langue

Le type de plugin le plus simple -- ne nécessite que plugin.json et lang/*.json :

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

Les fichiers JSON de langue utilisent un format clé-valeur avec prise en charge de la substitution {placeholder} :

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

Activation / Désactivation

  • Les plugins peuvent être activés ou désactivés depuis le menu des paramètres en jeu
  • Les plugins désactivés sont enregistrés dans plugins/disabled.json
  • Un redémarrage du jeu est nécessaire après la désactivation d'un plugin pour que les changements prennent effet

Dépôt de plugins distant

Le jeu prend en charge le téléchargement de plugins depuis une source distante :

  • L'index des plugins est stocké dans plugins/repo.json
  • Vous pouvez parcourir et installer des plugins depuis le menu des paramètres
  • Les plugins téléchargés sont automatiquement extraits dans le répertoire plugins/