SA-MP Forums Archive
Fuel System help - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Fuel System help (/showthread.php?tid=376100)



Fuel System help - arko123 - 09.09.2012

Is there anyway to stop the fuel from going down when the car engine is and when you turn it back on the fuel starts to go down again?

Код:
#include <a_samp>
new Text:td_fuel[MAX_PLAYERS];
new Text:td_vhealth[MAX_PLAYERS];
new Text:td_vspeed[MAX_PLAYERS];
new Text:td_box[MAX_PLAYERS];

forward timer_update();
forward timer_refuel(playerid);
new isrefuelling[MAX_PLAYERS] = 0;
new fuel[MAX_VEHICLES];
new Float:max_vhealth[MAX_VEHICLES];
new Engine[MAX_PLAYERS];

public OnFilterScriptInit()
{
    for(new i=0;i<MAX_VEHICLES;i++) {
        GetVehicleHealth(i,max_vhealth[i]); //getting max health
        fuel[i] = 100 + random(35);  //setting fuel for vehicles
    }

    for(new i=0;i<MAX_PLAYERS;i++) { //setting up all textdraws
        td_fuel[i] = TextDrawCreate(478,397,"Fuel:");
        td_vhealth[i] = TextDrawCreate(478,376,"Health:");
        td_vspeed[i] = TextDrawCreate(478,397,"Speed:");
        td_box[i] = TextDrawCreate(478.000000,328.000000,"Vehicle Stats: ~n~~n~~n~~n~");
        TextDrawUseBox(td_box[i],1);
        TextDrawBoxColor(td_box[i],0x00000066);
        TextDrawTextSize(td_box[i],626.000000,21.000000);
        TextDrawAlignment(td_fuel[i],0);
        TextDrawAlignment(td_vhealth[i],0);
        TextDrawAlignment(td_vspeed[i],0);
        TextDrawAlignment(td_box[i],0);
        TextDrawBackgroundColor(td_fuel[i],0x000000ff);
        TextDrawBackgroundColor(td_vhealth[i],0x000000ff);
        TextDrawBackgroundColor(td_vspeed[i],0x000000ff);
        TextDrawBackgroundColor(td_box[i],0x000000cc);
        TextDrawFont(td_fuel[i],1);
        TextDrawLetterSize(td_fuel[i],0.699999,2.699999);
        TextDrawFont(td_box[i],0);
        TextDrawLetterSize(td_box[i],0.699999,2.899999);
        TextDrawColor(td_fuel[i],0xffffffff);
        TextDrawColor(td_vhealth[i],0xffffffff);
        TextDrawColor(td_vspeed[i],0xffffffff);
        TextDrawColor(td_box[i],0xffffffff);
        TextDrawSetOutline(td_fuel[i],1);
        TextDrawSetOutline(td_vhealth[i],1);
        TextDrawSetOutline(td_vspeed[i],1);
        TextDrawSetOutline(td_box[i],1);
        TextDrawSetProportional(td_fuel[i],1);
        TextDrawSetProportional(td_vhealth[i],1);
        TextDrawSetProportional(td_vspeed[i],1);
        TextDrawSetProportional(td_box[i],1);
        TextDrawSetShadow(td_fuel[i],1);
        TextDrawSetShadow(td_vhealth[i],1);
        TextDrawSetShadow(td_vspeed[i],1);
        TextDrawSetShadow(td_box[i],10);
    }
    SetTimer("timer_update",1000,true);
    return 1;
}

public OnFilterScriptExit()
{
    for(new i=0;i<MAX_PLAYERS;i++) {
        TextDrawDestroy(td_fuel[i]);
    }
    return 1;
}

stock IsPlayerAtRefuelStation(playerid)
{
    if (IsPlayerInRangeOfPoint(playerid,10,655.5993,-564.9833,16.3359)) return 1; //Dilimore
    if (IsPlayerInRangeOfPoint(playerid,10,4,5,6)) return 1; //random
    return 0;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if (newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
        TextDrawSetString(td_fuel[playerid],"Fuel:");
        TextDrawShowForPlayer(playerid,td_fuel[playerid]);
    } else {
        TextDrawHideForPlayer(playerid,td_fuel[playerid]);
    }
    return 1;
}


public OnPlayerCommandText(playerid,cmdtext[]) {

    if (!strcmp("/refuel",cmdtext,true,7)) {
        if (!IsPlayerAtRefuelStation(playerid)) return SendClientMessage(playerid,0xFFC800FF,"You're not at an fuel station!");
        if (!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0xFFC800FF,"You are not in an vehicle!"); //if a player isnt in a vehicle, it stops here
        if (isrefuelling[playerid]) return SendClientMessage(playerid,0xFFC800FF,"You are already refuelling!"); //if a player is already refuelling, it stops here
        if (GetPlayerMoney(playerid) -2500 <0) return SendClientMessage(playerid,0xFFC800FF,"You dont have enough money!"); //if a player doesnt have $80 anymore, it stops here
        GivePlayerMoney(playerid, -2500); //Sets the player's cash -$80
        SetCameraBehindPlayer(playerid); //Sets the camera behind the player (looks better because the player will be frozen for a few secs)
        isrefuelling[playerid] = 1; //setting isrefuelling to 1 so the player cant spam /refuel
        TextDrawSetString(td_fuel[playerid],"Refuelling..."); //changing textdraw to /refuel
        SetTimerEx("timer_refuel",4500,false,"i",playerid); //setting refueltimer
        return 1;
    }
    return 0;
}

public timer_update()
{
    for(new i=0;i<MAX_PLAYERS;i++) {
        if (isrefuelling[i]) return 0;
        new vid = GetPlayerVehicleID(i);
        if (GetPlayerVehicleSeat(i) == 0) {
            fuel[vid] = fuel[vid] - 1;
            if (fuel[vid]<1)
            {
                fuel[vid] = 0;
                new veh = GetPlayerVehicleID(i);
                new engine,lights,alarm,doors,bonnet,boot,objective;
                GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
                SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
                Engine[i]=1;
                GameTextForPlayer(i,"~r~You are out of ~w~fuel~r~!",5000,4);
            }
        }
        new string[128];format(string,sizeof string,"Fuel:%i",fuel[vid] /3);
        TextDrawSetString(td_fuel[i],string);

        new Float:speed_x,Float:speed_y,Float:speed_z,Float:temp_speed,final_speed,Float:health;

        GetVehicleVelocity(vid,speed_x,speed_y,speed_z);
        temp_speed = floatsqroot(((speed_x*speed_x)+(speed_y*speed_y))+(speed_z*speed_z))*136.666667;
        final_speed = floatround(temp_speed,floatround_round);
        format(string,sizeof string,"Speed:  %i",final_speed);
        TextDrawSetString(td_vspeed[i],string);

        GetVehicleHealth(vid,health);
        if (max_vhealth[vid] == 0)//if its an random spawned vehicle
        {
            fuel[vid] = 300;
            GetVehicleHealth(vid,max_vhealth[vid]);
        }
        health = (((health - max_vhealth[vid]) /max_vhealth[vid]) *100)+ 100;
        format(string,sizeof string,"Health: %i",floatround(health,floatround_round));
        TextDrawSetString(td_vhealth[i],string);
    }
    return 1;
}

public timer_refuel(playerid)
{
    new vid = GetPlayerVehicleID(playerid);
    if(Engine[playerid]==0)
    {
        new veh = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
        SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
        Engine[playerid]=1;
    }
    fuel[vid] = fuel[vid] = 300;
    isrefuelling[playerid] = 0;
    TextDrawSetString(td_fuel[playerid],"Fuel:100");
}



Re: Fuel System help - arko123 - 09.09.2012

Quote:
Originally Posted by SaYrOn
Посмотреть сообщение
Well, I didn't get the question quiet well. But you probably need to check if engine is working in timer :S
So what i want is that when the engine is off the fuel doesnt go down. How could i do that?


Re: Fuel System help - clarencecuzz - 09.09.2012

pawn Код:
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(vehicle, engine, lights, alarm, doors, bonnet, boot, objective);
if(engine == 1) //if the engine is on
{
    //Decrease Fuel
}



Re: Fuel System help - arko123 - 09.09.2012

Quote:
Originally Posted by clarencecuzz
Посмотреть сообщение
pawn Код:
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(vehicle, engine, lights, alarm, doors, bonnet, boot, objective);
if(engine == 1) //if the engine is on
{
    //Decrease Fuel
}
Where would i put this?


Re: Fuel System help - clarencecuzz - 09.09.2012

Wherever you are decreasing the fuel of the car.
pawn Код:
public timer_update()
{
    for(new i=0;i<MAX_PLAYERS;i++)
    {
        new vid = GetPlayerVehicleID(i);
        if (isrefuelling[i]) return 0;
        if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
        {
            new engine, lights, alarm, doors, bonnet, boot, objective;
            GetVehicleParamsEx(vid, engine, lights, alarm, doors, bonnet, boot, objective);
            if(engine == 1)
            {
                fuel[vid] = fuel[vid] - 1;
            }
            if (fuel[vid]<1)
            {
                fuel[vid] = 0;
                SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
                Engine[i]=1;
                GameTextForPlayer(i,"~r~You are out of ~w~fuel~r~!",5000,4);
            }
        }
        new string[128];format(string,sizeof string,"Fuel:%i",fuel[vid] /3);
        TextDrawSetString(td_fuel[i],string);

        new Float:speed_x,Float:speed_y,Float:speed_z,Float:temp_speed,final_speed,Float:health;

        GetVehicleVelocity(vid,speed_x,speed_y,speed_z);
        temp_speed = floatsqroot(((speed_x*speed_x)+(speed_y*speed_y))+(speed_z*speed_z))*136.666667;
        final_speed = floatround(temp_speed,floatround_round);
        format(string,sizeof string,"Speed:  %i",final_speed);
        TextDrawSetString(td_vspeed[i],string);

        GetVehicleHealth(vid,health);
        if (max_vhealth[vid] == 0)//if its an random spawned vehicle
        {
            fuel[vid] = 300;
            GetVehicleHealth(vid,max_vhealth[vid]);
        }
        health = (((health - max_vhealth[vid]) /max_vhealth[vid]) *100)+ 100;
        format(string,sizeof string,"Health: %i",floatround(health,floatround_round));
        TextDrawSetString(td_vhealth[i],string);
    }
    return 1;
}
NOTE: Untested


Re: Fuel System help - arko123 - 10.09.2012

Thank you it worked but were can i change how long the fuel lasts for?


Re: Fuel System help - CROSS_Hunter - 10.09.2012

Quote:
Originally Posted by arko123
Посмотреть сообщение
Thank you it worked but were can i change how long the fuel lasts for?
Depends on What is your Fuel System Code