sequences: { }, timeshiftOnClick(); Next time it won't load that element until you press reset. r: r, if ( typeof metaSingular.category != 'undefined' && usedHeadings.indexOf( metaSingular.category ) == -1 ) { partial: [{r:2,d:30}], $.each(uitext.checkboxes, function(k,v) { } function timeWithinWindow(schedule) { if (twelveHourTimes == false) { #event-container > .ui-sortable-placeholder { defaultvalue: true s: wf, segments: { 50 // Utility function #1: Write CSS return // For positive timezones, add a plus sign before the hour offset. } right: 0; 9: { name: "Svanir Shaman Chief", link: "Kill the Svanir shaman chief to break his control over the ice elemental", chatlink: "[&BMIDAAA=]", bg: [138,234,244] }, }, #event-wrapper.compact h4 span { white-space: nowrap; } date.setUTCHours(hour, minute, 0, 0); ); name: "", // Check end of segment is before window end, if not, crop it cl: ' future' .ui-sortable-handle { // Allow user to shuffle forwards and backwards by clicking on the gray markers 1: { name: "Day: Securing Verdant Brink", link: "Securing Verdant Brink", bg: [231,251,132] }, name: "Grothmar Valley", $('#event-wrapper').addClass('toptimes'); with energy from the ley-line energy collectors. name: "Hide chat links. pattern: [{r:1,d:40},{r:2,d:20}] }, 4: { name: "Golem Mark II", link: "Defeat the Inquest's golem Mark II", chatlink: "[&BNQCAAA=]", bg: [ 66,200,215] }, sequences: { localStorage.removeItem('event-timer-' + k); // Refine the data to restrict lengths to visible window sequences: { setTimeout(function() { defer(method) }, 40); s: v.s, return $(document.createElement("a")).attr("href", "/wiki/" + pageName).attr("title", pageName.replace(/_/g, " ")).text(text); // Distance in percent of the 135 minute window (2 hour + 15 mins) timeString = $(document.createElement("span")).attr("title", uitext.timezonehover + " (UTC" + (timezoneOffset < 0 ? .append($(document.createElement("span")) // Check if otherHour specified background-color: #EEE; padding: 2px 6px; if ( ws > s ) { segments: { }, $('.event-bar-exit').click(function() { // Update current object "PM" : "AM")); 1: { name: "Buried Treasure", link: "The Search for Buried Treasure", chatlink: "[&BGsKAAA=]", bg: [234,175, 98] } It is highly recommended to find a Hero Point/Mastery Point train running in this zone which will allow opening of various waypoints in the process of obtaining Hero Points and Mastery Points. 7: { name: "Modniir Ulgoth", link: "Defeat Ulgoth the Modniir and his minions", chatlink: "[&BLAAAAA=]", bg: [ 66,200,215] }, if (useTwelveHour == true) { #event-wrapper.toptimes .event-bar-container.t .event-bar-exit { display: none; } color: #AAA; currentStartHourUTC = Math.floor(hour / 2) * 2; 1: { name: "Maws of Torment", chatlink: "[&BKMKAAA=]", bg: [215,150, 66] }, }, }); // Utility function #9: Refine the schedule from 1515 to 135 minutes. /* Hide chat links */ white-space: nowrap; border-left: 1px solid black; function createEventBars(useEvenHourStart, metaSequence, otherHourOffset) { } } if (window.jQuery) { // Create a segment to represent that phase, and set the width based on the duration #event-wrapper.compact.hideheadings { width: unset; } d: e - s, method(); name: "Use 12-hour times. Escort Nokta into the Great Tree as he looks for potential pets, Kill the champion bat so Nokta can return his pets to camp, Help the hungry batling find grubs to eat, Join Elizia Skysight as she takes the fight to the chak in their nearby hive. Bring a sword." Only visible with the "Compact view" checkbox ticked. } category: "Special Events", segments: { // User interface buttons, labels, checkboxes name: "The Desolation", r = 2; // Special case: Dragon's Stand future sequences: { 2: { name: "Skimmer Race", link: "Skimmer Slalom: Reach the finish line! '0' : '') + s; timeString = pad(hour) + ':' + pad(minute); mainEventTimer(true, true); } return (s < 10 ? // Display category if not used before d: e - s, with energy from the ley-line energy collectors, Use ley energy to power the golem's shields so Zildi can reach the console room, Protect Zildi while she hacks the defense matrix. margin-left: 10px; segments: { } else { segments: { partial: [], function movePointer(useEvenHourStart, metaSequence) { if (reloaded || paused) { checkboxes: { } } function defer(method) { s: s, Reset your preferences below to show it again. }); var w = $('#mw-content-text')[0].offsetWidth; var useCompact = getEventTimerPreferences('compact', uitext.checkboxes.compact.defaultvalue); var excludeSequence = ['db', 'lc', 'ha']; .event-pointer-time { Stop the haywire golems from tearing up the place! 1: { name: "Triple Trouble", link: "Triple Trouble", chatlink: "[&BKoBAAA=]", bg: [ 66,200,215] }, s: s, // Start minutes, e.g. } // Utility function #10: Draw meta event "phases" as segments within map "bars" for each meta. // Utility function #12: Move the pointer to a new horizontal location based on the current time. partial: [{r:0,d:60},{r:1,d:15},{r:2,d:15}], border-width: 1px 1px 1px 0px; 0: { name: "", bg: [251,199,132] }, // Restrict it to +23 hours } Additionally, it is very helpful to gain the Mastery of Nuhoch Wallows (tier 2 of the Nuhoch Lore mastery track) - each of the lower tunnels has a Nuhoch Wallow providing access to the camps, and vice-versa. ", chatlink: "[&BBwHAAA=]", bg: [ 66,200,215] }, setEventTimerPreferences('sequence',currentPref,defaultSequence); $.each(eventData, function(k, v) { metaSingular.name + "\r" : "") + time.raw + (name == "" ? "" segments: { }, console.log('localStorage not supported (HTML5 browser required)'); } else { Most Strikes prior to Shadowkeep have a unique reward which can be obtained only by completing their Nightfall versions. 1: { name: "Wayfarer Foothills", link: "Dragon Bash Hologram Stampede! } else { category: "The Icebrood Saga", } .event-bar { la: { return output; $.each(roughSchedule, function(i,v) { } right: 0; Along the southern edge of the map in the center is the Ley-Line Confluence Waypoint - visible on this jpeg map of Floor 0. #event-wrapper.compact h3 { margin-left: -220px; margin-top: 0.5em; margin-bottom: 0.5em; } wb1 // Collect parameter options if specified if (timezoneOffset === 0) { // Filter the data down from 24 hours to roughly 2 hours. background-color: #EED; if ( typeof metaSingular.link != 'undefined' ) { }, hideheadings: { console.log('localStorage not supported (HTML5 browser required)'); link: "World boss", }, display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */ var zoneParameter = 'td'; background: #AAA; pattern: [{r:0,d:20},{r:1,d:30},{r:0,d:30},{r:2,d:10},{r:0,d:20},{r:3,d:10}] $.each(uitext.checkboxes, function(k,v) { function fitTimerToWindowWidth() { console.log('Deleted element. segments: { console.log('Invalid preference ignored:', value); // Utility function #5: Convert a time given in minutes since 00:00 into a recognizable time. // ** Sheet 2 - Event colour scheme ** return x; // Check if its gone beyond midnight partial: [{r:1,d:25},{r:2,d:5},{r:3,d:20}], }, setEventTimerPreferences('sequence',eventAbbrs,defaultSequence); color: white; pattern: [{r:0,d:75},{r:1,d:25},{r:2,d:20}] startHourUTC = now.getUTCHours(); timeshiftprevhover: "Click to move to the previous two hours", #event-wrapper.zone .event-bar-exit { display: none; } timeshiftresume: "Live update paused - click here to resume", $('#event-wrapper').addClass('zone'); 2: { name: "Forged with Fire", chatlink: "[&BO0KAAA=]", bg: [215,150, 66] } z-index: 1; } e: e, font-family: "EasonPro","Times New Roman",serif !important; catch (e) { }, name: "PvP Tournaments", var output = document.createElement('span'); if ( metaSequence.indexOf(k) == -1 ) { var currentPref = getEventTimerPreferences('sequence',defaultSequence); // All event bars and segments need to be created with the same start time ", } When the flower's powers are transferred to the hair of Rapunzel, Gothel kidnapped the princess and locked her away in a secluded tower, where she hoarded Rapunzel's healing magic. var r = v.r, s = v.s, e = v.e; // Utility function #14: Refit compact timer to window width on resize. $('.event-pointer span').text((((now.getHours() + 11) % 12) + 1) + ':' + pad(now.getMinutes()) + ' ' + (now.getHours() >= 12 ? barcontainer.append(bar); 0: { name: "", bg: [242,215,162] }, } ", }, $('#event-wrapper').addClass('compact'); } // ** Living World Season 2 ** console.log('Changed preference: ', keyname); barcontainer.append($(document.createElement("h3")).attr("class", metaKey).text(metaSingular.category)); hideHeadings = false; category: "Heart of Thorns", }); segments: { usedHeadings = []; if (metaKey == 'ds' && r == 1) { // Check combined offset in hours is not beyond 23:59 Overview. } } function pad(s) { } }, eventTimerSettings.append(box).append(label); touch-action: none; } else { $('.event-pointer-time').text(uitext.timeshiftresume); Characters first arrive in the map at the Order of Whispers Camp, high up to the west. #event-container { // One off tasks: Draw meta event segmented-bars, enhance them, and add a static pointer. } $.getScript('/index.php?title=Widget:Event_timer/jquery_ui_sortable_min.js&action=raw&ctype=text/javascript', function( data, textStatus, jqxhr ) { // ** Living World Season 4 ** // Don't bother calculating if the meta hasn't been requested } else { // 1515 = 23:00 plus 2 hour lookahead plus 15 mins future // Use even hours if required, or any hour if not specified #event-wrapper .event-bar-container.t, A network of hardened planet-side military installations and countless Warsats were built during the Golden Age, prior to the Collapse, and were coordinated by Rasputin. } $('.event-limit-text.prev').css('display', 'none'); }); }, } else if ( wf < e ) { ", if (useTopTimes === true) { }); var useEvenHourStart = getEventTimerPreferences('even', uitext.checkboxes.even.defaultvalue); var version = 'v3.5.4'; // February 2021: Leyline anomaly moved to core tyria 0: { name: "", bg: "transparent" } 2: { name: "Night: Night and the Enemy", link: "Night and the Enemy", bg: [211,234, 98] }, The main enemies encountered here are the Chak, insect creatures with an affinity for ley-line energy. border-left: 2px solid red; var currentStartHourUTC = hour; border: 1px dashed #AAA; }, margin-bottom: 0em; var index = defaultSequence.indexOf(excludeSequence[i]); mainEventTimer(true); $(window).resize(function() { $('#EventTimerCSS2').text('/* Widget:Event timer - Stylesheet 1 */\n' + cssText); 2: { name: "Dusk", link: "Day and night", bg: [[255,255,255],[122,134,171]] }, // Update local time too 2: { name: "Claw of Jormag", link: "Defeat the Claw of Jormag", chatlink: "[&BHoCAAA=]", bg: [ 66,200,215] }, If there are vacant spots in the fireteam, the matchmaking system will search for additional players before launching the activity. timeString = $(document.createElement("span")).attr("title", uitext.timezonehover + " (UTC" + (timezoneOffset < 0 ? input.type = 'text'; } }); name: "Bjora Marches", https://d2.destinygamewiki.com/mediawiki/index.php?title=Strikes&oldid=91562. WAIT 40MS BETWEEN ATTEMPTS. if (otherHourOffset == 0) { segments: { }, eventTimerSettings.append($(document.createElement("input")).attr("id", "forget-button").attr("class", "mw-ui-button button").attr("type", "button").attr("value", uitext.forgetsettings)); /* Guild Wars 2 Wiki: Event timer */ 1: { name: "Help the Outposts", link: "Advancing Across Tangled Roots", bg: [231,251,132] }, }, // Utility function #15: Create wiki like links; inactive when on the same page as linked to. }); 'PM' : 'AM'); category: "Core Tyria", pattern: [{r:1,d:20},{r:0,d:10},{r:2,d:20},{r:0,d:40},{r:2,d:20},{r:0,d:10}] // Don't bother appending if cumulative start time is outside range of interest } input.style.display = 'inline-block'; ", chatlink: "[&BGMCAAA=]", bg: [ 66,200,215] }, + metaKey + k + ' { background: ' + v.bg + '}'; // Increment this every time a release is added to invalidate the existing sequence and force users to load the new map timer. var partialDuration = 0; $.map(partial, function(v){ partialDuration += v.d; }); cl: ' future' var refinedSchedule = []; time = time % 1440; pvpat: { dv: { } category: "Core Tyria", bar.append($(document.createElement("span")).attr("class", "event-bar-exit").attr("title", uitext.deleterowhover).text("[X]")); if (timezoneOffset == 0) { output.className = 'event-chatlink'; } // Utility function #2 and #3: HTML5 localStorage operator functions used to request existing preferences, and store user preferences for later visits case 'string': } } 10 mainEventTimer(true); // var repeatedPattern = Array(patternQty).fill().map(function(){ return pattern; }); :&|#|$))/; sequences: { try { // ** Living World Season 3 ** pattern: [{r:1,d:75},{r:2,d:15},{r:3,d:20},{r:4,d:10}] for (var i = 0; i < excludeSequence.length; i++) { border-color: #AAA; }, : name ), chatlink = metaSingular.segments[v.r].chatlink || ''; mainEventTimer(true); 2: { name: "The Oil Floes", chatlink: "[&BKYLAAA=]", bg: [157,65,185] }, // Load the main widget from above '); // Now reload otherwise people whine about category titles. twelvehour: { text = text || pageName.replace(/_/g, " "); } ds: { timeString = (((hour + 11) % 12) + 1) + ':' + pad(minute) + ' ' + (hour >= 12 ? // Placeholder object which will become a copy of eventData, but only with the metas specified in defaultSequence. #event-wrapper.compact { margin-left: auto; position: relative; } }, 0: { name: "", bg: [251,199,132] }, /* Guild Wars 2 Wiki: Widget:Event timer */ // Allow reordering of elements }); } /* Times at the top - hide by default only show if class applied */ The Nightfall: the Ordeal playlist contains a single Strike, which changes weekly. 1: { name: "Automated Tournament: Balthazar's Brawl", link: "Automated Tournaments#Daily_tournaments", bg: [ 66,200,215] }, fitTimerToWindowWidth(); if (hideCategories === true) { } }, sequences: { 60 Strikes can be launched directly from a destination, or from the Vanguard Director, which contains two playlists. } else { Higher difficulties have no matchmaking. pattern: [{r:1,d:15},{r:0,d:13},{r:2,d:22},{r:0,d:5},{r:3,d:20},{r:0,d:15},{r:4,d:15},{r:0,d:15}] // Utility function #4: Create a legend with checkboxes for viewers to set their preferences. timeRaw = pad(hour) + ':' + pad(minute); (function() { sequences: { Negative timezones already have a minus sign. Every 2 hours, redraw the segmented bars var patternDuration = 0; $.map(pattern, function(v){ patternDuration += v.d; }); left: 88.88%; ); function eventTimerPreferences() { name: "Ley-Line Anomaly", name: "Dragon Bash", 2: { name: "Automated Tournament: Grenth's Game", link: "Automated Tournaments#Daily_tournaments", bg: [ 66,200,215] }, hidechatlinks: { } // Refine schedule to fit 135 minute view. }); var we = ws + 135; If you ask the leader/commander, they may have the train pass by the Ley-Line Confluence Waypoint. localStorage.removeItem('event-timer-version'); segments: { defaultvalue: false }, sequences: { } $('#event-wrapper').addClass('hidecategories'); }); }, }, 3: { name: "Octovine", link: "Battle in Tarir (map meta event)", chatlink: "[&BAIIAAA=]", bg: [190,215, 66] }, eventTimerPreferences(); } if (index != -1) {