Executando verificação de segurança...
9

Como uma diversão entre amigos se tornou o projeto que mais gosto de desenvolver

Alguns meses atrás comecei a estudar JavaScript no BackEnd, mais especificamente NodeJs para desenvolver algumas aplicações que tinha vontade e também começar a migrar para desenvolvimento Mobile com React Native.

Essa explicação é importante para entender os próximos passos

Já um pouco experiente em NodeJs, estudei um pouco o Discord.js e fiquei com muita vontade de desenvolver algum BOT no Discord mas sem ideias. Contudo, alguns amigos com quem converso e jogo VALORANT começaram a realizar partidas personalizadas com 5 jogadores de cada lado, todos em uma chamada única (que se dividia no começo da partida) e com bastante resenha.

Isso já era bem divertido e estava muito bom participar, era menos estressante do que jogar normalmente contra pessoas aleatórias (mesmo que com amigos ao lado), porém ainda estávamos com alguns problemas, sendo o principal o sorteio de time de forma justa. Alguns amigos novos entraram e isso se tornou um problema maior ainda, sortear os times de forma aleatória muitas vezes montava composições injustas e fazer uma seleção manual (como nas brincadeiras presenciais de quando eramos crianças em que o considerado "melhor" ou "pior" eram divididos e escolhiam um por um de forma alternada para fechar os times) muitas vezes montava um time extremamente forte e outro muito fraco (a famosa panela).

Comecei a pensar como poderia melhorar isso, alguns dos participantes das partidas eram programadores e auxiliaram em desenvolver algumas ideias, como sempre nos reunimos no Discord para jogar, com certeza era o lugar mais prático (seria mais fácil com que todos aceitassem utilizar ao invés de criar um site ou algum aplicativo), foi então que encontrei a oportunidade perfeita para praticar Node.Js e Discord.Js em algum projeto!

Iniciei o desenvolvimento de forma simples, criando um comando de Ping (muito comum como primeiro comando em um Bot de Discord, algo como um Hello World) e com a estrutura base definida, comecei a criar uma forma de sortear os times de forma justa e que todos achassem boa.

Abaixo segue a forma que encontrei para realizar um sorteio justo de times

Antes, vale citar que tínhamos uma planilha no Google Sheets com a lista de jogadores das partidas que estávamos fazendo e a quantidade de vitórias/derrotas e por consequência, a taxa de vitória (win rate). Com isso, decidi utilizar o win rate para balancear os times, criando uma função que realiza um sorteio de forma aleatória e em seguida calcula a média de win rate do time sorteado e compara com o outro time, caso a média esteja dentro de um limite (atualmente 10%) o time é considerado justo. Um problema que ainda existiria é: E se o sorteio nunca se tornar justo? Para evitar que isso ocorresse, criei um limite máximo de sorteios (atualmente 15), então o Bot tenta sortear 15 times diferentes tentando encontrar o time mais justo, caso não encontre nessa quantidade, ele define como time justo o sorteio que tiver a taxa mais próxima do limite (podendo então surgir times com diferença maior do que 10%, mas o mais justo possível).

Essa função auxílio demais na criação de partidas, inicialmente ela ainda apresentava problemas, por exemplo quando surgiam pessoas novas para jogar, criamos um padrão de defini-la como 50% de win rate, mas se o jogador for muito bom ou muito ruim, pode acabar desbalanceado nas primeiras partidas, algo que se ajusta com o tempo.

Depois de alguns dias utilizando o Bot, foram adicionadas outras funções, atualmente ele é capaz de:

  • Criar uma partida
  • Solicitar confirmação de participação da partida
  • Sortear um mapa utilizando uma API do VALORANT (sempre com a lista de mapas atualizada)
  • Listar jogadores de alguma partida
  • Sortear times de uma partida
  • Listar jogadores (apresentação de taxa de vitória e partidas)
  • Obter ping (pong?)
  • Iniciar a partida
  • Criar canal de mensagens privada
  • Bloquear jogador

A função de Iniciar a partida é muito útil, quando executada ela automaticamente obtém os jogadores de cada time sorteado anteriormente e cria 2 canais de áudio (um para cada time) e separa os jogadores de forma automática, poupando o tempo de ter que criar canais e se dividir.

Os canais são privados, sendo assim apenas os jogadores conseguem enxergar, poupando a bagunça na listagem de canais e temporários, excluindo automaticamente quando todos saem do canal

Outra função útil é a Bloquear jogador que está ligeiramente ligada com a de Criar canal de mensagens privada, ambos foram criados para poupar a saúde mental, como existem bastante jogadores, alguém pode não se sentir confortável jogando com outro e por isso deseje bloqueá-lo de cair em seu time, e então entra o comando para criar um canal de mensagens privadas, onde apenas você consegue visualizar mas ainda consegue conversar com o Bot e citar outros jogadores de forma sigilosa, podendo então bloquear sem ser julgado.

O bloqueio não é divulgado e é quase impossível saber que você está bloqueado por alguém, na tentativa do sorteio o Bot tenta separar os jogadores até que consiga ou que atenda o limite de tentativas de sorteios. No fim, o bot SEMPRE prezará pelo jogo justo, então caso não consiga separar as pessoas bloqueadas ele irá focar em manter uma taxa de win rate justa. Cada jogador pode bloquear apenas 3 outros jogadores.

Alguns jogadores novos entraram no servidor, vindos de outros que já eram novos, criando uma corrente que atualmente acumulou 40 jogadores (e crescendo) em 2 semanas de projeto.

Até hoje mais cedo, se tratava de um projeto simples para brincar com amigos, porém hoje quando decidi parar de jogar (amanhã tem mais) tinham outras 10 pessoas na sala de Espera aguardando para jogar mais, e foi quando eu desconectei do Discord e vi os outros utilizando os comandos, algo simples mas que me deixou contente, ver que outros jogadores estão (de forma indepentende) utilizando o Bot para gerenciar as partidas e se divertir me deixou contente e o projeto que mais gostei de desenvolver nos últimos anos se tornou o projeto em que mais me senti útil e eficaz ao desenvolver.

A ideia é continuar deixando o Bot melhor com mais funções uteis e torna-lo importante na comunidade, atualmente pequena mas que todos os dias aumenta um pouco e quem sabe um dia seja um servidor do Discord com um Bot onde amigos consigam se divertir de forma prática e o mais importante: Justa.

Por fim, a mensagem final é:
Se você se sentir bem, continue, pode ser algo simples mas nada impede que em algum momento se torne um projeto importante não só para você como para outros usuários.

Um abraço!
❤☕

Carregando publicação patrocinada...
2

Que projeto dahora, tomara cresça mais ainda, não sei se já fez algo parecido no bot mas um canal de texto onde só o bot pode escrever e lá tem um ranking que o próprio bot atualiza a cada partida séria interessante, e com várias categorias talvez no mesmo canal de texto ou em diferentes para cada categoria de rank como:

         RANK

taxa de vitoria(% de vitorias comparado com partidas jogadas)
maior taxa de vitórias em mapa x
maior tava de vitórias em mapa y
kd
etc...

acho que tantos ranks é de mais porém adicionar os mais legais seria interessante, quem não ia querer aumentar seu rank e estar sempre entre os top 10 né?

2

Gostei da ideia.

Atualmente existe um comando que busca a lista que é organizada por WinRate, então acaba sendo um ranking, mas algo como maior taxa de vitórias em MAPA e outras categorias acho que seria muito eficaz.

Vou estudar sobre 😁

1
1
1
1