#include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "emlen.h" #ifdef NEW_WORLD void do_yes (CHAR_DATA * ch, char *argy) { DEFINE_COMMAND ("yes", do_yes, POSITION_SLEEPING, 0, LOG_ALWAYS, "This command is used/reserved for character creation.") if (ch->in_room && ch->in_room->vnum != 304 && ch->in_room->vnum != 404) { send_to_char ("Huh?\n\r", ch); return; } char_from_room (ch); char_to_room (ch, get_room_index (450)); do_look (ch, "auto"); return; } #endif void do_anon (CHAR_DATA * ch, char *argy) { DEFINE_COMMAND ("anonymous", do_anon, POSITION_DEAD, 0, LOG_NORMAL, "This command toggles whether or not your level shows up on the who list.") if (ch->pcdata->show_lev) { send_to_char ("Your level will not be shown in the who list from now on.\n\r", ch); ch->pcdata->show_lev = FALSE; return; } send_to_char ("Your level will now be shown in the who list for others to see.\n\r", ch); ch->pcdata->show_lev = TRUE; return; } void do_levels (CHAR_DATA * ch, char *argy) { int i, a, b; char buffr[256]; char arg1[256]; DEFINE_COMMAND ("levels", do_levels, POSITION_DEAD, 110, LOG_NORMAL, "This command shows exp and tps needed for the level range specified.") buffr[0] = '\0'; argy = one_argy (argy, arg1); if (!is_number (argy) || !is_number (arg1)) { send_to_char ("Syntax is \"level <min> <max>\"\n\r", ch); return; } a = atoi (arg1); b = atoi (argy); if (a >= b || a < 1 || a > 90 || b < 2 || b > 90) { send_to_char ("Invalid range.\n\r", ch); return; } for (i = a; i < b; i++) { sprintf (buffr, "Level %d Exp: %ld Tps: %d\n\r", i + 1, FIND_EXP (i, ch->race), FIND_TPS (i, ch->race)); send_to_char (buffr, ch); } return; } /*void do_events( CHAR_DATA *ch, char *argy ) { do_help(ch,"events"); return; } void do_news( CHAR_DATA *ch, char *argy ) { do_help(ch,"news"); return; } void do_changes( CHAR_DATA *ch, char *argy ) { do_help(ch,"changes"); return; } */ void do_reload_help (CHAR_DATA * ch, char *argy) { FILE *fp; char word[500]; HELP_DATA *hnx; HELP_DATA *hc; DEFINE_COMMAND ("rld_help", do_reload_help, POSITION_DEAD, 110, LOG_ALWAYS, "This command reloads the helpfiles from disk.") if ((fp = fopen ("help.are", "r")) == NULL) { send_to_char ("Unable to open the helpfile...", ch); return; } for (hc = help_first; hc != NULL; hc = hnx) { hnx = hc->next; free_string (hc->keyword); free_string (hc->text); } help_last = NULL; help_first = NULL; top_help = 0; word[0] = '\0'; while (str_cmp ("#HELPS", word)) strcpy (word, fread_word (fp)); load_helps (fp); send_to_char ("Successfully reloaded.\n\r", ch); fclose (fp); return; } void do_help (CHAR_DATA * ch, char *argy) { char argall[SML_LENGTH]; char argone[SML_LENGTH]; char j[50]; HELP_DATA *pHelp; DEFINE_COMMAND ("help", do_help, POSITION_DEAD, 0, LOG_NORMAL, "This is the basic help command. Syntax is 'help' or 'help <topic>'.") if (argy[0] == '\0') argy = "summary"; if (IS_JAVA(ch)) { if (!str_cmp(argy,"motd")) { sprintf(j,"%c",31); write_to_buffer(ch->desc,j,0); } else { sprintf(j,"%c",28); write_to_buffer(ch->desc,j,0); } } /* * Tricky argy handling so 'help a b' doesn't match a. */ argall[0] = '\0'; while (argy[0] != '\0') { argy = one_argy (argy, argone); if (argall[0] != '\0') strcat (argall, " "); strcat (argall, argone); } for (pHelp = help_first; pHelp && pHelp != NULL; pHelp = pHelp->next) { if (pHelp->level > LEVEL (ch)) continue; if (is_name (argall, pHelp->keyword)) { if (pHelp->level >= 0 && str_cmp (argall, "imotd")) { send_to_char ("\n\r", ch); } /* * Strip leading '.' to allow initial blanks. */ /*#ifdef NEW_WORLD*/ if (pHelp->text[0] == '.') { if (IS_JAVA(ch)) send_to_char(decompress(pHelp->text+1),ch); else page_to_char (decompress (pHelp->text + 1), ch); } else { if (IS_JAVA(ch)) send_to_char(decompress(pHelp->text),ch); else page_to_char (decompress (pHelp->text), ch); } /*#else if (pHelp->text[0] == '.') page_to_char (pHelp->text + 1, ch); else page_to_char (pHelp->text, ch); #endif*/ if (IS_JAVA(ch)) { write_to_buffer(ch->desc,j,0); } return; } } send_to_char ("No help on that word.\n\r", ch); return; } void do_who (CHAR_DATA * ch, char *argy) { CHAR_DATA *wch; int pass; DESCRIPTOR_DATA *d; int vis; int ii; int nMatch; bool tempbool; int gMatch; int align; int levl; bool namey; char doe[STD_LENGTH]; bool clanny; bool tally_all = FALSE; DEFINE_COMMAND ("who", do_who, POSITION_DEAD, 0, LOG_NORMAL, "This command shows who is playing and visible to you at the moment.") ii = clan_number (ch); align = 0; nMatch = 0; clanny = FALSE; gMatch = 0; vis = 0; hugebuf_o[0] = '\0'; sprintf (hugebuf_o, "\x1B[0;36m-----------------------------------------------------------------------------\x1B[37;0m\n\r"); namey = FALSE; levl = 0; if (argy[0] == '\0' || argy == "") { if (LEVEL (ch) > 100 && LEVEL (ch) < 110) align = 3; else namey = FALSE; tally_all = TRUE; } else { if (!str_cmp (argy, "clan")) { clanny = TRUE; if (ii < 1) { send_to_char ("You aren't in a clan!\n\r", ch); return; } } else if (!str_cmp (argy, "battle") || !str_cmp (argy, "battleground")) align = 4; else if (!str_cmp (argy, "evil")) align = 1; else if (!str_cmp (argy, "good")) align = 2; else if (!str_cmp (argy, "god") || !str_cmp (argy, "immortal")) align = 3; else if (LEVEL (ch) > 100 && is_number (argy)) { levl = atoi (argy); } else { argy[0] = UPPER (argy[0]); namey = TRUE; } } tempbool = FALSE; for (pass = 0; pass != 3; pass = pass + 1) { if (!tempbool && pass != 0 && (gMatch > 0 || LEVEL (ch) > 100)) { tempbool = TRUE; sprintf (hugebuf_o + strlen (hugebuf_o), "\x1B[0;36m- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\x1B[37;0m\n\r"); } for (d = descriptor_list; d != NULL; d = d->next) { wch = NULL; if (d->character == NULL) continue; if (IS_MOB (d->character)) continue; if (d->character->desc == NULL) continue; if ((d->connected != CON_PLAYING && d->connected != CON_AEDITOR && d->connected != CON_REDITOR && d->connected != CON_CEDITOR && d->connected != CON_OEDITOR && d->connected != CON_MEDITOR) || !can_see (ch, d->character)) continue; if (d->connected != CON_PLAYING && !IS_IMMORTAL (ch)) continue; wch = (d->original != NULL) ? d->original : d->character; if (clanny && clan_number (wch) != ii) continue; if (LEVEL (ch) > 100 && LEVEL (wch) < levl) continue; if (namey && str_prefix (capitalize (argy), NAME (wch))) continue; if (LEVEL (wch) > 100 && pass != 0) continue; if (LEVEL (wch) <= 100 && pass == 0) continue; if (LEVEL (wch) <= 100 && !IS_EVIL (wch) && pass != 2) continue; if (LEVEL (wch) <= 100 && pass == 2 && IS_EVIL (wch)) continue; if (align == 1 && !IS_EVIL (wch)) continue; if (align == 2 && IS_EVIL (wch)) continue; if (align == 3 && LEVEL (wch) < 100) continue; if (LEVEL (ch) < 100 && !IS_EVIL (ch) && IS_EVIL (wch)) continue; if (align == 4 && !IN_BATTLE (wch)) continue; if (IS_EVIL (ch) && LEVEL (ch) < 100 && !IS_EVIL (wch)) continue; if (LEVEL (wch) < 110 && LEVEL (wch) > 99 && LEVEL (ch) < 100) continue; if (tally_all) nMatch++; doe[0] = '\0'; if (LEVEL (wch) > 99) { if (wch->pcdata->wizinvis == 0) gMatch++; if (d->connected != CON_PLAYING) sprintf (doe, "\x1B[1;36m Building "); else { switch (LEVEL (wch)) { default: sprintf (doe, "\x1B[1;33m Builder "); break; case TOP_LEVEL: sprintf (doe, "\x1B[1;35m-* Admin *-"); break; } if (!str_cmp (NAME (wch), "Anna") || !str_cmp (NAME (wch), "Gord")) { sprintf (doe, "\x1B[1;35m-* God *-"); } } if (wch->pcdata->quiet == 1) sprintf (doe, "\x1B[1;35m- Quiet Mode -"); if (wch->pcdata->quiet == 2) sprintf (doe, "\x1B[1;34m- Busy Mode - "); } { if (!tally_all) nMatch++; if (IS_PLAYER (ch) && LEVEL (ch) < 100 && !IS_MOB (wch) && (!not_is_same_align (ch, wch))) vis++; if (ii > 0) { if (clan_number (wch) == ii) { sprintf (hugebuf_o + strlen (hugebuf_o), "<C>"); } else sprintf (hugebuf_o + strlen (hugebuf_o), " "); } if (LEVEL (ch) >= 110 && LEVEL (wch) <= 100 && IS_SET (ch->act, PLR_HOLYLIGHT)) { sprintf (hugebuf_o + strlen (hugebuf_o), "\x1B[1;30m[\x1B[32m%s%s %s%3d%s%s\x1B[1;30m]\x1B[37;0m %s%s%s%s%s%s\x1B[37;0m\n\r", (wch->pcdata->bounty ? "B" : " "), (IS_EVIL (wch) ? "\x1B[31;1mA\x1B[32m" : " "), (IN_BATTLE (wch) ? "+" : " "), LEVEL (wch), (IS_SET (wch->pcdata->act2, PLR_SILENCE) ? "s" : " "), (wch->pcdata->bgf ? "-" : " "), wch->timer > 49 ? "\x1B[37;1m<AFK> \x1B[37;0m" : "", NAME (wch), ((wch->pcdata->title[0] != ',' && wch->pcdata->title[0] != '.') ? " " : ""), wch->pcdata->title, (IS_AFFECTED (wch, AFF_INVISIBLE)) ? " (Invis)" : "", (wch->pcdata->wizinvis != 0 ? " (Invis)" : "")); } else { if (doe[0] == '\0') { int iii; iii = (number_range (1, 2) == 1 ? 34 : 32); if (IS_EVIL (wch)) sprintf (doe, "\x1B[31;1m %-7s", evil); else if (!wch->pcdata->show_lev) sprintf (doe, "\x1B[%d;1m- - - - ", 34); else sprintf (doe, "\x1B[%d;1mLevel %2d", 32, LEVEL (wch)); } sprintf (hugebuf_o + strlen (hugebuf_o), "\x1B[30;1m[ %s \x1B[30;1m]\x1B[37;0m %s%s%s%s%s\x1B[37;0m\n\r", doe, wch->timer > 49 ? "\x1B[37;1m<AFK> \x1B[37;0m" : "", NAME (wch), (wch->pcdata->title[0] != ',' ? " " : ""), wch->pcdata->title, (wch->pcdata->wizinvis != 0 ? " (Invis)" : "")); } } } /*end Pass */ } sprintf (hugebuf_o + strlen (hugebuf_o), "\x1B[0;36m-----------------------------------------------------------------------------\x1B[37;0m\n\r"); sprintf (hugebuf_o + strlen (hugebuf_o), "There %s %d player%s visible to you and %d total player%s.\n\r", vis > 1 ? "are" : "is", vis, vis > 1 ? "s" : "", nMatch, nMatch > 1 ? "s" : ""); /*sprintf(hugebuf_o+strlen(hugebuf_o),"Max players online at once since reboot: %d.\n\r", max_connected); */ page_to_char (hugebuf_o, ch); return; } void do_vwho (CHAR_DATA * ch, char *argy) { CHAR_DATA *wch; int pass; DESCRIPTOR_DATA *d; int vis; int ii; int nMatch; bool tempbool; int gMatch; int align; int levl; bool namey; char doe[STD_LENGTH]; bool clanny; bool tally_all = FALSE; DEFINE_COMMAND ("vwho", do_vwho, POSITION_DEAD, 0, LOG_NORMAL, "This command shows who is playing and visible to you at the moment.") if (IS_JAVA(ch)) invoke_who_window(ch); ii = clan_number (ch); align = 0; nMatch = 0; clanny = FALSE; gMatch = 0; vis = 0; hugebuf_o[0] = '\0'; sprintf (hugebuf_o, "\x1B[0;36m-----------------------------------------------------------------------------\x1B[37;0m\n\r"); namey = FALSE; levl = 0; if (argy[0] == '\0' || argy == "") { if (LEVEL (ch) > 100 && LEVEL (ch) < 110) align = 3; else namey = FALSE; tally_all = TRUE; } else { if (!str_cmp (argy, "clan")) { clanny = TRUE; if (ii < 1) { send_to_char ("You aren't in a clan!\n\r", ch); return; } } else if (!str_cmp (argy, "battle") || !str_cmp (argy, "battleground")) align = 4; else if (!str_cmp (argy, "evil")) align = 1; else if (!str_cmp (argy, "good")) align = 2; else if (!str_cmp (argy, "god") || !str_cmp (argy, "immortal")) align = 3; else if (LEVEL (ch) > 100 && is_number (argy)) { levl = atoi (argy); } else { argy[0] = UPPER (argy[0]); namey = TRUE; } } tempbool = FALSE; for (pass = 0; pass != 3; pass = pass + 1) { if (!tempbool && pass != 0 && (gMatch > 0 || LEVEL (ch) > 100)) { tempbool = TRUE; sprintf (hugebuf_o + strlen (hugebuf_o), "\x1B[0;36m- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\x1B[37;0m\n\r"); } for (d = descriptor_list; d != NULL; d = d->next) { wch = NULL; if (d->character == NULL) continue; if (IS_MOB (d->character)) continue; if (d->character->desc == NULL) continue; if ((d->connected != CON_PLAYING && d->connected != CON_AEDITOR && d->connected != CON_REDITOR && d->connected != CON_CEDITOR && d->connected != CON_OEDITOR && d->connected != CON_MEDITOR) || !can_see (ch, d->character)) continue; if (d->connected != CON_PLAYING && !IS_IMMORTAL (ch)) continue; wch = (d->original != NULL) ? d->original : d->character; if (clanny && clan_number (wch) != ii) continue; if (LEVEL (ch) > 100 && LEVEL (wch) < levl) continue; if (namey && str_prefix (capitalize (argy), NAME (wch))) continue; if (LEVEL (wch) > 100 && pass != 0) continue; if (LEVEL (wch) <= 100 && pass == 0) continue; if (LEVEL (wch) <= 100 && !IS_EVIL (wch) && pass != 2) continue; if (LEVEL (wch) <= 100 && pass == 2 && IS_EVIL (wch)) continue; if (align == 1 && !IS_EVIL (wch)) continue; if (align == 2 && IS_EVIL (wch)) continue; if (align == 3 && LEVEL (wch) < 100) continue; if (LEVEL (ch) < 100 && !IS_EVIL (ch) && IS_EVIL (wch)) continue; if (align == 4 && !IN_BATTLE (wch)) continue; if (IS_EVIL (ch) && LEVEL (ch) < 100 && !IS_EVIL (wch)) continue; if (LEVEL (wch) < 110 && LEVEL (wch) > 99 && LEVEL (ch) < 100) continue; if (tally_all) nMatch++; doe[0] = '\0'; if (IS_JAVA(ch)) { if (!tally_all) nMatch++; if (IS_PLAYER (ch) && LEVEL (ch) < 100 && !IS_MOB (wch) && (!not_is_same_align (ch, wch))) vis++; add_who_entry(ch,wch); continue; } if (LEVEL (wch) > 99) { if (wch->pcdata->wizinvis == 0) gMatch++; if (d->connected != CON_PLAYING) sprintf (doe, "\x1B[1;36m Building "); else { switch (LEVEL (wch)) { default: sprintf (doe, "\x1B[1;33m Builder "); break; case TOP_LEVEL: sprintf (doe, "\x1B[1;35m-* Admin *-"); break; } if (!str_cmp (NAME (wch), "Anna") || !str_cmp (NAME (wch), "Gord")) { sprintf (doe, "\x1B[1;35m-* God *-"); } } if (wch->pcdata->quiet == 1) sprintf (doe, "\x1B[1;35m- Quiet Mode -"); if (wch->pcdata->quiet == 2) sprintf (doe, "\x1B[1;34m- Busy Mode - "); } { if (!tally_all) nMatch++; if (IS_PLAYER (ch) && LEVEL (ch) < 100 && !IS_MOB (wch) && (!not_is_same_align (ch, wch))) vis++; if (ii > 0) { if (clan_number (wch) == ii) { sprintf (hugebuf_o + strlen (hugebuf_o), "<C>"); } else sprintf (hugebuf_o + strlen (hugebuf_o), " "); } if (LEVEL (ch) >= 110 && LEVEL (wch) <= 100 && IS_SET (ch->act, PLR_HOLYLIGHT)) { sprintf (hugebuf_o + strlen (hugebuf_o), "\x1B[1;30m[\x1B[32m%s%s %s%3d%s%s\x1B[1;30m]\x1B[37;0m %s%s%s%s%s%s\x1B[37;0m\n\r", (wch->pcdata->bounty ? "B" : " "), (IS_EVIL (wch) ? "\x1B[31;1mA\x1B[32m" : " "), (IN_BATTLE (wch) ? "+" : " "), LEVEL (wch), (IS_SET (wch->pcdata->act2, PLR_SILENCE) ? "s" : " "), (wch->pcdata->bgf ? "-" : " "), wch->timer > 49 ? "\x1B[37;1m<AFK> \x1B[37;0m" : "", NAME (wch), ((wch->pcdata->title[0] != ',' && wch->pcdata->title[0] != '.') ? " " : ""), wch->pcdata->title, (IS_AFFECTED (wch, AFF_INVISIBLE)) ? " (Invis)" : "", (wch->pcdata->wizinvis != 0 ? " (Invis)" : "")); } else { if (doe[0] == '\0') { int iii; iii = (number_range (1, 2) == 1 ? 34 : 32); if (IS_EVIL (wch)) sprintf (doe, "\x1B[31;1m %-7s", evil); else if (!wch->pcdata->show_lev) sprintf (doe, "\x1B[%d;1m- - - - ", 34); else sprintf (doe, "\x1B[%d;1mLevel %2d", 32, LEVEL (wch)); } sprintf (hugebuf_o + strlen (hugebuf_o), "\x1B[30;1m[ %s \x1B[30;1m]\x1B[37;0m %s%s%s%s%s\x1B[37;0m\n\r", doe, wch->timer > 49 ? "\x1B[37;1m<AFK> \x1B[37;0m" : "", NAME (wch), (wch->pcdata->title[0] != ',' ? " " : ""), wch->pcdata->title, (wch->pcdata->wizinvis != 0 ? " (Invis)" : "")); } } } /*end Pass */ } sprintf (hugebuf_o + strlen (hugebuf_o), "\x1B[0;36m-----------------------------------------------------------------------------\x1B[37;0m\n\r"); sprintf (hugebuf_o + strlen (hugebuf_o), "There %s %d player%s visible to you and %d total player%s.\n\r", vis > 1 ? "are" : "is", vis, vis > 1 ? "s" : "", nMatch, nMatch > 1 ? "s" : ""); /*sprintf(hugebuf_o+strlen(hugebuf_o),"Max players online at once since reboot: %d.\n\r", max_connected); */ if (IS_JAVA(ch)) show_who_window(ch); else page_to_char (hugebuf_o, ch); return; } char *const day_name[] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" } ; char *const month_name[] = { "Winter", "Winter", "Midwinter", "Midwinter", "Early Spring", "Spring", "Spring", "Late Spring", "Early Summer", "Summer", "Midsummer", "High Summer", "Late Summer", "Early Autumn", "Autumn", "Mid-Autumn", "Late Autumn", "Aturion Twilight", "Aturion Twilight", "The Frigid Moon", "Early Winter" } ; void do_time (CHAR_DATA * ch, char *argy) { char buf[STD_LENGTH]; char *suf; int day; DEFINE_COMMAND ("time", do_time, POSITION_DEAD, 0, LOG_NORMAL, "This command shows you the current time.") day = time_info.day + 1; if (day > 4 && day < 20) suf = "th"; else if (day % 10 == 1) suf = "st"; else if (day % 10 == 2) suf = "nd"; else if (day % 10 == 3) suf = "rd"; else suf = "th"; sprintf (buf, "It is %d o'clock %s on the day of %s.\n\r(The %d%s of %s. Year: %d)\n\r", (time_info.hour % 12 == 0) ? 12 : time_info.hour % 12, time_info.hour >= 12 ? "pm" : "am", day_name[day % 7], day, suf, month_name[time_info.month], time_info.year); send_to_char (buf, ch); return; } int cur_temp (CHAR_DATA * ch) { int temp_adj; int rweth; rweth = weather_info.temperature; temp_adj = 0; if (!ch->in_room || !ch->in_room->area) return 60; switch (ch->in_room->sector_type) { case SECT_DESERT: temp_adj = number_fuzzy (110 - weather_info.temperature); break; case SECT_TROPICAL: temp_adj = number_fuzzy (110 - weather_info.temperature); break; case SECT_SNOW: temp_adj = number_fuzzy (30 - weather_info.temperature); break; case SECT_INSIDE: temp_adj = number_fuzzy (80 - weather_info.temperature); break; case SECT_MOUNTAIN: temp_adj = number_fuzzy (50 - weather_info.temperature); break; case SECT_AIR: temp_adj = number_fuzzy (60 - weather_info.temperature); break; } rweth += temp_adj; return rweth; } // Some Weather crap borrowed from other codebases */ void do_weather (CHAR_DATA * ch, char *argy) { char buf[STD_LENGTH]; char descr[STD_LENGTH]; short wind; int temp_adj, sky, wt; static char *const sky_look[] = { "cloudless", "cloudy", "rainy", "lit by flashes of lightning", "thick with fog", "slightly sunny", "slightly overcast", "scattered with a few flakes", "filled with flakes", "a blizzard of white", "thick with fog", "not visible underwater.", "stormy" } ; static char *const wind_tmp[4] = { "cold", "cool", "warm", "hot" } ; DEFINE_COMMAND ("weather", do_weather, POSITION_RESTING, 0, LOG_NORMAL, "This command allows you to see the weather (outdoors).") wind = weather_info.windspeed; sky = weather_info.sky; temp_adj = 0; do_time (ch, ""); switch (ch->in_room->sector_type) { case SECT_UNDERWATER: temp_adj = number_fuzzy (70 - weather_info.temperature); sky = 11; wt = -1; break; case SECT_DESERT: temp_adj = number_fuzzy (110 - weather_info.temperature); if (sky == 2) sky = 12; break; case SECT_TROPICAL: temp_adj = number_fuzzy (110 - weather_info.temperature); break; case SECT_SNOW: temp_adj = number_fuzzy (30 - weather_info.temperature); break; case SECT_INSIDE: temp_adj = number_fuzzy (80 - weather_info.temperature); break; case SECT_MOUNTAIN: temp_adj = number_fuzzy (50 - weather_info.temperature); break; case SECT_AIR: temp_adj = number_fuzzy (60 - weather_info.temperature); break; } if (temp_adj + weather_info.temperature > 90) wt = 3; else if (temp_adj + weather_info.temperature > 75) wt = 2; else if (temp_adj + weather_info.temperature > 50) wt = 1; else wt = 0; if (!IS_OUTSIDE (ch)) { send_to_char ("You can only see the weather from the outdoors.\n\r", ch); return; } descr[0] = '\0'; sprintf (buf, "The sky is %s ", ((time_info.month <= 4 || time_info.month >= 17) && (temp_adj + weather_info.temperature <= 32)) ? sky_look[sky + 5] : sky_look[sky]); strcat (descr, buf); if (wt != -1) { sprintf (buf, "and a %s %sward %s blows.\n\r", wind_tmp[wt], dir_name[abs (weather_info.winddir) % 3], wind < 10 ? "breeze" : wind < 20 ? "wind" : wind < 30 ? "gust" : "torrent"); strcat (descr, buf); } sprintf (buf, "It is %d degrees right now.\n\r", (temp_adj + weather_info.temperature)); strcat (descr, buf); /*if ( IS_IMMORTAL( ch ) ) { sprintf( buf, "(temp: %d, windspd: %d, wind dir: %d, sky: %d, mmhg: %d, change: %d)\n\r", (temp_adj+weather_info.temperature), weather_info.windspeed, weather_info.winddir, weather_info.sky, weather_info.mmhg, weather_info.change ); strcat( descr, buf ); } */ send_to_char (descr, ch); return; }