ffLogs

显示gcd和能力技间隔是否正常

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

You will need to install an extension such as Tampermonkey to install this 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 ffLogs
// @version 1.0
// @description 显示gcd和能力技间隔是否正常
// @match https://*.fflogs.com/reports/*
// @namespace 
// ==/UserScript==
(function() {
   var showSkillGap = function(){
       if(!(/type=casts/.test(location.href) && /view=events/.test(location.href) &&  /source=/.test(location.href) && !/hostility=1/.test(location.href))) return;
       let table = document.getElementsByClassName("summary-table events-table events-grid-view dataTable no-footer dtr-inline")[0];
       if(!table) return;
       let head = table.tHead.rows[0];
       if(head.cells.length != 5) return;
       let cell0 = head.cells[0];
       let cell1 = head.insertCell(1);
       cell1.outerHTML = cell0.outerHTML;
       //cell1.innerHTML = cell0.innerHTML;

       let body = table.tBodies[0];

       let casts = [];
       for(var  i = 0; i < body.rows.length; i++){
           let row = body.rows[i];
           //if(row.cells[2].innerText.indexOf("Canceled") != -1) {continue};//断读条的跳过

           casts[i] = {'time' : time2Ms(row.cells[0].innerHTML),
                       'gcd' : !row.cells[2].classList.contains('indented-cell'),
                       'beginCast' : row.cells[1].innerHTML == "起始施法" || row.cells[1].innerHTML == "Begin Cast",
                       'gcdTime' : 0
                       //,'interrupt' : row.cells[2].innerText.indexOf("Canceled") != -1
                      };
           if(casts[i].beginCast == true){
               casts[i].gcdTime = parseFloat(row.cells[2].querySelector(".event-minor-details").innerText)*1000 + 100 -50;//100是读条税,-50是波动容错
           }

           let newCell = row.insertCell(1);
           let result = getCastGap(casts,i);

           newCell.outerHTML = `<td class="main-table-number" style="${result.showTip?"color:red":""}" tabindex="0">${result.gap}</td>`;

       }
    }

   function getCastGap(casts,i){
       let thisCast = casts[i];
       for(var last = i -1 ; last >=0; last--){
           if(thisCast.gcd == true){
               if(casts[last].gcd == true){
                   if(casts[last].beginCast == false && last -1 >= 0 && casts[last -1].beginCast == true){
                       let gap = thisCast.time - casts[last-1].time; //上一个是读条技能以开始读条时间为gcd开始时间
                       let showTip = gap < casts[last-1].gcdTime; //判断gcd时间是否正常
                       if(showTip){
                           return {"gap":gap,"showTip":true};
                       }else{
                           return {"gap":gap,"showTip":false};
                       }
                   }else{//该技能GCD,上一个瞬发gcd
                       return {"gap":thisCast.time - casts[last].time,"showTip":false};
                   }
               }
           }else{//该技能能力技
               return {"gap":thisCast.time - casts[last].time,"showTip":thisCast.time - casts[last].time < 560};//判断能力技间隔
           }
       }
       return {"gap":0,"showTip":false};
   }

   function time2Ms(time){
       let minus = 1;
       if(time.length == 10 && time.startsWith("-")){
           time = time.substring(1);
           minus = -1;
       }
       if(time.length != 9) return;
       return minus*(parseInt(time.substring(0,2))*60*1000 + parseInt(time.substring(3,5))*1000 + parseInt(time.substring(6,9)));
   }

    setInterval(showSkillGap,500);


})();