您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Скрипт для таверны, автоматически отклоняет людей что в черном списке / принимает игру либо воспроизводит оповещения об вступлении в заявку.
// ==UserScript== // @name HWM_Tavern_AutoAccept_BlackList_Notification // @author emptimd // @namespace emptimd // @description Скрипт для таверны, автоматически отклоняет людей что в черном списке / принимает игру либо воспроизводит оповещения об вступлении в заявку. // @include /https?:\/\/(www.heroeswm.ru|178.248.235.15|www.lordswm.com)\/(tavern.php)/ // @version 2.0 // @grant none // ==/UserScript== /* Variables */ // nicknames that the script will auto deny. To add a new nickname, place it inside quotes. '', const blackList = []; const autoAccept = 0; // 1 if should auto accept new games from players. const soundAlert = 0; // 1 if should make a sound alert when some player made a request/script accepted request. const maxTavernBallance = 500000; // if player has a bigger tavern balance then he will be skipped /* Code */ // sound alarm function beep(vol, freq, duration) { var a=new AudioContext(); var v=a.createOscillator() var u=a.createGain() v.connect(u) v.frequency.value=freq v.type="square" u.connect(a.destination) u.gain.value=vol*0.01 v.start(a.currentTime) v.stop(a.currentTime+duration*0.001) } function make_alarm() { if(document.visibilityState === 'hidden') { beep(3, 300, 300);//first number stands for sound volume } } let a = document.querySelector('a[href^="acard_game.php"]'); if(!a) { delete localStorage['tavernRequestHtml']; throw new Error(); } // check nickname let nickname = a.previousSibling.previousSibling.childNodes[0].text; if(blackList.includes(nickname)) { // deny window.open(a.nextElementSibling.href,'_self'); }else { //auto accept. if (autoAccept) window.open(a.href,'_self'); else get_table(); } function get_table() { // get html from localstorage if (localStorage['tavernRequestHtml']) return show_tables(localStorage['tavernRequestHtml']); // or make an ajax call to player profile to get html taver balance var href = a.previousSibling.previousSibling.childNodes[0].href; var xhr = new XMLHttpRequest(); xhr.open("GET", href, true); xhr.overrideMimeType('text/html; charset=windows-1251'); xhr.send(); xhr.onreadystatechange = function() { process_xhr(xhr); } } function process_xhr(xhr) { if (xhr.readyState != 4) return; if (xhr.status == 200) { var _perk_ = "<"; var text = xhr.responseText.split('table'); for(var i=1; i<text.length; i++){ if(text[i].indexOf(' Всего игр:') > -1){ _perk_ += "table" + text[i] + "table" + text[i+1] + "table" + text[i+2] + "table" + text[i+3]; } } _perk_ += "table>"; show_tables(_perk_); } } function show_tables(html) { var elements = htmlToElements(html); var docFragment = elementsToDocFragment(elements); //a.parentElement.parentElement.appendChild(docFragment); //make parent table relative a.parentElement.parentElement.parentElement.parentElement.style.position = 'relative'; var element = a.parentElement.parentElement; element.parentNode.insertBefore(docFragment, element.nextSibling); element.nextElementSibling.style.backgroundColor = '#fff'; element.nextElementSibling.style.position = 'absolute'; element.nextElementSibling.style.top = '18px'; element.nextElementSibling.style.left = '270px'; var balance = getBalance(element.nextElementSibling.firstChild.childNodes); balance = parseInt(balance.replace(/,/g, ""), 10); // if big balance then skip if (balance > maxTavernBallance) window.open(a.nextElementSibling.href,'_self'); //sound alert. if (soundAlert) make_alarm(); // finnaly add html to localStorage to prevent multiple ajax requests. if (!localStorage['tavernRequestHtml']) localStorage['tavernRequestHtml'] = html; } /*Helpers*/ function htmlToElements(html) { var template = document.createElement('template'); template.innerHTML = html; return template.content.childNodes; } function elementsToDocFragment(elements) { var docFrag = document.createDocumentFragment(); for(var i = 0; i < elements.length; i++) { docFrag.appendChild(elements[i]); // Note that this does NOT go to the DOM } return docFrag; } function getBalance(tavern_parent) { var text_bal = ' Баланс:'; tavern_parent[0].childNodes[0].setAttribute('style', 'white-space: nowrap;'); tavern_parent[1].childNodes[1].setAttribute('style', 'white-space: nowrap;'); tavern_parent[2].childNodes[1].setAttribute('style', 'white-space: nowrap;'); var tavern_0bal = tavern_parent[1].querySelector("tr"); var tavern_1bal = tavern_parent[2].querySelector("tr"); if ( !tavern_0bal && !tavern_1bal ) return; if ( tavern_0bal ) { tavern_0bal.childNodes[1].setAttribute('style', 'text-align: right; padding-right: 5px;'); tavern_0bal = tavern_0bal.childNodes[1].innerHTML.replace(/,/g, ""); tavern_parent[1].childNodes[3].firstChild.width = "100%"; add_el = tavern_parent[1].cloneNode(true); } else { tavern_0bal = 0; } if ( tavern_1bal ) { tavern_1bal.childNodes[1].setAttribute('style', 'text-align: right; padding-right: 5px;'); tavern_1bal = tavern_1bal.childNodes[1].innerHTML.replace(/,/g, ""); tavern_parent[2].childNodes[3].firstChild.width = "100%"; add_el = tavern_parent[2].cloneNode(true); } else { tavern_1bal = 0; } var tavern_bal = digit(tavern_0bal - tavern_1bal); add_el.firstChild.innerHTML = text_bal; add_el.childNodes[1].innerHTML = ""; add_el.childNodes[2].innerHTML = " "; add_el.childNodes[3].innerHTML = '<table border="0" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td><img width="24" height="24" src="https://dcdn3.heroeswm.ru/i/gold.gif" border="0" title="Золото" alt=""></td><td style="text-align: right; padding-right: 5px;">454,000</td></tr></tbody></table>'; add_el.querySelector("tr").childNodes[1].innerHTML = tavern_bal; tavern_parent[2].parentNode.insertBefore(add_el, tavern_parent[2].nextSibling); return tavern_bal; } function digit(value) { return value.toString().replace(/(?=\B(?:\d{3})+(?!\d))/g, ','); }