Greasy Fork is available in English.

Timer

timer for skap.io

// ==UserScript==
// @name          Timer
// @namespace     evades.io
// @version       1.0.0
// @description   timer for skap.io
// @author        Kefirchik
// @match         https://skap.io/*
// @grant         none
// ==/UserScript==

let timer,
    timerInterval,
    seconds = 0,
    minutes = 0;

// Start timer when player joined the server
WebSocket.prototype._send = WebSocket.prototype.send;
WebSocket.prototype.send = function(data) {
  if (!timer) {
    startTimer();
    this.onclose = () => {
      timer.remove();
      clearInterval(timerInterval);
    };
  }

  this._send(data);
}

function startTimer() {
  // Create timer element and assign styles
  timer = document.createElement('div');
  timer.innerHTML = `0:00`;
  timer.style = `
    color: #f4faff;
    position: fixed;
    display: block;
    font: bold 30px Tahoma, Verdana, Segoe, sans-serif;
    -webkit-text-stroke: 2px #425a6d;
    transform-origin: 0% 0%;
  `;
  document.body.appendChild(timer);

  // Update timer every second
  timerInterval = setInterval(() => {
    seconds += 1;
    if (seconds >= 60) {
      minutes += 1;
      seconds = 0;
    }
    timer.innerHTML = `${minutes}:${seconds < 10 ? `0${seconds}` : seconds}`;
  }, 1000);

  // Scale timer size on resize
  window.addEventListener('resize', resize);
  setTimeout(resize, 5000);

  function resize() {
    const canvas = document.getElementById('canvas');
    const canvasBound = canvas.getBoundingClientRect();

    let scale = {};
    scale.x = window.innerWidth / canvas.width;
    scale.y = window.innerHeight / canvas.height;
    scale = scale.x < scale.y ? scale.x : scale.y;

    timer.style.transform = `scale(${scale})`;
    timer.style.left = `${canvasBound.left + 1500 * scale}px`;
    timer.style.top = `${canvasBound.top + 1500 * scale}px`;
  }
}