Pular para o conteúdo principal
O Economy v2 agora está em Disponibilidade Geral. Para obter suporte e enviar comentários, acesse o Fórum do PlayFab.
O Economy v1 (Herdado) tinha um recurso integrado de Tabelas de drop que permitia definir distribuições aleatórias ponderadas de itens diretamente no Game Manager. O Economy v2 não inclui tabelas de drop como recurso nativo, mas você pode implementar o mesmo comportamento, e com mais flexibilidade, usando o Azure Functions combinado com a API ExecuteInventoryOperations. Este tutorial mostra como criar um sistema completo de saque aleatório que:
  • 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

  1. 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.
  2. 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.
  3. 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 ExecuteInventoryOperations para subtrair atomicamente 1 token de contêiner e adicionar os itens selecionados aleatoriamente.

Pré-requisitos

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 chamada LootTables com um valor JSON:
Cada tabela de saque inclui as seguintes propriedades:

Definindo o Title Data

Game Manager

  1. Vá para Content > Title Data.
  2. Crie uma chave chamada LootTables.
  3. Cole a configuração JSON da sua tabela de saque como valor.
  4. 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:
  1. Verifica se o jogador tem pelo menos um token de contêiner.
  2. Lê a tabela de saque do Title Data.
  3. Executa a seleção aleatória ponderada.
  4. Chama ExecuteInventoryOperations para 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:
A resposta contém as recompensas selecionadas aleatoriamente:

Padrões de design de tabelas de saque

Níveis de raridade

O sistema clássico de raridade com pesos que diminuem exponencialmente:
Probabilidades de drop:
  • 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:
A função verifica se um 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 IdempotencyId na chamada ExecuteInventoryOperations para 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 Subtract em ExecuteInventoryOperations falha 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.

Consulte também

Última modificação em 6 de outubro de 2026