Hello! 欢迎来到WaterMoon!

📚 Chemdah语法手册:从“抄作业”到“自己写代码”,彻底搞懂配置逻辑


avatar
Yu123 2025-02-23 243

前言
你是不是经常“复制粘贴”别人的代码却不敢改?一改就报错?这篇教程将拆解Chemdah的语法DNA,让你彻底明白每个参数的作用,从此自由定制任务和对话!配合避坑指南+速查表,小白也能变大神!


🧩 核心语法结构:YAML的“潜规则”

1️⃣ 缩进即正义

Chemdah所有配置基于YAML,缩进必须用空格(不能用Tab),且同级对齐。想象成“俄罗斯套娃”——层级越深,缩进越多:

quests:           # 顶级键(0缩进)
  quest_1:        # 子键(2空格)
    objectives:   # 子子键(4空格)
      obj_1:
        type: ITEM_DELIVERY  # 子子子键(6空格

2️⃣ 键值对的秘密

  • key: value:冒号后必须加空格(type: ENTITY_KILL ✅,type:ENTITY_KILL ❌)
  • 短横线列表:表示多个并列项(如奖励、条件)
rewards:  
  - type: MONEY    # 短横线开头,缩进对齐  
    amount: 100  
  - type: ITEM  
    item: DIAMOND

3️⃣ 数据类型要敏感

  • 字符串:带特殊字符(如颜色代码&a)必须用引号包裹:name: "&a绿色任务"
  • 数字/布尔值:无需引号,如amount: 5repeatable: true
  • 嵌套对象:用缩进表示层级关系,如objectives下的各个目标

🔧 任务(Quest)配置解剖

1️⃣ 基础骨架

quests:  
  任务ID:  # 唯一标识,不能重复!推荐英文+下划线  
    name: "任务显示名称"  
    objectives:  
      目标ID:  
        type: 目标类型  # 如ENTITY_KILL, BLOCK_BREAK等  
        # 类型专属参数(如entity: ZOMBIE)  
    rewards:  
      - type: 奖励类型  
        # 奖励参数(如amount: 100)  
    conditions:  # 接任务条件  
      - type: 条件类型  
    next_quest: 后续任务ID  # 任务链关键!

2️⃣ 常用目标类型速查

类型 作用 关键参数示例
ENTITY_KILL 击杀实体 entity: ZOMBIEamount: 5
BLOCK_BREAK 破坏方块 block: STONEamount: 20
ITEM_DELIVERY 提交物品 item: DIAMONDlore: "传说物品"
LOCATION_REACH 到达坐标区域 x: 100, y: 64, z: -200, radius: 5
CUSTOM_TRIGGER 自定义触发器 trigger: 触发器ID

3️⃣ 奖励类型大全

类型 效果 参数示例
MONEY 给钱 amount: 500
ITEM 给物品 item: DIAMOND_SWORDamount: 1
COMMAND 执行命令 command: "effect give %player% speed 60"
MESSAGE 发送消息 message: "&a任务完成!"
PERMISSION 给予权限 permission: "skill.unlock"

💬 对话(Conversation)系统语法精讲

1️⃣ 对话树结构

 

conversations:  
  对话ID:  
    scenes:  # 所有对话场景  
      scene_1:  # 场景ID  
        messages: ["第一句话", "第二句话"]  # NPC说的话  
        choices:  # 玩家选项  
          - "选项文本": target_scene_id  # 选择后跳转的场景  
        actions:  # 触发动作(如给物品、启动任务)  
          - type: 动作类型  
      scene_2:  
        conditions:  # 进入该场景的条件  
          - type: 条件类型

2️⃣ 动作类型举例

  • QUEST: 控制任务(start/complete/fail)
  • INVENTORY_REMOVE: 移除物品
  • COMMAND: 执行命令
  • TELEPORT: 传送玩家

3️⃣ 条件判断实战

conditions:  
  - type: QUEST_COMPLETED  # 已完成某任务  
    quest: quest_id  
  - type: PLACEHOLDER      # 用PAPI变量判断  
    placeholder: "%vault_eco_balance%"  
    operator: ">="  
    value: 1000  
  - type: INVENTORY_ITEM   # 背包有指定物品  
    item: EMERALD  
    amount: 5

⚙️ 高级语法:变量与占位符

1️⃣ Chemdah内置变量

  • %chemdah_quest_progress:任务ID%:任务进度(如3/5)
  • %chemdah_quest_state:任务ID%:任务状态(未接/进行中/完成)

2️⃣ 跨插件变量联动

  • PlaceholderAPI
    • 经济:%vault_eco_balance%
    • 等级:%mmocores_level_combat%
    • 领地:%residence_current%
  • 在对话/条件中使用
message: "你好,%player_name%!你的余额:%vault_eco_balance%"  
conditions:  
  - type: PLACEHOLDER  
    placeholder: "%residence_current%"  
    value: "spawn_area"

🚫 避坑指南:99%的新手会犯的错

1️⃣ 缩进杀手

  • 错误:混用空格和Tab → YAML解析失败
  • 解决:编辑器显示空格(VSCode安装YAML插件)

2️⃣ ID冲突

  • 错误:多个任务/对话使用相同ID → 随机覆盖
  • 解决:命名用前缀,如main_quest1side_dialog2

3️⃣ 变量未转义

  • 错误message: 你好%player%(缺少引号,%被识别为YAML格式)
  • 解决message: "你好%player%"

4️⃣ 条件顺序

  • 错误:多个条件未按逻辑排列 → 意外跳过判断
  • 解决:条件从上到下执行,把最严格的条件放前面

📜 语法速查表(打印贴墙上!)

场景 代码模板
基础任务 [见上文任务骨架]
任务链 next_quest: next_quest_id
NPC商店 actions中使用INVENTORY_REMOVE+COMMAND
条件判断 conditions配合type: QUEST_COMPLETED/PLACEHOLDER/INVENTORY_ITEM
变量使用 字符串内直接写%变量名%,用引号包裹

结语
掌握这些语法规则,你已经是Chemdah的“配置自由人”了!遇到问题就回来查表,或者评论区吼一声~ 下期预告:用JavaScript API开发Chemdah自定义扩展,等你来挑战! 🚀

(记得修改配置后重载插件:/chemdah reload,Adyeshach NPC需重新生成或使用/npc reload

这个网站可以让你们自行查询格式是否正确点我

自动发卡此卡密价格为0软妹币立即购买

暂无评论

当前仅支持登录后发布评论