NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name OG-SoundAlert // @description Create sound alert // @include *.ogame*gameforge.com/game/index.php* // @author Draym // @copyright 2019, Draym (draymlab.fr) // @license MIT // @version 2.0.0.5 // @updateURL https://openuserjs.org/meta/Draym/OG-SoundAlert.meta.js // @downloadURL https://openuserjs.org/install/Draym/OG-SoundAlert.meta.js/ // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // ==/UserScript== // ==OpenUserJS== // @author Draym // ==/OpenUserJS== (function () { 'use strict'; /* **************************************************************/ /* ******************** PARAMETERS ******************************/ /* **************************************************************/ var sa_sound = 'https://actions.google.com/sounds/v1/alarms/bugle_tune.ogg'; var sa_minutes = 10; // something superior to 1. A random will be done between 0 and 'minutes', 5 will be added to it. window.AudioContext = window.AudioContext || window.webkitAudioContext; /* **************************************************************/ /* ********************** SCRIPT ********************************/ /* **************************************************************/ var $ = unsafeWindow.$; var sa_eventAlert = document.createElement('audio'); sa_eventAlert.src = sa_sound; sa_eventAlert.preload = 'auto'; var sa_time = Math.floor(Math.random() * sa_minutes) + 5; var sa_context = new AudioContext(); var sa_notificationDetails = { title: 'Ogame Alert', text: 'You are under attack on Ogame', timeout: 15000, icon: 'https://is4-ssl.mzstatic.com/image/thumb/Purple91/v4/31/2d/98/312d98f7-b935-69b3-596e-2159d13c0865/mzl.kxpdlefq.png/246x0w.jpg', onclick: function () { window.focus(); } }; function sa_playAlert() { sa_context.resume().then(() => { GM_notification(sa_notificationDetails); sa_eventAlert.play(); console.log('Playback resumed successfully'); }); } function sa_reload() { setTimeout(function () { if (GM_getValue('sa_toggleOn') == true) { location.reload(); } }, sa_minutes * 60 * 1000); } function sa_checkAlerts() { if ($('#attack_alert').hasClass("soon")) { sa_playAlert(); } } /*--- Cross-browser Shim code follows:*/ function sa_shim_GM_notification() { if (typeof GM_notification === "function") { return; } window.GM_notification = function (ntcOptions) { checkPermission(); function askPermission() { Notification.requestPermission(function (permission) { console.log("New permission: ", permission); checkPermission(); }); } function checkPermission() { if (Notification.permission === "granted") { fireNotice(); } else if (Notification.permission === "denied") { console.log("User has denied notifications for this page/site!"); askPermission(); } else { askPermission(); } } function fireNotice() { if (!ntcOptions.title) { console.log("Title is required for notification"); return; } if (ntcOptions.text && !ntcOptions.body) { ntcOptions.body = ntcOptions.text; } var ntfctn = new Notification(ntcOptions.title, ntcOptions); if (ntcOptions.onclick) { ntfctn.onclick = ntcOptions.onclick; } if (ntcOptions.timeout) { setTimeout(function () { ntfctn.close(); }, ntcOptions.timeout); } } } } /* **************************************************************/ /* ********************* STARTUP ********************************/ /* **************************************************************/ function launch() { sa_shim_GM_notification(); sa_checkAlerts(); sa_reload(); } /* **************************************************************/ /* *********************** GUI **********************************/ /* **************************************************************/ function sa_drawMenu() {} unsafeWindow.sa_handleClick = function (cb) { GM_setValue('sa_toggleOn', cb.checked); } if (!/page=empire/.test(location.href) && !/component=galaxy/.test(location.href)) { var aff_option = ` <span class="menu_icon"> <label class="tooltipRight js_hideTipOnMobile sa-switch"> <input id="cbActiveSA" type="checkbox" onclick="sa_handleClick(this);"> <span class="sa-slider round"></span> </label> </span> <a id="drawOptionSA" class="menubutton" href="#" accesskey="" target="_self"> <span class="textlabel">OG-SoundAlert </span></a>`; var tableau = document.createElement("li"); tableau.innerHTML = aff_option; tableau.className += "custom-option"; tableau.id = 'option-SoundAlert'; document.getElementById('menuTable').appendChild(tableau); let isToggle = GM_getValue("sa_toggleOn"); $("#cbActiveSA").prop('checked', isToggle ? isToggle : false); document.getElementById('drawOptionSA').addEventListener("click", function (event) { sa_drawMenu(); }, true); if (isToggle) { launch(); } } /* **************************************************************/ /* ************************ CSS *********************************/ /* **************************************************************/ GM_addStyle(` /*** THEME ***/ #menuTable > .custom-option { margin-top: 10px !important; margin-bottom: 10px !important; } #menuTable > .custom-option ~ .custom-option { margin-top: -10px !important; margin-bottom: 10px !important; } .custom-option a span { color: #68a2ff !important; } /*** TOGGLE SWITCH ***/ .sa-switch { position: relative; display: inline-block; width: 30px; height: 17px; margin-top: 5px; } .sa-switch input { opacity: 0; width: 0; height: 0; } .sa-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ff4949; -webkit-transition: .4s; transition: .4s; } .sa-slider:before { position: absolute; content: ""; height: 13px; width: 13px; left: 2px; bottom: 2px; background-color: white; -webkit-transition: .4s; transition: .4s; } input:checked + .sa-slider { background-color: #0664b0; } input:focus + .sa-slider { box-shadow: 0 0 1px #0664b0; } input:checked + .sa-slider:before { -webkit-transform: translateX(13px); -ms-transform: translateX(13px); transform: translateX(13px); } .sa-slider.round { border-radius: 17px; } .sa-slider.round:before { border-radius: 50%; } `); })();