Bug in my first FS
#1

So I'm working on fuel / engine and gas stations system.. everything was ok when my timer to count down fuel level was set to 1 sec, now I set it to 15 secs so it would be more balanced and there is a bug, if I write /engine to turn it on, it's working good, but when I write /engine again to turn it off and if I wait a bit, my fuel textdraws show and it won't kill timer :/ here is the command, FLower callback and Engine start up callback - everything on what is command based to work.. how to fix this cuz I can't find mistake :/

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    new vehicleid = GetPlayerVehicleID(playerid);
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
   
    if(strcmp(cmdtext, "/engine", true) == 0) {
        if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be in vehicle to use this command.");
        if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You need to be driver to use this command.");
        if(Carinfo[vehicleid][F] < 1) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}This vehicle is out of fuel.");
        if(ES[playerid] == 1) return SendClientMessage(playerid, COLOR_RED,"{FF6A22}INFO: {FFFFFF}You are already starting your engine.");
        if(engine == 1) {
            KillTimer(GasTimer[playerid]);
            SetVehicleParamsEx(vehicleid,0,lights,alarm,doors,bonnet,boot,objective);
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}Engine turned off.");
            TextDrawHideForPlayer(playerid, vName[playerid]);
            TextDrawHideForPlayer(playerid, vSpeed[playerid]);
            TextDrawHideForPlayer(playerid, vGear[playerid]);
            TextDrawHideForPlayer(playerid, vHP[playerid]);
            TextDrawHideForPlayer(playerid, vFuel[playerid]);
            TextDrawHideForPlayer(playerid, HP[playerid]);
            TextDrawHideForPlayer(playerid, Speed[playerid]);
            TextDrawHideForPlayer(playerid, Gear[playerid]);
            TextDrawHideForPlayer(playerid, Veh[playerid]);
            TextDrawHideForPlayer(playerid, Fuel[playerid]);
            return 1;
        } else {
            SendClientMessage(playerid, COLOR_PURPLE,"{00FF00}INFO: {FFFFFF}You twisted the key, wait 4 seconds.");
            ES[playerid] = 1;
            SetTimerEx("EngStart", 4000, false, "d", playerid);
            return 1;
        }
    }
pawn Код:
public EngStart(playerid)
{
    new vname[50];
    // 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, write {FF6A22}/engine {FFFFFF}to turn off engine.");
        ES[playerid] = 0;
        SetVehicleParamsEx(vehicle,1,lights,alarm,doors,bonnet,boot,objective);
        SetTimerEx("FLower", 15000, true, "i", playerid);
        format(vname, sizeof(vname), "%s", Vehicles[GetVehicleModel(GetPlayerVehicleID(playerid)) - 400]);
        TextDrawSetString(vName[playerid], vname);
        TextDrawShowForPlayer(playerid, vName[playerid]);
        TextDrawShowForPlayer(playerid, vSpeed[playerid]);
        TextDrawShowForPlayer(playerid, vGear[playerid]);
        TextDrawShowForPlayer(playerid, vHP[playerid]);
        TextDrawShowForPlayer(playerid, HP[playerid]);
        TextDrawShowForPlayer(playerid, Speed[playerid]);
        TextDrawShowForPlayer(playerid, Gear[playerid]);
        TextDrawShowForPlayer(playerid, Veh[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, write {FF6A22}/engine {FFFFFF}to turn off engine.");
                SetVehicleParamsEx(vehicle,1,lights,alarm,doors,bonnet,boot,objective);
                ES[playerid] = 0;
                GasTimer[playerid] = SetTimerEx("FLower", 15000, true, "i", playerid);
                format(vname, sizeof(vname), "%s", Vehicles[GetVehicleModel(GetPlayerVehicleID(playerid)) - 400]);
                TextDrawSetString(vName[playerid], vname);
                TextDrawShowForPlayer(playerid, vName[playerid]);
                TextDrawShowForPlayer(playerid, vSpeed[playerid]);
                TextDrawShowForPlayer(playerid, vGear[playerid]);
                TextDrawShowForPlayer(playerid, vHP[playerid]);
                TextDrawShowForPlayer(playerid, HP[playerid]);
                TextDrawShowForPlayer(playerid, Speed[playerid]);
                TextDrawShowForPlayer(playerid, Gear[playerid]);
                TextDrawShowForPlayer(playerid, Veh[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;
}
pawn Код:
public FLower(playerid)
{
    new vehicleid = GetPlayerVehicleID(playerid);
    Carinfo[vehicleid][F] = Carinfo[vehicleid][F] - FUEL_DECREASE;
    TextDrawShowForPlayer(playerid, vFuel[playerid]);
    TextDrawShowForPlayer(playerid, Fuel[playerid]);
    if(Carinfo[vehicleid][F] < 1)
    {
        new engine,lights,alarm,doors,bonnet,boot,objective;
        GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
        SetVehicleParamsEx(vehicleid,0,lights,alarm,doors,bonnet,boot,objective);
        Carinfo[vehicleid][F] = 0;//-----
        KillTimer(GasTimer[playerid]);
        GameTextForPlayer(playerid, "~r~Vehicle is out of ~w~fuel~r~!", 5000, 5);
        TextDrawHideForPlayer(playerid, Veh[playerid]);
        TextDrawHideForPlayer(playerid, Gear[playerid]);
        TextDrawHideForPlayer(playerid, Speed[playerid]);
        TextDrawHideForPlayer(playerid, HP[playerid]);
        TextDrawHideForPlayer(playerid, vHP[playerid]);
        TextDrawHideForPlayer(playerid, vGear[playerid]);
        TextDrawHideForPlayer(playerid, vSpeed[playerid]);
        TextDrawHideForPlayer(playerid, vName[playerid]);
        TextDrawHideForPlayer(playerid, Fuel[playerid]);
        TextDrawHideForPlayer(playerid, vFuel[playerid]);
    }
    if(Carinfo[vehicleid][F] > 95) TextDrawSetString(vFuel[playerid]," ~g~~n~lllll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 90 && Carinfo[vehicleid][F] < 95) TextDrawSetString(vFuel[playerid], " ~g~~n~llll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 85 && Carinfo[vehicleid][F] < 90) TextDrawSetString(vFuel[playerid], " ~g~~n~lll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 80 && Carinfo[vehicleid][F] < 85) TextDrawSetString(vFuel[playerid], " ~g~~n~ll~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 75 && Carinfo[vehicleid][F] < 80) TextDrawSetString(vFuel[playerid], " ~g~~n~l~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 70 && Carinfo[vehicleid][F] < 75) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~lllll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 65 && Carinfo[vehicleid][F] < 70) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~llll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 60 && Carinfo[vehicleid][F] < 65) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~lll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 55 && Carinfo[vehicleid][F] < 60) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~ll~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 50 && Carinfo[vehicleid][F] < 55) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~h~l~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 45 && Carinfo[vehicleid][F] < 50) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~lllll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 40 && Carinfo[vehicleid][F] < 45) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~llll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 35 && Carinfo[vehicleid][F] < 40) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~lll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 30 && Carinfo[vehicleid][F] < 35) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~ll~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 25 && Carinfo[vehicleid][F] < 30) TextDrawSetString(vFuel[playerid], " ~n~~n~~y~~n~l~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 20 && Carinfo[vehicleid][F] < 25) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~lllll");
    if(Carinfo[vehicleid][F] > 15 && Carinfo[vehicleid][F] < 20) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~llll");
    if(Carinfo[vehicleid][F] > 10 && Carinfo[vehicleid][F] < 15) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~lll");
    if(Carinfo[vehicleid][F] > 5 && Carinfo[vehicleid][F] < 10) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~ll");
    if(Carinfo[vehicleid][F] > 1 && Carinfo[vehicleid][F] < 5) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~l");
    if(Carinfo[vehicleid][F] < 1) TextDrawSetString(vFuel[playerid], " ~n~~n~~n~~n~~r~|");
    return 1;
}
Reply
#2

Fixed heh, at EngStart callback I forgot to define what timer am I starting so KillTimer didn't work ^^
pawn Код:
SetTimerEx("FLower", 15000, true, "i", playerid);
here I had to put GasTimer[playerid] = ...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)