[Tutorial] RPC
#1

• 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.
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
PHP Code:
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, &bsLOW_PRIORITYRELIABLE_ORDERED0pRakServer->GetPlayerIDFromIndex(23), 00); 
&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.
Uso com o Pawn.RakNet
PHP Code:
new BitStream:bs BS_New();
BS_WriteValue(
    
bs,
    
PR_UINT165//ID do Ator.
    
PR_UINT32287//Skin que serб mostrado para o jogador.
    
PR_FLOAT0.0//Coordenada X.
    
PR_FLOAT0.0//Coordenada Y.
    
PR_FLOAT0.0//Coordenada Z.
    
PR_FLOAT50.0//Вngulo.
    
PR_FLOAT100.0 //Vida do ator.
);
BS_RPC(bs23171PR_LOW_PRIORITYPR_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
• Lista de RPCs com parвmetros
Github

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.
Reply
#2

Muito bom, amanhг apos chegar do serviзo faзo um pull para ajudar a aumentar a lista de rpcs.
Reply
#3

Um tutorial para poucos! Bem legal de sua parte trazer esse tipo de conteъdo pra essa board.
Reply
#4

Muito Bom.
Reply
#5

Muito bom!

PENA QUE NГO ENTENDI NADA.
Reply
#6

Parabйns pelo grande conteъdo.

Dб para contar nos dedos quantas pessoas na board vгo ter habilidades para entender esse conteъdo (pode ver pelos comentбrios vazios). Vн diversas implementaзхes de anti-cheaters 100% eficazes utilizando RPC.

Parabйns.
Reply
#7

Parebйns
Reply
#8

Tudo bem explicado, vai ajudar bastante!
Reply
#9

Muito interessante, vou estudar mais sobre.
Reply
#10

Esse plugin para anti cheat e espetacular bom tutorial bom trabalho
Reply
#11

Bom tutorial, parabйns.
Reply
#12

Conteъdo atualizado e informaзгo sobre RPCs movida para o Wiki: https://github.com/Jelly23/RPC-List/wiki
Reply
#13

Percebi que vocк adicionou o BS_Delete(bs);, oque essa funзгo faz exatamente?
Reply
#14

Quote:
Originally Posted by ZaHHak
View Post
Percebi que vocк adicionou o BS_Delete(bs);, oque essa funзгo faz exatamente?
Apenas remove o BitStream apуs mandar o RPC.
Reply
#15

Meio fora do assunto:

Eu talvez faзa um tutorial sobre os pacotes do samp (pacotes netgame). Antes, quero saber se realmente vai valer a pena, pois vejo que poucos aproveitaram meu conteъdo sobre RPCs.
Reply
#16

Quote:
Originally Posted by Jelly23
View Post
Meio fora do assunto:

Eu talvez faзa um tutorial sobre os pacotes do samp (pacotes netgame). Antes, quero saber se realmente vai valer a pena, pois vejo que poucos aproveitaram meu conteъdo sobre RPCs.
Apesar do baixo feedback esse foi um dos melhores, se nгo o melhor tutorial em alguns anos aqui da board. Nem todos tem o conhecimento necessбrio para algo assim, a board anda meio mau frequentada.

Mas sobre seu post, serб уtimo que faзa isso, mesmo para as poucas pessoas que venha entender ou aproveitar. Pense tambйm nas pessoas futuras. Adoraria que fizesse
Reply
#17

Quote:
Originally Posted by Jelly23
View Post
Meio fora do assunto:

Eu talvez faзa um tutorial sobre os pacotes do samp (pacotes netgame). Antes, quero saber se realmente vai valer a pena, pois vejo que poucos aproveitaram meu conteъdo sobre RPCs.
Como o plugin й recente nгo tem muitos interessados, mas tem.
Eu aprendi muito com esse tutorial, sua lista de RPCs foi vital, seria bacana se vocк fizesse sobre os pacotes, mais ainda sobre o ClientCheck.
Reply
#18

Quote:
Originally Posted by Jelly23
View Post
Meio fora do assunto:

Eu talvez faзa um tutorial sobre os pacotes do samp (pacotes netgame). Antes, quero saber se realmente vai valer a pena, pois vejo que poucos aproveitaram meu conteъdo sobre RPCs.
Faz sim! Como jб disseram, poucas pessoas daqui vгo conseguir aproveitar o conteъdo dos tutoriais deste tipo, afinal boa parte nгo sabe nem ler os erros do compilador. Mas a pequena parte que vai conseguir tirar proveito disso agradece muito!
Reply
#19

Lista de RPCs atualizada (Incoming RPCs).
Reply
#20

Уtimo Tutorial, vou esperar a wiki completa para se aprofundar na Raknet
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)