SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    RPC - Pawn.RakNet

    Jelly23
    Jelly23
    --> Postador Iniciante
    --> Postador Iniciante


    Celular : 41 012345678
    Mensagens : 4
    Moedas : 2266
    Data de inscrição : 16/02/2018
    Idade : 143

    RPC - Pawn.RakNet Empty RPC - Pawn.RakNet

    Mensagem por Jelly23 Sex 16 Fev 2018 - 16:31

    • Introdução


    Obs: Este tópico é para aqueles que tem algum interesse em criar um plugin como o YSF ou pretendem utilizar RPCs com o plugin Pawn.RakNet de UrShadow.

    Estarei explicando o que são RPCs e providenciando seus parâmetros e IDs para uso, já que nem todos estão documentados e muito menos seus parâmetros. 

    Alguns RPCs tem os mesmos parâmetros que a função que geralmente estão relacionados com, já outros não, tornando seu uso complicado.



    • O que é RPC?

    RPC é um acrônimo de Remote Procedure Call (Chamada de Procedimento Remoto), um protocolo usado para solicitar um serviço de um cliente localizado em outro computador em uma rede sem ter que entender os detalhes da rede. Como você já sabe, SA-MP usa o motor (engine) de rede RakNet.

    Digamos que você explodiu um jogador, o servidor enviará um RPC (0x47 - RPC_CreateExplosion) ao cliente solicitando que a explosão seja criada.

    O cliente também envia chamadas de procedimento remoto de volta. Digamos que você entrou em um veículo, seu cliente enviará uma notificação de entrada para o servidor, nesse caso, um RPC informando esse evento (RPC_EnterVehicle) será enviado.

    Tipos de RPCs:


            -Outcoming RPCs: RPCs mandados pelo servidor ao cliente.
            -Incoming RPCs: RPCs mandados pelo cliente ao servidor.

    Prioridades:

            -SYSTEM_PRIORITY: Usada pelo RakNet para enviar chamadas de prioridade acima do normal.

            -HIGH_PRIORITY: Chamadas de alta prioridade são enviadas antes das chamadas de prioridade média.

            -MEDIUM_PRIORITY: As chamadas de prioridade média são enviadas antes das chamadas de baixa prioridade.

            -LOW_PRIORITY: As chamadas de baixa prioridade só são enviadas quando nenhuma outra chamada está aguardando.[/INDENT]

    Confiabilidades:

            -UNRELIABLE: Os pacotes UNRELIABLE são enviados por UDP direto. Eles podem chegar fora de ordem, ou não. Isto é melhor para os dados que não são importantes ou os dados que você envia com muita freqüência, mesmo que alguns pacotes sejam perdidos, os pacotes mais novos serão compensados.
    Vantagens - Esses pacotes não precisam ser reconhecidos pela rede, salvando o tamanho de um cabeçalho UDP em reconhecimento (cerca de 50 bytes ou mais). As economias podem realmente se somar.
    Desvantagens - Sem pedidos de pacotes, os pacotes podem nunca chegar, esses pacotes são os primeiros a serem descartados se o buffer de envio estiver cheio.

            -UNRELIABLE_SEQUENCED: Os pacotes UNRELIABLE_SEQUENCED são os mesmos que os pacotes UNRELIABLE, exceto que apenas o pacote mais recente é aceito. Os pacotes mais antigos são ignorados. Vantagens - Mesma baixa sobrecarga que pacotes UNRELIABLE, e você não precisa se preocupar com pacotes mais antigos que mudam seus dados para valores antigos.
    Desvantagens - muitos pacotes serão descartados, uma vez que eles nunca podem chegar por causa do UDP e podem cair mesmo quando eles chegam. Esses pacotes são os primeiros a serem descartados se o buffer de envio estiver cheio. O último pacote enviado pode nunca chegar, o que pode ser um problema se você parar de enviar pacotes em algum ponto particular.

    -RELIABLE: Os pacotes RELIABLE são pacotes UDP monitorados por uma camada de confiabilidade para garantir que eles chegam ao destino.
    Vantagens - Você sabe que o pacote chegará lá. Eventualmente ...
    Desvantagens - Retransmissões e reconhecimentos podem adicionar exigências significativas de largura de banda. Os pacotes podem chegar muito tarde se a rede estiver ocupada. Não há pedidos de pacotes.

            -RELIABLE_ORDERED: Os pacotes RELIABLE_ORDERED são pacotes UDP monitorados por uma camada de confiabilidade para garantir que eles chegam ao destino. Vantagens - O pacote chegará na ordem em que foi enviado. Estes são, de longe, os mais fáceis de programar, porque você não precisa se preocupar com comportamento estranho devido a falta de ordem ou pacotes perdidos.
    Desvantagens - Retransmissões e reconhecimentos podem adicionar exigências significativas de largura de banda. Os pacotes podem chegar muito tarde se a rede estiver ocupada. Um pacote tardio pode atrasar muitos pacotes que chegaram mais cedo, resultando em espasmos significativos. No entanto, essa desvantagem pode ser atenuada pelo uso inteligente de fluxos de pedidos.

            -RELIABLE_SEQUENCED: Os pacotes RELIABLE_SEQUENCED são pacotes UDP monitorados por uma camada de confiabilidade para garantir que eles chegam ao destino e são seqüenciados no destino.
    Vantagens - Você obtém a confiabilidade dos pacotes UDP, o pedido de pacotes ordenados, mas não precisa aguardar pacotes antigos. Mais pacotes chegarão com esse método do que com o método UNRELIABLE_SEQUENCED, e eles serão distribuídos de forma mais uniforme. A vantagem mais importante no entanto é que o último pacote enviado chegará, onde com UNRELIABLE_SEQUENCED o último pacote enviado pode não chegar.
    Desvantagens - Desperdício de largura de banda, porque ele usa a sobrecarga de pacotes UDP confiáveis para garantir a chegada de pacotes atrasados que apenas sejam ignorados de qualquer maneira.



    • Exemplo de uso

    RPC_ShowActor
    ID: 171
    Parâmetros: WORD wActorID, DWORD dSkinID, float x, float y, float z, float angle, float health   

    Uso em Plugin

    Código:
    RakNet::BitStream bs;

    bs.Write((WORD)5); //ID do ator.
    bs.Write((DWORD)287); //Skin que será mostrado para o jogador.
    bs.Write((float)0.0); //Coordenada X.
    bs.Write((float)0.0); //Coordenada Y.
    bs.Write((float)0.0); //Coordenada Z.
    bs.Write((float)50.0); //Ângulo.
    bs.Write((float)100.0); //Vida do ator.

    pRakServer->RPC(&RPC_ShowActor, &bs, LOW_PRIORITY, RELIABLE_ORDERED, 0, pRakServer->GetPlayerIDFromIndex(23), 0, 0);

    &RPC_ShowActor: Integer com o ID do RPC.
    &bs: BitStream com os parâmetros a serem mandados no RPC.
    LOW_PRIORITY: Prioridade do RPC.
    RELIABLE_ORDERED: Confiabilidade do RPC.
    pRakServer->GetPlayerIDFromIndex(23): O jogador que receberá o RPC.[/INDENT]

    Uso com o Pawn.RakNet

    Código:
    new BitStream:bs = BS_New();

    BS_WriteValue(
        bs,
        PR_UINT16, 5, //ID do Ator.
        PR_UINT32, 287, //Skin que será mostrado para o jogador.
        PR_FLOAT, 0.0, //Coordenada X.
        PR_FLOAT, 0.0, //Coordenada Y.
        PR_FLOAT, 0.0, //Coordenada Z.
        PR_FLOAT, 50.0, //Ângulo.
        PR_FLOAT, 100.0 //Vida do ator.
    );


    BS_RPC(bs, 23, 171, PR_LOW_PRIORITY, PR_RELIABLE_ORDERED);


    BS_Delete(bs);

    bs: BitStream com os parâmetros a serem mandados no RPC.
    23: O jogador que receberá o RPC.
    171: ID do RPC ShowActor.
    PR_LOW_PRIORITY: Prioridade do RPC.
    PR_RELIABLE_ORDERED: Confiabilidade do RPC[/INDENT][/INDENT][/INDENT]



    • Lista de RPCs com parâmetros

    github.com/Jelly23/RPC-List/wiki - Não tenho permissão para providenciar links.

    Obs: A lista não está totalmente completa, ainda estou construindo. Se você precisa dos parâmetros de um RPC que não está na lista no momento, me deixe saber.

      Data/hora atual: Qui 18 Abr 2024 - 23:44