Le package de fonctionnalités Récompenses d'engagement est un cadre personnalisable pour offrir des récompenses en jeu pour certaines activités des joueurs, y compris les séries de connexions quotidiennes et le temps de session de jeu. En plus de la logique client et serveur, le package comprend une interface utilisateur par défaut pour visualiser les progrès des récompenses, l'état des récompenses et la réclamation des récompenses.

Obtenir le package
Ajoutez les packages Core et Récompenses d'engagement à votre inventaire dans Studio en cliquant sur les liens Ajouter à l'inventaire ici :
Dans le menu Fenêtre de Studio ou la barre d'outils de l'onglet Accueil, ouvrez la Boîte à outils.
Dans la fenêtre Boîte à outils, cliquez sur l'onglet Inventaire. Le tri Mes modèles s'affiche.

Cliquez sur le carreau Package de fonctionnalités Core, puis sur le carreau Package de fonctionnalités Récompenses d'engagement. Les deux dossiers de package s'affichent dans la fenêtre Explorateur.
Faites glisser les dossiers dans ReplicatedStorage.
Initialiser le package
Déplacer les packages vers ReplicatedStorage et tester votre jeu exécute le script EngagementRewardsExample dans ReplicatedStorage.EngagementRewards.Server.Examples.
Ce script montre comment initialiser le package pour une utilisation dans votre jeu, ce qui implique de requérir plusieurs scripts de module et de définir une fonction rewardClaimedHandlerFunction() qui donne finalement la ou les récompenses au joueur.
Cette fonction doit retourner un booléen. Dans le script d'exemple, vous pouvez voir qu'il ne donne aucune récompense au joueur ; il imprime simplement le joueur, la récompense et la quantité réclamée.
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)
-- Remplacez cette fonction de gestionnaire par votre propre fonction de gestionnaire de récompense réclamée
-- Cette fonction doit gérer l'événement de récompense réclamée pour le rewardId passé
local function rewardClaimedHandlerFunction(player: Player, rewardId: RewardId, quantity: number): (boolean, string?)
print(`Récompense {rewardId} réclamée par {player} avec quantité {quantity}`)
return true
end
-- plusVous pouvez soit modifier ce script directement, soit le déplacer vers ServerScriptService si c'est votre emplacement préféré pour le code serveur. En l'état, le script n'est utile que pour des fins de test.
Donner la récompense au joueur varie selon le jeu. Dans certains jeux, vous pourriez conférer un boost de jeu ou simplement incrémenter le nombre d'or du joueur. Dans d'autres jeux, vous pourriez avoir un système d'inventaire personnalisé, tandis que d'autres pourraient placer un objet dans les sacs à dos des joueurs. Dans tous les cas, cependant, vous devez remplacer rewardClaimedHandlerFunction() par votre propre fonction.
Ajouter des récompenses et des critères
La plupart des personnalisations de récompenses se font dans ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig. Ce script de module définit la récompense et les exigences pour la débloquer.
Vous pouvez voir les déclarations de type complètes (ou en ajouter de nouvelles) dans ReplicatedStorage.EngagementRewards.Configs.Types, mais vous n'avez probablement besoin de travailler qu'avec EngagementRewardsConfig. Le package de fonctionnalités comprend deux types de récompenses : Time et Daily.
local engagementRewardsConfig: Types.EngagementRewardsConfig = {
[Types.RewardType.Time] = {
tabDisplayName = "Temps",
tabOrder = 1,
description = "Continuez à jouer pour débloquer des récompenses !",
rewards = {
MinutesPlayed1 = {
icon = 116913478160966,
displayName = "Lance de glace",
requiredSecondsInGame = 1 * 5,
},
-- plus
[Types.RewardType.Daily] = {
tabDisplayName = "Quotidien",
tabOrder = 2,
description = "Jouez quotidiennement pour débloquer des récompenses !",
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "Lance de glace",
requiredDaysVisitedStreak = 1,
effect = Types.RewardEffect.Valuable,
},
-- plusLes deux types de récompenses nécessitent une icône, qui est un ID d'actif Roblox pour une image (pas un décalque). Vous voudrez probablement également un nom d'affichage à utiliser dans l'interface utilisateur. Spécifiez quantity pour des valeurs autres que 1. Vous pouvez également désigner une récompense comme précieuse (effect = Types.RewardEffect.Valuable) pour lui donner un cadre d'arrière-plan différent dans l'interface utilisateur.
| Variable | Type | Description | Par défaut | Requis |
|---|---|---|---|---|
| icon | Nombre | Un ID d'actif Roblox pour l'icône de l'interface utilisateur. | N/A | Oui |
| displayName | Chaîne | Un nom pour les récompenses à utiliser dans l'interface utilisateur. | Le RewardId | Non |
| quantity | Nombre | Le nombre d'objets à récompenser. | 1 | Non |
| effect | RewardEffect | L'effet visuel à utiliser dans l'interface utilisateur. Voir Personnaliser l'interface utilisateur. | Types.RewardEffect.Default | Non |
Récompenses de temps
Les récompenses Time se débloquent après un certain nombre de secondes dans le jeu. Personnalisez ces chiffres pour répondre à vos besoins. Vous pourriez utiliser de petits chiffres pour des tests faciles, et dans le jeu publié, conférer une récompense après 10 minutes, une autre après 30 minutes, une autre après une heure, et ainsi de suite.
La multiplication rend les nombres en secondes plus faciles à travailler pour les humains, donc pour deux heures, vous pourriez préférer spécifier 2 * 60 * 60 plutôt que 7200.
| Variable | Type | Description | Par défaut | Requis |
|---|---|---|---|---|
| requiredSecondsInGame | Nombre | Le nombre de secondes (un entier positif) que le joueur doit passer dans le jeu pour gagner la récompense. | N/A | Oui |
Récompenses quotidiennes
Les récompenses Daily se débloquent après un certain nombre de connexions quotidiennes consécutives. Par exemple, le premier jour où un joueur se connecte, vous pourriez lui donner trois potions ou un rouleau à la cannelle. Les jours suivants, vous pourriez récompenser des consommables plus précieux, suivis d'un objet durable, comme une nouvelle canne à pêche, après sept jours consécutifs.
| Variable | Type | Description | Par défaut | Requis |
|---|---|---|---|---|
| requiredDaysVisitedStreak | Nombre | Le nombre de jours consécutifs que le joueur doit se connecter au jeu pour gagner la récompense. | N/A | Oui |
Deux options de configuration de récompenses quotidiennes supplémentaires sont disponibles dans le DailyRewardTabConfig.
[Types.RewardType.Daily] = {
tabDisplayName = "Quotidien",
tabOrder = 2,
description = "Jouez quotidiennement pour débloquer des récompenses !",
isHiddenOnJoin = true,
isAlignedToStreakResetTime = true,
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "Lance de glace",
requiredDaysVisitedStreak = 1,
},
-- plus| Variable | Type | Description | Par défaut | Requis |
|---|---|---|---|---|
| isHiddenOnJoin | Booléen | Lorsque vrai, les récompenses ne s'affichent pas automatiquement lors de la connexion au jeu. Lorsque faux, les récompenses s'affichent automatiquement lors de la connexion au jeu si le joueur a une nouvelle récompense quotidienne à réclamer. | Faux | Non |
| isAlignedToStreakResetTime | Booléen | Lorsque vrai, les récompenses pour le jour 2 peuvent être réclamées 24 heures après le temps de réclamation initial du jour 1. Lorsque faux, les récompenses du jour 2 peuvent être réclamées à la première minuit après le temps de réclamation du jour 1. Par exemple, si un joueur se connecte à 23h00 et réclame sa récompense du jour 1, vrai signifie qu'il ne peut pas réclamer la récompense du jour 2 avant 23h00 le lendemain. Faux signifie qu'il peut réclamer la récompense du jour 2 à 00h00, une heure plus tard. Les récompenses pour le jour 3 et au-delà sont toujours disponibles 24 heures après le temps de réclamation du jour précédent. | Faux | Non |
Personnaliser l'interface utilisateur
Dans la section précédente, vous avez peut-être remarqué les champs tabDisplayName, tabOrder et description, qui permettent une personnalisation de base de l'interface utilisateur. Vous pouvez également trouver certaines chaînes d'interface utilisateur dans ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.

Pour spécifier un nouvel arrière-plan de récompense en utilisant la variable effect, ajoutez un cadre à ReplicatedStorage.EngagementRewards.Objects.RewardItemFrames. Ensuite, ajoutez le nom du cadre à la table Types.RewardEffect dans ReplicatedStorage.EngagementRewards.Configs.Types.
Pour une personnalisation plus complète, modifiez les objets dans ReplicatedStorage.EngagementRewards.Objects. Par exemple, vous pourriez modifier le BackgroundColor3 du cadre RewardsHudButton.Background ou le Color de FooterContentFrame.ClaimableUIGradient.
Le point d'entrée pour l'interface utilisateur est le script ReplicatedStorage.EngagementRewards.Client.UIController, qui obtient les objets nécessaires et initialise l'interface utilisateur. Si vous ajoutez ou renommez des objets de premier niveau (plutôt que d'ajouter uniquement des enfants ou de modifier des propriétés), vous devrez probablement mettre à jour le code dans ce dossier pour les gérer.