#define DS_TIME 60000 // 1 Minute in miliseconds
// I'm using this when the player left his vehicle
PVeh[ slot ][ playerid ][ VehicleTimer ] = GetTickCount( ) + DS_TIME;
// All good but the car it's despawned right after the player left his vehicle...
// In this 1 second timer i'm checking if that 1 minute has been passed
public CheckCar( ) // It's runing once per seccond
{
new TimeNow = GetTickCount( );
foreach( Player, i )
{
if( GetPersonalVehiclesNumber( i ) > 0 )
{
for( new slot=0; slot<MAX_SLOTS; slot++ )
{
if( PVeh[ slot ][ i ][ VehicleStatus ] == 1 )
{
if( PVeh[ slot ][ i ][ VehicleTimer ] - TimeNow < DS_TIME )
{
#if defined DEBUG
printf( "Vehicle[slot:%d] has been despanwned(C:%d / D:%d)", slot, GetTickCount( ), PVeh[ slot ][ i ][ VehicleTimer ] );
#endif
DeSpawnPlayerVehicle( slot, i );
InfoTD_MSG( i, 7000, "~r~~h~Personal Vehicle~n~~w~~h~Your ~g~~h~%s(%d) ~w~~h~has been despawned~n~~y~~h~Reason: ~w~~h~1 minute out of activity", VehicleNames[ PVeh[ slot ][ i ][ VehicleModelID ] - 400 ], slot );
}
}
}
}
}
}
if( PVeh[ slot ][ i ][ VehicleTimer ] < TimeNow )
// When you want to start the despawn timer.
PVeh[slot][i][VehicleTimer] = SetTimerEx("DespawnVehicle", DS_TIME, false, "ii", slot, i);
// When you want to cancel the despawn timer.
KillTimer(PVeh[slot][i][VehicleTimer]);
forward DespawnVehicle(slot, vehicle);
public DespawnVehicle(slot, vehicle)
{
if( PVeh[ slot ][ vehicle ][ VehicleStatus ] == 1 )
{
#if defined DEBUG
printf( "Vehicle[slot:%d] has been despanwned(C:%d / D:%d)", slot, GetTickCount( ), PVeh[ slot ][ i ][ VehicleTimer ] );
#endif
DeSpawnPlayerVehicle( slot, i );
InfoTD_MSG( i, 7000, "~r~~h~Personal Vehicle~n~~w~~h~Your ~g~~h~%s(%d) ~w~~h~has been despawned~n~~y~~h~Reason: ~w~~h~1 minute out of activity", VehicleNames[ PVeh[ slot ][ i ][ VehicleModelID ] - 400 ], slot );
return 1;
}
return 0;
}
Well I'm not sure if it's buggy or not, but gettime(); is another way to do it, it gives you current time on seconds (not miliseconds so your DS_TIME would be a simple 60), as far as I know it's easier to work with gettime and btw you didn't even mention your problem
|
PVeh[ slot ][ playerid ][ VehicleTimer ] = GetTickCount( ) + DS_TIME;//changed with gettime()
PVeh[ slot ][ playerid ][ VehicleTimer ] = gettime();
if( PVeh[ slot ][ i ][ VehicleTimer ] - TimeNow < DS_TIME )
if(TimeNow - PVeh[ slot ][ i ][ VehicleTimer ]> DS_TIME )
if( PVeh[ slot ][ i ][ VehicleTimer ] < TimeNow )