[TUT]SISTEMA DE ABASTECER
#1

Sistema de Gasolina


Galera Eu Vo Fazer Um Sistema de Abastecer Com Textdraw emcima do radar

Vamos Comeзar


No Topo Do Seu Gm
pawn Код:
#include <a_samp>
new fuel[MAX_VEHICLES]; //fuel por o veнculo
forward timer_fuel_lower();//timer para abaixar o valor do combustнvel
forward timer_refuel(playerid); //timer para reabastecer o veнculo
new isrefuelling[MAX_PLAYERS] = 0; //bool para verific se o jogador jб estб reabastecendo
new Text:td_fuel[MAX_PLAYERS]; //textdraw com combustнvel
em public OnFilterScriptInit() Voce Coloka

pawn Код:
for(new i=0;i<MAX_VEHICLES;i++) {
        fuel[i] = 100; //sets combustнvel de cada carro a 100 em um laзo
    }
    SetTimer("timer_fuel_lower",4200,true); //sets o temporizador para deixar cair o combustнvel
se vc estiver criando em um gm

coloke em public OnGameModeInit()

pawn Код:
for(new i=0;i<MAX_VEHICLES;i++) {
        fuel[i] = 100;//sets combustнvel de cada carro a 100 em um laзo
    }
    SetTimer("timer_fuel_lower",4200,true); //sets o temporizador para deixar cair o combustнvel
agora agente vai usar uma textdraws quando um jogador spawns:
Setting-up as posiзхes/efeitos do textdraw para o jogador.


em public OnPlayerSpawn(playerid)

pawn Код:
td_fuel[playerid] = TextDrawCreate(45,324,"Fuel: 100"); //criar o textdraw na posiзгo
    TextDrawBackgroundColor(td_fuel[playerid],0x00000033); //Aki sera o BackgroundColor Do TextDraw
    TextDrawFont(td_fuel[playerid],3); O Tipo De Fonte
    TextDrawLetterSize(td_fuel[playerid],0.699999,1.700000); //O Tamanho da Fonte
    TextDrawColor(td_fuel[playerid],0x000000ff); //A Cor
    TextDrawSetShadow(td_fuel[playerid],3); //E A Sombra
}

Agora Vamos Criar Para Quanto o player entrar no veiculo aparecer e quanto sair sumir


pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if (newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
        new vid = GetPlayerVehicleID(playerid);
        new string[125];format(string,sizeof string,"Gasolina:%i",fuel[vid]); //Faz A Atualizaзao Do Combustivel (assim nгo saltarб de 100 a seu valor real)
        TextDrawSetString(td_fuel[playerid],string);
        TextDrawShowForPlayer(playerid,td_fuel[playerid]);
    } else {
        TextDrawHideForPlayer(playerid,td_fuel[playerid]);
    }
    return 1;
}
Agora Vamos Criar O Comando Para Abastecer O Veiculo

Em public OnPlayerCommandText(playerid,cmdtext[]) Coloke

pawn Код:
if (!strcmp("/abastecer",cmdtext,true,7)) {
    if (!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0xFFC800FF,"Voce nao esta em um veiculo!");  //if um jogador nгo estб em um veнculo, ele para aqui
    if (isrefuelling[playerid]) return SendClientMessage(playerid,0xFFC800FF,"Voce ja esta reabastecendo!"); //if que um jogador jб estб reabastecendo, para aqui
    if (GetPlayerMoney(playerid) - 80 <0) return SendClientMessage(playerid,0xFFC800FF,"Voce Nao Tem Dinheiro Suficiente!"); //o Player Nao Tem 80 Reias Para Pagar, Para Aqui
    GivePlayerMoney(playerid,-80); //Sets the player's cash -$80
    SetCameraBehindPlayer(playerid); //Sets a cвmera atrбs do jogador (os olhares melhoram porque o jogador serб congelado por alguns segundos)
    TogglePlayerControllable(playerid,0);
    isrefuelling[playerid] = 1;
    TextDrawSetString(td_fuel[playerid],"Reabastecimento..."); //Aki A Mensagem Q Mostra O player Reabastecimento
    SetTimerEx("timer_refuel",4500,false,"i",playerid);
pawn Код:
public timer_fuel_lower()
{
    for(new i=0;i<MAX_PLAYERS;i++) { //loop para todos os jogadores
        if (isrefuelling[i]) return 0; //Parar  quando um jogador jб reabastecer
        new vid = GetPlayerVehicleID(i); //identificaзгo do veнculo
        if (GetPlayerVehicleSeat(i) == 0) { //if o jogador й um excitador (deve somente abaixar o combustнvel quando theres um excitador!)
            fuel[vid] = fuel[vid] -1; abaixando o valor do combustнvel
            if (fuel[vid]<1) //if combustнvel estб vazio
            {
                fuel[vid] = 0; // que ajusta o combustнvel a 0 (mais o temporizador o ajustarб -1 -2 -3 etc. antes de remover o jogador)
                RemovePlayerFromVehicle(i); // remove o jogador fora do veнculo
                GameTextForPlayer(i,"~r~You are out of ~w~fuel~r~!",5000,4); //Mostra O Texto
            }
        }
        new string[125];format(string,sizeof string,"Fuel:%i",fuel[vid]); //preparando a corda com valor seguinte do combustнvel
        TextDrawSetString(td_fuel[i],string); //actualizando o textdraw
    }
    return 1;
}

public timer_refuel(playerid)
{
    new vid = GetPlayerVehicleID(playerid);
    fuel[vid] = fuel[vid] = 100; Aki E A Gasolina Em 100
    isrefuelling[playerid] = 0;//anti-Spam
    TextDrawSetString(td_fuel[playerid],"Fuel:100");//actualizaзгo pequena no textdraw
    TogglePlayerControllable(playerid,1);//unfreeze o jogador
}
By:Cobertozinho e gamer931215

Se Nao Gosto Faz Melhor E Posta Aki No Forum
Reply
#2

Legal tem como mandar uma Print pra ve como que fica ?
Reply
#3

sim espere vo mandar
Reply
#4

Reply
#5

eai blz ?

testei aqui funcionou bem legal , ta faltando um return 1; no /abastecer , quando vocк abastece ele aparece fuel ao invйz de gasolina, tem algumas linhas que estгo faltando // para a explicaзгo.
Reply
#6

isto nгo й tutorial, й sу Traduzido!

Verdadeiro:
http://forum.sa-mp.com/showthread.ph...ht=Fuel+System

e mais uma vez: Traduzir Nвo й Tutorial!!
Reply
#7

Traduziu e nao colocou os creditos.
Reply
#8

Oia que bunitinho meu sistema de login *-*!


Para te auxiliar, vou te arranjar um sistema de gasolina + velocнmetro. Particularmente, eu nгo gosteo . Mais prefiro MUITO MAIS ajudar, ao invйs de criticar.

pawn Код:
//Use e abuse.

//No comeзo de seu FS/GM
#define MAX_CARROS 100 //Aqui, mude para o tanto de veнculos em seu servidor.

new Text:Black0;
new Text:Black1;
new Text:Black2;
new Text:Black3;
new Text:LightBlack;
new Text:VHS[MAX_PLAYERS];
new bool:TextShow[MAX_PLAYERS];
new bool:VHSCreated[MAX_PLAYERS];
new bool:Reabastecendo[MAX_PLAYERS];
new Combustivel[MAX_CARROS];

//Em OnGameModeInit...
// TextDraws do Velocнmetro
    Black0 = TextDrawCreate(537.000000,133.000000," ");
    Black1 = TextDrawCreate(537.000000,133.000000," ");
    Black2 = TextDrawCreate(537.000000,170.000000," ");
    Black3 = TextDrawCreate(593.000000,133.000000," ");
    LightBlack = TextDrawCreate(541.000000,136.000000," ");
    TextDrawUseBox(Black0,1);
    TextDrawBoxColor(Black0,0x000000ff);
    TextDrawTextSize(Black0,593.000000,0.000000);
    TextDrawUseBox(Black1,1);
    TextDrawBoxColor(Black1,0x000000ff);
    TextDrawTextSize(Black1,537.000000,0.000000);
    TextDrawUseBox(Black2,1);
    TextDrawBoxColor(Black2,0x000000ff);
    TextDrawTextSize(Black2,593.000000,0.000000);
    TextDrawUseBox(Black3,1);
    TextDrawBoxColor(Black3,0x000000ff);
    TextDrawTextSize(Black3,593.000000,0.000000);
    TextDrawUseBox(LightBlack,1);
    TextDrawBoxColor(LightBlack,0x00000033);
    TextDrawTextSize(LightBlack,589.000000,0.000000);
    TextDrawAlignment(Black0,0);
    TextDrawAlignment(Black1,0);
    TextDrawAlignment(Black2,0);
    TextDrawAlignment(Black3,0);
    TextDrawAlignment(LightBlack,0);
    TextDrawBackgroundColor(Black0,0x000000ff);
    TextDrawBackgroundColor(Black1,0x000000ff);
    TextDrawBackgroundColor(Black2,0x000000ff);
    TextDrawBackgroundColor(Black3,0x000000ff);
    TextDrawBackgroundColor(LightBlack,0x000000ff);
    TextDrawFont(Black0,3);
    TextDrawLetterSize(Black0,1.000000,-0.000000);
    TextDrawFont(Black1,3);
    TextDrawLetterSize(Black1,1.300000,4.000000);
    TextDrawFont(Black2,3);
    TextDrawLetterSize(Black2,11.100000,-0.000000);
    TextDrawFont(Black3,3);
    TextDrawLetterSize(Black3,1.000000,4.099998);
    TextDrawFont(LightBlack,3);
    TextDrawLetterSize(LightBlack,1.000000,3.399999);
    TextDrawColor(Black0,0xffffffff);
    TextDrawColor(Black1,0xffffffff);
    TextDrawColor(Black2,0xffffffff);
    TextDrawColor(Black3,0xffffffff);
    TextDrawColor(LightBlack,0xffffffff);
    TextDrawSetOutline(Black0,1);
    TextDrawSetOutline(Black1,1);
    TextDrawSetOutline(Black2,1);
    TextDrawSetOutline(Black3,1);
    TextDrawSetOutline(LightBlack,1);
    TextDrawSetProportional(Black0,1);
    TextDrawSetProportional(Black1,1);
    TextDrawSetProportional(Black2,1);
    TextDrawSetProportional(Black3,1);
    TextDrawSetProportional(LightBlack,1);
    TextDrawSetShadow(Black0,1);
    TextDrawSetShadow(Black1,1);
    TextDrawSetShadow(Black2,1);
    TextDrawSetShadow(Black3,1);
    TextDrawSetShadow(LightBlack,1);
    SetTimer("DashBoard", 50, 1);

//Ao final de OnGameModeInit, ou em qualquer outro lugar, vocк pode colocar:
forward DashBoard();
public DashBoard()
{
    for(new i=0; i<MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if(IsPlayerInAnyVehicle(i))
            {
                if(TextShow[i] == false)
                {
                    TextDrawShowForPlayer(i, Text:Black0);
                    TextDrawShowForPlayer(i, Text:Black1);
                    TextDrawShowForPlayer(i, Text:Black2);
                    TextDrawShowForPlayer(i, Text:Black3);
                    TextDrawShowForPlayer(i, Text:LightBlack);
                    TextShow[i] = true;
                }
                new String[128];
                new Float:X, Float:Y, Float:Z, Float:Speed;
                GetVehicleVelocity(GetPlayerVehicleID(i), X, Y, Z);
                Speed = floatmul(floatmul(floatsqroot(floatadd(floatadd(floatpower(X, 2), floatpower(Y, 2)),  floatpower(Z, 2))), 100.0), 1.5);
                format(String,sizeof(String),"~b~Por: LeLeTe~n~~r~Velocidade~n~~r~KM/H: ~w~%i~n~~r~Combustivel: ~w~%i~n~", floatround(Speed, floatround_floor), Combustivel[GetPlayerVehicleID(i)]);
                if(VHSCreated[i] == true)
                {
                    TextDrawDestroy(VHS[i]);
                }
                VHS[i] = TextDrawCreate(541.000000,137.000000,String);
                TextDrawAlignment(VHS[i],0);
                TextDrawBackgroundColor(VHS[i],0x000000ff);
                TextDrawFont(VHS[i],1);
                TextDrawLetterSize(VHS[i],0.299999,1.000000);
                TextDrawColor(VHS[i],0xffffffff);
                TextDrawSetOutline(VHS[i],1);
                TextDrawSetProportional(VHS[i],1);
                TextDrawSetShadow(VHS[i],1);
                TextDrawShowForPlayer(i, VHS[i]);
                VHSCreated[i] = true;

            }
            else
            {
                if(TextShow[i] == true)
                {
                    TextDrawHideForPlayer(i, Text:Black0);
                    TextDrawHideForPlayer(i, Text:Black1);
                    TextDrawHideForPlayer(i, Text:Black2);
                    TextDrawHideForPlayer(i, Text:Black3);
                    TextDrawHideForPlayer(i, Text:LightBlack);
                    TextDrawHideForPlayer(i, Text:VHS[i]);
                    TextShow[i] = false;
                }
            }
        }
    }
}
//Agora, para o comando de abastecer. Em OnPlayerCommandText, adicione isso
    if (strcmp(cmdtext,"/abastecer",true) == 0)
    {
        if (!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0xFFC800FF,"Vocк nгo estб em um veнculo para abastecer!!");  //Se o jogador nгo estiver dentro de um veнculo, esta й a mensagem.
        if (Reabastecendo[playerid]) return SendClientMessage(playerid,0xFFC800FF,"Vocк jб estб abastecendo!"); //Se o jogador jб estiver abastecendo, esta й a mensagem.
        if (GetPlayerMoney(playerid) <= 80) return SendClientMessage(playerid,0xFFC800FF,"Vocк nгo tem dinheiro suficiente!"); //Se o jogador nгo tem dinheiro suficiente (No caso, 80$. Mas pode ser o valor que vocк desejar.), esta й a mensagem.
        GivePlayerMoney(playerid,-80); //Retira a quantidade de dinheiro escolhida (No caso, 80);
        SetCameraBehindPlayer(playerid); //Coloca a cвmera atrбs do jogador. Devido ao jogador ficar congelado por alguns segundos, й ъtil.
        TogglePlayerControllable(playerid,0);//Congela o jogador;
        Reabastecendo[playerid] = true;//Define que a bool Reabastecendo й verdadeira, ou seja, o jogador ESTБ abastecendo;
        SetTimer("Reabastecer",Combustivel[playerid]+1000,1);// Timer para reabastecimento.
        //Ou seja, um segundo por litro de combustнvel. O cуdigo Combustivel[playerid] define que o valor de Combustivel[playerid] + 1000(Que significa 1 segundo, pois o tempo й medido em milisegundos.) й o tempo.
    }
//Vamos agora para as funзхes de reabastecer, e de usar gasolina.
forward Gasolina();//Funзгo que desce a gasolina.
public Gasolina()
{
    for(new i=0;i<MAX_PLAYERS;i++)//Um loop para todos os jogadores.
    {
        if (Reabastecendo[i]) return 0; //Se o jogador estiver re-abastecendo, ele retorna 0, o que para a execuзгo da funзгo.
        new vid = GetPlayerVehicleID(i); //Usado para indentificar o veнculo.
        if (GetPlayerVehicleSeat(i) == 0)
        { //Se o jogador for o motorista...
            Combustivel[vid] = Combustivel[vid] -1; //... abaixa 1 litro de gasolina a cada vez que essa funзгo for executada.
            if (Combustivel[vid]<1) //Se o combustнvel estiver vazio...
            {
                Combustivel[vid] = 0; // Define o combustнvel zerado;
                RemovePlayerFromVehicle(i); // Retira o jogador do veнculo. Se quiser, vocк pode congelar o jogador, usando TogglePlayerControllable(i, 0);
                GameTextForPlayer(i,"~r~Voce esta sem ~w~Combustivel~r~!",5000,4); //Mostra um texto, que vocк estб sem combustнvel. Odeio textdraws porquк nгo suportam acentos :S
            }
        }
    }
    return 1;
}

forward Reabastecer(playerid);
public Reabastecer(playerid)
{
    new vid = GetPlayerVehicleID(playerid);
    Combustivel[vid] = Combustivel[vid] = 100; //Aqui, ele define o combustнvel em 100, ou seja, cheio.
    Reabastecendo[playerid] = false;//Define a bool Reabastecendo para falsa, ou seja, vocк nгo estб mais abastecendo.
    TogglePlayerControllable(playerid,1);//Descongela o jogador.
}
Reply
#9

O cara muda as string de um gamemode e se acha programador, tenso...
Reply
#10

Quote:
Originally Posted by [Michael]
Посмотреть сообщение
O cara muda as string de um gamemode e se acha programador, tenso...
nao acredito que perdi 1 minuto do meu tempo vendo isso, aff
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)