Gói tính năng Nhiệm vụ cung cấp chức năng sẵn có để tạo nhiệm vụ mà người chơi có thể hoàn thành để đạt được phần thưởng và tiến bộ trong trải nghiệm của bạn. Tất cả nhiệm vụ phải có một ID, danh mục và một danh sách các nhiệm vụ mà người chơi phải hoàn thành để hoàn tất nhiệm vụ. Tuy nhiên, danh sách nhiệm vụ có thể để trống, cho phép phần thưởng của nhiệm vụ được nhận ngay lập tức.
Bằng cách sử dụng các tùy chọn tùy chỉnh của gói, bạn có thể cá nhân hóa tất cả nhiệm vụ để đáp ứng các yêu cầu gameplay độc đáo của bạn, chẳng hạn như:
- Tạo nhiệm vụ để hướng dẫn người chơi mới vào trải nghiệm của bạn và cải thiện tỷ lệ giữ chân D1.
- Nhắm đến tỷ lệ giữ chân D7 và D30 bằng cách thêm các mục tiêu trung hạn đến dài hạn và cảm giác tiến bộ.
- Tăng cường sự tham gia bằng cách hiển thị các hệ thống khác nhau trong trò chơi của bạn và thưởng cho người chơi vì đã tương tác với chúng.

Nhận gói
Cửa hàng Tạo là một tab của Toolbox mà bạn có thể sử dụng để tìm tất cả các tài sản được tạo bởi Roblox và cộng đồng Roblox để sử dụng trong các dự án của bạn, bao gồm mô hình, hình ảnh, lưới, âm thanh, plugin, video, và tài sản phông chữ. Bạn có thể sử dụng Cửa hàng Tạo để thêm một hoặc nhiều tài sản trực tiếp vào một trải nghiệm đang mở, bao gồm cả gói tính năng!
Mỗi gói tính năng yêu cầu gói tính năng Core để hoạt động đúng cách. Khi các tài sản gói Core và Nhiệm vụ nằm trong kho của bạn, bạn có thể tái sử dụng chúng trong bất kỳ dự án nào trên nền tảng.
Để đưa các gói từ kho của bạn vào trải nghiệm:
Thêm Core và Nhiệm vụ vào kho của bạn trong Studio bằng cách nhấp vào liên kết Thêm vào Kho trong bộ các thành phần sau.
Từ menu Cửa sổ hoặc thanh công cụ tab Trang chủ của Studio, mở Toolbox.
Trong cửa sổ Toolbox, nhấp vào tab Kho. Sắp xếp Mô hình của tôi hiển thị.

Nhấp vào ô Gói Tính Năng Core, sau đó nhấp vào ô Gói Tính Năng Nhiệm vụ. Cả hai thư mục gói sẽ hiển thị trong cửa sổ Khám phá.
Kéo các thư mục gói vào ReplicatedStorage.
Định nghĩa nhiệm vụ
Mỗi nhiệm vụ có thể hoàn thành bao gồm một tập hợp các nhiệm vụ phải được hoàn thành để hoàn tất nhiệm vụ, các tùy chọn cấu hình và metadata hiển thị tùy chọn, tất cả đều có thể được xác định trong ReplicatedStorage.Missions.Configs.Missions, với các loại được xuất từ tập lệnh Types trong cùng thư mục.
Các trường cần thiết
Các trường sau đây là bắt buộc cho mỗi nhiệm vụ.
| Tên | Loại | Mô tả |
|---|---|---|
| missionId | string | Khóa bảng Nhiệm vụ chính. Tất cả nhiệm vụ được xác định bằng chuỗi duy nhất của chúng. |
| categoryId | string | Các nhiệm vụ phải thuộc về một danh mục và được nhóm theo danh mục trong UI. |
| tasks | table | Một danh sách nhiệm vụ mà người chơi phải hoàn thành để hoàn tất nhiệm vụ. |
Điều kiện mở khóa
Theo mặc định, các nhiệm vụ sẽ được mở khóa cho người chơi tự động và có thể được hoàn thành đúng một lần. Tuy nhiên, bạn có thể sử dụng các tùy chọn cấu hình tùy chọn sau để thay đổi hành vi này.
| Tên | Loại | Mô tả |
|---|---|---|
| prerequisites | table | Một danh sách các missionId khác mà phải được hoàn thành trước khi nhiệm vụ có thể được mở khóa. |
| manualOnly | bool | Vô hiệu hóa sự mở khóa tự động của nhiệm vụ. Thay vào đó, một hàm phải được gọi để mở khóa nhiệm vụ. Bất kỳ điều kiện mở khóa nào khác cũng phải được đáp ứng. |
| availableAfterUtc | bool | Nhiệm vụ không thể được mở khóa trước thời gian chỉ định theo UTC. |
| availableBeforeUtc | bool | Nhiệm vụ không thể được mở khóa sau thời gian chỉ định theo UTC. Nếu nó được mở khóa nhưng không hoàn thành trước thời gian này, nhiệm vụ sẽ bị thất bại. |
| repeatable | bool | Nhiệm vụ sẽ được mở khóa lại sau khi được hoàn thành. |
| repeatLimit | number | Nếu nhiệm vụ có thể lặp lại, nó không thể được lặp lại nhiều hơn số lần này. |
| repeatCooldownSeconds | number | Nếu nhiệm vụ có thể lặp lại, sẽ có một khoảng thời gian trì hoãn trước khi nhiệm vụ được mở khóa. |
| expireSeconds | number | Nếu nhiệm vụ được mở khóa và không được hoàn thành trong khoảng thời gian chỉ định, thì nhiệm vụ sẽ bị thất bại. |
| expireCountOffline | bool | Nếu nhiệm vụ có expireSeconds và expireCountOffline được đặt thành true, thời gian khi người chơi không thực sự ở trong trải nghiệm sẽ được tính vào thời gian hết hạn nhiệm vụ. |
Metadata
Các nhiệm vụ có metadata chỉ định cách chúng sẽ được hiển thị trong giao diện người dùng Nhiệm vụ. Bạn có thể sử dụng các trường tùy chọn sau đây để tùy chỉnh metadata của nó.
| Tên | Loại | Mô tả |
|---|---|---|
| displayName | string | Một tên để hiển thị cho nhiệm vụ trong giao diện người dùng thay vì missionId. |
| description | string | Một đoạn văn bản dài hơn cung cấp thông tin hoặc bối cảnh bổ sung về nhiệm vụ. |
| visibleAfterComplete | bool | Nếu được đặt thành true, nhiệm vụ sẽ xuất hiện trong danh sách các nhiệm vụ ngay cả sau khi nó đã hoàn thành nhưng được đánh dấu là đã hoàn thành. |
| visibleAfterFailed | bool | Nếu được đặt thành true, nhiệm vụ sẽ xuất hiện trong danh sách các nhiệm vụ ngay cả sau khi nó đã thất bại nhưng được đánh dấu là đã thất bại. |
| visibleBeforeUnlocked | bool | Nếu được đặt thành true, nhiệm vụ sẽ hiển thị nhưng bị khóa trong danh sách nhiệm vụ trước khi có sẵn để hoàn thành. |
| invisibleWhileActive | bool | Nếu được đặt thành true, nhiệm vụ sẽ bị vô hình ngay cả khi đang trong tiến trình hoạt động. |
| rewards | table | Một danh sách thông tin hiển thị phần thưởng.
|
Định nghĩa nhiệm vụ
Mỗi nhiệm vụ có thể có không hoặc có nhiều nhiệm vụ. Nếu một nhiệm vụ không có nhiệm vụ nào, nó có thể được nhận ngay sau khi mở khóa; nếu một nhiệm vụ có một hoặc nhiều nhiệm vụ, một khi các nhiệm vụ hoàn tất, người chơi có thể nhận bất kỳ phần thưởng nào liên kết với nhiệm vụ. Mỗi nhiệm vụ có một taskId, đó là khóa liên kết với nhiệm vụ cho một nhiệm vụ nhất định.
Các nhiệm vụ có hai loại:
- Nhiệm vụ Thời gian - Cho phép bạn bắt đầu và dừng nhiệm vụ tại các điểm khác nhau trong thời gian. Một khoảng thời gian nhất định phải trôi qua khi đồng hồ đếm ngược của nhiệm vụ đang chạy, sau đó nhiệm vụ sẽ hoàn tất.
- Nhiệm vụ Đếm - Cho phép bạn thêm vào hoặc thiết lập tiến trình của nhiệm vụ. Khi tiến trình đạt một giá trị đã thiết lập, nhiệm vụ sẽ hoàn tất.
Cả hai loại nhiệm vụ đều chia sẻ các trường sau:
| Tên | Loại | Mô tả |
|---|---|---|
| taskType | string | Xác định nếu loại nhiệm vụ là đếm hoặc thời gian. |
| counter | object | (Tùy chọn) Bộ đếm mà nhiệm vụ này theo dõi. Các bộ đếm là lưu trữ bền vững đặc trưng cho người chơi cho một số hoặc một bộ đếm thời gian. Nhiều nhiệm vụ có thể theo dõi một bộ đếm duy nhất; chẳng hạn, nếu có nhiều nhiệm vụ theo dõi số lượng đồng xu mà người chơi đã thu thập, thì chúng có thể chia sẻ cùng một bộ đếm “đồng xu”. Các nhiệm vụ này có thể độc lập theo dõi số đồng xu mới đã thu thập, bắt đầu từ số không, hoặc tiếp tục đếm từ giá trị bộ đếm (tất cả đồng xu đã thu thập trước đó).
|
| metadata | object | (Tùy chọn) Thông tin về cách nhiệm vụ hiển thị trong UI.
|
| callToAction | object | (Tùy chọn) Một nút kích hoạt một hàm callback.
|
Các trường nhiệm vụ đếm
Nhiệm vụ đếm có một giá trị yêu cầu. Khi tiến trình nhiệm vụ đạt số lượng này, nhiệm vụ sẽ hoàn tất.
| Tên | Loại | Mô tả |
|---|---|---|
| goalCount | number | (Tùy chọn) Tiến trình yêu cầu để hoàn tất nhiệm vụ. |
Các trường nhiệm vụ thời gian
Nhiệm vụ thời gian có một khoảng thời gian mục tiêu cần chi tiêu, và phải bắt đầu và dừng. Khi thời gian mục tiêu được thỏa mãn, nhiệm vụ sẽ hoàn tất.
| Tên | Loại | Mô tả |
|---|---|---|
| goalSeconds | number | Số giây cần trôi qua để hoàn tất nhiệm vụ. |
| startImmediately | bool | Nếu nhiệm vụ nên bắt đầu đếm thời gian ngay khi nó được mở khóa, thay vì chỉ sau khi nó được bắt đầu. |
| includesOfflineTime | bool | Nếu nhiệm vụ nên bao gồm thời gian đã chi tiêu trong khi người chơi không hoạt động trong trải nghiệm. |
Cấu hình các danh mục
Các danh mục không cần phải được định nghĩa rõ ràng để được sử dụng, vì danh mục cho một nhiệm vụ có các giá trị mặc định sẽ được sử dụng. Tuy nhiên, bạn có thể cấu hình những giá trị này trong ReplicatedStorage.Missions.Configs.Categories để thêm các hiệu ứng bổ sung vào danh mục. Các danh mục được xác định bởi các CategoryIds duy nhất, cùng các ID được tham chiếu trong cấu hình nhiệm vụ.
| Tên | Loại | Mô tả |
|---|---|---|
| repeatDelaySeconds | number | (Tùy chọn) Nếu được đặt, tất cả các nhiệm vụ trong danh mục sẽ được đặt lại mỗi khi thời gian chỉ định trôi qua, và có thể được mở khóa, hoàn thành và phần thưởng của chúng được nhận lại. Điều này tách biệt với các nhiệm vụ có thể lặp lại, mà có thể lặp lại trong một danh mục đã cho. |
Tích hợp logic máy chủ
Hãy xem ReplicatedStorage.Missions.Server.Examples.MissionsExample, nó cho thấy cách máy chủ của bạn sẽ tương tác với gói tính năng Nhiệm vụ.
Bạn chủ yếu cần kết nối bốn điều khiển khi kéo gói tính năng Nhiệm vụ vào trải nghiệm của bạn:
Định nghĩa nhiệm vụ trong cấu hình nhiệm vụ của bạn.
Thêm logic vào trải nghiệm của bạn để cập nhật tiến trình nhiệm vụ hoặc các bộ đếm mà tiến trình được liên kết.
README-- Tăng tiến trình trên nhiệm vụ Jumping với một nhiệm vụ JumpsMissions.addProgressToTask(player, "Jumping", "Jumps", 1)-- Bắt đầu đồng hồ đếm thời gian trên nhiệm vụ BattlingTime với một nhiệm vụ TimeInBattleMissions.startTimedTask(player, "BattlingTime", "TimeInBattle")-- Dừng đồng hồ đếm thời gian trên nhiệm vụ BattlingTime với một nhiệm vụ TimeInBattleMissions.stopTimedTask(player, "BattlingTime", "TimeInBattle")-- Tăng tiến trình trên tất cả nhiệm vụ liên kết với bộ đếm JumpsCounterSystem.addCounter(player, "Jumps", 1)-- Bắt đầu đồng hồ đếm thời gian trên tất cả nhiệm vụ có thời gian liên kết với bộ đếm thời gian TimeInBattleCounterSystem.startTimer(player, "TimeInBattle")-- Dừng đồng hồ đếm thời gian trên tất cả nhiệm vụ có thời gian liên kết với bộ đếm thời gian TimeInBattleCounterSystem.stopTimer(player, "TimeInBattle")Đặt các handler hoàn thành nhiệm vụ, và tùy chọn là các handler mở khóa hoặc thất bại. Sử dụng handler hoàn thành để thưởng cho phần thưởng từ nhiệm vụ trong trải nghiệm của bạn.
READMElocal function completeHandler(player: Player, missionId: Types.MissionId)print(`{player} đã hoàn thành nhiệm vụ {missionId}`)-- Thưởng cho người chơi phần thưởng của họ.endMissions.setCompletionHandler(missionId, completeHandler)Mở khóa các nhiệm vụ chưa được mở khóa tự động. Logic của gói tính năng Nhiệm vụ đảm bảo rằng tất cả các yêu cầu nhiệm vụ được đáp ứng trước khi nhiệm vụ hoàn thành, và phần thưởng của nó có thể được thu thập.
READMEMissions.unlockMission(player, "Manual")
Cấu hình hằng số
Các hằng số cho gói tính năng Core sống trong hai vị trí:
Các hằng số chung sống trong ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants.
Các hằng số cụ thể của gói, trong trường hợp này là gói tính năng Nhiệm vụ, sống trong ReplicatedStorage.Missions.Configs.Constants.
Ngoài ra, bạn có thể tìm thấy các chuỗi cho việc dịch được tách ra thành một vị trí: ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.
Tùy chỉnh các thành phần UI
Bằng cách sửa đổi các đối tượng gói, chẳng hạn như màu sắc, phông chữ và độ trong suốt, bạn có thể điều chỉnh cách trình bày trực quan của giao diện nhiệm vụ. Ví dụ, trong ReplicatedStorage.Missions.Configs.Constants, bạn có thể kích hoạt SingleTaskMode để hiển thị thanh tiến trình cho một nhiệm vụ trực tiếp trên nhiệm vụ đó cho các nhiệm vụ chỉ có một nhiệm vụ duy nhất.
Ngoài ra, nếu trải nghiệm của bạn đã có một UI hiện có mà bạn muốn tích hợp với gói tính năng Nhiệm vụ, mô-đun MissionsClient của máy khách ModuleScript chứa tất cả các hàm cần thiết để lấy thông tin về nhiệm vụ của người chơi được gửi từ máy chủ.