// ==UserScript==
// @name market-palemoon
// @namespace dozory
// @include http://game.dozory.ru/ajax.html*
// @version 1.10
// @grant none
// @run-at document-start
// ==/UserScript==
(function () {
String.Buffer = function Buffer(str) {
var i = 0,
b = [str || ''];
function _s(sp) {
return b.join(sp || '');
};
function _a() {
for (var k = 0, f = arguments.length; k < f; k++) b[++i] = arguments[k];
return this;
};
this.append = this.a = _a;
this.valueOf = this.toString = this.s = _s;
};
window.sm_createWindow = function () {
var jq = window.jQuery;
jq('head').append(
'\n'
);
jq('body').append(
'\
\
\
\
|
\
\
' +
// зона кнопок
'\
\
\
\
|
\
\
|
\
'
);
var hdtSM = jq('#dtSM');
var vsm = jq('#vSM');
var bottom = jq('.bottom:last', vsm);
var drag = false;
bottom.mousedown(
function (e) {
drag = true;
var dy = e.pageY - hdtSM.height();
jq(document).mousemove( // при перемещении мыши
function (a) {
hdtSM.css({
height: Math.max(200, a.pageY - dy) + 'px'
}); // расширяем блок
a.target.ownerDocument.defaultView.getSelection().removeAllRanges(); // снимаем выделение текста
return false;
});
vsm.fadeTo(400, 0.86);
});
jq(document).mouseup(function () { // когда мышь отпущена
jq(document).unbind('mousemove'); // убираем событие при перемещении мыши
if (drag) {
vsm.fadeTo(400, 1.0);
}
drag = false;
});
window.sm_window = vsm;
window.sm_review = function () {
window.isSearching = true;
var tz = jq.ajax({
url: "/cgi-bin/window.cgi?wblocks_params=street_market_body%3Droom%253Dbuy_room&blocks=street_market_body&blocks=chat&cwindow=street_market",
async: false
}).responseText;
jq('#dtSM').html('Обходим палатки:
');
// выдираем палатки из ответа сервера в массив
var rex_booths = /booth_id="(\d+)"\s?name="(.*?)"/ig;
var booths = [];
while (m = rex_booths.exec(tz)) booths.push({
id: m[1],
name: m[2]
});
// обходим палатки по массиву
var items = [],
p, t, request_count = booths.length,
rex_items = /item (.*?)\<\/item\>/ig;
for (var key = 0; key < booths.length; key++) {
p = jq('' + booths[key].name + '
').insertAfter('#SM_walk');
jq.ajax({
url: '/cgi-bin/window.cgi?blocks=street_market_body&wblocks_params=street_market_body%3Dbooth_id%253D' +
booths[key].id +
'%2526room%253Dbuy_room&cwindow=street_market&dozory-ir',
cache: false,
dataType: 'text',
key: key,
p: p,
error: function () {
console.log("market-palemoon: Can't load request...")
},
success: function (data, status) {
while (m = rex_items.exec(data)) {
var itm = {};
itm.oid = booths[this.key].id;
itm.onm = booths[this.key].name;
itm.cnt = /cnt="(\d+)"/.exec(m[1])[1];
itm.prs = /price="(\d+|\d+\.\d+)"/.exec(m[1])[1];
itm.id = /id="(.*?)"/.exec(m[1])[1];
itm.icon = /icon\>(.*?)\<\/icon/.exec(m[1])[1];
itm.name = /[^_]name\>(.*?)\<\/name/.exec(m[1])[1];
itm.q = /quality_rest\>(.*?)\<\/quality_rest/.exec(m[1])[1];
itm.inv = /hide_pct\>(.*?)\<\/hide_pct/.exec(m[1])[1];
itm.dur = /crits_rest\>(.*?)\<\/crits_rest/.exec(m[1])[1];
if (tp = /use_rest\>(.*?)\<\/use_rest/.exec(m[1])) {
itm.l = tp[1];
itm.r = 0;
}
if (tp = /charges_rest\>(.*?)\<\/charges_rest/.exec(m[1])) {
itm.l = /charges_rest\>(.*?)\<\/charges_rest/.exec(m[1])[1];
itm.r = /loads_rest\>(.*?)\<\/loads_rest/.exec(m[1])[1];
}
if (tp = /creator\>(.*?)\<\/creator/.exec(m[1])) // параметры варки
{
itm.cf = tp[1];
itm.cc = /конц\..*?(\d+)/.exec(tp[1])[1];
itm.cv = /воспр\..*?(\d+)/.exec(tp[1])[1];
itm.cl = /уд\..*?(\d+)/.exec(tp[1])[1];
itm.ci = /инк\..*?(\d+)/.exec(tp[1])[1];
itm.ck = /кум\..*?(\d+)/.exec(tp[1])[1];
itm.cm = /мод\..*?(\d+)/.exec(tp[1])[1];
} else delete itm.cc;
items.push(itm);
}
jq(this.p).css('color', 'black');
},
complete: function () {
if (--request_count) return; // не все запросы отработаны
// сортируем список
items.sort(
function (i1, i2) {
var x = i1.name.replace(/(^\s+| \(.*?\)|\s+$)/g, "").toLowerCase();
var y = i2.name.replace(/(^\s+| \(.*?\)|\s+$)/g, "").toLowerCase();
if (x == y) {
x = Number(i1.prs);
y = Number(i2.prs);
}
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
);
// формируем таблицу вывода
var lt = "",
cl = String.fromCharCode(0),
t = new String.Buffer(),
n = new String.Buffer();
t.a('')
.a('');
for (i = 0; i < items.length; i++) {
// буквы навигатора
var c = items[i].name.charAt(0).toLowerCase();
if (c != cl) {
lt = c + lt;
cl = c;
}
t.a('')
.a('').a(items[i].name).a(' | ')
.a('').a(items[i].cnt).a(' | ');
if (items[i].cc) {
t.a('')
.a(items[i].q)
.a(' | ');
} else
t.a('')
.a(items[i].q)
.a(' | ')
t.a('').a((items[i].l) ? items[i].l + '+' + items[i].r : '').a(' | ');
t.a('').a(items[i].inv).a('% | ');
t.a('').a(items[i].dur).a(' | ');
t.a('').a(items[i].prs).a(' | ');
t.a('
');
}
t.a('
');
// создаем навигатор
n.a('ВСЕ');
for (i = lt.length - 1; i >= 0; i--)
n.a('')
.a(lt.charAt(i).toUpperCase())
.a('');
// вывод
var delay = 400;
jq('#dtSM').fadeOut(delay,
function () {
jq('#dtSM').html(t.s(''));
jq('#nvSM').html(n.s(''));
jq("span.nvSMc.active").removeClass("active");
jq("span.nvSMc:first").addClass("active");
}
);
jq('#dtSM').fadeIn(delay,
function () {
jq('#tSM col').each(
function (i, e) {
var o = jq(e);
if (i) o.width(o.width());
} // закрепление колонок
);
}
);
window.isSearching = false;
}
});
}
}
window.sm_filter = function (o, l) {
jq('span.nvSMc.active').removeClass('active');
jq('#tSM_style').html(
typeof (l) == 'undefined' ? '' :
''
);
jq(o).addClass("active");
return false;
}
}
})();
(function () {
var origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function () {
this.addEventListener('load', function () {
if (window.isSearching) return;
var rt = this.responseText,
p1 = rt.indexOf('/.exec(this.responseText);
if (loc != null && loc.length > 1 && loc[1] === 'street_market') {
if (p1 < 0) return;
if (rt.indexOf('', p1) < 0)
window.jQuery('#vSM').hide();
else {
if ('sm_window' in window)
window.sm_window.show();
else
window.sm_createWindow();
}
}
});
origOpen.apply(this, arguments);
};
})();