Enchimento de jogos existentes com FlexMatch - Amazônia 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á.

Enchimento de jogos existentes com FlexMatch

A alocação de correspondência usa os mecanismos do FlexMatch para encontrar novos jogadores nas sessões de jogos existentes correspondentes. Embora você sempre possa adicionar jogadores a qualquer jogo (vejaJunte-se a um jogador a uma sessão de jogo), 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 marcar jogos do FlexMatch.

nota

O preenchimento do FlexMatch não está disponível no momento para jogos que usam os 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 GameLift acionará automaticamente uma solicitação de alocação sempre que uma sessão de jogo começa 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 a partida 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 de 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 da partida.

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, ele é usado com todas as sessões de jogo combinadas criadas com esse matchmaker. O GameLift começa a gerar solicitações de alocação para uma sessão de jogo não completa assim que a sessão inicia em um servidor de jogos.

    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 marcação de jogos.

  2. Ativar a priorização da alocação. Personalize seu processo de matchmaking para priorizar o preenchimento de solicitações de preenchimento antes de criar novas correspondências. Em seu conjunto de regras de matchmaking, 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 do jogo com novos dados da marcadora de jogos. O Amazon GameLift atualiza o servidor de jogos com informações de correspondência usando a função de retorno de chamada do SDK ServeronUpdateGameSession(consulteInicialize 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 do 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 de jogo ou o servidor de jogos para fazer a chamada de API do GameLiftStopMatchmaking. Essa chamada requer o ID do tíquete. Use o ID de tíquete 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 preenchimento (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 criaçã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 FlexMatch com hospedagem 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 tíquete de solicitação de alocação.

    • ID do tíquete— Forneça um ID de tíquete de marcação de jogo (ou faça com que ele seja gerado automaticamente). Você pode usar o mesmo mecanismo para atribuir IDs de tíquete a solicitações de alocação e de marcação de jogos. Os tíquetes para a marcação de jogos e alocação são processados da mesma forma.

    • Marcador de jogos— Identifique o marcador de jogos 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 ao ativar a sessão do jogo. 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. Você pode obter o ARN da sessão do jogo chamando a API do servidorGetGameSessionId(). Durante o processo de marcação de jogos, os tíquetes para as novas solicitações não têm um ID de sessão de jogo, mas os tíquetes 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 tíquetes de jogos novos e os tíquetes de alocações.

    • Dados do jogador— Incluir informações do jogador (Player) Para todos os jogadores atuais na sessão do jogo 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 associaçã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 de jogadores, atributos e atribuições de equipe, obtenha os dados dos jogadores do objeto de sessão do jogo (GameSession),MatchmakerDatapropriedade (consulteTrabalhar 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. Acompanhar 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 de retorno de chamada do SDK ServeronUpdateGameSession(consulteInicialize o processo do servidor). Adicione o código para processar as mensagens de status, assim como os objetos atualizados da sessão de jogo como resultado das solicitações de alocação bem-sucedidas, emAtualizar dados de correspondência no servidor do 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, chameStopMatchBackfill(). Se você precisar alterar uma solicitação, chame StopMatchBackfill e, em seguida, envie uma solicitação atualizada.

Enviar solicitações de preenchimento (de um serviço ao 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 criaçã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 FlexMatch com hospedagem 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 oAWSSDK 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. A contagem atual de jogadores é atualizada sempre que o servidor de jogos entra em contato com o serviço Amazon GameLift para validar uma nova conexão de 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 marcaçã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 tíquete de solicitação de alocação.

    • ID do tíquete— Forneça um ID de tíquete de marcação de jogo (ou faça com que ele seja gerado automaticamente). Você pode usar o mesmo mecanismo para atribuir IDs de tíquete a solicitações de alocação e de marcação de jogos. Os tíquetes para a marcação de jogos e alocação são processados da mesma forma.

    • Marcador de jogos— 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 ""matchmakingconfiguration/". (Por exemplo, no valor do ARN "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4", o nome da configuração de marcação de jogos é "MM-4v4".)

    • ARN da sessão de 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 tíquetes 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 tíquetes 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 tíquetes de novas correspondências e os tíquetes de alocação.

    • Dados do jogador— Incluir informações do jogador (Player) Para todos os jogadores atuais na sessão do jogo 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 associaçã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 tíquete de marcação de jogos. Você pode usar a configuração do mecanismo para acompanhar os tíquetes das novas solicitações de marcação de jogos (consulte Acompanhe os eventos de marcação) 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 tíquete 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 do jogo.

Atualizar dados de correspondência no servidor do 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 alocação de correspondência, com ou não, ele chama o servidor de jogos usando a função de retorno de chamadaonUpdateGameSession. Essa chamada tem três parâmetros de entrada: um ID de tíquete 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 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 ServerProcessReady(), adicione oonUpdateGameSessionnome do método callback como um parâmetro de processo.