Kilead Samp
Bem Vindo a : Kilead Samp
Poste seus projetos,aqui!
e Seja Feliz!

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

Kilead Samp
Bem Vindo a : Kilead Samp
Poste seus projetos,aqui!
e Seja Feliz!
Kilead Samp
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

Tunning GTA e Mais algumas Funçoes

Ir para baixo  Mensagem [Página 1 de 1]

1Tunning GTA e Mais algumas Funçoes Empty Tunning GTA e Mais algumas Funçoes Qui maio 30, 2013 1:10 pm

Biel_COP

Biel_COP

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:

Tunning GTA e Mais algumas Funçoes 4dec0329705b4e8c94e0605

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 é:

Tunning GTA e Mais algumas Funçoes Game-text-type3

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 Wink

BY BIEL_COP

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos