콘텐츠로 이동

플러그인 개발

웨이워드 크라운은 클래스, 적, 건물, 언어 팩을 추가하거나 재정의할 수 있는 플러그인 시스템을 지원합니다.


플러그인 구조

플러그인은 plugins/ 디렉토리 안에 폴더로 배치합니다:

plugins/
└── my_plugin/
    ├── plugin.json           # 플러그인 메타데이터 (필수)
    ├── content/
    │   ├── adventurer_classes.json   # 커스텀 클래스
    │   ├── enemies.json              # 커스텀 적
    │   └── buildings.json            # 커스텀 건물
    ├── lang/
    │   ├── en.json                   # 영어 번역
    │   └── zh_TW.json               # 번체 중국어 번역
    └── assets/                       # 커스텀 이미지 에셋

plugin.json

{
  "id": "my_plugin",
  "name": "My Plugin",
  "version": "1.0.0",
  "author": "작성자 이름",
  "description": "플러그인 설명"
}

로드 순서

  1. 코어 콘텐츠 (game/content/)가 먼저 로드됩니다
  2. 외부 플러그인은 폴더 이름의 알파벳 순으로 로드됩니다
  3. 나중에 로드된 플러그인이 동일한 ID를 가진 이전 항목을 재정의합니다
  4. plugins/disabled.json에 등록된 플러그인은 완전히 건너뜁니다

커스텀 모험가 클래스

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}}
    }
  }
]

코어 클래스 재정의

코어 클래스와 동일한 id(예: "WARRIOR")를 사용하면 코어 클래스 정의가 재정의됩니다.


커스텀 적

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
    }
  }
]

커스텀 건물

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"
  }
]

언어 팩 플러그인

가장 간단한 유형의 플러그인으로, plugin.jsonlang/*.json만 있으면 됩니다:

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

언어 JSON 파일은 키-값 형식을 사용하며 {placeholder} 치환을 지원합니다:

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

활성화 / 비활성화

  • 게임 내 설정 메뉴에서 플러그인을 활성화하거나 비활성화할 수 있습니다
  • 비활성화된 플러그인은 plugins/disabled.json에 기록됩니다
  • 플러그인 비활성화 후 변경 사항을 적용하려면 게임을 재시작해야 합니다

원격 플러그인 저장소

게임은 원격 소스에서 플러그인을 다운로드하는 기능을 지원합니다:

  • 플러그인 인덱스는 plugins/repo.json에 저장됩니다
  • 설정 메뉴에서 플러그인을 탐색하고 설치할 수 있습니다
  • 다운로드한 플러그인은 자동으로 plugins/ 디렉토리에 압축 해제됩니다