Preencher jogos existentes com o FlexMatch - Amazon GameLift

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Preencher jogos existentes com o FlexMatch

O preenchimento de jogos usa os mecanismos do FlexMatch para encontrar novos jogadores para as sessões de jogos existentes correspondentes. Embora você possa sempre adicionar jogadores em qualquer jogo (consulte Incluir um jogador em uma sessão de ogo), a alocação de correspondência garante que os novos jogadores atendem aos mesmos critérios de correspondência que os jogadores atuais. Além disso, a alocação de correspondência atribui os novos jogadores às equipes, gerencia a aceitação de jogadores e envia informações atualizadas sobre correspondência para o processo do servidor de jogos. Saiba mais sobre a alocação de correspondência em Processo de criação de jogos FlexMatch.

nota

O preenchimento do FlexMatch não está disponível no momento para jogos que usam servidores em tempo real.

Existem dois tipos de mecanismos de alocação:

  • Para preencher sessões de jogos que começam com menos jogadores do que o máximo permitido, habilite a alocação automática.

  • Para substituir os jogadores que desistirem de uma sessão de jogo em andamento, adicione a funcionalidade ao servidor do jogo para enviar solicitações de alocação.

Ativar a alocação automática

Com a alocação automática de correspondência, o Amazon GameLift acionará automaticamente uma solicitação de alocação sempre que uma sessão de jogo começar com um ou mais slots de jogadores não preenchidos. Este recurso permite que os jogos comecem assim que o número mínimo de jogadores combinados for encontrado e preenche os slots restantes mais tarde, à medida que jogadores adicionais forem combinados. É possível optar por interromper a alocação automática a qualquer momento.

Como exemplo, considere um jogo que pode conter de seis a dez jogadores. O FlexMatch localiza inicialmente seis jogadores, forma o jogo e inicia uma nova sessão de jogo. Com a alocação automática, a nova sessão de jogo pode solicitar imediatamente mais quatro jogadores. Dependendo do estilo do jogo, podemos permitir que novos jogadores entrem a qualquer momento durante a sessão do jogo. Como alternativa, é possível interromper a alocação automática após a fase inicial de configuração e antes do início do jogo.

Para adicionar uma alocação automática ao seu jogo, faça as seguintes atualizações no seu jogo.

  1. Habilite a alocação automática. A alocação automática é gerenciada em uma configuração de marcação de jogos. Quando ativado, é usado com todas as sessões de jogo correspondentes criadas com esse matchmaker. O Amazon GameLift começa a gerar solicitações de preenchimento para uma sessão de jogo não completa assim que a sessão de jogo é iniciada em um servidor de jogo.

    Para ativar a alocação automática, abra uma correspondência de configuração e defina o modo de alocação como "AUTOMÁTICO". Para obter mais detalhes, consulte Criar uma configuração criação de jogos.

  2. Ative a priorização do preenchimento. Personalize o processo de criação de jogos para priorizar o preenchimento de solicitações de preenchimento antes de criar novos jogos. Em seu conjunto de regras de criação de jogos, adicione um componente de algoritmo e defina a prioridade de preenchimento como “alta”. Para obter mais detalhes, consulte Personalize o algoritmo de correspondência.

  3. Atualize a sessão de jogo com novos dados de criação de jogos. O Amazon GameLift atualiza seu servidor de jogo com informações do jogo usando a função onUpdateGameSession de retorno de chamada do SDK do servidor (consulte Inicializar o processo do servidor). Adicione o código ao seu servidor de jogos para manipular os objetos de sessão de jogo atualizado como resultado da atividade de alocação. Saiba mais em Atualizar dados de correspondência no servidor de jogo.

  4. Desative a alocação automática para uma sessão de jogo. Você pode optar por interromper a alocação automática a qualquer momento durante uma sessão de jogo individual. Para interromper a alocação automática, adicione o código para o cliente do jogo ou o servidor de jogos chame a API do Amazon GameLift StopMatchmaking. Essa chamada requer o ID do ticket. Use o ID de ticket de alocação da última solicitação. Você pode obter essas informações nos dados de marcação da sessão do jogo, que são atualizados conforme descrito na etapa anterior.

Enviar solicitações de alocação (de um servidor de jogos)

Você pode iniciar as solicitações de alocação de correspondência diretamente do processo do servidor de jogos que está hospedando a sessão do jogo. O processo do servidor tem as informações mais atualizadas sobre os jogadores atuais conectados ao jogo e o status dos slots de jogador vazios.

Este tópico pressupõe que você já criou os componentes necessários do FlexMatch e adicionou com êxito os processos de marcação de jogos ao seu servidor de jogos e ao serviço de jogo do lado do cliente. Para obter mais detalhes sobre como configurar o FlexMatch, consulte Integração do FlexMatch com a hospedagem Amazon GameLift.

Para habilitar a alocação de correspondência para seu jogo, adicione as seguintes funcionalidades:

Assim como ocorre com outras funcionalidades do servidor, um servidor de jogos usa o SDK Server do Amazon GameLift. Esse SDK está disponível em C++ e C #.

Para fazer solicitações de alocação de correspondência a partir do seu servidor de jogo, execute as seguintes tarefas.

  1. Acione uma solicitação de alocação de correspondência. Geralmente, você inicia uma solicitação de alocação sempre que um jogo correspondente tem um ou mais slots de jogador vazios. Você pode vincular as solicitações de alocação a circunstâncias específicas, como preencher funções de personagens críticos ou equilibrar as equipes. Talvez você também queira limitar a atividade de alocação com base no tempo de uma sessão de jogo.

  2. Crie uma solicitação de alocação. Adicione o código para criar e enviar solicitações de alocação de correspondência para um marcador de jogos do FlexMatch. As solicitações de alocação são processadas usando estas APIs de servidor:

    Para criar uma solicitação de alocação, chame StartMatchBackfill com as informações a seguir. Para cancelar uma solicitação de alocação, chame StopMatchBackfill com o ID do ticket de solicitação de alocação.

    • ID de ticket: forneça um ID de ticket de marcação de jogo (ou faça com que ele seja gerado automaticamente). Você pode usar o mesmo mecanismo para atribuir IDs de ticket a solicitações de alocação e de marcação de jogos. Os tickets para a marcação de jogos e alocação são processados da mesma forma.

    • Matchmaker: identifique o marcador de jogo a ser usado para a solicitação de alocação. Geralmente, você usa o mesmo marcador de jogo usado para criar o jogo original. Essa solicitação usa um ARN de configuração de marcação de jogos. Essas informações são armazenadas no objeto de sessão do jogo (GameSession), que foi fornecido para o processo do servidor pelo Amazon GameLift quando a sessão do jogo foi ativada. O ARN da configuração da marcação do jogo está incluído na propriedade MatchmakerData.

    • ARN da sessão de jogo: identifique a sessão do jogo que está sendo alocada. É possível obter o ARN de sessão do jogo chamando a API GetGameSessionId() do servidor. Durante o processo de marcação de jogos, os tickets para as novas solicitações não têm um ID de sessão de jogo, mas os tickets de solicitações de alocação têm. A presença de um ID de sessão do jogo é uma forma de saber a diferença entre os tickets de jogos novos e os tickets de alocações.

    • Dados do jogador: inclua as informações dos jogadores (Jogador) para todos os jogadores atuais na sessão de jogo que você está alocando. Essas informações permitem que o marcador de jogos localize as melhores correspondências possíveis entre jogadores para os jogadores presentes na sessão de jogo atual. Você deve incluir a composição da equipe para cada jogador. Não especifique uma equipe se você não estiver usando o preenchimento. Se o seu servidor de jogos estiver informando o status da conexão dos jogadores com precisão, você poderá obter esses dados da seguinte forma:

      1. O processo do servidor que hospeda a sessão de jogo deve ter as informações mais atuais sobre quais jogadores estão atualmente conectados à sessão do jogo.

      2. Para obter IDs, atributos e atribuições de equipe dos jogadores, obtenha os dados dos jogadores no objeto de sessão do jogo (GameSession), na propriedade MatchmakerData (consulte Trabalhar com os dados do marcador de jogos). Os dados do marcador de jogos incluem todos os jogadores que foram inseridos por correspondência na sessão do jogo. Portanto, você precisará obter os dados apenas dos jogadores conectados no momento.

      3. Para obter a latência do jogador, se o marcador de jogos fizer chamadas para os dados de latência, colete os novos valores de latência de todos os jogadores atuais e os inclua em cada objeto Player. Se a latência de dados for omitida e o marcador de jogos tiver uma regra de latência, a correspondência dessa solicitação não será bem-sucedida. As solicitações de alocação exigem dados de latência somente para a região onde a sessão de jogo se encontra no momento. Você pode obter a região onde a sessão do jogo está na propriedade GameSessionId do objeto GameSession; este valor é um ARN, o que inclui a região.

  3. Acompanhe o status de uma solicitação de alocação. O Amazon GameLift atualiza o servidor de jogos com o status das solicitações de alocação usando a função onUpdateGameSession de retorno de chamada do SDK Server (consulte Inicializar o processo do servidor). Adicione o código para tratar as mensagens de status, assim como os objetos atualizados da sessão de jogo como resultado das solicitações de alocação bem-sucedidas, em Atualizar dados de correspondência no servidor de jogo.

    Um marcador de jogos pode processar apenas uma solicitação de alocação de correspondência de uma sessão de jogo por vez. Se você precisar cancelar uma solicitação, chame StopMatchBackfill(). Se você precisar alterar uma solicitação, chame StopMatchBackfill e, em seguida, envie uma solicitação atualizada.

Enviar solicitações de alocação (de um serviço do cliente)

Como alternativa ao envio de solicitações de alocação a partir de um servidor de jogos, você pode enviá-las a partir de um serviço de jogo do lado do cliente. Para usar essa opção, o serviço do lado do cliente deve ter acesso aos dados atuais sobre as atividades da sessão de jogo e as conexões dos jogadores; se o seu jogo usa um serviço de diretório de sessão, essa pode ser uma boa opção.

Este tópico pressupõe que você já criou os componentes necessários do FlexMatch e adicionou com êxito os processos de marcação de jogos ao seu servidor de jogos e ao serviço de jogo do lado do cliente. Para obter mais detalhes sobre como configurar o FlexMatch, consulte Integração do FlexMatch com a hospedagem Amazon GameLift.

Para habilitar a alocação de correspondência para seu jogo, adicione as seguintes funcionalidades:

Assim como ocorre com outras funcionalidades do cliente, o serviço de jogo do lado do cliente usa o SDK da AWS com a API do Amazon GameLift. Este SDK está disponível em C++, C# e em diversas outras linguagens. Para obter uma descrição geral das APIs de cliente, consulte a Referência de API do serviço Amazon GameLift, que descreve a API de serviço de nível baixo para ações relacionadas ao Amazon GameLift e inclui links para guias de referência específicos da linguagem.

Para configurar um serviço de jogo do lado do cliente para alocar jogos correspondentes, execute as tarefas a seguir.

  1. Acione uma solicitação de alocação. Geralmente, um jogo inicia uma solicitação de alocação sempre que um jogo correspondente tem um ou mais slots de jogador vazios. Você pode vincular as solicitações de alocação a circunstâncias específicas, como preencher funções de personagens críticos ou equilibrar as equipes. Talvez você também queira limitar a alocação com base no tempo de uma sessão de jogo. Independentemente da forma como acionará a solicitação, você precisará ao menos das informações a seguir. Você pode obter essas informações do objeto da sessão do jogo (GameSession) chamando DescribeGameSessions com um ID de sessão de jogo.

    • Número de slots de jogador vazios no momento. Esse valor pode ser calculado a partir do limite máximo de jogadores de uma sessão de jogo e da contagem atual de jogadores. O número atual de jogadores é atualizado sempre que o seu servidor de jogos entra em contato com o serviço do Amazon GameLift para validar a conexão de um novo jogador ou para informar que um jogador saiu.

    • Política de criação. Essa configuração indica se a sessão do jogo está aceitando novos jogadores no momento.

    O objeto da sessão do jogo contém outras informações potencialmente úteis, incluindo o horário de início da sessão do jogo, as propriedades de jogos personalizados e os dados do marcador de jogos.

  2. Crie uma solicitação de alocação. Adicione o código para criar e enviar solicitações de alocação de correspondência para um marcador de jogos do FlexMatch. As solicitações de alocação são processadas usando estas APIs de cliente:

    Para criar uma solicitação de alocação, chame StartMatchBackfill com as informações a seguir. Uma solicitação de alocação é semelhante a uma solicitação de marcação de jogos (consulte Solicitar criação de jogos para jogadores), mas também identifica a sessão do jogo existente. Para cancelar uma solicitação de alocação, chame StopMatchmaking com o ID do ticket de solicitação de alocação.

    • ID de ticket: forneça um ID de ticket de marcação de jogo (ou faça com que ele seja gerado automaticamente). Você pode usar o mesmo mecanismo para atribuir IDs de ticket a solicitações de alocação e de marcação de jogos. Os tickets para a marcação de jogos e alocação são processados da mesma forma.

    • Matchmaker: identifique o nome de uma configuração de marcação de jogos para usar. Geralmente, você usa o mesmo marcador de jogo para alocar que foi usado para criar a correspondência original. Essas informações estão em um objeto de sessão do jogo (GameSession), na propriedade MatchmakerData, sob o ARN da configuração de marcação de jogos. O valor de nome é a string que aparece logo após ""criação de jogosconfiguration/". (Por exemplo, no valor do ARN "arn:aws:gamelift:us-west-2:111122223333:criação de jogosconfiguration/MM-4v4", o nome da configuração de marcação de jogos é "MM-4v4".)

    • ARN da sessão do jogo: especifique a sessão do jogo que está sendo alocada. Use a propriedade GameSessionId do objeto de sessão do jogo; esse ID usa o valor do ARN de que você precisa. Os tickets de marcação de jogos (MatchmakingTicket) para as solicitações de alocação têm o ID de sessão do jogo enquanto estão sendo processados; os tickets de novas solicitações de marcação de jogos não recebem um ID de sessão do jogo até que a correspondência seja inserida; a presença do ID de sessão do jogo é uma forma de saber a diferença entre os tickets de novas correspondências e os tickets de alocação.

    • Dados do jogador: inclua as informações dos jogadores (Jogador) para todos os jogadores atuais na sessão de jogo que você está alocando. Essas informações permitem que o marcador de jogos localize as melhores correspondências de jogadores possíveis para os jogadores presentes na sessão de jogo atual. Você deve incluir a composição da equipe para cada jogador. Não especifique uma equipe se você não estiver usando o preenchimento. Se o seu servidor de jogos estiver informando o status da conexão dos jogadores com precisão, você poderá obter esses dados da seguinte forma:

      1. Chame DescribePlayerSessions() com o ID de sessão do jogo para descobrir todos os jogadores que estão conectados à sessão do jogo no momento. Cada sessão de jogador inclui um ID de jogador. Você pode adicionar um filtro de status para recuperar somente as sessões de jogador ativas.

      2. Obtenha os dados de jogador no objeto de sessão do jogo (GameSession), na propriedade MatchmakerData (consulte Trabalhar com os dados do marcador de jogos. Use os IDs de jogador adquiridos na etapa anterior para obter apenas os dados dos jogadores conectados no momento. Como os dados do marcador de jogos não são atualizados quando os jogadores abandonam o jogo, você precisa extrair os dados apenas para os jogadores atuais.

      3. Para obter a latência do jogador, se o marcador de jogos fizer chamadas para os dados de latência, colete os novos valores de latência de todos os jogadores atuais e os inclua no objeto Player. Se a latência de dados for omitida e o marcador de jogos tiver uma regra de latência, a correspondência dessa solicitação não será bem-sucedida. As solicitações de alocação exigem dados de latência somente para a região onde a sessão de jogo se encontra no momento. Você pode obter a região onde a sessão do jogo está na propriedade GameSessionId do objeto GameSession; este valor é um ARN, o que inclui a região.

  3. Acompanhe o status da solicitação de alocação. Adicione o código para seguir as atualizações de status do ticket de marcação de jogos. Você pode usar a configuração do mecanismo para acompanhar os tickets das novas solicitações de marcação de jogos (consulte Rastrear eventos de criação de jogos) usando a notificação de evento (de preferência) ou a sondagem. Embora você não precise acionar a atividade de aceitação de jogadores com solicitações de alocação e as informações dos jogadores sejam atualizadas no servidor de jogos, você ainda precisa monitorar o status do ticket para tratar as falhas de solicitação e as solicitações que foram reenviadas.

    Um marcador de jogos pode processar apenas uma solicitação de alocação de correspondência de uma sessão de jogo por vez. Se você precisar cancelar uma solicitação, chame StopMatchmaking. Se você precisar alterar uma solicitação, chame StopMatchmaking e, em seguida, envie uma solicitação atualizada.

    Assim que uma solicitação de alocação é bem-sucedida, o servidor de jogos recebe um objeto GameSession atualizado e processa as tarefas necessárias para incluir os novos jogadores na sessão do jogo. Veja mais em Atualizar dados de correspondência no servidor de jogo.

Atualizar dados de correspondência no servidor de jogo

Independentemente de como você inicia as solicitações de alocação de correspondência em seu jogo, o servidor de jogos deve ser capaz de processar as atualizações da sessão do jogo que o Amazon GameLift fornece como resultado das solicitações de alocação de correspondência.

Quando o Amazon GameLift conclui uma solicitação de preenchimento de jogo, com sucesso ou não, ele chama seu servidor de jogo usando a função de retorno de chamada onUpdateGameSession. Essa chamada tem três parâmetros de entrada: um ID de ticket de alocação de correspondência, uma mensagem de status, um objeto GameSession contendo os dados de marcação de jogos mais atualizados, incluindo as informações dos jogadores. Você precisa adicionar o código a seguir ao seu servidor de jogos como parte da integração do servidor de jogos:

  1. Implemente a função onUpdateGameSession. Esta função deve ser capaz de processar as seguintes mensagens de status (updateReason):

    • MATCHMAKING_DATA_UPDATED: a correspondência dos novos jogadores com a sessão do jogo foi bem-sucedida. O objeto GameSession contém os dados atualizados do marcador de jogos, incluindo dados dos jogadores existentes e dos jogadores recém-incluídos por correspondência.

    • BACKFILL_FAILED: a tentativa de alocação de correspondência falhou devido a um erro interno. O objeto GameSession não é alterado.

    • BACKFILL_TIMED_OUT: o marcador de jogos não encontrou uma correspondência para alocar dentro do limite de tempo. O objeto GameSession não é alterado.

    • BACKFILL_CANCELLED: a solicitação de alocação de correspondência foi cancelada por uma chamada para StopMatchmaking (cliente) ou StopMatchBackfill (servidor). O objeto GameSession não é alterado.

  2. Para que as correspondências de alocação sejam bem-sucedidas, use os dados atualizados do marcador de jogos para processar os novos jogadores quando eles se conectarem à sessão do jogo. No mínimo, você precisará usar as atribuições da equipe para os novos jogadores, bem como outros atributos de jogadores que são necessários para que o jogador possa começar a jogar.

  3. Na chamada do servidor de jogo para a ação do SDK Server ProcessReady(), adicione o nome do método de retorno de chamada onUpdateGameSession como um parâmetro do processo.