Confused as hell ..
#1

Hey guys I'm doing my own engine/speedometer/fuel filterscript and I'm confused now a bit
and first problem is when I enter in vehicle fuel goes down to fast, timer is set on 20 sec, but fuel first time goes down a way to fast, after this it's going down normal...

here we go:
pawn Код:
public OnFilterScriptInit()
{
    for(new v = 0; v < MAX_VEHICLES; v++) Gas[v] = 100;
    ManualVehicleEngineAndLights();
    SetTimer("FLower", 20000, 1);
    return 1;
}
pawn Код:
public FLower(playerid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i)) continue;
        //if(IsRefuelling[i]) continue;
        if(GetPlayerVehicleSeat(i) == 0)
        {
            Gas[GetPlayerVehicleID(i)] = Gas[GetPlayerVehicleID(i)] - 1;
            if(Gas[GetPlayerVehicleID(i)] < 1)
            {
                Gas[GetPlayerVehicleID(i)] = 0;
                RemovePlayerFromVehicle(i);
                GameTextForPlayer(i, "~r~Vehicle is out of ~w~fuel~r~!", 5000, 5);
            }
        }
        if(Gas[GetPlayerVehicleID(i)] >= 100) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        if(Gas[GetPlayerVehicleID(i)] > 95 && Gas[GetPlayerVehicleID(i)] < 100) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~llll");
        if(Gas[GetPlayerVehicleID(i)] > 90 && Gas[GetPlayerVehicleID(i)] < 95) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lll");
        if(Gas[GetPlayerVehicleID(i)] > 85 && Gas[GetPlayerVehicleID(i)] < 90) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~ll");
    }
    return 1;
}
Second thing is when I change car it has lower fuel also, how can I make, fuel lowers only at persons who are driving a car?

Third should timer be on Filter Script Init or somewhere else?

Fourth Umm is possible to somehow save car's fuel (without y ini or dini / dudb) Veriables or something? so fuel won't be 100% when ever I reenter in it :/

I really appreciate for your help guys
Reply
#2

Shouldn't
pawn Код:
public FLower(playerid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i)) continue;
        //if(IsRefuelling[i]) continue;
        if(GetPlayerVehicleSeat(i) == 0)
        {
            Gas[GetPlayerVehicleID(i)] = Gas[GetPlayerVehicleID(i)] - 1;
            if(Gas[GetPlayerVehicleID(i)] < 1)
            {
                Gas[GetPlayerVehicleID(i)] = 0;
                RemovePlayerFromVehicle(i);
                GameTextForPlayer(i, "~r~Vehicle is out of ~w~fuel~r~!", 5000, 5);
            }
        }
        if(Gas[GetPlayerVehicleID(i)] >= 100) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        if(Gas[GetPlayerVehicleID(i)] > 95 && Gas[GetPlayerVehicleID(i)] < 100) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~llll");
        if(Gas[GetPlayerVehicleID(i)] > 90 && Gas[GetPlayerVehicleID(i)] < 95) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lll");
        if(Gas[GetPlayerVehicleID(i)] > 85 && Gas[GetPlayerVehicleID(i)] < 90) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~ll");
    }
    return 1;
}
be ? (it's a global timer, right?)
pawn Код:
public FLower() // changed name
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i)) continue;
        //if(IsRefuelling[i]) continue;
        if(GetPlayerVehicleSeat(i) == 0)
        {
            Gas[GetPlayerVehicleID(i)] = Gas[GetPlayerVehicleID(i)] - 1;
            if(Gas[GetPlayerVehicleID(i)] < 1)
            {
                Gas[GetPlayerVehicleID(i)] = 0;
                RemovePlayerFromVehicle(i);
                GameTextForPlayer(i, "~r~Vehicle is out of ~w~fuel~r~!", 5000, 5);
            }
        }
        if(Gas[GetPlayerVehicleID(i)] >= 100) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        if(Gas[GetPlayerVehicleID(i)] > 95 && Gas[GetPlayerVehicleID(i)] < 100) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~llll");
        if(Gas[GetPlayerVehicleID(i)] > 90 && Gas[GetPlayerVehicleID(i)] < 95) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lll");
        if(Gas[GetPlayerVehicleID(i)] > 85 && Gas[GetPlayerVehicleID(i)] < 90) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~ll");
    }
    return 1;
}
Reply
#3

Well what is global?

EDIT: if I change it to your code I get errors "underfined playerid" that's why I have FLower(playerid) some more help please ^^
Reply
#4

Quote:
Originally Posted by Lajko1
Посмотреть сообщение
Well what is global?

EDIT: if I change it to your code I get errors "underfined playerid" that's why I have FLower(playerid) some more help please ^^
He wanted to say without parameters and that's the problem.

Any callback is used by SetTimer doesn't have parameters; however those callbacks are used by SetTimerEx do have parameters (such as playerid etc - that depends on the arguments though).

So it should be:
pawn Код:
// Before the public function:
forward FLower();

// Somewhere else:
public FLower()
{
    // code..
}
You said it gives the playerid symbol as undefined, so I assume that you may be using it as:
pawn Код:
FLower(playerid);
somewhere which is incorrect and it might goes too fast due to that.
Reply
#5

1.) So I should use repeating SetTimerEx?
2.) Where to put it? FilterScript Init or maybe OnPlayerEnterVehicle, or somewhere else?
3.) how to somehow save vehicle fuel, cuz now this is countdown for all vehicle's fuel not only a vehicle I'm driving.. how to separate them, so if I drive vehicle it will only countdown for vehicle that player is driving and not other vehicles?
Reply
#6

Well, it's better to use SetTimerEx when a player's state becomes 'Driver' and when they're not longer driver (so on foot) or disconnected, kill the timer. By that, you won't need to loop through the players at all and it'll update only the fuel of the vehicle each player is driving.
Reply
#7

Okay question number 1 and 2 are solved I used SetTimerEx - repeating, I put it in /engine command, and killed it on PlayerExitVehicle, or when I turn down Engine, or when I'm out of fuel, and Disconnect

But can you tell me how can I save this fuel to each vehicle? now if I drive in vehicle my fuel goes down to 0 but if I re-enter it my fuel is 100 again or if I enter in other car fuel is 100 again..

and I just noticed another big problem when my fuel is going down when green fuel meter is at last "stick" it crashes my samp :/

here is the code
pawn Код:
public FLower(playerid) // changed name
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i)) continue;
        //if(IsRefuelling[i]) continue;
        if(GetPlayerVehicleSeat(i) == 0)
        {
            Gas[GetPlayerVehicleID(i)] = Gas[GetPlayerVehicleID(i)] - 1;
            if(Gas[GetPlayerVehicleID(i)] < 1)
            {
                Gas[GetPlayerVehicleID(i)] = 0;
                RemovePlayerFromVehicle(i);
                KillTimer(GasTimer[playerid]);
                GameTextForPlayer(i, "~r~Vehicle is out of ~w~fuel~r~!", 5000, 5);
            }
        }
        //if(Gas[GetPlayerVehicleID(i)] >= 100) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        if(Gas[GetPlayerVehicleID(i)] > 95) TextDrawSetString(vFuel[playerid]," ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        if(Gas[GetPlayerVehicleID(i)] > 90 && Gas[GetPlayerVehicleID(i)] < 95) TextDrawSetString(vFuel[playerid], " ~g~~n~llll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        if(Gas[GetPlayerVehicleID(i)] > 85 && Gas[GetPlayerVehicleID(i)] < 90) TextDrawSetString(vFuel[playerid], " ~g~~n~lll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        if(Gas[GetPlayerVehicleID(i)] > 80 && Gas[GetPlayerVehicleID(i)] < 85) TextDrawSetString(vFuel[playerid], " ~g~~n~ll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        if(Gas[GetPlayerVehicleID(i)] > 75 && Gas[GetPlayerVehicleID(i)] < 80) TextDrawSetString(vFuel[playerid], " ~g~~n~l~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 70 && Gas[GetPlayerVehicleID(i)] < 75 ) TextDrawSetString(vFuel[playerid]," ~n~~n~~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 65 && Gas[GetPlayerVehicleID(i)] < 70) TextDrawSetString(vFuel[playerid], " ~~n~~n~~y~~h~llll~y~~n~lllll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 60 && Gas[GetPlayerVehicleID(i)] < 65) TextDrawSetString(vFuel[playerid], " ~~n~~n~~y~~h~lll~y~~n~lllll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 55 && Gas[GetPlayerVehicleID(i)] < 60) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~ll~y~~n~lllll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 50 && Gas[GetPlayerVehicleID(i)] < 55) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~l~y~~n~lllll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 45 && Gas[GetPlayerVehicleID(i)] < 50) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~lllll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 40 && Gas[GetPlayerVehicleID(i)] < 45) TextDrawSetString(vFuel[playerid], " ~n~~n~~~y~~n~llll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 35 && Gas[GetPlayerVehicleID(i)] < 40) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~lll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 30 && Gas[GetPlayerVehicleID(i)] < 35) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~ll~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 25 && Gas[GetPlayerVehicleID(i)] < 30) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~l~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 20 && Gas[GetPlayerVehicleID(i)] < 25) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~lllll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 15 && Gas[GetPlayerVehicleID(i)] < 20) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~llll");
       
        if(Gas[GetPlayerVehicleID(i)] > 10 && Gas[GetPlayerVehicleID(i)] < 15) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~lll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 5 && Gas[GetPlayerVehicleID(i)] < 10) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~ll");
        //
        if(Gas[GetPlayerVehicleID(i)] > 1 && Gas[GetPlayerVehicleID(i)] < 5) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~l");
    }
    return 1;
}
LAST green stick:
pawn Код:
if(Gas[GetPlayerVehicleID(i)] > 75 && Gas[GetPlayerVehicleID(i)] < 80) TextDrawSetString(vFuel[playerid], " ~g~~n~l~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
after this it should be like this but code crashes before this:
pawn Код:
if(Gas[GetPlayerVehicleID(i)] > 70 && Gas[GetPlayerVehicleID(i)] < 75 ) TextDrawSetString(vFuel[playerid]," ~n~~n~~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
EDIT: okay this is fixed, don't worry about this fuel meter (there were 3x "~")

What about saving fuel at each vehicle?

Thanks for help in advance
Reply
#8

From what I see, you're storing each vehicleid's gas to Gas array. I guess you set the fuel to 100.0 when a player enters a vehicle.

And looping through the player is totally pointless, you got the playerid as parameters - that's the only one you need.

pawn Код:
public FLower(playerid) // changed name
{
    new vehicleid = GetPlayerVehicleID(playerid);
    if(--Gas[vehicleid] < 1)
    {
        Gas[vehicleid] = 0;
        RemovePlayerFromVehicle(playerid);
        KillTimer(GasTimer[playerid]);
        GameTextForPlayer(playerid, "~r~Vehicle is out of ~w~fuel~r~!", 5000, 5);
    }
    //if(Gas[vehicleid] >= 100) TextDrawSetString(vFuel[playerid], " ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    if(Gas[vehicleid] > 95) TextDrawSetString(vFuel[playerid]," ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 90 && Gas[vehicleid] < 95) TextDrawSetString(vFuel[playerid], " ~g~~n~llll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 85 && Gas[vehicleid] < 90) TextDrawSetString(vFuel[playerid], " ~g~~n~lll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 80 && Gas[vehicleid] < 85) TextDrawSetString(vFuel[playerid], " ~g~~n~ll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 75 && Gas[vehicleid] < 80) TextDrawSetString(vFuel[playerid], " ~g~~n~l~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 70 && Gas[vehicleid] < 75 ) TextDrawSetString(vFuel[playerid]," ~n~~n~~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 65 && Gas[vehicleid] < 70) TextDrawSetString(vFuel[playerid], " ~~n~~n~~y~~h~llll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 60 && Gas[vehicleid] < 65) TextDrawSetString(vFuel[playerid], " ~~n~~n~~y~~h~lll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 55 && Gas[vehicleid] < 60) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~ll~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 50 && Gas[vehicleid] < 55) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~l~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 45 && Gas[vehicleid] < 50) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~lllll~n~~r~lllll");
    else if(Gas[vehicleid] > 40 && Gas[vehicleid] < 45) TextDrawSetString(vFuel[playerid], " ~n~~n~~~y~~n~llll~n~~r~lllll");
    else if(Gas[vehicleid] > 35 && Gas[vehicleid] < 40) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~lll~n~~r~lllll");
    else if(Gas[vehicleid] > 30 && Gas[vehicleid] < 35) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~ll~n~~r~lllll");
    else if(Gas[vehicleid] > 25 && Gas[vehicleid] < 30) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~l~n~~r~lllll");
    else if(Gas[vehicleid] > 20 && Gas[vehicleid] < 25) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~lllll");
    else if(Gas[vehicleid] > 15 && Gas[vehicleid] < 20) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~llll");
    else if(Gas[vehicleid] > 10 && Gas[vehicleid] < 15) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~lll");
    else if(Gas[vehicleid] > 5 && Gas[vehicleid] < 10) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~ll");
    else if(Gas[vehicleid] > 1 && Gas[vehicleid] < 5) TextDrawSetString(vFuel[playerid], " ~n~~n~~~n~~n~~r~l");
}
Reply
#9

I will try your code when I will have bit more time I'm in hurry
I have this OnFilterScriptInit:
pawn Код:
for(new v = 0; v < MAX_VEHICLES; v++) Gas[v] = 100;
this is my full OnFilterScriptInit, is there any point to return 1; here?
pawn Код:
public OnFilterScriptInit()
{
    for(new v = 0; v < MAX_VEHICLES; v++) Gas[v] = 100;
    ManualVehicleEngineAndLights();
    return 1;
}
And I guess this is resetting fuel to 100 I will delete it..
So how should I save each vehicle gas? just by removing this code I posted above?
And really thanks for help
Reply
#10

Okay I changed code to yours, it's working normal but I still don't know how to save each vehicle fuel ? if I'm driving with on and waste half of fuel and if I enter to another at start it shows same fuel as I had in car before, and when I write /engine command it resets it's fuel to full
here is engine cmd if you need to check anything
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/engine", true) == 0) {
        new vehicle = GetPlayerVehicleID(playerid);
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
        if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be in vehicle to start engine.");
        if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be driver to use this command.");
        if(engine == 1) {
            SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}Engine turned off.");
            KillTimer(GasTimer[playerid]);
            return 1;
        } else {
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}You twisted the key, wait 4 seconds.");
            SetTimerEx("EngStart", 4000, false, "d", playerid);
            return 1;
        }
    }
pawn Код:
public EngStart(playerid)
{
    // This will help us to detect vehicle HP
    new Float:vehHP, vehicle = GetPlayerVehicleID(playerid);
    GetVehicleHealth(vehicle, vehHP);
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
    // If vehicle HP is 550 or more it will turn it's engine on 100%
    if(vehHP >= 550)
    {
        SendClientMessage(playerid, COLOR_YELLOW,"{00FF00}INFO: {FFFFFF}Engine is succesfully started.");
        SetVehicleParamsEx(vehicle,1,lights,alarm,doors,bonnet,boot,objective);
        GasTimer[playerid] = SetTimerEx("FLower", 1000, true, "i", playerid);
        return 1;
    }
    // If vehicle HP is under 550 it will be  1/3 chance to turn it's engine one because it's broken
    else
    {
        switch(random(3))
        {
            case 0:
            {
                SendClientMessage(playerid, COLOR_YELLOW,"{00FF00}INFO: {FFFFFF}Engine is succesfully started.");
                SetVehicleParamsEx(vehicle,1,lights,alarm,doors,bonnet,boot,objective);
                GasTimer[playerid] = SetTimerEx("FLower", 1000, true, "i", playerid);
                return 1;
            }
            case 1:
            {
                SendClientMessage(playerid, COLOR_YELLOW,"{FF0000}INFO: {FFFFFF}Engine failed to start because your engine is broken, please try again.");
                SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
                return 1;
            }
            case 2: // added another case so it will be harder to turn on engine if car is broken
            {
                SendClientMessage(playerid, COLOR_YELLOW,"{FF0000}INFO: {FFFFFF}Engine failed to start because your engine is broken, please try again.");
                SetVehicleParamsEx(vehicle,0,lights,alarm,doors,bonnet,boot,objective);
                return 1;
            }
        }
    }
    return 1;
}
I hope you can help with this, thanks in advance
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)