任务包

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

任务功能包提供了出盒功能,可以创建玩家可以完成以获得奖励和进步的任务。所有任务必须有一个ID、类别和玩家必须完成的任务列表,才能完成任务。然而,任务列表可以为空,允许立即领取任务的奖励。

使用包裹的自定义选项,您可以将所有任务个性化,以满足您的独特游戏需求,例如:

  • 创建任务,将新玩家带入你的体验,并提高D1保留率
  • 通过添加中期到长期目标和进度感来瞄准D7和D30保留 以实现目标
  • 通过显示游戏中的各种系统来增加参与,并奖励玩家与它们互动。

获取包装

创建者商店是您可以使用的工具箱选项卡,可用于查找 Roblox 和 Roblox 社区制作的所有资产,包括模型、图像、网格、音频、插件、视频和字体资产。您可以使用创作者商店直接将一个或多个资产添加到开放体验中,包括功能包!

每个功能包都需要 核心 功能包正常运行。一旦 核心任务 功能包资产已位于您的道具,您可以在平台上的任何项目中重复使用它们。

要将库存的包从你的体验中获取到你的体验:

  1. 在工具栏中,选择视图标签。

  2. 点击 工具箱 。显示 工具箱 窗口。

    Studio's View tab with the Toolbox tool highlighted.
  3. 工具箱 窗口中,单击 库存 选项卡。显示 我的模型 排序。

    Studio's Toolbox window with the Inventory tab highlighted.
  4. 单击 功能包核心 瓦片,然后单击 任务功能包 瓦片。两个包文件夹都显示在 资源管理器 窗口。

  5. 将包裹文件夹拖入 复制存储

定义任务

每个可完成的任务包括完成任务所需的一组任务,配置选项和可选显示元数据,所有这些都可以在 ReplicatedStorage.Missions.Configs.Missions 内定义,其中类型从 Types 脚本中导出到同一文件夹。

必填字段

每个任务都需要以下字段。

名称类型描述
missionIdstring主任务表键。所有任务都由自己独特的字符串识别。
categoryIdstring任务必须属于一个类别,在用户界面中按类别进行分组。
taskstable玩家必须完成的任务列表,以完成任务。

解锁条件

默认情况下,任务会自动为玩家解锁,并且只能完成一次。然而,您可以使用以下 可选 配置选项来改变此行为。

名称类型描述
prerequisitestable在任务可以解锁之前必须完成的其他任务Id列表。
manualOnlybool禁用任务的自动解锁。相反,必须调用函数来解锁任务。还必须满足其他任何解锁条件。
availableAfterUtcbool在 UTC 指定的时间之前,无法解锁任务。
availableBeforeUtcbool任务在指定的 UTC 时间后无法解锁。如果在此时间之前解锁但未完成,任务将失败。
repeatablebool任务在完成后再次解锁。
repeatLimitnumber如果任务可重复,它不能重复超过这么多次。
repeatCooldownSecondsnumber如果任务可重复,在任务解锁之前会有一段延迟。
expireSecondsnumber如果任务未在指定的秒数内解锁并完成,则会失败。
expireCountOfflinebool如果任务有 expireSecondsexpireCountOffline 被设置为真实,玩家实际上不在体验中的时间将计入任务过期期限。

元数据

任务具有元数据,该元数据指定任务在任务用户界面中如何显示。您可以使用以下 可选 字段来自定义其元数据。

名称类型描述
displayNamestring用于在用户界面显示任务的名称,而不是 missionId
descriptionstring一个更长的文本块,提供有关任务的额外信息或上下文。
visibleAfterCompletebool如果设置为真实,任务将在完成但标记为完成后仍显示在任务列表中。
visibleAfterFailedbool如果设置为真,任务在失败但被标记为失败后仍会出现在任务列表中。
visibleBeforeUnlockedbool如果设置为真实,任务将可见但在完成前被锁定在任务列表中。
invisibleWhileActivebool如果设置为真实,任务即使在进行中也会隐形。
rewardstable奖励显示信息的列表。
  • assetID ( number ) - 任务在任务奖励下显示的图像ID。如果奖励存在,这是必需的。
  • displayName ( string ) - 在标志下显示在任务 UI 中的名称。

定义任务

每个任务可以有零或更多的任务。如果任务没有任务,它将在解锁后立即领取;如果任务有一个或多个任务,任务完成后,玩家可以收集与任务相关的任何奖励。每个任务都有一个 taskId , 这是与给定任务相关的任务的关键。

任务有两种类型:

  • 定时任务 - 让你在不同时间点开始和停止任务。任务计时器运行时必须等待一定时间,任务才完成。
  • 计数任务 - 让你增加或设置任务的进度。当进度达到设置值时,任务完成。

两种任务类型都共享以下字段:

名称类型描述
taskTypestring指定任务类型是否为计数或计时。
counterobject(可选)此任务的计数器。计数器是玩家特定的持久存储 для数字或计时器。多个任务可以跟踪单个计数还价;例如,如果多个任务跟踪玩家收集了多少硬币,那么它们都可以共享相同的“硬币”计数器。这些任务可以独立地跟踪收集到的新硬币,从零开始,或继续从计数器值开始计数(所有硬币已收集)。
  • counterIdstring) - 要跟踪的计数器 ID。使用此 ID 获取或设置计数还价的值。
  • continueFromCounter (可选 bool ) - 如果设置为真,任务进度将直接匹配计数器的值而不是增加的数量。
metadataobject(可选)关于任务在 UI 中显示的信息。
  • displayName ( string ) - 任务名称,用于在 UI 显示时使用。
  • numericType (可选 string ) - 任务中的进度号应如何显示。
    • 分数,例如5/10或5k/50k
    • 百分比,例如50%或10%
    • 长分数,例如5/10或5000/50000
    • 比较器,例如不完整
callToActionobject(可选)一个按钮,触发回调函数。
  • callbackfunction)- 由 callToAction 按钮触发的函数。
  • buttonText ( string ) - 按钮界面显示的文本。

计数任务领域

计数任务有一个必需值。当任务进度达到此数量时,任务完成。

名称类型描述
goalCountnumber(可选)完成任务所需的进度。

时间任务字段

时间任务有一个目标时间消耗量,并且被启动和停止。当目标时间消耗量达到时,任务完成。

名称类型描述
goalSecondsnumber完成任务所需的秒数。
startImmediatelybool如果任务必须在解锁后尽快开始计时,而不是在启动后才开始计时。
includesOfflineTimebool如果任务应包括玩家在体验中不活跃的时间。

配置类别

类别不需要明确定义以便使用,因为任务的类别具有默认值,将被使用。然而,您可以在 ReplicatedStorage.Missions.Configs.Categories 中配置这些值,以将额外的效果添加到类别。类别由独特的 CategoryIds 识别,与任务配置中引用的相同。

名称类型描述
repeatDelaySecondsnumber(可选) 如果设置,那么类别中的所有任务每当通过指定的时间量时都会重置,可以解锁、完成并重新领取奖励。这与可重复的任务不同,可在给定的类别中重复。

整合服务器逻辑

看看 ReplicatedStorage.Missions.Server.Examples.MissionsExample , 它显示了您的服务器如何与 任务包 功能包互动。

您主要需要将四个东西连接起来一次拖动 任务 功能包到您的体验中:

  1. 在你的任务配置中定义任务。

  2. 为您的体验添加逻辑以更新任务进度或与进度关联的计数器。

    阅读说明

    -- 通过跳跃任务在任务上提高进度
    Missions.addProgressToTask(player, "Jumping", "Jumps", 1)
    -- 启动在任务战斗时间上的计时器,使用战斗时间任务
    Missions.startTimedTask(player, "BattlingTime", "TimeInBattle")
    -- 停止计时器在任务战斗时间上执行 TimeInBattle 任务
    Missions.stopTimedTask(player, "BattlingTime", "TimeInBattle")
    -- 提高与跳跃计数还价相关的所有任务的进度
    CounterSystem.addCounter(player, "Jumps", 1)
    -- 启动与战斗时间计数器相关的所有定时任务的计时还价
    CounterSystem.startTimer(player, "TimeInBattle")
    -- 停止所有定时任务与战斗时间计数器相关的定时任还价
    CounterSystem.stopTimer(player, "TimeInBattle")
  3. 设置任务完成处理器,并可选择解锁或失败处理器。使用完成处理器来奖励体验中的任务的奖励。

    阅读说明

    local function completeHandler(player: Player, missionId: Types.MissionId)
    print(`{player} completed mission {missionId}`)
    -- 奖励玩家他们的奖励。
    end
    Missions.setCompletionHandler(missionId, completeHandler)
  4. 解锁不自动解锁的任务。 任务 功能包逻辑确保在任务完成之前满足所有任务要求,并且其奖励可收藏品。

    阅读说明

    Missions.unlockMission(player, "Manual")

配置常量

核心 功能包的常量在两个地方生活:

  • 共享常量生活在 ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants

  • 包装特定常量,在这里是 任务 功能包,生活在 ReplicatedStorage.Missions.Configs.Constants .

此外,您可以找到分布在一个位置的翻译字符串:ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings

自定义用户界面组件

通过修改包裹对象,例如颜色、字体和透明度,您可以调整任务 UI 的视觉呈现。例如,在 ReplicatedStorage.Missions.Configs.Constants 中,您可以启用 SingleTaskMode 将进度条显示在任务本身的任务上,用于任务数量仅为单个任务的任务。

此外,如果您的体验已经拥有与 任务 功能包集成的现有用户界面,客户端 包含了获取服务器发送玩家任务的所有必需功能。