Greasy Fork is available in English.

GN_ShowRepairTime

Показ времени и цены ремонта подвешенных артефактов

// ==UserScript==
// @name        GN_ShowRepairTime
// @namespace   Gradient
// @description Показ времени и цены ремонта подвешенных артефактов
// @include     /^https{0,1}:\/\/(www\.heroeswm\.ru|178\.248\.235\.15)\/inventory\.php/
// @version     1.0.8
// ==/UserScript==

"use strict";

//----------------------------------------------------------------------------//

var script_name = 'GN_ShowRepairTime'; // Enter your script name here

//----------------------------------------------------------------------------//

(function(){ try{ // wrapper start

//----------------------------------------------------------------------------//
// UnifiedLibrary 1.7.0 start
//----------------------------------------------------------------------------//

//----------------------------------------------------------------------------//
// SysUtils
//----------------------------------------------------------------------------//

var GN_SysUtils = new SysUtils(script_name);
var SU = GN_SysUtils;

//----------------------------------------------------------------------------//

function SysUtils(name){  // wrapper start

//----------------------------------------------------------------------------//

this.show_error = function(error_string, use_alert){
  if(use_alert)
    alert(error_string);

  throw new Error(error_string);
};

if(arguments.length != 1)
  this.show_error('Wrong SysUtils arguments');

if(!arguments[0])
  this.show_error('Empty SysUtils argument');

//----------------------------------------------------------------------------//

this.load_value = function(value, def){
  var div = document.getElementById('GN_GM_Handler');
  div.setAttribute('desc',      value);
  div.setAttribute('operation', 'load');

  div.click();

  if(div.getAttribute('state') != 'complete')
    this.show_error('Ошибка при загрузке значения');

  return (div.getAttribute('is_null') == 'true' ? def : div.getAttribute('value'));
};

//----------------------------------------------------------------------------//

var current_id = null;

//----------------------------------------------------------------------------//

function check_mandatory_scripts(alerter){
  var persistent_storage_sign = document.getElementById('GN_GM_Handler');
  var common_values_sign      = document.getElementById('GN_CommonValuesSign');
  var alert_sign              = document.getElementById('GN_AlertSign');

  if(!alert_sign){
    alert_sign = document.createElement('div');
    alert_sign.id = 'GN_AlertSign';
    alert_sign.setAttribute('alerted', 'false');
    document.body.appendChild(alert_sign);
  }

  var alerted = alert_sign.getAttribute('alerted') != 'false';

  if(!persistent_storage_sign){
    alert_sign.setAttribute('alerted', 'true');
    alerter('Скрипт ' + name + ' требует для своей работы скрипт управления данными (GN_PersistentStorage), который должен стоять первым в порядке выполнения скриптов.\n'
          + 'Подробнее здесь: "https://greasyfork.org/ru/scripts/14049-Как-устанавливать-скрипты-читать-здесь"', !alerted);
  }

  if(!common_values_sign){
    alert_sign.setAttribute('alerted', 'true');
    alerter('Скрипт ' + name + ' требует для своей работы скрипт, хранящий данные (GN_CommonValuesFiller), который должен стоять вторым в порядке выполнения скриптов.\n'
          + 'Подробнее здесь: "https://greasyfork.org/ru/scripts/14049-Как-устанавливать-скрипты-читать-здесь"', !alerted);
  }
}

this.check_login = function(){
  var re = /.*?pl_id=(\d+)[^\d]*?/gmi;
  var matches = re.exec(document.cookie.toString());

  if(matches){
    current_id = +matches[1];

    check_mandatory_scripts(this.show_error);
  }
};

//----------------------------------------------------------------------------//

this.check_login();

//----------------------------------------------------------------------------//

} // wrapper end

//----------------------------------------------------------------------------//
// CommonValues
//----------------------------------------------------------------------------//

var GN_CommonValues = new CommonValues();

//----------------------------------------------------------------------------//

function CommonValues(){  // wrapper start

//----------------------------------------------------------------------------//
// Artefacts
//----------------------------------------------------------------------------//

this.artefacts = JSON.parse(SU.load_value('GN_CommonValues_Artefacts', '[]'));

//----------------------------------------------------------------------------//

this.get_artefact = function(id){
  for(var i = 0; i < this.artefacts.length; ++i)
    if(this.artefacts[i].id == id)
      return this.artefacts[i];

  return null;
};

//----------------------------------------------------------------------------//

} // wrapper end

//----------------------------------------------------------------------------//
// UnifiedLibrary end
//----------------------------------------------------------------------------//

var CV = GN_CommonValues;
var show_error = SU.show_error;

start_work();

//----------------------------------------------------------------------------//

function start_work(){
  var parent = document.getElementById('set_det').parentNode.parentNode;

  if(!parent)
    show_error('Не найдена таблица с артефактами для передачи');

  var arts = parent.querySelectorAll('a[href*="art_info.php?id="] > img.cre_mon_image1[width="50"]');

  var has_unknown = false;

  var sum = 0;
  for(var i = 0; i < arts.length; ++i){
    var desc = arts[i].parentNode.parentNode.parentNode.parentNode.parentNode.outerHTML.replace('(\r|\n)', '');

    if(!/Прочность: 0\/\d+/gmi.test(desc))
      continue;

    if(!(/Ремонт разрешен/.test(desc) || /Плата/.test(desc)))
      continue;

    var re = /art_info\.php\?id=([^&]*)/;

    var matches = re.exec(arts[i].parentNode.getAttribute('href'));

    if(!matches)
      show_error('Ошибка парсинга');

    var artefact = CV.get_artefact(matches[1]);

    if(!artefact)
      has_unknown = true;
    else
      sum += artefact.repair_cost;
  }

  if(!sum)
    return;

  var tr = document.createElement('tr');
  var title = document.createElement('td');
  title.className = 'wb';
  title.setAttribute('colspan', '2');
  tr.appendChild(title);

  var date = new Date();

  var content = 'Цена ремонта: ' + sum + ', Время работы: ' + (sum/4000).toFixed(2) + ' [На ' + date.toLocaleString() + ']';
  if(has_unknown)
    content += ', есть неизвестные артефакты';

  title.textContent = content;

  var trades_tr = null;
  var tds = parent.querySelectorAll('tr > td');
  for(var i = 0; i < tds.length; ++i)
    if(tds[i].outerHTML.indexOf('Сделки:') != -1){
      trades_tr = tds[i].parentNode;
      break;
    }

  trades_tr.parentNode.insertBefore(tr, trades_tr.nextSibling);
}

//----------------------------------------------------------------------------//

} catch(e){
  alert('Ошибка в скрипте ' + script_name + ', обратитесь к разработчику:\n' + e);
  throw e;
}}()); // wrapper end

//----------------------------------------------------------------------------//