GN_ElementsCost

Стоимость элементов и ресурсов

目前为 2015-11-21 提交的版本,查看 最新版本

// ==UserScript==
// @name        GN_ElementsCost
// @namespace   Gradient
// @description Стоимость элементов и ресурсов
// @include     /.+(heroeswm\.ru|178\.248\.235\.15)\/pl_info.php\?id.+/
// @version     1.1.3
// ==/UserScript==

"use strict";

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

(function(){ // wrapper start
  
//----------------------------------------------------------------------------//
// UnifiedLibrary 1.4.0 start
//----------------------------------------------------------------------------//

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

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

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

function SysUtils(){  // wrapper start
  
//----------------------------------------------------------------------------//
  
this.show_error = function(error_string){
  throw new Error(error_string);
};
  
//----------------------------------------------------------------------------//  

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'));
};

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

this.check_login = function(){
  var re = /.*?pl_id=\d+?.*?/gmi;

  if(!re.test(document.cookie.toString()))
    this.show_error('Пользователь не авторизован');
};

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

this.check_login();

//----------------------------------------------------------------------------//  
  
} // wrapper end

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

var GN_CommonValues = new CommonValues();

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

function CommonValues(){  // wrapper start

//----------------------------------------------------------------------------//
// Elements
//----------------------------------------------------------------------------//

this.elements = JSON.parse(SU.load_value('GN_CommonValues_Elements', '[]'));

//----------------------------------------------------------------------------//
// Advanced resources
//----------------------------------------------------------------------------//

this.advanced_resources = JSON.parse(SU.load_value('GN_CommonValues_AdvancedResources', '[]'));
  
//----------------------------------------------------------------------------//
  
this.get_advanced_resource = function(name){
  for(var i = 0; i < this.advanced_resources.length; ++i)
    if(this.advanced_resources[i].name == name)
      return this.advanced_resources[i];

  return null;
};
    
//----------------------------------------------------------------------------//
  
} // wrapper end

//----------------------------------------------------------------------------//
// UnifiedLibrary end
//----------------------------------------------------------------------------//
 
var CV = GN_CommonValues;

start_work();
  
//----------------------------------------------------------------------------//
  
function start_work(){
  var parent_td = null;
  var re = /<b>([^<]+)<\/b>: ([0-9,]+)<br>/gmi;
  var tds = document.querySelectorAll('td.wb[valign="top"]');
  
  for(var i = 0, e = tds.length; i < e; ++i){
    if(re.test(tds[i].innerHTML)){
      parent_td = tds[i];
      break;
    }
  }

  if(!parent_td)
    return;

  var matches   = [];
  var resources = [];
  var elements  = [];
  
  re.lastIndex = 0;
  
  while(matches = re.exec(parent_td.innerHTML)){
    var advanced_resource = CV.get_advanced_resource(matches[1]);
    
    if(advanced_resource){
      resources.push( { name: matches[1], count: +matches[2].replace(/,/g, ''), price: advanced_resource.min_price } );
      continue;
    }
    
    var element = element_by_name(matches[1]);
    
    if(element)
      elements.push( { name: matches[1], count: +matches[2].replace(/,/g, ''), price: element.average_price } );
  }
  
  if(!resources.length && !elements.length)
    return;
  
  while(parent_td.firstChild)
    parent_td.removeChild(parent_td.firstChild);
  
  var table = document.createElement('table');
  table.style.width = '100%';
  parent_td.appendChild(table);
  
  if(resources.length){
    draw_info_row(table, 'Вторичные ресурсы:');

    draw_header(table);
    
    var amount = 0;
    resources.forEach(function(current){
      amount += current.count*current.price;
      draw_row(table, current);
    });

    draw_info_row(table, 'Общая стоимость: ' + amount);
  }
  
  if(elements.length){
    draw_info_row(table, 'Элементы:');

    draw_header(table);
    
    var amount = 0;
    elements.forEach(function(current){
      amount += current.count*current.price;
      draw_row(table, current);
    });

    draw_info_row(table, 'Общая стоимость: ' + amount);
  }
}
  
//----------------------------------------------------------------------------//
  
function element_by_name(name){
  var elements = CV.elements;
  
  for(var i = 0; i < elements.length; ++i)
    if(elements[i].name == name)
      return elements[i];

  return null;
}
  
//----------------------------------------------------------------------------//
  
function draw_info_row(parent, str){
  var tr = document.createElement('tr');
  parent.appendChild(tr);
  
  var td = create_bold_td(tr, str);
  td.setAttribute('colspan', '3');
  td.setAttribute('align', 'center');
}
  
//----------------------------------------------------------------------------//
  
function draw_header(parent){
  var tr = document.createElement('tr');
  tr.setAttribute('bgColor', '#DCDCDC');
  parent.appendChild(tr);
  
  var td = document.createElement('td');
  td.textContent = 'Наименование';
  tr.appendChild(td);
  
  td = document.createElement('td');
  td.textContent = 'Кол-во';
  tr.appendChild(td);
  
  td = document.createElement('td');
  td.textContent = 'Стоимость';
  tr.appendChild(td);
}
  
//----------------------------------------------------------------------------//
  
function draw_row(parent, object_){
  var tr = document.createElement('tr');
  parent.appendChild(tr);
  
  var td = document.createElement('td');
  td.textContent = object_.name + ':';
  tr.appendChild(td);
  
  create_bold_td(tr, object_.count);
  create_bold_td(tr, object_.count*object_.price);
}
  
//----------------------------------------------------------------------------//
  
function create_bold_td(parent, str){
  var td = document.createElement('td');
  parent.appendChild(td);
  
  var b = document.createElement('b');
  b.textContent = str;
  td.appendChild(b);
  
  return td;
}

//----------------------------------------------------------------------------//
  
}());  // wrapper end

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