PROBLEMA: Desenvolvi um modo de jogo de PVP que concentra 10 jogadores divididos igualmente em dois times, os quais disputarão round a round até que um dos times atinja 13 pontos e assim a vitória. Com o modo de jogo pronto, necessito de um sistema de filas que identifique grupos de jogadores buscando por partida e que forme times prontos para requisitar a criação da partida do modo de jogo.
CONDIÇÕES GERAIS: Por se tratar de um sistema de fila que comporta a formação de times basedos em grupos, os jogadores em um grupo "incompleto" não podem ser separados e precisam permanecer juntos durante a formação de um time. Os grupos dos jogadores devem ser persistidos para que ao fim da partida, os mesmos retornem a busca de novos times e partidas no mesmo grupo.
SOLUÇÃO REQUERIDA: A formação de times de 5 jogadores; A preservação dos grupo; A definição dos times de ataque e defesa da times partida; O consumo de uma função (Fictícia), quando os times estiverem prontos para iniciar a partida;
-
Desenvolvemos um modo de jogo de PVP que concentra 10 jogadores divididos igualmente em dois times, os quais disputarão round a round até que um dos times atinja 13 pontos e assim a vitória.
-
Com o modo de jogo pronto, necessitaremos de um sistema de filas que identifique grupos de jogadores buscando por partida e que forme times prontos para requisitar a criação da partida do modo de jogo.
-
Por se tratar de um sistema de fila que comporta a formação de times basedos em grupos, os jogadores em um grupo "incompleto" não podem ser separados e precisam permanecer juntos durante a formação de um time.
-
Os grupos dos jogadores devem ser persistidos para que ao fim da partida, os mesmos retornem a busca de novos times e partidas no mesmo grupo.
-
Utilize Lua como linguagem principal para o desenvolvimento, fora do ambiente do FiveM.
-
Priorize a eficiência e a escalabilidade do sistema.
-
Documente adequadamente o código para facilitar a manutenção e futuras expansões.
-
Envie o código para um repositório destinado ao desafio, fazendo o uso de boas práticas do uso do Git & Github.
-
A formação de times de 5 jogadores;
-
A preservação dos grupo;
-
A definição dos times de ataque e defesa da times partida;
-
O consumo de uma função (Fictícia), quando os times estiverem prontos para iniciar a partida;
- Abra seu navegador e vá para a página de downloads do Lua.
- Baixe a versão mais recente do Lua para Windows, normalmente em um arquivo .zip.
- Navegue até a pasta onde o arquivo .zip foi baixado.
- Clique com o botão direito no arquivo .zip e selecione "Extrair Tudo...".
- Escolha um local onde você deseja extrair os arquivos, por exemplo,
C:\Lua
.
- Abra o Painel de Controle.
- Vá para Sistema e Segurança > Sistema > Configurações avançadas do sistema.
- Na janela que abrir, clique em Variáveis de Ambiente.
- Na seção Variáveis de Sistema, encontre a variável chamada
Path
e clique em Editar. - Clique em Novo e adicione o caminho da pasta onde o Lua foi instalado, por exemplo,
C:\Lua
. - Clique em OK para fechar todas as janelas.
- Navegue até a pasta onde você extraiu o Lua, por exemplo,
C:\Lua
. - Renomeie o arquivo
lua54.exe
paralua.exe
.
- Abra o Prompt de Comando.
- No Prompt de Comando, digite
lua -v
e pressione Enter. - Você deve ver a versão do Lua instalada, indicando que a instalação foi bem-sucedida.
- Abra seu editor de texto favorito (por exemplo, VSCode).
- Execute o arquivo
start.lua
Este projeto consiste em um "matchmaking" feito em Lua que gerencia a fila e formação de times para partidas de PVP, grupos (partys), equipes (teams) e partidas (matches).
data.lua
functions.lua
main.lua
models/
party.lua
player.lua
team.lua
services/
match.lua
queue.lua
-
Lib.CreatePlayer
- Descrição: Cria um novo jogador.
- Argumentos:
playerData
(tabela): Dados do jogador a ser criado.
- Como usar:
local newPlayer = Lib.CreatePlayer({ id = 1, name = 'Player1', partyId = 1 })
-
Lib.CreateParty
- Descrição: Cria um novo grupo.
- Como usar:
local newParty = Lib.CreateParty()
-
Lib.CreateTeam
- Descrição: Cria uma nova equipe.
- Argumentos:
nome do time
(string).members
(tabela): Lista de jogadores.type
(string): Tipo de equipe (attackers/defenders).
- Como usar:
local newTeam = Lib.CreateTeam(teamName, members, 'attackers')
-
Lib.CreateMatch
- Descrição: Cria uma nova partida.
- Argumentos:
lib
(tabela): Biblioteca de funções.
- Como usar:
local newMatch = Lib.CreateMatch(Lib)
-
Lib.GetPlayerById
- Descrição: Busca um jogador pelo ID.
- Argumentos:
playerId
(number): ID do jogador.
- Como usar:
local player = Lib.GetPlayerById(1)
-
Lib.GetPartyById
- Descrição: Busca um grupo pelo ID.
- Argumentos:
partyId
(number): ID do grupo.
- Como usar:
local party = Lib.GetPartyById(1)
-
Lib.GetTeamById
- Descrição: Busca uma equipe pelo ID.
- Argumentos:
teamId
(number): ID da equipe.
- Como usar:
local team = Lib.GetTeamById(1)
-
Lib.GetPartys
- Descrição: Retorna todos os grupos.
- Argumentos: Nenhum.
- Como usar:
local partys = Lib.GetPartys()