// ==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(''); if (items[i].cc) { t.a(''); } else t.a('') t.a(''); t.a(''); t.a(''); t.a(''); t.a(''); } t.a('
').a(items[i].name).a('').a(items[i].cnt).a('') .a(items[i].q) .a('') .a(items[i].q) .a('').a((items[i].l) ? items[i].l + '+' + items[i].r : '').a('').a(items[i].inv).a('%').a(items[i].dur).a('').a(items[i].prs).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); }; })();