From bd6d0da7d02572fdae1aa79a77cab95ddabe4ca0 Mon Sep 17 00:00:00 2001 From: Julexar Date: Thu, 11 Apr 2024 11:06:56 +0200 Subject: [PATCH 1/3] Updated Multi-World Calendar to 1.1 --- Multi-World Calendar/1.1/mwcal.js | 1461 +++++++++++++++++++++++++++++ Multi-World Calendar/mwcal.js | 945 ++++++++++--------- Multi-World Calendar/script.json | 4 +- 3 files changed, 1988 insertions(+), 422 deletions(-) create mode 100644 Multi-World Calendar/1.1/mwcal.js diff --git a/Multi-World Calendar/1.1/mwcal.js b/Multi-World Calendar/1.1/mwcal.js new file mode 100644 index 000000000..9bca792d1 --- /dev/null +++ b/Multi-World Calendar/1.1/mwcal.js @@ -0,0 +1,1461 @@ +/* +Calendar for Eberron, Faerun, Greyhawk, Modern and Tal'Dorei Settings +Original by Kirsty (https://app.roll20.net/users/1165285/kirsty) +Rewritten by Julexar (https://app.roll20.net/users/9989180/julexar) + +GM Commands: +!mwcal +Displays the Calendar Menu + --world --{Eberron|Faerun|Greyhawk|Modern|Tal'Dorei} + Switches the calendar to the selected world + --setday --{Insert Number} + Sets the current day to the number you input + --setmonth --{Insert Number} + Sets the current month to the number you input + --setyear --{Insert Number} + Sets the current year to the number you input + --settime --hour --{Insert Number} --minute --{Insert Number} + Sets the current time to the numbers you input + --advance --{Insert Number} --{short rest, long rest, hour, minute, day, week, month, year} + Advances the calendar by the number/type you input + --weather + Randomises the Weather + --toggle + Toggles the Weather Display + --moon + Resets the Moon Phase + --phase --{Insert Name/Number} (--phase2 --{Insert Name/Number}) + Sets the Moon Phase to the name/number you input (second phase for Eberron) + --toggle + Toggles the Moon Display + --show + Displays the Calendar to the Players + --reset + Resets the Calendar to the Default Values + +!month --{Insert Name/Number} --{Insert Name} +Renames a Month to the Name you input + +!alarm +Displays the Alarm Menu + --{Insert Number} + Displays the Alarm Menu for the Alarm you input + --settitle --{Insert Title} + Sets the Title of the Alarm + --setdate --{Insert Date} + Sets the Date of the Alarm (Format: DD.MM.YYYY) + --settime --{Insert Time} + Sets the Time of the Alarm (Format: HH:MM [24h]) + --setmessage --{Insert Message} + Sets the Message of the Alarm + --new + Opens the Alarm Creator + --title --{Insert Title} + Sets the Title of the Alarm + --date --{Insert Date} + Sets the Date of the Alarm (Format: DD.MM.YYYY) + --time --{Insert Time} + Sets the Time of the Alarm (Format: HH:MM [24h]) + --message --{Insert Message} + --delete --{Insert Number} + Deletes the Alarm you input + --reset + Resets the Alarms to the Default Values + +Player Commands: +!mwcal +Displays the Calendar to the Players +*/ + +const styles = { + divMenu: 'style="width: 300px; border: 1px solid black; background-color: #ffffff; padding: 5px;"', + divButton: 'style="text-align:center;"', + buttonSmall: + 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 75px;', + buttonMedium: + 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 100px;', + buttonLarge: + 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 150px;', + table: 'style="text-align:center; font-size: 12px; width: 100%; border-style: 3px solid #cccccc;"', + arrow: '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;"', + header: 'style="color: rgb(126, 45, 64); font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"', + sub: 'style="font-size: 11px; line-height: 13px; margin-top: -3px; font-style: italic;"', + tdReg: 'style="text-align: right;"', + trTab: 'style="text-align: left; border-bottom: 1px solid #cccccc;"', + tdTab: 'style="text-align: center; border-right: 1px solid #cccccc;"', + span: 'style="display: inline; width: 10px; height: 10px; padding: 1px; border: 1px solid black; background-color: white;"', +}; + +const moonPhases = [ + 'Full Moon', + 'Waning Gibbous', + 'Last Quarter', + 'Waning Crescent', + 'New Moon', + 'Waxing Crescent', + 'First Quarter', + 'Waxing Gibbous', +]; + +const monthNames = [ + ['Hammer', 'Alturiak', 'Ches', 'Tarsakh', 'Mirtul', 'Kythorn', 'Flamerule', 'Eleasis', 'Eleint', 'Marpenoth', 'Uktar', 'Nightal'], + ['Zarantyr', 'Olarune', 'Therendor', 'Eyre', 'Dravago', 'Nymm', 'Lharvion', 'Barrakas', 'Rhaan', 'Sypheros', 'Aryth', 'Vult'], + [ + 'Needfest', + 'Fireseek', + 'Readying', + 'Coldeven', + 'Growfest', + 'Planting', + 'Flocktime', + 'Wealsun', + 'Richfest', + 'Reaping', + 'Goodmonth', + 'Harvester', + 'Brewfest', + 'Patchwall', + "Ready'reat", + 'Sunsebb', + ], + ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + ['Horisal', 'Misuthar', 'Dualahei', 'Thunsheer', 'Unndilar', 'Brussendar', 'Sydenstar', 'Fessuran', "Quen'pillar", 'Cuersaar', 'Duscar'], +]; + +class MultiWorldCalendar { + static style = styles; + static world = 0; + static moons = moonPhases; + static months = monthNames; + static alarms = [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei]; + static worlds = ['faerun', 'eberron', 'greyhawk', 'modern', "Tal'Dorei"]; + + static handleInput(msg) { + const args = msg.content.split(/\s+--/); + + if (msg.type !== 'api') return; + + if (playerIsGM(msg.playerid)) { + switch (args[0]) { + case '!mwcal': + switch (args[1]) { + default: + chkAlarms(); + calendarMenu(); + break; + case 'setday': + const day = parseInt(args[2]); + + if (isNaN(day)) return sendChat('Multi-World Calendar', 'Please input a valid number for the day.'); + + setDay(day); + chkAlarms(); + calendarMenu(); + break; + case 'setmonth': + const month = args[2]; + + if (!monthNames[mwcal.world].includes(month)) return sendChat('Multi-World Calendar', 'Please input a valid month.'); + + setMonth(month); + chkAlarms(); + calendarMenu(); + break; + case 'setyear': + const year = parseInt(args[2]); + + if (isNaN(year)) return sendChat('Multi-World Calendar', 'Please input a valid number for the year.'); + + setYear(year); + chkAlarms(); + calendarMenu(); + break; + case 'settime': + const hour = parseInt(args[3]); + const minute = parseInt(args[5]); + + if (isNaN(hour) || isNaN(minute)) return sendChat('Multi-World Calendar', 'Please input a valid number for the time.'); + + setHour(hour); + setMinute(minute); + chkAlarms(); + calendarMenu(); + break; + case 'advance': + const amount = parseInt(args[2]); + const type = args[3]; + + if (isNaN(amount)) return sendChat('Multi-World Calendar', 'Please input a valid number for the amount.'); + if (!['Short Rest', 'Long Rest', 'Hour', 'Minute', 'Day', 'Week', 'Month', 'Year'].includes(type)) + return sendChat('Multi-World Calendar', 'Please input a valid type.'); + + advance(amount, type); + chkAlarms(); + calendarMenu(); + break; + case 'weather': + if (args[2] === 'toggle') { + toggleWeather(); + calendarMenu(); + } else { + randomizeWeather(); + calendarMenu(); + } + break; + case 'moon': + if (args[2] === 'toggle') { + toggleMoon(); + calendarMenu(); + } else { + const phase = args[2]; + const phase2 = args[4]; + + updMoon(phase, phase2); + calendarMenu(); + } + break; + case 'show': + showCalendar(); + break; + case 'reset': + setMWCalDefaults(); + calendarMenu(); + break; + } + break; + case '!month': + setMonthName(args[1], args[2]); + break; + case '!alarm': + switch (args[1]) { + case undefined: + alarmMenu(); + break; + default: + const num = parseInt(args[1]); + + if (isNaN(num)) return sendChat('Multi-World Calendar', 'Please input a valid number for the alarm.'); + + switch (args[2]) { + case 'settitle': + setTitle(num, args[3]); + break; + case 'setdate': + setDate(num, args[3]); + break; + case 'settime': + setTime(num, args[3]); + break; + case 'setmessage': + setMessage(num, args[3]); + break; + } + + alarmMenu(num); + break; + case 'new': + createAlarm(args[2], args[4], args[6], args[8]); + break; + case 'delete': + deleteAlarm(args[2]); + alarmMenu(); + break; + case 'reset': + setAlarmDefaults(); + alarmMenu(); + break; + } + break; + } + } else { + if (args[0] === '!mwcal') { + showCalendar(); + } + } + } + + static checkInstall() { + if (!state.mwcal) { + setMECalDefaults(); + } + + if (!state.alarms) { + setAlarmDefaults(); + } + } + + static registerEventHandlers() { + on('chat:message', this.handleInput); + log('Multi-World Calendar - Registered Event Handlers!'); + } +} + +const mwcal = MultiWorldCalendar; + +function setMWCalDefaults() { + state.mwcal = [ + { + name: 'Faerun', + ord: 1, + year: 1486, + day: 1, + month: 1, + hour: 1, + minute: 0, + weather: 'It is a cool but sunny day', + moon: 'Full Moon', + mtype: true, + wtype: true, + }, + { + name: 'Eberron', + ord: 1, + year: 998, + day: 1, + month: 1, + hour: 1, + minute: 0, + weather: 'It is a cool but sunny day', + moon: 'Luna: Full, Celene: Full', + mtype: true, + wtype: true, + }, + { + name: 'Greyhawk', + ord: 1, + year: 591, + day: 1, + month: 1, + hour: 1, + minute: 0, + weather: 'It is a cool but sunny day', + moon: 'Full Moon', + mtype: true, + wtype: true, + }, + { + name: 'Modern', + ord: 1, + year: 2020, + day: 1, + month: 1, + hour: 1, + minute: 0, + weather: 'It is a cool but sunny day', + moon: 'Full Moon', + mtype: true, + wtype: true, + }, + { + name: "Tal'Dorei", + ord: 1, + year: 812, + day: 1, + month: 1, + hour: 1, + minute: 0, + weather: 'It is a cool but sunny day', + moon: 'Full Moon', + mtype: true, + wtype: true, + }, + ]; + + log('Multi-World Calendar - Successfully registered Calendar Defaults!'); +} + +function setAlarmDefaults() { + state.alarms = { + faerun: [], + eberron: [], + greyhawk: [], + modern: [], + talDorei: [], + }; + + log('Multi-World Calendar - Successfully registered Alarm Defaults!'); +} + +function updOrdinal() { + switch (mwcal.world) { + case 0: + state.mwcal[0].ord = 30 * (state.mwcal[0].month - 1) + state.mwcal[0].day; + break; + case 1: + state.mwcal[1].ord = 28 * (state.mwcal[1].month - 1) + state.mwcal[1].day; + break; + case 2: + const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; + state.mwcal[2].ord = grhwkDays.slice(0, state.mwcal[2].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[2].day; + break; + case 3: + const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + state.mwcal[3].ord = modernDays.slice(0, state.mwcal[3].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[3].day; + break; + case 4: + const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; + state.mwcal[4].ord = talDays.slice(0, state.mwcal[4].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[4].day; + break; + } +} + +function setWorld(world) { + if (!mwcal.worlds.includes(world.toLowerCase())) + return sendChat('Multi-World Calendar', 'Invalid World. Please make sure to either use the correct Name!'); + + mwcal.world = mwcal.worlds.indexOf(world.toLowerCase()); +} + +function getSuffix() { + const ordinal = state.mwcal[mwcal.world].ord; + + if (ordinal >= 11 && ordinal <= 13) return 'th'; + + switch (ordinal % 10) { + case 1: + return 'st'; + case 2: + return 'nd'; + case 3: + return 'rd'; + default: + return 'th'; + } +} + +function updDate() { + const world = mwcal.world; + const ordinal = state.mwcal[world].ord; + let date, month; + + switch (world) { + case 0: + if (Math.ceil(ordinal / 30) <= 1) { + month = monthNames[0][0]; + date = ordinal; + } else { + month = monthNames[0][Math.ceil(ordinal / 30) - 1]; + date = ordinal - (Math.ceil(ordinal / 30) - 1) * 30; + } + break; + case 1: + if (Math.ceil(ordinal / 28) <= 1) { + month = monthNames[1][0]; + date = ordinal; + } else { + month = monthNames[1][Math.ceil(ordinal / 28) - 1]; + date = ordinal - (Math.ceil(ordinal / 28) - 1) * 28; + } + break; + case 2: + const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; + const grhwkDay = grhwkDays[state.mwcal[world].month - 1]; + if (Math.ceil(ordinal / grhwkDay) <= 1) { + month = monthNames[2][0]; + date = ordinal; + } else { + month = monthNames[2][Math.ceil(ordinal / grhwkDay) - 1]; + date = ordinal - (Math.ceil(ordinal / grhwkDay) - 1) * grhwkDay; + } + break; + case 3: + const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + const modDay = modernDays[state.mwcal[world].month - 1]; + + if (Math.ceil(ordinal / modDay) <= 1) { + month = monthNames[3][0]; + date = ordinal; + } else { + month = monthNames[3][Math.ceil(ordinal / modDay) - 1]; + date = ordinal - (Math.ceil(ordinal / modDay) - 1) * modDay; + } + break; + case 4: + const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; + const talDay = talDays[state.mwcal[world].month - 1]; + + if (Math.ceil(ordinal / talDay) <= 1) { + month = monthNames[4][0]; + date = ordinal; + } else { + month = monthNames[4][Math.ceil(ordinal / talDay) - 1]; + date = ordinal - (Math.ceil(ordinal / talDay) - 1) * talDay; + } + break; + } + + setMonth(month); + setDay(date); +} + +function setDay(day) { + state.mwcal[mwcal.world].day = day; + updOrdinal(); +} + +function getMonth() { + const month = state.mwcal[mwcal.world].month; + return mwcal.months[mwcal.world][month - 1]; +} + +function setMonth(month) { + const months = mwcal.months[mwcal.world]; + state.mwcal[mwcal.world].month = months.indexOf(month) + 1; + updOrdinal(); +} + +function setMonthName(month, name) { + const monnum = mwcal.months[mwcal.world].indexOf(month); + mwcal.months[mwcal.world][monnum] = name; + monthNames = mwcal.months; +} + +function setYear(year) { + state.mwcal[mwcal.world].year = year; +} + +function getHour() { + if (state.mwcal[mwcal.world].hour < 10) return `0${state.mwcal[mwcal.world].hour}`; + return state.mwcal[mwcal.world].hour; +} + +function setHour(hour) { + state.mwcal[mwcal.world].hour = hour; +} + +function getMinute() { + if (state.mwcal[mwcal.world].minute < 10) return `0${state.mwcal[mwcal.world].minute}`; + return state.mwcal[mwcal.world].minute; +} + +function setMinute(minute) { + state.mwcal[mwcal.world].minute = minute; +} + +function updMoon(phase, phase2) { + if (!phase) { + const ordinal = state.mwcal[mwcal.world].ord; + const year = state.mwcal[mwcal.world].year; + const remainder = year / 4 - Math.floor(year / 4); + + let moonArray = []; + + switch (mwcal.world) { + default: + switch (remainder) { + default: + moonArray = getMoonArray(1); + break; + case 0.25: + moonArray = getMoonArray(2); + break; + case 0.5: + moonArray = getMoonArray(3); + break; + case 0.75: + moonArray = getMoonArray(4); + break; + } + + const moonNum = moonArray.split(','); + getMoon(moonNum[ordinal % 8]); + break; + case 1: + moonArray = getMoonArray(); + const lunaNum = moonArray[0].split(','); + const celeneNum = moonArray[1].split(','); + getMoon(lunaNum[ordinal % 8], celeneNum[ordinal % 8]); + break; + } + } else { + if (phase2) { + state.mwcal[mwcal.world].moon = `Luna: ${phase}, Celene: ${phase2}`; + } else { + state.mwcal[mwcal.world].moon = phase; + } + } +} + +function getMoonArray(num) { + let moonArray; + + switch (mwcal.world) { + default: + switch (num) { + case 1: + moonArray = + '0,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,4,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1'; + break; + case 2: + moonArray = + '0,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,0,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1'; + break; + case 3: + moonArray = + '0,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,0,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1'; + break; + case 4: + moonArray = + '0,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,0,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16'; + break; + } + break; + case 1: + moonArray = [ + '0,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7', + '0,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16', + ]; + break; + } + + return moonArray; +} + +function getMoon(num, num2) { + if (num2) { + updMoon(getMoonPhase(num), getMoonPhase(num2)); + } else { + updMoon(getMoonPhase(num)); + } +} + +function getMoonPhase(input) { + if (!isNaN(input)) { + input = Number(input); + if (input >= 0 && input <= 16) return moonPhases[Math.floor((input + 1) / 2)]; + } else if (typeof input === 'string') { + const lowerCaseInput = input.toLowerCase(); + const index = moonPhases.findIndex(phase => phase.toLowerCase() === lowerCaseInput); + if (index !== -1) return moonPhases[index]; + } + return undefined; +} + +function randomizeWeather() { + let temp, wind, season, precip; + const ordinal = state.mwcal[mwcal.world].ord; + + switch (ordinal) { + case ordinal > 325 || ordinal <= 70: + season = 'Winter'; + break; + case ordinal <= 165: + season = 'Spring'; + break; + case ordinal <= 255: + season = 'Summer'; + break; + case ordinal <= 325: + season = 'Fall'; + break; + } + + let rand = randomInteger(21); + + switch (rand) { + case rand >= 15 && rand <= 17: + wind = 'the wind is blowing strongly '; + + switch (season) { + case 'Winter': + temp = 'It is a bitterly cold winter day, '; + break; + case 'Spring': + temp = 'It is a cold spring day, '; + break; + case 'Summer': + temp = 'It is a cool summer day, '; + break; + case 'Fall': + temp = 'It is a cold fall day, '; + break; + } + break; + case rand >= 18 && rand <= 20: + wind = 'the wind is blowing gently '; + + switch (season) { + case 'Winter': + temp = 'It is a mild winter day, '; + break; + case 'Spring': + temp = 'It is a hot spring day, '; + break; + case 'Summer': + temp = 'It is a blisteringly hot summer day, '; + break; + case 'Fall': + temp = 'It is a hot fall day, '; + break; + } + break; + default: + wind = 'there is no wind '; + switch (season) { + case 'Winter': + temp = 'It is a cold winter day, '; + break; + case 'Spring': + temp = 'It is a warm spring day, '; + break; + case 'Summer': + temp = 'It is a hot summer day, '; + break; + case 'Fall': + temp = 'It is a cool fall day, '; + break; + } + break; + } + + rand = randomInteger(21); + + switch (rand) { + case rand >= 15 && rand <= 17: + switch (season) { + case 'Winter': + precip = 'and snow falls softly from the sky.'; + break; + default: + precip = 'and it is raining lightly.'; + break; + } + break; + case rand >= 18 && rand <= 20: + switch (season) { + case 'Winter': + precip = 'and snow falls heavily from the sky.'; + break; + default: + precip = 'and a torrential rain is falling.'; + break; + } + break; + default: + switch (randomInteger(2)) { + case 1: + precip = 'and the sky is clear.'; + break; + default: + precip = 'and the sky is overcast.'; + break; + } + break; + } + + state.mwcal[mwcal.world].weather = `${temp}${wind}${precip}`; +} + +function toggleWeather() { + state.mwcal[mwcal.world].wtype = !state.mwcal[mwcal.world].wtype; +} + +function toggleMoon() { + state.mwcal[mwcal.world].mtype = !state.mwcal[mwcal.world].mtype; +} + +function calendarMenu() { + updDate(); + + const suffix = getSuffix(); + const day = state.mwcal[mwcal.world].day; + const month = getMonth(); + const year = state.mwcal[mwcal.world].year; + const hour = getHour(); + const minute = getMinute(); + const weather = state.mwcal[mwcal.world].wtype ? state.mwcal[mwcal.world].weather : null; + const moon = state.mwcal[mwcal.world].mtype ? state.mwcal[mwcal.world].moon : null; + const months = mwcal.months[mwcal.world].join('|'); + + switch (weather) { + default: + switch (moon) { + default: + switch (mwcal.world) { + default: + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Weather
` + //-- + `
Randomize Moon Phase
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `
` + ); + break; + case 1: + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Weather
` + //-- + `
Randomize Moon Phase
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `
` + ); + break; + } + break; + case null: + switch (mwcal.world) { + default: + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Weather
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `
` + ); + break; + case 1: + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Weather
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `
` + ); + break; + } + break; + } + break; + case null: + switch (moon) { + default: + switch (mwcal.world) { + default: + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Moon Phase
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `
` + ); + break; + case 1: + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Moon Phase
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `
` + ); + break; + } + break; + case null: + switch (mwcal.world) { + default: + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `
` + ); + break; + case 1: + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `
` + ); + break; + } + break; + } + break; + } +} + +function showCalendar() { + updDate(); + + const suffix = getSuffix(); + const day = state.mwcal[mwcal.world].day; + const month = getMonth(); + const year = state.mwcal[mwcal.world].year; + const hour = getHour(); + const minute = getMinute(); + const weather = state.mwcal[mwcal.world].wtype ? state.mwcal[mwcal.world].weather : null; + const moon = state.mwcal[mwcal.world].mtype ? state.mwcal[mwcal.world].moon : null; + + switch (weather) { + default: + switch (moon) { + default: + sendChat( + 'Multi-World Calendar', + `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Today\'s Weather: ${weather}
` + //-- + `
Moon Phase: ${moon}` + //-- + `
` + ); + break; + case null: + sendChat( + 'Multi-World Calendar', + `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Today\'s Weather: ${weather}
` + //-- + `
` + ); + break; + } + break; + case null: + switch (moon) { + default: + sendChat( + 'Multi-World Calendar', + `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Moon Phase: ${moon}` + //-- + `
` + ); + break; + case null: + sendChat( + 'Multi-World Calendar', + `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
` + ); + break; + } + break; + } +} + +function advance(amount, type) { + let ordinal = state.mwcal[mwcal.world].ord; + const month = state.mwcal[mwcal.world].month; + let year = state.mwcal[mwcal.world].year; + let hour = state.mwcal[mwcal.world].hour; + let minute = state.mwcal[mwcal.world].minute; + + switch (type.toLowerCase()) { + case 'short rest': + hour += amount; + break; + case 'long rest': + hour += amount * 8; + break; + case 'minute': + minute += amount; + break; + case 'hour': + hour += amount; + break; + case 'day': + ordinal += amount; + break; + case 'week': + ordinal += amount * 7; + break; + case 'month': + switch (mwcal.world) { + case 0: + ordinal += amount * 30; + break; + case 1: + ordinal += amount * 28; + break; + case 2: + const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; + for (let i = month; i < month + amount; i++) { + if (i > grhwkDays.length) { + ordinal += grhwkDays[i - grhwkDays.length]; + } else { + ordinal += grhwkDays[i]; + } + } + break; + case 3: + const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + for (let i = month; i < month + amount; i++) { + if (i > modernDays.length) { + ordinal += modernDays[i - modernDays.length]; + } else { + ordinal += modernDays[i]; + } + } + break; + case 4: + const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; + for (let i = month; i < month + amount; i++) { + if (i > talDays.length) { + ordinal += talDays[i - talDays.length]; + } else { + ordinal += talDays[i]; + } + } + break; + } + + updDate(); + break; + case 'year': + year += amount; + break; + } + + while (minute >= 60) { + hour++; + minute -= 60; + } + + while (hour >= 24) { + ordinal++; + hour -= 24; + } + + switch (mwcal.world) { + case 0: + while (ordinal > 360) { + ordinal -= 360; + year++; + } + break; + case 1: + while (ordinal > 336) { + ordinal -= 364; + year++; + } + break; + case 2: + while (ordinal > 364) { + ordinal -= 365; + year++; + } + break; + case 3: + while (ordinal > 365) { + ordinal -= 365; + year++; + } + break; + case 4: + while (ordinal > 328) { + ordinal -= 328; + year++; + } + break; + } + + state.mwcal[mwcal.world].ord = ordinal; + setHour(hour); + setMinute(minute); + setYear(year); + updDate(); +} + +function alarmMenu(num) { + const alarm = state.alarms[mwcal.world][num]; + const list = []; + const len = state.alarms[mwcal.world].length; + + if (!alarm) { + if (!len || len === 0) { + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `
No Alarms set
` + //-- + `

` + //-- + `
Create Alarm
` + //-- + `
Open Calendar
` + //-- + `
` + ); + } else { + for (let i = 0; i < len; i++) { + list.push(i); + } + + const alarmList = list.join('|'); + + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `
Alarm: Not selected
` + //-- + `

` + //-- + `
Create Alarm
` + //-- + `
Open Calendar
` + //-- + `
` + ); + } + } else { + for (let i = 0; i < len; i++) { + list.push(i); + } + + const alarmList = list.join('|'); + + const title = alarm.title; + const date = `${alarm.day}.${alarm.month}.${alarm.year}`; + const time = `${alarm.hour}:${alarm.minute}`; + const splitDate = date.split('.'); + const splitTime = time.split(':'); + const message = alarm.message; + + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
Alarm: ${title}
Title: ${title}
Date: ${date}
Time: ${time}
Message: ${message}
` + //-- + `

` + //-- + `
Set Message
` + //-- + `
Create Alarm
` + //-- + `
Delete Alarm
` + //-- + `
Open Calendar
` + //-- + `
` + ); + } +} + +function createAlarm(title, date, time, message) { + const splitDate = date.split('.'); + const splitTime = time.split(':'); + const alarm = { + title: title, + day: splitDate[0], + month: splitDate[1], + year: splitDate[2], + hour: splitTime[0], + minute: splitTime[1], + message: message, + }; + + state.alarms[mwcal.world].push(alarm); + + sendChat( + 'Multi-World Calendar'`/w gm Alarm #${state.alarms[mwcal.world].length - 1} created!\n` + //-- + `Title: ${title}\n` + //-- + `Date: ${date}\n` + //-- + `Time: ${time}\n` + //-- + `Message: ${message}` + ); + + alarmMenu(state.alarms[mwcal.world].length - 1); +} + +function setTitle(num, title) { + state.alarms[mwcal.world][num].title = title; + + sendChat('Multi-World Calendar', `/w gm Alarm #${num} title set to \"${title}\"`); +} + +function setDate(num, date) { + const splitDate = date.split('.'); + state.alarms[mwcal.world][num].day = splitDate[0]; + state.alarms[mwcal.world][num].month = splitDate[1]; + state.alarms[mwcal.world][num].year = splitDate[2]; + + sendChat('Multi-World Calendar', `/w gm Alarm #${num} date set to ${date}`); +} + +function setTime(num, time) { + const splitTime = time.split(':'); + state.alarms[mwcal.world][num].hour = splitTime[0]; + state.alarms[mwcal.world][num].minute = splitTime[1]; + + sendChat('Multi-World Calendar', `/w gm Alarm #${num} time set to ${time}`); +} + +function setMessage(num, message) { + state.alarms[mwcal.world][num].message = message; + + sendChat('Multi-World Calendar', `/w gm Alarm #${num} message set to \"${message}\"`); +} + +function deleteAlarm(num) { + state.alarms[mwcal.world].splice(num, 1); + + sendChat('Multi-World Calendar', `/w gm Alarm #${num} deleted`); +} + +function updAlarm(num) { + const alarm = state.alarms[mwcal.world][num]; + + if (!alarm) { + sendChat('Multi-World Calendar', '/w gm This Alarm does not exist!'); + } else { + const title = alarm.title; + const date = `${alarm.day}.${alarm.month}.${alarm.year}`; + const time = `${alarm.hour}:${alarm.minute}`; + const message = alarm.message; + + let hand = findObjs({ _type: 'handout', name: `Alarm #${num}` }, { caseInsensitive: true })[0]; + + if (!hand) { + hand = createObj('handout', { + name: `Alarm #${num}`, + }); + } + + hand.set( + 'notes', + `Title: ${title}\n` + //-- + `Date: ${date}\n` + //-- + `Time: ${time}\n` + //-- + `Message: ${message}` + ); + } +} + +function chkAlarms() { + const alarms = state.alarms[mwcal.world]; + if (alarms) { + alarms.forEach(alarm => { + if (alarm.hour) { + if ( + alarm.year === state.mwcal[mwcal.world].year && + alarm.month === state.mwcal[mwcal.world].month && + alarm.day >= state.mwcal[mwcal.world].day && + !(alarm.day >= state.mwcal[mwcal.world].day + 7) && + alarm.hour >= state.mwcal[mwcal.world].hour && + !(alarm.hour >= state.mwcal[mwcal.world].hour + 12) && + alarm.minute >= state.mwcal[mwcal.world].minute && + !(alarm.minute >= state.mwcal[mwcal.world].minute + 30) + ) { + const alarmNum = state.alarms[mwcal.world].indexOf(alarm); + + sendChat( + 'Multi-World Calendar', + `/w gm Alarm #${alarmNum} triggered!\n` + //-- + `Title: ${alarm.title}\n` + //-- + `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- + `Time: ${alarm.hour}:${alarm.minute}\n` + //-- + `Message: ${alarm.message}` + ); + + deleteAlarm(alarmNum); + } + } else { + if ( + alarm.year === state.mwcal[mwcal.world].year && + alarm.month === state.mwcal[mwcal.world].month && + alarm.day >= state.mwcal[mwcal.world].day && + !(alarm.day >= state.mwcal[mwcal.world].day + 7) + ) { + const alarmNum = state.alarms[mwcal.world].indexOf(alarm); + + sendChat( + 'Multi-World Calendar', + `/w gm Alarm #${alarmNum} triggered!\n` + //-- + `Title: ${alarm.title}\n` + //-- + `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- + `Message: ${alarm.message}` + ); + + deleteAlarm(alarmNum); + } + } + }); + } +} + +on('ready', () => { + mwcal.checkInstall(); + mwcal.registerEventHandlers(); +}); diff --git a/Multi-World Calendar/mwcal.js b/Multi-World Calendar/mwcal.js index 92af72b4e..9bca792d1 100644 --- a/Multi-World Calendar/mwcal.js +++ b/Multi-World Calendar/mwcal.js @@ -70,9 +70,12 @@ Displays the Calendar to the Players const styles = { divMenu: 'style="width: 300px; border: 1px solid black; background-color: #ffffff; padding: 5px;"', divButton: 'style="text-align:center;"', - buttonSmall: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 75px;', - buttonMedium: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 100px;', - buttonLarge: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 150px;', + buttonSmall: + 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 75px;', + buttonMedium: + 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 100px;', + buttonLarge: + 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 150px;', table: 'style="text-align:center; font-size: 12px; width: 100%; border-style: 3px solid #cccccc;"', arrow: '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;"', header: 'style="color: rgb(126, 45, 64); font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"', @@ -83,27 +86,51 @@ const styles = { span: 'style="display: inline; width: 10px; height: 10px; padding: 1px; border: 1px solid black; background-color: white;"', }; -const moonPhases = ['Full Moon', 'Waning Gibbous', 'Last Quarter', 'Waning Crescent', 'New Moon', 'Waxing Crescent', 'First Quarter', 'Waxing Gibbous']; +const moonPhases = [ + 'Full Moon', + 'Waning Gibbous', + 'Last Quarter', + 'Waning Crescent', + 'New Moon', + 'Waxing Crescent', + 'First Quarter', + 'Waxing Gibbous', +]; const monthNames = [ ['Hammer', 'Alturiak', 'Ches', 'Tarsakh', 'Mirtul', 'Kythorn', 'Flamerule', 'Eleasis', 'Eleint', 'Marpenoth', 'Uktar', 'Nightal'], ['Zarantyr', 'Olarune', 'Therendor', 'Eyre', 'Dravago', 'Nymm', 'Lharvion', 'Barrakas', 'Rhaan', 'Sypheros', 'Aryth', 'Vult'], - ['Needfest', 'Fireseek', 'Readying', 'Coldeven', 'Growfest', 'Planting', 'Flocktime', 'Wealsun', 'Richfest', 'Reaping', 'Goodmonth', 'Harvester', 'Brewfest', 'Patchwall', 'Ready\'reat', 'Sunsebb'], + [ + 'Needfest', + 'Fireseek', + 'Readying', + 'Coldeven', + 'Growfest', + 'Planting', + 'Flocktime', + 'Wealsun', + 'Richfest', + 'Reaping', + 'Goodmonth', + 'Harvester', + 'Brewfest', + 'Patchwall', + "Ready'reat", + 'Sunsebb', + ], ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], ['Horisal', 'Misuthar', 'Dualahei', 'Thunsheer', 'Unndilar', 'Brussendar', 'Sydenstar', 'Fessuran', "Quen'pillar", 'Cuersaar', 'Duscar'], ]; class MultiWorldCalendar { - constructor() { - this.style = styles; - this.world = 0; - this.moons = moonPhases; - this.months = monthNames; - this.alarms = [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei]; - this.worlds = ['faerun', 'eberron', 'greyhawk', 'modern', 'tal\'dorei']; - } - - handleInput(msg) { + static style = styles; + static world = 0; + static moons = moonPhases; + static months = monthNames; + static alarms = [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei]; + static worlds = ['faerun', 'eberron', 'greyhawk', 'modern', "Tal'Dorei"]; + + static handleInput(msg) { const args = msg.content.split(/\s+--/); if (msg.type !== 'api') return; @@ -115,7 +142,7 @@ class MultiWorldCalendar { default: chkAlarms(); calendarMenu(); - break; + break; case 'setday': const day = parseInt(args[2]); @@ -124,7 +151,7 @@ class MultiWorldCalendar { setDay(day); chkAlarms(); calendarMenu(); - break; + break; case 'setmonth': const month = args[2]; @@ -133,7 +160,7 @@ class MultiWorldCalendar { setMonth(month); chkAlarms(); calendarMenu(); - break; + break; case 'setyear': const year = parseInt(args[2]); @@ -142,7 +169,7 @@ class MultiWorldCalendar { setYear(year); chkAlarms(); calendarMenu(); - break; + break; case 'settime': const hour = parseInt(args[3]); const minute = parseInt(args[5]); @@ -153,27 +180,28 @@ class MultiWorldCalendar { setMinute(minute); chkAlarms(); calendarMenu(); - break; + break; case 'advance': const amount = parseInt(args[2]); const type = args[3]; if (isNaN(amount)) return sendChat('Multi-World Calendar', 'Please input a valid number for the amount.'); - if (!['Short Rest', 'Long Rest', 'Hour', 'Minute', 'Day', 'Week', 'Month', 'Year'].includes(type)) return sendChat('Multi-World Calendar', 'Please input a valid type.'); + if (!['Short Rest', 'Long Rest', 'Hour', 'Minute', 'Day', 'Week', 'Month', 'Year'].includes(type)) + return sendChat('Multi-World Calendar', 'Please input a valid type.'); advance(amount, type); chkAlarms(); calendarMenu(); - break; + break; case 'weather': if (args[2] === 'toggle') { - toggleWeather() + toggleWeather(); calendarMenu(); } else { randomizeWeather(); calendarMenu(); } - break; + break; case 'moon': if (args[2] === 'toggle') { toggleMoon(); @@ -185,24 +213,24 @@ class MultiWorldCalendar { updMoon(phase, phase2); calendarMenu(); } - break; + break; case 'show': showCalendar(); - break; + break; case 'reset': setMWCalDefaults(); calendarMenu(); - break; + break; } - break; + break; case '!month': setMonthName(args[1], args[2]); - break; + break; case '!alarm': switch (args[1]) { case undefined: alarmMenu(); - break; + break; default: const num = parseInt(args[1]); @@ -211,33 +239,33 @@ class MultiWorldCalendar { switch (args[2]) { case 'settitle': setTitle(num, args[3]); - break; + break; case 'setdate': setDate(num, args[3]); - break; + break; case 'settime': setTime(num, args[3]); - break; + break; case 'setmessage': setMessage(num, args[3]); - break; + break; } alarmMenu(num); - break; + break; case 'new': createAlarm(args[2], args[4], args[6], args[8]); - break; + break; case 'delete': deleteAlarm(args[2]); alarmMenu(); - break; + break; case 'reset': setAlarmDefaults(); alarmMenu(); - break; + break; } - break; + break; } } else { if (args[0] === '!mwcal') { @@ -246,9 +274,9 @@ class MultiWorldCalendar { } } - checkInstall() { + static checkInstall() { if (!state.mwcal) { - setMWCalDefaults(); + setMECalDefaults(); } if (!state.alarms) { @@ -256,13 +284,13 @@ class MultiWorldCalendar { } } - registerEventHandlers() { + static registerEventHandlers() { on('chat:message', this.handleInput); log('Multi-World Calendar - Registered Event Handlers!'); } } -const mwcal = new MultiWorldCalendar(); +const mwcal = MultiWorldCalendar; function setMWCalDefaults() { state.mwcal = [ @@ -319,7 +347,7 @@ function setMWCalDefaults() { wtype: true, }, { - name: 'Tal\'Dorei', + name: "Tal'Dorei", ord: 1, year: 812, day: 1, @@ -333,7 +361,7 @@ function setMWCalDefaults() { }, ]; - log('Multi-World Calendar: Successfully registered Calendar defaults!'); + log('Multi-World Calendar - Successfully registered Calendar Defaults!'); } function setAlarmDefaults() { @@ -342,36 +370,39 @@ function setAlarmDefaults() { eberron: [], greyhawk: [], modern: [], - talDorei: [] + talDorei: [], }; - log('Multi-World Calendar: Successfully registered Alarm defaults!'); + log('Multi-World Calendar - Successfully registered Alarm Defaults!'); } function updOrdinal() { switch (mwcal.world) { case 0: - state.mwcal[mwcal.world].ord = 30 * (state.mwcal[mwcal.world].month - 1) + state.mwcal[world].day; + state.mwcal[0].ord = 30 * (state.mwcal[0].month - 1) + state.mwcal[0].day; break; case 1: - state.mwcal[mwcal.world].ord = 28 * (state.mwcal[mwcal.world].month - 1) + state.mwcal[world].day; + state.mwcal[1].ord = 28 * (state.mwcal[1].month - 1) + state.mwcal[1].day; break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; - state.mwcal[mwcal.world].ord = grhwkDays.slice(0, state.mwcal[mwcal.world].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[world].day; + state.mwcal[2].ord = grhwkDays.slice(0, state.mwcal[2].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[2].day; break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - state.mwcal[mwcal.world].ord = modernDays.slice(0, state.mwcal[mwcal.world].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[world].day; + state.mwcal[3].ord = modernDays.slice(0, state.mwcal[3].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[3].day; break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; - state.mwcal[mwcal.world].ord = talDays.slice(0, state.mwcal[mwcal.world].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[world].day; + state.mwcal[4].ord = talDays.slice(0, state.mwcal[4].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[4].day; break; } } function setWorld(world) { + if (!mwcal.worlds.includes(world.toLowerCase())) + return sendChat('Multi-World Calendar', 'Invalid World. Please make sure to either use the correct Name!'); + mwcal.world = mwcal.worlds.indexOf(world.toLowerCase()); } @@ -381,17 +412,20 @@ function getSuffix() { if (ordinal >= 11 && ordinal <= 13) return 'th'; switch (ordinal % 10) { - case 1: return 'st'; - case 2: return 'nd'; - case 3: return 'rd'; - default: return 'th'; + case 1: + return 'st'; + case 2: + return 'nd'; + case 3: + return 'rd'; + default: + return 'th'; } } function updDate() { const world = mwcal.world; const ordinal = state.mwcal[world].ord; - let date, month; switch (world) { @@ -403,7 +437,7 @@ function updDate() { month = monthNames[0][Math.ceil(ordinal / 30) - 1]; date = ordinal - (Math.ceil(ordinal / 30) - 1) * 30; } - break; + break; case 1: if (Math.ceil(ordinal / 28) <= 1) { month = monthNames[1][0]; @@ -412,7 +446,7 @@ function updDate() { month = monthNames[1][Math.ceil(ordinal / 28) - 1]; date = ordinal - (Math.ceil(ordinal / 28) - 1) * 28; } - break; + break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; const grhwkDay = grhwkDays[state.mwcal[world].month - 1]; @@ -423,7 +457,7 @@ function updDate() { month = monthNames[2][Math.ceil(ordinal / grhwkDay) - 1]; date = ordinal - (Math.ceil(ordinal / grhwkDay) - 1) * grhwkDay; } - break; + break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; const modDay = modernDays[state.mwcal[world].month - 1]; @@ -435,7 +469,7 @@ function updDate() { month = monthNames[3][Math.ceil(ordinal / modDay) - 1]; date = ordinal - (Math.ceil(ordinal / modDay) - 1) * modDay; } - break; + break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; const talDay = talDays[state.mwcal[world].month - 1]; @@ -447,7 +481,7 @@ function updDate() { month = monthNames[4][Math.ceil(ordinal / talDay) - 1]; date = ordinal - (Math.ceil(ordinal / talDay) - 1) * talDay; } - break; + break; } setMonth(month); @@ -456,21 +490,24 @@ function updDate() { function setDay(day) { state.mwcal[mwcal.world].day = day; + updOrdinal(); } function getMonth() { const month = state.mwcal[mwcal.world].month; - return monthNames[mwcal.world][month - 1]; + return mwcal.months[mwcal.world][month - 1]; } function setMonth(month) { - const months = monthNames[mwcal.world]; + const months = mwcal.months[mwcal.world]; state.mwcal[mwcal.world].month = months.indexOf(month) + 1; + updOrdinal(); } function setMonthName(month, name) { - monthNames[mwcal.world].indexOf(month) = name; - state.months = monthNames; + const monnum = mwcal.months[mwcal.world].indexOf(month); + mwcal.months[mwcal.world][monnum] = name; + monthNames = mwcal.months; } function setYear(year) { @@ -508,27 +545,27 @@ function updMoon(phase, phase2) { switch (remainder) { default: moonArray = getMoonArray(1); - break; + break; case 0.25: moonArray = getMoonArray(2); - break; + break; case 0.5: moonArray = getMoonArray(3); - break; + break; case 0.75: moonArray = getMoonArray(4); - break; + break; } const moonNum = moonArray.split(','); getMoon(moonNum[ordinal % 8]); - break; + break; case 1: moonArray = getMoonArray(); const lunaNum = moonArray[0].split(','); const celeneNum = moonArray[1].split(','); getMoon(lunaNum[ordinal % 8], celeneNum[ordinal % 8]); - break; + break; } } else { if (phase2) { @@ -548,19 +585,19 @@ function getMoonArray(num) { case 1: moonArray = '0,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,4,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1'; - break; + break; case 2: moonArray = '0,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,0,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1'; - break; + break; case 3: moonArray = '0,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,0,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1'; - break; + break; case 4: moonArray = '0,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,0,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16'; - break; + break; } break; case 1: @@ -568,7 +605,7 @@ function getMoonArray(num) { '0,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7', '0,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16', ]; - break; + break; } return moonArray; @@ -601,16 +638,16 @@ function randomizeWeather() { switch (ordinal) { case ordinal > 325 || ordinal <= 70: season = 'Winter'; - break; + break; case ordinal <= 165: season = 'Spring'; - break; + break; case ordinal <= 255: season = 'Summer'; - break; + break; case ordinal <= 325: season = 'Fall'; - break; + break; } let rand = randomInteger(21); @@ -622,16 +659,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a bitterly cold winter day, '; - break; + break; case 'Spring': temp = 'It is a cold spring day, '; - break; + break; case 'Summer': temp = 'It is a cool summer day, '; - break; + break; case 'Fall': temp = 'It is a cold fall day, '; - break; + break; } break; case rand >= 18 && rand <= 20: @@ -640,16 +677,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a mild winter day, '; - break; + break; case 'Spring': temp = 'It is a hot spring day, '; - break; + break; case 'Summer': temp = 'It is a blisteringly hot summer day, '; - break; + break; case 'Fall': temp = 'It is a hot fall day, '; - break; + break; } break; default: @@ -657,16 +694,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a cold winter day, '; - break; + break; case 'Spring': temp = 'It is a warm spring day, '; - break; + break; case 'Summer': temp = 'It is a hot summer day, '; - break; + break; case 'Fall': temp = 'It is a cool fall day, '; - break; + break; } break; } @@ -678,30 +715,30 @@ function randomizeWeather() { switch (season) { case 'Winter': precip = 'and snow falls softly from the sky.'; - break; + break; default: precip = 'and it is raining lightly.'; - break; + break; } break; case rand >= 18 && rand <= 20: switch (season) { case 'Winter': precip = 'and snow falls heavily from the sky.'; - break; + break; default: precip = 'and a torrential rain is falling.'; - break; + break; } break; default: switch (randomInteger(2)) { case 1: precip = 'and the sky is clear.'; - break; + break; default: precip = 'and the sky is overcast.'; - break; + break; } break; } @@ -739,122 +776,136 @@ function calendarMenu() { sendChat( 'Multi-World Calendar', `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- - `
Advance Time
` + //-- - `
Toggle Weather Display
` + //-- - `
Toggle Moon Display
` + //-- - `
Randomize Weather
` + //-- - `
Randomize Moon Phase
` + //-- - `
` + //-- - `
Open Alarm Menu
` + //-- - `
Show to Players
` + //-- - `

` + //-- - `
Reset Calendar
` + //-- - `
` + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Weather
` + //-- + `
Randomize Moon Phase
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `` ); - break; + break; case 1: sendChat( 'Multi-World Calendar', `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- - `
Advance Time
` + //-- - `
Toggle Weather Display
` + //-- - `
Toggle Moon Display
` + //-- - `
Randomize Weather
` + //-- - `
Randomize Moon Phase
` + //-- - `
` + //-- - `
Open Alarm Menu
` + //-- - `
Show to Players
` + //-- - `

` + //-- - `
Reset Calendar
` + //-- - `
` + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Weather
` + //-- + `
Randomize Moon Phase
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `` ); - break; + break; } - break; + break; case null: switch (mwcal.world) { default: sendChat( 'Multi-World Calendar', `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- - `
Advance Time
` + //-- - `
Toggle Weather Display
` + //-- - `
Toggle Moon Display
` + //-- - `
Randomize Weather
` + //-- - `
` + //-- - `
Open Alarm Menu
` + //-- - `
Show to Players
` + //-- - `

` + //-- - `
Reset Calendar
` + //-- - `
` + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Weather
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `` ); - break; + break; case 1: sendChat( 'Multi-World Calendar', `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- - `
Advance Time
` + //-- - `
Toggle Weather Display
` + //-- - `
Toggle Moon Display
` + //-- - `
Randomize Weather
` + //-- - `
` + //-- - `
Open Alarm Menu
` + //-- - `
Show to Players
` + //-- - `

` + //-- - `
Reset Calendar
` + //-- - `
` + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Weather
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `` ); - break; + break; } - break; + break; } - break; + break; case null: switch (moon) { default: @@ -863,114 +914,128 @@ function calendarMenu() { sendChat( 'Multi-World Calendar', `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- - `
Advance Time
` + //-- - `
Toggle Weather Display
` + //-- - `
Toggle Moon Display
` + //-- - `
Randomize Moon Phase
` + //-- - `
` + //-- - `
Open Alarm Menu
` + //-- - `
Show to Players
` + //-- - `

` + //-- - `
Reset Calendar
` + //-- - `
` + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Moon Phase
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `` ); - break; + break; case 1: sendChat( 'Multi-World Calendar', `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- - `
Advance Time
` + //-- - `
Toggle Weather Display
` + //-- - `
Toggle Moon Display
` + //-- - `
Randomize Moon Phase
` + //-- - `
` + //-- - `
Open Alarm Menu
` + //-- - `
Show to Players
` + //-- - `

` + //-- - `
Reset Calendar
` + //-- - `
` + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
Randomize Moon Phase
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `` ); - break; + break; } - break; + break; case null: switch (mwcal.world) { default: sendChat( 'Multi-World Calendar', `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- - `
Advance Time
` + //-- - `
Toggle Weather Display
` + //-- - `
Toggle Moon Display
` + //-- - `
` + //-- - `
Open Alarm Menu
` + //-- - `
Show to Players
` + //-- - `

` + //-- - `
Reset Calendar
` + //-- - `
` + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `` ); - break; + break; case 1: sendChat( 'Multi-World Calendar', `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- - `
Advance Time
` + //-- - `
Toggle Weather Display
` + //-- - `
Toggle Moon Display
` + //-- - `
` + //-- - `
Open Alarm Menu
` + //-- - `
Show to Players
` + //-- - `

` + //-- - `
Reset Calendar
` + //-- - `
` + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- + `
Advance Time
` + //-- + `
Toggle Weather Display
` + //-- + `
Toggle Moon Display
` + //-- + `
` + //-- + `
Open Alarm Menu
` + //-- + `
Show to Players
` + //-- + `

` + //-- + `
Reset Calendar
` + //-- + `` ); - break; + break; } - break; + break; } - break; + break; } } @@ -990,55 +1055,63 @@ function showCalendar() { default: switch (moon) { default: - sendChat('Multi-World Calendar', `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Today\'s Weather: ${weather}
` + //-- - `
Moon Phase: ${moon}` + //-- - `
` + sendChat( + 'Multi-World Calendar', + `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Today\'s Weather: ${weather}
` + //-- + `
Moon Phase: ${moon}` + //-- + `
` ); - break; + break; case null: - sendChat('Multi-World Calendar', `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Today\'s Weather: ${weather}
` + //-- - `
` + sendChat( + 'Multi-World Calendar', + `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Today\'s Weather: ${weather}
` + //-- + `
` ); - break; + break; } - break; + break; case null: switch (moon) { default: - sendChat('Multi-World Calendar', `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Moon Phase: ${moon}` + //-- - `
` + sendChat( + 'Multi-World Calendar', + `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Moon Phase: ${moon}` + //-- + `
` ); - break; + break; case null: - sendChat('Multi-World Calendar', `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
` + sendChat( + 'Multi-World Calendar', + `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
` ); - break; + break; } - break; + break; } } @@ -1052,67 +1125,67 @@ function advance(amount, type) { switch (type.toLowerCase()) { case 'short rest': hour += amount; - break; + break; case 'long rest': hour += amount * 8; - break; + break; case 'minute': minute += amount; - break; + break; case 'hour': hour += amount; - break; + break; case 'day': ordinal += amount; - break; + break; case 'week': ordinal += amount * 7; - break; + break; case 'month': switch (mwcal.world) { case 0: ordinal += amount * 30; - break; + break; case 1: ordinal += amount * 28; - break; + break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; - for (let i=month; i grhwkDays.length) { - ordinal += grhwkDays[i-grhwkDays.length]; + ordinal += grhwkDays[i - grhwkDays.length]; } else { ordinal += grhwkDays[i]; } } - break; + break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - for (let i=month; i modernDays.length) { - ordinal += modernDays[i-modernDays.length]; + ordinal += modernDays[i - modernDays.length]; } else { ordinal += modernDays[i]; } } - break; + break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; - for (let i=month; i talDays.length) { - ordinal += talDays[i-talDays.length]; + ordinal += talDays[i - talDays.length]; } else { ordinal += talDays[i]; } } - break; + break; } updDate(); - break; + break; case 'year': year += amount; - break; + break; } while (minute >= 60) { @@ -1131,33 +1204,34 @@ function advance(amount, type) { ordinal -= 360; year++; } - break; + break; case 1: while (ordinal > 336) { ordinal -= 364; year++; } - break; + break; case 2: while (ordinal > 364) { ordinal -= 365; year++; } - break; + break; case 3: while (ordinal > 365) { ordinal -= 365; year++; } - break; + break; case 4: while (ordinal > 328) { ordinal -= 328; year++; } - break; + break; } + state.mwcal[mwcal.world].ord = ordinal; setHour(hour); setMinute(minute); setYear(year); @@ -1171,36 +1245,40 @@ function alarmMenu(num) { if (!alarm) { if (!len || len === 0) { - sendChat('Multi-World Calendar', `/w gm
` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `
No Alarms set
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `
` + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `
No Alarms set
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `
` ); } else { - for (let i=0; i` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `
Alarm: Not selected
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `` + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `
Alarm: Not selected
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `
` ); } } else { - for (let i=0; i` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
Alarm: ${title}
Title: ${title}
Date: ${date}
Time: ${time}
Message: ${message}
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + sendChat( + 'Multi-World Calendar', + `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
Alarm: ${title}
Title: ${title}
Date: ${date}
Time: ${time}
Message: ${message}
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` ); } } @@ -1243,16 +1323,17 @@ function createAlarm(title, date, time, message) { year: splitDate[2], hour: splitTime[0], minute: splitTime[1], - message: message + message: message, }; state.alarms[mwcal.world].push(alarm); - sendChat('Multi-World Calendar' `/w gm Alarm #${state.alarms[mwcal.world].length - 1} created!\n` + //-- - `Title: ${title}\n` + //-- - `Date: ${date}\n` + //-- - `Time: ${time}\n` + //-- - `Message: ${message}` + sendChat( + 'Multi-World Calendar'`/w gm Alarm #${state.alarms[mwcal.world].length - 1} created!\n` + //-- + `Title: ${title}\n` + //-- + `Date: ${date}\n` + //-- + `Time: ${time}\n` + //-- + `Message: ${message}` ); alarmMenu(state.alarms[mwcal.world].length - 1); @@ -1295,9 +1376,9 @@ function deleteAlarm(num) { function updAlarm(num) { const alarm = state.alarms[mwcal.world][num]; - + if (!alarm) { - sendChat('Multi-World Calendar', '/w gm This Alarm does not exist!') + sendChat('Multi-World Calendar', '/w gm This Alarm does not exist!'); } else { const title = alarm.title; const date = `${alarm.day}.${alarm.month}.${alarm.year}`; @@ -1312,45 +1393,69 @@ function updAlarm(num) { }); } - hand.set('notes', `Title: ${title}\n` + //-- - `Date: ${date}\n` + //-- - `Time: ${time}\n` + //-- - `Message: ${message}` + hand.set( + 'notes', + `Title: ${title}\n` + //-- + `Date: ${date}\n` + //-- + `Time: ${time}\n` + //-- + `Message: ${message}` ); } } function chkAlarms() { - state.alarms[mwcal.world].forEach(alarm => { - if (alarm.hour) { - if (alarm.year === state.mwcal[mwcal.world].year && alarm.month === state.mwcal[mwcal.world].month && (alarm.day >= state.mwcal[mwcal.world].day && !(alarm.day >= state.mwcal[mwcal.world].day+7)) && (alarm.hour >= state.mwcal[mwcal.world].hour && !(alarm.hour >= state.mwcal[mwcal.world].hour+12)) && (alarm.minute >= state.mwcal[mwcal.world].minute && !(alarm.minute >= state.mwcal[mwcal.world].minute+30))) { - const alarmNum = state.alarms[mwcal.world].indexOf(alarm); - - sendChat('Multi-World Calendar', `/w gm Alarm #${alarmNum} triggered!\n` + //-- - `Title: ${alarm.title}\n` + //-- - `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- - `Time: ${alarm.hour}:${alarm.minute}\n` + //-- - `Message: ${alarm.message}` - ); - - deleteAlarm(alarmNum); - } - } else { - if (alarm.year === state.mwcal[mwcal.world].year && alarm.month === state.mwcal[mwcal.world].month && (alarm.day >= state.mwcal[mwcal.world].day && !(alarm.day >= state.mwcal[mwcal.world].day+7))) { - const alarmNum = state.alarms[mwcal.world].indexOf(alarm); - - sendChat('Multi-World Calendar', `/w gm Alarm #${alarmNum} triggered!\n` + //-- - `Title: ${alarm.title}\n` + //-- - `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- - `Message: ${alarm.message}` - ); - - deleteAlarm(alarmNum); + const alarms = state.alarms[mwcal.world]; + if (alarms) { + alarms.forEach(alarm => { + if (alarm.hour) { + if ( + alarm.year === state.mwcal[mwcal.world].year && + alarm.month === state.mwcal[mwcal.world].month && + alarm.day >= state.mwcal[mwcal.world].day && + !(alarm.day >= state.mwcal[mwcal.world].day + 7) && + alarm.hour >= state.mwcal[mwcal.world].hour && + !(alarm.hour >= state.mwcal[mwcal.world].hour + 12) && + alarm.minute >= state.mwcal[mwcal.world].minute && + !(alarm.minute >= state.mwcal[mwcal.world].minute + 30) + ) { + const alarmNum = state.alarms[mwcal.world].indexOf(alarm); + + sendChat( + 'Multi-World Calendar', + `/w gm Alarm #${alarmNum} triggered!\n` + //-- + `Title: ${alarm.title}\n` + //-- + `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- + `Time: ${alarm.hour}:${alarm.minute}\n` + //-- + `Message: ${alarm.message}` + ); + + deleteAlarm(alarmNum); + } + } else { + if ( + alarm.year === state.mwcal[mwcal.world].year && + alarm.month === state.mwcal[mwcal.world].month && + alarm.day >= state.mwcal[mwcal.world].day && + !(alarm.day >= state.mwcal[mwcal.world].day + 7) + ) { + const alarmNum = state.alarms[mwcal.world].indexOf(alarm); + + sendChat( + 'Multi-World Calendar', + `/w gm Alarm #${alarmNum} triggered!\n` + //-- + `Title: ${alarm.title}\n` + //-- + `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- + `Message: ${alarm.message}` + ); + + deleteAlarm(alarmNum); + } } - } - }); + }); + } } on('ready', () => { - -}); \ No newline at end of file + mwcal.checkInstall(); + mwcal.registerEventHandlers(); +}); diff --git a/Multi-World Calendar/script.json b/Multi-World Calendar/script.json index e33670d0e..85e1aa3fb 100644 --- a/Multi-World Calendar/script.json +++ b/Multi-World Calendar/script.json @@ -2,8 +2,8 @@ "$schema": "https://github.com/Roll20/roll20-api-scripts/master/_Example%20Script%20-%20Check%20for%20formatting%20details/script.schema.json", "name": "Multi-World Calendar", "script": "mwcal.js", - "version": "1.0", - "previousversions": ["5.3", "5.2", "5.1", "5.0"], + "version": "1.1", + "previousversions": ["1.0", "5.3", "5.2", "5.1", "5.0"], "description": "A Calendar for D&D 5e that includes Eberron, Faerun, Greyhawk, Modern and Tal'Dorei", "authors": "Julexar", "patreon": "https://patreon.com/julexar", From c47ad10e6cd3ee7039bfc1b074f4655eb438d69a Mon Sep 17 00:00:00 2001 From: Julexar Date: Thu, 11 Apr 2024 18:20:56 +0200 Subject: [PATCH 2/3] Update mwcal.js --- Multi-World Calendar/mwcal.js | 942 +++++++++++++++------------------- 1 file changed, 419 insertions(+), 523 deletions(-) diff --git a/Multi-World Calendar/mwcal.js b/Multi-World Calendar/mwcal.js index 9bca792d1..0a88aed99 100644 --- a/Multi-World Calendar/mwcal.js +++ b/Multi-World Calendar/mwcal.js @@ -70,12 +70,9 @@ Displays the Calendar to the Players const styles = { divMenu: 'style="width: 300px; border: 1px solid black; background-color: #ffffff; padding: 5px;"', divButton: 'style="text-align:center;"', - buttonSmall: - 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 75px;', - buttonMedium: - 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 100px;', - buttonLarge: - 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 150px;', + buttonSmall: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 75px;', + buttonMedium: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 100px;', + buttonLarge: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 150px;', table: 'style="text-align:center; font-size: 12px; width: 100%; border-style: 3px solid #cccccc;"', arrow: '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;"', header: 'style="color: rgb(126, 45, 64); font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"', @@ -86,51 +83,27 @@ const styles = { span: 'style="display: inline; width: 10px; height: 10px; padding: 1px; border: 1px solid black; background-color: white;"', }; -const moonPhases = [ - 'Full Moon', - 'Waning Gibbous', - 'Last Quarter', - 'Waning Crescent', - 'New Moon', - 'Waxing Crescent', - 'First Quarter', - 'Waxing Gibbous', -]; +const moonPhases = ['Full Moon', 'Waning Gibbous', 'Last Quarter', 'Waning Crescent', 'New Moon', 'Waxing Crescent', 'First Quarter', 'Waxing Gibbous']; const monthNames = [ ['Hammer', 'Alturiak', 'Ches', 'Tarsakh', 'Mirtul', 'Kythorn', 'Flamerule', 'Eleasis', 'Eleint', 'Marpenoth', 'Uktar', 'Nightal'], ['Zarantyr', 'Olarune', 'Therendor', 'Eyre', 'Dravago', 'Nymm', 'Lharvion', 'Barrakas', 'Rhaan', 'Sypheros', 'Aryth', 'Vult'], - [ - 'Needfest', - 'Fireseek', - 'Readying', - 'Coldeven', - 'Growfest', - 'Planting', - 'Flocktime', - 'Wealsun', - 'Richfest', - 'Reaping', - 'Goodmonth', - 'Harvester', - 'Brewfest', - 'Patchwall', - "Ready'reat", - 'Sunsebb', - ], + ['Needfest', 'Fireseek', 'Readying', 'Coldeven', 'Growfest', 'Planting', 'Flocktime', 'Wealsun', 'Richfest', 'Reaping', 'Goodmonth', 'Harvester', 'Brewfest', 'Patchwall', 'Ready\'reat', 'Sunsebb'], ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], ['Horisal', 'Misuthar', 'Dualahei', 'Thunsheer', 'Unndilar', 'Brussendar', 'Sydenstar', 'Fessuran', "Quen'pillar", 'Cuersaar', 'Duscar'], ]; class MultiWorldCalendar { - static style = styles; - static world = 0; - static moons = moonPhases; - static months = monthNames; - static alarms = [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei]; - static worlds = ['faerun', 'eberron', 'greyhawk', 'modern', "Tal'Dorei"]; - - static handleInput(msg) { + constructor() { + this.style = styles; + this.world = 0; + this.moons = moonPhases; + this.months = monthNames; + this.alarms = state.alarms.faerun ? [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei] : []; + this.worlds = ['faerun', 'eberron', 'greyhawk', 'modern', "tal'dorei"]; + } + + handleInput(msg) { const args = msg.content.split(/\s+--/); if (msg.type !== 'api') return; @@ -142,7 +115,7 @@ class MultiWorldCalendar { default: chkAlarms(); calendarMenu(); - break; + break; case 'setday': const day = parseInt(args[2]); @@ -151,7 +124,7 @@ class MultiWorldCalendar { setDay(day); chkAlarms(); calendarMenu(); - break; + break; case 'setmonth': const month = args[2]; @@ -160,7 +133,7 @@ class MultiWorldCalendar { setMonth(month); chkAlarms(); calendarMenu(); - break; + break; case 'setyear': const year = parseInt(args[2]); @@ -169,7 +142,7 @@ class MultiWorldCalendar { setYear(year); chkAlarms(); calendarMenu(); - break; + break; case 'settime': const hour = parseInt(args[3]); const minute = parseInt(args[5]); @@ -180,28 +153,27 @@ class MultiWorldCalendar { setMinute(minute); chkAlarms(); calendarMenu(); - break; + break; case 'advance': const amount = parseInt(args[2]); const type = args[3]; if (isNaN(amount)) return sendChat('Multi-World Calendar', 'Please input a valid number for the amount.'); - if (!['Short Rest', 'Long Rest', 'Hour', 'Minute', 'Day', 'Week', 'Month', 'Year'].includes(type)) - return sendChat('Multi-World Calendar', 'Please input a valid type.'); + if (!['Short Rest', 'Long Rest', 'Hour', 'Minute', 'Day', 'Week', 'Month', 'Year'].includes(type)) return sendChat('Multi-World Calendar', 'Please input a valid type.'); advance(amount, type); chkAlarms(); calendarMenu(); - break; + break; case 'weather': if (args[2] === 'toggle') { - toggleWeather(); + toggleWeather() calendarMenu(); } else { randomizeWeather(); calendarMenu(); } - break; + break; case 'moon': if (args[2] === 'toggle') { toggleMoon(); @@ -213,24 +185,29 @@ class MultiWorldCalendar { updMoon(phase, phase2); calendarMenu(); } - break; + break; + case 'world': + setWorld(args[2]); + chkAlarms(); + calendarMenu(); + break; case 'show': showCalendar(); - break; + break; case 'reset': setMWCalDefaults(); calendarMenu(); - break; + break; } - break; + break; case '!month': setMonthName(args[1], args[2]); - break; + break; case '!alarm': switch (args[1]) { case undefined: alarmMenu(); - break; + break; default: const num = parseInt(args[1]); @@ -239,33 +216,33 @@ class MultiWorldCalendar { switch (args[2]) { case 'settitle': setTitle(num, args[3]); - break; + break; case 'setdate': setDate(num, args[3]); - break; + break; case 'settime': setTime(num, args[3]); - break; + break; case 'setmessage': setMessage(num, args[3]); - break; + break; } alarmMenu(num); - break; + break; case 'new': createAlarm(args[2], args[4], args[6], args[8]); - break; + break; case 'delete': deleteAlarm(args[2]); alarmMenu(); - break; + break; case 'reset': setAlarmDefaults(); alarmMenu(); - break; + break; } - break; + break; } } else { if (args[0] === '!mwcal') { @@ -274,9 +251,9 @@ class MultiWorldCalendar { } } - static checkInstall() { + checkInstall() { if (!state.mwcal) { - setMECalDefaults(); + setMWCalDefaults(); } if (!state.alarms) { @@ -284,13 +261,13 @@ class MultiWorldCalendar { } } - static registerEventHandlers() { + registerEventHandlers() { on('chat:message', this.handleInput); log('Multi-World Calendar - Registered Event Handlers!'); } } -const mwcal = MultiWorldCalendar; +const mwcal = new MultiWorldCalendar(); function setMWCalDefaults() { state.mwcal = [ @@ -370,8 +347,10 @@ function setAlarmDefaults() { eberron: [], greyhawk: [], modern: [], - talDorei: [], + talDorei: [] }; + + mwcal.alarms = [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei]; log('Multi-World Calendar - Successfully registered Alarm Defaults!'); } @@ -380,30 +359,30 @@ function updOrdinal() { switch (mwcal.world) { case 0: state.mwcal[0].ord = 30 * (state.mwcal[0].month - 1) + state.mwcal[0].day; - break; + break; case 1: state.mwcal[1].ord = 28 * (state.mwcal[1].month - 1) + state.mwcal[1].day; - break; + break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; state.mwcal[2].ord = grhwkDays.slice(0, state.mwcal[2].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[2].day; - break; + break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; state.mwcal[3].ord = modernDays.slice(0, state.mwcal[3].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[3].day; - break; + break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; state.mwcal[4].ord = talDays.slice(0, state.mwcal[4].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[4].day; - break; + break; } } function setWorld(world) { - if (!mwcal.worlds.includes(world.toLowerCase())) - return sendChat('Multi-World Calendar', 'Invalid World. Please make sure to either use the correct Name!'); + if (!(mwcal.worlds.includes(world.toLowerCase()))) return sendChat('Multi-World Calendar', 'Invalid World. Please make sure to either use the correct Name!'); - mwcal.world = mwcal.worlds.indexOf(world.toLowerCase()); + mwcal.world = mwcal.worlds.indexOf(world.toLowerCase()) + log(mwcal.world); } function getSuffix() { @@ -412,14 +391,10 @@ function getSuffix() { if (ordinal >= 11 && ordinal <= 13) return 'th'; switch (ordinal % 10) { - case 1: - return 'st'; - case 2: - return 'nd'; - case 3: - return 'rd'; - default: - return 'th'; + case 1: return 'st'; + case 2: return 'nd'; + case 3: return 'rd'; + default: return 'th'; } } @@ -437,7 +412,7 @@ function updDate() { month = monthNames[0][Math.ceil(ordinal / 30) - 1]; date = ordinal - (Math.ceil(ordinal / 30) - 1) * 30; } - break; + break; case 1: if (Math.ceil(ordinal / 28) <= 1) { month = monthNames[1][0]; @@ -446,7 +421,7 @@ function updDate() { month = monthNames[1][Math.ceil(ordinal / 28) - 1]; date = ordinal - (Math.ceil(ordinal / 28) - 1) * 28; } - break; + break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; const grhwkDay = grhwkDays[state.mwcal[world].month - 1]; @@ -457,7 +432,7 @@ function updDate() { month = monthNames[2][Math.ceil(ordinal / grhwkDay) - 1]; date = ordinal - (Math.ceil(ordinal / grhwkDay) - 1) * grhwkDay; } - break; + break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; const modDay = modernDays[state.mwcal[world].month - 1]; @@ -469,7 +444,7 @@ function updDate() { month = monthNames[3][Math.ceil(ordinal / modDay) - 1]; date = ordinal - (Math.ceil(ordinal / modDay) - 1) * modDay; } - break; + break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; const talDay = talDays[state.mwcal[world].month - 1]; @@ -481,7 +456,7 @@ function updDate() { month = monthNames[4][Math.ceil(ordinal / talDay) - 1]; date = ordinal - (Math.ceil(ordinal / talDay) - 1) * talDay; } - break; + break; } setMonth(month); @@ -495,7 +470,7 @@ function setDay(day) { function getMonth() { const month = state.mwcal[mwcal.world].month; - return mwcal.months[mwcal.world][month - 1]; + return mwcal.months[mwcal.world][month-1]; } function setMonth(month) { @@ -505,7 +480,7 @@ function setMonth(month) { } function setMonthName(month, name) { - const monnum = mwcal.months[mwcal.world].indexOf(month); + const monnum = mwcal.months[mwcal.world].indexOf(month) mwcal.months[mwcal.world][monnum] = name; monthNames = mwcal.months; } @@ -545,27 +520,27 @@ function updMoon(phase, phase2) { switch (remainder) { default: moonArray = getMoonArray(1); - break; + break; case 0.25: moonArray = getMoonArray(2); - break; + break; case 0.5: moonArray = getMoonArray(3); - break; + break; case 0.75: moonArray = getMoonArray(4); - break; + break; } const moonNum = moonArray.split(','); getMoon(moonNum[ordinal % 8]); - break; + break; case 1: moonArray = getMoonArray(); const lunaNum = moonArray[0].split(','); const celeneNum = moonArray[1].split(','); getMoon(lunaNum[ordinal % 8], celeneNum[ordinal % 8]); - break; + break; } } else { if (phase2) { @@ -585,19 +560,19 @@ function getMoonArray(num) { case 1: moonArray = '0,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,4,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1'; - break; + break; case 2: moonArray = '0,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,0,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1'; - break; + break; case 3: moonArray = '0,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,0,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1'; - break; + break; case 4: moonArray = '0,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,0,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16'; - break; + break; } break; case 1: @@ -605,7 +580,7 @@ function getMoonArray(num) { '0,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7', '0,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16', ]; - break; + break; } return moonArray; @@ -638,16 +613,16 @@ function randomizeWeather() { switch (ordinal) { case ordinal > 325 || ordinal <= 70: season = 'Winter'; - break; + break; case ordinal <= 165: season = 'Spring'; - break; + break; case ordinal <= 255: season = 'Summer'; - break; + break; case ordinal <= 325: season = 'Fall'; - break; + break; } let rand = randomInteger(21); @@ -659,16 +634,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a bitterly cold winter day, '; - break; + break; case 'Spring': temp = 'It is a cold spring day, '; - break; + break; case 'Summer': temp = 'It is a cool summer day, '; - break; + break; case 'Fall': temp = 'It is a cold fall day, '; - break; + break; } break; case rand >= 18 && rand <= 20: @@ -677,16 +652,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a mild winter day, '; - break; + break; case 'Spring': temp = 'It is a hot spring day, '; - break; + break; case 'Summer': temp = 'It is a blisteringly hot summer day, '; - break; + break; case 'Fall': temp = 'It is a hot fall day, '; - break; + break; } break; default: @@ -694,16 +669,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a cold winter day, '; - break; + break; case 'Spring': temp = 'It is a warm spring day, '; - break; + break; case 'Summer': temp = 'It is a hot summer day, '; - break; + break; case 'Fall': temp = 'It is a cool fall day, '; - break; + break; } break; } @@ -715,30 +690,30 @@ function randomizeWeather() { switch (season) { case 'Winter': precip = 'and snow falls softly from the sky.'; - break; + break; default: precip = 'and it is raining lightly.'; - break; + break; } break; case rand >= 18 && rand <= 20: switch (season) { case 'Winter': precip = 'and snow falls heavily from the sky.'; - break; + break; default: precip = 'and a torrential rain is falling.'; - break; + break; } break; default: switch (randomInteger(2)) { case 1: precip = 'and the sky is clear.'; - break; + break; default: precip = 'and the sky is overcast.'; - break; + break; } break; } @@ -773,269 +748,225 @@ function calendarMenu() { default: switch (mwcal.world) { default: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; case 1: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; } - break; + break; case null: switch (mwcal.world) { default: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; case 1: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; } - break; + break; } - break; + break; case null: switch (moon) { default: switch (mwcal.world) { default: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; case 1: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; } - break; + break; case null: switch (mwcal.world) { default: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; case 1: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; } - break; + break; } - break; + break; } } @@ -1055,63 +986,55 @@ function showCalendar() { default: switch (moon) { default: - sendChat( - 'Multi-World Calendar', - `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Today\'s Weather: ${weather}
` + //-- - `
Moon Phase: ${moon}` + //-- - `
` + sendChat('Multi-World Calendar', `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Today\'s Weather: ${weather}
` + //-- + `
Moon Phase: ${moon}` + //-- + `
` ); - break; + break; case null: - sendChat( - 'Multi-World Calendar', - `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Today\'s Weather: ${weather}
` + //-- - `
` + sendChat('Multi-World Calendar', `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Today\'s Weather: ${weather}
` + //-- + `
` ); - break; + break; } - break; + break; case null: switch (moon) { default: - sendChat( - 'Multi-World Calendar', - `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Moon Phase: ${moon}` + //-- - `
` + sendChat('Multi-World Calendar', `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Moon Phase: ${moon}` + //-- + `
` ); - break; + break; case null: - sendChat( - 'Multi-World Calendar', - `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
` + sendChat('Multi-World Calendar', `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
` ); - break; + break; } - break; + break; } } @@ -1125,67 +1048,67 @@ function advance(amount, type) { switch (type.toLowerCase()) { case 'short rest': hour += amount; - break; + break; case 'long rest': hour += amount * 8; - break; + break; case 'minute': minute += amount; - break; + break; case 'hour': hour += amount; - break; + break; case 'day': ordinal += amount; - break; + break; case 'week': ordinal += amount * 7; - break; + break; case 'month': switch (mwcal.world) { case 0: ordinal += amount * 30; - break; + break; case 1: ordinal += amount * 28; - break; + break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; - for (let i = month; i < month + amount; i++) { + for (let i=month; i grhwkDays.length) { - ordinal += grhwkDays[i - grhwkDays.length]; + ordinal += grhwkDays[i-grhwkDays.length]; } else { ordinal += grhwkDays[i]; } } - break; + break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - for (let i = month; i < month + amount; i++) { + for (let i=month; i modernDays.length) { - ordinal += modernDays[i - modernDays.length]; + ordinal += modernDays[i-modernDays.length]; } else { ordinal += modernDays[i]; } } - break; + break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; - for (let i = month; i < month + amount; i++) { + for (let i=month; i talDays.length) { - ordinal += talDays[i - talDays.length]; + ordinal += talDays[i-talDays.length]; } else { ordinal += talDays[i]; } } - break; + break; } updDate(); - break; + break; case 'year': year += amount; - break; + break; } while (minute >= 60) { @@ -1204,31 +1127,31 @@ function advance(amount, type) { ordinal -= 360; year++; } - break; + break; case 1: while (ordinal > 336) { ordinal -= 364; year++; } - break; + break; case 2: while (ordinal > 364) { ordinal -= 365; year++; } - break; + break; case 3: while (ordinal > 365) { ordinal -= 365; year++; } - break; + break; case 4: while (ordinal > 328) { ordinal -= 328; year++; } - break; + break; } state.mwcal[mwcal.world].ord = ordinal; @@ -1245,40 +1168,36 @@ function alarmMenu(num) { if (!alarm) { if (!len || len === 0) { - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `
No Alarms set
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `
No Alarms set
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `
` ); } else { - for (let i = 0; i < len; i++) { + for (let i=0; i` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `
Alarm: Not selected
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `
Alarm: Not selected
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `
` ); } } else { - for (let i = 0; i < len; i++) { + for (let i=0; i` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
Alarm: ${title}
Title: ${title}
Date: ${date}
Time: ${time}
Message: ${message}
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
Alarm: ${title}
Title: ${title}
Date: ${date}
Time: ${time}
Message: ${message}
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` ); } } @@ -1323,17 +1240,16 @@ function createAlarm(title, date, time, message) { year: splitDate[2], hour: splitTime[0], minute: splitTime[1], - message: message, + message: message }; state.alarms[mwcal.world].push(alarm); - sendChat( - 'Multi-World Calendar'`/w gm Alarm #${state.alarms[mwcal.world].length - 1} created!\n` + //-- - `Title: ${title}\n` + //-- - `Date: ${date}\n` + //-- - `Time: ${time}\n` + //-- - `Message: ${message}` + sendChat('Multi-World Calendar' `/w gm Alarm #${state.alarms[mwcal.world].length - 1} created!\n` + //-- + `Title: ${title}\n` + //-- + `Date: ${date}\n` + //-- + `Time: ${time}\n` + //-- + `Message: ${message}` ); alarmMenu(state.alarms[mwcal.world].length - 1); @@ -1376,9 +1292,9 @@ function deleteAlarm(num) { function updAlarm(num) { const alarm = state.alarms[mwcal.world][num]; - + if (!alarm) { - sendChat('Multi-World Calendar', '/w gm This Alarm does not exist!'); + sendChat('Multi-World Calendar', '/w gm This Alarm does not exist!') } else { const title = alarm.title; const date = `${alarm.day}.${alarm.month}.${alarm.year}`; @@ -1393,12 +1309,10 @@ function updAlarm(num) { }); } - hand.set( - 'notes', - `Title: ${title}\n` + //-- - `Date: ${date}\n` + //-- - `Time: ${time}\n` + //-- - `Message: ${message}` + hand.set('notes', `Title: ${title}\n` + //-- + `Date: ${date}\n` + //-- + `Time: ${time}\n` + //-- + `Message: ${message}` ); } } @@ -1406,48 +1320,30 @@ function updAlarm(num) { function chkAlarms() { const alarms = state.alarms[mwcal.world]; if (alarms) { - alarms.forEach(alarm => { + alarms.forEach(alarm => { if (alarm.hour) { - if ( - alarm.year === state.mwcal[mwcal.world].year && - alarm.month === state.mwcal[mwcal.world].month && - alarm.day >= state.mwcal[mwcal.world].day && - !(alarm.day >= state.mwcal[mwcal.world].day + 7) && - alarm.hour >= state.mwcal[mwcal.world].hour && - !(alarm.hour >= state.mwcal[mwcal.world].hour + 12) && - alarm.minute >= state.mwcal[mwcal.world].minute && - !(alarm.minute >= state.mwcal[mwcal.world].minute + 30) - ) { + if (alarm.year === state.mwcal[mwcal.world].year && alarm.month === state.mwcal[mwcal.world].month && (alarm.day >= state.mwcal[mwcal.world].day && !(alarm.day >= state.mwcal[mwcal.world].day+7)) && (alarm.hour >= state.mwcal[mwcal.world].hour && !(alarm.hour >= state.mwcal[mwcal.world].hour+12)) && (alarm.minute >= state.mwcal[mwcal.world].minute && !(alarm.minute >= state.mwcal[mwcal.world].minute+30))) { const alarmNum = state.alarms[mwcal.world].indexOf(alarm); - - sendChat( - 'Multi-World Calendar', - `/w gm Alarm #${alarmNum} triggered!\n` + //-- - `Title: ${alarm.title}\n` + //-- - `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- - `Time: ${alarm.hour}:${alarm.minute}\n` + //-- - `Message: ${alarm.message}` + + sendChat('Multi-World Calendar', `/w gm Alarm #${alarmNum} triggered!\n` + //-- + `Title: ${alarm.title}\n` + //-- + `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- + `Time: ${alarm.hour}:${alarm.minute}\n` + //-- + `Message: ${alarm.message}` ); - + deleteAlarm(alarmNum); } } else { - if ( - alarm.year === state.mwcal[mwcal.world].year && - alarm.month === state.mwcal[mwcal.world].month && - alarm.day >= state.mwcal[mwcal.world].day && - !(alarm.day >= state.mwcal[mwcal.world].day + 7) - ) { + if (alarm.year === state.mwcal[mwcal.world].year && alarm.month === state.mwcal[mwcal.world].month && (alarm.day >= state.mwcal[mwcal.world].day && !(alarm.day >= state.mwcal[mwcal.world].day+7))) { const alarmNum = state.alarms[mwcal.world].indexOf(alarm); - - sendChat( - 'Multi-World Calendar', - `/w gm Alarm #${alarmNum} triggered!\n` + //-- - `Title: ${alarm.title}\n` + //-- - `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- - `Message: ${alarm.message}` + + sendChat('Multi-World Calendar', `/w gm Alarm #${alarmNum} triggered!\n` + //-- + `Title: ${alarm.title}\n` + //-- + `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- + `Message: ${alarm.message}` ); - + deleteAlarm(alarmNum); } } From 012c0804ffc0e03fdc30b3008d01ceb84c6a6cdb Mon Sep 17 00:00:00 2001 From: Julexar Date: Thu, 11 Apr 2024 18:21:29 +0200 Subject: [PATCH 3/3] Update mwcal.js --- Multi-World Calendar/1.1/mwcal.js | 942 +++++++++++++----------------- 1 file changed, 419 insertions(+), 523 deletions(-) diff --git a/Multi-World Calendar/1.1/mwcal.js b/Multi-World Calendar/1.1/mwcal.js index 9bca792d1..0a88aed99 100644 --- a/Multi-World Calendar/1.1/mwcal.js +++ b/Multi-World Calendar/1.1/mwcal.js @@ -70,12 +70,9 @@ Displays the Calendar to the Players const styles = { divMenu: 'style="width: 300px; border: 1px solid black; background-color: #ffffff; padding: 5px;"', divButton: 'style="text-align:center;"', - buttonSmall: - 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 75px;', - buttonMedium: - 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 100px;', - buttonLarge: - 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 150px;', + buttonSmall: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 75px;', + buttonMedium: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 100px;', + buttonLarge: 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 150px;', table: 'style="text-align:center; font-size: 12px; width: 100%; border-style: 3px solid #cccccc;"', arrow: '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;"', header: 'style="color: rgb(126, 45, 64); font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"', @@ -86,51 +83,27 @@ const styles = { span: 'style="display: inline; width: 10px; height: 10px; padding: 1px; border: 1px solid black; background-color: white;"', }; -const moonPhases = [ - 'Full Moon', - 'Waning Gibbous', - 'Last Quarter', - 'Waning Crescent', - 'New Moon', - 'Waxing Crescent', - 'First Quarter', - 'Waxing Gibbous', -]; +const moonPhases = ['Full Moon', 'Waning Gibbous', 'Last Quarter', 'Waning Crescent', 'New Moon', 'Waxing Crescent', 'First Quarter', 'Waxing Gibbous']; const monthNames = [ ['Hammer', 'Alturiak', 'Ches', 'Tarsakh', 'Mirtul', 'Kythorn', 'Flamerule', 'Eleasis', 'Eleint', 'Marpenoth', 'Uktar', 'Nightal'], ['Zarantyr', 'Olarune', 'Therendor', 'Eyre', 'Dravago', 'Nymm', 'Lharvion', 'Barrakas', 'Rhaan', 'Sypheros', 'Aryth', 'Vult'], - [ - 'Needfest', - 'Fireseek', - 'Readying', - 'Coldeven', - 'Growfest', - 'Planting', - 'Flocktime', - 'Wealsun', - 'Richfest', - 'Reaping', - 'Goodmonth', - 'Harvester', - 'Brewfest', - 'Patchwall', - "Ready'reat", - 'Sunsebb', - ], + ['Needfest', 'Fireseek', 'Readying', 'Coldeven', 'Growfest', 'Planting', 'Flocktime', 'Wealsun', 'Richfest', 'Reaping', 'Goodmonth', 'Harvester', 'Brewfest', 'Patchwall', 'Ready\'reat', 'Sunsebb'], ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], ['Horisal', 'Misuthar', 'Dualahei', 'Thunsheer', 'Unndilar', 'Brussendar', 'Sydenstar', 'Fessuran', "Quen'pillar", 'Cuersaar', 'Duscar'], ]; class MultiWorldCalendar { - static style = styles; - static world = 0; - static moons = moonPhases; - static months = monthNames; - static alarms = [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei]; - static worlds = ['faerun', 'eberron', 'greyhawk', 'modern', "Tal'Dorei"]; - - static handleInput(msg) { + constructor() { + this.style = styles; + this.world = 0; + this.moons = moonPhases; + this.months = monthNames; + this.alarms = state.alarms.faerun ? [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei] : []; + this.worlds = ['faerun', 'eberron', 'greyhawk', 'modern', "tal'dorei"]; + } + + handleInput(msg) { const args = msg.content.split(/\s+--/); if (msg.type !== 'api') return; @@ -142,7 +115,7 @@ class MultiWorldCalendar { default: chkAlarms(); calendarMenu(); - break; + break; case 'setday': const day = parseInt(args[2]); @@ -151,7 +124,7 @@ class MultiWorldCalendar { setDay(day); chkAlarms(); calendarMenu(); - break; + break; case 'setmonth': const month = args[2]; @@ -160,7 +133,7 @@ class MultiWorldCalendar { setMonth(month); chkAlarms(); calendarMenu(); - break; + break; case 'setyear': const year = parseInt(args[2]); @@ -169,7 +142,7 @@ class MultiWorldCalendar { setYear(year); chkAlarms(); calendarMenu(); - break; + break; case 'settime': const hour = parseInt(args[3]); const minute = parseInt(args[5]); @@ -180,28 +153,27 @@ class MultiWorldCalendar { setMinute(minute); chkAlarms(); calendarMenu(); - break; + break; case 'advance': const amount = parseInt(args[2]); const type = args[3]; if (isNaN(amount)) return sendChat('Multi-World Calendar', 'Please input a valid number for the amount.'); - if (!['Short Rest', 'Long Rest', 'Hour', 'Minute', 'Day', 'Week', 'Month', 'Year'].includes(type)) - return sendChat('Multi-World Calendar', 'Please input a valid type.'); + if (!['Short Rest', 'Long Rest', 'Hour', 'Minute', 'Day', 'Week', 'Month', 'Year'].includes(type)) return sendChat('Multi-World Calendar', 'Please input a valid type.'); advance(amount, type); chkAlarms(); calendarMenu(); - break; + break; case 'weather': if (args[2] === 'toggle') { - toggleWeather(); + toggleWeather() calendarMenu(); } else { randomizeWeather(); calendarMenu(); } - break; + break; case 'moon': if (args[2] === 'toggle') { toggleMoon(); @@ -213,24 +185,29 @@ class MultiWorldCalendar { updMoon(phase, phase2); calendarMenu(); } - break; + break; + case 'world': + setWorld(args[2]); + chkAlarms(); + calendarMenu(); + break; case 'show': showCalendar(); - break; + break; case 'reset': setMWCalDefaults(); calendarMenu(); - break; + break; } - break; + break; case '!month': setMonthName(args[1], args[2]); - break; + break; case '!alarm': switch (args[1]) { case undefined: alarmMenu(); - break; + break; default: const num = parseInt(args[1]); @@ -239,33 +216,33 @@ class MultiWorldCalendar { switch (args[2]) { case 'settitle': setTitle(num, args[3]); - break; + break; case 'setdate': setDate(num, args[3]); - break; + break; case 'settime': setTime(num, args[3]); - break; + break; case 'setmessage': setMessage(num, args[3]); - break; + break; } alarmMenu(num); - break; + break; case 'new': createAlarm(args[2], args[4], args[6], args[8]); - break; + break; case 'delete': deleteAlarm(args[2]); alarmMenu(); - break; + break; case 'reset': setAlarmDefaults(); alarmMenu(); - break; + break; } - break; + break; } } else { if (args[0] === '!mwcal') { @@ -274,9 +251,9 @@ class MultiWorldCalendar { } } - static checkInstall() { + checkInstall() { if (!state.mwcal) { - setMECalDefaults(); + setMWCalDefaults(); } if (!state.alarms) { @@ -284,13 +261,13 @@ class MultiWorldCalendar { } } - static registerEventHandlers() { + registerEventHandlers() { on('chat:message', this.handleInput); log('Multi-World Calendar - Registered Event Handlers!'); } } -const mwcal = MultiWorldCalendar; +const mwcal = new MultiWorldCalendar(); function setMWCalDefaults() { state.mwcal = [ @@ -370,8 +347,10 @@ function setAlarmDefaults() { eberron: [], greyhawk: [], modern: [], - talDorei: [], + talDorei: [] }; + + mwcal.alarms = [state.alarms.faerun, state.alarms.eberron, state.alarms.greyhawk, state.alarms.modern, state.alarms.talDorei]; log('Multi-World Calendar - Successfully registered Alarm Defaults!'); } @@ -380,30 +359,30 @@ function updOrdinal() { switch (mwcal.world) { case 0: state.mwcal[0].ord = 30 * (state.mwcal[0].month - 1) + state.mwcal[0].day; - break; + break; case 1: state.mwcal[1].ord = 28 * (state.mwcal[1].month - 1) + state.mwcal[1].day; - break; + break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; state.mwcal[2].ord = grhwkDays.slice(0, state.mwcal[2].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[2].day; - break; + break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; state.mwcal[3].ord = modernDays.slice(0, state.mwcal[3].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[3].day; - break; + break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; state.mwcal[4].ord = talDays.slice(0, state.mwcal[4].month - 1).reduce((a, b) => a + b, 0) + state.mwcal[4].day; - break; + break; } } function setWorld(world) { - if (!mwcal.worlds.includes(world.toLowerCase())) - return sendChat('Multi-World Calendar', 'Invalid World. Please make sure to either use the correct Name!'); + if (!(mwcal.worlds.includes(world.toLowerCase()))) return sendChat('Multi-World Calendar', 'Invalid World. Please make sure to either use the correct Name!'); - mwcal.world = mwcal.worlds.indexOf(world.toLowerCase()); + mwcal.world = mwcal.worlds.indexOf(world.toLowerCase()) + log(mwcal.world); } function getSuffix() { @@ -412,14 +391,10 @@ function getSuffix() { if (ordinal >= 11 && ordinal <= 13) return 'th'; switch (ordinal % 10) { - case 1: - return 'st'; - case 2: - return 'nd'; - case 3: - return 'rd'; - default: - return 'th'; + case 1: return 'st'; + case 2: return 'nd'; + case 3: return 'rd'; + default: return 'th'; } } @@ -437,7 +412,7 @@ function updDate() { month = monthNames[0][Math.ceil(ordinal / 30) - 1]; date = ordinal - (Math.ceil(ordinal / 30) - 1) * 30; } - break; + break; case 1: if (Math.ceil(ordinal / 28) <= 1) { month = monthNames[1][0]; @@ -446,7 +421,7 @@ function updDate() { month = monthNames[1][Math.ceil(ordinal / 28) - 1]; date = ordinal - (Math.ceil(ordinal / 28) - 1) * 28; } - break; + break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; const grhwkDay = grhwkDays[state.mwcal[world].month - 1]; @@ -457,7 +432,7 @@ function updDate() { month = monthNames[2][Math.ceil(ordinal / grhwkDay) - 1]; date = ordinal - (Math.ceil(ordinal / grhwkDay) - 1) * grhwkDay; } - break; + break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; const modDay = modernDays[state.mwcal[world].month - 1]; @@ -469,7 +444,7 @@ function updDate() { month = monthNames[3][Math.ceil(ordinal / modDay) - 1]; date = ordinal - (Math.ceil(ordinal / modDay) - 1) * modDay; } - break; + break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; const talDay = talDays[state.mwcal[world].month - 1]; @@ -481,7 +456,7 @@ function updDate() { month = monthNames[4][Math.ceil(ordinal / talDay) - 1]; date = ordinal - (Math.ceil(ordinal / talDay) - 1) * talDay; } - break; + break; } setMonth(month); @@ -495,7 +470,7 @@ function setDay(day) { function getMonth() { const month = state.mwcal[mwcal.world].month; - return mwcal.months[mwcal.world][month - 1]; + return mwcal.months[mwcal.world][month-1]; } function setMonth(month) { @@ -505,7 +480,7 @@ function setMonth(month) { } function setMonthName(month, name) { - const monnum = mwcal.months[mwcal.world].indexOf(month); + const monnum = mwcal.months[mwcal.world].indexOf(month) mwcal.months[mwcal.world][monnum] = name; monthNames = mwcal.months; } @@ -545,27 +520,27 @@ function updMoon(phase, phase2) { switch (remainder) { default: moonArray = getMoonArray(1); - break; + break; case 0.25: moonArray = getMoonArray(2); - break; + break; case 0.5: moonArray = getMoonArray(3); - break; + break; case 0.75: moonArray = getMoonArray(4); - break; + break; } const moonNum = moonArray.split(','); getMoon(moonNum[ordinal % 8]); - break; + break; case 1: moonArray = getMoonArray(); const lunaNum = moonArray[0].split(','); const celeneNum = moonArray[1].split(','); getMoon(lunaNum[ordinal % 8], celeneNum[ordinal % 8]); - break; + break; } } else { if (phase2) { @@ -585,19 +560,19 @@ function getMoonArray(num) { case 1: moonArray = '0,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,4,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1'; - break; + break; case 2: moonArray = '0,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,0,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1'; - break; + break; case 3: moonArray = '0,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,0,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1'; - break; + break; case 4: moonArray = '0,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,3,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,16,16,1,2,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,0,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16,1,2,2,3,3,4,4,5,6,6,7,7,7,8,8,9,10,10,11,11,12,12,13,14,14,14,15,15,16,16,16,1,2,2,3,3,4,4,5,6,6,7,7,8,8,9,10,10,11,11,11,12,12,13,14,14,15,15,15,16,16'; - break; + break; } break; case 1: @@ -605,7 +580,7 @@ function getMoonArray(num) { '0,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,12,13,13,14,14,15,15,16,16,1,2,2,3,4,4,5,5,6,6,7', '0,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16', ]; - break; + break; } return moonArray; @@ -638,16 +613,16 @@ function randomizeWeather() { switch (ordinal) { case ordinal > 325 || ordinal <= 70: season = 'Winter'; - break; + break; case ordinal <= 165: season = 'Spring'; - break; + break; case ordinal <= 255: season = 'Summer'; - break; + break; case ordinal <= 325: season = 'Fall'; - break; + break; } let rand = randomInteger(21); @@ -659,16 +634,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a bitterly cold winter day, '; - break; + break; case 'Spring': temp = 'It is a cold spring day, '; - break; + break; case 'Summer': temp = 'It is a cool summer day, '; - break; + break; case 'Fall': temp = 'It is a cold fall day, '; - break; + break; } break; case rand >= 18 && rand <= 20: @@ -677,16 +652,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a mild winter day, '; - break; + break; case 'Spring': temp = 'It is a hot spring day, '; - break; + break; case 'Summer': temp = 'It is a blisteringly hot summer day, '; - break; + break; case 'Fall': temp = 'It is a hot fall day, '; - break; + break; } break; default: @@ -694,16 +669,16 @@ function randomizeWeather() { switch (season) { case 'Winter': temp = 'It is a cold winter day, '; - break; + break; case 'Spring': temp = 'It is a warm spring day, '; - break; + break; case 'Summer': temp = 'It is a hot summer day, '; - break; + break; case 'Fall': temp = 'It is a cool fall day, '; - break; + break; } break; } @@ -715,30 +690,30 @@ function randomizeWeather() { switch (season) { case 'Winter': precip = 'and snow falls softly from the sky.'; - break; + break; default: precip = 'and it is raining lightly.'; - break; + break; } break; case rand >= 18 && rand <= 20: switch (season) { case 'Winter': precip = 'and snow falls heavily from the sky.'; - break; + break; default: precip = 'and a torrential rain is falling.'; - break; + break; } break; default: switch (randomInteger(2)) { case 1: precip = 'and the sky is clear.'; - break; + break; default: precip = 'and the sky is overcast.'; - break; + break; } break; } @@ -773,269 +748,225 @@ function calendarMenu() { default: switch (mwcal.world) { default: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; case 1: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
Weather: ${weather}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; } - break; + break; case null: switch (mwcal.world) { default: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; case 1: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Weather: ${weather}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; } - break; + break; } - break; + break; case null: switch (moon) { default: switch (mwcal.world) { default: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; case 1: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
Moon: ${moon}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; } - break; + break; case null: switch (mwcal.world) { default: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; case 1: - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Multi-World Calendar
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- - `` + //-- - `` + //-- - `` + //-- - `
` + //-- - `` + //-- - `` + //-- - `

` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Multi-World Calendar
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
World: ${state.mwcal[mwcal.world].name}
Day: ${day}${suffix}
Month: ${month}
Year: ${year}
Time: ${hour}:${minute}
` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` + //-- + `` + //-- + `` + //-- + `

` + //-- + `` + //-- + `
` ); - break; + break; } - break; + break; } - break; + break; } } @@ -1055,63 +986,55 @@ function showCalendar() { default: switch (moon) { default: - sendChat( - 'Multi-World Calendar', - `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Today\'s Weather: ${weather}
` + //-- - `
Moon Phase: ${moon}` + //-- - `
` + sendChat('Multi-World Calendar', `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Today\'s Weather: ${weather}
` + //-- + `
Moon Phase: ${moon}` + //-- + `
` ); - break; + break; case null: - sendChat( - 'Multi-World Calendar', - `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Today\'s Weather: ${weather}
` + //-- - `
` + sendChat('Multi-World Calendar', `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Today\'s Weather: ${weather}
` + //-- + `
` ); - break; + break; } - break; + break; case null: switch (moon) { default: - sendChat( - 'Multi-World Calendar', - `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
Moon Phase: ${moon}` + //-- - `
` + sendChat('Multi-World Calendar', `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
Moon Phase: ${moon}` + //-- + `
` ); - break; + break; case null: - sendChat( - 'Multi-World Calendar', - `
` + //-- - `
${state.mwcal[mwcal.world].name} Calendar
` + //-- - `
Player View
` + //-- - `
` + //-- - `${day}${suffix} of ${month}, ${year}` + //-- - `
Current Time: ${hour}:${minute}` + //-- - `
` + sendChat('Multi-World Calendar', `
` + //-- + `
${state.mwcal[mwcal.world].name} Calendar
` + //-- + `
Player View
` + //-- + `
` + //-- + `${day}${suffix} of ${month}, ${year}` + //-- + `
Current Time: ${hour}:${minute}` + //-- + `
` ); - break; + break; } - break; + break; } } @@ -1125,67 +1048,67 @@ function advance(amount, type) { switch (type.toLowerCase()) { case 'short rest': hour += amount; - break; + break; case 'long rest': hour += amount * 8; - break; + break; case 'minute': minute += amount; - break; + break; case 'hour': hour += amount; - break; + break; case 'day': ordinal += amount; - break; + break; case 'week': ordinal += amount * 7; - break; + break; case 'month': switch (mwcal.world) { case 0: ordinal += amount * 30; - break; + break; case 1: ordinal += amount * 28; - break; + break; case 2: const grhwkDays = [7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28, 7, 28, 28, 28]; - for (let i = month; i < month + amount; i++) { + for (let i=month; i grhwkDays.length) { - ordinal += grhwkDays[i - grhwkDays.length]; + ordinal += grhwkDays[i-grhwkDays.length]; } else { ordinal += grhwkDays[i]; } } - break; + break; case 3: const modernDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - for (let i = month; i < month + amount; i++) { + for (let i=month; i modernDays.length) { - ordinal += modernDays[i - modernDays.length]; + ordinal += modernDays[i-modernDays.length]; } else { ordinal += modernDays[i]; } } - break; + break; case 4: const talDays = [29, 30, 30, 31, 28, 31, 32, 29, 27, 29, 32]; - for (let i = month; i < month + amount; i++) { + for (let i=month; i talDays.length) { - ordinal += talDays[i - talDays.length]; + ordinal += talDays[i-talDays.length]; } else { ordinal += talDays[i]; } } - break; + break; } updDate(); - break; + break; case 'year': year += amount; - break; + break; } while (minute >= 60) { @@ -1204,31 +1127,31 @@ function advance(amount, type) { ordinal -= 360; year++; } - break; + break; case 1: while (ordinal > 336) { ordinal -= 364; year++; } - break; + break; case 2: while (ordinal > 364) { ordinal -= 365; year++; } - break; + break; case 3: while (ordinal > 365) { ordinal -= 365; year++; } - break; + break; case 4: while (ordinal > 328) { ordinal -= 328; year++; } - break; + break; } state.mwcal[mwcal.world].ord = ordinal; @@ -1245,40 +1168,36 @@ function alarmMenu(num) { if (!alarm) { if (!len || len === 0) { - sendChat( - 'Multi-World Calendar', - `/w gm
` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `
No Alarms set
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `
` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `
No Alarms set
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `
` ); } else { - for (let i = 0; i < len; i++) { + for (let i=0; i` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `
Alarm: Not selected
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `
Alarm: Not selected
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `
` ); } } else { - for (let i = 0; i < len; i++) { + for (let i=0; i` + //-- - `
Alarm Menu
` + //-- - `
` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `
Alarm: ${title}
Title: ${title}
Date: ${date}
Time: ${time}
Message: ${message}
` + //-- - `

` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + //-- - `` + sendChat('Multi-World Calendar', `/w gm
` + //-- + `
Alarm Menu
` + //-- + `
` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
Alarm: ${title}
Title: ${title}
Date: ${date}
Time: ${time}
Message: ${message}
` + //-- + `

` + //-- + `` + //-- + `` + //-- + `` + //-- + `` + //-- + `
` ); } } @@ -1323,17 +1240,16 @@ function createAlarm(title, date, time, message) { year: splitDate[2], hour: splitTime[0], minute: splitTime[1], - message: message, + message: message }; state.alarms[mwcal.world].push(alarm); - sendChat( - 'Multi-World Calendar'`/w gm Alarm #${state.alarms[mwcal.world].length - 1} created!\n` + //-- - `Title: ${title}\n` + //-- - `Date: ${date}\n` + //-- - `Time: ${time}\n` + //-- - `Message: ${message}` + sendChat('Multi-World Calendar' `/w gm Alarm #${state.alarms[mwcal.world].length - 1} created!\n` + //-- + `Title: ${title}\n` + //-- + `Date: ${date}\n` + //-- + `Time: ${time}\n` + //-- + `Message: ${message}` ); alarmMenu(state.alarms[mwcal.world].length - 1); @@ -1376,9 +1292,9 @@ function deleteAlarm(num) { function updAlarm(num) { const alarm = state.alarms[mwcal.world][num]; - + if (!alarm) { - sendChat('Multi-World Calendar', '/w gm This Alarm does not exist!'); + sendChat('Multi-World Calendar', '/w gm This Alarm does not exist!') } else { const title = alarm.title; const date = `${alarm.day}.${alarm.month}.${alarm.year}`; @@ -1393,12 +1309,10 @@ function updAlarm(num) { }); } - hand.set( - 'notes', - `Title: ${title}\n` + //-- - `Date: ${date}\n` + //-- - `Time: ${time}\n` + //-- - `Message: ${message}` + hand.set('notes', `Title: ${title}\n` + //-- + `Date: ${date}\n` + //-- + `Time: ${time}\n` + //-- + `Message: ${message}` ); } } @@ -1406,48 +1320,30 @@ function updAlarm(num) { function chkAlarms() { const alarms = state.alarms[mwcal.world]; if (alarms) { - alarms.forEach(alarm => { + alarms.forEach(alarm => { if (alarm.hour) { - if ( - alarm.year === state.mwcal[mwcal.world].year && - alarm.month === state.mwcal[mwcal.world].month && - alarm.day >= state.mwcal[mwcal.world].day && - !(alarm.day >= state.mwcal[mwcal.world].day + 7) && - alarm.hour >= state.mwcal[mwcal.world].hour && - !(alarm.hour >= state.mwcal[mwcal.world].hour + 12) && - alarm.minute >= state.mwcal[mwcal.world].minute && - !(alarm.minute >= state.mwcal[mwcal.world].minute + 30) - ) { + if (alarm.year === state.mwcal[mwcal.world].year && alarm.month === state.mwcal[mwcal.world].month && (alarm.day >= state.mwcal[mwcal.world].day && !(alarm.day >= state.mwcal[mwcal.world].day+7)) && (alarm.hour >= state.mwcal[mwcal.world].hour && !(alarm.hour >= state.mwcal[mwcal.world].hour+12)) && (alarm.minute >= state.mwcal[mwcal.world].minute && !(alarm.minute >= state.mwcal[mwcal.world].minute+30))) { const alarmNum = state.alarms[mwcal.world].indexOf(alarm); - - sendChat( - 'Multi-World Calendar', - `/w gm Alarm #${alarmNum} triggered!\n` + //-- - `Title: ${alarm.title}\n` + //-- - `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- - `Time: ${alarm.hour}:${alarm.minute}\n` + //-- - `Message: ${alarm.message}` + + sendChat('Multi-World Calendar', `/w gm Alarm #${alarmNum} triggered!\n` + //-- + `Title: ${alarm.title}\n` + //-- + `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- + `Time: ${alarm.hour}:${alarm.minute}\n` + //-- + `Message: ${alarm.message}` ); - + deleteAlarm(alarmNum); } } else { - if ( - alarm.year === state.mwcal[mwcal.world].year && - alarm.month === state.mwcal[mwcal.world].month && - alarm.day >= state.mwcal[mwcal.world].day && - !(alarm.day >= state.mwcal[mwcal.world].day + 7) - ) { + if (alarm.year === state.mwcal[mwcal.world].year && alarm.month === state.mwcal[mwcal.world].month && (alarm.day >= state.mwcal[mwcal.world].day && !(alarm.day >= state.mwcal[mwcal.world].day+7))) { const alarmNum = state.alarms[mwcal.world].indexOf(alarm); - - sendChat( - 'Multi-World Calendar', - `/w gm Alarm #${alarmNum} triggered!\n` + //-- - `Title: ${alarm.title}\n` + //-- - `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- - `Message: ${alarm.message}` + + sendChat('Multi-World Calendar', `/w gm Alarm #${alarmNum} triggered!\n` + //-- + `Title: ${alarm.title}\n` + //-- + `Date: ${alarm.day}.${alarm.month}.${alarm.year}\n` + //-- + `Message: ${alarm.message}` ); - + deleteAlarm(alarmNum); } }