您需要先安装一个扩展,例如 篡改猴、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, ',');
- }