Why is this timer not killing?
#1

I've usually stayed away from timers but in this case I really need to use one. I assign Player[playerid][MechanicTimer] to the following timer. But if the player goes away from the vehicle, the vehicle hood shuts, the player they're repairing logs off, etc, etc it's suppose to kill the timer. But it doesn't. The timer just keeps infinitely repeating.

PHP код:
forward RepairTimer(playerididvehicleid);
public 
RepairTimer(playerididvehicleid)
{
    if(!
IsPlayerConnectedEx(id)) 
    {
        
KillTimer(Player[playerid][MechanicTimer]);
        return 
SendClientMessage(playeridWHITE"That player has disconnected");
    }
    if(
IsPlayerInAnyVehicle(playerid))
    {
        
KillTimer(Player[playerid][MechanicTimer]);
        return 
SendClientMessage(playeridWHITE"You can't repair a vehicle from inside.");
    }
    switch(
GetPVarInt(playerid"RepairInt"))
    {
        case 
.. 28:
        {
            if(
vehicleid != INVALID_VEHICLE_ID)
            {
                new 
Float:Pos[3], enginelightsalarmdoorsbonnetbootobjective;
                
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
                
GetVehiclePos(vehicleidPos[0], Pos[1], Pos[2]);
                if(
bonnet == VEHICLE_PARAMS_ON)
                {
                    if(
IsPlayerInRangeOfPoint(playerid15.0Pos[0], Pos[1], Pos[2]))
                    {
                        Array[
0] = 0;
                        
format(Array, sizeof(Array), "Repairing Vehicle...\n%d seconds left."30 GetPVarInt(playerid"RepairInt"));
                        
SetPVarInt(playerid"RepairInt"GetPVarInt(playerid"RepairInt") + 1);
                        
GameTextForPlayer(playerid, Array, 10004);
                    }
                    else 
                    {
                        
KillTimer(Player[playerid][MechanicTimer]);
                        return 
SendClientMessage(playeridWHITE"You are no longer near that vehicle.");
                    }
                }
                else
                {
                    
KillTimer(Player[playerid][MechanicTimer]);
                    return 
SendClientMessage(playeridWHITE"The vehicle's hood must be opened.");
                }
            }
            else 
            {
                
KillTimer(Player[playerid][MechanicTimer]);
                return 
SendClientMessage(playeridWHITE"You are no longer near that vehicle.");
            }
        }
        default:
        {
            new 
enginelightsalarmdoorsbonnetbootobjective;
            
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
            if(
bonnet == VEHICLE_PARAMS_ON)
            {
                Array[
0] = 0;
                
RepairVehicle(vehicleid);
                
SendClientMessage(playeridWHITE"You have repaired the vehicle.");
                
KillTimer(Player[playerid][MechanicTimer]);
                
SetPVarInt(playerid"MechanicTime"gettime() + 60);
                
format(Array, sizeof(Array), "* %s has repaired the vehicle."GetName(playerid));
                
SendNearbyMessage(playerid, Array, SCRIPTPURPLE30.0);
            }
            else
            {
                
KillTimer(Player[playerid][MechanicTimer]);
                return 
SendClientMessage(playeridWHITE"The vehicle's hood must be opened.");
            }
        }
    }
    return 
1;

What am I doing wrong?

Edit: Here's where I used the timer:
PHP код:
Player[playerid][MechanicTimer] = SetTimerEx("RepairTimer"1000TRUE"iii"playerididvehicleid); 
Reply
#2

My bad.
Reply
#3

Tick timer forever...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)