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 postępować w swojej grze. Wszystkie misje muszą mieć identyfikator, kategorię i listę zadań, które gracze muszą wykonać, aby zakończyć misję. Jednak lista zadań może być 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 dotyczące rozgrywki, takie jak:

  • Tworzenie misji, które wprowadzają nowych graczy do Twojej gry i poprawiają retencję D1.
  • Celowanie w retencję D7 i D30 poprzez dodawanie celów średnio- i długoterminowych oraz poczucia postępu.
  • Zwiększanie zaangażowania poprzez ujawnianie różnych systemów w Twojej grze i nagradzanie graczy za interakcję z nimi.

Pobierz pakiet

Sklep Twórcy to zakładka w Narzędziu, której możesz użyć do znalezienia wszystkich zasobów stworzonych przez Roblox i społeczność Roblox do wykorzystania w Twoich projektach, w tym modele, obrazy, siatki, dźwięki, wtyczki, filmy i czcionki. Możesz użyć Sklepu Twórcy, aby dodać jeden lub więcej zasobów bezpośrednio do otwartej gry, w tym pakiety funkcji!

Każdy pakiet funkcji wymaga pakietu funkcji Core, aby działał poprawnie. Gdy zasoby pakietu Core i Misje znajdują się w Twoim inwentarzu, możesz je ponownie wykorzystać w dowolnym projekcie na platformie.

Aby przenieść pakiety z inwentarza do gry:

  1. Z menu Okno w Studio lub z paska narzędzi zakładki Strona główna, otwórz Narzędzie.

  2. W oknie Narzędzie kliknij zakładkę Inwentarz. Wyświetli się sortowanie Moje modele.

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

  4. Przeciągnij foldery pakietów do ReplicatedStorage.

Zdefiniuj misje

Każda misja do ukończenia 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 z skryptu Types w tym samym folderze.

Wymagane pola

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 mogą być ukończone dokładnie raz. Możesz jednak użyć następujących opcjonalnych opcji konfiguracyjnych, aby zmienić to zachowanie.

NazwaTypOpis
prerequisitestableLista innych missionIds, które muszą być ukończone, zanim misja może zostać odblokowana.
manualOnlyboolWyłącza automatyczne odblokowywanie misji. Zamiast tego, musi być wywołana funkcja, aby odblokować misję. Muszą być również spełnione wszelkie inne warunki odblokowania.
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 zostanie odblokowana, ale nie ukończona przed tym czasem, misja zostanie niepowodzeniem.
repeatableboolMisja zostaje odblokowana ponownie po jej ukończeniu.
repeatLimitnumberJeśli misja jest powtarzalna, nie może być powtarzana więcej niż określoną liczbę razy.
repeatCooldownSecondsnumberJeśli misja jest powtarzalna, istnieje opóźnienie przed jej odblokowaniem.
expireSecondsnumberJeśli misja jest odblokowana i nie ukończona w określonej liczbie sekund, to zakończy się niepowodzeniem.
expireCountOfflineboolJeśli misja ma expireSeconds i expireCountOffline jest ustawione na true, czas, gdy gracz nie jest faktycznie w grze, 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ć następujących opcjonalnych pól, aby dostosować ich metadane.

NazwaTypOpis
displayNamestringNazwa do wyświetlenia dla misji w interfejsie użytkownika zamiast missionId.
descriptionstringWiększy blok tekstu, który dostarcza dodatkowych informacji lub kontekstu na temat misji.
visibleAfterCompleteboolJeśli ustawione na true, misja będzie widoczna na liście misji nawet po jej ukończeniu, ale oznaczona jako ukończona.
visibleAfterFailedboolJeśli ustawione na true, misja będzie widoczna na liście misji nawet po jej niepowodzeniu, ale oznaczona jako nieudana.
visibleBeforeUnlockedboolJeśli ustawione na true, misja będzie widoczna, ale zablokowana na liście misji przed jej dostępnością do ukończenia.
invisibleWhileActiveboolJeśli ustawione na true, misja będzie niewidoczna nawet podczas aktywnego postępu.
rewardstableLista informacji o wyświetlaniu nagród.
  • assetID (number) - ID 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 ma zero zadań, można ją odebrać natychmiast po 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 kluczem związanym 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 czasowych. Musi upłynąć określona ilość czasu, podczas gdy zegar zadania działa, a następnie zadanie jest ukończone.
  • Zadania liczbowe - Pozwalają na dodawanie lub ustawianie postępu zadania. Gdy postęp osiągnie ustaloną wartość, zadanie jest ukończone.

Oba typy zadań mają następujące pola:

NazwaTypOpis
taskTypestringOkreśla, czy typ zadania to liczba czy czas.
counterobject(Opcjonalne) Licznik, który to zadanie śledzi. Liczniki to specyficzne dla gracza trwałe przechowywanie dla 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ł, to wszystkie mogą dzielić ten sam licznik „monet”. Te zadania mogą niezależnie śledzić nowe zebrane monety, zaczynając od zera, lub kontynuować liczenie od wartości licznika (wszystkie już zebrane monety).
  • counterId (string) - ID licznika, który ma być śledzony. Użyj tego ID, 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ą wzrosło.
metadataobject(Opcjonalne) Informacje o tym, jak zadanie wyświetla się w interfejsie użytkownika.
  • displayName (string) - Nazwa zadania, używana podczas wyświetlania w interfejsie użytkownika.
  • numericType (Opcjonalne string) - jak liczba postępu w zadaniu powinna być wyświetlana.
    • Ułamek, np. 5/10 lub 5k/50k
    • Procent, np. 50% lub 10%
    • Długi ułamek, np. 5/10 lub 5000/50000
    • Boolean, np. Nieukończone
callToActionobject(Opcjonalne) Przycisk, który wywołuje funkcję zwrotną.
  • callback (function) - Funkcja wywoływana przez przycisk callToAction.
  • buttonText (string) - Tekst, który jest wyświetlany w interfejsie przycisku.

Pola zadań liczbowych

Zadania liczbowe mają wymaganą wartość. Gdy postęp zadania osiągnie tę wartość, zadanie jest ukończone.

NazwaTypOpis
goalCountnumber(Opcjonalne) Postęp wymagany do ukończenia zadania.

Pola zadań czasowych

Zadania czasowe mają docelową ilość czasu spędzonego, a także są uruchamiane i zatrzymywane. Gdy docelowa ilość czasu zostanie osiągnięta, zadanie jest ukończone.

NazwaTypOpis
goalSecondsnumberLiczba sekund, które muszą upłynąć, aby ukończyć zadanie.
startImmediatelyboolJeśli zadanie powinno zacząć liczyć czas, gdy tylko zostanie odblokowane, a nie tylko po jego rozpoczęciu.
includesOfflineTimeboolJeśli zadanie powinno uwzględniać czas spędzony, gdy gracz nie jest aktywnie w grze.

Skonfiguruj kategorie

Kategorie nie muszą być wyraźnie definiowane, aby mogły być używane, ponieważ kategoria dla misji ma domyślne wartości, 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 są odniesione w konfiguracji misji.

NazwaTypOpis
repeatDelaySecondsnumber(Opcjonalne) Jeśli ustawione, wszystkie misje w kategorii są resetowane za każdym razem, gdy upłynie określona ilość czasu, i mogą być odblokowywane, ukończane, a ich nagrody ponownie odbierane. To jest oddzielne od misji powtarzalnych, które są powtarzalne w danej kategorii powtórzeń.

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 głównie podłączyć cztery rzeczy po przeciągnięciu pakietu funkcji Misje do swojej gry:

  1. Zdefiniuj misje w swojej konfiguracji misji.

  2. Dodaj logikę do swojej gry, aby zaktualizować 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 CzasWBitwie
    Missions.startTimedTask(player, "CzasWalka", "CzasWBitwie")
    -- Zatrzymuje zegar w misji CzasWalka z zadaniem CzasWBitwie
    Missions.stopTimedTask(player, "CzasWalka", "CzasWBitwie")
    -- Zwiększa postęp we wszystkich zadaniach powiązanych z licznikiem Skoki
    CounterSystem.addCounter(player, "Skoki", 1)
    -- Rozpoczyna zegar we wszystkich zadaniach czasowych powiązanych z licznikiem CzasWBitwie
    CounterSystem.startTimer(player, "CzasWBitwie")
    -- Zatrzymuje zegar we wszystkich zadaniach czasowych powiązanych z licznikiem CzasWBitwie
    CounterSystem.stopTimer(player, "CzasWBitwie")
  3. Ustaw obsługiwacze ukończenia misji, a opcjonalnie obsługiwacze odblokowania lub niepowodzenia. Użyj obsługiwacza ukończenia, aby nagrodzić nagrody z misji w swojej grze.

    README
    local function completeHandler(player: Player, missionId: Types.MissionId)
    print(`{player} ukończył misję {missionId}`)
    -- Nagradzaj gracza jego nagrodami.
    end
    Missions.setCompletionHandler(missionId, completeHandler)
  4. Odblokuj misje, które nie są odblokowywane automatycznie. Logika pakietu funkcji Misje zapewnia, że wszystkie wymagania misji są spełnione przed ukończeniem misji, a jej nagrody są do odebrania.

    README
    Missions.unlockMission(player, "Ręczne")

Skonfiguruj stałe

Stałe dla pakietu funkcji Core znajdują się w dwóch miejscach:

  • 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 rozdzielone w jednym miejscu: ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.

Dostosuj komponenty UI

Poprzez modyfikację obiektów pakietu, takich jak kolory, czcionka 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 Twoja gra 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.