플러그인 개발¶
웨이워드 크라운은 클래스, 적, 건물, 언어 팩을 추가하거나 재정의할 수 있는 플러그인 시스템을 지원합니다.
플러그인 구조¶
플러그인은 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": "플러그인 설명"
}
로드 순서¶
- 코어 콘텐츠 (
game/content/)가 먼저 로드됩니다 - 외부 플러그인은 폴더 이름의 알파벳 순으로 로드됩니다
- 나중에 로드된 플러그인이 동일한 ID를 가진 이전 항목을 재정의합니다
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.json과 lang/*.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/디렉토리에 압축 해제됩니다