[Tutorial] Teleportes por comando e por teclas

30 de dez. de 2012.
Este meu primeiro tutorial. E estarei fazendo um tutorial sobre como setar um player a um interior por comando e por tecla pressionada.


Sumário:
1. Escolhendo o interior
2. Pegando coordenadas
3. Pegando o id do interior
4. Criando comando de entrar
5. Criando comando de sair
6. Criando uma pickup!
7. Usando OnPlayerKeyStateChange
8. Finalização
9. Créditos


1. Escolhendo o interior.
Bom pessoal, para começar teremos que escolher o interior que queremos. Para isso precisaremos acessar o seguinte site: http://weedarr.wikidot.com/interior. E escolher o interior, para o tutorial eu escolherei a LSPD.

2. Pegando as coordenadas.
Primeiramente solicito que abra o bloco de notas para salvar as 3 coisas.

Continuando no site, após escolher o interior você precisa selecionar a coordenada.. Coordenada é aqueles números antes das fotos! Eu como irei utilizar a LSPD minhas coordenadas serão: 246.783996,63.900199,1003.640625. Esses números chamados coordenadas servirão para definir o local em que o player será mandado depois que digitar o comando. Após pegar essa coordenada, você terá de entrar em um servidor qualquer de samp, ou então abrir o samp DEBUG, mas como fazer isso? Entre em:
PHP Code:
Meu Computador/Disco Local C/Arquivos de programas/RockstarGames/GTA San Andreas  
Selecionar o programa SA-MP Debug. Após fazer isso, abrirá uma janela com duas opções, você clicará em Local Host. Feito isso, você irá ser mandado para dentro do jogo. Já dentro do jogo, você irá até o local em que você quer que seja a entrada do interior, ou seja, onde você quer que o comando funcione, (para facilitar o deslocamento dentro do jogo, digite /v 522). Chegando lá, você digitará "/save" (sem as aspas), daí já pode fechar o jogo. Após isso vá até: Meus Documentos/GTA San Andreas User Files/SAMP e abrir o arquivo "SavePositions". Lá terá uma segunda coordenada salva, esse é o local em que você digitou /save.

3. Pegando o id do interior.
Essa é uma das partes mais importante, se não a mais. Ainda no site pegaremos o número antes das coordenadas, que é o id do interior, no meu caso: 6. Citei que essa parte é importante pelo fato de esse ser o número "chave", ele que separa o "mundo lá fora" com o interior, se você não setar o interior correto no comando, você ficará com a famosa "tela branca" em que não se enxerga nada. Explicarei depois como usar esse ID.

4. Criando o comando de entrar
Chegou a melhor parte do tutorial. Criar o comando. Bem, vamos lá. Vamos abrir o pawno, clicar em Open, e abrir seu GameMode, agora apertaremos F3 e procuraremos por:
pawn Code:
public OnPlayerCommandText
Essa será a Callback em que iremos trabalhar nosso comando. Vamos começar logo apos a abertura da primeira chave. 
Por exemplo:
pawn Code:
public OnPlayerCommandText(playerid, cmdtext[]) {     //Começaremos aqui
Vamos ao code e a explicação:
pawn Code:
public OnPlayerCommandText(playerid, cmdtext[]) {     if (strcmp("/entrarDP", cmdtext, true) == 0)     {         if (IsPlayerInRangeOfPoint(playerid, 2.0, 1554.4293,-1675.7588,16.1953)) // No lugar desses numeros:         1554.4293,-1675.7588,16.1953 você irá mudar pela coordenada que você pegou ao digitar /save (a segunda coordenada que você pegou) e colocará ali. Explicação do code: Alí está verificando se o player está a uma distância máxima de 2.0 da coordenada 1554.4293,-1675.7588,16.1953.         {//Se ele estiver dentro desse raio irá acontecer oque estiver dentro dessas chaves, ou seja, o teleporte do player.              SetPlayerPos(playerid, 246.783996,63.900199,1003.640625); // 246.783996,63.900199,1003.640625 é a coordenada de dentro da DP. Ou sejá, SetPlayerPos estará setando a posição do playerid. Você terá que mudar esses números de acordo com os que você pegou no site.              SetPlayerInterior(playerid, 6); //Aqui estaremos usando o número em que eu considerei "o numero chave" 6 é igual ao numero do interior, você mudará ele pelo numero que você pegou no site!         }//Fechará a função         else         { // Se o player não estiver dentro da coordenada o code que está dentro dessa chave será chamado.              SendClientMessage(playerid, -1, "Você não está na entrada da DP para entrar!"); // Aqui estará enviando uma mensagem pro player caso ele não estiver na coordenada do IsPlayerInRangeOfPoint.         } // Fechando a função. Caso não queira que mande alguma coisa quando o player não estiver na entrada, só apague o else até essa ultima chave!     }//Fechando comando
Comando de entrar criado.


5. Criando o comando de sair
Agora iremos criar o comando de sair do interior, mas não se assuste, é bem mais simples do que o de entrar.
Começaremos em baixo da chave:
pawn Code:
}//Fechando comando

pawn Code:
//Basta você copiar todo o comando e colar ele em baixo, e fazer algumas substituições.     if (strcmp("/sairDP", cmdtext, true) == 0) //Mude o comando que está entre as aspas.     {         if (IsPlayerInRangeOfPoint(playerid, 2.0, 246.783996,63.900199,1003.640625)) // Aqui agora você irá inverter as coordenadas, ou seja, irá botar agora as coordenadas de dentro aqui no IsPlayerInRangeOfPoint, apenas copie as coordenadas do SetPlayerPos do seu comando de entrar e substitua aqui em cima.         {              SetPlayerPos(playerid, 1554.4293,-1675.7588,16.1953); // O mesmo com aqui! Você pegará as coordenadas do seu comando de entrar do IsPlayerInRangeOfPoint e colará aqui!              SetPlayerInterior(playerid, 6); //Agora você irá mudar o numero do seu interior para 0. Para não ficar branco. O interior do "mundo aberto" é sempre 0.         }         else         { // Se o player não estiver dentro da coordenada o code que está dentro dessa chave será chamado.              SendClientMessage(playerid, -1, "Você não está na saida da DP para sair!"); // Aqui estará enviando uma mensagem pro player caso ele não estiver na coordenada do IsPlayerInRangeOfPoint.         } // Fechando a função. Caso não queira que mande alguma coisa quando o player não estiver na entrada, só apague o else até essa ultima chave!     }//Fechando comando } //Caso tenha mais comandos para baixo tire essa chave. Senão dará erros no seu GM.
Pronto. Falei que seria fácil criar o comando de sair. A partir daqui os comandos já estão funcionando.

6. Criando uma pickup
Essa parte é bem simples! Procure por: OnGameModeInt. Dentro dessa Callback você irá colocar o seguinte:
pawn Code:
CreatePickup(1318, 1, 1554.4293,-1675.7588,16.1953, -1); // Os numeros: 1554.4293,-1675.7588,16.1953 você irá substituir pelas coordenadas da sua entrada!
7. Usando OnPlayerKeyStateChange
Bem, primeiramente irei dar uma breve sobre oque essa Callback faz:
Ela tem uma super-utilidade que é dar o conforto de você usar um comando sem precisar digitar, com um simples toque de um tecla. Vamos ao comando.

Procure por OnPlayerKeyStateChange. Dentro das chaves ponha:
pawn Code:
if ((newkeys==KEY_SECONDARY_ATTACK))     {           OnPlayerCommandText(playerid,"/entrar"); //mude o "/entrar" pelo comando que você escolheu lá no seu comando de entrar. Mantenha as " ".           OnPlayerCommandText(playerid,"/sair");  //Mude o /sair também.     }
Pronto!
Agora se você estiver numa distancia de 2.0 da entrada/saída e apertar F ou Enter o comando funcionará!

8. Finalização
Bem, como vocês puderam ver, foi um tutorial simples, sei que 90% de vocês sabem sobre oquê eu expliquei, mas ainda a muitos que não sabem. Espero ter ajudado e esclarecido eventuais dúvidas.

9. Créditos
Tutorial: DuduLoch
Organização do tutorial: DuduLoch.

0 comentários:

Postar um comentário