Pakiet funkcji Nagrody za zaangażowanie to niestandardowy framework do oferowania nagród w grze za pewne działania gracza, w tym codzienne logowania i czas sesji gry.Oprócz logiki klienta i serwera pakiet zawiera domyślną interfejs użytkownika do wyświetlania postępu w płatnościach, statusu nagród i odbierania nagród.

Zdobądź pakiet
Dodaj pakiety Rdzeń i Nagrody za zaangażowanie do swojego zapasu w Studio, klikając linki Dodaj do zapasu tutaj:
W Studio wybierz zakładkę Widok .
Kliknij Pudełko narzędzi .
W oknie Pudełko z narzędziami , kliknij zakładkę Ekwipunek .
Kliknij pasek Pakiet podstawowy funkcji , a następnie pasek Pakiet nagród za zaangażowanie .Oba foldery pakietowe wyświetlają się w oknie Eksploratora .
Przeciągnij foldery do ReplicatedStorage .
Zainicjuj pakiet
Przesuwanie pakietów do ReplicatedStorage i testowanie twojego doświadczenia uruchamia skrypt EngagementRewardsExample w ReplicatedStorage.EngagementRewards.Server.Examples.
Ten skrypt pokazuje, jak zainicjować pakiet do użycia w swoim doświadczeniu, co wiąże się z wymaganiem kilku skryptów modułowych i określeniem funkcji rewardClaimedHandlerFunction(), która ostatecznie daje nagrodę (om) graczowi.
Funkcja ta musi zwrócić boolean.W przykładowym skrypcie możesz zobaczyć, że nie daje żadnych nagród graczowi; po prostu drukuje gracza, nagrodę i ilość, która jest żądana.
Przykład nagród za zaangażowanie
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EngagementRewardsConfig = require(ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig)
local EngagementRewards = require(ReplicatedStorage.EngagementRewards.Server.EngagementRewards)
local EngagementRewardsUtils = require(ReplicatedStorage.EngagementRewards.Utils.EngagementRewardsUtils)
local Types = require(ReplicatedStorage.EngagementRewards.Configs.Types)
-- Zastąp tę funkcję obsługi za pomocą własnej funkcji obsługi nagród otrzymanych
-- Funkcja ta powinna obsługiwać wydarzenie o nagrodę za nagrodęID przekazane w
local function rewardClaimedHandlerFunction(player: Player, rewardId: RewardId, quantity: number): (boolean, string?)
print(`Reward {rewardId} claimed by {player} with quantity {quantity}`)
return true
end
-- more
Możesz modyfikować ten skrypt bezpośrednio lub przenieść go do ServerScriptService , jeśli to jest twoja preferowana lokalizacja dla kodu serwera.Tak jak jest, skrypt jest użyteczny tylko do celów testowych.
Dawanie nagrody graczowi różni się w zależności od doświadczenia.W niektórych doświadczeniach możesz przyznać zwiększenie doświadczenia lub po prostu zwiększyć liczbę złota gracza.W innych doświadczeniach możesz mieć niestandardowy system ekwipunku, podczas gdy inni mogą umieścić przedmiot w plecakach gracza.W każdym przypadku jednak musisz zastąpić rewardClaimedHandlerFunction() własną funkcją.
Dodaj nagrody i kryteria
Większość dostosowań nagród występuje w ciągu ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig . Ten skrypt modułu określa nagrodę i wymagania odblokowania jej.
Możesz zobaczyć pełne deklaracje typu (lub dodać nowe) w ReplicatedStorage.EngagementRewards.Configs.Types, ale prawdopodobnie musisz pracować tylko z EngagementRewardsConfig.Pakiet funkcji obejmuje dwa rodzaje nagród: Time i Daily.
local engagementRewardsConfig: Types.EngagementRewardsConfig = {[Types.RewardType.Time] = {tabDisplayName = "Time",tabOrder = 1,description = "Keep playing to unlock rewards!",rewards = {MinutesPlayed1 = {icon = 116913478160966,displayName = "Ice Lance",requiredSecondsInGame = 1 * 5,},-- więcej[Types.RewardType.Daily] = {tabDisplayName = "Daily",tabOrder = 2,description = "Play daily to unlock rewards!",rewards = {DailyStreak1 = {icon = 116913478160966,displayName = "Ice Lance",requiredDaysVisitedStreak = 1,effect = Types.RewardEffect.Valuable,},-- more
Oba rodzaje nagród wymagają ikona, która jest ID zasobu Roblox dla obrazu ( nie znakiem).Prawdopodobnie chcesz również używać nazwy wyświetlania do użytku w interfejsie użytkownika.Określ quantity dla wartości innych niż 1.Możesz również opcjonalnie określić nagrodę jako wartościową (effect = Types.RewardEffect.Valuable) aby dać jej inną ramę tła w interfejsie.
Zmienna | Typ | Opis | Domyślny | Wymagany :--- | :--- | :--- | :--- | :--- ikona | Liczba | ID zasobu Roblox dla ikony interfejsu.| N/A | Tak displayName | String | Nazwa nagród do wykorzystania w interfejsie użytkownika.| The RewardId | Brak ilości | Liczba | Liczba przedmiotów do nagrody.| 1 | Brak efektu | Efekt nagrody | Wizualny efekt do użycia w interfejsie.Zobacz Dostosuj interfejs użytkownika.| Types.RewardEffect.Default | No
Nagrody za czas
Time nagrody odblokowują się po upływie pewnej liczby sekund w grze.Dostosuj te liczby do swoich potrzeb.Możesz używać małych liczb do łatwego testowania, a w opublikowanym doświadczeniu przyznać nagrodę po 10 minutach, inną po 30 minutach, inną po godzinie i tak dalej.
Mnożenie ułatwia pracę z liczbami w ciągu kilku sekund dla ludzi, więc przez dwa godziny możesz wolą określić 2 * 60 * 60 zamiast 7200.
Zmienna | Typ | Opis | Domyślny | Wymagany :--- | :--- | :--- | :--- | :--- wymaganeSecondsInGame | Liczba | Liczba sekund (pozytywny całkowity) gracz musi spędzić w grze, aby otrzymać nagrodę.| Nie dotyczy | Tak
Codzienne nagrody
Daily nagrody odblokowują się po określonej liczbie kolejnych codziennych logowań.Na przykład, pierwszego dnia, kiedy gracz się zaloguje, możesz dać mu trzy mikstury lub bułkę cynamonową.W kolejnych dniach możesz nagrodzić bardziej wartościowe zużywalne przedmioty, po których nastąpi trwały przedmiot, tak jak nowa wędka, po siedmiu ciągłych dniach.
Zmienna | Typ | Opis | Domyślny | Wymagany :--- | :--- | :--- | :--- wymaganeDniOdwiedzaneStreak | Liczba | Liczba kolejnych dni, które gracz musi połączyć z doświadczeniem, aby zdobyć nagrodę.| Nie dotyczy | Tak
Dwie dodatkowe opcje konfiguracji codziennej nagrody są dostępne w DailyRewardTabConfig.
[Types.RewardType.Daily] = {tabDisplayName = "Daily",tabOrder = 2,description = "Play daily to unlock rewards!",isHiddenOnJoin = true,isAlignedToStreakResetTime = true,rewards = {DailyStreak1 = {icon = 116913478160966,displayName = "Ice Lance",requiredDaysVisitedStreak = 1,},-- more
Zmienna | Typ | Opis | Domyślny | Wymagany :--- | :--- | :--- | :--- | :--- isHiddenOnJoin | Boolean | Gdy prawda, nagrody nie pojawiają się automatycznie po dołączeniu do doświadczenia.Gdy jest fałszywy, nagrody pojawiają się automatycznie po dołączeniu do gry, jeśli gracz ma nową codzienną nagrodę do odebrania.| False | Nie jest zgodny z czasem odnowienia serii | Boolean | Gdy prawda, nagrody za dzień 2 można odebrać 24 godziny po pierwszym dniu 1 możliwym do odebrania czasie.Gdy jest fałszywy, nagrody za dzień 2 można odebrać o pierwszej w południe po dniu 1 możliwym do odebrania.Na przykład, jeśli gracz loguje się o 23:00 i odbiera nagrodę za dzień 1, prawdą jest to, że nie może odebrać nagrody za dzień 2 do 11:00 następnego dnia.Fałsz oznacza, że mogą odebrać nagrodę za dzień 2 o 12:00 (00:00), jedną godzinę później.Nagrody za dzień 3 i później są zawsze dostępne 24 godziny po czasie możliwym do odebrania w poprzednim dniu.| Fałsz | Nie
Dostosuj interfejs użytkownika
W poprzedniej sekcji możesz zauważyć pola tabDisplayName, tabOrder i description, które umożliwiają podstawową personalizację interfejsu użytkownika.Możesz także znaleźć niektóre ciągi interfejsu użytkownika w ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings .

Aby określić nowy tło nagrody za pomocą zmiennej effect, dodaj ramę do ReplicatedStorage.EngagementRewards.Objects.RewardItemFrames.Następnie dodaj nazwę ramy do tabeli Types.RewardEffect w ReplicatedStorage.EngagementRewards.Configs.Types.
Aby uzyskać bardziej kompleksową personalizację, zmodyfikuj obiekty w ReplicatedStorage.EngagementRewards.Objects.Na przykład możesz zmodyfikować BackgroundColor3 ramę RewardsHudButton.Background lub Color ramę FooterContentFrame.ClaimableUIGradient.
Punkt wejścia dla interfejsu użytkownika to skrypt ReplicatedStorage.EngagementRewards.Client.UIController, który otrzymuje niezbędne obiekty i inicjalizuje interfejs.Jeśli dodasz lub zmienisz nazwę najwyższego poziomu obiektów (w przeciwieństwie do dodawania tylko dzieci lub modyfikowania właściwości), prawdopodobnie musisz zaktualizować kod w tej katalogu, aby je obsłużyć.