Posts tagged Programming

TellMeWhen: Protection Warrior

TellMeWhen is an addon for the MMORPG World of Warcraft. It provides visual, auditory, and textual notifications about cooldowns, buffs, and pretty much every other element of combat. You can read more and download it at Curse.com

I created a setup to assist me when playing a Protection-specced Warrior in World of Warcraft.

TellMeWhen: Protection Warrior

 

 

 

 

Currently it features:

  • Tanking rotation
  • Gladiator rotation (no Sudden Death)
  • Shout watcher
  • Interrupt reminder
  • Teleportation gear reminder
  • Healing cooldowns
  • Defensive cooldowns
  • Deep Wounds AoE tracker
  • Resolve tracker

Download the import string

Opening Hours

I started out developing this piece of JavaScript code for work, and decided to get it into overdrive during Christmas. It started out simply showing the opening hours of the library today, but got extended to take into consideration Holidays and specific dates, where the library closes early. The documentation is in danish.

 

<script type=”text/javascript”>

/************************************************************/
/* Variabler */
/************************************************************/

/* Gemmer dagens dato til fremtidig reference */
var today = new Date();

/* Gemmer Hillerød Biblioteks åbningstider. 0 er søndag */
var hillerod = new Array(7);
hillerod[0] = “Lukket”;
hillerod[1] = “10.30 – 18.00”;
hillerod[2] = “10.30 – 18.00”;
hillerod[3] = “10.30 – 18.00”;
hillerod[4] = “10.30 – 16.30”;
hillerod[5] = “10.30 – 16.30”;
hillerod[6] = “10.30 – 14.00”;

/* Gemmer Skævinge Betjenings åbningstider. 0 er søndag */
var skavinge = new Array(7);
skavinge[0] = “Lukket”;
skavinge[1] = “14.00 – 18.00”;
skavinge[2] = “Ingen”;
skavinge[3] = “14.00 – 18.00”;
skavinge[4] = “Ingen”;
skavinge[5] = “Ingen”;
skavinge[6] = “10.00 – 14.00”;

/* Gemmer Skævinge Selvbetjenings åbningstider. 0 er søndag */
var selvbetjening = new Array(7);
selvbetjening[0] = “Lukket”;
selvbetjening[1] = “08.00 – 21.00”;
selvbetjening[2] = “08.00 – 21.00”;
selvbetjening[3] = “08.00 – 21.00”;
selvbetjening[4] = “08.00 – 21.00”;
selvbetjening[5] = “08.00 – 19.00”;
selvbetjening[6] = “08.00 – 17.00”;

/* Gemmer Lokalhistorisk Arkivs åbningstider. 0 er søndag */
var lokalhistorisk = new Array(7);
lokalhistorisk[0] = “Lukket”;
lokalhistorisk[1] = “Lukket”;
lokalhistorisk[2] = “12.30 – 17.00”;
lokalhistorisk[3] = “Lukket”;
lokalhistorisk[4] = “Lukket”;
lokalhistorisk[5] = “Lukket”;
lokalhistorisk[6] = “Lukket”;

/************************************************************/
/* Funktioner */
/************************************************************/

/* Udregner hvornår det er Påske. Det er muligt at angive extra dage til udregnelsen af Langfredag og andre dage */
function isEaster(extraDays)
{
var year = today.getFullYear();
var a = year % 19;
var b = Math.floor(year/100);
var c = year % 100;
var d = Math.floor(b/4);
var e = b % 4;
var f = Math.floor((b+8) / 25);
var g = Math.floor((b-f+1) / 3);
var h = (19*a + b – d – g + 15) % 30;
var i = Math.floor(c/4);
var j = c % 4;
var k = (32 + 2*e + 2*i – h – j) % 7;
var m = Math.floor((a + 11*h + 22*k) / 451);
/* Trækker en fra måneden, da den starter ved 0 når den skal angives senere */
var month = Math.floor((h + k – 7*m + 114) / 31) – 1;
var day = ((h + k – 7*m +114) % 31) + 1;

/* Sikrer at hvis der ingen værdi overføres, så sættes antallet af ekstra dage til 0 */
if (isNaN(extraDays)){
extraDays = 0;}

/* Sætter den udregnede Påskedato med evt. extra dage og måneder, og nulstiller millisekunder for korrekt at kunne sammenligne datoer */
var easter = new Date();
easter.setFullYear(year, month, (day + extraDays));
easter.setMilliseconds(0);

return easter.getTime();
}

/* Tjekker om dagens dato passer til listen af lukkedage */
function isHoliday(hours)
{
/* Opret dato object til fremtidig brug */
var holiday = new Date();
var year = today.getFullYear();
/* Nulstiller millisekunder for korrekt at kunne sammenligne datoer */
today.setMilliseconds(0);
holiday.setMilliseconds(0);
switch (today.getTime())
{
case holiday.setFullYear(year, 0, 1): /* 1. januar */
return “Lukket”;
break;
case isEaster(-3): /* Skærtorsdag */
return “Lukket”;
break;
case isEaster(-2): /* Langfredag */
return “Lukket”;
break;
case isEaster(-1): /* Påskelørdag */
return “Lukket”;
break;
case isEaster(): /* Påske */
return “Lukket”;
break;
case isEaster(1): /* 2. Påskedag */
return “Lukket”;
break;
case isEaster(25): /* Store Bededag */
return “Lukket”;
break;
case holiday.setFullYear(year, 4, 1): /* 1. maj. Der lukkes kl. 12 */
if (hours != “Lukket” && hours != “Ingen”){
return hours.replace(/\d{2}.\d{2}$/, “12.00”);}
else{
return hours;}
break;
case isEaster(42): /* Kristi Himmelfartsdag */
return “Lukket”;
break;
case isEaster(50): /* 2. Pinsedag */
return “Lukket”;
break;
case holiday.setFullYear(year, 6, 6): /* Grundlovsdag */
return “Lukket”;
break;
case holiday.setFullYear(year, 11, 24): /* Juleaftensdag */
return “Lukket”;
break;
case holiday.setFullYear(year, 11, 25):
return “Lukket”;
break;
case holiday.setFullYear(year, 11, 26):
return “Lukket”;
break;
case holiday.setFullYear(year, 11, 27):
return “Lukket”;
break;
case holiday.setFullYear(year, 11, 28):
return “Lukket”;
break;
case holiday.setFullYear(year, 11, 29):
return “Lukket”;
break;
case holiday.setFullYear(year, 11, 30):
return “Lukket”;
break;
case holiday.setFullYear(year, 11, 31): /* Nytårsaftensdag */
return “Lukket”;
break;
default:
return hours;
}
}

/* Undersøger om firstSaturday variablens måned er den samme som den nuværende og sikrer, at det ikke er lørdag. Da firstSaturday indeholder datoen for 7 dage siden, vil måneden ikke være den samme hvis vi er mindre end 7 dage inde i måneden. Dagen må hellere ikke være lørdag, da det er netop den dag vi søger */
function isFirstSaturday(hours)
{
/* Gemmer dagens dato til fremtidig reference og manipulation */
var firstSaturday = new Date();
/* Ændrer værdien til at være datoen for 7 dage siden */
firstSaturday.setDate(today.getDate()-7);

if (firstSaturday.getMonth() == today.getMonth() || today.getDay() != 6){
return hours;}
else{
return “10.30 – 14.00”;}
}

/************************************************************/
/* Print */
/************************************************************/

/* Skriver biblioteksnavne og åbningstider til siden, efter der tjekkes om det er en lukkedag. Bemærk at navnet placeres mod venstre og tiden mod højre */
document.write(“<p style=’float: left’><strong>Hillerød:</strong></p><p style=’float: right’>” + isHoliday(hillerod[today.getDay()]) + “</p><div style=’clear: both;’></div>”);
document.write(“<div style=’float: left’><strong>Skævinge</strong></div><div style=’float: right’></div><div style=’clear: both;’></div>”);
document.write(“<div style=’float: left’>Betjening:</div><div style=’float: right’>” + isHoliday(skavinge[today.getDay()]) + “</div><div style=’clear: both;’></div>”);
document.write(“<p style=’float: left’>Selvbetjening:</p><p style=’float: right’>” + isHoliday(selvbetjening[today.getDay()]) + “</p><div style=’clear: both;’></div>”);
document.write(“<p style=’float: left’><strong>Lokalhistorisk<br />Arkiv:</strong></p><p style=’float: right’><br />” + isHoliday(isFirstSaturday(lokalhistorisk[today.getDay()])) + “</p><div style=’clear: both;’></div>”);
document.write(“<a href=’/web/arena/aabningstider’ title=’Åbningstider alle dage’>Åbningstider alle dage</a>”);
</script>

Bhaerau.com

At the start of year 2000 I had a website at bhaerau.com, the name based on my old screen name. It served the purpose of having a place where I could develop my skills at web design with ASP and Access, as well as maintain a place on the net, since everybody had to have a website. The status of the site was up and down during the time, but towards the end it served as the home of The Eonian Council as well as my fan page to King Diamond, neither which exists outside my hard disk’s junk-folder today (I tried uploading them to my domain, but seems it hates ASP). and now the source files as well as documentation in danish can be found below.

Download the site

Spy

Spy is an addon for World of Warcraft, based on RaidTalents that was made on a whim while doing player vs. player one day. I had recently experienced the C’thun fight and thought that the whispers were pretty cool. So I decided to make an addon that, if a player had it, would accept another player to activate sound clips. It may or may not work with the latest World of Warcraft patch.

Download the addon

Go to Top