O Economy v2 agora está em Disponibilidade Geral. Para obter suporte e enviar comentários, acesse o Fórum do PlayFab.
- Define tabelas de saque com conjuntos de itens ponderados no Title Data.
- Usa uma Azure Function para sortear itens aleatórios de uma tabela de saque.
- Subtrai atomicamente um token de contêiner e concede os itens selecionados aleatoriamente em uma única chamada.
Como funciona
- Definir tabelas de saque no Title Data: armazene as configurações das suas tabelas de drop (IDs de itens, pesos, quantidades) como JSON no Title Data para poder atualizá-las sem reimplantar código.
- Representar contêineres como moeda virtual: use o mesmo padrão de token de contêiner dos contêineres com conteúdo fixo: uma moeda virtual que funciona como uma caixa de saque não aberta.
- Chamar uma Azure Function para abrir o contêiner: a função lê a tabela de saque, executa a seleção aleatória ponderada e, em seguida, chama
ExecuteInventoryOperationspara subtrair atomicamente 1 token de contêiner e adicionar os itens selecionados aleatoriamente.
Pré-requisitos
- Uma conta de desenvolvedor do PlayFab.
- Um título criado no Game Manager.
- Itens de catálogo publicados que você possa conceder como recompensas de saque.
- Uma moeda virtual que represente o contêiner (consulte Contêineres com conteúdo fixo para obter instruções de configuração).
- Um projeto do Azure Functions conectado ao seu título do PlayFab.
Etapa 1: Definir tabelas de saque no Title Data
Armazene as definições das suas tabelas de saque no Title Data para que os designers possam atualizar as taxas de drop sem alterações de código.Exemplo de estrutura de tabela de saque
Crie uma chave do Title Data chamadaLootTables com um valor JSON:
Definindo o Title Data
Game Manager
- Vá para Content > Title Data.
- Crie uma chave chamada
LootTables. - Cole a configuração JSON da sua tabela de saque como valor.
- Selecione Save.
API
Use SetTitleData:Etapa 2: Criar a Azure Function
Crie uma Azure Function que o cliente do seu jogo chame quando um jogador quiser abrir um contêiner. A função:- Verifica se o jogador tem pelo menos um token de contêiner.
- Lê a tabela de saque do Title Data.
- Executa a seleção aleatória ponderada.
- Chama
ExecuteInventoryOperationspara subtrair atomicamente o token e conceder as recompensas.
Modelos de dados
Seleção aleatória ponderada
Azure Function completa
A função auxiliar
GetContainerCurrencyId mapeia o nome de uma tabela de saque para o ID da moeda de contêiner correspondente. Você pode armazenar esse mapeamento no Title Data junto com as tabelas de saque ou usar uma convenção de nomenclatura.Etapa 3: Conceder tokens de contêiner aos jogadores
Conceda tokens de contêiner aos jogadores por meio da jogabilidade, de compras na loja ou de recompensas. Use a mesma abordagem descrita em Contêineres com conteúdo fixo.Etapa 4: Chamar a função do cliente do jogo
Quando o jogador quiser abrir um contêiner, chame a Azure Function usando ExecuteFunction:Padrões de design de tabelas de saque
Níveis de raridade
O sistema clássico de raridade com pesos que diminuem exponencialmente:- Comum: ~90,0%
- Incomum: ~9,0%
- Raro: ~0,9%
- Lendário: ~0,09%
Vários sorteios com recompensas mistas
Uma caixa de suprimentos que concede três itens aleatórios de um conjunto misto:Garantido + aleatório (sistema de piedade)
Para um padrão de “raro ou melhor garantido a cada 10 aberturas”, acompanhe a contagem de aberturas do jogador nas Propriedades de Exibição ou nos Dados do Jogador e substitua a seleção aleatória na Azure Function quando o limite for atingido.Tabelas de drop aninhadas
Uma tabela de saque pode fazer referência a outra tabela de saque por ID. Sua Azure Function resolve a referência recursivamente:ItemId começa com TABLE: e, em caso afirmativo, sorteia na tabela referenciada em vez de conceder o item diretamente.
Considerações de segurança
- Sempre execute a lógica de saque no lado do servidor em uma Azure Function. Nunca confie no cliente para determinar quais itens foram sorteados. Essa abordagem evita manipulação.
- Use
IdempotencyIdna chamadaExecuteInventoryOperationspara evitar concessões duplicadas se a função for repetida. Para obter mais informações, consulte Transações idempotentes e novas tentativas. - Valide a posse do contêiner verificando o inventário do jogador antes de subtrair. A operação
SubtractemExecuteInventoryOperationsfalha se o jogador não tiver tokens suficientes, o que reverte todo o lote. - Registre todos os sorteios para auditoria. O valor retornado pela função e os eventos do PlayStream fornecem um histórico do que cada jogador recebeu.
