// ==UserScript== // @name DC - AutoRefresh Fixed // @author Ladoria, Lorkah(Fix) // @version 0.23 // @grant none // @description Custom auto-refresh, display ping/delay network info overlay. // @match https://www.dreadcast.net/Main // @match https://www.dreadcast.net/Index // @copyright 2015+, Ladoria // @namespace InGame // @downloadURL https://update.greasyfork.icu/scripts/415271/DC%20-%20AutoRefresh%20Fixed.user.js // @updateURL https://update.greasyfork.icu/scripts/415271/DC%20-%20AutoRefresh%20Fixed.meta.js // ==/UserScript== /* Reload or ask to reload window if no successful network activityfor a while Display tiny overlay on left top of window. (Delay between 2 refreshs) Display alert message before reload (Can be deactivated) Always can abort a reload */ // Global var reload_asked = 0; var last_request_completed = Date.now(); var check_delay = 3000; // In ms, x >= 3000. DC's refresh is each ~2950ms. var lag_buster = 10000; // In ms, setted to casual or hard mode. var casual_lag_buster = 10000; // In ms, x >= 2000. Time to activate reconnection routine. Because lag is life, m'k. var hard_lag_buster = 600000; // In ms, x >= 600000 (10min). Time to activate reconnection routine during hard lagging. casual_lag_buster += check_delay; // Basic anti-lag security hard_lag_buster += check_delay; var refresh_time_limit = 120000; // In ms. Time to auto-refresh. (+ lag_buster in script) var script_paused = false; var disconnected = false; var global_clock_interval = undefined; // Cookies var cookie_prefix = "DC_auto_refresh_"; var animation_enabled = true; // Enable delay animation var show_overlay = true; // Show ping overlay var show_overlay_options = true; // Show options overlay var full_auto = false; // Do not ask to reload // Overlay var refresh_interval; var server_date = new Date(); // Hard lagging from 5:00 to 6:00 GTM + 2 var last_request_send = Date.now(); // Last attempt time var first_request_send = Date.now(); // First of failed attempts time var alert_messages = new Array(); alert_messages.ask_to_reload = 'Attention, vous semblez avoir été déconnecté. Rechargement de la page dans   seconde(s)
Annuler
Recharger
'; alert_messages.unconnected = 'Attention, vous semblez toujours déconnecté. 
OK
'; alert_messages.connected = 'Vous semblez avoir été reconnecté.  
OK
'; $(document).ready( function() { $('body').append(''); $("body").append('
Ping :   ms
<
Full auto 
<
Refresh :   s
x
'); function initialize() { if(undefined !== getCookie('global')) { show_overlay = (/overlay_on/gi.test(getCookie('global'))) ? true : false; show_overlay_options = (/overlay_options_on/gi.test(getCookie('global'))) ? true : false; animation_enabled = (/delay_anim_on/gi.test(getCookie('global'))) ? true : false; full_auto = (/full_auto_on/gi.test(getCookie('global'))) ? true : false; } else saveCookie('global',''); if(false === show_overlay) { $('#auto_refresh .overlay .toggle').html('>'); $('#auto_refresh .overlay .ping').hide(); } if(false === animation_enabled) { $('#auto_refresh .animation_enabled .toggle').html('>'); $('#auto_refresh .animation_enabled .full_auto').hide(); } if(false === show_overlay_options) { $('#auto_refresh .overlay_options .toggle').html('>'); $('#auto_refresh .overlay_options .full_auto').hide(); if(false === full_auto) $('#auto_refresh .overlay_options .toggle').css({'borderColor' : 'red'}); else $('#auto_refresh .overlay_options .toggle').css({'borderColor' : 'green'}); } if(true === full_auto) { $('#auto_refresh .overlay_options .full_auto .check_box').css({ 'boxShadow' : 'inset 0px 0px 0px 1px rgba(0, 210, 0,1)', 'backgroundColor' : 'rgba(0,255,0,0.5)'}); } } // Handle alert messages function show_alert(message) { // Automatic mode, no alert if (true === full_auto) { hide_alert(); return; } $('#auto_refresh .alert').html(alert_messages[message]); // Yes/No alert if('ask_to_reload' == message) { // User want to abort, then notify user and pause script $('#auto_refresh .alert .abort').on('click', function() { abort_reload(); show_alert('unconnected'); }); // Do reload $('#auto_refresh .alert .reload').on('click', function() { do_reload(); }); // Refresh reload countdown refresh_reload_alert(true); } else if ('connected' == message || 'unconnected' == message) { // hide alert $('#auto_refresh .alert .hide').on('click', function() { hide_alert(); }); } $('#auto_refresh .alert_container').show(); } function hide_alert() { $('#auto_refresh .alert_container').hide(); } // Stop refresh countdown function abort_reload() { clearInterval(refresh_interval); reload_asked = 0; script_paused = true; // last_request_completed = Date.now(); } // Reload window function do_reload() { // Useless, but lovely script_paused = true; // Click method to avoid form issues window.location.href = 'http://www.dreadcast.net/Main'; } // Handle reload events function handle_reload() { if(true === script_paused) return; // If no network activity for a while, reload. if (Date.now() - last_request_completed >= lag_buster) { // Delay to refresh if(0 === reload_asked) { reload_asked = Date.now(); refresh_reload_auto(); } // If yes/no alert hidden, show it (fired every seconds in full auto mode) if (true === full_auto) { hide_alert(); } else if (false === $('#auto_refresh .alert .abort').is(':Visible')) show_alert('ask_to_reload'); // If full auto mode, disabled function // If waiting asked and done, reload if (0 !== reload_asked) if (Date.now() - reload_asked >= refresh_time_limit) { do_reload(); } } } // Refresh reload countdown function refresh_reload_alert(forced) { if (true === forced || true === $('#auto_refresh .alert .seconds').is(':Visible')) { $('#auto_refresh .alert .seconds').html(Math.round((refresh_time_limit - (Date.now() - reload_asked)) / 1000)); } } // Overlay // Display refreshed ping function refresh_ping(request_send, request) { // If connected, refresh values if (false === disconnected) first_request_send = request_send; else { request = Date.now(); // If disconnected, keep stored data. request_send = first_request_send; } var ping = ((request - request_send) < 0) // During requesting new Check ? ping : request - request_send; if (false === show_overlay) { if (ping > (check_delay * 2)) $('#auto_refresh .overlay .toggle').css({'borderColor' : 'red'}); return; } // Time background-color cheat. if (ping > (check_delay * 2)) { $('#auto_refresh .overlay .refresh_delay').css( {'borderColor' : 'red'}); $('#auto_refresh .overlay .actual_time').css( {'width' : '0px'}, {'backgroundColor' : 'rgba(255, 0, 0, 0.2)'}); $('#auto_refresh .overlay .refresh_delay .data').html('Délai'); } if (true === disconnected) { ping = Math.round(ping / 100) / 10; $('#auto_refresh .overlay .refresh_delay .unit').html('s'); } else $('#auto_refresh .overlay .refresh_delay .unit').html('ms'); $('#auto_refresh .overlay .ping .seconds').html(ping); } // Display refreshed delay animation function refresh_delay(request, animation_start) { var animation_progression = 0; if (undefined === animation_start) animation_start = 0; else { // Percent of animation completion animation_progression = (request + check_delay - animation_start); animation_progression = 1 - (animation_progression / check_delay); } // Stop animation, then set to new width $('#auto_refresh .overlay .actual_time').stop(); // Overlay hide, do not animate if(false === show_overlay) { $('#auto_refresh .overlay .toggle').css({'borderColor' : 'green'}); return; } $('#auto_refresh .overlay .toggle').css({'borderColor' : 'gray'}); $('#auto_refresh .overlay .refresh_delay').css( {'borderColor' : 'green'}); $('#auto_refresh .overlay .actual_time').css( {'width' : (animation_progression * $('#auto_refresh .overlay .refresh_delay').width()) + 'px'}, {'backgroundColor' : 'rgba(0, 255, 0, 0.2)'}); $('#auto_refresh .overlay .refresh_delay .data').html('Ping'); if (false === animation_enabled) return; // Moving width to 100% at correct speed $('#auto_refresh .overlay .actual_time').animate( {width : $('#auto_refresh .overlay .refresh_delay').width()} , check_delay - (check_delay * animation_progression)); } function refresh_reload_auto() { if (0 === reload_asked || true !== full_auto) { $('#auto_refresh .overlay_options .reload_auto').hide(); $('#auto_refresh .overlay_options .abort_reload_auto').hide(); return; } $('#auto_refresh .overlay_options .reload_auto').show(); $('#auto_refresh .overlay_options .abort_reload_auto').show(); $('#auto_refresh .overlay_options .reload_auto .seconds').html(Math.round((refresh_time_limit - (Date.now() - reload_asked)) / 1000)); } // Toggle delay animation $('#auto_refresh .overlay .ping').on('click', function() { animation_enabled = !animation_enabled; refresh_delay(last_request_completed, Date.now()); // Remove old value and put new value saveCookie( 'global', getCookie('global').replace(/(delay_anim_on|delay_anim_off)/gi, '') + ((true === animation_enabled) ? 'delay_anim_on' : 'delay_anim_off')); }); // Toggle full auto mode $('#auto_refresh .overlay_options .full_auto').on('click', function() { full_auto = !full_auto; if(true === full_auto) { $('#auto_refresh .overlay_options .full_auto .check_box').css({ 'boxShadow' : 'inset 0px 0px 0px 1px rgba(0, 210, 0,1)', 'backgroundColor' : 'rgba(0,255,0,0.5)'}); } else { $('#auto_refresh .overlay_options .full_auto .check_box').css({ 'boxShadow' : 'inset 0px 0px 0px 1px red', 'backgroundColor' : 'rgba(255,0,0,0.5)'}); } script_paused = false; // Remove old value and put new value saveCookie( 'global', getCookie('global').replace(/(full_auto_on|full_auto_off)/gi, '') + ((true === full_auto) ? 'full_auto_on' : 'full_auto_off')); }); // Toggle overlay $('#auto_refresh .overlay .toggle').on('click', function() { $('#auto_refresh .overlay .ping').toggle(); show_overlay = !show_overlay; if (true === show_overlay) { $('#auto_refresh .overlay .toggle').html('<'); $('#auto_refresh .overlay .toggle').css({'borderColor' : 'gray'}); } else { $('#auto_refresh .overlay .toggle').html('>'); $('#auto_refresh .overlay .toggle').css({'borderColor' : $('#auto_refresh .overlay .refresh_delay').css('borderColor')}); } if(true === animation_enabled) refresh_delay(last_request_completed, Date.now()); refresh_ping(last_request_send, last_request_completed); // Remove old value and put new value saveCookie( 'global', getCookie('global').replace(/(overlay_on|overlay_off)/gi, '') + ((true === show_overlay) ? 'overlay_on' : 'overlay_off')); }); // Toggle overlay options $('#auto_refresh .overlay_options .toggle').on('click', function() { $('#auto_refresh .overlay_options .full_auto').toggle(); // full auto option show_overlay_options = !show_overlay_options; if (true === show_overlay_options) { $('#auto_refresh .overlay_options .toggle').css({'borderColor' : 'gray'}); $('#auto_refresh .overlay_options .toggle').html('<'); } else { if (true === full_auto) $('#auto_refresh .overlay_options .toggle').css({'borderColor' : 'green'}); else $('#auto_refresh .overlay_options .toggle').css({'borderColor' : 'red'}); $('#auto_refresh .overlay_options .toggle').html('>'); } // Remove old value and put new value saveCookie( 'global', getCookie('global').replace(/(overlay_options_on|overlay_options_off)/gi, '') + ((true === show_overlay_options) ? 'overlay_options_on' : 'overlay_options_off')); }); $('#auto_refresh .overlay_options .abort_reload_auto').on('click', function() { abort_reload(); refresh_reload_auto(); }); // Global clock function start_global_clock() { if(undefined !== global_clock_interval) clearInterval(global_clock_interval); global_clock_interval = setInterval(function() { // In case of hard lagging (5:00 -> 5:59) lag_buster = (5 == server_date.getHours()) ? hard_lag_buster : casual_lag_buster; // Alert reload time refresh refresh_reload_alert(); // Ping refresh refresh_ping(last_request_send, last_request_completed); // Reload auto refresh refresh_reload_auto(); // Countdown to window reload handle_reload(); }, 1000); } // Script start initialize(); start_global_clock(); // Update last request send time $(document).ajaxSend( function(a,b,c) { if(/Check/.test(c.url)) { last_request_send = Date.now(); } }); // Update last request time $(document).ajaxComplete( function(a,b,c) { if(/Check/.test(c.url)) { // Refresh server date server_date = new Date(b.getResponseHeader('Date')); // If request succeeded if(b.readyState === 4) { // If reconnected again connexion, resume script and notify if($('#auto_refresh .alert').is(':Visible') || true === disconnected) { show_alert('connected'); // Stop reload abort_reload(); } // Resume script script_paused = false; disconnected = false; last_request_completed = Date.now(); // Display new data (better sync) refresh_delay(last_request_completed); refresh_reload_auto(); } else disconnected = true; // Display new data (better sync) refresh_ping(last_request_send, last_request_completed); } }); }); // handle cookies function saveCookie(name,val) { name = cookie_prefix + name; if(!navigator.cookieEnabled) return; document.cookie = name + '=' + val + ';expires=Wed, 01 Jan 2020 00:00:00 GMT; path=/'; } function getCookie(var_name) { name = cookie_prefix + var_name; if(!navigator.cookieEnabled) return undefined; var start = document.cookie.indexOf(name + '=') if(start == -1) return undefined; start += name.length + 1; var end = document.cookie.indexOf(';',start); if (end == -1) end = document.cookie.lenght; return document.cookie.substring(start,end); }; console.log('DC - Auto Refresh started');