[Tutorial] Tunning GTA e Mais algumas Funзoes
#1

Tunning GTA e Mais algumas Funзoes
Olб pessoal da Fуrum SA-MP.

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:

pawn Код:
#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
pawn Код:
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.

pawn Код:
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:

pawn Код:
if(IsPlayerInAnyVehicle(playerid)) // Caso ele esteja em um veнculo
Ou definir algo mais complexo e tambйm mais arriscado, como:

pawn Код:
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 й:

pawn Код:
if(IsPlayerConnected(playerid)) // Caso esteja conectado
e

pawn Код:
if(!IsPlayerConnected(playerid)) // Caso nao esteja conectado
Com o cуdigo acima, faremos a seguinte operaзao:

pawn Код:
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:

pawn Код:
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.

pawn Код:
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:

pawn Код:
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.

pawn Код:
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:

pawn Код:
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к use ZCMD, adicione no final do gamemode:

pawn Код:
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:

pawn Код:
#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
Reply
#2

Ual, quanto tempo demorou para digitar isso tudo?

Parabйns, parece ser um conteudo bom.
E se o player mudar as configuraзхes dos botхes e botar G para sair?
Ele vai sair kkkkkkkkkkkkkkkkkkkkkkk.
Reply
#3

O prуprio KEY_SECONDARY_ATTACK vai ser G

Ah, demorei 1 hora e meia.
Reply
#4

Valeu mesmo cara tava foda isso aqui tabem me ajudou muito
Reply
#5

Quote:
Originally Posted by Breno Da Silva Pereira
Посмотреть сообщение
Valeu mesmo cara tava foda isso aqui tabem me ajudou muito
Disponha
Reply
#6

Ai os BMG pira, Parabйns.
@Duvida, o Bloquear era necessбrio ?
Reply
#7

Nao, era sу para ensinar mais um pouco sobre variбveis
Reply
#8

Isso vai dar idйias para os novatos.
Reply
#9

Tutorial atualizado!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)