Il pacchetto delle funzionalità delle Ricompense di Coinvolgimento è un framework personalizzabile per offrire ricompense in-game per determinate attività dei giocatori, inclusi i periodi di accesso giornaliero e il tempo di gioco. Oltre alla logica client e server, il pacchetto include un'interfaccia utente predefinita per visualizzare i progressi delle ricompense, lo stato delle ricompense e per richiedere le ricompense.

Ottieni il pacchetto
Aggiungi i pacchetti Core e Ricompense di Coinvolgimento al tuo inventario all'interno di Studio facendo clic sui link Aggiungi all'Inventario qui:
Dal menu Finestra di Studio o dalla barra degli strumenti della scheda Home, apri il Toolbox.
Nella finestra Toolbox, fai clic sulla scheda Inventario. La visualizzazione I Miei Modelli viene mostrata.

Fai clic sulla tile Pacchetto di Funzionalità Core, quindi sulla tile Pacchetto di Funzionalità Ricompense di Coinvolgimento. Entrte le cartelle del pacchetto vengono visualizzate nella finestra Esplora.
Trascina le cartelle in ReplicatedStorage.
Inizializza il pacchetto
Spostare i pacchetti in ReplicatedStorage e testare il tuo gioco esegue lo script EngagementRewardsExample in ReplicatedStorage.EngagementRewards.Server.Examples.
Questo script mostra come inizializzare il pacchetto per l'uso nel tuo gioco, il che comporta la richiesta di diversi script di modulo e la definizione di una funzione rewardClaimedHandlerFunction() che alla fine fornisce la/e ricompensa/e al giocatore.
Questa funzione deve restituire un booleano. Nello script di esempio, puoi vedere che non fornisce alcuna ricompensa al giocatore; stampa solo il giocatore, la ricompensa e la quantità richiesta.
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)
-- Sostituisci questa funzione di gestione con la tua funzione di gestione della ricompensa richiesta
-- Questa funzione dovrebbe gestire l'evento di ricompensa richiesta per l'rewardId passato
local function rewardClaimedHandlerFunction(player: Player, rewardId: RewardId, quantity: number): (boolean, string?)
print(`Ricompensa {rewardId} richiesta da {player} con quantità {quantity}`)
return true
end
-- altroPuoi modificare direttamente questo script o spostarlo in ServerScriptService se è la tua posizione preferita per il codice server. Così com'è, lo script è utile solo per scopi di test.
Dare la ricompensa al giocatore varia a seconda del gioco. In alcuni giochi, potresti conferire un potenziamento del gioco o semplicemente incrementare il conteggio dell'oro del giocatore. In altri giochi, potresti avere un sistema di inventario personalizzato, mentre altri potrebbero inserire un oggetto negli zaini dei giocatori. In tutti i casi, tuttavia, devi sostituire rewardClaimedHandlerFunction() con la tua funzione.
Aggiungi ricompense e criteri
La maggior parte della personalizzazione delle ricompense avviene all'interno di ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig. Questo script di modulo definisce la ricompensa e i requisiti per sbloccarla.
Puoi vedere le dichiarazioni di tipo complete (o aggiungerne di nuove) in ReplicatedStorage.EngagementRewards.Configs.Types, ma probabilmente dovrai solo lavorare con EngagementRewardsConfig. Il pacchetto delle funzionalità include due tipi di ricompense: Time e Daily.
local engagementRewardsConfig: Types.EngagementRewardsConfig = {
[Types.RewardType.Time] = {
tabDisplayName = "Tempo",
tabOrder = 1,
description = "Continua a giocare per sbloccare ricompense!",
rewards = {
MinutesPlayed1 = {
icon = 116913478160966,
displayName = "Lancia di Ghiaccio",
requiredSecondsInGame = 1 * 5,
},
-- altro
[Types.RewardType.Daily] = {
tabDisplayName = "Giornaliero",
tabOrder = 2,
description = "Gioca ogni giorno per sbloccare ricompense!",
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "Lancia di Ghiaccio",
requiredDaysVisitedStreak = 1,
effect = Types.RewardEffect.Valuable,
},
-- altroEntrambi i tipi di ricompense richiedono un'icona, che è un ID asset di Roblox per un'immagine (non un decalcomania). Probabilmente vorrai anche un nome visualizzato da utilizzare nell'interfaccia utente. Specifica quantity per valori diversi da 1. Puoi anche designare facoltativamente una ricompensa come preziosa (effect = Types.RewardEffect.Valuable) per darle un diverso sfondo nell'interfaccia utente.
| Variabile | Tipo | Descrizione | Predefinito | Richiesto |
|---|---|---|---|---|
| icon | Numero | Un ID asset di Roblox per l'icona dell'interfaccia utente. | N/A | Sì |
| displayName | Stringa | Un nome per le ricompense da utilizzare nell'interfaccia utente. | L'RewardId | No |
| quantity | Numero | Il numero di oggetti da premiare. | 1 | No |
| effect | RewardEffect | L'effetto visivo da utilizzare nell'interfaccia utente. Vedi Personalizza l'interfaccia utente. | Types.RewardEffect.Default | No |
Ricompense di tempo
Le ricompense di Time si sbloccano dopo un certo numero di secondi di gioco. Personalizza questi numeri per soddisfare le tue esigenze. Potresti utilizzare numeri piccoli per test facili e, nel gioco pubblicato, conferire una ricompensa dopo 10 minuti, un'altra dopo 30 minuti, un'altra dopo un'ora e così via.
La moltiplicazione rende i numeri in secondi più facili da gestire per gli esseri umani, quindi per due ore potresti preferire specificare 2 * 60 * 60 piuttosto che 7200.
| Variabile | Tipo | Descrizione | Predefinito | Richiesto |
|---|---|---|---|---|
| requiredSecondsInGame | Numero | Il numero di secondi (un intero positivo) che il giocatore deve trascorrere in gioco per guadagnare la ricompensa. | N/A | Sì |
Ricompense giornaliere
Le ricompense Daily si sbloccano dopo un certo numero di accessi giornalieri consecutivi. Ad esempio, il primo giorno in cui un giocatore accede, potresti dargli tre pozioni o un rotolo di cannella. Nei giorni successivi, potresti premiare consumabili più preziosi, seguiti da un oggetto durevole, come una nuova canna da pesca, dopo sette giorni consecutivi.
| Variabile | Tipo | Descrizione | Predefinito | Richiesto |
|---|---|---|---|---|
| requiredDaysVisitedStreak | Numero | Il numero di giorni consecutivi in cui il giocatore deve connettersi al gioco per guadagnare la ricompensa. | N/A | Sì |
Due opzioni di configurazione aggiuntive per le ricompense giornaliere sono disponibili in DailyRewardTabConfig.
[Types.RewardType.Daily] = {
tabDisplayName = "Giornaliero",
tabOrder = 2,
description = "Gioca ogni giorno per sbloccare ricompense!",
isHiddenOnJoin = true,
isAlignedToStreakResetTime = true,
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "Lancia di Ghiaccio",
requiredDaysVisitedStreak = 1,
},
-- altro| Variabile | Tipo | Descrizione | Predefinito | Richiesto |
|---|---|---|---|---|
| isHiddenOnJoin | Booleano | Quando è vero, le ricompense non appaiono automaticamente all'ingresso nel gioco. Quando è falso, le ricompense appaiono automaticamente all'ingresso nel gioco se il giocatore ha una nuova ricompensa giornaliera da richiedere. | Falso | No |
| isAlignedToStreakResetTime | Booleano | Quando è vero, le ricompense per il giorno 2 possono essere richieste 24 ore dopo il tempo iniziale di richiesta del giorno 1. Quando è falso, le ricompense del giorno 2 possono essere richieste alla prima mezzanotte dopo il tempo di richiesta del giorno 1. Ad esempio, se un giocatore accede alle 23:00 e richiede la propria ricompensa del giorno 1, vero significa che non può richiedere la ricompensa del giorno 2 fino alle 23:00 del giorno successivo. Falso significa che può richiedere la ricompensa del giorno 2 a mezzanotte, un'ora dopo. Le ricompense per il giorno 3 e oltre sono sempre disponibili 24 ore dopo il tempo di richiesta del giorno precedente. | Falso | No |
Personalizza l'interfaccia utente
Nella sezione precedente, potresti aver notato i campi tabDisplayName, tabOrder e description, che consentono una personalizzazione di base dell'interfaccia utente. Puoi anche trovare alcune stringhe dell'interfaccia utente in ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.

Per specificare un nuovo sfondo per la ricompensa utilizzando la variabile effect, aggiungi un frame a ReplicatedStorage.EngagementRewards.Objects.RewardItemFrames. Quindi aggiungi il nome del frame alla tabella Types.RewardEffect in ReplicatedStorage.EngagementRewards.Configs.Types.
Per una personalizzazione più completa, modifica gli oggetti in ReplicatedStorage.EngagementRewards.Objects. Ad esempio, potresti modificare il BackgroundColor3 del frame RewardsHudButton.Background o il Color di FooterContentFrame.ClaimableUIGradient.
Il punto di ingresso per l'interfaccia utente è lo script ReplicatedStorage.EngagementRewards.Client.UIController, che ottiene gli oggetti necessari e inizializza l'interfaccia utente. Se aggiungi o rinomini oggetti di alto livello (anziché aggiungere solo figli o modificare proprietà), probabilmente dovrai aggiornare il codice in questa cartella per gestirli.