Issue with Killing Timer.
#1

As title says, I can't seem to kill this timer and the engine still comes on.

The timer I'm trying to kill is "EngineOn".

What I done was On CMD:eoff I tried doing KillTimer(EngineOn(playerid));

It didn't work...
pawn Код:
CMD:eon(playerid, params[])
{
    if(LoggedIn[playerid] == 0)return SendClientMessage(playerid, COLOUR_GREY, "You must be logged in to use this command.");
    if(IsRefuelling[playerid] == 1)return SendClientMessage(playerid, COLOUR_GREY, "You may not turn your engine on as you are refuelling.");
    printf("checks if refueling");
    new string[128];
    new vehicleid = GetPlayerVehicleID(playerid);
    new name = GetVehicleModel(vehicleid) - 400;
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SendClientMessage(playerid, COLOUR_GREY, "You are not the driver.");
    printf("checks player state");
    if(EngineStartStatus[vehicleid] == 1)return SendClientMessage(playerid, COLOUR_GREY, "The engine is already on.");
    printf("checks engine");
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOUR_GREY, "You are not in a vehicle.");
    printf("checks if in vehicle.");
   
    if(VehFuel[vehicleid] > 0)
    {
        KillTimer(SpeedoSysTimer[playerid]);
        KillTimer(FuelSysTimer[playerid]);
        TextDrawDestroy(enginestring);
        if(EngineStartStatus[vehicleid] == 1)
        {
            GameTextForPlayer(playerid, "~g~Engine starting...", 2500, 5);
            SetTimerEx("EngineOn", 3000, false, "i", playerid);
            format(string, sizeof(string), "* %s turns the %s's ignition key...", GetNameEx(playerid), VehicleNames[name]);
            ProxDetector(30.0, playerid, string, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE);
        }
    }
    else if(VehFuel[vehicleid] == 0)
    {
        EngineStartStatus[vehicleid] = 0;
        SendClientMessage(playerid, COLOUR_REALRED, "Your vehicle is out of fuel..");
        format(string, sizeof(string), "* The %s has run out of fuel and failed to start.", VehicleNames[name]);
        ProxDetector(30.0, playerid, string, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE);
    }
    return 1;
}
pawn Код:
CMD:eoff(playerid, params[])
{
    if(LoggedIn[playerid] == 0) return SendClientMessage(playerid, COLOUR_GREY, "You must be logged in to use this command.");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOUR_GREY, "You are not in a vehicle.");
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SendClientMessage(playerid, COLOUR_GREY, "You are not the driver.");
    new string[128];
    new vehicleid = GetPlayerVehicleID(playerid);
    new VehID = MySQL_GetValue(vehicleid, "id", "vehicles");
    if(VehOwned[playerid] ==1)
    {
        if(strcmp(VehOwner[VehID], GetName(playerid), true))
        {
            RemovePlayerFromVehicle(playerid);
            SendClientMessage(playerid, COLOUR_GREY, "You can not control this vehicles engine.");
        }
    }
    if(EngineStartStatus[vehicleid] == 0)return SendClientMessage(playerid, COLOUR_GREY, "The engine is already off.");
    new name = GetVehicleModel(vehicleid) - 400;
    EngineStartStatus[vehicleid] = 0;
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vehicleid, 0, lights, alarm, doors, bonnet, boot, objective);
    GameTextForPlayer(playerid, "~r~Engine off", 1000, 5);
   
    KillTimer(SpeedoSysTimer[playerid]);
    KillTimer(FuelSysTimer[playerid]);
    TextDrawDestroy(enginestring);
    TextDrawHideForPlayer(playerid,speed[playerid]);
    TextDrawHideForPlayer(playerid,fuel[playerid]);

    VehicleSQLID[vehicleid] = MySQL_GetValue(VehicleSQLID[vehicleid], "id", "vehicles");
    MySQL_SetInteger(VehicleSQLID[vehicleid], "VehFuel", VehFuel[vehicleid], "vehicles");
    format(string, sizeof(string), "* %s has turned the %s's engine off.", GetNameEx(playerid), VehicleNames[name]);
    ProxDetector(30.0, playerid, string, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE);
    return 1;
}
TIMER
pawn Код:
forward EngineOn(playerid);
public EngineOn(playerid)
{
    new string[128];

    new vehicleid = GetPlayerVehicleID(playerid);
    new name = GetVehicleModel(vehicleid) - 400;
    GameTextForPlayer(playerid, "~g~Engine started!", 1500, 5);
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vehicleid, 1, lights, alarm, doors, bonnet, boot, objective);
    EngineStartStatus[vehicleid] = 1;
    SpeedoSysTimer[playerid] = SetTimerEx("SpeedoUpdate", 300, true, "i", playerid);
    FuelSysTimer[playerid] = SetTimerEx("FuelUpdate", 30000, true, "i", playerid);
    SetTimer("FuelSave", 4000, 1);
    TextDrawShowForPlayer(playerid,speed[playerid]);
    TextDrawShowForPlayer(playerid,fuel[playerid]);
    format(string, sizeof(string), "* %s has turned the %s's engine on.", GetNameEx(playerid), VehicleNames[name]);
    ProxDetector(30.0, playerid, string, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE);
    return 1;
}
Reply
#2

EngineOn(...) is a function which returns 1, not the timer ID you are trying to kill.

Please check up the wiki:
https://sampwiki.blast.hk/wiki/KillTimer

and see how the KillTimer function actually works.
Reply
#3

I've managed to resolve this...But this one...It should kill the timer if they step out of the vehicle when refuelling.

It's not.

pawn Код:
public OnPlayerExitVehicle(playerid, vehicleid)
{
    if(IsRefuelling[playerid] == 1) return SendClientMessage(playerid, COLOUR_GREY, "Refuelling was cancelled as you left the vehicle.");
    IsRefuelling[playerid] = 0;
    KillTimer(RefuelTimer[playerid]); //this timer is the one that's not being killed.
    GameTextForPlayer(playerid, "", 0, 0);
    KillTimer(FuelSysTimer[playerid]);
    KillTimer(SpeedoSysTimer[playerid]);
   
    return 0;
}
Timer Define.
pawn Код:
RefuelTimer[playerid] = SetTimerEx("RefuelUpdate", 1000, true, "i", playerid);
pawn Код:
CMD:refuel(playerid, params[])
{
    if(LoggedIn[playerid] == 0) return SendClientMessage(playerid, COLOUR_GREY, "You must be logged in to use this command.");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOUR_GREY, "You are not in a vehicle.");
    printf("Checked if in vehicle");
    new string[128];
    if(!IsPlayerInRangeOfPoint(playerid, 20.0, -240.2907,1209.9883,19.7422)&& !IsPlayerInRangeOfPoint(playerid, 50.0,-1327.7439,2675.7014,50.0625) && !IsPlayerInRangeOfPoint(playerid, 10.0, 609.0861,1698.3657,6.9922)) return SendClientMessage(playerid, COLOUR_GREY, "You must be at a Gas Station to refuel.");
        new vehicleid = GetPlayerVehicleID(playerid);
        new amount, sum, num;

        num = 100;
        sum = num -= VehFuel[vehicleid];

        GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
        if(engine == 1) return SendClientMessage(playerid, COLOUR_GREY, "Please turn your engine off before refuelling.");
        format(string, sizeof(string), "Usage: /refuel [amount] - Use /refuel %d to fill the tank. (You have %d percent fuel left.) (Cost's $2 per %%)", sum, VehFuel[vehicleid]);
        if(sscanf(params, "d", amount)) return SendClientMessage(playerid, COLOUR_GREY, string);
        if(amount > sum) return SendClientMessage(playerid, COLOUR_GREY, "Your vehicle cannot hold this much fuel.");
        if(VehFuel[vehicleid] == num)return SendClientMessage(playerid, COLOUR_GREY, "Your vehicle's fuel tank is full.");

        RefuelAmount[playerid] = amount;
        RefuelTimer[playerid] = SetTimerEx("RefuelUpdate", 1000, true, "i", playerid);
        new price = amount * 2;
        IsRefuelling[playerid] = 1;
        format(string, sizeof(string), "Total cost of fuel($2 per %%): $%d", price);
        SendClientMessage(playerid, COLOUR_WHITE, string);
        GivePlayerMoney(playerid, -price);
        printf("Executed timer and set fuel amount");
        format(string, sizeof(string), "* %s has begun refuelling the vehicle. *", GetNameEx(playerid));
        ProxDetector(10.0, playerid, string, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE, COLOUR_PURPLE);
   
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: