Pakiet funkcji Misje oferuje gotową funkcjonalność do tworzenia misji, które gracze mogą ukończyć, aby zdobyć nagrody i rozwijać się w Twoim doświadczeniu. Wszystkie misje muszą mieć identyfikator, kategorię oraz listę zadań, które gracze muszą wykonać, aby zakończyć misję. Lista zadań może być jednak pusta, co pozwala na natychmiastowe odebranie nagród za misję.
Korzystając z opcji dostosowywania pakietu, możesz spersonalizować wszystkie misje, aby spełniały Twoje unikalne wymagania rozgrywki, takie jak:
- Tworzenie misji, które wprowadzają nowych graczy do Twojego doświadczenia i poprawiają retencję D1.
- Skierowanie na retencję D7 i D30 poprzez dodanie średnio- i długoterminowych celów oraz poczucia rozwoju.
- Zwiększanie zaangażowania poprzez ujawnienie różnych systemów w Twojej grze i nagradzanie graczy za interakcję z nimi.

Uzyskaj pakiet
Sklep Twórcy to zakładka w Toolbox, którą możesz wykorzystać do znajdowania wszystkich zasobów stworzonych przez Roblox oraz społeczność Roblox do użycia w Twoich projektach, w tym modeli, obrazów, siatek, dźwięków, wtyczek, wideo i czcionek. Możesz użyć Sklepu Twórcy, aby dodać jeden lub więcej zasobów bezpośrednio do otwartego doświadczenia, w tym pakiety funkcji!
Każdy pakiet funkcji wymaga pakietu funkcji Core, aby działał poprawnie. Gdy zasoby pakietu Core i Missions znajdują się w Twoim ekwipunku, możesz je ponownie użyć w dowolnym projekcie na platformie.
Aby przenieść pakiety z ekwipunku do doświadczenia:
Dodaj Core i Missions do swojego ekwipunku w Studio, klikając link Dodaj do Ekwipunku w poniższym zestawie komponentów.
W menu Okno Studio lub na pasku narzędzi w zakładce Strona główna, otwórz Toolbox.
W oknie Toolbox kliknij zakładkę Ekwipunek. Wyświetli się sortowanie Moje modele.

Kliknij kafelek Pakiet funkcji Core, a następnie kafelek Pakiet funkcji Misji. Oba foldery pakietów wyświetlą się w oknie Eksplorator.
Przeciągnij foldery pakietów do ReplicatedStorage.
Zdefiniuj misje
Każda ukończona misja zawiera zestaw zadań, które muszą być zakończone, aby ukończyć misję, opcje konfiguracyjne oraz opcjonalne metadane wyświetlania, które można zdefiniować w ReplicatedStorage.Missions.Configs.Missions, z typami eksportowanymi ze skryptu Types w tym samym folderze.
Pola wymagane
Poniższe pola są wymagane dla każdej misji.
| Nazwa | Typ | Opis |
|---|---|---|
| missionId | string | Główny klucz tabeli Misji. Wszystkie misje są identyfikowane przez swój unikalny ciąg. |
| categoryId | string | Misje muszą należeć do kategorii i są grupowane według kategorii w interfejsie użytkownika. |
| tasks | table | Lista zadań, które gracz musi ukończyć, aby zakończyć misję. |
Warunki odblokowania
Domyślnie misje są automatycznie odblokowywane dla graczy i można je ukończyć dokładnie raz. Możesz jednak użyć poniższych opcjonalnych opcji konfiguracyjnych, aby zmienić to zachowanie.
| Nazwa | Typ | Opis |
|---|---|---|
| prerequisites | table | Lista innych identyfikatorów misji, które muszą być ukończone przed odblokowaniem tej misji. |
| manualOnly | bool | Wyłącza automatyczne odblokowanie misji. Zamiast tego musi być wywołana funkcja, aby odblokować misję. Jakiekolwiek inne warunki odblokowania również muszą być spełnione. |
| availableAfterUtc | bool | Misja nie może być odblokowana przed określonym czasem w UTC. |
| availableBeforeUtc | bool | Misja nie może być odblokowana po określonym czasie w UTC. Jeśli jest odblokowana, ale nie ukończona przed tym czasem, misja zostanie nieudana. |
| repeatable | bool | Misja zostaje ponownie odblokowana po jej ukończeniu. |
| repeatLimit | number | Jeśli misja jest powtarzalna, nie może być powtarzana więcej niż określoną ilość razy. |
| repeatCooldownSeconds | number | Jeśli misja jest powtarzalna, występuje opóźnienie przed jej ponownym odblokowaniem. |
| expireSeconds | number | Jeśli misja jest odblokowana i nie ukończona w określonej liczbie sekund, wtedy zakończy się niepowodzeniem. |
| expireCountOffline | bool | Jeśli misja ma expireSeconds, a expireCountOffline jest ustawione na true, czas, gdy gracz nie jest aktywnie w doświadczeniu, będzie się liczył do wygaśnięcia misji. |
Metadane
Misje mają metadane, które określają, jak będą wyświetlane w interfejsie użytkownika Misji. Możesz użyć poniższych opcjonalnych pól, aby dostosować jego metadane.
| Nazwa | Typ | Opis |
|---|---|---|
| displayName | string | Nazwa wyświetlana dla misji w interfejsie użytkownika zamiast missionId. |
| description | string | Ważniejszy blok tekstu, który dostarcza dodatkowych informacji lub kontekstu na temat misji. |
| visibleAfterComplete | bool | Jeśli jest ustawione na true, misja pojawi się na liście misji nawet po jej ukończeniu, ale oznaczona jako ukończona. |
| visibleAfterFailed | bool | Jeśli jest ustawione na true, misja pojawi się na liście misji nawet po jej niepowodzeniu, ale oznaczona jako nieukończona. |
| visibleBeforeUnlocked | bool | Jeśli jest ustawione na true, misja będzie widoczna, ale zablokowana na liście misji zanim będzie dostępna do ukończenia. |
| invisibleWhileActive | bool | Jeśli jest ustawione na true, misja będzie niewidoczna nawet podczas aktywnego postępu. |
| rewards | table | Lista informacji o wyświetlanych nagrodach.
|
Zdefiniuj zadania
Każda misja może mieć zero lub więcej zadań. Jeśli misja nie ma zadań, może być odebrana natychmiast po jej odblokowaniu; jeśli misja ma jedno lub więcej zadań, po ich ukończeniu gracz może odebrać wszelkie nagrody związane z misją. Każde zadanie ma taskId, który jest związany z zadaniem dla danej misji.
Zadania występują w dwóch typach:
- Zadania czasowe - Pozwalają na rozpoczęcie i zatrzymanie zadania w różnych momentach. Musi upłynąć odpowiednia ilość czasu, podczas gdy zegar zadania działa, a następnie zadanie jest zakończone.
- Zadania liczbowe - Pozwalają na dodanie lub ustawienie postępu zadania. Gdy postęp osiągnie ustaloną wartość, zadanie jest ukończone.
Obydwa typy zadań mają następujące pola:
| Nazwa | Typ | Opis |
|---|---|---|
| taskType | string | Określa, czy typ zadania to liczba czy czas. |
| counter | object | (Opcjonalnie) Licznik, który śledzi to zadanie. Liczniki to specyficzne dla gracza, trwałe miejsca do przechowywania liczby lub timera. Wiele zadań może śledzić jeden licznik; na przykład jeśli więcej niż jedno zadanie śledzi, ile monet gracz zebrał, wtedy wszystkie mogą korzystać z tego samego licznika „monet”. Te zadania mogą niezależnie śledzić nowe zebrane monety, zaczynając od zera, lub kontynuować liczenie od wartości licznika (wszystkie zebrane monety).
|
| metadata | object | (Opcjonalnie) Informacje dotyczące tego, jak zadanie wyświetla się w interfejsie użytkownika.
|
| callToAction | object | (Opcjonalnie) Przycisk, który uruchamia funkcję zwrotną.
|
Pola zadań liczbowych
Zadania liczbowe mają wymagającą wartość. Gdy postęp zadania spełnia tę ilość, zadanie jest ukończone.
| Nazwa | Typ | Opis |
|---|---|---|
| goalCount | number | (Opcjonalnie) Postęp wymagany do ukończenia zadania. |
Pola zadań czasowych
Zadania czasowe mają określoną ilość czasu spędzonego, a ich rozpoczęcie i zakończenie. Gdy osiągnięta zostaje określona ilość czasu, zadanie jest ukończone.
| Nazwa | Typ | Opis |
|---|---|---|
| goalSeconds | number | Liczba sekund, które muszą upłynąć, aby zakończyć zadanie. |
| startImmediately | bool | Jeśli zadanie powinno rozpocząć liczenie czasu, gdy tylko zostanie odblokowane, zamiast tylko po jego rozpoczęciu. |
| includesOfflineTime | bool | Jeśli zadanie powinno uwzględniać czas spędzony, gdy gracz nie jest aktywnie w doświadczeniu. |
Skonfiguruj kategorie
Kategorie nie muszą być definiowane wprost, aby mogły być używane, ponieważ kategoria misji ma wartości domyślne, które będą używane. Możesz jednak skonfigurować te wartości w ReplicatedStorage.Missions.Configs.Categories, aby dodać dodatkowe efekty do kategorii. Kategorie są identyfikowane przez unikalne CategoryIds, te same, które były wymienione w konfiguracji misji.
| Nazwa | Typ | Opis |
|---|---|---|
| repeatDelaySeconds | number | (Opcjonalnie) Jeśli ustawione, wszystkie misje w kategorii są resetowane za każdym razem, gdy upłynie określona ilość czasu, i mogą być odblokowane, ukończone, a ich nagrody odebrane ponownie. To jest oddzielne od misji powtarzalnych, które są powtarzalne w danej kategorii powtarzalnej. |
Zintegruj logikę serwera
Zobacz ReplicatedStorage.Missions.Server.Examples.MissionsExample, który pokazuje, jak Twój serwer będzie współdziałał z pakietem funkcji Misje.
Musisz podłączyć głównie cztery rzeczy po przeciągnięciu pakietu funkcji Misje do swojego doświadczenia:
Zdefiniuj misje w swojej konfiguracji misji.
Dodaj logikę do swojego doświadczenia, aby aktualizować postęp zadań lub liczniki, do których postęp jest powiązany.
README-- Zwiększa postęp w misji Skakanie z zadaniem SkokiMissions.addProgressToTask(player, "Skakanie", "Skoki", 1)-- Rozpoczyna zegar w misji CzasWalka z zadaniem CzasWBatalachMissions.startTimedTask(player, "CzasWalka", "CzasWBatalach")-- Zatrzymuje zegar w misji CzasWalka z zadaniem CzasWBatalachMissions.stopTimedTask(player, "CzasWalka", "CzasWBatalach")-- Zwiększa postęp we wszystkich zadaniach powiązanych z licznikiem SkokiCounterSystem.addCounter(player, "Skoki", 1)-- Rozpoczyna zegar w wszystkich zadaniach czasowych powiązanych z licznikiem CzasWBatalachCounterSystem.startTimer(player, "CzasWBatalach")-- Zatrzymuje zegar w wszystkich zadaniach czasowych powiązanych z licznikiem CzasWBatalachCounterSystem.stopTimer(player, "CzasWBatalach")Ustaw obsługujące zakończenie misji oraz opcjonalnie obsługujące odblokowywanie lub niepowodzenie. Użyj obsługi zakończenia, aby nagrodzić graczy nagrodami z misji w Twoim doświadczeniu.
READMElocal function completeHandler(player: Player, missionId: Types.MissionId)print(`{player} ukończył misję {missionId}`)-- Nagradza gracza jego nagrodami.endMissions.setCompletionHandler(missionId, completeHandler)Odblokuj misje, które nie są automatycznie odblokowywane. Logika pakietu funkcji Misje zapewnia, że wszystkie wymagania misji są spełnione przed ukończeniem misji i możliwością odebrania jej nagród.
READMEMissions.unlockMission(player, "Ręczne")
Skonfiguruj stałe
Stałe dla pakietu funkcji Core znajdują się w dwóch lokalizacjach:
Wspólne stałe znajdują się w ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants.
Stałe specyficzne dla pakietu, w tym przypadku pakietu funkcji Misje, znajdują się w ReplicatedStorage.Missions.Configs.Constants.
Dodatkowo możesz znaleźć ciągi do tłumaczenia podzielone w jednej lokalizacji: ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.
Dostosuj komponenty UI
Modyfikując obiekty pakietu, takie jak kolory, czcionki i przezroczystość, możesz dostosować wizualną prezentację interfejsu użytkownika misji. Na przykład, w ReplicatedStorage.Missions.Configs.Constants, możesz włączyć SingleTaskMode, aby wyświetlić pasek postępu dla zadania bezpośrednio na misji dla misji, które mają tylko jedno zadanie.
Dodatkowo, jeśli Twoje doświadczenie już ma istniejący interfejs użytkownika, który chciałbyś zintegrować z pakietem funkcji Misje, klient ModuleScript MissionsClient zawiera wszystkie funkcje niezbędne do przesyłania informacji o misjach gracza z serwera.