Efficiency Stat Script

Shows efficiency (attack per piece + downstack per piece)

Versione datata 04/04/2020. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         Efficiency Stat Script
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Shows efficiency (attack per piece + downstack per piece)
// @author       Oki
// @match        https://*.jstris.jezevec10.com/*
// @grant        none
// ==/UserScript==

/**************************
   Efficiency Stat Script
**************************/


(function() {
    window.addEventListener('load', function(){

var STAT_POS = 970;
var STAT_NAME = "Eff"
var enable_playing = true
var enable_replay = true


var trim=a=>{a=a.slice(0,-1);a=a.substr(a.indexOf("{")+1);return a}
var getParams=a=>{var params=a.slice(a.indexOf("(")+1);params=params.substr(0,params.indexOf(")")).split(",");return params}

var x = true

function afterPlaceBlock() {
    if(this.clock == 0 && x){
      cat = this["v"]["kppElement"].id.slice(-1)
      pieces = this['placedBlocks']
      APP = this["gamedata"]["attack"] / pieces
      DPP = this["gamedata"]["lines"] / pieces
      GameCore[STAT_NAME + "Timestamps"+cat] = GameCore[STAT_NAME + "Timestamps"+cat] || []
      GameCore[STAT_NAME + "Timestamps"+cat].push([(APP + DPP).toFixed(2), this['actions'][this['ptr']]["t"]])
    } else {
      x = false
    }
}

function afterCheckLineClears() {
    pieces = this["GameStats"]["stats"]["BLOCKS"].value
    APP = this["gamedata"]["attack"] / pieces
    DPP = this["gamedata"]["lines"] / pieces
    if(this['GameStats'].get('EFF'))this['GameStats'].get('EFF').set((APP + DPP).toFixed(2));
}



if(enable_playing){
  if(typeof Game != "undefined"){

    var checkLineClearsFunc = GameCore['prototype']['checkLineClears'].toString()
    var params = getParams(checkLineClearsFunc)
    checkLineClearsFunc = trim(checkLineClearsFunc) + trim(afterCheckLineClears.toString())
    GameCore['prototype']['checkLineClears'] = new Function(...params, checkLineClearsFunc);

    var readyGoFunc = Game['prototype']["startReadyGo"].toString()
    readyGoFunc = "EFFStat=0;this['GameStats'].addStat(new StatLine('EFF', '"+STAT_NAME+"', "+STAT_POS+"),true);" + trim(readyGoFunc)
    Game['prototype']["startReadyGo"] = new Function(readyGoFunc);

  }
}


if(enable_replay){

  var website = "jstris.jezevec10.com"
  var url = window.location.href
  var parts = url.split("/")

  if(typeof Replayer != "undefined"){
      Replayer["addStat"] = function(id,into) {
          var newStat = document.createElement("tr");
          newStat.innerHTML = '<td class="ter">'+STAT_NAME+'</td><td class="sval"><span id="'+id+'">0</span></td>'
          into.appendChild(newStat);
      }
  }

  if(parts[3]=="replay" && parts[2].endsWith(website) && parts.length>4){


      var placeBlockFunc = GameCore['prototype']['placeBlock'].toString()
      var params2 = getParams(placeBlockFunc)
      placeBlockFunc =  trim(placeBlockFunc) + trim(afterPlaceBlock.toString())
      GameCore['prototype']['placeBlock'] = new Function(...params2, placeBlockFunc);

      if(parts[4]=="1v1"){
          Replayer["addStat"](STAT_NAME+"Element1",document.getElementsByTagName("tbody")[0])
          Replayer["addStat"](STAT_NAME+"Element2",document.getElementsByTagName("tbody")[2])

      } else {
          Replayer["addStat"](STAT_NAME+"ElementP",document.getElementsByClassName("moreStats")[0])
      }

     Replayer['prototype']['getStat'] = function(cat) {
      if(stamps=GameCore[STAT_NAME+"Timestamps"+cat]){
        for (var i = 1; i < stamps.length; i++) {
          if(stamps[i][1]>this['clock']){
            return stamps[i-1][0]
          }
        }
        return stamps[stamps.length-1][0]
      }
      return 0
     };

     var oldTextBar = View.prototype.updateTextBar.toString();
     oldTextBar = trim(oldTextBar) + ';var cat = this.kppElement.id.slice(-1);eval("'+STAT_NAME+'Element"+cat+"&&('+STAT_NAME+'Element"+cat+".innerHTML = this.g.getStat(cat))");'
     View.prototype.updateTextBar = new Function(oldTextBar);

  }
}

    });
})();