Стоимость элементов и ресурсов
当前为
// ==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
//----------------------------------------------------------------------------//