ข้ามไปที่เนื้อหา

การพัฒนาปลั๊กอิน

Wayward Crown รองรับระบบปลั๊กอินที่ให้คุณเพิ่มหรือแทนที่คลาส ศัตรู อาคาร และชุดภาษาได้


โครงสร้างปลั๊กอิน

ปลั๊กอินจะวางเป็นโฟลเดอร์ภายในไดเรกทอรี 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": "Author Name",
  "description": "Plugin 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.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/ โดยอัตโนมัติ