Pakiet Misji

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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:

  1. W menu Okno Studio lub na pasku narzędzi w zakładce Strona główna, otwórz Toolbox.

  2. W oknie Toolbox kliknij zakładkę Ekwipunek. Wyświetli się sortowanie Moje modele.

    Okno Toolbox w Studio z wyróżnioną zakładką Ekwipunek.
  3. Kliknij kafelek Pakiet funkcji Core, a następnie kafelek Pakiet funkcji Misji. Oba foldery pakietów wyświetlą się w oknie Eksplorator.

  4. 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.

NazwaTypOpis
missionIdstringGłówny klucz tabeli Misji. Wszystkie misje są identyfikowane przez swój unikalny ciąg.
categoryIdstringMisje muszą należeć do kategorii i są grupowane według kategorii w interfejsie użytkownika.
taskstableLista 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.

NazwaTypOpis
prerequisitestableLista innych identyfikatorów misji, które muszą być ukończone przed odblokowaniem tej misji.
manualOnlyboolWyłącza automatyczne odblokowanie misji. Zamiast tego musi być wywołana funkcja, aby odblokować misję. Jakiekolwiek inne warunki odblokowania również muszą być spełnione.
availableAfterUtcboolMisja nie może być odblokowana przed określonym czasem w UTC.
availableBeforeUtcboolMisja 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.
repeatableboolMisja zostaje ponownie odblokowana po jej ukończeniu.
repeatLimitnumberJeśli misja jest powtarzalna, nie może być powtarzana więcej niż określoną ilość razy.
repeatCooldownSecondsnumberJeśli misja jest powtarzalna, występuje opóźnienie przed jej ponownym odblokowaniem.
expireSecondsnumberJeśli misja jest odblokowana i nie ukończona w określonej liczbie sekund, wtedy zakończy się niepowodzeniem.
expireCountOfflineboolJeś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.

NazwaTypOpis
displayNamestringNazwa wyświetlana dla misji w interfejsie użytkownika zamiast missionId.
descriptionstringWażniejszy blok tekstu, który dostarcza dodatkowych informacji lub kontekstu na temat misji.
visibleAfterCompleteboolJeśli jest ustawione na true, misja pojawi się na liście misji nawet po jej ukończeniu, ale oznaczona jako ukończona.
visibleAfterFailedboolJeśli jest ustawione na true, misja pojawi się na liście misji nawet po jej niepowodzeniu, ale oznaczona jako nieukończona.
visibleBeforeUnlockedboolJeśli jest ustawione na true, misja będzie widoczna, ale zablokowana na liście misji zanim będzie dostępna do ukończenia.
invisibleWhileActiveboolJeśli jest ustawione na true, misja będzie niewidoczna nawet podczas aktywnego postępu.
rewardstableLista informacji o wyświetlanych nagrodach.
  • assetID (number) - Identyfikator obrazu, który wyświetla się w interfejsie użytkownika misji pod nagrodami za zadanie. Jest to wymagane, jeśli nagroda jest obecna.
  • displayName (string) - Nazwa, która wyświetla się w interfejsie użytkownika misji pod ikoną.

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:

NazwaTypOpis
taskTypestringOkreśla, czy typ zadania to liczba czy czas.
counterobject(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).
  • counterId (string) - Identyfikator licznika, który ma być śledzony. Użyj tego identyfikatora, aby uzyskać lub ustawić wartość licznika.
  • continueFromCounter (Opcjonalne bool) - Jeśli ustawione na true, postęp zadania będzie bezpośrednio odpowiadał wartości licznika, a nie ilości, o którą został zwiększony.
metadataobject(Opcjonalnie) Informacje dotyczące tego, jak zadanie wyświetla się w interfejsie użytkownika.
  • displayName (string) - Nazwa zadania, używana, gdy jest wyświetlana w interfejsie użytkownika.
  • numericType (Opcjonalne string) - jak postęp liczony w zadaniu powinien być wyświetlany.
    • Ułamek, np. 5/10 lub 5k/50k
    • Procent, np. 50% lub 10%
    • LongFraction, np. 5/10 lub 5000/50000
    • Boolean, np. Nieukończone
callToActionobject(Opcjonalnie) Przycisk, który uruchamia funkcję zwrotną.
  • callback (function) - Funkcja wywołana przez przycisk callToAction.
  • buttonText (string) - Tekst wyświetlany w interfejsie przycisku.

Pola zadań liczbowych

Zadania liczbowe mają wymagającą wartość. Gdy postęp zadania spełnia tę ilość, zadanie jest ukończone.

NazwaTypOpis
goalCountnumber(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.

NazwaTypOpis
goalSecondsnumberLiczba sekund, które muszą upłynąć, aby zakończyć zadanie.
startImmediatelyboolJeśli zadanie powinno rozpocząć liczenie czasu, gdy tylko zostanie odblokowane, zamiast tylko po jego rozpoczęciu.
includesOfflineTimeboolJeś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.

NazwaTypOpis
repeatDelaySecondsnumber(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:

  1. Zdefiniuj misje w swojej konfiguracji misji.

  2. 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 Skoki
    Missions.addProgressToTask(player, "Skakanie", "Skoki", 1)
    -- Rozpoczyna zegar w misji CzasWalka z zadaniem CzasWBatalach
    Missions.startTimedTask(player, "CzasWalka", "CzasWBatalach")
    -- Zatrzymuje zegar w misji CzasWalka z zadaniem CzasWBatalach
    Missions.stopTimedTask(player, "CzasWalka", "CzasWBatalach")
    -- Zwiększa postęp we wszystkich zadaniach powiązanych z licznikiem Skoki
    CounterSystem.addCounter(player, "Skoki", 1)
    -- Rozpoczyna zegar w wszystkich zadaniach czasowych powiązanych z licznikiem CzasWBatalach
    CounterSystem.startTimer(player, "CzasWBatalach")
    -- Zatrzymuje zegar w wszystkich zadaniach czasowych powiązanych z licznikiem CzasWBatalach
    CounterSystem.stopTimer(player, "CzasWBatalach")
  3. 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.

    README

    local function completeHandler(player: Player, missionId: Types.MissionId)
    print(`{player} ukończył misję {missionId}`)
    -- Nagradza gracza jego nagrodami.
    end
    Missions.setCompletionHandler(missionId, completeHandler)
  4. 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.

    README

    Missions.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.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.