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 funkcjonalność out-of-the-box do tworzenia misji, które gracze mogą ukończyć, aby uzyskać nagrody i postęp w swoim doświadczeniu.Wszystkie misje muszą mieć identyfikator, kategoriai listę zadań, które gracze muszą ukończyć, aby ukończyć misję.Jednak lista zadań może być pusta, umożliwiając natychmiastowe odebranie nagród misji.

Wykorzystując opcje personalizacji pakietu, możesz dostosować wszystkie misje, aby spełnić swoje unikalne wymagania dotyczące rozgrywki, takie jak:

Zdobądź pakiet

Sklep Twórców jest zakładką Toolbox, którą możesz użyć, aby znaleźć wszystkie zasoby, które są tworzone przez Roblox i społeczność Roblox do użytku w twoich projektach, w tym modele, obrazy, siatki, dźwięki, wtyczki, wideo i czcionki.Możesz użyć sklepu dla twórców, aby dodać jeden lub więcej zasobów bezpośrednio do otwartego doświadczenia, w tym pakietów funkcji!

Każdy pakiet funkcji wymaga, aby pakiet funkcji Rdzeń działał prawidłowo.Gdy pakiet funkcji Rdzeń i Misje będzie już w twoim wyposażenie, możesz ponownie ich użyć w dowolnym projekcie na platforma.

Aby otrzymać pakiety z twojego zapasu do twojego doświadczenia:

  1. W pasku narzędzi wybierz zakładkę Widok.

  2. Kliknij Pudełko narzędzi . Okno Pudełko narzędzi wyświetla się.

    Studio's View tab with the Toolbox tool highlighted.
  3. W oknie Pudełko z narzędziami , kliknij zakładkę Ekwipunek . Wyświetlają się sortowania Moje modele .

    Studio's Toolbox window with the Inventory tab highlighted.
  4. Kliknij pasek Pakiet podstawowy funkcji , a następnie pasek Pakiet funkcji misji .Oba foldery pakietowe wyświetlają się w oknie Eksploratora .

  5. Przeciągnij foldery pakietowe do ReplicatedStorage .

Określ misje

Każda ukończalna misja obejmuje zestaw zadań, które muszą zostać zakończone, aby ukończyć misję, opcje konfiguracji i opcjonalne metadane wyświetlania, które wszystkie mogą być zdefiniowane w ReplicatedStorage.Missions.Configs.Missions , z typami eksportowanymi z kodu Types ze skryptu w tym samym folderze.

Wymagane pola

Poniższe pola są wymagane dla każdej misji.

NazwaTypOpis
missionIdstringGłówny klucz tablicy misji. Wszystkie misje są oznaczane przez własną unikalną ciąg.
categoryIdstringMisje muszą należeć do kategoriai są grupowane według kategorii w interfejsie użytkownika.
taskstableLista zadań, które gracz musi ukończyć, aby ukończyć misję.

Odblokuj warunki

Domyślnie misje są odblokowane dla graczy automatycznie i mogą zostać ukończone dokładnie raz.Jednak możesz użyć następujących opcji konfiguracyjnych opcjonalnych , aby zmienić to zachowanie.

NazwaTypOpis
prerequisitestableLista innych identyfikatorów misji, które muszą zostać ukończone przed odblokowaniem misji.
manualOnlyboolWyłącza automatyczne odblokowanie misji.Zamiast tego należy wezwać funkcję, aby odblokować misję.Należy również spełnić wszystkie inne warunki odblokowania.
availableAfterUtcboolMisję nie można odblokować przed określonym czasem w UTC.
availableBeforeUtcboolMisja nie może zostać odblokowana po określonym czasie w UTC. Jeśli zostanie odblokowana, ale nie zostanie ukończona przed tym czasem, misja nie powiedzie się.
repeatableboolMisja zostaje odblokowana ponownie po jej zakończeniu.
repeatLimitnumberJeśli misja jest powtarzalna, nie można jej powtórzyć więcej niż kilka razy.
repeatCooldownSecondsnumberJeśli misja jest powtarzalna, występuje opóźnienie, zanim zostanie odblokowana.
expireSecondsnumberJeśli misja nie zostanie odblokowana i nie zostanie ukończona w określonym czasie, zamiast tego zawiedzie.
expireCountOfflineboolJeśli misja ma expireSeconds i expireCountOffline jest ustawiona na prawdę, czas, gdy gracz nie jest rzeczywiście w doświadczeniu, będzie liczony w kierunku wygaśnięcia misji.

Opis metadanych

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ć jego metadane.

NazwaTypOpis
displayNamestringNazwa do wyświetlenia dla misji w interfejsie użytkownika zamiast missionId.
descriptionstringDłuższy blok tekstu, który dostarcza dodatkowe informacje lub kontekst o misji.
visibleAfterCompleteboolJeśli ustawiono na prawdę, misja pojawi się na liście misji nawet po zakończeniu, ale oznaczona jako zakończona.
visibleAfterFailedboolJeśli ustawiono na prawdę, misja pojawi się na liście misji nawet po niepowodzeniu, ale oznaczona jako nieudana.
visibleBeforeUnlockedboolJeśli ustawiono na prawdę, misja będzie widoczna, ale zablokowana na liście misji, zanim będzie dostępna do ukończenia.
invisibleWhileActiveboolJeśli ustawiono na prawdę, misja będzie niewidoczna nawet wtedy, gdy aktywnie się realizuje.
rewardstableLista informacji o wyświetlaniu nagród.
  • assetID ( number ) - ID obrazu wyświetlanego w interfejsie misji pod nagrodami za zadanie. Wymagane jest to, jeśli nagroda istnieje.
  • displayName ( string ) - Nazwa wyświetlana w interfejsie misji pod ikona.

Określ zadania

Każda misja może mieć zero lub więcej zadań.Jeśli misja ma zadania zero, można ją odebrać natychmiast po jej odblokowaniu; jeśli misja ma jedno lub więcej zadań, po zakończeniu zadań gracz może zebrać wszelkie nagrody związane z misją.Każde zadanie ma taskId, który jest kluczem powiązanym z zadaniem dla danej misji.

Zadania występują w dwóch typach:

  • Zadania czasowe - Pozwala ci rozpocząć i zatrzymać zadanie w różnych punktach w czasie.Musi upłynąć pewna ilość czasu, gdy czasomierz zadania jest uruchomiony, a zadanie jest zakończone.
  • Licz zadania - Pozwala dodawać lub ustawiać postęp zadania. Gdy postęp osiągnie określoną wartość, zadanie jest ukończone.

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

NazwaTypOpis
taskTypestringOkreśla, czy typ zadania jest liczony czy czasowy.
counterobject(Opcjonalnie) licznik, który śledzi zadanie to.Liczniki są trwałymi pamięciami gracza specyficznymi dla liczby lub czasu trwania.Wiele zadań może śledzić jeden kontroferta; na przykład, jeśli więcej niż jedno zadanie śledzi, ile monet zebrał gracz, wszyscy mogą dzielić ten sam licznik "monet".Te zadania mogą niezależnie śledzić zebrane nowe 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ść kontroferta.
  • continueFromCounter (Opcjonalnie bool ) - Jeśli ustawiono na prawdę, postęp zadania będzie bezpośrednio pasować do wartości licznika, a nie do kwoty, która się zwiększyła.
metadataobject(Opcjonalnie) 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 (Opcjonalnie string ) - jak powinien być wyświetlany numer postępu w zadaniu.
    • Frakcja, np.5/10 lub 5k/50k
    • Procent, np.50% lub 10%
    • Długa frakcja, np.5/10 lub 5000/50000
    • Boolean, na przykładNiekompletny
callToActionobject(Opcjonalnie) Przycisk, który uruchamia funkcję powrotną.
  • callback ( function ) - Funkcja uruchomiona przez przycisk callToAction.
  • buttonText ( string ) - Tekst wyświetlany w interfejsie przycisków.

Licz pola zadań

Liczba zadań ma wymaganą wartość. Gdy postęp zadania spełnia tę kwotę, 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 i są uruchamiane i zatrzymywane. Gdy osiągnięta zostanie określona ilość czasu, zadanie jest zakończone.

NazwaTypOpis
goalSecondsnumberLiczba sekund, które muszą upłynąć, aby ukończyć zadanie.
startImmediatelyboolJeśli zadanie powinno zacząć liczyć czas od razu po jego odblokowaniu, a nie dopiero po jego uruchomieniu.
includesOfflineTimeboolJeśli zadanie powinno obejmować czas spędzony, gdy gracz nie jest aktywny w doświadczeniu.

Konfiguruj kategorie

Kategorie nie muszą być wyraźnie zdefiniowane, aby były używane, ponieważ kategoria dla misji ma domyślne wartości, które zostaną użyte.Jednak możesz skonfigurować te wartości w ReplicatedStorage.Missions.Configs.Categories , aby dodać dodatkowe efekty do kategorii.Kategorie są oznaczane unikalnym CategoryIds, tymi samymi, które są odwołane w konfiguracji misji.

NazwaTypOpis
repeatDelaySecondsnumber(Opcjonalnie) Jeśli zostanie ustawiać, wszystkie misje w kategorii zostaną zresetowane za każdym razem, gdy przejdzie określona ilość czasu, a można je odblokować, ukończyć i ponownie odebrać nagrody.Jest to odrębne od powtarzalnych misji, które można powtarzać w ramach danej kategorii powtarzania.

Zintegruj logikę serwera

Spójrz na ReplicatedStorage.Missions.Server.Examples.MissionsExample, który pokazuje, w jaki sposób twój serwer będzie interakcjonował z pakietem funkcji Misje .

Głównie musisz podłączyć cztery rzeczy po przeciągnięciu pakietu funkcji Misje do swojego doświadczenia:

  1. Określ misje w konfiguracji misji.

  2. Dodaj logikę do swojego doświadczenia, aby zaktualizować postęp zadania lub liczniki, do których jest powiązany postęp.

    Przeczytaj README

    -- Zwiększenie postępu w misji Skoku z zadaniem skoku
    Missions.addProgressToTask(player, "Jumping", "Jumps", 1)
    -- Rozpoczyna minutnik w misji BattlingTime za pomocą zadania TimeInBattle
    Missions.startTimedTask(player, "BattlingTime", "TimeInBattle")
    -- Zatrzymuje minutnik w czasie misji BattlingTime za pomocą zadania TimeInBattle
    Missions.stopTimedTask(player, "BattlingTime", "TimeInBattle")
    -- Zwiększa postęp we wszystkich zadaniach powiązanych z kontrofertaskoków
    CounterSystem.addCounter(player, "Jumps", 1)
    -- Rozpoczyna zegar na wszystkich zadaniach czasowych powiązanych z licznikiem czasu w kontroferta
    CounterSystem.startTimer(player, "TimeInBattle")
    -- Zatrzymuje czasomierz na wszystkich zadaniach czasowych powiązanych z licznikiem czasu w trybie kontroferta
    CounterSystem.stopTimer(player, "TimeInBattle")
  3. Ustaw końcówki ukończenia misji i opcjonalnie odblokuj lub nie powiodą się końcówki.Użyj kompletora, aby przyznać nagrody z misji w swoim doświadczeniu.

    Przeczytaj README

    local function completeHandler(player: Player, missionId: Types.MissionId)
    print(`{player} completed mission {missionId}`)
    -- Nagradzaj graczy ich nagrodami.
    end
    Missions.setCompletionHandler(missionId, completeHandler)
  4. Odblokuj misje, które nie są odblokowane automatycznie.Logika pakietu funkcji Misje zapewnia, że wszystkie wymagania misji zostaną spełnione przed ukończeniem misji i jej nagrody będą przedmiot kolekcjonerski.

    Przeczytaj README

    Missions.unlockMission(player, "Manual")

Konfiguruj stałe

Stałe dla pakietu funkcji Rdzenia żyją w dwóch miejscach:

  • Wspólne konstytucje żyją w ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants .

  • Konstytucje pakietowe, w tym przypadku pakiet funkcji Misje , żyją w ReplicatedStorage.Missions.Configs.Constants .

Ponadto możesz znaleźć struny do tłumaczenia rozdzielone w jednym miejscu: ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings .

Dostosuj komponenty interfejsu

Poprzez modyfikowanie obiektów pakietu, takich jak kolory, czcionka i przejrzystość, możesz dostosować wizualną prezentację interfejsu użytkownika misji.Na przykład, w ReplicatedStorage.Missions.Configs.Constants możesz włączyć SingleTaskMode wyświetlanie paska postępu dla zadania bezpośrednio na misji dla misji, które mają tylko jedno zadanie.

Ponadto, jeśli twoje doświadczenie ma już istniejący interfejs, z którym chcesz się zintegrować z pakietem funkcji Misje, klient zawiera wszystkie funkcje niezbędne do uzyskania informacji o misjach gracza wysyłanych z serwera.