' + //--
146 | day + suffix + ' ' + month + ', ' + state.Calendar.now.year + //--
147 | downstr + //--
148 | '
Moon: ' + moon
150 | );
151 | },
152 |
153 | getdate = function(options){
154 | var day = Number(options);
155 | var date;
156 | var month;
157 |
158 | if(day>0 && day<=30){
159 | month="Hammer";
160 | date=day;
161 | }else if(day==31){
162 | month="Midwinter";
163 | date='festival';
164 | }else if(day>31 && day<=61){
165 | month="Alturiak";
166 | date=day-31;
167 | }else if(day>61 && day<=91){
168 | month="Ches";
169 | date=day-61;
170 | }else if(day>91 && day<=121){
171 | month="Tarsakh";
172 | date=day-91;
173 | }else if(day==122){
174 | month="Greengrass";
175 | date='festival';
176 | }else if(day>122 && day<=152){
177 | month="Mirtul";
178 | date=day-122;
179 | }else if(day>152 && day<=182){
180 | month="Kythorn";
181 | date=day-152;
182 | }else if(day>182 && day<=212){
183 | month="Flamerule";
184 | date=day-182;
185 | }else if(day==213){
186 | month="Midsummer";
187 | date='festival';
188 | }else if(day>213 && day<=243){
189 | month="Eleasias"
190 | date=day-213;
191 | }else if(day>243 && day<=273){
192 | month="Eleint";
193 | date=day-243;
194 | }else if(day==274){
195 | month="Highharvestide";
196 | date='festival';
197 | }else if(day>274 && day<=304){
198 | month="Marpenoth";
199 | date=day-274;
200 | }else if(day>304 && day<=334){
201 | month="Uktar";
202 | date=day-304;
203 | }else if(day==335){
204 | month="Feast of the Moon";
205 | date='festival';
206 | }else if(day>335 && day<=365){
207 | month="Nightal";
208 | date=day-335;
209 | }else{
210 | month="Hammer";
211 | date='1';
212 | }
213 |
214 | var array=month+','+String(date);
215 | return array;
216 | },
217 |
218 | getordinal = function(options){
219 | var args = options.content.split(",");
220 | var date = args[1];
221 | var month = args[2];
222 | var ordinal = state.Calendar.now.ordinal;
223 |
224 | if(date == 'festival'){
225 | date = 1;
226 | }else{
227 | date = Number(args[1]);
228 | }
229 |
230 | switch(month) {
231 | case 'Hammer':
232 | ordinal = date;
233 | break;
234 | case 'Midwinter':
235 | ordinal = 31;
236 | break;
237 | case 'Alturiak':
238 | ordinal = 31+date;
239 | break;
240 | case 'Ches':
241 | ordinal = 61+date;
242 | break;
243 | case 'Tarsakh':
244 | ordinal = 91+date;
245 | break;
246 | case 'Greengrass':
247 | ordinal = 122;
248 | break;
249 | case 'Mirtul':
250 | ordinal = 122+date;
251 | break;
252 | case 'Kythorn':
253 | ordinal = 152+date;
254 | break;
255 | case 'Flamerule':
256 | ordinal = 182+date;
257 | break;
258 | case 'Midsummer':
259 | ordinal = 213;
260 | break;
261 | case 'Eleasias':
262 | ordinal = 213+date;
263 | break;
264 | case 'Eleint':
265 | ordinal = 243+date;
266 | break;
267 | case 'Highharvestide':
268 | ordinal = 274;
269 | break;
270 | case 'Marpenoth':
271 | ordinal = 274+date;
272 | break;
273 | case 'Uktar':
274 | ordinal = 304+date;
275 | break;
276 | case 'Feast of the Moon':
277 | ordinal = 334+date;
278 | break;
279 | case 'Nightal':
280 | ordinal = 335+date;
281 | break;
282 | }
283 | state.Calendar.now.ordinal = ordinal;
284 | },
285 |
286 | getsuffix = function(day) {
287 |
288 | var date = Number(day)
289 | var suffix
290 |
291 | if (date == 1 || date == 21 ){
292 | suffix = 'st';
293 | }else if (date == 2 || date == 22){
294 | suffix = 'nd';
295 | }else if (date == 3 || date == 23){
296 | suffix = 'rd';
297 | }else{
298 | suffix = 'th';
299 | }
300 |
301 | return suffix;
302 | },
303 |
304 | getdown = function(days) {
305 | var down = Number(days);
306 | var div = state.Calendar.now.div;
307 |
308 | if(div!=0){
309 | down = down/div;
310 | }
311 |
312 | return down;
313 | },
314 |
315 | addday = function(add) {
316 | var ordinal = Number(add);
317 | var div = state.Calendar.now.div;
318 |
319 | if(div!=0){
320 | state.Calendar.now.down = Number(state.Calendar.now.down)+ordinal;
321 | }
322 |
323 |
324 | ordinal = ordinal + Number(state.Calendar.now.ordinal);
325 |
326 | if(ordinal>365){
327 | ordinal=ordinal-365;
328 | state.Calendar.now.year = Number(state.Calendar.now.year)+1;
329 | }
330 |
331 | state.Calendar.now.ordinal = ordinal;
332 | },
333 |
334 | weather = function() {
335 | var roll;
336 | var temperature;
337 | var wind;
338 | var precipitation;
339 | var season;
340 | var ordinal = state.Calendar.now.ordinal;
341 |
342 | if(ordinal > 349 || ordinal <= 75){
343 | season = 'Winter'
344 | }else if(ordinal > 75 && ordinal <= 166){
345 | season = 'Spring'
346 | }else if(ordinal > 166 && ordinal <=257 ){
347 | season = 'Summer'
348 | }else if(ordinal > 257 && ordinal <=349 ){
349 | season = 'Fall'
350 | }
351 |
352 | roll = Math.floor(Math.random()*(20-1+1)+1);
353 | if(roll>=15 && roll<=17){
354 | switch(season) {
355 | case 'Winter':
356 | temperature = 'It is a bitterly cold winter day. ';
357 | break;
358 | case 'Spring':
359 | temperature = 'It is a cold spring day. ';
360 | break;
361 | case 'Summer':
362 | temperature = 'It is a cool summer day. ';
363 | break;
364 | case 'Fall':
365 | temperature = 'It is a cold fall day. ';
366 | break;
367 | }
368 | }else if(roll>=18 && roll<=20){
369 | switch(season) {
370 | case 'Winter':
371 | temperature = 'It is a warm winter day. ';
372 | break;
373 | case 'Spring':
374 | temperature = 'It is a hot spring day. ';
375 | break;
376 | case 'Summer':
377 | temperature = 'It is a blisteringly hot summer day. ';
378 | break;
379 | case 'Fall':
380 | temperature = 'It is a hot fall day. ';
381 | break;
382 | }
383 | }else{
384 | switch(season) {
385 | case 'Winter':
386 | temperature = 'It is a cold winter day. ';
387 | break;
388 | case 'Spring':
389 | temperature = 'It is a mild spring day. ';
390 | break;
391 | case 'Summer':
392 | temperature = 'It is a hot summer day. ';
393 | break;
394 | case 'Fall':
395 | temperature = 'It is a mild fall day. ';
396 | break;
397 | }
398 |
399 | }
400 |
401 | roll = Math.floor(Math.random()*(20-1+1)+1);
402 | if(roll>=15 && roll<=17){
403 | wind='There is a light breeze and ';
404 | }else if(roll>=18 && roll<=20){
405 | wind='There is a howling wind and ';
406 | }else{
407 | wind='The air is still and ';
408 | }
409 |
410 | roll = Math.floor(Math.random()*(20-1+1)+1);
411 | if(roll>=15 && roll<=17){
412 | precipitation="Light rain or snow.";
413 | if(season=='Winter'){
414 | precipitation = 'snow falls softly on the ground.';
415 | }else{
416 | precipitation = 'a light rain falls from the sky.';
417 | }
418 | }else if(roll>=18 && roll<=20){
419 | if(season=='Winter'){
420 | precipitation = 'snow falls thick and fast from the sky.';
421 | }else{
422 | precipitation = 'a torrential rain begins to fall.';
423 | }
424 | }else{
425 | roll = Math.floor(Math.random()*(2-1+1)+1);
426 | if(roll=1){
427 | precipitation = 'the sky is overcast.';
428 | }else{
429 | precipitation = 'the sky is clear.';
430 | }
431 | }
432 |
433 | var forecast=temperature+wind+precipitation;
434 | state.Calendar.now.weather = forecast;
435 | },
436 |
437 | getmoon = function() {
438 | var ordinal = state.Calendar.now.ordinal;
439 | var moonNo;
440 | var moon;
441 |
442 | moonNo = Math.ceil(ordinal/3)-Math.floor(Math.ceil(ordinal/3)/8)*8;
443 |
444 | switch(moonNo) {
445 | case 1:
446 | moon = 'First Quarter';
447 | break;
448 | case 2:
449 | moon = 'Waxing Cresent';
450 | break;
451 | case 3:
452 | moon = 'New';
453 | break;
454 | case 4:
455 | moon = 'Waning Cresent';
456 | break;
457 | case 5:
458 | moon = 'Third Quarter';
459 | break;
460 | case 6:
461 | moon = 'Waning Gibbous';
462 | break;
463 | case 7:
464 | moon = 'Full';
465 | break;
466 | case 0:
467 | moon = 'Waxing Gibbous';
468 | break;
469 | }
470 |
471 | return moon;
472 | },
473 |
474 | checkInstall = function() {
475 | // Check if the Calendar property exists, creating it if it doesn't
476 | if( ! state.Calendar ) {
477 | setDefaults();
478 | }
479 | },
480 |
481 | registerEventHandlers = function() {
482 | on('chat:message', handleInput);
483 | };
484 |
485 | return {
486 | CheckInstall: checkInstall,
487 | RegisterEventHandlers: registerEventHandlers
488 | };
489 |
490 | }());
491 |
492 | on("ready",function(){
493 | 'use strict';
494 | Calendar.CheckInstall();
495 | Calendar.RegisterEventHandlers();
496 | });
497 |
--------------------------------------------------------------------------------
/Greyhawk Calendar v2.0.js:
--------------------------------------------------------------------------------
1 | // Calendar and down day counter for Greyhawk
2 | // Created by Kirsty (https://app.roll20.net/users/1165285/kirsty)
3 | // Greyhawk and moon additions by Brusana (https://app.roll20.net/users/273644/brusana)
4 |
5 | // API Commands:
6 | // !cal - for the GM displays the menu in the chat window, for a player displays date, weather and down days
7 |
8 | // Red Colour: #7E2D40
9 |
10 | var Calendar = Calendar || (function() {
11 | 'use strict';
12 |
13 | var version = '2.0',
14 |
15 | setDefaults = function() {
16 | state.Calendar = {
17 | now: {
18 | ordinal: 1,
19 | year: 595,
20 | down: 0,
21 | divider: 1,
22 | weather: "It is a cool but sunny day"
23 | },
24 | };
25 | },
26 |
27 | handleInput = function(msg) {
28 | var args = msg.content.split(",");
29 |
30 | if (msg.type !== "api") {
31 | return;
32 | }
33 |
34 | if(playerIsGM(msg.playerid)){
35 | switch(args[0]) {
36 | case '!cal':
37 | calmenu();
38 | break;
39 | case '!setday':
40 | getordinal(msg);
41 | weather();
42 | getmoons();
43 | calmenu();
44 | break;
45 | case '!setmonth':
46 | getordinal(msg);
47 | weather();
48 | getmoons();
49 | calmenu();
50 | break;
51 | case '!setyear':
52 | state.Calendar.now.year=args[1];
53 | calmenu();
54 | break;
55 | case '!setordinal':
56 | state.Calendar.now.ordinal=args[1];
57 | getmoons();
58 | calmenu();
59 | break;
60 | case '!setdown':
61 | var down = Number(args[1]);
62 | state.Calendar.now.down = down;
63 | getdown(down);
64 | calmenu();
65 | break;
66 | case '!setdiv':
67 | state.Calendar.now.div=Number(args[1]);
68 | calmenu();
69 | break;
70 | case '!addday':
71 | addday(args[1]);
72 | weather();
73 | getmoons();
74 | calmenu();
75 | break;
76 | case '!weather':
77 | state.Calendar.now.weather=args[1];
78 | getmoons();
79 | calmenu();
80 | break;
81 | case '!playercal':
82 | showcal(msg);
83 | break;
84 | }
85 | }else if(args[0]=='!cal'){
86 | showcal(msg);
87 | }
88 | },
89 |
90 | calmenu = function() {
91 | var divstyle = 'style="width: 189px; border: 1px solid black; background-color: #ffffff; padding: 5px;"'
92 | var astyle = 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070;';
93 | var tablestyle = 'style="text-align:center;"';
94 | var arrowstyle = 'style="border: none; border-top: 3px solid transparent; border-bottom: 3px solid transparent; border-left: 195px solid rgb(126, 45, 64); margin-bottom: 2px; margin-top: 2px;"';
95 | var headstyle = 'style="color: rgb(126, 45, 64); font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"';
96 | var substyle = 'style="font-size: 11px; line-height: 13px; margin-top: -3px; font-style: italic;"';
97 | var down = state.Calendar.now.down;
98 | down = getdown(down);
99 | var nowdate = getdate(state.Calendar.now.ordinal).split(',');
100 | var month = nowdate[0];
101 | var day = nowdate[1];
102 |
103 | sendChat('Calendar', '/w gm
'
123 | );
124 | },
125 |
126 | showcal = function(msg) {
127 | var nowdate = getdate(state.Calendar.now.ordinal).split(',');
128 | var month = nowdate[0];
129 | var day = nowdate[1];
130 | var down = state.Calendar.now.down;
131 | down = getdown(down);
132 | var suffix = getsuffix(day);
133 | var divstyle = 'style="width: 189px; border: 1px solid black; background-color: #ffffff; padding: 5px;"'
134 | var astyle = 'style="text-align:center; border: 1px solid black; margin: 1px; background-color: #7E2D40; border-radius: 4px; box-shadow: 1px 1px 1px #707070;';
135 | var tablestyle = 'style="text-align:center;"';
136 | var arrowstyle = 'style="border: none; border-top: 3px solid transparent; border-bottom: 3px solid transparent; border-left: 195px solid rgb(126, 45, 64); margin-bottom: 2px; margin-top: 2px;"';
137 | var headstyle = 'style="color: rgb(126, 45, 64); font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"';
138 | var substyle = 'style="font-size: 11px; line-height: 13px; margin-top: -3px; font-style: italic;"';
139 |
140 | sendChat(msg.who, '
' + //--
141 | '
Calendar
' + //--
142 | '
Player View
' + //--
143 | '
' + //--
144 | day + suffix + ' day of ' + month + ', ' + state.Calendar.now.year+' CY' + //--
145 | '
' + //--
146 | 'Luna ' + state.Calendar.now.luna + //--
147 | '
' + //--
148 | 'Celene ' + state.Calendar.now.celene + //--
149 | // '
Players have ' + down + ' down days.' + //--
150 | '
Today\'s weather:
' + state.Calendar.now.weather //--
151 | );
152 | },
153 |
154 | getdate = function(options){
155 | var day = Number(options);
156 | var date;
157 | var month;
158 |
159 | if(day>0 && day<=7){
160 | month="Needfest";
161 | date=day;
162 | }else if(day>7 && day<=35){
163 | month="Fire Seek";
164 | date=day-7;
165 | }else if(day>35 && day<=63){
166 | month="Readying";
167 | date=day-35;
168 | }else if(day>63 && day<=91){
169 | month="Coldeven";
170 | date=day-63;
171 | }else if(day>91 && day<=98){
172 | month="Growfest";
173 | date=day-91;
174 | }else if(day>98 && day<=126){
175 | month="Planting";
176 | date=day-98;
177 | }else if(day>126 && day<=154){
178 | month="Flocktime";
179 | date=day-126;
180 | }else if(day>154 && day<=182){
181 | month="Wealsun";
182 | date=day-154;
183 | }else if(day>182 && day<=189){
184 | month="Richfest";
185 | date=day-182;
186 | }else if(day>189 && day<=217){
187 | month="Reaping";
188 | date=day-189;
189 | }else if(day>217 && day<=245){
190 | month="Goodmonth"
191 | date=day-217;
192 | }else if(day>245 && day<=273){
193 | month="Harvester";
194 | date=day-245;
195 | }else if(day>273 && day<=280){
196 | month="Brewfest";
197 | date=day-273;
198 | }else if(day>280 && day<=308){
199 | month="Patchwall";
200 | date=day-280;
201 | }else if(day>308 && day<=336){
202 | month="Readyreat";
203 | date=day-308;
204 | }else if(day>336 && day<=364){
205 | month="Sunsebb";
206 | date=day-336;
207 | }else{
208 | month="Needfest";
209 | date='1';
210 | }
211 |
212 | var array=month+','+String(date);
213 | return array;
214 | },
215 |
216 | getordinal = function(options){
217 | var args = options.content.split(",");
218 | var date = args[1];
219 | var month = args[2];
220 | var ordinal = state.Calendar.now.ordinal;
221 |
222 | if(date == 'festival'){
223 | date = 1;
224 | }else{
225 | date = Number(args[1]);
226 | }
227 |
228 | switch(month) {
229 | case 'Needfest':
230 | ordinal = date;
231 | break;
232 | case 'Fire Seek':
233 | ordinal = 7+date;
234 | break;
235 | case 'Readying':
236 | ordinal = 35+date;
237 | break;
238 | case 'Coldeven':
239 | ordinal = 63+date;
240 | break;
241 | case 'Growfest':
242 | ordinal = 91+date;
243 | break;
244 | case 'Planting':
245 | ordinal = 98+date;
246 | break;
247 | case 'Flocktime':
248 | ordinal = 126+date;
249 | break;
250 | case 'Wealsun':
251 | ordinal = 154+date;
252 | break;
253 | case 'Richfest':
254 | ordinal = 182+date;
255 | break;
256 | case 'Reaping':
257 | ordinal = 189+date;
258 | break;
259 | case 'Goodmonth':
260 | ordinal = 217+date;
261 | break;
262 | case 'Harvester':
263 | ordinal = 245+date;
264 | break;
265 | case 'Brewfest':
266 | ordinal = 273+date;
267 | break;
268 | case 'Patchwall':
269 | ordinal = 280+date;
270 | break;
271 | case 'Readyreat':
272 | ordinal = 308+date;
273 | break;
274 | case 'Sunsebb':
275 | ordinal = 336+date;
276 | break;
277 | }
278 | state.Calendar.now.ordinal = ordinal;
279 | },
280 |
281 | getsuffix = function(day) {
282 |
283 | var date = Number(day)
284 | var suffix
285 |
286 | if (date == 1 || date == 21 ){
287 | suffix = 'st';
288 | }else if (date == 2 || date == 22){
289 | suffix = 'nd';
290 | }else if (date == 3 || date == 23){
291 | suffix = 'rd';
292 | }else{
293 | suffix = 'th';
294 | }
295 |
296 | return suffix;
297 | },
298 |
299 | getdown = function(days) {
300 | var down = Number(days)
301 | down = Math.floor(down/state.Calendar.now.div);
302 | return down;
303 | },
304 |
305 | addday = function(add) {
306 | var ordinal = Number(add)
307 | state.Calendar.now.down = Number(state.Calendar.now.down)+ordinal
308 | ordinal = ordinal + Number(state.Calendar.now.ordinal);
309 |
310 | if(ordinal>364){
311 | ordinal=ordinal-364;
312 | state.Calendar.now.year = Number(state.Calendar.now.year)+1;
313 | }
314 |
315 | state.Calendar.now.ordinal = ordinal;
316 | },
317 |
318 | weather = function() { //--Weather generator function is disabled so that I can set the weather MUAHAHAHAHAHA
319 | var roll;
320 | var temperature;
321 | var wind;
322 | var precipitation;
323 | var season;
324 | var ordinal = state.Calendar.now.ordinal;
325 |
326 | if(ordinal > 336 || ordinal <= 35){
327 | season = 'Winter'
328 | }else if(ordinal > 35 && ordinal <= 98){
329 | season = 'Spring'
330 | }else if(ordinal > 98 && ordinal <=273 ){
331 | season = 'Summer'
332 | }else if(ordinal > 273 && ordinal <=336 ){
333 | season = 'Fall'
334 | }
335 |
336 | roll = Math.floor(Math.random()*(20-1+1)+1);
337 | if(roll>=15 && roll<=17){
338 | switch(season) {
339 | case 'Winter':
340 | temperature = 'It is a bitterly cold winter day. ';
341 | break;
342 | case 'Spring':
343 | temperature = 'It is a cold spring day. ';
344 | break;
345 | case 'Summer':
346 | temperature = 'It is a cool summer day. ';
347 | break;
348 | case 'Fall':
349 | temperature = 'It is a cold fall day. ';
350 | break;
351 | }
352 | }else if(roll>=18 && roll<=20){
353 | switch(season) {
354 | case 'Winter':
355 | temperature = 'It is a warm winter day. ';
356 | break;
357 | case 'Spring':
358 | temperature = 'It is a hot spring day. ';
359 | break;
360 | case 'Summer':
361 | temperature = 'It is a blisteringly hot summer day. ';
362 | break;
363 | case 'Fall':
364 | temperature = 'It is a hot fall day. ';
365 | break;
366 | }
367 | }else{
368 | switch(season) {
369 | case 'Winter':
370 | temperature = 'It is a cold winter day. ';
371 | break;
372 | case 'Spring':
373 | temperature = 'It is a mild spring day. ';
374 | break;
375 | case 'Summer':
376 | temperature = 'It is a hot summer day. ';
377 | break;
378 | case 'Fall':
379 | temperature = 'It is a mild fall day. ';
380 | break;
381 | }
382 |
383 | }
384 |
385 | roll = Math.floor(Math.random()*(20-1+1)+1);
386 | if(roll>=15 && roll<=17){
387 | wind='There is a light breeze and ';
388 | }else if(roll>=18 && roll<=20){
389 | wind='There is a howling wind and ';
390 | }else{
391 | wind='The air is still and ';
392 | }
393 |
394 | roll = Math.floor(Math.random()*(20-1+1)+1);
395 | if(roll>=15 && roll<=17){
396 | precipitation="Light rain or snow.";
397 | if(season=='Winter'){
398 | precipitation = 'snow falls softly on the ground.';
399 | }else{
400 | precipitation = 'a light rain falls from the sky.';
401 | }
402 | }else if(roll>=18 && roll<=20){
403 | if(season=='Winter'){
404 | precipitation = 'snow falls thick and fast from the sky.';
405 | }else{
406 | precipitation = 'a torrential rain begins to fall.';
407 | }
408 | }else{
409 | roll = Math.floor(Math.random()*(2-1+1)+1);
410 | if(roll=1){
411 | precipitation = 'the sky is overcast.';
412 | }else{
413 | precipitation = 'the sky is clear.';
414 | }
415 | }
416 |
417 | var forecast=temperature+wind+precipitation;;
418 | state.Calendar.now.weather = forecast;
419 | },
420 | getmoons = function(){
421 | var celene_phase;
422 | var luna_phase;
423 | var ordinal = state.Calendar.now.ordinal;;
424 | //-- Calcualte Luna's Phase //--
425 | if(4<=ordinal && ordinal <11)
426 | {
427 | luna_phase = 'is new';
428 | }
429 | else if(32<=ordinal && ordinal <39)
430 | {
431 | luna_phase = 'is new';
432 | }
433 | else if(60<=ordinal && ordinal <67)
434 | {
435 | luna_phase = 'is new';
436 | }
437 | else if(88<=ordinal && ordinal <95)
438 | {
439 | luna_phase = 'is new';
440 | }
441 | else if(116<=ordinal && ordinal <123)
442 | {
443 | luna_phase = 'is new';
444 | }
445 | else if(144<=ordinal && ordinal <151)
446 | {
447 | luna_phase = 'is new';
448 | }
449 | else if(172<=ordinal && ordinal <179)
450 | {
451 | luna_phase = 'is new';
452 | }
453 | else if(200<=ordinal && ordinal <207)
454 | {
455 | luna_phase = 'is new';
456 | }
457 | else if(228<=ordinal && ordinal <238)
458 | {
459 | luna_phase = 'is new';
460 | }
461 | else if(256<=ordinal && ordinal <263)
462 | {
463 | luna_phase = 'is new';
464 | }
465 | else if(284<=ordinal && ordinal <291)
466 | {
467 | luna_phase = 'is new';
468 | }
469 | else if(312<=ordinal && ordinal <319)
470 | {
471 | luna_phase = 'is new';
472 | }
473 | else if(340<=ordinal && ordinal <347)
474 | {
475 | luna_phase = 'is new';
476 | }
477 | else if(11<=ordinal && ordinal<18)
478 | {
479 | luna_phase = 'is waxing';
480 | }
481 | else if(39<=ordinal && ordinal<46)
482 | {
483 | luna_phase = 'is waxing';
484 | }
485 | else if(67<=ordinal && ordinal<74)
486 | {
487 | luna_phase = 'is waxing';
488 | }
489 | else if(95<=ordinal && ordinal<102)
490 | {
491 | luna_phase = 'is waxing';
492 | }
493 | else if(123<=ordinal && ordinal<130)
494 | {
495 | luna_phase = 'is waxing';
496 | }
497 | else if(151<=ordinal && ordinal<158)
498 | {
499 | luna_phase = 'is waxing';
500 | }
501 | else if(179<=ordinal && ordinal<186)
502 | {
503 | luna_phase = 'is waxing';
504 | }
505 | else if(207<=ordinal && ordinal<214)
506 | {
507 | luna_phase = 'is waxing';
508 | }
509 | else if(235<=ordinal && ordinal<242)
510 | {
511 | luna_phase = 'is waxing';
512 | }
513 | else if(263<=ordinal && ordinal<270)
514 | {
515 | luna_phase = 'is waxing';
516 | }
517 | else if(291<=ordinal && ordinal<298)
518 | {
519 | luna_phase = 'is waxing';
520 | }
521 | else if(319<=ordinal && ordinal<326)
522 | {
523 | luna_phase = 'is waxing';
524 | }
525 | else if(347<=ordinal && ordinal<354)
526 | {
527 | luna_phase = 'is waxing';
528 | }
529 | else if(18<=ordinal && ordinal<25)
530 | {
531 | luna_phase = 'is full';
532 | }
533 | else if(46<=ordinal && ordinal<53)
534 | {
535 | luna_phase = 'is full';
536 | }
537 | else if(74<=ordinal && ordinal<81)
538 | {
539 | luna_phase = 'is full';
540 | }
541 | else if(102<=ordinal && ordinal<109)
542 | {
543 | luna_phase = 'is full';
544 | }
545 | else if(130<=ordinal && ordinal<137)
546 | {
547 | luna_phase = 'is full';
548 | }
549 | else if(158<=ordinal && ordinal<165)
550 | {
551 | luna_phase = 'is full';
552 | }
553 | else if(186<=ordinal && ordinal<193)
554 | {
555 | luna_phase = 'is full';
556 | }
557 | else if(214<=ordinal && ordinal<221)
558 | {
559 | luna_phase = 'is full';
560 | }
561 | else if(242<=ordinal && ordinal<249)
562 | {
563 | luna_phase = 'is full';
564 | }
565 | else if(270<=ordinal && ordinal<277)
566 | {
567 | luna_phase = 'is full';
568 | }
569 | else if(298<=ordinal && ordinal<305)
570 | {
571 | luna_phase = 'is full';
572 | }
573 | else if(326<=ordinal && ordinal<333)
574 | {
575 | luna_phase = 'is full';
576 | }
577 | else if(354<=ordinal && ordinal<361)
578 | {
579 | luna_phase = 'is full';
580 | }
581 | else if(oridinal>4 && ordinal>1)
582 | {
583 | luna_phase = 'is waning';
584 | }
585 | else if(ordinal>=25 && oridinal>32)
586 | {
587 | luna_phase = 'is waning';
588 | }
589 | else if(ordinal>=53 && oridinal>60)
590 | {
591 | luna_phase = 'is waning';
592 | }
593 | else if(ordinal>=81 && oridinal>89)
594 | {
595 | luna_phase = 'is waning';
596 | }
597 | else if(ordinal>=109 && oridinal>116)
598 | {
599 | luna_phase = 'is waning';
600 | }
601 | else if(ordinal>=137 && oridinal>144)
602 | {
603 | luna_phase = 'is waning';
604 | }
605 | else if(ordinal>=165 && oridinal>172)
606 | {
607 | luna_phase = 'is waning';
608 | }
609 | else if(ordinal>=193 && oridinal>200)
610 | {
611 | luna_phase = 'is waning';
612 | }
613 | else if(ordinal>=221 && oridinal>228)
614 | {
615 | luna_phase = 'is waning';
616 | }
617 | else if(ordinal>=249 && oridinal>256)
618 | {
619 | luna_phase = 'is waning';
620 | }
621 | else if(ordinal>=277 && oridinal>284)
622 | {
623 | luna_phase = 'is waning';
624 | }
625 | else if(ordinal>=305 && oridinal>312)
626 | {
627 | luna_phase = 'is waning';
628 | }
629 | else if(ordinal>=333 && oridinal>340)
630 | {
631 | luna_phase = 'is waning';
632 | }
633 | else if(oridinal<=361 && ordinal>364)
634 | {
635 | luna_phase = 'is waning';
636 | }
637 | else
638 | {
639 | luna_phase = 'is missing from the night sky';
640 | }
641 | //-- Calcualte Celene's Phase //-- && 141<=ordinal<164 && 232<=ordinal<255 && 323<=ordinal<346)
642 | if(4<=ordinal&& ordinal<27)
643 | {
644 | celene_phase = 'is full';
645 | }
646 | else if(95<=ordinal&& ordinal<118)
647 | {
648 | celene_phase = 'is full';
649 | }
650 | else if(186<=ordinal&& ordinal<209)
651 | {
652 | celene_phase = 'is full';
653 | }
654 | else if(277<=ordinal&& ordinal<300)
655 | {
656 | celene_phase = 'is full';
657 | }
658 | else if(27<=ordinal && ordinal<50)
659 | {
660 | celene_phase = 'is waning';
661 | }
662 | else if(118<=ordinal && ordinal<141)
663 | {
664 | celene_phase = 'is waning';
665 | }
666 | else if(209<=ordinal && ordinal<232)
667 | {
668 | celene_phase = 'is waning';
669 | }
670 | else if(300<=ordinal && ordinal<323)
671 | {
672 | celene_phase = 'is waning';
673 | }
674 | else if(ordinal>=1 && ordinal < 4)
675 | {
676 | celene_phase = 'is waxing';
677 | }
678 | else if(73<=ordinal && ordinal < 96)
679 | {
680 | celene_phase = 'is waxing';
681 | }
682 | else if(164<=ordinal && ordinal < 187)
683 | {
684 | celene_phase = 'is waxing';
685 | }
686 | else if(255<=ordinal && ordinal < 278)
687 | {
688 | celene_phase = 'is waxing';
689 | }
690 | else if( ordinal >= 346 && ordinal < 364)
691 | {
692 | celene_phase = 'is waxing';
693 | }
694 | else if(141<=ordinal<164)
695 | {
696 | celene_phase = 'is new';
697 | }
698 | else if(232<=ordinal<255)
699 | {
700 | celene_phase = 'is new';
701 | }
702 | else if(323<=ordinal<346)
703 | {
704 | celene_phase = 'is new';
705 | }
706 | else
707 | {
708 | celene_phase = 'is missing from the night sky';
709 | }
710 | state.Calendar.now.luna = luna_phase;
711 | state.Calendar.now.celene = celene_phase;
712 | },
713 | checkInstall = function() {
714 | // Check if the Calendar property exists, creating it if it doesn't
715 | if( ! state.Calendar ) {
716 | setDefaults();
717 | }
718 | },
719 |
720 | registerEventHandlers = function() {
721 | on('chat:message', handleInput);
722 | };
723 |
724 | return {
725 | CheckInstall: checkInstall,
726 | RegisterEventHandlers: registerEventHandlers
727 | };
728 |
729 | }());
730 |
731 | on("ready",function(){
732 | 'use strict';
733 | Calendar.CheckInstall();
734 | Calendar.RegisterEventHandlers();
735 | });
736 |
--------------------------------------------------------------------------------
/Magic Store v2.0.0:
--------------------------------------------------------------------------------
1 | // Magic store generator for D&D 5e
2 | // Created by Kirsty (https://app.roll20.net/users/1165285/kirsty)
3 |
4 |
5 | // API Commands:
6 | // !ms - Pulls up the menu and allows the GM to generate and modify the store
7 | // !shop - Puts the virtual store in chat for the players to peruse
8 |
9 |
10 | // Red Colour: #7E2D40
11 |
12 |
13 | var MagicStore = MagicStore || (function() {
14 | 'use strict';
15 |
16 | var version = '2.0.0',
17 |
18 | setDefaults = function() {
19 | state.store = {
20 | now: {
21 | version: '2.0.0',
22 | inventory: "Adamantine Armor,500,Amulet of Health,8000,Bag of Holding,4000"
23 | },
24 | };
25 | },
26 |
27 | checkDefaults = function() {
28 | if( state.store.now.version != version ){
29 | state.store.now.version = version;
30 | }
31 | if( ! state.store.now.inventory){state.store.now.inventory = "Adamantine Armor,500,Amulet of Health,8000,Bag of Holding,4000"};
32 | },
33 |
34 | handleInput = function(msg) {
35 | var args = msg.content.split(",");
36 |
37 | if (msg.type !== "api") {
38 | return;
39 | }
40 |
41 | if(playerIsGM(msg.playerid)){
42 | switch(args[0]) {
43 | case '!ms':
44 | storeMenu();
45 | break;
46 | case '!ms_inventory':
47 | getInventory(msg);
48 | storeMenu();
49 | break;
50 | case '!shop':
51 | shop();
52 | break;
53 | }
54 | }
55 | },
56 |
57 | storeMenu = function() {
58 | var colour = '#7E2D40';
59 | var divstyle = 'style="width: 189px; border: 1px solid black; background-color: #ffffff; padding: 5px;"'
60 | var astyle1 = 'style="text-align:center; border: 1px solid black; margin: 1px; padding: 2px; background-color: ' + colour + '; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 166px;';
61 | var astyle2 = 'style="text-align:center; border: 1px solid black; margin: 1px; padding: 2px; background-color: ' + colour + '; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 80px;';
62 | var tablestyle ='style="text-align:center; font-size: 12px; width: 100%;"';
63 | var arrowstyle = 'style="border: none; border-top: 3px solid transparent; border-bottom: 3px solid transparent; border-left: 195px solid ' + colour + '; margin-bottom: 2px; margin-top: 2px;"';
64 | var headstyle = 'style="color: ' + colour + '; font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"';
65 | var substyle = 'style="font-size: 11px; line-height: 13px; margin-top: -2px; font-style: italic;"';
66 | var trstyle = 'style="border-top: 1px solid #cccccc; text-align: left;"';
67 | var tdstyle = 'style="text-align: right;"';
68 |
69 | var inventory = state.store.now.inventory;
70 | var items = inventory.split(",");
71 | var invList = '';
72 | var i = 0;
73 |
74 | for (i = 0; i < items.length; i += 2) {
75 | invList += '
| ' + items[i] + ' | ' + items[i+1] + ' |
';
76 | }
77 |
78 | sendChat('Magic Store', '/w gm
' + //--
79 | '
Magic Store
' + //--
80 | '
Menu (v.' + state.store.now.version + ')
' + //--
81 | '
' + //--
82 | '
' + //--
83 | '| Item | Price (gp) |
' + //--
84 | invList + //--
85 | '
'+ //--
86 | '
' + //--
88 | '
' + //--
90 | '
' + //--
92 | '
' + //--
93 | '
'
94 | );
95 | },
96 |
97 | shop = function() {
98 | var colour = '#7E2D40';
99 | var divstyle = 'style="width: 189px; border: 1px solid black; background-color: #ffffff; padding: 5px;"'
100 | var tablestyle ='style="text-align:center; font-size: 12px; width: 100%;"';
101 | var arrowstyle = 'style="border: none; border-top: 3px solid transparent; border-bottom: 3px solid transparent; border-left: 195px solid ' + colour + '; margin-bottom: 2px; margin-top: 2px;"';
102 | var headstyle = 'style="color: ' + colour + '; font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"';
103 | var substyle = 'style="font-size: 11px; line-height: 13px; margin-top: -2px; font-style: italic;"';
104 | var trstyle = 'style="border-top: 1px solid #cccccc; text-align: left;"';
105 | var tdstyle = 'style="text-align: right;"';
106 |
107 | var inventory = state.store.now.inventory;
108 | var items = inventory.split(",");
109 | var invList = '';
110 | var i = 0;
111 |
112 | for (i = 0; i < items.length; i += 2) {
113 | invList += '
| ' + items[i] + ' | ' + items[i+1] + ' |
';
114 | }
115 |
116 | sendChat('Magic Store', '/w gm
' + //--
117 | '
Magic Store
' + //--
118 | '
Menu (v.' + state.store.now.version + ')
' + //--
119 | '
' + //--
120 | '
' + //--
121 | '| Item | Price (gp) |
' + //--
122 | invList + //--
123 | '
'+ //--
124 | '
'
125 | );
126 | },
127 |
128 |
129 |
130 | getInventory = function(msg) {
131 | var args = msg.content.split(",");
132 | var type = args[1];
133 | var rarity;
134 |
135 | var i;
136 | var newInv = "";
137 | var randNo;
138 |
139 | for (i = 0; i < args[2]; i ++) {
140 |
141 | if (i>0){newInv += ','}
142 |
143 | rarity = getRarity(args[3]);
144 | randNo = randomInteger(5);
145 |
146 | if (type == 'scroll'){newInv += getScroll(rarity)}
147 | if (type == 'potion'){newInv += getPotion(rarity)}
148 | if (type == 'weapon'){newInv += getWeapon(rarity)}
149 | if (type == 'armour'){newInv += getArmour(rarity)}
150 | if (type == 'item'){newInv += getItem(rarity)}
151 | if (type == 'random'){
152 | switch(randNo) {
153 | case 1:
154 | newInv += getScroll(rarity);
155 | break;
156 | case 2:
157 | newInv += getPotion(rarity);
158 | break;
159 | case 3:
160 | newInv += getWeapon(rarity);
161 | break;
162 | case 4:
163 | newInv += getArmour(rarity);
164 | break;
165 | case 5:
166 | newInv += getItem(rarity);
167 | break;
168 | }
169 | }
170 | }
171 |
172 | state.store.now.inventory = newInv;
173 | },
174 |
175 | getRarity = function(max) {
176 | var maxrare = max;
177 | var invNo = randomInteger(maxrare);
178 | var rarity;
179 |
180 | if (invNo < 51){
181 | rarity = "common";
182 | } else if (invNo < 81) {
183 | rarity = "uncommon";
184 | } else if (invNo < 91) {
185 | rarity = "rare";
186 | } else if (invNo < 100) {
187 | rarity = "very rare";
188 | } else {
189 | rarity = "legendary";
190 | }
191 |
192 | return rarity;
193 | },
194 |
195 | getScroll = function(rarity) {
196 | var item;
197 | var level;
198 |
199 | switch(rarity) {
200 | case 'common':
201 | level = randomInteger(2);
202 | if (level == 2){level = 0}
203 | item = rollSpell(level);
204 | break;
205 | case 'uncommon':
206 | level = randomInteger(2);
207 | if (level == 1){
208 | level = 2;
209 | }else{
210 | level = 3;
211 | }
212 | item = rollSpell(level);
213 | break;
214 | case 'rare':
215 | level = randomInteger(2);
216 | if (level == 1){
217 | level = 4;
218 | }else{
219 | level = 5;
220 | }
221 | item = rollSpell(level);
222 | break;
223 | case 'very rare':
224 | level = randomInteger(3);
225 | if (level == 1){
226 | level = 6;
227 | }else if(level == 2){
228 | level = 7;
229 | }else{
230 | level = 8;
231 | }
232 | item = rollSpell(level);
233 | break;
234 | case 'legendary':
235 | level = 9;
236 | item = rollSpell(level);
237 | break;
238 | }
239 |
240 | return item;
241 | },
242 |
243 | rollSpell = function(level) {
244 | var spellList;
245 |
246 | switch(level) {
247 | case 0:
248 | spellList = "Acid Splash,10;Blade Ward,10;Booming Blade,10;Chill Touch,10;Control Flames,10;Create Bonfire,10;Dancing Lights,10;Druidcraft,10;Eldritch Blast,10;Fire Bolt,10;Friends,10;Frostbite,10;Green-Flame Blade,10;Guidance,10;Gust,10;Infestation,10;Light,10;Lightning Lure,10;Mage Hand,10;Magic Stone,10;Mending,10;Message,10;Minor Illusion,10;Mold earth,10;Poison Spray,10;Prestidigitation,10;Primal Savagery,10;Produce Flame,10;Ray of Frost,10;Resistance,10;Sacred Flame,10;Shape Water,10;Shillelagh,10;Shocking Grasp,10;Spare the Dying,10;Sword Burst,10;Thaumaturgy,10;Thorn Whip,10;Thunderclap,10;Toll the Dead,10;True Strike,10;Vicious Mockery,10;Word of Radiance,10";
249 | break;
250 | case 1:
251 | spellList = "Absorb Elements,60;Alarm,60;Animal Friendship,60;Armor of Agathys,60;Arms of Hadar,60;Bane,60;Beast Bond,60;Bless,60;Burning Hands,60;Catapult,60;Cause Fear,60;Ceremony,60;Chaos Bolt,60;Charm Person,60;Chromatic Orb,60;Color Spray,60;Command,60;Compelled Duel,60;Comprehend Languages,60;Create or Destroy Water,60;Cure Wounds,60;Detect Evil and Good,60;Detect Magic,60;Detect Poison and Disease,60;Disguise Self,60;Dissonant Whispers,60;Divine Favor,60;Earth Tremor,60;Ensnaring Strike,60;Entangle,60;Expeditious Retreat,60;Faerie Fire,60;False Life,60;Feather Fall,60;Find Familiar,60;Fog Cloud,60;Goodberry,60;Grease,60;Guiding Bolt,60;Hail of Thorns,60;Healing Word,60;Hellish Rebuke,60;Heroism,60;Hex,60;Hunter’s Mark,60;Ice Knife,60;Identify,60;Illusory Script,60;Inflict Wounds,60;Jump,60;Longstrider,60;Mage Armor,60;Magic Missile,60;Protection from Evil and Good,60;Purify Food and Drink,60;Ray of Sickness,60;Sanctuary,60;Searing Smite,60;Shield,60;Shield of Faith,60;Silent Image,60;Sleep,60;Snare,60;Speak with Animals,60;Tasha’s Hideous Laughter,60;Tenser’s Floating Disk,60;Thunderous Smite,60;Thunderwave,60;Unseen Servant,60;Witch Bolt,60;Wrathful Smite,60;Zephyr Strike,60";
252 | break;
253 | case 2:
254 | spellList = "Aganazzar’s Scorcher,120;Aid,120;Alter Self,120;Animal Messenger,120;Arcane Lock,120;Augury,120;Barkskin,120;Beast Sense,120;Blindness/Deafness,120;Blur,120;Branding Smite,120;Calm Emotions,120;Cloud of Daggers,120;Continual Flame,120;Cordon of Arrows,120;Crown of Madness,120;Darkness,120;Darkvision,120;Detect Thoughts,120;Dragon's Breath,120;Dust Devil,120;Earthbind,120;Enhance Ability,120;Enlarge/Reduce,120;Enthrall,120;Find Steed,120;Find Traps,120;Flame Blade,120;Flaming Sphere,120;Gentle Repose,120;Gust of Wind,120;Healing Spirit,120;Heat Metal,120;Hold Person,120;Invisibility,120;Knock,120;Lesser Restoration,120;Levitate,120;Locate Animals or Plants,120;Locate Object,120;Magic Mouth,120;Magic Weapon,120;Maximilian’s Earthen Grasp,120;Melf’s Acid Arrow,120;Mind Spike,120;Mirror Image,120;Misty Step,120;Moonbeam,120;Nystul’s Magic Aura,120;Pass Without Trace,120;Phantasmal Force,120;Prayer of Healing,120;Protection from Poison,120;Pyrotechnics,120;Ray of Enfeeblement,120;Rope Trick,120;Scorching Ray,120;See invisibility,120;Shadow Blade,120;Shatter,120;Silence,120;Skywrite,120;Snilloc’s Snowball Swarm,120;Spider Climb,120;Spike Growth,120;Spiritual Weapon,120;Suggestion,120;Warding Bond,120;Warding Wind,120;Web,120;Zone of Truth,120";
255 | break;
256 | case 3:
257 | spellList = "Animate Dead,200;Aura of Vitality,200;Beacon of Hope,200;Bestow Curse,200;Blinding Smite,200;Blink,200;Call Lightning,200;Catnap,200;Clairvoyance,200;Conjure Animals,200;Conjure Barrage,200;Counterspell,200;Create Food and Water,200;Crusader’s Mantle,200;Daylight,200;Dispel Magic,200;Elemental Weapon,200;Erupting Earth,200;Fear,200;Feign Death,200;Fireball,200;Flame Arrows,200;Fly,200;Gaseous Form,200;Glyph of Warding,200;Haste,200;Hunger of Hadar,200;Hypnotic Pattern,200;Leomund’s Tiny Hut,200;Lightning Arrow,200;Lightning Bolt,200;Magic Circle,200;Major Image,200;Mass Healing Word,200;Meld into Stone,200;Melf’s Minute Meteors,200;Nondetection,200;Phantom Steed,200;Plant Growth,200;Protection from Energy,200;Remove Curse,200;Revivify,200;Sending,200;Sleet Storm,200;Slow,200;Speak with Dead,200;Speak with Plants,200;Spirit Guardians,200;Stinking Cloud,200;Tidal Wave,200;Tongues,200;Vampiric Touch,200;Wall of Sand,200;Wall of Water,200;Water Breathing,200;Water Walk,200;Wind Wall,200;Enemies abound,200;Life Transference,200;Summon Lesser Demons,200;Thunder Step,200;Tiny Servant,200";
258 | break;
259 | case 4:
260 | spellList = "Arcane Eye,320;Aura of Life,320;Aura of Purity,320;Banishment,320;Blight,320;Compulsion,320;Confusion,320;Conjure Minor Elementals,320;Conjure Woodland Beings,320;Control Water,320;Death Ward,320;Dimension Door,320;Divination,320;Dominate Beast,320;Elemental Bane,320;Evard’s Black Tentacles,320;Fabricate,320;Fire Shield,320;Freedom of Movement,320;Giant Insect,320;Grasping Vine,320;Greater Invisibility,320;Guardian of Faith,320;Hallucinatory Terrain,320;Ice Storm,320;Leomund’s Secret Chest,320;Locate Creature,320;Mordenkainen’s Faithful Hound,320;Mordenkainen’s Private Sanctum,320;Otiluke’s Resilient Sphere,320;Phantasmal Killer,320;Polymorph,320;Staggering Smite,320;Stone Shape,320;Stoneskin,320;Storm Sphere,320;Vitriolic Sphere,320;Wall of Fire,320;Watery Sphere,320;Charm Monster,320;Find Greater Steed,320;Guardian of Nature,320;Shadow of Moil,320;Sickening Radiance,320;Summon Greater Demon,320";
261 | break;
262 | case 5:
263 | spellList = "Animate Objects,640;Antilife Shell,640;Awaken,640;Banishing Smite,640;Bigby’s Hand,640;Circle of Power,640;Cloudkill,640;Commune,640;Commune with Nature,640;Cone of Cold,640;Conjure Elemental,640;Conjure Volley,640;Contact Other Plane,640;Contagion,640;Control Winds,640;Creation,640;Destructive Wave,640;Dispel Evil and Good,640;Dominate Person,640;Dream,640;Flame Strike,640;Geas,640;Greater Restoration,640;Hallow,640;Hold Monster,640;Immolation,640;Insect Plague,640;Legend Lore,640;Maelstrom,640;Mass Cure Wounds,640;Mislead,640;Modify Memory,640;Passwall,640;Planar Binding,640;Raise Dead,640;Rary’s Telepathic Bond,640;Reincarnate,640;Scrying,640;Seeming,640;Swift Quiver,640;Telekinesis,640;Teleportation Circle,640;Transmute Rock,640;Tree Stride,640;Wall of Force,640;Wall of Stone,640;Danse Macabre,640;Dawn,640;Druid Grove,640;Enervation,640;Far Step,640;Holy Weapon,640;Infernal Calling,640;Negative Energy Flood,640;Skill Empowerment,640;Steel Wind Strike,640;Synaptic Static,640;Wall of Light,640;Wrath of Nature,640";
264 | break;
265 | case 6:
266 | spellList = "Arcane Gate,1280;Blade Barrier,1280;Bones of the Earth,1280;Chain Lightning,1280;Circle of Death,1280;Conjure Fey,1280;Contingency,1280;Create Undead,1280;Disintegrate,1280;Drawmij’s Instant Summons,1280;Eyebite,1280;Find the Path,1280;Flesh to Stone,1280;Forbiddance,1280;Globe of Invulnerability,1280;Guards and Wards,1280;Harm,1280;Heal,1280;Heroes’ Feast,1280;Investiture of Flame,1280;Investiture of Ice,1280;Investiture of Stone,1280;Investiture of Wind,1280;Magic Jar,1280;Mass Suggestion,1280;Move Earth,1280;Otiluke’s Freezing Sphere,1280;Otto’s Irresistible Dance,1280;Planar Ally,1280;Primordial Ward,1280;Programmed Illusion,1280;Sunbeam,1280;Transport via Plants,1280;True Seeing,1280;Wall of Ice,1280;Wall of Thorns,1280;Wind Walk,1280;Word of Recall,1280;Create Homunculus,1280;Mental Prison,1280;Primordial Ward,1280;Scatter,1280;Soul Cage,1280;Tenser’s Transformation,1280";
267 | break;
268 | case 7:
269 | spellList = "Conjure Celestial,2560;Delayed Blast Fireball,2560;Divine Word,2560;Etherealness,2560;Finger of Death,2560;Fire Storm,2560;Forcecage,2560;Mirage Arcane,2560;Mordenkainen’s Magnificent Mansion,2560;Mordenkainen’s Sword,2560;Plane Shift,2560;Prismatic Spray,2560;Project Image,2560;Regenerate,2560;Resurrection,2560;Reverse Gravity,2560;Sequester,2560;Simulacrum,2560;Symbol,2560;Teleport,2560;Whirlwind,2560;Crown of Stars,2560;Power Word Pain,2560;Temple of the Gods,2560";
270 | break;
271 | case 8:
272 | spellList = "Abi-Dalzim’s Horrid Wilting,5120;Animal Shapes,5120;Antimagic Field,5120;Antipathy/Sympathy,5120;Clone,5120;Control Weather,5120;Demiplane,5120;Dominate Monster,5120;Earthquake,5120;Feeblemind,5120;Glibness,5120;Holy Aura,5120;Incendiary Cloud,5120;Maze,5120;Mind Blank,5120;Power Word Stun,5120;Sunburst,5120;Telepathy,5120;Trap the Soul,5120;Tsunami,5120;Illusory Dragon,5120;Maddening Darkness,5120;Mighty Fortress,5120";
273 | break;
274 | case 9:
275 | spellList = "Astral Projection,10240;Foresight,10240;Gate,10240;Imprisonment,10240;Mass Heal,10240;Meteor Swarm,10240;Power Word Heal,10240;Power Word Kill,10240;Prismatic Wall,10240;Shapechange,10240;Storm of Vengeance,10240;Time Stop,10240;True Polymorph,10240;True Resurrection,10240;Weird,10240;Wish,10240;Invulnerability,10240;Mass Polymorph,10240;Psychic Scream,10240";
276 | break;
277 | }
278 |
279 |
280 | var itemsList = spellList.split(";");
281 | var len = itemsList.length;
282 |
283 | var number = randomInteger(len) - 1;
284 | var item = 'Scroll: ' + itemsList[number];
285 |
286 | return item;
287 | },
288 |
289 | getPotion = function(rarity) {
290 | var potionList;
291 |
292 | switch(rarity) {
293 | case 'common':
294 | potionList = "Potion of Climbing,180;Potion of Healing,50";
295 | break;
296 | case 'uncommon':
297 | potionList = "Oil of Slipperiness,480;Philter of Love,90;Potion of Animal Friendship,200;Potion of Fire Breath,150;Potion of Greater Healing,150;Potion of Growth,270;Potion of Poison,100;Potion of Resistance,300;Potion of Water Breathing,180";
298 | break;
299 | case 'rare':
300 | potionList = "Elixir of Health,120;Oil of Etherealness,1920;Potion of Clairvoyance,960;Potion of Diminution,270;Potion of Gaseous Form,300;Potion of Heroism,180;Potion of Invulnerability,3840;Potion of Mind Reading,180";
301 | break;
302 | case 'very rare':
303 | potionList = "Oil of Sharpness,3200;Potion of Flying,500;Potion of Invisibility,180;Potion of Longevity,9000;Potion of Speed,400;Potion of Superior Healing,450;Potion of Supreme Healing,1350;Potion of Vitality,960";
304 | break;
305 | case 'legendary':
306 | potionList = "Oil of Sharpness,3200;Potion of Flying,500;Potion of Invisibility,180;Potion of Longevity,9000;Potion of Speed,400;Potion of Superior Healing,450;Potion of Supreme Healing,1350;Potion of Vitality,960";
307 | break;
308 | }
309 |
310 | var itemsList = potionList.split(";");
311 | var len = itemsList.length;
312 |
313 | var number = randomInteger(len) - 1;
314 | var item = itemsList[number];
315 |
316 | return item;
317 | },
318 |
319 | getWeapon = function(rarity) {
320 | var weaponList = "Club,0.1;Dagger,2;Greatclub,0.2;Handaxe,5;Javelin,0.5;Light Hammer,2;Mace,5;Quarterstaff,0.2;Sickle,1;Spear,1;Crossbow (light),25;Dart,0.05;Shortbow,25;Sling,0.1;Battleaxe,10;Flail,10;Glaive,20;Greataxe,30;Greatsword,50;Halberd,20;Lance,10;Longsword,15;Maul,10;Morningstar,15;Pike,5;Rapier,25;Scimitar,25;Shortsword,10;Trident,5;War Pick,5;Warhammer,15;Whip,2;Blowgun,10;Crossbow (hand),75;Crossbow (heavy),50;Longbow,50;Net,1";
321 | var itemsList = weaponList.split(";");
322 | var len = itemsList.length;
323 | var number = randomInteger(len) - 1;
324 | var item = itemsList[number];
325 |
326 | var selected = item.split(',');
327 | var weapon;
328 | var price;
329 |
330 | switch(rarity) {
331 | case 'common':
332 | weapon = selected[0];
333 | price = selected[1];
334 | break;
335 | case 'uncommon':
336 | weapon = '+1 ' + selected[0];
337 | price = 1000 + Math.trunc(selected[1]);
338 | break;
339 | case 'rare':
340 | weapon = '+2 ' + selected[0];
341 | price = 4000 + Math.trunc(selected[1]);
342 | break;
343 | case 'very rare':
344 | weapon = '+3 ' + selected[0];
345 | price = 16000 + Math.trunc(selected[1]);
346 | break;
347 | case 'legendary':
348 | weapon = '+3 ' + selected[0];
349 | price = 16000 + Math.trunc(selected[1]);
350 | break;
351 | }
352 |
353 | item = weapon + ',' + price;
354 | return item;
355 | },
356 |
357 | getArmour = function(rarity) {
358 | var armourList = "Padded Armour,5;Leather Armour,10;Studded leather Armour,45;Hide Armour,10;Chain shirt Armour,50;Scale mail Armour,50;Breastplate Armour,400;Half plate Armour,750;Ring mail Armour,30;Chain mail Armour,75;Splint Armour,200;Plate Armour,1500";
359 | var itemsList = armourList.split(";");
360 | var len = itemsList.length;
361 | var number = randomInteger(len) - 1;
362 | var item = itemsList[number];
363 |
364 | var selected = item.split(',');
365 | var armour;
366 | var price;
367 |
368 | switch(rarity) {
369 | case 'common':
370 | armour = selected[0];
371 | price = selected[1];
372 | break;
373 | case 'uncommon':
374 | armour = '+1 ' + selected[0];
375 | price = 1500 + Math.trunc(selected[1]);
376 | break;
377 | case 'rare':
378 | armour = '+2 ' + selected[0];
379 | price = 6000 + Math.trunc(selected[1]);
380 | break;
381 | case 'very rare':
382 | armour = '+3 ' + selected[0];
383 | price = 24000 + Math.trunc(selected[1]);
384 | break;
385 | case 'legendary':
386 | armour = '+3 ' + selected[0];
387 | price = 24000 + Math.trunc(selected[1]);
388 | break;
389 | }
390 |
391 | item = armour + ',' + price;
392 | return item;
393 | },
394 |
395 | getItem = function(rarity) {
396 | var list;
397 |
398 | switch(rarity) {
399 | case 'common':
400 | list = "Armor of Gleaming,50;Bead of Nourishment,50;Bead of Refreshment,50;Boots of False Tracks,50;Candle of the Deep,50;Cast-off Armour,50;Charlatan\'s Die,50;Cloak of Billowing,50;Cloak of Many Fashions,50;Clockwork Amulet,50;Clothes of Mending,50;Dark Shard Amulet,50;Dread Helm,50;Ear Horn of Hearing,50;Enduring Spellbook,50;Ersatz Eye,50;Hat of Vermin,50;Hat of Wizardry,50;Heward\'s Handy Spice,50;Horn of Silent Alarm,50;Instrument of Illusions,50;Instrument of Scribing,50;Lock of Trickery,50;Moon-touched Sword,50;Mystery Key,50;Orb of Direction,50;Orb of Time,50;Perfume of Bewiching,50;Pipe of Smoke Monsters,50;Pole of Angling,50;Pole of Collapsing,50;Pot of Awakening,50;Rope of Mending,50;Ruby of the Wary Mage,50;Staff of Adornment,50;Staff of Birdcalls,50;Staff of Flowers,50;Talking Doll,50;Tankard of Sobriety,50;Unbreakable Arrow,50;Veteran\'s Cane,50;Walloping Ammunition,50;Wand of Conduction,50;Wand of Pyrotechnics,50;Wand of Scowls,50;Wand of Smiles,50";
401 | break;
402 | case 'uncommon':
403 | list = "Alchemy Jug,6000;Amulet of Proof Against Detection and Location,20000;Bag of Holding,4000;Boots of Elvenkind,2500;Boots of Striding and Springing,5000;Boots of the Winterlands,10000;Bracers of Archery,1500;Brooch of Shielding,7500;Broom of Flying,8000;Cap of Water Breathing,1000;Circlet of Blasting,1500;Cloak of Elvenkind,5000;Cloak of Protection,3500;Cloak of the Manta Ray,6000;Decanter of Endless Water,135000;Deck of Illusions,6120;Driftglobe,750;Dust of Disappearance,300;Dust of Dryness (1 pellet),120;Dust of Sneezing and Choking,480;Elemental Gem,960;Eversmoking Bottle,1000;Eyes of Charming,3000;Eyes of Minute Seeing,2500;Eyes of the Eagle,2500;Gauntlets of Ogre Power,8000;Gem of Brightness,5000;Gloves of Missile Snaring,3000;Gloves of Swimming and Climbing,2000;Gloves of Thievery,5000;Goggles of Night,1500;Hat of Disguise,5000;Headband of Intellect,8000;Helm of Comprehend Languages,500;Helm of Telepathy,12000;Immovable Rod,5000;Instrument of the Bards - Doss Lute,28500;Instrument of the Bards - Fochulan Bandlore,26500;Instrument of the Bards - Mac-Fuirmidh Cittern,27000;Keoghtom\'s Ointment (Per dose),120;Lantern of Revealing,5000;Luckstone,4200;Medallion of Thoughts,3000;Necklace of Adaption,1500;Pearl of Power,6000;Periapt of Health,5000;Periapt of Wound Closure,5000;Pipes of Haunting,6000;Pipes of the Sewers,2000;Quiver of Ehlonna,1000;Ring of Jumping,2500;Ring of Mind Shielding,16000;Ring of Swimming,3000;Ring of Warmth,1000;Ring of Water Walking,1500;Robe of Useful Items,Items * 5;Rope of Climbing,2000;Saddle of the Cavalier,2000;Sending Stones,2000;Silver Raven,5000;Slippers of Spider Climbing,5000;Trident of Fish Command,800;Wind Fan,1500;Winged Boots,8000";
404 | break;
405 | case 'rare':
406 | list = "Amulet of Health,8000;Bead of Force,960;Belt of Dwarvenkind,6000;Boots of Levitation,4000;Boots of Speed,4000;Bowl of Commanding Water Elementals,8000;Bracers of Defense,6000;Brass Horn of Valhalla,8400;Brazier of Commanding Fire Elementals,8000;Bronze Griffon,8000;Cape of the Mountebank,8000;Censer of Controlling Air Elementals,8000;Chime of Opening,1500;Cloak of Displacement,60000;Cloak of the Bat,6000;Cube of Force,16000;Daern\'s Instant Fortress,75000;Dimensional Shackles,3000;Ebony Fly,6000;Folding Boat,10000;Gem of Seeing,32000;Goldean Lion (ea),600;Helm of Teleportation,64000;Heward\'s Handy Haversack,2000;Horn of Blasting,450;Horseshoes of Speed,5000;Instrument of the Bards - Canaith Mandolin,30000;Instrument of the Bards - Cli Lyre,35000;Ioun Stone Awareness,12000;Ioun Stone Protection,1200;Ioun Stone Reserve,6000;Ioun Stone Sustenance,1000;Iron Bands of Bilarro,4000;Ivory Goat (Terror),20000;Ivory Goat (Travail),400;Ivory Goat (Traveling),1000;Mantle of Spell Resistance,30000;Marble Elephant,6000;Necklace of Fireballs (Five beads),3840;Necklace of Fireballs (Four beads),1600;Necklace of Fireballs (One bead),300;Necklace of Fireballs (Six beads),7680;Necklace of Fireballs (Three beads),960;Necklace of Fireballs (Two beads),480;Onyx Dog,3000;Periapt of Proof Against Poison,5000;Portable Hole,8000;Prayer Bead - Bless,2000;Prayer Bead - Curing,4000;Prayer Bead - Favor,32000;Prayer Bead - Smiting,1500;Prayer Bead - Summons,128000;Prayer Bead - Wind Walking,96000;Quaal\'s Feather Token Anchor,50;Quaal\'s Feather Token Bird,3000;Quaal\'s Feather Token Fan,250;Quaal\'s Feather Token Swan Boat,3000;Quaal\'s Feather Token Whip,250;Ring of Animal Influence,4000;Ring of Evasion,5000;Ring of Feather Falling,2000;Ring of Free Action,20000;Ring of Protection,3500;Ring of Resistance,6000;Ring of Spell Storing,24000;Ring of the Ram,5000;Ring of X-Ray Vision,6000;Robe of Eyes,30000;Rope of Entanglement,4000;Serpentine Owl,8000;Silver Horn of Valhalla,5600;Stone of Controlling Earth Elementals,8000;Wings of Flying,5000";
407 | break;
408 | case 'very rare':
409 | list = "Amulet of the Planes,160000;Bronze Horn of Valhalla,11200;Carpet of Flying,12000;Cloak of Arachnida,5000;Crystal Ball,50000;Horseshoes of the Zephyr,1500;Instrument of the Bards - Anstruth Harp,109000;Ioun Stone Absorption,2400;Ioun Stone Agility,3000;Ioun Stone Fortitude,3000;Ioun Stone Insight,3000;Ioun Stone Intellect,3000;Ioun Stone Leadership,3000;Ioun Stone Strength,3000;Mirror of Life Trapping,18000;Nolzur\'s Marvelous Pigments,200;Obsidian Steed,128000;Ring of Regeneration,12000;Ring of Shooting Stars,14000;Ring of Telekinesis,80000;Robe of Scintillating Colors,6000;Robe of Stars,60000";
410 | break;
411 | case 'legendary':
412 | list = "Apparatus of Kwalish,10000;Cloak of Invisibility,80000;Cubic Gate,40000;Efreeti Chain,20000;Instrument of the Bards - Ollamh Harp,125000;Ioun Stone Greater Absorption,31000;Ioun Stone Mastery,15000;Ioun Stone Regeneration,4000;Iron Horn of Valhalla,14000;Ring of Air Elemental Command,35000;Ring of Earth Elemental Command,31000;Ring of Fire Elemental Command,17000;Ring of Invisibility,10000;Ring of Spell Turning,30000;Ring of Water Elemental Command,25000;Robe of the Archmagi,34000;Scarab of Protection,36000;Sovereign Glue,400;Sphere of Annihilation,15000;Talisman of Pure Good,71680;Talisman of the Sphere,20000;Talisman of Ultimate Evil,61440;Universal Solvent,300";
413 | break;
414 | }
415 |
416 |
417 |
418 | var itemsList = list.split(";");
419 | var len = itemsList.length;
420 |
421 | var number = randomInteger(len) - 1;
422 | var item = itemsList[number];
423 |
424 | sendChat("test","Item = " + item);
425 |
426 | return item;
427 | },
428 |
429 | checkInstall = function() {
430 | if(typeof state.store == "undefined"){
431 | setDefaults();
432 | }
433 |
434 | if ( state.store.now.version != version ){
435 | checkDefaults();
436 | }
437 | },
438 |
439 | registerEventHandlers = function() {
440 | on('chat:message', handleInput);
441 | };
442 |
443 |
444 | return {
445 | CheckInstall: checkInstall,
446 | RegisterEventHandlers: registerEventHandlers
447 | };
448 |
449 | }());
450 |
451 |
452 | on("ready",function(){
453 | 'use strict';
454 | MagicStore.CheckInstall();
455 | MagicStore.RegisterEventHandlers();
456 | });
457 |
--------------------------------------------------------------------------------
/Multi-World Calendar v3.0.0:
--------------------------------------------------------------------------------
1 | // Calendar and down day counter for Faerun, Greyhawk, Eberron and Modern Settings
2 | // Created by Kirsty (https://app.roll20.net/users/1165285/kirsty)
3 |
4 | // API Commands:
5 | // !cal - for the GM displays the menu in the chat window, for a player displays date, weather, moon and down days
6 |
7 | // Red Colour: #7E2D40
8 |
9 | var Calendar = Calendar || (function() {
10 | 'use strict';
11 |
12 | var version = '3.0.0',
13 |
14 | setDefaults = function() {
15 | state.Calendar = {
16 | now: {
17 | version: "3.0.0",
18 | world: 1,
19 | ordinal: 1,
20 | year: 1486,
21 | down: 0,
22 | divider: 0,
23 | weather: "It is a cool but sunny day.",
24 | time: "OFF",
25 | startdate: "1,Hammer,1486"
26 | },
27 | };
28 | },
29 |
30 | checkDefaults = function() {
31 | if( ! state.Calendar.now.version){state.Calendar.now.version = "3.0.0"};
32 | if( ! state.Calendar.now.world){state.Calendar.now.world = 1};
33 | if( ! state.Calendar.now.ordinal){state.Calendar.now.ordinal = 1};
34 | if( ! state.Calendar.now.year){state.Calendar.now.year = 1486};
35 | if( ! state.Calendar.now.down){state.Calendar.now.down = '0'};
36 | if( ! state.Calendar.now.divider){state.Calendar.now.divider = '0'};
37 | if( ! state.Calendar.now.weather){state.Calendar.now.weather = "It is a cool but sunny day."};
38 | if( ! state.Calendar.now.time){state.Calendar.now.time = "OFF"};
39 | if( ! state.Calendar.now.startdate){state.Calendar.now.startdate = "1,Hammer,1486"};
40 | },
41 |
42 | handleInput = function(msg) {
43 | var args = msg.content.split(",");
44 |
45 | if (msg.type !== "api") {
46 | return;
47 | }
48 |
49 | if(playerIsGM(msg.playerid)){
50 | switch(args[0]) {
51 | case '!cal':
52 | calmenu();
53 | break;
54 | case '!setworld':
55 | state.Calendar.now.world=args[1];
56 | calmenu();
57 | break;
58 | case '!startdate':
59 | state.Calendar.now.startdate=args[1]+','+args[2]+','+args[3];
60 | calmenu();
61 | break;
62 | case '!setday':
63 | switch(Number(state.Calendar.now.world)) {
64 | case 1:
65 | getFaerunOrdinal(msg);
66 | break;
67 | case 2:
68 | getGreyhawkOrdinal(msg);
69 | break;
70 | case 3:
71 | getModernOrdinal(msg);
72 | break;
73 | case 4:
74 | getEberronOrdinal(msg);
75 | break;
76 | }
77 | weather();
78 | calmenu();
79 | break;
80 | case '!setmonth':
81 | switch(Number(state.Calendar.now.world)) {
82 | case 1:
83 | getFaerunOrdinal(msg);
84 | break;
85 | case 2:
86 | getGreyhawkOrdinal(msg);
87 | break;
88 | case 3:
89 | getModernOrdinal(msg);
90 | break;
91 | case 4:
92 | getEberronOrdinal(msg);
93 | break;
94 | }
95 | weather();
96 | calmenu();
97 | break;
98 | case '!setyear':
99 | state.Calendar.now.year=args[1];
100 | calmenu();
101 | break;
102 | case '!setordinal':
103 | state.Calendar.now.ordinal=args[1];
104 | calmenu();
105 | break;
106 | case '!settime':
107 | state.Calendar.now.time=args[1];
108 | calmenu();
109 | break;
110 | case '!setdown':
111 | var down = Number(args[1]);
112 | state.Calendar.now.down = down;
113 | getdown(down);
114 | calmenu();
115 | break;
116 | case '!setdiv':
117 | state.Calendar.now.divider=Number(args[1]);
118 | calmenu();
119 | break;
120 | case '!addday':
121 | addday(args[1]);
122 | weather();
123 | calmenu();
124 | break;
125 | case '!weather':
126 | if(args[1]=='Roll}'){
127 | weather();
128 | }else{
129 | var string = args[1];
130 | for (var i = 2; i < args.length; i++) {
131 | string = string + ", " + args[i];
132 | }
133 | state.Calendar.now.weather = string;
134 | }
135 | calmenu();
136 | break;
137 | case '!playercal':
138 | showcal(msg);
139 | break;
140 | case '!test':
141 | checkLeap();
142 | break;
143 | }
144 | }else if(args[0]=='!cal'){
145 | showcal(msg);
146 | }
147 | },
148 |
149 | calmenu = function() {
150 | var colour = '#7E2D40';
151 | var divstyle = 'style="width: 189px; border: 1px solid black; background-color: #ffffff; padding: 5px;"'
152 | var astyle1 = 'style="text-align:center; border: 1px solid black; margin: 1px; padding: 2px; background-color: ' + colour + '; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 100px;';
153 | var astyle2 = 'style="text-align:center; border: 1px solid black; margin: 1px; padding: 2px; background-color: ' + colour + '; border-radius: 4px; box-shadow: 1px 1px 1px #707070; width: 150px;';
154 | var tablestyle = 'style="text-align:center;"';
155 | var arrowstyle = 'style="border: none; border-top: 3px solid transparent; border-bottom: 3px solid transparent; border-left: 195px solid ' + colour + '; margin-bottom: 2px; margin-top: 2px;"';
156 | var headstyle = 'style="color: ' + colour + '; font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"';
157 | var substyle = 'style="font-size: 11px; line-height: 13px; margin-top: -3px; font-style: italic;"';
158 |
159 | var world = getworld();
160 | var down = Number(state.Calendar.now.down);
161 | down = getdown(down);
162 | var moMenu = getMoMenu();
163 | var ordinal = state.Calendar.now.ordinal;
164 |
165 | var nowdate;
166 |
167 | switch(Number(state.Calendar.now.world)) {
168 | case 1:
169 | nowdate = getFaerunDate(ordinal).split(',');
170 | break;
171 | case 2:
172 | nowdate = getGreyhawkDate(ordinal).split(',');
173 | break;
174 | case 3:
175 | nowdate = getModernDate(ordinal).split(',');
176 | break;
177 | case 4:
178 | nowdate = getEberronDate(ordinal).split(',');
179 | break;
180 | }
181 |
182 | var month = nowdate[0];
183 | var day = nowdate[1];
184 |
185 | var moon;
186 |
187 | if (state.Calendar.now.world==1){
188 | moon = getFaerunMoon();
189 | }else if(state.Calendar.now.world==2){
190 | moon = getGreyhawkMoon();
191 | }else{
192 | moon = '';
193 | }
194 |
195 | var start = state.Calendar.now.startdate.split(',');
196 | var startdate = start[0]+getsuffix(start[0])+' '+start[1]+', '+start[2];
197 |
198 | sendChat('Calendar', '/w gm
' + //--
199 | '
Calendar
' + //--
200 | '
Menu
' + //--
201 | '
' + //--
202 | '
' + //--
213 | '
Weather: ' + state.Calendar.now.weather + //--
214 | '
' + moon + //--
215 | '
' + //--
216 | '
' + //--
217 | '
' + //--
218 | '
'
219 | );
220 | },
221 |
222 | showcal = function(msg) {
223 | var nowdate;
224 | var ordinal = state.Calendar.now.ordinal;
225 |
226 | switch(Number(state.Calendar.now.world)) {
227 | case 1:
228 | nowdate = getFaerunDate(ordinal).split(',');
229 | break;
230 | case 2:
231 | nowdate = getGreyhawkDate(ordinal).split(',');
232 | break;
233 | case 3:
234 | nowdate = getModernDate(ordinal).split(',');
235 | break;
236 | case 4:
237 | nowdate = getEberronDate(ordinal).split(',');
238 | break;
239 | }
240 |
241 | var month = nowdate[0];
242 | var day = nowdate[1];
243 | var down = state.Calendar.now.down;
244 | down = getdown(down);
245 | var suffix = getsuffix(day);
246 | var world = getworld();
247 | var divstyle = 'style="width: 189px; border: 1px solid black; background-color: #ffffff; padding: 5px;"'
248 | var tablestyle = 'style="text-align:center;"';
249 | var arrowstyle = 'style="border: none; border-top: 3px solid transparent; border-bottom: 3px solid transparent; border-left: 195px solid rgb(126, 45, 64); margin-bottom: 2px; margin-top: 2px;"';
250 | var headstyle = 'style="color: rgb(126, 45, 64); font-size: 18px; text-align: left; font-variant: small-caps; font-family: Times, serif;"';
251 | var substyle = 'style="font-size: 11px; line-height: 13px; margin-top: -3px; font-style: italic;"';
252 | var moon;
253 |
254 | if (state.Calendar.now.world==1){
255 | moon = getFaerunMoon();
256 | }else if(state.Calendar.now.world==2){
257 | moon = getGreyhawkMoon();
258 | }else{
259 | moon = '';
260 | }
261 |
262 | var timestr;
263 | var downstr;
264 |
265 | if(state.Calendar.now.time!="OFF"){
266 | timestr = '
The time is: '+state.Calendar.now.time;
267 | }else{
268 | timestr = '';
269 | }
270 |
271 | if(down!=0){
272 | downstr = '
Players have ' + down + ' down days.';
273 | }else{
274 | downstr = '';
275 | }
276 |
277 | sendChat(msg.who, '
' + //--
278 | '
Calendar
' + //--
279 | '
' + world + '
' + //--
280 | '
' + //--
281 | day + suffix + ' ' + month + ', ' + state.Calendar.now.year + //--
282 | timestr + //--
283 | downstr + //--
284 | '
Today\'s weather:
' + state.Calendar.now.weather + //--
285 | '
' + moon
286 | );
287 | },
288 |
289 | getworld = function() {
290 | var num = Number(state.Calendar.now.world);
291 | var world;
292 |
293 | switch(num) {
294 | case 1:
295 | world = 'Faerûn';
296 | break;
297 | case 2:
298 | world = 'Greyhawk';
299 | break;
300 | case 3:
301 | world = 'Modern';
302 | break;
303 | case 4:
304 | world = 'Eberron';
305 | break;
306 | }
307 |
308 | return world;
309 | },
310 |
311 | getdown = function(days) {
312 | var down = Number(days);
313 | var div = Number(state.Calendar.now.divider);
314 |
315 | if(div!=0){
316 | down = down/div;
317 | }
318 |
319 | return down;
320 | },
321 |
322 | getMoMenu = function() {
323 | var world = Number(state.Calendar.now.world);
324 | var leap = checkLeap();
325 | var moMenu;
326 |
327 | switch(world){
328 | case 1:
329 | if(leap==0){
330 | moMenu = ',?{Month|Hammer|Midwinter|Alturiak|Ches|Tarsakh|Greengrass|Mirtul|Kythorn|Flamerule|Midsummer|Eleasias|Eleint|Highharvestide|Marpenoth|Uktar|Feast of the Moon|Nightal}">';
331 | }else{
332 | moMenu = ',?{Month|Hammer|Midwinter|Alturiak|Ches|Tarsakh|Greengrass|Mirtul|Kythorn|Flamerule|Midsummer|Sheildmeet|Eleasias|Eleint|Highharvestide|Marpenoth|Uktar|Feast of the Moon|Nightal}">';
333 | }
334 | break;
335 | case 2:
336 | moMenu = ',?{Month|Needfest|Fire Seek|Readying|Coldeven|Growfest|Planting|Flocktime|Wealsun|Richfest|Reaping|Goodmonth|Harvester|Brewfest|Patchwall|Readyreat|Sunsebb}">';
337 | break;
338 | case 3:
339 | moMenu = ',?{Month|January|February|March|April|May|June|July|August|September|October|November|December}">';
340 | break;
341 | case 4:
342 | moMenu = ',?{Month|Zarantyr|Olarune|Therendor|Eyre|Dravago|Nymm|Lharvion|Barrakas|Rhaan|Sypheros|Aryth|Vult}">';
343 | break;
344 | }
345 |
346 | return moMenu;
347 | },
348 |
349 | checkLeap = function(){
350 |
351 | var leap;
352 | var remainder;
353 | var world = Number(state.Calendar.now.world);
354 | var year = Number(state.Calendar.now.year);
355 |
356 | switch(world){
357 | case 1:
358 | remainder = year % 4;
359 | if(remainder==0){
360 | leap = 1;
361 | }else{
362 | leap = 0;
363 | }
364 | break;
365 | case 2:
366 | leap = 0;
367 | break;
368 | case 3:
369 | if(year % 4 != 0){
370 | leap = 0;
371 | }else if(year % 100 != 0){
372 | leap = 1;
373 | }else if(year % 400 != 0){
374 | leap = 0;
375 | }else{
376 | leap = 1;
377 | }
378 | break;
379 | case 4:
380 | leap = 0;
381 | break;
382 | }
383 |
384 | return leap;
385 | },
386 |
387 | getFaerunDate = function(options){
388 | var day = Number(options);
389 | var date;
390 | var month;
391 |
392 | if(day>0 && day<=30){
393 | month="Hammer";
394 | date=day;
395 | }else if(day==31){
396 | month="Midwinter";
397 | date='festival';
398 | }else if(day>31 && day<=61){
399 | month="Alturiak";
400 | date=day-31;
401 | }else if(day>61 && day<=91){
402 | month="Ches";
403 | date=day-61;
404 | }else if(day>91 && day<=121){
405 | month="Tarsakh";
406 | date=day-91;
407 | }else if(day==122){
408 | month="Greengrass";
409 | date='festival';
410 | }else if(day>122 && day<=152){
411 | month="Mirtul";
412 | date=day-122;
413 | }else if(day>152 && day<=182){
414 | month="Kythorn";
415 | date=day-152;
416 | }else if(day>182 && day<=212){
417 | month="Flamerule";
418 | date=day-182;
419 | }else if(day==213){
420 | month="Midsummer";
421 | date='festival';
422 | }else if(day==214){
423 | month="Sheildmeet";
424 | date='festival';
425 | }else if(day>214 && day<=244){
426 | month="Eleasias"
427 | date=day-214;
428 | }else if(day>244 && day<=274){
429 | month="Eleint";
430 | date=day-244;
431 | }else if(day==275){
432 | month="Highharvestide";
433 | date='festival';
434 | }else if(day>275 && day<=305){
435 | month="Marpenoth";
436 | date=day-275;
437 | }else if(day>305 && day<=335){
438 | month="Uktar";
439 | date=day-305;
440 | }else if(day==336){
441 | month="Feast of the Moon";
442 | date='festival';
443 | }else if(day>336 && day<=366){
444 | month="Nightal";
445 | date=day-336;
446 | }else{
447 | month="Hammer";
448 | date='1';
449 | }
450 |
451 | var array=month+','+String(date);
452 | return array;
453 | },
454 |
455 | getGreyhawkDate = function(options){
456 | var day = Number(options);
457 | var date;
458 | var month;
459 |
460 | if(day>0 && day<=7){
461 | month="Needfest";
462 | date=day;
463 | }else if(day>7 && day<=35){
464 | month="Fire Seek";
465 | date=day-7;
466 | }else if(day>35 && day<=63){
467 | month="Readying";
468 | date=day-35;
469 | }else if(day>63 && day<=91){
470 | month="Coldeven";
471 | date=day-63;
472 | }else if(day>91 && day<=98){
473 | month="Growfest";
474 | date=day-91;
475 | }else if(day>98 && day<=126){
476 | month="Planting";
477 | date=day-98;
478 | }else if(day>126 && day<=154){
479 | month="Flocktime";
480 | date=day-126;
481 | }else if(day>154 && day<=182){
482 | month="Wealsun";
483 | date=day-154;
484 | }else if(day>182 && day<=189){
485 | month="Richfest";
486 | date=day-182;
487 | }else if(day>189 && day<=217){
488 | month="Reaping";
489 | date=day-189;
490 | }else if(day>217 && day<=245){
491 | month="Goodmonth"
492 | date=day-217;
493 | }else if(day>245 && day<=273){
494 | month="Harvester";
495 | date=day-245;
496 | }else if(day>273 && day<=280){
497 | month="Brewfest";
498 | date=day-273;
499 | }else if(day>280 && day<=308){
500 | month="Patchwall";
501 | date=day-280;
502 | }else if(day>308 && day<=336){
503 | month="Readyreat";
504 | date=day-308;
505 | }else if(day>336 && day<=364){
506 | month="Sunsebb";
507 | date=day-336;
508 | }else{
509 | month="Needfest";
510 | date='1';
511 | }
512 |
513 | var array=month+','+String(date);
514 | return array;
515 | },
516 |
517 | getModernDate = function(options){
518 | var day = Number(options);
519 | var date;
520 | var month;
521 |
522 | if(day>0 && day<=31){
523 | month="January";
524 | date=day;
525 | }else if(day>31 && day<=59){
526 | month="February";
527 | date=day-31;
528 | }else if(day>59 && day<=90){
529 | month="March";
530 | date=day-59;
531 | }else if(day>90 && day<=120){
532 | month="April";
533 | date=day-90;
534 | }else if(day>120 && day<=151){
535 | month="May";
536 | date=day-120;
537 | }else if(day>151 && day<=181){
538 | month="June";
539 | date=day-151;
540 | }else if(day>181 && day<=212){
541 | month="July";
542 | date=day-181;
543 | }else if(day>212 && day<=243){
544 | month="August";
545 | date=day-212;
546 | }else if(day>243 && day<=273){
547 | month="September";
548 | date=day-243;
549 | }else if(day>273 && day<=304){
550 | month="October";
551 | date=day-273;
552 | }else if(day>304 && day<=334){
553 | month="November"
554 | date=day-304;
555 | }else if(day>334 && day<=365){
556 | month="December";
557 | date=day-334;
558 | }else{
559 | month="January";
560 | date='1';
561 | }
562 |
563 | var array=month+','+String(date);
564 | return array;
565 | },
566 |
567 | getEberronDate = function(options){
568 | var day = Number(options);
569 | var date;
570 | var month;
571 |
572 | if(day<=28){
573 | month = 'Zarantyr';
574 | date = day;
575 | }else if(day<=56){
576 | month = 'Olarune';
577 | date = day-28;
578 | }else if(day<=84){
579 | month = 'Therendor';
580 | date = day-56;
581 | }else if(day<=112){
582 | month = 'Eyre';
583 | date = day-84;
584 | }else if(day<=140){
585 | month = 'Dravago';
586 | date = day-112;
587 | }else if(day<=168){
588 | month = 'Nymm';
589 | date = day-140;
590 | }else if(day<=196){
591 | month = 'Lharvion';
592 | date = day-168;
593 | }else if(day<=224){
594 | month = 'Rhaan';
595 | date = day-196;
596 | }else if(day<=252){
597 | month = 'Sypheros';
598 | date = day-224;
599 | }else if(day<=280){
600 | month = 'Aryth';
601 | date = day-252;
602 | }else if(day<=308){
603 | month = 'Vult';
604 | date = day-280;
605 | }else{
606 | month = 'Zarantyr';
607 | date = 1;
608 | }
609 |
610 | var array=month+','+String(date);
611 | return array;
612 | },
613 |
614 | getFaerunOrdinal = function(options){
615 | var args = options.content.split(",");
616 | var date = args[1];
617 | var month = args[2];
618 | var ordinal = state.Calendar.now.ordinal;
619 |
620 | if(date == 'festival'){
621 | date = 1;
622 | }else{
623 | date = Number(args[1]);
624 | }
625 |
626 | switch(month) {
627 | case 'Hammer':
628 | ordinal = date;
629 | break;
630 | case 'Midwinter':
631 | ordinal = 31;
632 | break;
633 | case 'Alturiak':
634 | ordinal = 31+date;
635 | break;
636 | case 'Ches':
637 | ordinal = 61+date;
638 | break;
639 | case 'Tarsakh':
640 | ordinal = 91+date;
641 | break;
642 | case 'Greengrass':
643 | ordinal = 122;
644 | break;
645 | case 'Mirtul':
646 | ordinal = 122+date;
647 | break;
648 | case 'Kythorn':
649 | ordinal = 152+date;
650 | break;
651 | case 'Flamerule':
652 | ordinal = 182+date;
653 | break;
654 | case 'Midsummer':
655 | ordinal = 213;
656 | break;
657 | case 'Sheildmeet':
658 | ordinal = 214;
659 | break;
660 | case 'Eleasias':
661 | ordinal = 214+date;
662 | break;
663 | case 'Eleint':
664 | ordinal = 244+date;
665 | break;
666 | case 'Highharvestide':
667 | ordinal = 275;
668 | break;
669 | case 'Marpenoth':
670 | ordinal = 275+date;
671 | break;
672 | case 'Uktar':
673 | ordinal = 305+date;
674 | break;
675 | case 'Feast of the Moon':
676 | ordinal = 335+date;
677 | break;
678 | case 'Nightal':
679 | ordinal = 336+date;
680 | break;
681 | }
682 | state.Calendar.now.ordinal = ordinal;
683 | },
684 |
685 | getGreyhawkOrdinal = function(options){
686 | var args = options.content.split(",");
687 | var date = args[1];
688 | var month = args[2];
689 | var ordinal = state.Calendar.now.ordinal;
690 |
691 | if(date == 'festival'){
692 | date = 1;
693 | }else{
694 | date = Number(args[1]);
695 | }
696 |
697 | switch(month) {
698 | case 'Needfest':
699 | ordinal = date;
700 | break;
701 | case 'Fire Seek':
702 | ordinal = 7+date;
703 | break;
704 | case 'Readying':
705 | ordinal = 35+date;
706 | break;
707 | case 'Coldeven':
708 | ordinal = 63+date;
709 | break;
710 | case 'Growfest':
711 | ordinal = 91+date;
712 | break;
713 | case 'Planting':
714 | ordinal = 98+date;
715 | break;
716 | case 'Flocktime':
717 | ordinal = 126+date;
718 | break;
719 | case 'Wealsun':
720 | ordinal = 154+date;
721 | break;
722 | case 'Richfest':
723 | ordinal = 182+date;
724 | break;
725 | case 'Reaping':
726 | ordinal = 189+date;
727 | break;
728 | case 'Goodmonth':
729 | ordinal = 217+date;
730 | break;
731 | case 'Harvester':
732 | ordinal = 245+date;
733 | break;
734 | case 'Brewfest':
735 | ordinal = 273+date;
736 | break;
737 | case 'Patchwall':
738 | ordinal = 280+date;
739 | break;
740 | case 'Readyreat':
741 | ordinal = 308+date;
742 | break;
743 | case 'Sunsebb':
744 | ordinal = 336+date;
745 | break;
746 | }
747 | state.Calendar.now.ordinal = ordinal;
748 | },
749 |
750 | getModernOrdinal = function(options){
751 | var args = options.content.split(",");
752 | var date = Number(args[1]);
753 | var month = args[2];
754 | var ordinal = state.Calendar.now.ordinal;
755 |
756 | switch(month) {
757 | case 'January':
758 | ordinal = date;
759 | break;
760 | case 'February':
761 | ordinal = 31+date;
762 | break;
763 | case 'March':
764 | ordinal = 60+date;
765 | break;
766 | case 'April':
767 | ordinal = 91+date;
768 | break;
769 | case 'May':
770 | ordinal = 121+date;
771 | break;
772 | case 'June':
773 | ordinal = 152+date;
774 | break;
775 | case 'July':
776 | ordinal = 182+date;
777 | break;
778 | case 'August':
779 | ordinal = 213+date;
780 | break;
781 | case 'September':
782 | ordinal = 244+date;
783 | break;
784 | case 'October':
785 | ordinal = 274+date;
786 | break;
787 | case 'November':
788 | ordinal = 305+date;
789 | break;
790 | case 'December':
791 | ordinal = 366+date;
792 | break;
793 | }
794 | state.Calendar.now.ordinal = ordinal;
795 | },
796 |
797 | getEberronOrdinal = function(options){
798 | var args = options.content.split(",");
799 | var date = Number(args[1]);
800 | var month = args[2];
801 | var ordinal = state.Calendar.now.ordinal;
802 |
803 | switch(month) {
804 | case 'Zarantyr':
805 | ordinal = date;
806 | break;
807 | case 'Olarune':
808 | ordinal = 28+date;
809 | break;
810 | case 'Therendor':
811 | ordinal = 56+date;
812 | break;
813 | case 'Eyre':
814 | ordinal = 84+date;
815 | break;
816 | case 'Dravago':
817 | ordinal = 112+date;
818 | break;
819 | case 'Nymm':
820 | ordinal = 140+date;
821 | break;
822 | case 'Lharvion':
823 | ordinal = 168+date;
824 | break;
825 | case 'Barrakas':
826 | ordinal = 196+date;
827 | break;
828 | case 'Rhaan':
829 | ordinal = 224+date;
830 | break;
831 | case 'Sypheros':
832 | ordinal = 252+date;
833 | break;
834 | case 'Aryth':
835 | ordinal = 280+date;
836 | break;
837 | case 'Vult':
838 | ordinal = 308+date;
839 | break;
840 | }
841 | state.Calendar.now.ordinal = ordinal;
842 | },
843 |
844 | addday = function(no){
845 | var leap = checkLeap();
846 | var days = Number(no);
847 | var ordinal = Number(state.Calendar.now.ordinal);
848 | var world = Number(state.Calendar.now.world);
849 | var div = state.Calendar.now.div;
850 |
851 | if(div!=0){
852 | state.Calendar.now.down = Number(state.Calendar.now.down)+days;
853 | }
854 |
855 | var newordinal = ordinal+days;
856 |
857 | switch(world){
858 | case 1:
859 | if(leap==0 && ordinal <= 214 && newordinal >= 214){
860 | state.Calendar.now.ordinal = newordinal+1;
861 | }else{
862 | state.Calendar.now.ordinal = newordinal;
863 | }
864 |
865 | if(ordinal>366){
866 | ordinal=ordinal-366;
867 | state.Calendar.now.year = Number(state.Calendar.now.year)+1;
868 | }
869 | break;
870 | case 2:
871 | state.Calendar.now.ordinal = newordinal;
872 | break;
873 | case 3:
874 | if(leap==0 && ordinal <= 60 && newordinal >= 60){
875 | state.Calendar.now.ordinal = newordinal+1;
876 | }else{
877 | state.Calendar.now.ordinal = newordinal;
878 | }
879 | case 4:
880 | state.Calendar.now.ordinal = newordinal;
881 | break;
882 | }
883 | },
884 |
885 |
886 |
887 | getsuffix = function(day) {
888 |
889 | var date = Number(day)
890 | var suffix
891 |
892 | if (date == 1 || date == 21 ){
893 | suffix = 'st';
894 | }else if (date == 2 || date == 22){
895 | suffix = 'nd';
896 | }else if (date == 3 || date == 23){
897 | suffix = 'rd';
898 | }else{
899 | suffix = 'th';
900 | }
901 |
902 | return suffix;
903 | },
904 |
905 | weather = function() {
906 | var roll;
907 | var temperature;
908 | var wind;
909 | var precipitation;
910 | var season;
911 | var ordinal = state.Calendar.now.ordinal;
912 |
913 | if(ordinal > 349 || ordinal <= 75){
914 | season = 'Winter'
915 | }else if(ordinal <= 166){
916 | season = 'Spring'
917 | }else if(ordinal <=257 ){
918 | season = 'Summer'
919 | }else if(ordinal <=349 ){
920 | season = 'Fall'
921 | }
922 |
923 | roll = Math.floor(Math.random()*(20-1+1)+1);
924 | if(roll>=15 && roll<=17){
925 | switch(season) {
926 | case 'Winter':
927 | temperature = 'It is a bitterly cold winter day. ';
928 | break;
929 | case 'Spring':
930 | temperature = 'It is a cold spring day. ';
931 | break;
932 | case 'Summer':
933 | temperature = 'It is a cool summer day. ';
934 | break;
935 | case 'Fall':
936 | temperature = 'It is a cold fall day. ';
937 | break;
938 | }
939 | }else if(roll>=18 && roll<=20){
940 | switch(season) {
941 | case 'Winter':
942 | temperature = 'It is a warm winter day. ';
943 | break;
944 | case 'Spring':
945 | temperature = 'It is a hot spring day. ';
946 | break;
947 | case 'Summer':
948 | temperature = 'It is a blisteringly hot summer day. ';
949 | break;
950 | case 'Fall':
951 | temperature = 'It is a hot fall day. ';
952 | break;
953 | }
954 | }else{
955 | switch(season) {
956 | case 'Winter':
957 | temperature = 'It is a cold winter day. ';
958 | break;
959 | case 'Spring':
960 | temperature = 'It is a mild spring day. ';
961 | break;
962 | case 'Summer':
963 | temperature = 'It is a hot summer day. ';
964 | break;
965 | case 'Fall':
966 | temperature = 'It is a mild fall day. ';
967 | break;
968 | }
969 |
970 | }
971 |
972 | roll = Math.floor(Math.random()*(20-1+1)+1);
973 | if(roll>=15 && roll<=17){
974 | wind='There is a light breeze and ';
975 | }else if(roll>=18 && roll<=20){
976 | wind='There is a howling wind and ';
977 | }else{
978 | wind='The air is still and ';
979 | }
980 |
981 | roll = Math.floor(Math.random()*(20-1+1)+1);
982 | if(roll>=15 && roll<=17){
983 | precipitation="Light rain or snow.";
984 | if(season=='Winter'){
985 | precipitation = 'snow falls softly on the ground.';
986 | }else{
987 | precipitation = 'a light rain falls from the sky.';
988 | }
989 | }else if(roll>=18 && roll<=20){
990 | if(season=='Winter'){
991 | precipitation = 'snow falls thick and fast from the sky.';
992 | }else{
993 | precipitation = 'a torrential rain begins to fall.';
994 | }
995 | }else{
996 | roll = Math.floor(Math.random()*(2-1+1)+1);
997 | if(roll=1){
998 | precipitation = 'the sky is overcast.';
999 | }else{
1000 | precipitation = 'the sky is clear.';
1001 | }
1002 | }
1003 |
1004 | var forecast=temperature+wind+precipitation;
1005 | state.Calendar.now.weather = forecast;
1006 | },
1007 |
1008 | getFaerunMoon = function() {
1009 | var year = state.Calendar.now.year;
1010 | var ordinal = Number(state.Calendar.now.ordinal);
1011 | var moonOrdinal;
1012 | var moon;
1013 |
1014 | var remainder = year/4 - Math.floor(year/4);
1015 | if(remainder==0.25) {
1016 | moonOrdinal=ordinal;
1017 | }else if (remainder==0.5) {
1018 | moonOrdinal=ordinal+365;
1019 | }else if (remainder==0.75) {
1020 | moonOrdinal=ordinal+730;
1021 | }else if (remainder==0) {
1022 | moonOrdinal=ordinal+1095;
1023 | }
1024 |
1025 | var today = ordinal/30.4375 - Math.floor(ordinal/30.4375);
1026 | var tomorrow = (ordinal+1)/30.4375 - Math.floor((ordinal+1)/30.4375);
1027 | var perc = today + ',' + tomorrow + ',' + moonOrdinal;
1028 |
1029 | moon = getMoon(perc);
1030 |
1031 | return moon;
1032 | },
1033 |
1034 | getGreyhawkMoon = function() {
1035 | var ordinal = Number(state.Calendar.now.ordinal);
1036 | var today;
1037 | var tomorrow;
1038 | var LunaOrd = ordinal + 10;
1039 | var CeleneOrd = ordinal + 87;
1040 |
1041 | today = LunaOrd/28 - Math.floor(LunaOrd/28);
1042 | tomorrow = (LunaOrd+1)/28 - Math.floor((LunaOrd+1)/28);
1043 | var perc = today + ',' + tomorrow + ',' + 0;
1044 | var Luna = getMoon(perc);
1045 |
1046 | today = CeleneOrd/91 - Math.floor(CeleneOrd/91);
1047 | tomorrow = (CeleneOrd+1)/91 - Math.floor((CeleneOrd+1)/91);
1048 | perc = today + ',' + tomorrow + ',' + 0;
1049 | var Celene = getMoon(perc)
1050 |
1051 | var moon = 'Luna: '+Luna+'
Celene: '+Celene;
1052 |
1053 | return moon;
1054 | },
1055 |
1056 | getMoon = function(perc) {
1057 | var args = perc.split(',');
1058 | var today = args[0];
1059 | var tomorrow = args[1];
1060 | var moonOrdinal = args[2];
1061 | var moon;
1062 |
1063 | if(today==0 || tomorrow
0.25){
1066 | moon = 'Last Quarter';
1067 | }else if(today<0.25){
1068 | moon = 'Waning Gibbous';
1069 | }else if(today<=0.5 && tomorrow>0.5){
1070 | moon = 'New Moon';
1071 | }else if(today<0.5){
1072 | moon = 'Waning Crescent';
1073 | }else if(today<=0.75 && tomorrow>0.75){
1074 | moon = 'First Quarter';
1075 | }else if(today<0.75){
1076 | moon = 'Waxing Crescent';
1077 | }else{
1078 | moon = 'Waxing Gibbous';
1079 | }
1080 |
1081 | return moon;
1082 | },
1083 |
1084 | checkInstall = function() {
1085 | if( ! state.Calendar.now.version ) {
1086 | setDefaults();
1087 | }
1088 |
1089 | if ( state.Calendar.now.version != version ){
1090 | checkDefaults();
1091 | }
1092 | },
1093 |
1094 | registerEventHandlers = function() {
1095 | on('chat:message', handleInput);
1096 | };
1097 |
1098 | return {
1099 | CheckInstall: checkInstall,
1100 | RegisterEventHandlers: registerEventHandlers
1101 | };
1102 |
1103 | }());
1104 |
1105 | on("ready",function(){
1106 | 'use strict';
1107 | Calendar.CheckInstall();
1108 | Calendar.RegisterEventHandlers();
1109 | });
1110 |
--------------------------------------------------------------------------------