3

Экран отправления флота

Небольшая улучшалка экрана отправления флота. 

Сортировка по времени полёта и показывает количество первых двух сильнейших кораблей во флоте на планете.

Вставляем в greasemonkey или tampermonkey:

// ==UserScript==
// @name         ConsulWar attack menu
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://consulwar.ru/game/cosmos
// @grant        none
// ==/UserScript==

var showed = false;

function Tick()
{
    var am = document.getElementsByClassName("attack-menu");
    if(am.length == 0){
      showed = false;
      return true;
    }
    if(showed) {
        return true;
    }
    showed = true;
    var els = am[0].getElementsByClassName("planet fleet-user");
    var planets = Game.Planets.Collection.find({armyUsername: Meteor.user().username}).fetch();
    var sort_lst = [];
    for(var i_els=0; i_els<els.length; i_els++){
        var el = els[i_els];
        sort_lst.push(el);

        var el_time = el.getElementsByClassName("location")[0];
        if(el_time.innerHTML.includes("ч")) {
            el_time.innerHTML = el_time.innerHTML.trim().substr(0, 7);
        }

        var el_id = el.getAttribute("data-id");
        var ai = "";
        for(var i_planets=0; i_planets<planets.length; i_planets++){
            if(planets[i_planets]._id == el_id){
                var t = Game.Cosmos.getPlanetInfo(planets[i_planets]).units;
                if (t) {
                   var cc = 2;
                   for(var ii = t.length - 1; ii >= 0; ii--){
                     var ta = t[ii];
                     if (ta.count > 0) {
                       if(ai != ""){
                         ai += " "
                       }
                       ai += "" + ta.unit.title.charAt(0) + ":" + ta.count;
                       cc--;
                       if(cc == 0) break;
                     }
                   }
                }
            }
        }

        if(ai){
          var nel=document.createElement("div");
          nel.innerHTML = ai;
          el.appendChild(nel);
        }
    }

    sort_lst.sort(function (x, y) {
        var xt = x.getElementsByClassName("location")[0].innerHTML;
        var yt = y.getElementsByClassName("location")[0].innerHTML;
        var xh = xt.includes("ч");
        var yh = yt.includes("ч");
        if (xh && !yh) return 1;
        if (!xh && yh) return -1;
        if (xt>yt) return 1;
        if (xt<yt) return -1;
        return 0;
    });
    for(var i=sort_lst.length-1; i>=0; i--){
        el = sort_lst[i];
        el.parentNode.insertBefore(el, el.parentNode.firstChild);
    }
}
setInterval(Tick, 1000);

"а у меня всё работает" :)

какие в консоли ошибки пишет?

Да, в firefox с greasemonkey не работает. Тестировал только в вивалди/хром.

Какие-то непонятные ограничения по правам, не получается выполнить unsafeWindow.Game.Planets.Collection.find().

Ошибка. Permission denied to access property \"_id\

Поищу что можно с этим сделать.

в хроме еще и сортирует неправильно. я так понимаю он должен давать ближайшие планеты первыми

Да, ближайшие первые. А можно скрин как сортирует?

Новая версия. Заработала в ФФ. Изменил сортировку, возможно, из-за разных локалей некорректно часы и минуты сортировались.

Одним словом костыль на костыле, гарантий никаких, но вроде работает.

// ==UserScript==
// @name         ConsulWar attack menu
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://consulwar.ru/game/cosmos
// @grant        unsafeWindow
// ==/UserScript==

function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
    var D                                   = document;
    var scriptNode                          = D.createElement ('script');
    if (runOnLoad) {
        scriptNode.addEventListener ("load", runOnLoad, false);
    }
    scriptNode.type                         = "text/javascript";
    if (text)       scriptNode.textContent  = text;
    if (s_URL)      scriptNode.src          = s_URL;
    if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';

    var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    targ.appendChild (scriptNode);
}

function Inject(){
    window.showed = false;

function Tick()
{
    var am = document.getElementsByClassName("attack-menu");
    if(am.length == 0){
      window.showed = false;
      return true;
    }
    if(window.showed) {
        return true;
    }
    window.showed = true;
    var els = am[0].getElementsByClassName("planet fleet-user");
    var planets = Game.Planets.Collection.find({armyUsername: Meteor.user().username}).fetch();
    var sort_lst = [];
    for(var i_els=0; i_els<els.length; i_els++){
        var el = els[i_els];
        sort_lst.push(el);

        var el_id = el.getAttribute("data-id");
        var ai = "";
        for(var i_planets=0; i_planets<planets.length; i_planets++){
            if(planets[i_planets]._id == el_id){
                var t = Game.Cosmos.getPlanetInfo(planets[i_planets]).units;
                if (t) {
                   var cc = 2;
                   for(var ii = t.length - 1; ii >= 0; ii--){
                     var ta = t[ii];
                     if (ta.count > 0) {
                       if(ai != ""){
                         ai += " "
                       }
                       ai += "" + ta.unit.title.charAt(0) + ":" + ta.count;
                       cc--;
                       if(cc == 0) break;
                     }
                   }
                }
            }
        }

        if(ai){
          var nel=document.createElement("div");
          nel.innerHTML = ai;
          el.appendChild(nel);
        }
    }

    sort_lst.sort(function (x, y) {
        var xt = x.getElementsByClassName("location")[0].innerHTML.trim();
        var yt = y.getElementsByClassName("location")[0].innerHTML.trim();
        var xh = xt.length > 7;
        var yh = yt.length > 7;
        if (xh && !yh) return 1;
        if (!xh && yh) return -1;
        if (xt>yt) return 1;
        if (xt<yt) return -1;
        return 0;
    });
    for(var i=sort_lst.length-1; i>=0; i--){
        el = sort_lst[i];
        var el_time = el.getElementsByClassName("location")[0];
        var stime = el_time.innerHTML.trim();
        if(stime.length > 7){
            el_time.innerHTML = stime.substr(0, 7);
        }

        el.parentNode.insertBefore(el, el.parentNode.firstChild);
    }
}
setInterval(Tick, 1000);
}

addJS_Node(null, null, Inject);

Очень интересно. У тебя хром+тамперманки? А без скрипта время показывает нормально? 

Сделай, пожалуйста, скрин с кодом страницы, примерно так:

Ткнуть правой мышкой на времени, потом "Inspect" или "Посмотреть код".

спасибо за скрин) я разобрался в чем дело - нужно в меню включить опцию "показывать расстояние при отправке флота"

вот это еще поменяй:

// @match https://consulwar.ru/game/*

или на  // @match https://consulwar.ru

Скрипт нужен только в космосе. Зачем он на других страницах?