É importante lembrar de seguir as etapas das Conexões locais antes de prosseguir.
Ao sair da garagem (IS_NPL)
O pacote IS_NPL é referente à junção à pista, ou seja, sempre que um jogador sair da garagem e entrar na pista, a função responsável por lidar com esse pacote será ativada.
Esse pacote é do tipo receptor, ele não pode enviar dados, apenas receber.
Antes de iniciar
Dentro do Visual Studio crie uma pasta chamada "packets", e dentro dela crie um arquivo de classe chamado "IS_NPL".
Criando o manipulador
No arquivo criado previamente, vamos criar uma função chamada "Hook" para injetarmos todo o código de recepção dentro dela.
public static void Hook(InSim insim, IS_NPL npl)
{
foreach (Connections conn in Connections._connections.Values)
{
if (conn.UCID == npl.UCID)
{
conn.PLID = npl.PLID;
}
}
}
Qualquer tipo de código que você quiser utilizar no pacote NPL deverá ser
colocado depois da variável definida acima conn.PLID = npl.PLID;
, ou
caso contrário não irá funcionar corretamente.
Para que serve o foreach nas conexões?
Em todos os pacotes receptores, nós precisamos saber com qual jogador estamos lidando, há várias formas de verificar esse processo, porém o foreach é o mais convencional.
Na situação acima o que acontece é que anteriormente não havíamos atribuído o ID do jogador à conexão do jogador, então não era possível utilizar de alguns tipos de pacotes específicos, que utilizam o ID do jogador ao invés do ID da conexão.
Na maioria dos casos, é convencionalmente utilizado o ID de conexão, seja pra gerenciar o usuário em um banco de dados ou até mesmo para comparações diretas. Pois o ID do jogador é quase sempre invalidado ou alterado assim que o jogador sai da pista.
Porém esse ID do jogador é sempre atribuído quando um jogador sai da garagem, por isso atribuímos ele dentro da função acima e colocamos todo o resto do código que precisamos, abaixo da variável que é definida.
Por exemplo:
public static void Hook(InSim insim, IS_NPL npl)
{
foreach (Connections conn in Connections._connections.Values)
{
if (conn.UCID == npl.UCID)
{
conn.PLID = npl.PLID;
insim.Send($"/msg O usuário {conn.UName} tem o ID {conn.PLID}");
insim.Send($"/msg O ID de conexão dele é {conn.UCID}");
}
}
}
O arquivo inteiro irá se assemelhar à esse:
using InSimDotNet;
using InSimDotNet.Packets;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace insim
{
public class IS_NPL
{
public static void Hook(InSim insim, IS_NPL npl)
{
foreach (Connections conn in Connections._connections.Values)
{
if (conn.UCID == npl.UCID)
{
conn.PLID = npl.PLID;
insim.Send($"/msg O usuário {conn.UName} tem o ID {conn.PLID}");
insim.Send($"/msg O ID de conexão dele é {conn.UCID}");
}
}
}
}
}
Injete o pacote dentro do InSim, seguindo o mesmo processo de Ao entrar no servidor.
Referências da API
Lista de propriedades retornadas pelo pacote.
UCID
Tipo: byte | número
Descrição: ID da conexão
PLID
Tipo: byte | número
Descrição: ID do jogador
PType
Tipo: Tipos de jogador
Descrição: Qual o tipo do jogador em questão
Flags
Tipo: Flags do jogador
Descrição: Quais flags estão associadas ao jogador
PName
Tipo: string | texto
Descrição: Nome do jogador
Plate
Tipo: string | texto
Descrição: Placa do carro do jogador
CName
Tipo: string | texto
Descrição: Nome do carro do jogador
SName
Tipo: string | texto
Descrição: Nome da skin do carro do jogador
Tyres
Tipo: Tipos dos pneus
Descrição: Quais são os tipos dos pneus
H_Mass
Tipo: byte | número
Descrição: Massa voluntária adicionada ao carro do jogador
H_TRes
Tipo: byte | número
Descrição: Restrição de ingestão voluntária adicionada ao carro do jogador
Model
Tipo: byte | número
Descrição: Modelo do jogador
Pass
Tipo: Flags dos passageiros
Descrição: Quais flags estão associadas aos passageiros
RWAdj
Tipo: byte | número
Descrição: Redução da largura do pneu (traseiro)
FWAdj
Tipo: byte | número
Descrição: Redução da largura do pneu (dianteiro)
SetF
Tipo: Flags do setup
Descrição: Quais flags estão associadas ao setup do veículo
NumP
Tipo: byte | número
Descrição: Número de jogadores na pista (zero se for uma solicitação para entrar na pista)
Config
Tipo: byte | número
Descrição: Configuração do veículo (por exemplo UF1 = 1teto aberto
)