Nagrody za zaangażowanie

*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 Nagrody za zaangażowanie to konfigurowalna struktura do oferowania nagród w grze za określone działania graczy, w tym za codzienne logowanie i czas spędzony w grze. Oprócz logiki klienta i serwera, pakiet zawiera domyślny interfejs użytkownika do przeglądania postępów w nagrodach, statusu nagród i ich odbierania.

Pobierz pakiet

  1. Dodaj pakiety Core i Nagrody za zaangażowanie do swojego ekwipunku w Studio, klikając linki Dodaj do ekwipunku tutaj:

  2. Z menu Okno w Studio lub z paska narzędzi na karcie Strona główna, otwórz Skrzynkę narzędziową.

  3. W oknie Skrzynki narzędziowej kliknij kartę Ekwipunek. Wyświetli się sortowanie Moje modele.

    Okno Skrzynki narzędziowej w Studio z wyróżnioną kartą Ekwipunek.
  4. Kliknij kafelek Pakiet funkcji Core, a następnie kafelek Pakiet funkcji Nagrody za zaangażowanie. Oba foldery pakietów wyświetlą się w oknie Eksploratora.

  5. Przeciągnij foldery do ReplicatedStorage.

Zainicjuj pakiet

Przeniesienie pakietów do ReplicatedStorage i przetestowanie gry uruchamia skrypt EngagementRewardsExample w ReplicatedStorage.EngagementRewards.Server.Examples.

Ten skrypt pokazuje, jak zainicjować pakiet do użycia w grze, co obejmuje wymaganie kilku skryptów modułowych i zdefiniowanie funkcji rewardClaimedHandlerFunction(), która ostatecznie przyznaje nagrodę(-y) graczowi.

Funkcja ta musi zwracać wartość boolean. W przykładowym skrypcie możesz zobaczyć, że nie przyznaje ona żadnych nagród graczowi; po prostu drukuje gracza, nagrodę i ilość, która jest odbierana.

EngagementRewardsExample
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 nagrody własną funkcją obsługi nagrody
-- Ta funkcja powinna obsługiwać zdarzenie odebrania nagrody dla przekazanego rewardId
local function rewardClaimedHandlerFunction(player: Player, rewardId: RewardId, quantity: number): (boolean, string?)
print(`Nagroda {rewardId} odebrana przez {player} z ilością {quantity}`)
return true
end
-- więcej

Możesz albo bezpośrednio zmodyfikować ten skrypt, albo przenieść go do ServerScriptService, jeśli to jest twoje preferowane miejsce na kod serwera. W obecnej formie skrypt jest użyteczny tylko do celów testowych.

Przyznawanie nagrody graczowi różni się w zależności od gry. W niektórych grach możesz przyznać bonus do gry lub po prostu zwiększyć liczbę złota gracza. W innych grach możesz mieć własny system ekwipunku, podczas gdy inne mogą umieszczać przedmiot w plecakach graczy. W każdym przypadku jednak musisz zastąpić rewardClaimedHandlerFunction() swoją własną funkcją.

Dodaj nagrody i kryteria

Większość dostosowań nagród odbywa się w ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig. Ten skrypt modułowy definiuje nagrodę i wymagania do jej odblokowania.

Pełne deklaracje typów (lub dodanie nowych) możesz zobaczyć w ReplicatedStorage.EngagementRewards.Configs.Types, ale prawdopodobnie będziesz musiał pracować tylko z EngagementRewardsConfig. Pakiet funkcji zawiera dwa typy nagród: Czas i Codziennie.

local engagementRewardsConfig: Types.EngagementRewardsConfig = {
[Types.RewardType.Time] = {
tabDisplayName = "Czas",
tabOrder = 1,
description = "Graj dalej, aby odblokować nagrody!",
rewards = {
MinutesPlayed1 = {
icon = 116913478160966,
displayName = "Lodowy Włócznia",
requiredSecondsInGame = 1 * 5,
},
-- więcej
[Types.RewardType.Daily] = {
tabDisplayName = "Codziennie",
tabOrder = 2,
description = "Graj codziennie, aby odblokować nagrody!",
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "Lodowy Włócznia",
requiredDaysVisitedStreak = 1,
effect = Types.RewardEffect.Valuable,
},
-- więcej

Oba typy nagród wymagają ikony, która jest identyfikatorem zasobu Roblox dla obrazu (nie dla dekalu). Prawdopodobnie chcesz również mieć nazwę wyświetlaną do użycia w interfejsie użytkownika. Określ quantity dla wartości innych niż 1. Możesz również opcjonalnie oznaczyć nagrodę jako cenną (effect = Types.RewardEffect.Valuable), aby nadać jej inny kolor tła w interfejsie użytkownika.

VariableTypeDescriptionDefaultRequired
iconNumberIdentyfikator zasobu Roblox dla ikony UI.N/ATak
displayNameStringNazwa nagród do użycia w UI.Identyfikator RewardIdNie
quantityNumberLiczba przedmiotów do nagrody.1Nie
effectRewardEffectEfekt wizualny do użycia w UI. Zobacz Dostosuj UI.Types.RewardEffect.DefaultNie

Nagrody czasowe

Nagrody Czas odblokowują się po określonej liczbie sekund spędzonych w grze. Dostosuj te liczby do swoich potrzeb. Możesz użyć małych liczb do łatwego testowania, a w opublikowanej grze przyznać nagrodę po 10 minutach, kolejną po 30 minutach, kolejną po godzinie i tak dalej.

Mnożenie ułatwia ludziom pracę z liczbami w sekundach, więc dla dwóch godzin możesz woleć określić 2 * 60 * 60 zamiast 7200.

VariableTypeDescriptionDefaultRequired
requiredSecondsInGameNumberLiczba sekund (liczba całkowita dodatnia), które gracz musi spędzić w grze, aby zdobyć nagrodę.N/ATak

Nagrody codzienne

Nagrody Codziennie odblokowują się po określonej liczbie kolejnych codziennych logowań. Na przykład, pierwszego dnia, gdy gracz się loguje, możesz dać mu trzy mikstury lub bułkę cynamonową. W kolejnych dniach możesz nagradzać bardziej wartościowymi przedmiotami konsumpcyjnymi, a po siedmiu dniach z rzędu, trwałym przedmiotem, takim jak nowa wędka.

VariableTypeDescriptionDefaultRequired
requiredDaysVisitedStreakNumberLiczba kolejnych dni, w których gracz musi połączyć się z grą, aby zdobyć nagrodę.N/ATak

Dwie dodatkowe opcje konfiguracyjne nagród codziennych są dostępne w DailyRewardTabConfig.

[Types.RewardType.Daily] = {
tabDisplayName = "Codziennie",
tabOrder = 2,
description = "Graj codziennie, aby odblokować nagrody!",
isHiddenOnJoin = true,
isAlignedToStreakResetTime = true,
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "Lodowy Włócznia",
requiredDaysVisitedStreak = 1,
},
-- więcej
VariableTypeDescriptionDefaultRequired
isHiddenOnJoinBooleanGdy prawda, nagrody nie pojawiają się automatycznie po dołączeniu do gry. Gdy fałsz, nagrody automatycznie pojawiają się po dołączeniu do gry, jeśli gracz ma nową nagrodę codzienną do odebrania.FałszNie
isAlignedToStreakResetTimeBooleanGdy prawda, nagrody za dzień 2 można odebrać 24 godziny po początkowym czasie odbioru dnia 1. Gdy fałsz, nagrody za dzień 2 można odebrać o pierwszej północy po czasie odbioru dnia 1. Na przykład, jeśli gracz loguje się o 23:00 i odbiera swoją nagrodę za dzień 1, prawda oznacza, że nie może odebrać nagrody za dzień 2 aż do 23:00 następnego dnia. Fałsz oznacza, że mogą odebrać nagrodę za dzień 2 o 00:00, godzinę później. Nagrody za dzień 3 i kolejne są zawsze dostępne 24 godziny po czasie odbioru poprzedniego dnia.FałszNie

Dostosuj UI

W poprzedniej sekcji mogłeś zauważyć pola tabDisplayName, tabOrder i description, które pozwalają na podstawowe dostosowanie interfejsu użytkownika. Możesz również znaleźć niektóre ciągi UI w ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.

  • Aby określić nowe tło nagrody za pomocą zmiennej effect, dodaj ramkę do ReplicatedStorage.EngagementRewards.Objects.RewardItemFrames. Następnie dodaj nazwę ramki do tabeli Types.RewardEffect w ReplicatedStorage.EngagementRewards.Configs.Types.

  • Aby uzyskać bardziej kompleksowe dostosowanie, zmodyfikuj obiekty w ReplicatedStorage.EngagementRewards.Objects. Na przykład, możesz zmodyfikować BackgroundColor3 ramki RewardsHudButton.Background lub Color ramki FooterContentFrame.ClaimableUIGradient.

  • Punktem wejścia dla interfejsu użytkownika jest skrypt ReplicatedStorage.EngagementRewards.Client.UIController, który pobiera niezbędne obiekty i inicjalizuje UI. Jeśli dodasz lub zmienisz nazwy obiektów na najwyższym poziomie (w przeciwieństwie do dodawania tylko dzieci lub modyfikowania właściwości), prawdopodobnie będziesz musiał zaktualizować kod w tym folderze, aby je obsłużyć.

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