O pacote de recursos de Recompensas de Engajamento é um quadro personalizável para oferecer recompensas no jogo por determinadas atividades do jogador, incluindo sequências diárias de login e tempo de sessão de jogo.Além da lógica do cliente e do servidor, o pacote inclui uma interface padrão para visualizar o progresso de recompensas, o status de recompensas e reivindicar recompensas.

Obtenha o pacote
Adicione os pacotes Núcleo e Recompensas de Engajamento ao seu inventário dentro do Studio clicando nos links Adicionar ao Inventário aqui:
No Studio, selecione a aba Ver .
Clique em Caixa de Ferramentas .
Na janela da Caixa de ferramentas , clique na aba Inventário .
Clique no mosaico tijolode Recursos de Destaque, então no mosaico tijolode Recompensas de Engajamento.Ambas as pastas de pacote são exibidas na janela Explorer .
Arraste as pastas para Armazenamento Replicado .
Inicialize o pacote
Mover os pacotes para ReplicatedStorage e testar sua experiência executa o EngagementRewardsExample script em ReplicatedStorage.EngagementRewards.Server.Examples .
Este script mostra como inicializar o pacote para uso em sua experiência, que envolve exigir vários scripts de módulo e definir uma função rewardClaimedHandlerFunction() que, em última análise, dá a recompensa(s) ao jogador.
Essa função deve retornar um booleano.No exemplo de script, você pode ver que ele não dá nenhuma recompensa ao jogador; ele apenas imprime o jogador, a recompensa e a quantidade a serem reivindicadas.
Exemplo de Recompensas de Engajamento
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)
-- Substitua essa função de manipulador com sua própria função de manipulador de recompensa reivindicada
-- Essa função deve lidar com o evento de recompensa reivindicada pelo ID de recompensa passado
local function rewardClaimedHandlerFunction(player: Player, rewardId: RewardId, quantity: number): (boolean, string?)
print(`Reward {rewardId} claimed by {player} with quantity {quantity}`)
return true
end
-- more
Você pode modificar este script diretamente ou movê-lo para Serviço de Script de Servidor se essa for sua localização preferida para código do servidor.Como está, o script só é útil para fins de teste.
Dar a recompensa ao jogador varia por experiência.Em algumas experiências, você pode conferir um aumento de experiência ou apenas incrementar o número de ouro do jogador.Em outras experiências, você pode ter um sistema de inventário personalizado, enquanto outros podem colocar um item nas mochilas do jogador.Em todos os casos, no entanto, você deve substituir rewardClaimedHandlerFunction() por sua própria função.
Adicione recompensas e critérios
A maioria das personalizações de recompensas ocorre dentro de ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig. Este script de módulo define a recompensa e os requisitos para desbloqueá-la.
Você pode ver as declarações de tipo completas (ou adicionar novas) em ReplicatedStorage.EngagementRewards.Configs.Types, mas provavelmente só precisa trabalhar com EngagementRewardsConfig.O pacote de recursos inclui dois tipos de recompensa: Time e 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,},-- mais[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
Ambos os tipos de recompensa requerem um ícone, que é um ID de recurso do Roblox para uma imagem ( não um adesivo).Você provavelmente também quer um nome de exibição para uso na UI.Especifique quantity para valores diferentes de 1.Você também pode designar opcionalmente uma recompensa como valiosa ( effect = Types.RewardEffect.Valuable ) para dar a ela um quadro de fundo diferente na UI.
Variável | Tipo | Descrição | Padrão | Necessário :--- | :--- | :--- | :--- | :--- ícone | Número | Um ID de recurso do Roblox para o ícone da interface.| N/A | Sim displayName | String | Um nome para as recompensas para uso na interface do usuário.| O RewardId | Sem quantidade | Número | O número de itens a recompensar.| 1 | Sem efeito | RewardEffect | O efeito visual para usar na UI.Veja Personalizar a interface de usuário.| Types.RewardEffect.Default | No
Recompensas de tempo
Time recompensas são desbloqueadas após um certo número de segundos no jogo.Personalize esses números para atender às suas necessidades.Você pode usar números pequenos para testes fáceis e, na experiência publicada, conceder uma recompensa após 10 minutos, outra após 30 minutos, outra após uma hora e assim por diante.
A multiplicação torna os números em segundos mais fáceis de serem trabalhados por humanos, então, por duas horas, você pode preferir especificar 2 * 60 * 60 em vez de 7200.
Variável | Tipo | Descrição | Padrão | Requerido :--- | :--- | :--- | :--- | :--- requeridosSegundosEmJogo | Número | O número de segundos (um integralpositivo) que o jogador deve passar no jogo para ganhar a recompensa.|N/A| Sim
Recompensas diárias
Daily recompensas são desbloqueadas após um certo número de login diário consecutivo.Por exemplo, no primeiro dia em que um jogador entra, você pode dar a ele três poções ou um rolo de canela.Dias subsequentes, você pode recompensar consumíveis mais valiosos, seguidos por um item durável, como uma nova vara de pesca, após sete dias consecutivos.
Variável | Tipo | Descrição | Padrão | Necessário :--- | :--- | :--- | :--- | :--- requiredDaysVisitedStreak | Número | O número de dias consecutivos que o jogador deve se conectar à experiência para ganhar a recompensa.|N/A| Sim
Duas opções adicionais de configuração de recompensa diária estão disponíveis no 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
Variável | Tipo | Descrição | Padrão | Necessário :--- | :--- | :--- | :--- | :--- isHiddenOnJoin | Boolean | Quando verdadeiro, recompensas não aparecem automaticamente ao se juntar à experiência.Quando falso, recompensas aparecem automaticamente ao entrar no jogo se o jogador tiver uma nova recompensa diária para reivindicar.| Falso | Não está alinhado ao tempo de redefinição de sequência | Binário | Quando verdadeiro, recompensas para o dia 2 podem ser reivindicadas 24 horas após o tempo de reivindicação inicial do dia 1.Quando falso, as recompensas do dia 2 podem ser solicitadas na primeira meia-noite após o tempo de reivindicação do dia 1.Por exemplo, se um jogador se logar às 11:00 PM (23:00) e reivindicar sua recompensa do dia 1, o verdadeiro significa que eles não podem reivindicar a recompensa do dia 2 até 11:00 PM no dia seguinte.Falso significa que eles podem reivindicar a recompensa do dia 2 às 12:00 AM (00:00), uma hora depois.Recompensas para o dia 3 e além estão sempre disponíveis 24 horas após o tempo reivindicável do dia anterior.| Falso | Não
Personalize a interface de usuário
Na seção anterior, você pode ter notado os campos tabDisplayName, tabOrder e description, que permitem a personalização básica da interface do usuário.Você também pode encontrar algumas strings de UI em ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings .

Para especificar um novo plano de recompensa usando a variável effect, adicione um quadro a ReplicatedStorage.EngagementRewards.Objects.RewardItemFrames.Então adicione o nome do quadro à tabela Types.RewardEffect na ReplicatedStorage.EngagementRewards.Configs.Types .
Para uma personalização mais abrangente, modifique os objetos em ReplicatedStorage.EngagementRewards.Objects .Por exemplo, você pode modificar o BackgroundColor3 do quadro RewardsHudButton.Background ou o Color do FooterContentFrame.ClaimableUIGradient.
O ponto de entrada para a interface do usuário é o ReplicatedStorage.EngagementRewards.Client.UIController script, que obtém os objetos necessários e inicializa a UI.Se você adicionar ou renomear objetos de alto nível (em oposição a apenas adicionar filhos ou modificar propriedades), provavelmente precisará atualizar o código neste diretório para lidar com eles.