/* * This file contains all the update functions. */ #include <sys/types.h> #include <stdio.h> /* include main header file */ #include "mud.h" TIME_INFO_DATA time_data; /* * Update_handler() * * This is the toplevel update function. */ void update_world(); void update_handler() { static int pulse_world; static int pulse_doors; if (--pulse_world <= 0) { pulse_world = PULSE_WORLD; update_world(); } if (--pulse_doors <= 0) { pulse_doors = PULSE_DOORS; close_doors(); } } void close_doors() { int x; int y; for (y = 0; y < MAX_Y; y++) { for (x = 0; x < MAX_X; x++) { if (map[x][y] == 19) map[x][y] = 14; } } } void update_world() { D_MOBILE *xMob; D_SOCKET *dsock; static char buf[MAX_BUFFER]; bool send_the_thing = FALSE; switch(++time_data.hour) { case 5: time_data.sunlight = SUN_RISE; sprintf (buf, "The day has begun.\n\r"); send_the_thing = TRUE; break; case 6: time_data.sunlight = SUN_LIGHT; sprintf (buf, "The sun rises in the east.\n\r"); send_the_thing = TRUE; break; case 12: time_data.sunlight = SUN_HIGH; sprintf (buf, "The sun is high in the sky.\n\r"); send_the_thing = TRUE; break; case 19: time_data.sunlight = SUN_SETTING; sprintf (buf, "The orange sun begins to decend into the underworld.\n\r"); send_the_thing = TRUE; break; case 20: time_data.sunlight = SUN_DARK; sprintf (buf, "The night decends upon the world.\n\r"); send_the_thing = TRUE; break; case 24: time_data.hour = 0; time_data.day++; sprintf (buf, "The clock strikes Midnight.\n\r"); send_the_thing = TRUE; break; } /* Increment Day */ if (time_data.day >= 7) { time_data.day = 0; time_data.week++; } /* Increment Week */ if (time_data.week >= 4) { time_data.week = 0; time_data.month++; } /* Increment Month */ if (time_data.month >= 12) { time_data.month = 0; time_data.year++; } for (dsock = dsock_list; dsock; dsock = dsock->next) { if (dsock->state != STATE_PLAYING) continue; if ((xMob = dsock->player) == NULL) continue; /* Disabled due to Spamming me when im idle, asshole */ /* if (send_the_thing == TRUE) stc(buf, xMob); */ } } /* * Days of the week */ char *days[7] = { "Morndas", "Tirdas", "Middas", "Turdas", "Fredas", "Loredas", "Sundas" }; /* * Week names */ char *week[4] = { "Fiswok", "Siwok", "Tiewok", "Quashwok", }; char *month[12] = { /* Winter */ "Sun's Dusk", "Evening Star", "Morning Star", /* Spring */ "Sun's Dawn", "First Seed", "Rain's Hand", /* Summer */ "Second Seed", "Mid Year", "Sun's Height", /* Fall */ "Last Seed", "Hearthfire", "Frostfall", }; void cmd_time (D_M * ch, char *arg) { BUFFER *buf = buffer_new(MAX_BUFFER); bprintf(buf, "System time is %s", ctime (¤t_time)); bprintf(buf, "The day is the %s %s, of %s in the year %d.\n\r", week[time_data.week], days[time_data.day], month[time_data.month], time_data.year); bprintf(buf, "It is %d%s o'clock.\n\r", (time_data.hour % 12 == 0) ? 12 : time_data.hour % 12, time_data.hour >= 12 ? "pm" : "am"); text_to_mobile(ch, buf->data); buffer_free(buf); } /* * save_time() * * Saves time! */ void save_time () { FILE * fp; if (!(fp = fopen (TIME_FILE,"w+"))) { log_string ("*** TIME *** creation of new time_file failed"); } else { int total; total = fprintf (fp, "%d %d %d %d %d", time_data.hour, time_data.day, time_data.week, time_data.month, time_data.year); if (total<4) log_string("*** TIME *** failed fprintf to time_file"); fclose(fp); } } /* * load_time() * * oads up the time stuff */ void load_time() { int total; bool fail=FALSE; /* Try and load time from file first */ FILE *fp; if ((fp = fopen (TIME_FILE, "r"))) { log_string ("*** TIME *** opening time_file"); total=fscanf(fp, "%d %d %d %d %d", &(time_data.hour), &(time_data.day), &(time_data.week), &(time_data.month), &(time_data.year)); if (total < 4) { log_string ("*** TIME *** loading stored time failed, using default"); fail=TRUE; } fclose (fp); } else { log_string ("*** TIME *** failed open of time_file, loading default time."); fail=TRUE; } if (fail) { time_data.hour = 12; time_data.day = 1; time_data.week = 3; time_data.month = 7; time_data.year = 1004; log_string ("*** TIME *** : Loading Default game time."); } }