里程碑 - 框架与追踪

里程碑 - 框架与追踪

实现功能,允许内容包添加可追踪的里程碑,并附带多种奖励功能。

实用

里程碑 - 框架与追踪

插件概览

本插件围绕在资源编辑器中创建“里程碑”的系统构建,这些里程碑可在游戏内追踪,用于玩家进度引导、方向指示和探索奖励。完成里程碑后,既可以奖励物品,也可以启动复杂的交互链。

玩家须知

本模组本身不向游戏添加任何里程碑,它只是为数据包添加自己的里程碑创建了基础框架,因此将是所有使用本插件的数据包的依赖项。如需一个基础的里程碑数据包,你可以下载包含162个通用里程碑及各种奖励的简单里程碑数据包。如果你想添加自己的里程碑,请继续阅读。

模组创作者须知

目的

目前,本插件主要通过资源编辑器使用,但随着我扩展其功能和范围,我将构建一个基于代码的集成API。我的目标是创建一个集中式系统,用于各种基于事件的追踪,并允许数据包创建者对里程碑的追踪和交互方式拥有高度控制权,使其能够与其他系统连接,实现复杂的世界进度管理。

功能概览

里程碑插件为各种玩家活动提供全面的追踪:

  • 破坏方块 - 追踪玩家破坏特定方块或方块类型的行为
  • 放置方块 - 监控玩家放置方块的行为
  • 使用方块 - 追踪与方块的交互(营火、工作台等)
  • 交互式拾取 - 监控玩家使用F键拾取物品(农作物、蘑菇、已放置物品)
  • 自动拾取 - 追踪从地面自动收集的物品(掉落物、物品栏转移、怪物掉落)
  • 合成 - 追踪玩家合成特定物品的行为
  • 击杀实体 - 记录玩家击败实体的行为
  • 发现区域 - 追踪玩家进入新区域的行为
  • 发现生物群系 - 监控玩家发现新生物群系的行为
  • 运行时刷新 - 在资源编辑器中创建的新里程碑无需重启服务器即可立即生效

每种里程碑类型支持:

  • 精确匹配 - 针对特定的方块/物品/实体ID
  • 部分匹配 - 匹配包含目标字符串的任何ID(例如,"Ore"匹配所有矿石类型)
  • 唯一追踪 - 统计唯一类型而非总数(可与部分匹配一起使用)
  • 目标列表 - 追踪多个特定ID的进度
  • 区域上下文 - 将追踪限制在特定区域(生物群系发现)

命令

插件提供了几个游戏内命令:

  • /milestones - 打开带有分类筛选功能的里程碑UI浏览器
  • /listmilestones - 列出所有已注册的里程碑(管理员/调试用)
  • /availablemilestones - 显示玩家可用的里程碑

所有命令都遵循 Hytale 的权限系统。

使用方法

资源概览

里程碑创建为 JSON 资源文件,放置在资源包的 Server/Milestones/ 目录下。每个里程碑都是一个独立的 JSON 文件,插件会在服务器启动时自动加载。

基本结构:

{
  "DisplayName": "里程碑名称",
  "Description": "玩家需要完成的任务",
  "IconText": "🎯",
  "Type": "BREAK_BLOCK",
  "TargetId": "Block_Stone",
  "RequiredCount": 10,
  "Category": "Mining",
  "ShowReward": true,
  "Rewards": [
    {
      "ItemId": "Tool_Pickaxe",
      "Quantity": 1
    }
  ],
  "XpReward": 50
}

可用类型:

  • BREAK_BLOCK - 追踪破坏的方块
  • PLACE_BLOCK - 追踪放置的方块
  • USE_BLOCK - 追踪方块交互
  • INTERACTABLE_PICKUP - 追踪交互式物品拾取(F键 - 收获农作物、拾取已放置物品)
  • ITEM_PICKUP - 追踪自动物品拾取(地面掉落物、物品栏转移、怪物掉落)
  • ITEM_COLLECTION - (旧版,请改用 INTERACTABLE_PICKUP)
  • CRAFTING - 追踪合成的物品
  • ENTITY_KILL - 追踪击杀的实体(支持 TrackUnique 以统计唯一实体类型数量)
  • ZONE_DISCOVERY - 追踪进入的区域
  • BIOME_DISCOVERY - 追踪发现的生物群系

唯一追踪: 大多数类型支持 "TrackUnique": true 配合 "PartialMatch": true,用于统计唯一变体数量而非总数:

  • ENTITY_KILL 配合 TrackUnique - 统计击杀的唯一敌人类型数量(例如,5种不同的哥布林变体 = 5进度)
  • CRAFTING 配合 TrackUnique - 统计合成的唯一配方数量
  • BREAK_BLOCK 配合 TrackUnique - 统计破坏的唯一方块类型数量
  • 以及更多……

通用字段:

  • DisplayName - 在UI中显示(必填)
  • Description - 在UI中显示(必填)
  • IconText - 表情符号或文本图标(可选)
  • IconItemId - 用作图标的物品ID(可选)
  • Type - 里程碑类型(必填)
  • Category - UI分类分组(可选)
  • ShowReward - 在UI中显示奖励(默认:false)
  • XpReward - 完成时奖励的经验值(可选)
  • Rewards - 物品奖励列表(可选)

资源深入解析

匹配模式:

精确匹配(默认):

{
  "Type": "BREAK_BLOCK",
  "TargetId": "Alchemy_Cauldron",
  "PartialMatch": false,
  "RequiredCount": 2
}

仅追踪精确匹配 "Alchemy_Cauldron" 的对象。

部分匹配:

{
  "Type": "ITEM_COLLECTION",
  "TargetId": "Armor",
  "PartialMatch": true,
  "RequiredCount": 5
}

追踪任何包含 "Armor" 的物品ID(例如,Armor_Bronze_Chest、Armor_Wood_Chest)。

唯一追踪:

{
  "Type": "BREAK_BLOCK",
  "TargetId": "Rock",
  "PartialMatch": true,
  "TrackUnique": true,
  "RequiredCount": 2
}

统计匹配 "Rock" 的不同类型方块被破坏的数量(非总数量)。

目标ID列表:

{
  "Type": "CRAFTING",
  "TargetIds": [
    "Armor_Bronze_Chest",
    "Armor_Wood_Chest",
    "Armor_Leather_Heavy_Chest"
  ],
  "RequiredCount": 2
}

统计所有列出的ID的总计数。

区域上下文(仅生物群系发现):

{
  "Type": "BIOME_DISCOVERY",
  "TargetId": "biome",
  "PartialMatch": true,
  "TrackUnique": true,
  "ZoneContext": "Devastated_Lands",
  "RequiredCount": 2
}

仅统计在指定区域内发现的生物群系。

奖励系统:

物品奖励:

"Rewards": [
  {
    "ItemId": "Armor_Bronze_Chest",
    "Quantity": 1
  },
  {
    "ItemId": "Container_Bucket",
    "Quantity": 5
  }
]

经验值奖励:

"XpReward": 100

注意: 经验值奖励当前已存储但尚未实现游戏内功能。此功能计划在未来的更新中添加。

交互链:

"OnCompleteInteractionId": "CustomRewardInteraction"

在里程碑完成时触发自定义交互(需要自定义交互资源)。

前置条件:

"PrerequisiteMilestones": [
  "Beginner_Mining_Quest",
  "First_Ore_Collection"
]

里程碑仅在完成前置条件后才可用。

自定义交互

插件提供了两个自定义交互,可在资源编辑器中用于NPC、方块、物品和其他交互内容:

检查里程碑交互

ID: *CheckMilestone

检查玩家是否已完成特定里程碑,并通过通知提供反馈。

使用场景:

  • 将NPC对话或任务进度锁定在里程碑完成之后
  • 锁定门或区域,直到达成特定里程碑
  • 根据里程碑状态创建条件性奖励或交互
  • 向玩家提供进度反馈

配置:

{
  "Type": "*CheckMilestone",
  "Milestone ID": "my_milestone_id"
}

行为:

  • 如果完成: 发送绿色成功通知,显示里程碑名称 + "Complete",返回 Finished 状态(交互成功)
  • 如果未完成: 发送黄色警告通知,显示进度(例如,"Mining Challenge - Progress: 3/10"),返回 Failed 状态(交互失败)
  • 如果无效: 如果未找到里程碑ID,发送红色危险通知,返回 Failed 状态

示例用法 - 门控NPC对话:

{
  "RootInteractions": [
    {
      "Type": "*CheckMilestone",
      "Milestone ID": "Complete_Basic_Training"
    },
    {
      "Type": "*Dialogue",
      "DialogueId": "Advanced_Trainer_Welcome"
    }
  ]
}

仅当 "Complete_Basic_Training" 里程碑完成后,对话才会触发。

打开里程碑UI交互

ID: *OpenMilestonesUI

为玩家打开里程碑浏览器UI,方便查看所有可用里程碑及其进度。

使用场景:

  • 在世界中添加里程碑公告板或任务发布者
  • 创建专门的里程碑查看站
  • 通过NPC或告示牌提供快速UI访问
  • 设计里程碑中心或成就殿堂

配置:

{
  "Type": "*OpenMilestonesUI"
}

行为:

  • 打开完整的里程碑UI,带有分类筛选功能
  • 显示所有可用里程碑、进度和奖励
  • 始终返回 Finished 状态

示例用法 - 任务公告板:

{
  "RootInteractions": [
    {
      "Type": "*OpenMilestonesUI"
    }
  ]
}

将其附加到方块或NPC上,创建交互式里程碑查看器。

组合设置

渐进式任务链:

// milestone_mining_1.json
{
  "DisplayName": "采矿初体验",
  "Type": "BREAK_BLOCK",
  "TargetId": "Block_Ore_Copper",
  "RequiredCount": 1,
  "Rewards": [{"ItemId": "Tool_Pickaxe_Basic", "Quantity": 1}]
}

// milestone_mining_2.json
{
  "DisplayName": "矿石收集者",
  "Type": "BREAK_BLOCK",
  "TargetId": "Ore",
  "PartialMatch": true,
  "RequiredCount": 2,
  "PrerequisiteMilestones": ["First_Steps_in_Mining"]
}

收集挑战:

{
  "DisplayName": "盔甲收集者",
  "Type": "ITEM_COLLECTION",
  "TargetIds": [
    "Armor_Bronze_Chest",
    "Armor_Wood_Chest",
    "Armor_Leather_Heavy_Chest",
    "Armor_Cloth_Cotton_Chest"
  ],
  "RequiredCount": 2,
  "ShowReward": true
}

探索成就:

{
  "DisplayName": "世界探索者",
  "Type": "ZONE_DISCOVERY",
  "TargetIds": [
    "Zone_Emerald_Grove",
    "Zone_Howling_Sands",
    "Zone_Borea",
    "Zone_Devastated_Lands"
  ],
  "RequiredCount": 2
}

数据包分发

本插件不附带里程碑资源。要使用它:

  1. 安装插件 - 下载并安装此插件JAR文件
  2. 下载里程碑数据包 - 获取单独的、定义实际里程碑的里程碑资源包
  3. 安装数据包 - 将里程碑数据包资源放置到服务器的资源目录中

对于数据包创作者:

  • Server/Milestones/ 中创建您自己的里程碑JSON文件
  • 将本插件列为依赖项
  • 将您的数据包作为资源包单独分发

相关模组/数据包

  • 简单里程碑数据包 - 包含162个通用里程碑及各种奖励的入门合集(单独分发)

开发与支持

  • 资源编辑器集成,便于轻松创建里程碑
  • 使用Hytale的ECS进行持久化数据存储