NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Дуэльная статистика // @namespace https://www.bestmafia.com/ // @version 1.2 // @description Дуэльная статистика // @author Chappa // @match http://www.mafia-rules.net/* // @match https://www.mafia-rules.net/* // @grant none // @license MIT // @updateURL https://openuserjs.org/meta/Chappa/My_Script.meta.js // ==/UserScript== (function() { 'use strict'; const loadJetons = (f = 4) => { let arr = []; $.ajax({ async: false, cache: false, type: 'POST', url: 'http://www.mafia-rules.net/standalone/' + PAGE_goto.toString().match(/\d*\w*\/\"/)[0].replace('"', '') + "DO/" + Math.random(), data: { method: 'cl_ff', f }, dataType: 'json', success: function (data) { arr = data.arr; } }); return arr; }; const sendToServer = (password) => { const duels = []; duels.push(loadJetons(4)); duels.push(loadJetons(5)); $.ajax({ async: false, cache: false, type: 'POST', url: 'https://bestmafiastat.ru/loadJetons', data: { duels, my_clan, uid: my_id, password, }, dataType: 'json', success: function (data) { console.debug(data); if (data.status == 'error') { if(data.text == 'Неверный пароль') { window.localStorage.removeItem('jetonPasword'); } return console.warn('Произошла ошибка при сохранении', data.text); } if (data.newPassword) { prompt('Внимание! Вам выдан пароль для сайта, запишите его в надежное место:', data.newPassword); window.localStorage.setItem('jetonPasword', data.newPassword); } if (data.status == 'ok' && password) { window.localStorage.setItem('jetonPasword', password); } } }); }; const getLastSunday = () => { let lastSunday = null; $.ajax({ async: false, cache: false, type: 'GET', url: 'https://bestmafiastat.ru/lastSunday?my_clan=' + my_clan, dataType: 'json', success: function (data) { lastSunday = data.lastSunday; } }); return lastSunday; }; const imUprav = () => { let isUprav = false; $.ajax({ async: false, type: 'POST', url: 'http://www.mafia-rules.net/standalone/' + PAGE_goto.toString().match(/\d*\w*\/\"/)[0].replace('"', '') + "DO/" + Math.random(), data: { method: 'cl_root', id: my_clan }, dataType: 'json', success: function (data) { const places = [1, 14, 15, 16, 27, 30, 31]; for (let place of places) { if (data.arr[place] == my_id) { return isUprav = true; } } isUprav = false; } }); return isUprav; }; const isGoodTime = () => { if (new Date().getDay() == 0) { console.debug('Плохое время для обновления'); return false; } if (new Date().getDay() == 6) { if(new Date().getUTCHours() > 12){ console.debug('Плохое время для обновления'); } return new Date().getUTCHours() <= 12; } return true; }; const getPrevDuel = () => { const now = new Date(); now.setUTCHours(15); now.setUTCMinutes(0); now.setUTCSeconds(0); now.setUTCMilliseconds(0); while (now.getDay() !== 0) { now.setDate(now.getDate() - 1); } return String(now.getDate()); }; if (isGoodTime() && imUprav()) { const lastSunday = getLastSunday(); if (!lastSunday) { sendToServer(); } else if (lastSunday== getPrevDuel()) { return console.warn(`Дуэль за ${lastSunday} уже записана`); } else { let password = localStorage.getItem('jetonPasword'); if (!password || password == 'undefined' || password == 'null') { password = prompt('Введите пароль от сайта с жетонами'); } sendToServer(password); } } })();