Sven Co-op

Sven Co-op

38 ratings
Como criar um servidor para seus amigos SEM abrir portas ou configurar nada no Firewall
By KernCore and 3 collaborators
Aprenda neste guia a criar um servidor particular para seus amigos de maneira rápida e fácil. Sem precisar abrir portas, configurações especiais de roteador, regras específicas de firewall ou configurações de redes menos conhecidas/importantes.

O guia procura explicar novo recurso do jogo conhecido como "NAT punch-through" introduzido na versão 5.19 do Sven Co-op em 1º de Abril de 2019, e responder as perguntas mais frequentes sobre o mesmo recurso.
2
   
Award
Favorite
Favorited
Unfavorite
Super Resumo
  1. Um dos jogadores atuará como host iniciando um jogo através da opção "Create Game" (Criar Jogo) no menu principal.
  2. O jogador host irá copiar sua própria Steam ID (ex.: STEAM_0:1:12345678) e compartilhar com os amigos. -- Se for você, poderá usar o https://steamid.io/ para lhe ajudar a encontrar caso não consiga ver no console do jogo.
  3. Os amigos irão se conectar ao jogador host usando o seguinte comando no console:
    connect STEAM_0:1:12345678
    Substitua o STEAM_0:1:12345678 pela Steam ID real do jogador host. Não use aspas no comando.
  4. Pronto!
Introdução
Olá pessoal,

O Sven Co-op recebeu na versão 5.19 que saiu no dia 1º de Abril de 2019 (Isso não é uma piada de 1º de Abril) um update que permite os jogadores hosts de usarem o serviço NAT Punch-Through da Steam (Também conhecido como "peer-to-peer" [Ponto-a-ponto] ou "direct client-to-client" [Cliente-pra-cliente direto]).

Isso significa que qualquer pessoa, incluindo você, pode criar um jogo pelo menu principal do jogo, e convidar os seus amigos pra entrar no seu servidor sem precisar configurar portas no roteador, modificar regras no firewall, usar VPN (Hamachi, etc), ou fazer outra configuração de internet sem sentido e desconhecido para o usador comum.

Você pode direcionar o seu obrigado ao nosso engenheiro programador GeckonCZ por implementar esse recurso.
Como isso funciona?
Quando você cria um servidor listen, que é criado através do menu principal do jogo na opção "Create Game" (Criar jogo), o Sven Co-op vai utilizar o serviço NAT Punch-Through da Steam para ter certeza de que a conexão entre o servidor listen e qualquer outro jogador que se conectar possa ser feita mesmo atravessando as barreiras como firewalls e configurações NAT. Configurações especiais para abrir rotas de entrada para pessoas que estão criando um servidor listen não serão mais necessárias.

Isso resolve um problema bem comum onde o pessoal não consegue fazer o próprio servidor conectável para jogadores no mundo, particularmente para jogador com os amigos.

Isso deve, também, eliminar a necessidade de qualquer um ir para servidores públicos onde um pequeno grupo de amigos assume o controle do servidor público fazendo votações de kick em qualquer pessoa que entrar no servidor, deixando assim o grupo jogando sozinho no servidor público. Este tem sido um grande problema ultimamente, e nós esperamos resolver esse problema com esse recurso novo (Nós entendemos que grupos de amigos gostam muito de jogar sem serem interrompidos, então por favor espalhem a existência desse recurso!!!).
Criando uma partida
Essa função já vem ativada por padrão caso a opção de LAN esteja desabilitada. Qualquer um que souber sua Steam ID poderá se conectar a seu jogo assim que você iniciar uma partida e estiver jogando em um mapa. Caso queira desativar essa função, você pode desativá-la com o parâmetro "-nop2p" nas propriedades do jogo na Steam.

Assim que você iniciar sua partida, você precisará fornecer sua SteamID para seus amigos para que eles possam se juntar a seu jogo. Você pode vê-lo usando o comando "status" no seu console do jogo, ou procure por algo parecido com isso:

Initializing IP networking Local IP address: 192.168.56.1, SV port: 27015, CL port: 27005 Initializing Steam P2P networking Local SteamID: STEAM_0:1:12345678

Lembre-se que a conectividade via IP ainda continua funcionando como antes, e se estava funcionando anteriormente qualquer um poderá entrar na sua partida pois ainda aparecerá na lista de servidores.
Não esqueça de definir uma senha caso queira que a partida seja privada.

Se estiver jogando em uma rede LAN apenas não precisará usar essa função, podendo alternar o modo LAN (CVAR "sv_lan" = 1) através das opções de criar jogo antes de iniciar a partida.

Entrando no servidor do seu amigo
Como esse tipo de partida não aparece na lista de servidores (nem mesmo na aba "Friends") você precisará saber a SteamID do jogador host do servidor.

Para isso você pode usar o site https://steamid.io/ e consultar com o endereço URL do perfil do jogador host, por exemplo "https://gtm.you1.cn/id/AdamR/". Você poderá então copiar o item marcado "steamID" que inicia com "STEAM_......", como por exemplo "STEAM_0:1:12345678".

Assim que você encontrar a Steam ID você poderá entrar na partida usando o comando "connect" no console do Sven Co-op, por exemplo:

connect STEAM_0:1:12345678

Outros formatos de Steam ID como "steamID3" e "steamID64" não irão funcionar. Não utilize aspas entre a Steam ID.
Perguntas Frequentes e Respostas
Este sistema faz uso da arquitetura peer-to-peer (Ponto-a-ponto) verdadeira?

Sim e Não.

A conexão inicial é feita usando o serviço de NAT Punch-Through da Steam, fazendo o tratamento do host e dos jogadores que estão entrando como 2 pontos iguais. O serviço da Steam tenta 'negociar' um caminho para esses 2 jogadores a fim de formar uma conexão UDP/IP direta entre eles. Porém caso nenhuma rota direta seja estabelecida a Steam pode usar os próprios servidores de relay para formar uma ponte entre os 2 jogadores.

Contudo, uma vez que a conexão inicial é estabelecida, o relacionamento clássico entre cliente-servidor é mantida entre os jogadores que entraram no servidor, e o jogador host. Jogadores que se conectaram individualmente não possuem uma comunicação direta com outros jogadores a não ser o jogador host, então caso o jogador host fechar o jogo, sair do servidor, ou perder a conexão com a internet, todos os jogadores irão desconectar do servidor (Não há troca de host ou migração para outro jogador).

Você pode acessar os seguintes links abaixo mais informações sobre as tecnicalidades disso (Em Inglês):

https://partner.steamgames.com/doc/features/multiplayer/networking
https://en.wikipedia.org/wiki/UDP_hole_punching

Este método é mais lento ou possui mais lag que uma conexão direta?

Em principio, os servidores de relay da Steam que são utilizados sempre possuem uma pequena perda de performance por causa das rotas/hops adicionais que são necessárias para juntar a conexão de 2 jogadores juntos. Tendo dito isto, o serviço de NAT Punch-Through da Steam e os servidores de relay utilizados geralmente são aceitos para ter uma operação muito boa e confiável, logo não haverá uma perda notável de qualidade entre as conexões dos jogadores (Sven Co-op não é um jogo particularmente competitivo). Mais benchmarking seria necessário para responder essa pergunta com exatidão quando os servidores de relay da Steam são necessários.

Isso não se aplica caso o serviço de NAT Punch-Through conseguir formar uma conexão direta entre 2 jogadores. Em termos de performance isso funciona como uma classica conexão direta de UDP/IP.

Esse metodo mantém o meu IP publico secreto?

Não.

Se os servidores de relay da Steam forem usados então o seu endereço IP não ficará visível imediatamente até que a conexão seja estabelecida, mas como o NAT Punch-Through tenta formar uma conexão direta antes de tentar usar o método dos servidores de relay, o seu IP público é exposto.

Não há nenhuma opção que possa ser usada para forçar você a usar apenas os servidores de relay, e tentar impedir o serviço de conexão direta do NAT Punch-Through não irá ajudar.

Isso é aplicado tanto no jogador host quanto nos jogadores que entrarem no servidor.

Posso banir jogadores de entrar no servidor?

Sim.

Assim como antes dos métodos serem introduzidos, você pode usar o comando no console "banid" para banir uma Steam ID de entrar no seu servidor, por exemplo: "banid 0 STEAM_0:1:12345678".

O Comando RCON ainda funcionará?

Não

RCON ainda depende nos protocólos UDP/IP sendo diretamente conectáveis.

É muito improvável que isso seja necessário já que um jogador real vai sempre estar executando o jogo.

Isso funciona com servidores dedicados?

Não.

Servidores dedicados não possuem ligação com nenhuma conta Steam, então não há nenhum jeito de associar uma Steam ID com eles. Se isso fosse possível seria necessário a criação de uma conta Steam separada, como a mesma conta Steam NÃO pode estar ligada E ativamente usando os serviços da Steam (Jogando/Criando um servidor/Usando a SteamCMD, etc) em 2 instâncias ao mesmo tempo.

Conexão direta de UDP/IP ainda é necessário.
Final
Este guia foi traduzido por KernCore e R4to0, esperamos que este guia tenha explicado o novo recurso introduzido no Sven Co-op e tenha sanado todas as suas dúvidas sobre o uso e funcionalidades do mesmo no jogo, caso queira ver o guia original (criado por Adambean e GeckonCZ) onde esta tradução se baseou clique no link abaixo:
https://gtm.you1.cn/sharedfiles/filedetails/?id=1705149010
2 Comments
R4to0  [author] 23 May, 2023 @ 11:41am 
@Sr.Foske Olá, em que condição você diz que precisa de redirecionamento de portas?

Para uma sessão onde um cria através do próprio jogo e o outro conecta via Steam ID no console do jogo não há necessidade de port forward pois a Steam faz toda a negociação do NAT utilizando conexões de saída em ambos os lados, com opção de utilizar seus servidores como relay em último recurso.

Caso esteja criando um servidor Dedicado através da opção "Dedicated Server" (SvenDS) nesse caso vai realmente precisar redirecionar portas.
Fopsky; Resident Nerd 23 May, 2023 @ 10:45am 
ineficaz, precisa de port forwarding