您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
显示gcd和能力技间隔是否正常
- // ==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);
- })();