Tunning GTA e Mais algumas Funçoes
Olá pessoal da Kilead Samp!
Venho vendo alguns tópicos antigos daqui da board PT/BR e da própria board gringa, em que consiste no Tunning Bugado.
Você nao sabe o que é o tunning bugado ? É isso:
Certamente isto já aconteceu com você.
Com este tutorial, você saberá acabar com este problema chato!
Objetivos
. Saber um pouco mais sobre as variáveis.
. Desbugar o Tunning do GTA.
. Aprender a usar novas publics.
Início
Adicione este código no topo do gamemode:
- Código:
#include <a_samp>
new EmTunning[MAX_PLAYERS]; // Topo do Gamemode, após as Includes ou Defines.
Explicaçao
Criamos esta new para podermos proceder com nosso script.
Sem ela, nao teríamos o resultado final.
Para mais explicaçoes sobre o que criamos, clique aqui.
Utilizaçao das Publics
Usaremos três publics:
Quando o jogador se desconectar
Quando pressionar alguma tecla
Quando entrar ou sair do tunning
Códigos + Explicaçao
- Código:
public OnPlayerDisconnect(playerid,reason)
{
EmTunning[playerid] = 0;
return 1;
}
No código acima, chamamos a public cuja responsável pelo disconnect do jogador.
Com isso, para evitar bug´s possíveis, setaremos o EmTunning à 0, ou seja, falso, ou seja, ele nao está no Tunning.
Lembrando que deveremos retornar à true, para que as alteraçoes façam efeito.
Uma boa dica e lembrança, é que 1 é verdadeiro e 0 é falso, nas linguagens de programaçao.
- Código:
public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
{
if(newkeys == KEY_SECONDARY_ATTACK)
{
if(IsPlayerInAnyVehicle(playerid))
{
if(EmTunning[playerid] == 1)
{
PutPlayerInVehicle(playerid,GetPlayerVehicleID(playerid),PLAYER_STATE_DRIVER);
return 1;
}
}
}
return 1;
}
Com a public acima, efetuaremos açoes quando o jogador pressionar uma tecla, no caso, a tecla KEY_SECONDARY_ATTACK, mais conhecida como Enter ou F.
Para saber mais sobre as teclas, clique aqui.
Voltando ao assunto, a public nos permite efetuar tais açoes, como citadas acima.
Você também pode criar exeçoes, como:
- Código:
if(IsPlayerInAnyVehicle(playerid)) // Caso ele esteja em um veículo
Ou definir algo mais complexo e também mais arriscado, como:
- Código:
if(!IsPlayerInAnyVehicle(playerid)) Ban(playerid); // Caso ele nao esteja em um veículo, ele será banido
Lembrando que o ! antes da funçao, significa negaçao, ou seja: Nao (funçao).
Um exemplo disso é:
- Código:
if(IsPlayerConnected(playerid)) // Caso esteja conectado
e
- Código:
if(!IsPlayerConnected(playerid)) // Caso nao esteja conectado
Com o código acima, faremos a seguinte operaçao:
- Código:
public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
{
if(newkeys == KEY_SECONDARY_ATTACK) // Caso a tecla pressionada for Enter ou F.
{
if(IsPlayerInAnyVehicle(playerid)) // Caso ele esteja em um veículo
{
if(EmTunning[playerid] == 1) // Caso ele esteja no tunning
{
PutPlayerInVehicle(playerid,GetPlayerVehicleID(playerid),GetPlayerState(playerid)); // Colocará novamente o jogador no veículo, impedindo que o mesmo saia.
return 1;
}
}
}
return 1;
}
Vale lembrar que é sempre bom tomar cuidado com a identaçao e com as retornaçoes em excesso.
Um código desta maneira:
- Código:
public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
{
if(newkeys == KEY_SECONDARY_ATTACK) // Caso a tecla pressionada for Enter ou F.
{
if(IsPlayerInAnyVehicle(playerid)) // Caso ele esteja em um veículo
{
if(EmTunning[playerid] == 1) // Caso ele esteja no tunning
{
PutPlayerInVehicle(playerid,GetPlayerVehicleID(playerid),PLAYER_STATE_DRIVER); // Colocará novamente o jogador no veículo
return 1;
}
return 1;
}
return 1;
}
return 1;
}
Nao é nescessário, além de ser mal organizado, dará warnings no compilador.
Para saber mais sobre os returns, clique aqui.
- Código:
public OnEnterExitModShop(playerid,enterexit,interiorid)
{
if(enterexit == 0)
{
GameTextForPlayer(playerid,"~r~Seja bem vindo ao Tunning!",5000,3);
EmTunning[playerid] = 1;
}
else
{
GameTextForPlayer(playerid,"~r~Volte sempre ao Tunning!",5000,3);
EmTunning[playerid] = 0;
}
return 1;
}
Com este código final, usaremos um GameText com o estilo 3, que no caso é:
Para saber mais sobre os GameText´s, clique aqui para ver os estilos de gametext e clique aqui para saber usar a os mesmos.
Explicando o código, teremos o mesmo assim:
- Código:
public OnEnterExitModShop(playerid,enterexit,interiorid)
{
if(enterexit == 0) // Caso ele já esteja fora do tunning
{
GameTextForPlayer(playerid,"~r~Seja bem vindo ao Tunning!",5000,3); // Manda o gametext
EmTunning[playerid] = 1; // Seta que o jogador está no tunning
}
else // Outro, geralmente usado para getar outro valor destinado à um citado
{
GameTextForPlayer(playerid,"~r~Volte sempre ao Tunning!",5000,3); // Manda o gametext
EmTunning[playerid] = 0; // Seta que o jogador nao está no tunning
}
return 1;
}
Também, como o esperado, setaremos que o jogador está ou nao está no tunning.
O enterexit define a tal funçao.
Para vocês entenderem melhor, peguem de exemplo este código, com uma nova variável.
- Código:
new TunningBloqueado = 0; // Cria e seta que o tunning nao está bloqueado
public OnEnterExitModShop(playerid,enterexit,interiorid)
{
if(enterexit == 0) // Caso ele esteja entrando no tunning
{
if(TunningBloqueado == 1) // Caso esteja bloqueado
{
SendClientMessage(playerid,0xBFBFBFAA,"O tunning está bloqueado!"); // Manda a tal mensagem
Kick(playerid); // Dá um kick no jogador
return 1;
}
}
return 1;
}
Este acima é para casos mais específicos, onde o dono do servidor quer bloquear o tunning.
Você também pode criar dois comandos, desbloqueando ou bloqueando o mesmo.
Exemplo:
- Código:
if(strcmp(cmdtext,"/bloqueartunning",true) == 0)
{
if(IsPlayerAdmin(playerid)) // Verifica se é admin logado na RCON
{
if(TunningBloqueado == 0) // Se o tunning estiver desbloqueado
{
SendClientMessageToAll(0xBFBFBFAA,"Tunning bloqueado!"); // Manda a mensagem a todos
TunningBloqueado = 1; // Bloqueia o tunning
return 1;
}
}
return 1;
}
if(strcmp(cmdtext,"/desbloqueartunning",true) == 0)
{
if(IsPlayerAdmin(playerid)) // Verifica se é admin logado na RCON
{
if(TunningBloqueado == 1) // Se o tunning estiver bloqueado
{
SendClientMessageToAll(0xBFBFBFAA,"Tunning desbloqueado!"); // Manda a mensagem a todos
TunningBloqueado = 0; // Desbloqueia o tunning
return 1;
}
}
return 1;
}
Caso você usa ZCMD, adicione no final do gamemode:
- Código:
CMD:bloqueartunning(playerid)
{
if(IsPlayerAdmin(playerid)) // Verifica se é admin logado na RCON
{
if(TunningBloqueado == 0) // Se o tunning estiver desbloqueado
{
SendClientMessageToAll(0xBFBFBFAA,"Tunning bloqueado!"); // Manda a mensagem a todos
TunningBloqueado = 1; // Bloqueia o tunning
return 1;
}
}
return 1;
}
CMD:desbloqueartunning(playerid)
{
if(IsPlayerAdmin(playerid)) // Verifica se é admin logado na RCON
{
if(TunningBloqueado == 1) // Se o tunning estiver bloqueado
{
SendClientMessageToAll(0xBFBFBFAA,"Tunning desbloqueado!"); // Manda a mensagem a todos
TunningBloqueado = 0; // Desbloqueia o tunning
return 1;
}
}
return 1;
}
Finalizando
Para finalizar, aqui está o código completo:
- Código:
#include <a_Samp>
new EmTunning[MAX_PLAYERS];
public OnPlayerDisconnect(playerid,reason)
{
EmTunning[playerid] = 0;
return 1;
}
public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
{
if(newkeys == KEY_SECONDARY_ATTACK)
{
if(IsPlayerInAnyVehicle(playerid))
{
if(EmTunning[playerid] == 1)
{
PutPlayerInVehicle(playerid,GetPlayerVehicleID(playerid),GetPlayerState(playerid));
return 1;
}
}
}
return 1;
}
public OnEnterExitModShop(playerid,enterexit,interiorid)
{
if(enterexit == 0)
{
GameTextForPlayer(playerid,"~r~Seja bem vindo ao Tunning!",5000,3);
EmTunning[playerid] = 1;
}
else
{
GameTextForPlayer(playerid,"~r~Volte sempre ao Tunning!",5000,3);
EmTunning[playerid] = 0;
}
return 1;
}
Agradeço a todos que leram este tutorial.
Se você realmente aprendeu algo com isso, repute caso queira.
Se nao quiser, fique à vontade para dar o - reputaçao.
O importante é que você avalie o mesmo
BY BIEL_COP