Mendenbarr

Timerkeeper

Apr 22nd, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Calendar and down day counter for Faerun, Greyhawk, Eberron and Modern Settings
  2. // Created by Kirsty (https://app.roll20.net/users/1165285/kirsty)
  3.  
  4. // API Commands:
  5. // !cal - for the GM displays the menu in the chat window, for a player displays date, weather, moon and down days
  6.  
  7. // Red Colour: #7E2D40
  8.  
  9. var Calendar = Calendar || (function() {
  10.     'use strict';
  11.    
  12.     var version = '3.0.2',
  13.    
  14.     setDefaults = function() {
  15.         state.Calendar = {
  16.             now: {
  17.                 version: '3.0.2',
  18.                 world: 1,
  19.                 ordinal: 1,
  20.                 year: 1486,
  21.                 down: 0,
  22.                 divider: 0,
  23.                 weather: "It is a cool but sunny day.",
  24.                 time: "OFF",
  25.                 startdate: "1,Hammer,1486"
  26.             },
  27.         };
  28.     },
  29.    
  30.     checkDefaults = function() {
  31.         if( state.Calendar.now.version != version ){
  32.             state.Calendar.now.version = version;
  33.         }
  34.         if( ! state.Calendar.now.world){state.Calendar.now.world = 1};
  35.         if( ! state.Calendar.now.ordinal){state.Calendar.now.ordinal = 1};
  36.         if( ! state.Calendar.now.year){state.Calendar.now.year = 1486};
  37.         if( ! state.Calendar.now.down){state.Calendar.now.down = '0'};
  38.         if( ! state.Calendar.now.divider){state.Calendar.now.divider = '0'};
  39.         if( ! state.Calendar.now.weather){state.Calendar.now.weather = "It is a cool but sunny day."};
  40.         if( ! state.Calendar.now.time){state.Calendar.now.time = "OFF"};
  41.         if( ! state.Calendar.now.startdate){state.Calendar.now.startdate = "1,Hammer,1486"};
  42.     },
  43.    
  44.     handleInput = function(msg) {
  45.         var args = msg.content.split(",");
  46.        
  47.         if (msg.type !== "api") {
  48.             return;
  49.         }
  50.        
  51.         if(playerIsGM(msg.playerid)){
  52.             switch(args[0]) {
  53.                 case '!cal':
  54.                     calmenu();
  55.                     break;
  56.                 case '!setworld':
  57.                     state.Calendar.now.world=args[1];
  58.                     calmenu();
  59.                     break;
  60.                 case '!startdate':
  61.                     state.Calendar.now.startdate=args[1]+','+args[2]+','+args[3];
  62.                     calmenu();
  63.                     break;
  64.                 case '!setday':
  65.                     switch(Number(state.Calendar.now.world)) {
  66.                         case 1:
  67.                             getFaerunOrdinal(msg);
  68.                             break;
  69.                         case 2:
  70.                             getGreyhawkOrdinal(msg);
  71.                             break;
  72.                         case 3:
  73.                             getModernOrdinal(msg);
  74.                             break;
  75.                         case 4:
  76.                             getEberronOrdinal(msg);
  77.                             break;
  78.                     }
  79.                     weather();
  80.                     calmenu();
  81.                     break;
  82.                 case '!setmonth':
  83.                     switch(Number(state.Calendar.now.world)) {
  84.                         case 1:
  85.                             getFaerunOrdinal(msg);
  86.                             break;
  87.                         case 2:
  88.                             getGreyhawkOrdinal(msg);
  89.                             break;
  90.                         case 3:
  91.                             getModernOrdinal(msg);
  92.                             break;
  93.                         case 4:
  94.                             getEberronOrdinal(msg);
  95.                             break;
  96.                     }
  97.                     weather();
  98.                     calmenu();
  99.                     break;
  100.                 case '!setyear':
  101.                     state.Calendar.now.year=args[1];
  102.                     calmenu();
  103.                     break;
  104.                 case '!setordinal':
  105.                     state.Calendar.now.ordinal=args[1];
  106.                     calmenu();
  107.                     break;
  108.                 case '!settime':
  109.                     state.Calendar.now.time=args[1];
  110.                     calmenu();
  111.                     break;
  112.                 case '!setdown':
  113.                     var down = Number(args[1]);
  114.                     state.Calendar.now.down = down;
  115.                     getdown(down);
  116.                     calmenu();
  117.                     break;
  118.                 case '!setdiv':
  119.                     state.Calendar.now.divider=Number(args[1]);
  120.                     calmenu();
  121.                     break;
  122.                 case '!addday':
  123.                     addday(args[1]);
  124.                     weather();
  125.                     calmenu();
  126.                     break;
  127.                 case '!weather':
  128.                     if(args[1]=='Roll}'){
  129.                         weather();
  130.                     }else{
  131.                         var string = args[1];
  132.                         for (var i = 2; i < args.length; i++) {
  133.                             string = string + ", " + args[i];
  134.                         }
  135.                         state.Calendar.now.weather = string;
  136.                     }
  137.                     calmenu();
  138.                     break;
  139.                 case '!playercal':
  140.                     showcal(msg);
  141.                     break;
  142.             }
  143.         }else if(args[0]=='!cal'){
  144.             showcal(msg);
  145.         }
  146.     },
  147.    
  148.     calmenu = function() {
  149.         var colour = '#7E2D40';
  150.         var divstyle = 'style="width: 189px; border: 1px solid black; background-color: #ffffff; padding: 5px;"'
  151.         var astyle1 = 'style="text-align:center; border: 1px solid black; margin: 1px; padding: 2px; background-color: ' + colour + '; border-radius: 4px;  box-shadow: 1px 1px 1px #707070; width: 100px;';
  152.         var astyle2 = 'style="text-align:center; border: 1px solid black; margin: 1px; padding: 2px; background-color: ' + colour + '; border-radius: 4px;  box-shadow: 1px 1px 1px #707070; width: 150px;';
  153.         var tablestyle = 'style="text-align:center;"';
  154.         var arrowstyle = 'style="border: none; border-top: 3px solid transparent; border-bottom: 3px solid transparent; border-left: 195px solid ' + colour + '; margin-bottom: 2px; margin-top: 2px;"';
  155.         var headstyle = 'style="color: ' + colour + '; font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"';
  156.         var substyle = 'style="font-size: 11px; line-height: 13px; margin-top: -3px; font-style: italic;"';
  157.        
  158.         var world = getworld();
  159.         var down = Number(state.Calendar.now.down);
  160.         down = getdown(down);
  161.         var moMenu = getMoMenu();
  162.         var ordinal = state.Calendar.now.ordinal;
  163.        
  164.         var nowdate;
  165.        
  166.         switch(Number(state.Calendar.now.world)) {
  167.             case 1:
  168.                 nowdate = getFaerunDate(ordinal).split(',');
  169.                 break;
  170.             case 2:
  171.                 nowdate = getGreyhawkDate(ordinal).split(',');
  172.                 break;
  173.             case 3:
  174.                 nowdate = getModernDate(ordinal).split(',');
  175.                 break;
  176.             case 4:
  177.                 nowdate = getEberronDate(ordinal).split(',');
  178.                 break;
  179.         }
  180.        
  181.         var month = nowdate[0];
  182.         var day = nowdate[1];
  183.        
  184.         var moon;
  185.        
  186.         if (state.Calendar.now.world==1){
  187.             moon = getFaerunMoon();
  188.         }else if(state.Calendar.now.world==2){
  189.             moon = getGreyhawkMoon();
  190.         }else{
  191.             moon = '';
  192.         }
  193.        
  194.         var start = state.Calendar.now.startdate.split(',');
  195.         var startdate = start[0]+getsuffix(start[0])+' '+start[1]+', '+start[2];
  196.        
  197.         sendChat('Calendar', '/w gm <div ' + divstyle + '>' + //--
  198.             '<div ' + headstyle + '>Calendar</div>' + //--
  199.             '<div ' + substyle + '>Menu (v.' + state.Calendar.now.version + ')</div>' + //--
  200.             '<div ' + arrowstyle + '></div>' + //--
  201.             '<table>' + //--
  202.             '<tr><td>World: </td><td><a ' + astyle1 + '" href="!setworld,?{World?|Faerûn,1|Greyhawk,2|Modern,3|Eberron,4}">' + world + '</a></td></tr>' + //--
  203.             '<tr><td>Start Date: </td><td><a ' + astyle1 + '" href="!startdate,?{Day},?{Month},?{Year}">' + startdate + '</a></td></tr>' + //--
  204.             '<tr><td>Day: </td><td><a ' + astyle1 + '" href="!setday,?{Day?|1},' + month +'">' + day + '</a></td></tr>' + //--
  205.             '<tr><td>Month: </td><td><a ' + astyle1 + '" href="!setmonth,' + day + moMenu + month + '</a></td></tr>' + //--
  206.             '<tr><td>Year: </td><td><a ' + astyle1 + '" href="!setyear,?{Year?|1486}">' + state.Calendar.now.year + '</a></td></tr>' + //--
  207.             '<tr><td>Ordinal: </td><td><a ' + astyle1 + '" href="!setordinal,?{Ordinal?|1}">' + ordinal + '</a></td></tr>' + //-
  208.             '<tr><td>Time: </td><td><a ' + astyle1 + '" href="!settime,?{Time?|OFF|Early Morning|Morning (dawn)|Late Morning|Noon|Afternoon|Early Evening|Evening (dusk)|Late Evening|Midnight|After Midnight}">' + state.Calendar.now.time + '</a></td></tr>' + //-
  209.             '<tr><td>Down Days: </td><td><a ' + astyle1 + '" href="!setdown,?{Down Days?|0}">' + down + '</a></td></tr>' + //--
  210.             '<tr><td>Down Day<br>Divider: </td><td><a ' + astyle1 + '" href="!setdiv,?{Down Day Divider?|1}">' + state.Calendar.now.divider + '</a></td></tr>' + //--
  211.             '</table>' + //--
  212.             '<br>Weather: ' + state.Calendar.now.weather + //--
  213.             '<br><br>' + moon + //--
  214.             '<br><br><div style="text-align:center;"><a ' + astyle2 + '" href="!addday,?{Days to add?|1}">Advance the Date</a></div>' + //--
  215.             '<div style="text-align:center;"><a ' + astyle2 + '" href="!weather,?{Weather|Roll|Edit,?{Edit Weather}}">Change Weather</a></div>' + //--
  216.             '<div style="text-align:center;"><a ' + astyle2 + '" href="!playercal">Show to Players</a></div>' + //--
  217.             '</div>'
  218.         );
  219.     },
  220.    
  221.     showcal = function(msg) {
  222.         var nowdate;
  223.         var ordinal = state.Calendar.now.ordinal;
  224.        
  225.         switch(Number(state.Calendar.now.world)) {
  226.             case 1:
  227.                 nowdate = getFaerunDate(ordinal).split(',');
  228.                 break;
  229.             case 2:
  230.                 nowdate = getGreyhawkDate(ordinal).split(',');
  231.                 break;
  232.             case 3:
  233.                 nowdate = getModernDate(ordinal).split(',');
  234.                 break;
  235.             case 4:
  236.                 nowdate = getEberronDate(ordinal).split(',');
  237.                 break;
  238.         }
  239.        
  240.         var month = nowdate[0];
  241.         var day = nowdate[1];
  242.         var down = state.Calendar.now.down;
  243.             down = getdown(down);
  244.         var suffix = getsuffix(day);
  245.         var world = getworld();
  246.         var divstyle = 'style="width: 189px; border: 1px solid black; background-color: #ffffff; padding: 5px;"'
  247.         var tablestyle = 'style="text-align:center;"';
  248.         var arrowstyle = 'style="border: none; border-top: 3px solid transparent; border-bottom: 3px solid transparent; border-left: 195px solid rgb(126, 45, 64); margin-bottom: 2px; margin-top: 2px;"';
  249.         var headstyle = 'style="color: rgb(126, 45, 64); font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"';
  250.         var substyle = 'style="font-size: 11px; line-height: 13px; margin-top: -3px; font-style: italic;"';
  251.         var moon;
  252.        
  253.         if (state.Calendar.now.world==1){
  254.             moon = getFaerunMoon();
  255.         }else if(state.Calendar.now.world==2){
  256.             moon = getGreyhawkMoon();
  257.         }else{
  258.             moon = '';
  259.         }
  260.        
  261.         var timestr;
  262.         var downstr;
  263.        
  264.         if(state.Calendar.now.time!="OFF"){
  265.             timestr = '<br>The time is: '+state.Calendar.now.time;
  266.         }else{
  267.             timestr = '';
  268.         }
  269.        
  270.         if(down!=0){
  271.             downstr = '<br>Players have ' + down + ' down days.';
  272.         }else{
  273.             downstr = '';
  274.         }
  275.        
  276.         sendChat(msg.who, '<div ' + divstyle + '>' + //--
  277.             '<div ' + headstyle + '>Calendar</div>' + //--
  278.             '<div ' + substyle + '>' + world + '</div>' + //--
  279.             '<div ' + arrowstyle + '></div>' + //--
  280.             day + suffix + ' ' + month + ', ' + state.Calendar.now.year + //--
  281.             timestr + //--
  282.             downstr + //--
  283.             '<br><br>Today\'s weather:<br>' + state.Calendar.now.weather + //--
  284.             '<br><br>' + moon
  285.         );
  286.     },
  287.    
  288.     getworld = function() {
  289.         var num = Number(state.Calendar.now.world);
  290.         var world;
  291.        
  292.         switch(num) {
  293.             case 1:
  294.                 world = 'Faerûn';
  295.                 break;
  296.             case 2:
  297.                 world = 'Greyhawk';
  298.                 break;
  299.             case 3:
  300.                 world = 'Modern';
  301.                 break;
  302.             case 4:
  303.                 world = 'Eberron';
  304.                 break;
  305.         }
  306.        
  307.         return world;
  308.     },
  309.    
  310.     getdown = function(days) {
  311.         var down = Number(days);
  312.         var div = Number(state.Calendar.now.divider);
  313.        
  314.         if(div!=0){
  315.             down = down/div;
  316.         }
  317.        
  318.         return down;
  319.     },
  320.    
  321.     getMoMenu = function() {
  322.         var world = Number(state.Calendar.now.world);
  323.         var leap = checkLeap();
  324.         var moMenu;
  325.        
  326.         switch(world){
  327.             case 1:
  328.                 if(leap==0){
  329.                     moMenu = ',?{Month|Hammer|Midwinter|Alturiak|Ches|Tarsakh|Greengrass|Mirtul|Kythorn|Flamerule|Midsummer|Eleasias|Eleint|Highharvestide|Marpenoth|Uktar|Feast of the Moon|Nightal}">';
  330.                 }else{
  331.                     moMenu = ',?{Month|Hammer|Midwinter|Alturiak|Ches|Tarsakh|Greengrass|Mirtul|Kythorn|Flamerule|Midsummer|Sheildmeet|Eleasias|Eleint|Highharvestide|Marpenoth|Uktar|Feast of the Moon|Nightal}">';
  332.                 }
  333.                 break;
  334.             case 2:
  335.                 moMenu = ',?{Month|Needfest|Fire Seek|Readying|Coldeven|Growfest|Planting|Flocktime|Wealsun|Richfest|Reaping|Goodmonth|Harvester|Brewfest|Patchwall|Readyreat|Sunsebb}">';
  336.                 break;
  337.             case 3:
  338.                 moMenu = ',?{Month|January|February|March|April|May|June|July|August|September|October|November|December}">';
  339.                 break;
  340.             case 4:
  341.                 moMenu = ',?{Month|Zarantyr|Olarune|Therendor|Eyre|Dravago|Nymm|Lharvion|Barrakas|Rhaan|Sypheros|Aryth|Vult}">';
  342.                 break;
  343.         }
  344.        
  345.         return moMenu;
  346.     },
  347.    
  348.     checkLeap = function(){
  349.        
  350.         var leap;
  351.         var remainder;
  352.         var world = Number(state.Calendar.now.world);
  353.         var year = Number(state.Calendar.now.year);
  354.        
  355.         switch(world){
  356.             case 1:
  357.                 remainder = year % 4;
  358.                 if(remainder==0){
  359.                     leap = 1;
  360.                 }else{
  361.                     leap = 0;
  362.                 }
  363.                 break;
  364.             case 2:
  365.                 leap = 0;
  366.                 break;
  367.             case 3:
  368.                 if(year % 4 != 0){
  369.                     leap = 0;
  370.                 }else if(year % 100 != 0){
  371.                     leap = 1;
  372.                 }else if(year % 400 != 0){
  373.                     leap = 0;
  374.                 }else{
  375.                     leap = 1;
  376.                 }
  377.                 break;
  378.             case 4:
  379.                 leap = 0;
  380.                 break;
  381.         }
  382.        
  383.         return leap;
  384.     },
  385.    
  386.     getFaerunDate = function(options){
  387.         var day = Number(options);
  388.         var date;
  389.         var month;
  390.        
  391.         if(day>0 && day<=30){
  392.             month="Hammer";
  393.             date=day;
  394.         }else if(day==31){
  395.             month="Midwinter";
  396.             date='festival';
  397.         }else if(day>31 && day<=61){
  398.             month="Alturiak";
  399.             date=day-31;
  400.         }else if(day>61 && day<=91){
  401.             month="Ches";
  402.             date=day-61;
  403.         }else if(day>91 && day<=121){
  404.             month="Tarsakh";
  405.             date=day-91;
  406.         }else if(day==122){
  407.             month="Greengrass";
  408.             date='festival';
  409.         }else if(day>122 && day<=152){
  410.             month="Mirtul";
  411.             date=day-122;
  412.         }else if(day>152 && day<=182){
  413.             month="Kythorn";
  414.             date=day-152;
  415.         }else if(day>182 && day<=212){
  416.             month="Flamerule";
  417.             date=day-182;
  418.         }else if(day==213){
  419.             month="Midsummer";
  420.             date='festival';
  421.         }else if(day==214){
  422.             month="Sheildmeet";
  423.             date='festival';
  424.         }else if(day>214 && day<=244){
  425.             month="Eleasias"
  426.             date=day-214;
  427.         }else if(day>244 && day<=274){
  428.             month="Eleint";
  429.             date=day-244;
  430.         }else if(day==275){
  431.             month="Highharvestide";
  432.             date='festival';
  433.         }else if(day>275 && day<=305){
  434.             month="Marpenoth";
  435.             date=day-275;
  436.         }else if(day>305 && day<=335){
  437.             month="Uktar";
  438.             date=day-305;
  439.         }else if(day==336){
  440.             month="Feast of the Moon";
  441.             date='festival';
  442.         }else if(day>336 && day<=366){
  443.             month="Nightal";
  444.             date=day-336;
  445.         }else{
  446.             month="Hammer";
  447.             date='1';
  448.         }
  449.    
  450.         var array=month+','+String(date);
  451.         return array;    
  452.     },
  453.    
  454.     getGreyhawkDate = function(options){
  455.         var day = Number(options);
  456.         var date;
  457.         var month;
  458.        
  459.         if(day>0 && day<=7){
  460.             month="Needfest";
  461.             date=day;
  462.         }else if(day>7 && day<=35){
  463.             month="Fire Seek";
  464.             date=day-7;
  465.         }else if(day>35 && day<=63){
  466.             month="Readying";
  467.             date=day-35;
  468.         }else if(day>63 && day<=91){
  469.             month="Coldeven";
  470.             date=day-63;
  471.         }else if(day>91 && day<=98){
  472.             month="Growfest";
  473.             date=day-91;
  474.         }else if(day>98 && day<=126){
  475.             month="Planting";
  476.             date=day-98;
  477.         }else if(day>126 && day<=154){
  478.             month="Flocktime";
  479.             date=day-126;
  480.         }else if(day>154 && day<=182){
  481.             month="Wealsun";
  482.             date=day-154;
  483.         }else if(day>182 && day<=189){
  484.             month="Richfest";
  485.             date=day-182;
  486.         }else if(day>189 && day<=217){
  487.             month="Reaping";
  488.             date=day-189;
  489.         }else if(day>217 && day<=245){
  490.             month="Goodmonth"
  491.             date=day-217;
  492.         }else if(day>245 && day<=273){
  493.             month="Harvester";
  494.             date=day-245;
  495.         }else if(day>273 && day<=280){
  496.             month="Brewfest";
  497.             date=day-273;
  498.         }else if(day>280 && day<=308){
  499.             month="Patchwall";
  500.             date=day-280;
  501.         }else if(day>308 && day<=336){
  502.             month="Readyreat";
  503.             date=day-308;
  504.         }else if(day>336 && day<=364){
  505.             month="Sunsebb";
  506.             date=day-336;
  507.         }else{
  508.             month="Needfest";
  509.             date='1';
  510.         }
  511.    
  512.         var array=month+','+String(date);
  513.         return array;    
  514.     },
  515.    
  516.     getModernDate = function(options){
  517.         var day = Number(options);
  518.         var date;
  519.         var month;
  520.        
  521.         if(day>0 && day<=31){
  522.             month="January";
  523.             date=day;
  524.         }else if(day>31 && day<=59){
  525.             month="February";
  526.             date=day-31;
  527.         }else if(day>59 && day<=90){
  528.             month="March";
  529.             date=day-59;
  530.         }else if(day>90 && day<=120){
  531.             month="April";
  532.             date=day-90;
  533.         }else if(day>120 && day<=151){
  534.             month="May";
  535.             date=day-120;
  536.         }else if(day>151 && day<=181){
  537.             month="June";
  538.             date=day-151;
  539.         }else if(day>181 && day<=212){
  540.             month="July";
  541.             date=day-181;
  542.         }else if(day>212 && day<=243){
  543.             month="August";
  544.             date=day-212;
  545.         }else if(day>243 && day<=273){
  546.             month="September";
  547.             date=day-243;
  548.         }else if(day>273 && day<=304){
  549.             month="October";
  550.             date=day-273;
  551.         }else if(day>304 && day<=334){
  552.             month="November"
  553.             date=day-304;
  554.         }else if(day>334 && day<=365){
  555.             month="December";
  556.             date=day-334;
  557.         }else{
  558.             month="January";
  559.             date='1';
  560.         }
  561.    
  562.         var array=month+','+String(date);
  563.         return array;    
  564.     },
  565.    
  566.     getEberronDate = function(options){
  567.         var day = Number(options);
  568.         var date;
  569.         var month;
  570.        
  571.         if(day<=28){
  572.             month = 'Zarantyr';
  573.             date = day;
  574.         }else if(day<=56){
  575.             month = 'Olarune';
  576.             date = day-28;
  577.         }else if(day<=84){
  578.             month = 'Therendor';
  579.             date = day-56;
  580.         }else if(day<=112){
  581.             month = 'Eyre';
  582.             date = day-84;
  583.         }else if(day<=140){
  584.             month = 'Dravago';
  585.             date = day-112;
  586.         }else if(day<=168){
  587.             month = 'Nymm';
  588.             date = day-140;
  589.         }else if(day<=196){
  590.             month = 'Lharvion';
  591.             date = day-168;
  592.         }else if(day<=224){
  593.             month = 'Rhaan';
  594.             date = day-196;
  595.         }else if(day<=252){
  596.             month = 'Sypheros';
  597.             date = day-224;
  598.         }else if(day<=280){
  599.             month = 'Aryth';
  600.             date = day-252;
  601.         }else if(day<=308){
  602.             month = 'Vult';
  603.             date = day-280;
  604.         }else{
  605.             month = 'Zarantyr';
  606.             date = 1;
  607.         }
  608.        
  609.         var array=month+','+String(date);
  610.         return array;
  611.     },
  612.    
  613.     getFaerunOrdinal = function(options){
  614.         var args = options.content.split(",");
  615.         var date = args[1];
  616.         var month = args[2];
  617.         var ordinal = state.Calendar.now.ordinal;
  618.        
  619.         if(date == 'festival'){
  620.             date = 1;
  621.         }else{
  622.             date = Number(args[1]);
  623.         }
  624.        
  625.         switch(month) {
  626.             case 'Hammer':
  627.                 ordinal = date;
  628.                 break;
  629.             case 'Midwinter':
  630.                 ordinal = 31;
  631.                 break;
  632.             case 'Alturiak':
  633.                 ordinal = 31+date;
  634.                 break;
  635.             case 'Ches':
  636.                 ordinal = 61+date;
  637.                 break;
  638.             case 'Tarsakh':
  639.                 ordinal = 91+date;
  640.                 break;
  641.             case 'Greengrass':
  642.                 ordinal = 122;
  643.                 break;
  644.             case 'Mirtul':
  645.                 ordinal = 122+date;
  646.                 break;
  647.             case 'Kythorn':
  648.                 ordinal = 152+date;
  649.                 break;
  650.             case 'Flamerule':
  651.                 ordinal = 182+date;
  652.                 break;
  653.             case 'Midsummer':
  654.                 ordinal = 213;
  655.                 break;
  656.             case 'Sheildmeet':
  657.                 ordinal = 214;
  658.                 break;
  659.             case 'Eleasias':
  660.                 ordinal = 214+date;
  661.                 break;
  662.             case 'Eleint':
  663.                 ordinal = 244+date;
  664.                 break;
  665.             case 'Highharvestide':
  666.                 ordinal = 275;
  667.                 break;
  668.             case 'Marpenoth':
  669.                 ordinal = 275+date;
  670.                 break;
  671.             case 'Uktar':
  672.                 ordinal = 305+date;
  673.                 break;
  674.             case 'Feast of the Moon':
  675.                 ordinal = 335+date;
  676.                 break;
  677.             case 'Nightal':
  678.                 ordinal = 336+date;
  679.                 break;
  680.             }
  681.         state.Calendar.now.ordinal = ordinal;
  682.     },
  683.    
  684.     getGreyhawkOrdinal = function(options){
  685.         var args = options.content.split(",");
  686.         var date = args[1];
  687.         var month = args[2];
  688.         var ordinal = state.Calendar.now.ordinal;
  689.        
  690.         if(date == 'festival'){
  691.             date = 1;
  692.         }else{
  693.             date = Number(args[1]);
  694.         }
  695.        
  696.         switch(month) {
  697.             case 'Needfest':
  698.                 ordinal = date;
  699.                 break;
  700.             case 'Fire Seek':
  701.                 ordinal = 7+date;
  702.                 break;
  703.             case 'Readying':
  704.                 ordinal = 35+date;
  705.                 break;
  706.             case 'Coldeven':
  707.                 ordinal = 63+date;
  708.                 break;
  709.             case 'Growfest':
  710.                 ordinal = 91+date;
  711.                 break;
  712.             case 'Planting':
  713.                 ordinal = 98+date;
  714.                 break;
  715.             case 'Flocktime':
  716.                 ordinal = 126+date;
  717.                 break;
  718.             case 'Wealsun':
  719.                 ordinal = 154+date;
  720.                 break;
  721.             case 'Richfest':
  722.                 ordinal = 182+date;
  723.                 break;
  724.             case 'Reaping':
  725.                 ordinal = 189+date;
  726.                 break;
  727.             case 'Goodmonth':
  728.                 ordinal = 217+date;
  729.                 break;
  730.             case 'Harvester':
  731.                 ordinal = 245+date;
  732.                 break;
  733.             case 'Brewfest':
  734.                 ordinal = 273+date;
  735.                 break;
  736.             case 'Patchwall':
  737.                 ordinal = 280+date;
  738.                 break;
  739.             case 'Readyreat':
  740.                 ordinal = 308+date;
  741.                 break;
  742.             case 'Sunsebb':
  743.                 ordinal = 336+date;
  744.                 break;
  745.             }
  746.         state.Calendar.now.ordinal = ordinal;
  747.     },
  748.    
  749.     getModernOrdinal = function(options){
  750.         var args = options.content.split(",");
  751.         var date = Number(args[1]);
  752.         var month = args[2];
  753.         var ordinal = state.Calendar.now.ordinal;
  754.        
  755.         switch(month) {
  756.             case 'January':
  757.                 ordinal = date;
  758.                 break;
  759.             case 'February':
  760.                 ordinal = 31+date;
  761.                 break;
  762.             case 'March':
  763.                 ordinal = 60+date;
  764.                 break;
  765.             case 'April':
  766.                 ordinal = 91+date;
  767.                 break;
  768.             case 'May':
  769.                 ordinal = 121+date;
  770.                 break;
  771.             case 'June':
  772.                 ordinal = 152+date;
  773.                 break;
  774.             case 'July':
  775.                 ordinal = 182+date;
  776.                 break;
  777.             case 'August':
  778.                 ordinal = 213+date;
  779.                 break;
  780.             case 'September':
  781.                 ordinal = 244+date;
  782.                 break;
  783.             case 'October':
  784.                 ordinal = 274+date;
  785.                 break;
  786.             case 'November':
  787.                 ordinal = 305+date;
  788.                 break;
  789.             case 'December':
  790.                 ordinal = 366+date;
  791.                 break;
  792.             }
  793.         state.Calendar.now.ordinal = ordinal;
  794.     },
  795.    
  796.     getEberronOrdinal = function(options){
  797.         var args = options.content.split(",");
  798.         var date = Number(args[1]);
  799.         var month = args[2];
  800.         var ordinal = state.Calendar.now.ordinal;
  801.        
  802.         switch(month) {
  803.             case 'Zarantyr':
  804.                 ordinal = date;
  805.                 break;
  806.             case 'Olarune':
  807.                 ordinal = 28+date;
  808.                 break;
  809.             case 'Therendor':
  810.                 ordinal = 56+date;
  811.                 break;
  812.             case 'Eyre':
  813.                 ordinal = 84+date;
  814.                 break;
  815.             case 'Dravago':
  816.                 ordinal = 112+date;
  817.                 break;
  818.             case 'Nymm':
  819.                 ordinal = 140+date;
  820.                 break;
  821.             case 'Lharvion':
  822.                 ordinal = 168+date;
  823.                 break;
  824.             case 'Barrakas':
  825.                 ordinal = 196+date;
  826.                 break;
  827.             case 'Rhaan':
  828.                 ordinal = 224+date;
  829.                 break;
  830.             case 'Sypheros':
  831.                 ordinal = 252+date;
  832.                 break;
  833.             case 'Aryth':
  834.                 ordinal = 280+date;
  835.                 break;
  836.             case 'Vult':
  837.                 ordinal = 308+date;
  838.                 break;
  839.             }
  840.         state.Calendar.now.ordinal = ordinal;
  841.     },
  842.    
  843.     addday = function(no){
  844.         var leap = checkLeap();
  845.         var days = Number(no);
  846.         var ordinal = Number(state.Calendar.now.ordinal);
  847.         var world = Number(state.Calendar.now.world);
  848.         var div = state.Calendar.now.divider;
  849.        
  850.         if(div!=0){
  851.             state.Calendar.now.down = Number(state.Calendar.now.down)+days;
  852.         }
  853.        
  854.         var newordinal = ordinal+days;
  855.        
  856.         switch(world){
  857.             case 1:
  858.                 if(leap==0 && ordinal <= 214 && newordinal >= 214){
  859.                     state.Calendar.now.ordinal = newordinal+1;
  860.                 }else{
  861.                     state.Calendar.now.ordinal = newordinal;
  862.                 }
  863.                
  864.                 if(newordinal>366){
  865.                     state.Calendar.now.ordinal=newordinal-366;
  866.                     state.Calendar.now.year = Number(state.Calendar.now.year)+1;
  867.                 }
  868.                 break;
  869.             case 2:
  870.                 if(newordinal>364){
  871.                     state.Calendar.now.ordinal=newordinal-364;
  872.                     state.Calendar.now.year = Number(state.Calendar.now.year)+1;
  873.                 }else{
  874.                     state.Calendar.now.ordinal = newordinal;
  875.                 }
  876.                 break;
  877.             case 3:
  878.                 if(leap==0 && ordinal <= 60 && newordinal >= 60){
  879.                     state.Calendar.now.ordinal = newordinal+1;
  880.                 }else{
  881.                     state.Calendar.now.ordinal = newordinal;
  882.                 }
  883.                
  884.                 if(newordinal>366){
  885.                     state.Calendar.now.ordinal=newordinal-366;
  886.                     state.Calendar.now.year = Number(state.Calendar.now.year)+1;
  887.                 }
  888.             case 4:
  889.                 state.Calendar.now.ordinal = newordinal;
  890.                 break;
  891.         }
  892.     },
  893.    
  894.    
  895.    
  896.     getsuffix = function(day) {
  897.        
  898.         var date = Number(day)
  899.         var suffix
  900.        
  901.         if (date == 1 || date == 21 ){
  902.             suffix = 'st';
  903.         }else if (date == 2 || date == 22){
  904.             suffix = 'nd';
  905.         }else if (date == 3 || date == 23){
  906.             suffix = 'rd';
  907.         }else{
  908.             suffix = 'th';
  909.         }
  910.        
  911.         return suffix;
  912.     },
  913.    
  914.     weather = function() {
  915.         var roll;
  916.         var temperature;
  917.         var wind;
  918.         var precipitation;
  919.         var season;
  920.         var ordinal = state.Calendar.now.ordinal;
  921.        
  922.         if(ordinal > 349 || ordinal <= 75){
  923.             season = 'Winter'
  924.         }else if(ordinal <= 166){
  925.             season = 'Spring'
  926.         }else if(ordinal <=257 ){
  927.             season = 'Summer'
  928.         }else if(ordinal <=349 ){
  929.             season = 'Fall'
  930.         }
  931.        
  932.         roll = Math.floor(Math.random()*(20-1+1)+1);
  933.         if(roll>=15 && roll<=17){
  934.             switch(season) {
  935.                 case 'Winter':
  936.                     temperature = 'It is a bitterly cold winter day. ';
  937.                     break;
  938.                 case 'Spring':
  939.                     temperature = 'It is a cold spring day. ';
  940.                     break;
  941.                 case 'Summer':
  942.                     temperature = 'It is a cool summer day. ';
  943.                     break;
  944.                 case 'Fall':
  945.                     temperature = 'It is a cold fall day. ';
  946.                     break;
  947.             }
  948.         }else if(roll>=18 && roll<=20){
  949.             switch(season) {
  950.                 case 'Winter':
  951.                     temperature = 'It is a warm winter day. ';
  952.                     break;
  953.                 case 'Spring':
  954.                     temperature = 'It is a hot spring day. ';
  955.                     break;
  956.                 case 'Summer':
  957.                     temperature = 'It is a blisteringly hot summer day. ';
  958.                     break;
  959.                 case 'Fall':
  960.                     temperature = 'It is a hot fall day. ';
  961.                     break;
  962.             }
  963.         }else{
  964.             switch(season) {
  965.                 case 'Winter':
  966.                     temperature = 'It is a cold winter day. ';
  967.                     break;
  968.                 case 'Spring':
  969.                     temperature = 'It is a mild spring day. ';
  970.                     break;
  971.                 case 'Summer':
  972.                     temperature = 'It is a hot summer day. ';
  973.                     break;
  974.                 case 'Fall':
  975.                     temperature = 'It is a mild fall day. ';
  976.                     break;
  977.             }
  978.            
  979.         }
  980.        
  981.         roll = Math.floor(Math.random()*(20-1+1)+1);
  982.         if(roll>=15 && roll<=17){
  983.             wind='There is a light breeze and ';
  984.         }else if(roll>=18 && roll<=20){
  985.             wind='There is a howling wind and ';
  986.         }else{
  987.             wind='The air is still and ';
  988.         }
  989.        
  990.         roll = Math.floor(Math.random()*(20-1+1)+1);
  991.         if(roll>=15 && roll<=17){
  992.             precipitation="Light rain or snow.";
  993.             if(season=='Winter'){
  994.                 precipitation = 'snow falls softly on the ground.';
  995.             }else{
  996.                 precipitation = 'a light rain falls from the sky.';
  997.             }
  998.         }else if(roll>=18 && roll<=20){
  999.             if(season=='Winter'){
  1000.                 precipitation = 'snow falls thick and fast from the sky.';
  1001.             }else{
  1002.                 precipitation = 'a torrential rain begins to fall.';
  1003.             }
  1004.         }else{
  1005.             roll = Math.floor(Math.random()*(2-1+1)+1);
  1006.             if(roll=1){
  1007.                 precipitation = 'the sky is overcast.';
  1008.             }else{
  1009.                 precipitation = 'the sky is clear.';
  1010.             }
  1011.         }
  1012.        
  1013.         var forecast=temperature+wind+precipitation;
  1014.         state.Calendar.now.weather = forecast;
  1015.     },
  1016.    
  1017.     getFaerunMoon = function() {
  1018.         var year = state.Calendar.now.year;
  1019.         var ordinal = Number(state.Calendar.now.ordinal);
  1020.         var moonOrdinal;
  1021.         var moon;
  1022.        
  1023.         var remainder = year/4 - Math.floor(year/4);
  1024.         if(remainder==0.25) {
  1025.             moonOrdinal=ordinal;
  1026.         }else if (remainder==0.5) {
  1027.             moonOrdinal=ordinal+365;
  1028.         }else if (remainder==0.75) {
  1029.             moonOrdinal=ordinal+730;
  1030.         }else if (remainder==0) {
  1031.             moonOrdinal=ordinal+1095;
  1032.         }
  1033.        
  1034.         var today = ordinal/30.4375 - Math.floor(ordinal/30.4375);
  1035.         var tomorrow = (ordinal+1)/30.4375 - Math.floor((ordinal+1)/30.4375);
  1036.         var perc = today + ',' + tomorrow + ',' + moonOrdinal;
  1037.        
  1038.         moon = 'Moon: ' + getMoon(perc);
  1039.        
  1040.         return moon;
  1041.     },
  1042.    
  1043.     getGreyhawkMoon = function() {
  1044.         var ordinal = Number(state.Calendar.now.ordinal);
  1045.         var today;
  1046.         var tomorrow;
  1047.         var LunaOrd = ordinal + 10;
  1048.         var CeleneOrd = ordinal + 87;
  1049.        
  1050.         today = LunaOrd/28 - Math.floor(LunaOrd/28);
  1051.         tomorrow = (LunaOrd+1)/28 - Math.floor((LunaOrd+1)/28);
  1052.         var perc = today + ',' + tomorrow + ',' + 0;
  1053.         var Luna = getMoon(perc);
  1054.        
  1055.         today = CeleneOrd/91 - Math.floor(CeleneOrd/91);
  1056.         tomorrow = (CeleneOrd+1)/91 - Math.floor((CeleneOrd+1)/91);
  1057.         perc = today + ',' + tomorrow + ',' + 0;
  1058.         var Celene = getMoon(perc)
  1059.        
  1060.         var moon = 'Luna: '+Luna+'<br>Celene: '+Celene;
  1061.        
  1062.         return moon;
  1063.     },
  1064.    
  1065.     getMoon = function(perc) {
  1066.         var args  = perc.split(',');
  1067.         var today = args[0];
  1068.         var tomorrow = args[1];
  1069.         var moonOrdinal = args[2];
  1070.         var moon;
  1071.        
  1072.         if(today==0 || tomorrow<today || moonOrdinal==1){
  1073.             moon = 'Full Moon'
  1074.         }else if(today<=0.25 && tomorrow>0.25){
  1075.             moon = 'Last Quarter';
  1076.         }else if(today<0.25){
  1077.             moon = 'Waning Gibbous';
  1078.         }else if(today<=0.5 && tomorrow>0.5){
  1079.             moon = 'New Moon';
  1080.         }else if(today<0.5){
  1081.             moon = 'Waning Crescent';
  1082.         }else if(today<=0.75 && tomorrow>0.75){
  1083.             moon = 'First Quarter';
  1084.         }else if(today<0.75){
  1085.             moon = 'Waxing Crescent';
  1086.         }else{
  1087.             moon = 'Waxing Gibbous';
  1088.         }
  1089.        
  1090.         return moon;
  1091.     },
  1092.    
  1093.     checkInstall = function() {
  1094.         if(typeof state.Calendar == "undefined"){
  1095.             setDefaults();
  1096.         }
  1097.        
  1098.         if ( state.Calendar.now.version != version ){
  1099.             checkDefaults();
  1100.         }
  1101.     },
  1102.    
  1103.     registerEventHandlers = function() {
  1104.         on('chat:message', handleInput);
  1105.     };
  1106.  
  1107.     return {
  1108.         CheckInstall: checkInstall,
  1109.         RegisterEventHandlers: registerEventHandlers
  1110.     };
  1111.    
  1112. }());
  1113.  
  1114. on("ready",function(){
  1115.     'use strict';
  1116.     Calendar.CheckInstall();
  1117.     Calendar.RegisterEventHandlers();
  1118. });
Advertisement
Add Comment
Please, Sign In to add comment