Idle Champions of the Forgotten Realms Wiki
Advertisement

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */


switch(mw.config.get('wgPageName')){

/* JS for the Event Countdown on the main page */
case 'Idle_Champions_of_the_Forgotten_Realms_Wiki':
{
    function DST_Check()
    {
        var sDate = $( ".countdowndate" ).text();
        var dtDate = new Date(sDate);
        
        if (dtDate.isDstObserved())
        {
            dtDate = new Date(dtDate.getFullYear(), dtDate.getMonth(), dtDate.getDate(), dtDate.getHours(), dtDate.getMinutes() - 60, dtDate.getSeconds());
        }
         $( ".countdowndate" ).text(dtDate);
        return;
    }
 
  $(function() {
      DST_Check();
  });
  break;
}

/* JS for the Event Token Calculator */
case 'Event_Token_Calculator':
{
  function GetEventInfo()
  {
    var sTitle = $( ".EVENT_NAME" ).text();
    var sStartTime = $( ".EVENT_STARTTIME" ).text();
    var sEndTime = $( ".EVENT_ENDTIME" ).text();
    
    $( ".LBL_EVENTNAME" ).text(sTitle);
    $( ".LBL_TIME_START_PST" ).text(sStartTime);
    $( ".LBL_TIME_END_PST" ).text(sEndTime);
  }

  function GetTimeRemaining()
  {
    var sStartDate = $( ".LBL_TIME_START_PST" ).text();
    var sEndDate = $( ".LBL_TIME_END_PST" ).text();
    var dtStart = new Date(sStartDate);
    var dtEnd = new Date(sEndDate);

    //alert(dtStart + " " + dtEnd)
    var diff = dtEnd.getTime() - dtStart.getTime();
    var second_ticks = 1000;
    var minute_ticks = 60 * second_ticks;
    var hour_ticks = 60 * minute_ticks;
    var day_ticks = 24 * hour_ticks;

    var days = Math.floor(diff /  day_ticks);
    diff -=  days * day_ticks;

    var hours = Math.floor(diff / hour_ticks);
    diff -= hours * hour_ticks;

    var mins = Math.floor(diff / minute_ticks);
    diff -= mins * minute_ticks;

    var sResult = days + " days " + hours + " Hours " + mins + " Minutes" ;
    var nTokens = (((((days * 24)  + hours ) * 60 ) + mins ) * 2)
    var nFP = Math.floor(nTokens / 2500);

    //alert("Time Remaining: " + sResult);
    $( ".LBL_TIME_REMAINING" ).text(sResult);
    $( ".LBL_TOKENS_REMAINING" ).text(nTokens);
    $( ".LBL_FPS_REMAINING" ).text(nFP);
    
    
    //$( ".TXT_TIME_DAYS" ).text(days);
    //$( ".TXT_TIME_HOURS" ).text(hours);
    //$( ".TXT_TIME_MINUTES" ).text(mins);

    return;	
  }

  function UpdateFinalTokens()
  {
    var nRemainingTokens = Number($( ".LBL_TOKENS_REMAINING" ).text());
    var nDays = Number($( ".TXT_TIME_DAYS" ).text());
    var nHours = Number($( ".TXT_TIME_HOURS" ).text());
    var nMinutes = Number($( ".TXT_TIME_MINUTES" ).text());
    
    var nCurrentTokens = Number($( ".TXT_TOKENS_CURRENT" ).text());
    var nContract_Count_SML = Number($( ".TXT_NUM_CONTRACT_SML" ).text());
    var nContract_Count_MED = Number($( ".TXT_NUM_CONTRACT_MED" ).text());
    var nContract_Count_LRG = Number($( ".TXT_NUM_CONTRACT_LRG" ).text());

    var rate_per_min = 2
    var tokens_per_small = 30 * rate_per_min; 	//30 min
    var tokens_per_medium = 4 * 60 * rate_per_min; 	//4 hrs
    var tokens_per_large = 8 * 60 * rate_per_min; 	//8 hrs

    var nTokens = (((((nDays * 24)  + nHours ) * 60 ) + nMinutes ) * 2)
    
    var nFinalTokens = nTokens + nCurrentTokens + (nContract_Count_SML * tokens_per_small) + (nContract_Count_MED * tokens_per_medium) +  (nContract_Count_LRG * tokens_per_large);


    $( ".LBL_TOKENS_FINAL" ).text(nFinalTokens);
    

    return;
  }

function UpdateDates()
{
var sStartDate = $( ".LBL_TIME_START_PST" ).text();
var sEndDate = $( ".LBL_TIME_END_PST" ).text();

var dtStart = new Date(sStartDate);
var dtEnd = new Date(sEndDate);

dtStart = Convert_PSTtoLocal(dtStart);
dtEnd = Convert_PSTtoLocal(dtEnd);

dtLocal = new Date();
if (dtStart < dtLocal)
{
var dtLocal_PST = Convert_LocalToPST(dtLocal);
$( ".LBL_TIME_START_PST" ).text(FormatDate(dtLocal_PST));
dtStart = dtLocal;
}

$( ".LBL_TIME_START_LOCAL" ).text(FormatDate(dtStart));
$( ".LBL_TIME_END_LOCAL").text(FormatDate(dtEnd));

return;
}


$(function() {
    $( ".BTN_CALCULATE" ).on("click", function() {  UpdateFinalTokens();  }  );
    $(".TXT_TOKENS_CURRENT").on("keydown", function() {   if (event.keyCode === 13) { UpdateFinalTokens(); return false; } }  );
    $(".TXT_NUM_CONTRACT_SML").on("keydown", function() {   if (event.keyCode === 13) { UpdateFinalTokens(); return false; } }  );
    $(".TXT_NUM_CONTRACT_MED").on("keydown", function() {   if (event.keyCode === 13) { UpdateFinalTokens(); return false; } }  );
    $(".TXT_NUM_CONTRACT_LRG").on("keydown", function() {   if (event.keyCode === 13) { UpdateFinalTokens(); return false; } }  );
    $(".TXT_TIME_DAYS").on("keydown", function() {   if (event.keyCode === 13) { UpdateFinalTokens(); return false; } }  );
    $(".TXT_TIME_HOURS").on("keydown", function() {   if (event.keyCode === 13) { UpdateFinalTokens(); return false; } }  );
    $(".TXT_TIME_MINUTES").on("keydown", function() {   if (event.keyCode === 13) { UpdateFinalTokens(); return false; } }  );

    GetEventInfo();
    UpdateDates();
    GetTimeRemaining();
    UpdateFinalTokens();	
});

break;
}
}

Date.prototype.stdTimezoneOffset = function () {
    var jan = new Date(this.getFullYear(), 0, 1);
    var jul = new Date(this.getFullYear(), 6, 1);
    return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}

Date.prototype.isDstObserved = function () {
    return this.getTimezoneOffset() < this.stdTimezoneOffset();
}

function FormatDate(date)
{
    var month = date.getMonth() + 1;
    var day = date.getDate();
    var year = date.getFullYear() - 2000;
    var hour = date.getHours();
    var minutes = date.getMinutes();
    var AM_PM = 'AM';
   
   if (hour > 12)
    {
        hour = hour - 12;
        AM_PM = 'PM'
    }
    
    if (month < 10)
    {
        month = '0' + month
    }
    if (day < 10)
    {
        day = '0' + day
    }
    if (hour < 10)
    {
        hour = '0' + hour
    }
    if (minutes < 10)
    {
        minutes = '0' + minutes
    }
    
    return month + '/' + day + '/' + year + ' ' + hour + ':' + minutes  + ' ' + AM_PM;
}

function Convert_PSTtoLocal(date)
{
    var d = new Date();
    var nOffSet_LOCAL = d.getTimezoneOffset(); //Local TZ from GMT
    var Offset_PST = 480  //8-7(dst) hrs behind GMT
    if (d.isDstObserved())
    {
      Offset_PST = 420;
    }
    var minutes_diff = Offset_PST - nOffSet_LOCAL
    var dt = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes() + minutes_diff);

    return dt;
}

function Convert_LocalToPST(date)
{
    var d = new Date();
    var nOffSet_LOCAL = d.getTimezoneOffset(); //Local TZ from GMT
    var Offset_PST = 480  //8-7(dst) hrs behind GMT
    if (d.isDstObserved())
    {
      Offset_PST = 420;
    }
    var minutes_diff = Offset_PST - nOffSet_LOCAL
    var dt = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes() - minutes_diff);

    return dt;
}






/*JS for the Event Table (Time To Local)*/
case 'Event_Token_Calculator':
    {
        
function SetCNETime( day, hour ) {
	let hstr = hour.toString().padStart( 2, '0' ) + ':00:00';
	let time = DateTime.fromISO( hstr, cnezone ).set( { weekday: day } );
	if ( cnenow > time )
		time = time.plus( { weeks: 1 } ).set( { hour: hour } );
	return time;
}

const cnezone = { zone: 'America/Whitehorse' };
const cnenow = DateTime.local().setZone( cnezone.zone );

// game times
const newContent = SetCNETime( 3, 12 );			// Wed, 12:00
const weekendStart = SetCNETime( 5, 12 );		// Fri, 12:00
const weekendEnd = SetCNETime( 1, 12 );			// Mon, 12:00
// community times
const redditQnA = SetCNETime( 2, 10 );			// Tue, 10:00
const binwinPlays = SetCNETime( 2, 12 );		// Tue, 12:00
const icStream = SetCNETime( 4, 13 );			// Thu, 13:00

const tablestruct = [
	{
		header: 'Game events',
		events: [
			{	desc: 'Usual time for new content release or event start',	time: newContent	},
			{	desc: 'Weekend buff start',									time: weekendStart	},
			{	desc: 'Weekend buff end, event end time',					time: weekendEnd	}
		]
	}, {
		header: 'Community events',
		events: [
			{	desc: 'Q&A session on reddit',								time: redditQnA		},
			{	desc: 'Binwin plays Idle Champions Twitch stream',			time: binwinPlays	},
			{	desc: 'Idle Champions Twitch stream',						time: icStream		}
		]
	}
];

let table = document.getElementById( 'timezone-monster' );

// header
let header = table.createTHead();
let tr = header.insertRow(-1);
let th = document.createElement('th');	th.innerHTML = 'Event description';									tr.appendChild( th );
th = document.createElement('th');		th.innerHTML = 'CNE time<br>' + cnenow.offsetNameLong;				tr.appendChild( th );
th = document.createElement('th');		th.innerHTML = 'Local time<br>' + DateTime.local().offsetNameLong;	tr.appendChild( th );

let tbody = document.createElement( 'tbody' );
let td = null;

tablestruct.forEach( x => {
	tr = tbody.insertRow(-1);
	td = tr.insertCell(-1);
	td.innerHTML = x.header;
	td.colSpan = 3;
	td.classList.add( 'subheader' );
	
	x.events.forEach( y => {
		let tl = y.time.toLocal();
		
		tr = tbody.insertRow(-1);
		tr.insertCell(-1).innerHTML = y.desc;
		tr.insertCell(-1).innerHTML = y.time.weekdayLong + ', ' + y.time.toLocaleString(DateTime.TIME_24_SIMPLE);
		tr.insertCell(-1).innerHTML = tl.weekdayLong + ', ' + tl.toLocaleString(DateTime.TIME_24_SIMPLE);
	} );
} );

table.appendChild( tbody );
    }
Advertisement