diff -ur src/act_comm.c new/act_comm.c --- src/act_comm.c Wed Apr 9 23:26:58 2003 +++ new/act_comm.c Wed Apr 23 00:11:35 2003 @@ -252,16 +252,9 @@ chprintln(ch, "What do you want to say?"); else { - if (IS_SET(ch->comm, (bitname))) - { - chprintlnf(ch, "%s channel is now ON.{x", type); - REMOVE_BIT(ch->comm, (bitname)); - } - else - { - chprintlnf(ch, "%s channel is now OFF.{x", type); - SET_BIT(ch->comm, (bitname)); - } + set_on_off(ch, &ch->comm, bitname, + FORMATF("%s channel is now OFF.{x", type), + FORMATF("%s channel is now ON.{x", type)); } } else @@ -420,104 +413,53 @@ CH_CMD(do_nogocial) { - if (IS_SET(ch->comm, COMM_NOGOCIAL)) - { - REMOVE_BIT(ch->comm, COMM_NOGOCIAL); - chprintln(ch, "You no longer see socials/emotes over channels."); - } - else - { - SET_BIT(ch->comm, COMM_NOGOCIAL); - chprintln(ch, "You now see socials/emotes over channels."); - } + set_on_off(ch, &ch->comm, COMM_NOGOCIAL, + "You no longer see socials/emotes over channels.", + "You now see socials/emotes over channels."); } /* RT code to display channel status */ CH_CMD(do_channels) { - /* lists all channels and their status */ - chprintln(ch, " channel status"); - chprintln(ch, "---------------------"); - - chprint(ch, "gossip "); - if (!IS_SET(ch->comm, COMM_NOGOSSIP)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "ooc "); - if (!IS_SET(ch->comm, COMM_NOOOC)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "auction "); - if (!IS_SET(ch->comm, COMM_NOAUCTION)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "music "); - if (!IS_SET(ch->comm, COMM_NOMUSIC)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "Q/A "); - if (!IS_SET(ch->comm, COMM_NOQUESTION)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); + chprintlnf(ch, " %-9s %-6s{w %s", "Command", "Status", "Description"); + chprintln(ch, draw_line(ch, NULL, 0)); - chprint(ch, "Quote "); - if (!IS_SET(ch->comm, COMM_NOQUOTE)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "grats "); - if (!IS_SET(ch->comm, COMM_NOGRATS)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "btalk "); - if (!IS_SET(ch->comm, COMM_NOBUDDY)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOGOSSIP), "gossip", + "Channel used in roleplay discussions."); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOOOC), "ooc", + "A global channel for Out Of Character discussions."); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOAUCTION), "auction", + "Channel for bartering goods."); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOMUSIC), "music", + "Global channel used for singing and jukebox songs."); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOQUESTION), "Q/A", + "Channel for asking and answering questions."); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOQUOTE), "quote", + "A global channel for \"quoting\" someone or something."); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOGRATS), "grats", + "A global channel for congratulating someone or something."); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOBUDDY), "btalk", + "A private channel that only transmits within buddies."); if (IS_IMMORTAL(ch)) { - chprint(ch, "god channel "); - if (!IS_SET(ch->comm, COMM_NOWIZ)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); + print_on_off(ch, !IS_SET(ch->comm, COMM_NOWIZ), "immtalk", + "A global channel only for Immortals to use."); } - chprint(ch, "shouts "); - if (!IS_SET(ch->comm, COMM_SHOUTSOFF)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "tells "); - if (!IS_SET(ch->comm, COMM_DEAF)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "quiet mode "); - if (IS_SET(ch->comm, COMM_QUIET)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - if (IS_SET(ch->comm, COMM_AFK)) - chprintln(ch, "You are AFK."); + print_on_off(ch, IS_SET(ch->comm, COMM_SHOUTSOFF), "shouts", + "A global channel that transmits with a delay as if there is an echo."); + print_on_off(ch, IS_SET(ch->comm, COMM_DEAF), "deaf", + "Prevents you from hearing any tells."); + print_on_off(ch, IS_SET(ch->comm, COMM_QUIET), "quiet", + "Toggles whether you receive any channels at all."); + print_on_off(ch, IS_SET(ch->comm, COMM_AFK), "afk", + "Sets you Away From Keyboard."); + print_on_off(ch, IS_SET(ch->comm, COMM_NOGOCIAL), "nogocial", + "Toggles socials/emotes over public channels."); + chprintln(ch, draw_line(ch, NULL, 0)); if (IS_SET(ch->comm, COMM_SNOOP_PROOF)) chprintln(ch, "You are immune to snooping."); @@ -548,43 +490,24 @@ if (IS_SET(ch->comm, COMM_NOEMOTE)) chprintln(ch, "You cannot show emotions."); - - if (IS_SET(ch->comm, COMM_NOGOCIAL)) - chprintln(ch, "You cannot see socials/emotes over public channels."); - } /* RT deaf blocks out all shouts */ CH_CMD(do_deaf) { - - if (IS_SET(ch->comm, COMM_DEAF)) - { - chprintln(ch, "You can now hear tells again."); - REMOVE_BIT(ch->comm, COMM_DEAF); - } - else - { - chprintln(ch, "From now on, you won't hear tells."); - SET_BIT(ch->comm, COMM_DEAF); - } + set_on_off(ch, &ch->comm, COMM_DEAF, + "From now on, you won't hear tells.", + "You can now hear tells again."); } /* RT quiet blocks out all communication */ CH_CMD(do_quiet) { - if (IS_SET(ch->comm, COMM_QUIET)) - { - chprintln(ch, "Quiet mode removed."); - REMOVE_BIT(ch->comm, COMM_QUIET); - } - else - { - chprintln(ch, "From now on, you will only hear says and emotes."); - SET_BIT(ch->comm, COMM_QUIET); - } + set_on_off(ch, &ch->comm, COMM_QUIET, + "From now on, you will only hear says and emotes.", + "Quiet mode removed."); } /* afk command */ @@ -746,16 +669,8 @@ if (argument[0] == '\0') { - if (IS_SET(ch->comm, COMM_SHOUTSOFF)) - { - chprintln(ch, "You can hear shouts again."); - REMOVE_BIT(ch->comm, COMM_SHOUTSOFF); - } - else - { - chprintln(ch, "You will no longer hear shouts."); - SET_BIT(ch->comm, COMM_SHOUTSOFF); - } + set_on_off(ch, &ch->comm, COMM_SHOUTSOFF, "You can hear shouts again.", + "You will no longer hear shouts."); return; } @@ -1926,7 +1841,7 @@ va_list args; va_start(args, message); - vsnprintf(buf2, MSL, message, args); + vsnprintf(buf2, sizeof(buf2), message, args); va_end(args); if (ch && IS_SET(bit, INFO_PRIVATE)) @@ -2004,7 +1919,7 @@ return; } - if ((iValue = flag_value(info_flags, argument)) > 0) + if ((iValue = flag_value(info_flags, argument)) != NO_FLAG) { TOGGLE_BIT(ch->info_settings, iValue); chprintln(ch, "Info channel set."); diff -ur src/act_info.c new/act_info.c --- src/act_info.c Wed Apr 9 23:26:58 2003 +++ new/act_info.c Wed Apr 23 00:11:35 2003 @@ -172,7 +172,7 @@ */ for (iShow = nShow - 1; iShow >= 0; iShow--) { - if (!strcmp(prgpstrShow[iShow], pstrShow)) + if (!str_cmp(prgpstrShow[iShow], pstrShow)) { prgnShow[iShow]++; fCombine = TRUE; @@ -646,89 +646,39 @@ if (IS_NPC(ch)) return; - chprintln(ch, " action status"); - chprintln(ch, "---------------------"); + chprintlnf(ch, " %-9s %-6s{w %s", "Command", "Status", "Description"); + chprintln(ch, draw_line(ch, NULL, 0)); - chprint(ch, "automap "); - if (IS_SET(ch->act, PLR_AUTOMAP)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "autodamage "); - if (IS_SET(ch->act, PLR_AUTODAMAGE)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "autoassist "); - if (IS_SET(ch->act, PLR_AUTOASSIST)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "autoexit "); - if (IS_SET(ch->act, PLR_AUTOEXIT)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "autogold "); - if (IS_SET(ch->act, PLR_AUTOGOLD)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "autoloot "); - if (IS_SET(ch->act, PLR_AUTOLOOT)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "autosac "); - if (IS_SET(ch->act, PLR_AUTOSAC)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "autosplit "); - if (IS_SET(ch->act, PLR_AUTOSPLIT)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); + print_on_off(ch, IS_SET(ch->act, PLR_AUTOMAP), "automap", + "Map in Room Descriptions"); + print_on_off(ch, IS_SET(ch->act, PLR_AUTODAMAGE), "autodamage", + "Displays damage amounts in combat."); + print_on_off(ch, IS_SET(ch->act, PLR_AUTOASSIST), "autoassist", + "Automatically assists group members."); + print_on_off(ch, IS_SET(ch->act, PLR_AUTOEXIT), "autoexit", + "Displays exits in room descriptions."); + print_on_off(ch, IS_SET(ch->act, PLR_AUTOGOLD), "autogold", + "Automatically loots gold from corpses."); + print_on_off(ch, IS_SET(ch->act, PLR_AUTOLOOT), "autoloot", + "Automatically loots objects from corpses."); + print_on_off(ch, IS_SET(ch->act, PLR_AUTOSAC), "autosac", + "Automatically sacrifices corpses."); + print_on_off(ch, IS_SET(ch->act, PLR_AUTOSPLIT), "autosplit", + "Automatically splits gold between group members."); + print_on_off(ch, IS_SET(ch->comm, COMM_COMPACT), "compact", + "Compacts mud output."); + print_on_off(ch, IS_SET(ch->comm, COMM_PROMPT), "prompt", + "Displays prompt information."); + print_on_off(ch, IS_SET(ch->comm, COMM_COMBINE), "combine", + "Combines duplicate objects in display."); + print_on_off(ch, !IS_SET(ch->act, PLR_CANLOOT), "noloot", + "Sets players unable to loot your corpse."); + print_on_off(ch, IS_SET(ch->act, PLR_NOSUMMON), "nosummon", + "Sets you unable to be summoned."); + print_on_off(ch, IS_SET(ch->act, PLR_NOFOLLOW), "nofollow", + "Stops others from following you."); - chprint(ch, "compact mode "); - if (IS_SET(ch->comm, COMM_COMPACT)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "prompt "); - if (IS_SET(ch->comm, COMM_PROMPT)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - chprint(ch, "combine items "); - if (IS_SET(ch->comm, COMM_COMBINE)) - chprintln(ch, "ON"); - else - chprintln(ch, "OFF"); - - if (!IS_SET(ch->act, PLR_CANLOOT)) - chprintln(ch, "Your corpse is safe from thieves."); - else - chprintln(ch, "Your corpse may be looted."); - - if (IS_SET(ch->act, PLR_NOSUMMON)) - chprintln(ch, "You cannot be summoned."); - else - chprintln(ch, "You can be summoned."); - - if (IS_SET(ch->act, PLR_NOFOLLOW)) - chprintln(ch, "You do not welcome followers."); - else - chprintln(ch, "You accept followers."); + chprintln(ch, draw_line(ch, NULL, 0)); } CH_CMD(do_autoassist) @@ -736,16 +686,9 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_AUTOASSIST)) - { - chprintln(ch, "Autoassist removed."); - REMOVE_BIT(ch->act, PLR_AUTOASSIST); - } - else - { - chprintln(ch, "You will now assist when needed."); - SET_BIT(ch->act, PLR_AUTOASSIST); - } + set_on_off(ch, &ch->act, PLR_AUTOASSIST, + "You now assist group members in combat.", + "You no longer assist group members in combat."); } CH_CMD(do_autodamage) @@ -753,16 +696,9 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_AUTODAMAGE)) - { - chprintln(ch, "You no longer see damage amounts."); - REMOVE_BIT(ch->act, PLR_AUTODAMAGE); - } - else - { - chprintln(ch, "You now see damage amounts."); - SET_BIT(ch->act, PLR_AUTODAMAGE); - } + set_on_off(ch, &ch->act, PLR_AUTODAMAGE, + "You now see damage amounts in combat.", + "You no longer see damage amounts in combat."); } CH_CMD(do_autoexit) @@ -770,16 +706,8 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_AUTOEXIT)) - { - chprintln(ch, "Exits will no longer be displayed."); - REMOVE_BIT(ch->act, PLR_AUTOEXIT); - } - else - { - chprintln(ch, "Exits will now be displayed."); - SET_BIT(ch->act, PLR_AUTOEXIT); - } + set_on_off(ch, &ch->act, PLR_AUTOEXIT, "Exits will now be displayed.", + "Exits will no longer be displayed."); } CH_CMD(do_autogold) @@ -787,16 +715,9 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_AUTOGOLD)) - { - chprintln(ch, "Autogold removed."); - REMOVE_BIT(ch->act, PLR_AUTOGOLD); - } - else - { - chprintln(ch, "Automatic gold looting set."); - SET_BIT(ch->act, PLR_AUTOGOLD); - } + set_on_off(ch, &ch->act, PLR_AUTOGOLD, + "You now loot gold from corpses automatically.", + "You no longer loot gold from corpses automatically."); } CH_CMD(do_autoloot) @@ -804,16 +725,9 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_AUTOLOOT)) - { - chprintln(ch, "Autolooting removed."); - REMOVE_BIT(ch->act, PLR_AUTOLOOT); - } - else - { - chprintln(ch, "Automatic corpse looting set."); - SET_BIT(ch->act, PLR_AUTOLOOT); - } + set_on_off(ch, &ch->act, PLR_AUTOLOOT, + "You now loot objects from corpses automatically.", + "You no longer loot objects from corpses automatically."); } CH_CMD(do_autosac) @@ -821,16 +735,9 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_AUTOSAC)) - { - chprintln(ch, "Autosacrificing removed."); - REMOVE_BIT(ch->act, PLR_AUTOSAC); - } - else - { - chprintln(ch, "Automatic corpse sacrificing set."); - SET_BIT(ch->act, PLR_AUTOSAC); - } + set_on_off(ch, &ch->act, PLR_AUTOSAC, + "You now sacrifice corpses automatically.", + "You no longer automatically sacrifice corpses."); } CH_CMD(do_autosplit) @@ -838,58 +745,29 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_AUTOSPLIT)) - { - chprintln(ch, "Autosplitting removed."); - REMOVE_BIT(ch->act, PLR_AUTOSPLIT); - } - else - { - chprintln(ch, "Automatic gold splitting set."); - SET_BIT(ch->act, PLR_AUTOSPLIT); - } + set_on_off(ch, &ch->act, PLR_AUTOSPLIT, + "You now split gold with group members.", + "You no longer split gold with group members."); } CH_CMD(do_brief) { - if (IS_SET(ch->comm, COMM_BRIEF)) - { - chprintln(ch, "Full descriptions activated."); - REMOVE_BIT(ch->comm, COMM_BRIEF); - } - else - { - chprintln(ch, "Short descriptions activated."); - SET_BIT(ch->comm, COMM_BRIEF); - } + set_on_off(ch, &ch->comm, COMM_BRIEF, + "You no longer see room descriptions.", + "You now see room descriptions."); } CH_CMD(do_compact) { - if (IS_SET(ch->comm, COMM_COMPACT)) - { - chprintln(ch, "Compact mode removed."); - REMOVE_BIT(ch->comm, COMM_COMPACT); - } - else - { - chprintln(ch, "Compact mode set."); - SET_BIT(ch->comm, COMM_COMPACT); - } + set_on_off(ch, &ch->comm, COMM_COMPACT, "Compact mode set.", + "Compact mode removed."); } CH_CMD(do_show) { - if (IS_SET(ch->comm, COMM_SHOW_AFFECTS)) - { - chprintln(ch, "Affects will no longer be shown in score."); - REMOVE_BIT(ch->comm, COMM_SHOW_AFFECTS); - } - else - { - chprintln(ch, "Affects will now be shown in score."); - SET_BIT(ch->comm, COMM_SHOW_AFFECTS); - } + set_on_off(ch, &ch->comm, COMM_SHOW_AFFECTS, + "Affects will now be shown in score.", + "Affects will no longer be shown in score."); } CH_CMD(do_prompt) @@ -898,20 +776,12 @@ if (argument[0] == '\0') { - if (IS_SET(ch->comm, COMM_PROMPT)) - { - chprintln(ch, "You will no longer see prompts."); - REMOVE_BIT(ch->comm, COMM_PROMPT); - } - else - { - chprintln(ch, "You will now see prompts."); - SET_BIT(ch->comm, COMM_PROMPT); - } + set_on_off(ch, &ch->comm, COMM_PROMPT, "You will now see prompts.", + "You will no longer see prompts."); return; } - if (!strcmp(argument, "all")) + if (!str_cmp(argument, "all")) strcpy(buf, "<%hhp %mm %vmv> "); else { @@ -932,16 +802,8 @@ CH_CMD(do_combine) { - if (IS_SET(ch->comm, COMM_COMBINE)) - { - chprintln(ch, "Long inventory selected."); - REMOVE_BIT(ch->comm, COMM_COMBINE); - } - else - { - chprintln(ch, "Combined inventory selected."); - SET_BIT(ch->comm, COMM_COMBINE); - } + set_on_off(ch, &ch->comm, COMM_COMBINE, "Combined inventory selected.", + "Long inventory selected."); } CH_CMD(do_noloot) @@ -949,16 +811,9 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_CANLOOT)) - { - chprintln(ch, "Your corpse is now safe from thieves."); - REMOVE_BIT(ch->act, PLR_CANLOOT); - } - else - { - chprintln(ch, "Your corpse may now be looted."); - SET_BIT(ch->act, PLR_CANLOOT); - } + set_on_off(ch, &ch->act, PLR_CANLOOT, + "Other players can now loot your corpse.", + "Other players can no longer loot your corpse."); } CH_CMD(do_nofollow) @@ -966,47 +821,97 @@ if (IS_NPC(ch)) return; + set_on_off(ch, &ch->act, PLR_NOFOLLOW, "You no longer accept followers.", + "You accept followers once again."); + if (IS_SET(ch->act, PLR_NOFOLLOW)) - { - chprintln(ch, "You now accept followers."); - REMOVE_BIT(ch->act, PLR_NOFOLLOW); - } - else - { - chprintln(ch, "You no longer accept followers."); - SET_BIT(ch->act, PLR_NOFOLLOW); die_follower(ch); - } } CH_CMD(do_nosummon) { if (IS_NPC(ch)) { - if (IS_SET(ch->imm_flags, IMM_SUMMON)) - { - chprintln(ch, "You are no longer immune to summon."); - REMOVE_BIT(ch->imm_flags, IMM_SUMMON); - } - else - { - chprintln(ch, "You are now immune to summoning."); - SET_BIT(ch->imm_flags, IMM_SUMMON); - } + set_on_off(ch, &ch->imm_flags, IMM_SUMMON, + "You are now immune to summoning.", + "You can be summoned once again."); } else { - if (IS_SET(ch->act, PLR_NOSUMMON)) + set_on_off(ch, &ch->act, PLR_NOSUMMON, + "You are now immune to summoning.", + "You can be summoned once again."); + } +} + +bool is_last_run(CHAR_DATA * ch) +{ + if (IS_NPC(ch)) + return TRUE; + + if (!ch->desc) + return TRUE; + + if (!ch->desc->run_buf) + return TRUE; + + if (IS_NULLSTR(ch->desc->run_head)) + return TRUE; + + if (tolower(ch->desc->run_head[0]) == 'o' + && strlen(ch->desc->run_head) <= 2) + return TRUE; + + if (ch->desc->run_head[0] == '0' && strlen(ch->desc->run_head) <= 2) + return TRUE; + + return FALSE; +} + +unsigned int get_line args((char *desc, unsigned int max_len)); +void reformat_desc args((char *desc)); + +void show_desc(CHAR_DATA * ch, const char *desc) +{ + static char buf[MSL * 2]; + static char out[MSL * 2]; + int width; + unsigned int pos; + char *p; + bool alldesc = FALSE; + + width = 78; + + if (ch->desc != NULL && ch->desc->scr_width > 0) + width = ch->desc->scr_width - 2; + + sprintf(buf, "%s", desc); + reformat_desc(buf); + + p = &buf[0]; + pos = 0; + + out[0] = '\0'; + + do + { + pos = get_line(p, width); + if (pos > 0) { - chprintln(ch, "You are no longer immune to summon."); - REMOVE_BIT(ch->act, PLR_NOSUMMON); + strncat(out, p, pos); + p += pos; } else { - chprintln(ch, "You are now immune to summoning."); - SET_BIT(ch->act, PLR_NOSUMMON); + strcat(out, p); + alldesc = TRUE; } + strcat(out, "\n\r"); } + while (!alldesc); + + chprint(ch, out); + return; } CH_CMD(do_look) @@ -1062,25 +967,31 @@ (IS_NPC(ch) || IS_SET(ch->act, PLR_HOLYLIGHT))) || IS_BUILDER(ch, ch->in_room->area)) { - chprintf(ch, " [Room {R%ld" CTAG(_RTITLE) "]{x", ch->in_room->vnum); + chprintf(ch, " [Room {R%ld" CTAG(_RTITLE) "]", ch->in_room->vnum); } chprintln(ch, "{x"); if (arg1[0] == '\0' || (!IS_NPC(ch) && !IS_SET(ch->comm, COMM_BRIEF))) { - if (IS_NPC(ch) || (ch->desc && !ch->desc->run_buf)) + if (is_last_run(ch)) { if (!IS_SET(ch->in_room->room_flags, ROOM_NOAUTOMAP) - && IS_SET(ch->act, PLR_AUTOMAP)) + && !IS_NPC(ch) && IS_SET(ch->act, PLR_AUTOMAP)) { - draw_map(ch, ch->in_room->description); + sprintf(buf, "%s%s{x", + get_sector_color(ch->in_room->sector_type), + IS_NULLSTR(ch->in_room->description) ? + "No room description!" : ch->in_room->description); + draw_map(ch, buf); } else { - chprintf(ch, "%s %s", - get_sector_color(ch->in_room->sector_type), - ch->in_room->description); + sprintf(buf, "%s%s{x", + get_sector_color(ch->in_room->sector_type), + IS_NULLSTR(ch->in_room->description) ? + "No room description!" : ch->in_room->description); + show_desc(ch, buf); } } } @@ -1894,16 +1805,16 @@ } if (++count == number) { - add_buf(buffer, draw_line("{m-{M-", 0)); + add_buf(buffer, draw_line(ch, "{m-{M-", 0)); sprintf(buf, "\n\rHelp Keywords : %s\n\r", pHelp->keyword); add_buf(buffer, buf); - add_buf(buffer, draw_line("{m-{M-", 0)); + add_buf(buffer, draw_line(ch, "{m-{M-", 0)); add_buf(buffer, "\n\r"); if (pHelp->text[0] == '.') add_buf(buffer, pHelp->text + 1); else add_buf(buffer, pHelp->text); - add_buf(buffer, draw_line("{m-{M-", 0)); + add_buf(buffer, draw_line(ch, "{m-{M-", 0)); add_buf(buffer, "\n\r"); found = TRUE; } @@ -1923,10 +1834,10 @@ sprintf(buf, "Help files that start with the letter '%s'.\n\r", argall2); add_buf(buffer, buf); - add_buf(buffer, draw_line("{m-{M-", 0)); + add_buf(buffer, draw_line(ch, "{m-{M-", 0)); add_buf(buffer, "\n\r"); add_buf(buffer, text); - add_buf(buffer, draw_line("{m-{M-", 0)); + add_buf(buffer, draw_line(ch, "{m-{M-", 0)); sprintf(buf, "\n\r%d total help files.\n\r", counter); add_buf(buffer, buf); free_string(text); @@ -1947,7 +1858,7 @@ related->string[strlen(related->string) - 2] = '.'; related->string[strlen(related->string) - 1] = '\0'; sprintf(buf, "See Also : %s\n\r%s\n\r", buf_string(related), - draw_line("{m-{M-", 0)); + draw_line(ch, "{m-{M-", 0)); add_buf(buffer, buf); } page_to_char(buf_string(buffer), ch); @@ -2083,7 +1994,7 @@ */ if (wch->pcdata->who_descr[0] != '\0' && wch->pcdata->who_descr != NULL) sprintf(block, "[%s] ", - stringf(14, ALIGN_CENTER, NULL, wch->pcdata->who_descr)); + stringf(ch, 14, ALIGN_CENTER, NULL, wch->pcdata->who_descr)); else sprintf(block, "[" CTAG(_WLEVEL) "%03d " CTAG(_WRACE) "%6s " CTAG(_WCLASS) @@ -2376,7 +2287,7 @@ nMatch = 0; buf[0] = '\0'; output = new_buf(); - add_buf(output, draw_line("{r-{R-", 0)); + add_buf(output, draw_line(ch, "{r-{R-", 0)); add_buf(output, "\n\r"); for (d = descriptor_first; d != NULL; d = d->next) { @@ -2437,14 +2348,14 @@ if (j1 == (immcount - imminvis - 1) && j1 != (nMatch - 1) && IS_IMMORTAL(wch)) { - add_buf(output, draw_line("{r-{R-", 0)); + add_buf(output, draw_line(ch, "{r-{R-", 0)); add_buf(output, "\n\r"); } } free_mem(charitems); - add_buf(output, draw_line("{r-{R-", 0)); + add_buf(output, draw_line(ch, "{r-{R-", 0)); add_buf(output, "\n\r"); if (searched) @@ -3078,7 +2989,7 @@ return; } - if (strcmp(crypt(arg1, ch->pcdata->pwd), ch->pcdata->pwd)) + if (str_casecmp(crypt(arg1, ch->pcdata->pwd), ch->pcdata->pwd)) { WAIT_STATE(ch, 40); chprintln(ch, "Wrong password. Wait 10 seconds."); @@ -3109,4 +3020,36 @@ save_char_obj(ch); chprintln(ch, "Ok."); return; +} + +void print_on_off(CHAR_DATA * ch, bool is_set, const char *cmd, + const char *desc) +{ + const char *on = "{WON"; + const char *off = "{DOFF"; + + if (!IS_NULLSTR(desc)) + { + chprintlnf(ch, " {G%-11s %-6s{w %s{x", cmd, is_set ? on : off, desc); + } + else + { + chprintf(ch, " {G%-11s %-6s{x ", cmd, is_set ? on : off); + } + return; +} + +void set_on_off(CHAR_DATA * ch, flag_t * flags, flag_t flag, const char *on, + const char *off) +{ + if (IS_SET(*flags, flag)) + { + REMOVE_BIT(*flags, flag); + chprintln(ch, off); + } + else + { + SET_BIT(*flags, flag); + chprintln(ch, on); + } } diff -ur src/act_obj.c new/act_obj.c --- src/act_obj.c Wed Apr 9 23:26:58 2003 +++ new/act_obj.c Wed Apr 23 00:11:35 2003 @@ -44,7 +44,6 @@ bool remove_obj args((CHAR_DATA * ch, int iWear, bool fReplace)); CD *find_keeper args((CHAR_DATA * ch)); int get_cost args((CHAR_DATA * keeper, OBJ_DATA * obj, bool fBuy)); -void obj_to_keeper args((OBJ_DATA * obj, CHAR_DATA * ch)); OD *get_obj_keeper args((CHAR_DATA * ch, CHAR_DATA * keeper, char *argument)); #undef OD @@ -2416,47 +2415,6 @@ return keeper; } -/* insert an object at the right spot for the keeper */ -void obj_to_keeper(OBJ_DATA * obj, CHAR_DATA * ch) -{ - OBJ_DATA *t_obj, *t_obj_next; - - /* see if any duplicates are found */ - for (t_obj = ch->first_carrying; t_obj != NULL; t_obj = t_obj_next) - { - t_obj_next = t_obj->next_content; - - if (obj->pIndexData == t_obj->pIndexData && - !str_cmp(obj->short_descr, t_obj->short_descr)) - { - /* if this is an unlimited item, destroy the new one */ - if (IS_OBJ_STAT(t_obj, ITEM_INVENTORY)) - { - extract_obj(obj); - return; - } - obj->cost = t_obj->cost; /* keep it standard */ - break; - } - } - - if (t_obj == NULL) - { - LINK(obj, ch->first_carrying, ch->last_carrying, next_content, - prev_content); - } - else - { - INSERT(obj, t_obj, ch->first_carrying, next_content, prev_content); - } - - obj->carried_by = ch; - obj->in_room = NULL; - obj->in_obj = NULL; - ch->carry_number += get_obj_number(obj); - ch->carry_weight += get_obj_weight(obj); -} - /* get an object from a shopkeeper's list */ OBJ_DATA *get_obj_keeper(CHAR_DATA * ch, CHAR_DATA * keeper, char *argument) { @@ -2959,7 +2917,7 @@ SET_BIT(obj->extra_flags, ITEM_HAD_TIMER); else obj->timer = number_range(50, 100); - obj_to_keeper(obj, keeper); + obj_to_char(obj, keeper); } return; diff -ur src/act_wiz.c new/act_wiz.c --- src/act_wiz.c Wed Apr 9 23:26:58 2003 +++ new/act_wiz.c Wed Apr 23 00:11:35 2003 @@ -56,80 +56,84 @@ CH_CMD(do_wiznet) { - int flag; - char buf[MAX_STRING_LENGTH]; + int flag, col; + char arg[MIL]; - if (argument[0] == '\0') + col = 0; + + argument = one_argument(argument, arg); + + if (arg[0] == '\0') { - if (IS_SET(ch->wiznet, WIZ_ON)) - { - chprintln(ch, "Signing off of Wiznet."); - REMOVE_BIT(ch->wiznet, WIZ_ON); - } - else + chprintln(ch, stringf + (ch, 0, ALIGN_CENTER, "-", + "{W[ " CTAG(_WIZNET) "WIZNET STATUS {W]{x")); + + for (flag = 0; wiznet_table[flag].name != NULL; flag++) { - chprintln(ch, "Welcome to Wiznet!"); - SET_BIT(ch->wiznet, WIZ_ON); + if (wiznet_table[flag].level <= get_trust(ch)) + { + print_on_off(ch, + IS_SET(ch->wiznet, wiznet_table[flag].flag), + wiznet_table[flag].name, NULL); + col++; + if (col == 4) + { + chprintln(ch, ""); + col = 0; + } + } } + if (col != 0) + chprintln(ch, ""); + chprintln(ch, draw_line(ch, NULL, 0)); return; } - if (!str_prefix(argument, "on")) + if (!str_prefix(arg, "on")) { - chprintln(ch, "Welcome to Wiznet!"); + chprintln(ch, "" CTAG(_WIZNET) "Welcome to Wiznet!{x"); SET_BIT(ch->wiznet, WIZ_ON); return; } - if (!str_prefix(argument, "off")) + if (!str_prefix(arg, "off")) { - chprintln(ch, "Signing off of Wiznet."); + chprintln(ch, "" CTAG(_WIZNET) "Signing off of Wiznet.{x"); REMOVE_BIT(ch->wiznet, WIZ_ON); return; } - /* show wiznet status */ - if (!str_prefix(argument, "status")) + if (!str_prefix(arg, "all")) { - buf[0] = '\0'; - - if (!IS_SET(ch->wiznet, WIZ_ON)) - strcat(buf, "off "); - - for (flag = 0; wiznet_table[flag].name != NULL; flag++) - if (IS_SET(ch->wiznet, wiznet_table[flag].flag)) + if (!str_prefix(argument, "on")) + { + for (flag = 0; wiznet_table[flag].name != NULL; flag++) { - strcat(buf, wiznet_table[flag].name); - strcat(buf, " "); + if (get_trust(ch) >= wiznet_table[flag].level + && !IS_SET(ch->wiznet, wiznet_table[flag].flag)) + SET_BIT(ch->wiznet, wiznet_table[flag].flag); } - - strcat(buf, "\n\r"); - - chprintln(ch, "Wiznet status:"); - chprint(ch, buf); - return; - } - - if (!str_prefix(argument, "show")) - /* list of all wiznet options */ - { - buf[0] = '\0'; - - for (flag = 0; wiznet_table[flag].name != NULL; flag++) + chprintln(ch, "" CTAG(_WIZNET) + "All available wiznet flags turned on.{x"); + return; + } + if (!str_prefix(argument, "off")) { - if (wiznet_table[flag].level <= get_trust(ch)) + for (flag = 0; wiznet_table[flag].name != NULL; flag++) { - strcat(buf, wiznet_table[flag].name); - strcat(buf, " "); + if (get_trust(ch) >= wiznet_table[flag].level + && IS_SET(ch->wiznet, wiznet_table[flag].flag)) + REMOVE_BIT(ch->wiznet, wiznet_table[flag].flag); } + chprintln(ch, "" CTAG(_WIZNET) + "All available wiznet flags turned off.{x"); + return; } - - chprintln(ch, "Wiznet options available to you are:"); - chprintln(ch, buf); + chprintln(ch, "Syntax: wiznet all on/off"); return; } - - flag = wiznet_lookup(argument); + flag = wiznet_lookup(arg); if (flag == 0 || get_trust(ch) < wiznet_table[flag].level) { @@ -137,21 +141,11 @@ return; } - if (IS_SET(ch->wiznet, wiznet_table[flag].flag)) - { - chprintlnf(ch, "You will no longer see %s on wiznet.", - wiznet_table[flag].name); - REMOVE_BIT(ch->wiznet, wiznet_table[flag].flag); - return; - } - else - { - chprintlnf(ch, "You will now see %s on wiznet.", - wiznet_table[flag].name); - SET_BIT(ch->wiznet, wiznet_table[flag].flag); - return; - } - + set_on_off(ch, &ch->wiznet, wiznet_table[flag].flag, + FORMATF("" CTAG(_WIZNET) "You will now see {W%s" CTAG(_WIZNET) + " on wiznet.{x", wiznet_table[flag].name), + FORMATF("" CTAG(_WIZNET) "You will no longer see {W%s" + CTAG(_WIZNET) " on wiznet.{x", wiznet_table[flag].name)); } void wiznet(char *string, CHAR_DATA * ch, OBJ_DATA * obj, flag_t flag, @@ -169,9 +163,8 @@ && (!flag_skip || !IS_SET(d->character->wiznet, flag_skip)) && get_trust(d->character) >= min_level && d->character != ch) { - chprint(d->character, CTAG(_WIZNET)); if (IS_SET(d->character->wiznet, WIZ_PREFIX)) - chprint(d->character, "--> "); + chprint(d->character, CTAG(_WIZNET) "--> "); act_new(string, d->character, obj, ch, TO_CHAR, POS_DEAD); } } diff -ur src/alias.c new/alias.c --- src/alias.c Wed Apr 9 23:26:58 2003 +++ new/alias.c Wed Apr 23 00:11:35 2003 @@ -74,7 +74,7 @@ if (!str_prefix(ch->pcdata->alias[alias], argument)) { point = one_argument(argument, name); - if (!strcmp(ch->pcdata->alias[alias], name)) + if (!str_cmp(ch->pcdata->alias[alias], name)) { buf[0] = '\0'; strcat(buf, ch->pcdata->alias_sub[alias]); @@ -235,7 +235,7 @@ continue; } - if (!strcmp(arg, rch->pcdata->alias[pos])) + if (!str_cmp(arg, rch->pcdata->alias[pos])) { chprintln(ch, "Alias removed."); free_string(rch->pcdata->alias[pos]); diff -ur src/arena.c new/arena.c --- src/arena.c Wed Apr 9 23:26:58 2003 +++ new/arena.c Wed Apr 23 00:11:35 2003 @@ -79,9 +79,8 @@ chprintlnf (ch, "You have already been challenged, either ACCEPT or DECLINE %s first.", - ch->pcdata->challenger ? ch->pcdata->challenger-> - name : ch->pcdata->challenged ? ch->pcdata->challenged-> - name : "!BUG!"); + ch->pcdata->challenger ? ch->pcdata->challenger->name : ch-> + pcdata->challenged ? ch->pcdata->challenged->name : "!BUG!"); return; } diff -ur src/auction.c new/auction.c --- src/auction.c Wed Apr 9 23:26:58 2003 +++ new/auction.c Wed Apr 23 00:11:35 2003 @@ -237,9 +237,9 @@ reset_auc(auc, TRUE); } else if ((unsigned long) (!IS_OBJ_STAT(auc->item, ITEM_QUEST) - ? auc->high_bidder->gold : auc-> - high_bidder->pcdata->questpoints) < - auc->bid) + ? auc->high_bidder-> + gold : auc->high_bidder->pcdata-> + questpoints) < auc->bid) { announce(auc->high_bidder, INFO_AUCTION, "$n can't cover their stake in the auction, sale stopped."); @@ -511,10 +511,11 @@ chprintlnf(ch, "{R%3d{x - %-12s %34s %3d {R%11ld%-2s{G %4d{x", auc->number, auc->owner->name, - stringf(34, ALIGN_LEFT, NULL, auc->item->short_descr), - auc->item->level, auc->bid, IS_OBJ_STAT(auc->item, - ITEM_QUEST) ? - "qp" : "g ", auc->status); + stringf(ch, 34, ALIGN_LEFT, NULL, + auc->item->short_descr), auc->item->level, + auc->bid, IS_OBJ_STAT(auc->item, + ITEM_QUEST) ? "qp" : "g ", + auc->status); } chprintln(ch, "{W-----------------------------------------------------------------------------{x"); diff -ur src/automap.c new/automap.c --- src/automap.c Wed Apr 9 23:26:58 2003 +++ new/automap.c Wed Apr 23 00:11:35 2003 @@ -34,13 +34,15 @@ #include "merc.h" char map_chars[5] = "|-|-"; +char map_chars_closed[5] = "I>I<"; char lcolor = 'x'; +int depth = 0; #define MAXDEPTH 4 #define MAPX 10 #define MAPY 8 #define BOUNDARY(x, y) (((x) < 0) || ((y) < 0) || \ -((x) > MAPX) || ((y) > MAPY)) +((x) > (MAPX * 2)) || ((y) > (MAPY * 2))) \ struct map_type { @@ -52,7 +54,7 @@ typedef struct map_type MAP_DATA; -MAP_DATA map[MAPX + 1][MAPY + 1]; +MAP_DATA map[(MAPX * 2) + 1][(MAPY * 2) + 1]; void get_exit_dir(int dir, int *x, int *y, int xorig, int yorig) { @@ -83,7 +85,7 @@ void clear_coord(int x, int y) { - map[x][y].symbol = ' '; + map[x][y].symbol = '.'; map[x][y].vnum = 0; map[x][y].depth = 0; map[x][y].pRoom = NULL; @@ -145,7 +147,7 @@ return (sector_color_table[looper].display_symbol); } -void map_exits(CHAR_DATA * ch, ROOM_INDEX_DATA * pRoom, int x, int y, int depth) +void map_exits(CHAR_DATA * ch, ROOM_INDEX_DATA * pRoom, int x, int y) { int door; int exitx = 0, exity = 0; @@ -193,7 +195,10 @@ map[exitx][exity].depth = depth; map[exitx][exity].vnum = pExit->u1.to_room->vnum; - map[exitx][exity].symbol = map_chars[door]; + if (IS_SET(pExit->exit_info, EX_CLOSED)) + map[exitx][exity].symbol = map_chars_closed[door]; + else + map[exitx][exity].symbol = map_chars[door]; map[exitx][exity].pRoom = pExit->u1.to_room; if ((depth < MAXDEPTH) @@ -201,7 +206,7 @@ || (map[roomx][roomy].vnum == 0))) { depth++; - map_exits(ch, pExit->u1.to_room, roomx, roomy, depth + 1); + map_exits(ch, pExit->u1.to_room, roomx, roomy); depth--; } } @@ -286,64 +291,78 @@ return l + 1; } -void show_map(CHAR_DATA * ch, char *text) +void show_map(CHAR_DATA * ch, char *text, bool fSmall) { char buf[MSL * 2]; - int x, y, pos; + int x, y, m, n, pos; char *p; bool alldesc = FALSE; - int rcnt = areacount(ch); - double rooms = (double) (arearooms(ch)); - double percent = (double) rcnt / (rooms / 100); + int rcnt = areacount(ch, ch->in_room->area); + double rooms = (double) (arearooms(ch->in_room->area)); + double percent = UMIN((double) rcnt / (rooms / 100), 100); int maxlen = (ch->desc && ch->desc->scr_width > 0) ? ch->desc->scr_width - 2 : 78; int maplen = maxlen - 15; - if (IS_NULLSTR(text)) - alldesc = TRUE; - + if (fSmall) + { + m = 4; + n = 5; + } + else + { + m = 0; + n = 0; + } pos = 0; p = text; buf[0] = '\0'; lcolor = 'x'; - if (IS_NPC(ch) || IS_SET(ch->in_room->room_flags, ROOM_NOEXPLORE)) - sprintf(buf, "{R+------------+{%c ", lcolor); - else - sprintf(buf, "{R+-----[{x%3.0f%%{R]+{%c ", percent, lcolor); - - if (!alldesc) + if (fSmall) { - pos = get_line(p, maplen); - if (pos > 0) - { - strncat(buf, p, pos); - p += pos; - } + + if (IS_NPC(ch) || IS_SET(ch->in_room->room_flags, ROOM_NOEXPLORE)) + sprintf(buf, "{R+------------+{%c ", lcolor); else + sprintf(buf, "{R+-----[{x%3.0f%%{R]+{%c ", percent, lcolor); + + if (!alldesc) { - strcat(buf, p); - alldesc = TRUE; + pos = get_line(p, maplen); + if (pos > 0) + { + strncat(buf, p, pos); + p += pos; + } + else + { + strcat(buf, p); + alldesc = TRUE; + } } + strcat(buf, "\n\r"); } - strcat(buf, "\n\r"); - for (y = 0; y <= MAPY; y++) + for (y = m; y <= (MAPY * 2) - m; y++) { - strcat(buf, "{R|{x"); + if (fSmall) + strcat(buf, "{R|{x"); + else + strcat(buf, "{D"); - for (x = 0; x <= MAPX; x++) + for (x = n; x <= (MAPX * 2) - n; x++) { if (map[x][y].pRoom) { if (map[x][y].symbol == get_sector_symbol(map[x][y].pRoom->sector_type) && !IS_NPC(ch) - && getbit(ch->pcdata->explored, map[x][y].pRoom->vnum)) + && STR_IS_SET(ch->pcdata->explored, map[x][y].pRoom->vnum)) { if (map[x][y].pRoom->exit[DIR_UP] && map[x][y].pRoom->exit[DIR_DOWN]) - map[x][y].symbol = 'O'; + map[x][y].symbol = 'B'; else if (!map[x][y].pRoom->exit[DIR_UP] && map[x][y].pRoom->exit[DIR_DOWN]) map[x][y].symbol = 'D'; @@ -351,56 +370,106 @@ && !map[x][y].pRoom->exit[DIR_DOWN]) map[x][y].symbol = 'U'; } - sprintf(buf + strlen(buf), "%s%c", - get_sector_color(map[x][y].pRoom->sector_type), - map[x][y].symbol); + if (!fSmall) + sprintf(buf + strlen(buf), " %s%c{D", + get_sector_color(map[x][y].pRoom->sector_type), + map[x][y].symbol); + else + sprintf(buf + strlen(buf), "%s%c", + get_sector_color(map[x][y].pRoom->sector_type), + map[x][y].symbol != '.' ? map[x][y].symbol : ' '); } else - strcat(buf, &map[x][y].symbol); - } - - strcat(buf, "{R| {"); - strcat(buf, &lcolor); - if (!alldesc) - { - pos = get_line(p, maplen); - if (pos > 0) { - strncat(buf, p, pos); - p += pos; - } - else - { - strcat(buf, p); - alldesc = TRUE; + if (!fSmall) + { + strcat(buf, " "); + strcat(buf, &map[x][y].symbol); + } + else + strcat(buf, + map[x][y].symbol != '.' ? &map[x][y].symbol : " "); } } - strcat(buf, "\n\r"); - } - strcat(buf, "{R+-----------+{"); - strcat(buf, &lcolor); - strcat(buf, " "); - - if (!alldesc) - { - pos = get_line(p, maplen); - if (pos > 0) + if (!fSmall) { - strncat(buf, p, pos); - p += pos; + switch (y) + { + case 0: + strcat(buf, " {xX You are here\n\r"); + break; + case 2: + strcat(buf, " {xo Normal Rooms\n\r"); + break; + case 3: + strcat(buf, " {xU Room with exit up\n\r"); + break; + case 4: + strcat(buf, " {xD Room with exit down\n\r"); + break; + case 5: + strcat(buf, " {xB Room with exits up & down\n\r"); + break; + case 6: + strcat(buf, " {x|- Exits\n\r"); + break; + case 7: + strcat(buf, " {x>I< Closed Doors\n\r"); + break; + case 8: + strcat(buf, " {x* Field/Forest/Hills\n\r"); + break; + case 9: + strcat(buf, " {x@ Mountain\n\r"); + break; + case 10: + strcat(buf, " {x= Water\n\r"); + break; + case 11: + strcat(buf, " {x~ Air\n\r"); + break; + case 12: + strcat(buf, " {x+ Desert\n\r"); + break; + default: + strcat(buf, " {x\n\r"); + break; + } } else { - strcat(buf, p); - alldesc = TRUE; + strcat(buf, "{R| {"); + strcat(buf, &lcolor); + if (!alldesc) + { + pos = get_line(p, maplen); + if (pos > 0) + { + strncat(buf, p, pos); + p += pos; + } + else + { + strcat(buf, p); + alldesc = TRUE; + } + } + strcat(buf, "\n\r"); } } - if (!alldesc) + if (!fSmall) + chprintlnf(ch, "%s\n\r%s%s", draw_line(ch, NULL, 0), buf, + draw_line(ch, NULL, 0)); + else { - do + strcat(buf, "{R+-----------+{"); + strcat(buf, &lcolor); + strcat(buf, " "); + + if (!alldesc) { - pos = get_line(p, maxlen); + pos = get_line(p, maplen); if (pos > 0) { strncat(buf, p, pos); @@ -412,38 +481,65 @@ alldesc = TRUE; } } - while (!alldesc); + + if (!alldesc) + { + do + { + pos = get_line(p, maxlen); + if (pos > 0) + { + strncat(buf, p, pos); + p += pos; + } + else + { + strcat(buf, p); + alldesc = TRUE; + } + } + while (!alldesc); + } + chprintln(ch, buf); } - chprintln(ch, buf); } void draw_map(CHAR_DATA * ch, const char *desc) { int x, y; static char buf[MSL]; + bool fSmall; - sprintf(buf, desc); + if (IS_NULLSTR(desc)) + fSmall = FALSE; + else + { + fSmall = TRUE; + sprintf(buf, desc); - reformat_desc(buf); + reformat_desc(buf); + } - for (y = 0; y <= MAPY; y++) + for (y = 0; y <= MAPY * 2; y++) { - for (x = 0; x <= MAPX; x++) + for (x = 0; x <= MAPX * 2; x++) { clear_coord(x, y); } } - x = MAPX / 2; - y = MAPY / 2; + x = MAPX; + y = MAPY; + + depth = (fSmall) ? 2 : 0; map[x][y].vnum = ch->in_room->vnum; - map[x][y].depth = 0; + map[x][y].depth = depth; - map_exits(ch, ch->in_room, x, y, 0); + map_exits(ch, ch->in_room, x, y); map[x][y].symbol = 'X'; - show_map(ch, buf); + show_map(ch, buf, fSmall); } CH_CMD(do_automap) @@ -451,14 +547,23 @@ if (IS_NPC(ch)) return; - if (IS_SET(ch->act, PLR_AUTOMAP)) - { - chprintln(ch, "Automap removed."); - REMOVE_BIT(ch->act, PLR_AUTOMAP); - } - else - { - chprintln(ch, "Automap on."); - SET_BIT(ch->act, PLR_AUTOMAP); - } + set_on_off(ch, &ch->act, PLR_AUTOMAP, + "You now see an automap in room descriptions.", + "You no longer see automap room descriptions."); +} + +bool check_blind args((CHAR_DATA * ch)); + +CH_CMD(do_map) +{ + if (IS_NPC(ch)) + return; + if (!ch->in_room) + return; + if (!check_blind(ch)) + return; + + draw_map(ch, NULL); + + return; } diff -ur src/bit.c new/bit.c --- src/bit.c Wed Apr 9 23:26:58 2003 +++ new/bit.c Wed Apr 23 00:11:35 2003 @@ -136,11 +136,12 @@ { const struct flag_type *f; flag_t marked; + bool found = FALSE; if (is_stat(flag_table)) { if ((f = flag_lookup(argument, flag_table)) == NULL) - return -1; + return NO_FLAG; return f->bit; } @@ -157,13 +158,17 @@ if (word[0] == '\0') break; - if ((f = flag_lookup(word, flag_table)) == NULL) - return 0; - - SET_BIT(marked, f->bit); + if ((f = flag_lookup(word, flag_table)) != NULL) + { + SET_BIT(marked, f->bit); + found = TRUE; + } } - return marked; + if (found) + return marked; + else + return NO_FLAG; } /***************************************************************************** diff -ur src/buddy.c new/buddy.c --- src/buddy.c Wed Apr 9 23:26:58 2003 +++ new/buddy.c Wed Apr 23 00:11:35 2003 @@ -43,7 +43,7 @@ return; } -void buddy_offline args((CHAR_DATA * ch, char *arg)); +void buddy_offline args((CHAR_DATA * ch, char *arg, int pos)); CH_CMD(do_buddy) { @@ -157,7 +157,7 @@ } if ((fch = get_char_world(ch, arg)) == NULL) { - buddy_offline(ch, arg); + buddy_offline(ch, arg, pos); return; } if (fch == ch) @@ -171,7 +171,7 @@ return; } - replace_string(ch->pcdata->buddies[pos], arg); + replace_string(ch->pcdata->buddies[pos], capitalize(arg)); if (check_buddy(fch, ch) == -1) chprintlnf(ch, "You are now a wannabe buddy of %s.", capitalize(ch->pcdata->buddies[pos])); @@ -187,9 +187,8 @@ } } -void buddy_offline(CHAR_DATA * ch, char *arg) +void buddy_offline(CHAR_DATA * ch, char *arg, int pos) { - int pos; char buf[MIL]; FILE *fp; bool exists; @@ -198,26 +197,6 @@ exists = ((fp = file_open(buf, "r")) != NULL) ? TRUE : FALSE; file_close(fp); - for (pos = 0; pos < MAX_BUDDY; pos++) - { - if (IS_NULLSTR(ch->pcdata->buddies[pos])) - break; - - if (!str_cmp(arg, ch->pcdata->buddies[pos])) - { - free_string(ch->pcdata->buddies[pos]); - ch->pcdata->buddies[pos] = NULL; - chprintlnf(ch, "You are no longer buddies with %s.", arg); - return; - } - } - - if (pos >= MAX_BUDDY) - { - chprintln(ch, "You can't buddy anymore people"); - return; - } - if (!exists) { chprintln(ch, "That character doesn't exist."); @@ -225,7 +204,8 @@ } replace_string(ch->pcdata->buddies[pos], capitalize(arg)); - chprintlnf(ch, "You are now buddies with %s.", capitalize(arg)); + chprintlnf(ch, "You are now buddies with %s, who is offline.", + capitalize(arg)); } int check_buddy(CHAR_DATA * ch, CHAR_DATA * fch) diff -ur src/clans.c new/clans.c --- src/clans.c Wed Apr 9 23:26:58 2003 +++ new/clans.c Wed Apr 23 00:11:35 2003 @@ -129,7 +129,7 @@ char buf2[MSL]; chprintln(ch, "Clans available:"); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); for (i = clan_first; i; i = i->next) { chprint(ch, i->who_name); @@ -149,7 +149,7 @@ } chprintln(ch, "{x"); } - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); chprintln(ch, "For more info use 'cinfo <clan>'."); } @@ -307,7 +307,7 @@ return; } argument = one_argument(argument, arg2); - strncpy(arg1, arg2, MIL); + strcpy(arg1, arg2); } else @@ -330,8 +330,8 @@ { chprintlnf(ch, "%-12s %-8s %s", victim->name, position_table[victim->position].name, - victim->in_room ? victim->in_room->area-> - name : "Unknown"); + victim->in_room ? victim->in_room-> + area->name : "Unknown"); found = TRUE; } } @@ -592,8 +592,8 @@ } chprintlnf(ch, "{W%s{x\n\r", - stringf(0, ALIGN_CENTER, "-", FORMATF("[ %s{W Roster ]", - clan->who_name))); + stringf(ch, 0, ALIGN_CENTER, "-", FORMATF("[ %s{W Roster ]", + clan->who_name))); for (i = MAX_RANK - 1; i >= 0; i--) { chprintf(ch, "%s%12ss {W:%s", rcol[i], clan->rank[i].rankname, rcol[i]); @@ -622,6 +622,6 @@ chprint(ch, buf); } } - chprintlnf(ch, "{W%s", draw_line(NULL, 0)); + chprintlnf(ch, "{W%s", draw_line(ch, NULL, 0)); return; } diff -ur src/comm.c new/comm.c --- src/comm.c Wed Apr 9 23:26:58 2003 +++ new/comm.c Wed Apr 23 00:11:35 2003 @@ -167,6 +167,7 @@ alarm_action.sa_flags = SA_NOMASK; sigaction(SIGPIPE, &ignore_action, NULL); /* who cares about pipes? */ + sigaction(SIGCHLD, &ignore_action, NULL); /* stop zombie processes */ sigaction(SIGHUP, &ignore_action, NULL); /* stay alive if user quits */ sigaction(SIGINT, &halt_action, NULL); /* interrupted at keyboard */ sigaction(SIGQUIT, &halt_action, NULL); /* quit at keyboard */ @@ -436,6 +437,7 @@ #if !defined(WIN32) signal(SIGPIPE, SIG_IGN); + signal(SIGCHLD, SIG_IGN); #endif gettimeofday(&last_time, NULL); current_time = (time_t) last_time.tv_sec; @@ -985,7 +987,7 @@ if (k > 1 || d->incomm[0] == '!') { - if (d->incomm[0] != '!' && strcmp(d->incomm, d->inlast)) + if (d->incomm[0] != '!' && str_cmp(d->incomm, d->inlast)) { d->repeat = 0; } @@ -1593,8 +1595,8 @@ ((!IS_NPC(ch) && IS_SET(ch->act, PLR_HOLYLIGHT)) || (!IS_AFFECTED(ch, AFF_BLIND) && - !room_is_dark(ch->in_room))) ? ch->in_room-> - name : "darkness"); + !room_is_dark(ch->in_room))) ? ch-> + in_room->name : "darkness"); else sprintf(buf2, " "); i = buf2; @@ -1895,8 +1897,8 @@ dold->connected != CON_GET_NAME && dold->connected != CON_GET_OLD_PASSWORD && !str_cmp(name, - dold->original ? dold->original->name : dold->character-> - name)) + dold->original ? dold->original->name : dold-> + character->name)) { write_to_buffer(d, "That character is already playing.\n\r", 0); write_to_buffer(d, "Do you wish to connect anyway (Y/N)?", 0); diff -ur src/db.c new/db.c --- src/db.c Wed Apr 9 23:26:58 2003 +++ new/db.c Wed Apr 23 00:11:35 2003 @@ -346,10 +346,6 @@ load_deities(); log_string("Loading web passwords..."); load_webpasses(); - build_command_hash(); - build_social_hash(); - logf("Sorted %d socials.", sort_socials()); - logf("Sorted %d helps.", sort_helps()); logf("Stored %d Areas, %d Rooms, %d Mobs & %d Objects", top_area, top_room, top_mob_index, top_obj_index); log_string("Finished."); @@ -358,6 +354,8 @@ return; } +void convert_area_credits(AREA_DATA * pArea); + /* * Snarf an 'area' header line. */ @@ -377,8 +375,9 @@ pArea->min_vnum = fread_number(fp); pArea->max_vnum = fread_number(fp); - LINK(pArea, area_first, area_last, next, prev); + add_area(pArea); current_area = pArea; + convert_area_credits(pArea); top_area++; return; @@ -438,6 +437,13 @@ switch (UPPER(word[0])) { + case 'L': + SKEY("LvlComment", pArea->lvl_comment); + break; + case 'M': + KEY("MinLevel", pArea->min_level, fread_number(fp)); + KEY("MaxLevel", pArea->max_level, fread_number(fp)); + break; case 'N': SKEY("Name", pArea->name); break; @@ -448,6 +454,7 @@ KEY("Security", pArea->security, fread_number(fp)); break; case 'V': + KEY("Version", pArea->version, fread_number(fp)); if (!str_cmp(word, "VNUMs")) { pArea->min_vnum = fread_number(fp); @@ -458,9 +465,10 @@ if (!str_cmp(word, "End")) { fMatch = TRUE; - LINK(pArea, area_first, area_last, next, prev); + add_area(pArea); current_area = pArea; top_area++; + convert_area_credits(pArea); return; } @@ -519,7 +527,7 @@ if (!str_cmp(pHelp->keyword, "greeting")) help_greeting = pHelp->text; - LINK(pHelp, help_first, help_last, next, prev); + add_help(pHelp); top_help++; } @@ -1116,7 +1124,7 @@ pRprog = new_prog(); word = fread_word(fp); - if (!(trigger = flag_value(rprog_flags, word))) + if ((trigger = flag_value(rprog_flags, word)) == NO_FLAG) { bug("ROOMprogs: invalid trigger.", 0); exit(1); @@ -2748,7 +2756,8 @@ pHash += sizeof(char *); if (top_string[sizeof(char *)] == pHash[0] && - !strcmp(top_string + sizeof(char *) + 1, pHash + 1)) + !str_casecmp(top_string + sizeof(char *) + 1, + pHash + 1)) return pHash; } @@ -2979,9 +2988,103 @@ return; } +AREA_DATA *area_first_sorted; + +void newarea_insert_level_sort(AREA_DATA * a) +{ + AREA_DATA *lsort = area_first_sorted; + AREA_DATA *lsort_prev = NULL; + + if (!area_first_sorted) + { + area_first_sorted = a; + return; + } + + // sort areas by level + + for (; lsort; lsort_prev = lsort, lsort = lsort->next_sort) + { + if (IS_NULLSTR(a->lvl_comment)) + { + if (IS_NULLSTR(lsort->lvl_comment)) + { + if (lsort->min_level > 0) + { + if (a->min_level <= 0 || a->min_level > lsort->min_level) + { + continue; + } + + if (a->min_level == lsort->min_level + && a->max_level > lsort->max_level) + { + continue; + } + } + else + { + if (a->min_level < lsort->min_level) + { + continue; + } + } + } + } + else + { + int i; + + if (IS_NULLSTR(lsort->lvl_comment)) + { + continue; + } + + i = str_cmp(a->lvl_comment, lsort->lvl_comment); + if (i > 0) + { + continue; + } + + if (i == 0 && str_cmp(a->name, lsort->name) > 0) + { + continue; + } + + } + + // add area to this point in the list + if (lsort_prev) + { // insert in the list + a->next_sort = lsort; + lsort_prev->next_sort = a; + } + else // we are at the head + { + // insert at the head + a->next_sort = area_first_sorted; + area_first_sorted = a; + } + return; + } + + lsort_prev->next_sort = a; +} + +void add_area(AREA_DATA * pArea) +{ + newarea_insert_level_sort(pArea); + LINK(pArea, area_first, area_last, next, prev); +} + +void unlink_area(AREA_DATA * pArea) +{ + UNLINK_SINGLE(pArea, next_sort, AREA_DATA, area_first_sorted); + UNLINK(pArea, area_first, area_last, next, prev); +} + CH_CMD(do_areas) { - char buf[MAX_STRING_LENGTH]; AREA_DATA *pArea1; AREA_DATA *pArea2; int iArea; @@ -2994,19 +3097,34 @@ } iAreaHalf = (top_area + 1) / 2; - pArea1 = area_first; - pArea2 = area_first; + pArea1 = area_first_sorted; + pArea2 = area_first_sorted; for (iArea = 0; iArea < iAreaHalf; iArea++) - pArea2 = pArea2->next; + pArea2 = pArea2->next_sort; for (iArea = 0; iArea < iAreaHalf; iArea++) { - sprintf(buf, "%-39s%-39s\n\r", pArea1->credits, - (pArea2 != NULL) ? pArea2->credits : ""); - chprint(ch, buf); - pArea1 = pArea1->next; + if (IS_NULLSTR(pArea1->lvl_comment)) + chprintf(ch, "[%03d %03d] %-7.7s %-30.30s ", pArea1->min_level, + pArea1->max_level, pArea1->credits, pArea1->name); + else + chprintf(ch, "[%-7.7s] %-7.7s %-30.30s ", pArea1->lvl_comment, + pArea1->credits, pArea1->name); + + pArea1 = pArea1->next_sort; if (pArea2 != NULL) - pArea2 = pArea2->next; + { + if (IS_NULLSTR(pArea2->lvl_comment)) + chprintlnf(ch, "[%03d %03d] %-7.7s %-30.30s", pArea2->min_level, + pArea2->max_level, pArea2->credits, pArea2->name); + else + chprintlnf(ch, "[%-7.7s] %-7.7s %-30.30s", pArea2->lvl_comment, + pArea2->credits, pArea2->name); + + pArea2 = pArea2->next_sort; + } + else + chprintln(ch, ""); } return; @@ -3366,32 +3484,62 @@ return; } -/* - * Compare strings, case insensitive. - * Return TRUE if different - * (compatibility with historical functions). - */ -bool str_cmp(const char *astr, const char *bstr) +/* Returns -1 if astr is shorter than bstr, + 0 if they are the same, + 1 if astr is longer than bstr. + CaSe InSeNsiTiVe. +*/ +int str_cmp(const char *astr, const char *bstr) { if (astr == NULL) - { - bug("Str_cmp: null astr.", 0); - return TRUE; - } + return bstr == NULL ? 0 : -1; + if (bstr == NULL) + return 1; + return strcasecmp(astr, bstr); +} +/* Returns -1 if astr is shorter than bstr, + 0 if they are the same, + 1 if astr is longer than bstr. + Case Sensitive. +*/ +int str_casecmp(const char *astr, const char *bstr) +{ + if (astr == NULL) + return bstr == NULL ? 0 : -1; if (bstr == NULL) - { - bug("Str_cmp: null bstr.", 0); - return TRUE; - } + return 1; + return strcmp(astr, bstr); +} - for (; *astr || *bstr; astr++, bstr++) - { - if (LOWER(*astr) != LOWER(*bstr)) - return TRUE; - } +/* Returns -1 if astr is shorter than bstr, + 0 if they are the same, + 1 if astr is longer than bstr. + Only compares length of len. + CaSe InSeNsiTiVe. +*/ +int str_ncmp(const char *astr, const char *bstr, size_t len) +{ + if (astr == NULL) + return bstr == NULL ? 0 : -1; + if (bstr == NULL) + return 1; + return strncasecmp(astr, bstr, len); +} - return FALSE; +/* Returns -1 if astr is shorter than bstr, + 0 if they are the same, + 1 if astr is longer than bstr. + Only compares length of len. + Case Sensitive. +*/ +int str_ncasecmp(const char *astr, const char *bstr, size_t len) +{ + if (astr == NULL) + return bstr == NULL ? 0 : -1; + if (bstr == NULL) + return 1; + return strncmp(astr, bstr, len); } /* @@ -3403,13 +3551,13 @@ { if (astr == NULL) { - bug("Strn_cmp: null astr.", 0); + bug("Str_prefix: null astr.", 0); return TRUE; } if (bstr == NULL) { - bug("Strn_cmp: null bstr.", 0); + bug("Str_prefix: null bstr.", 0); return TRUE; } diff -ur src/db2.c new/db2.c --- src/db2.c Wed Apr 9 23:26:58 2003 +++ new/db2.c Wed Apr 23 00:11:35 2003 @@ -208,7 +208,7 @@ pMprog = new_prog(); word = fread_word(fp); - if ((trigger = flag_value(mprog_flags, word)) == 0) + if ((trigger = flag_value(mprog_flags, word)) == NO_FLAG) { bug("MOBprogs: invalid trigger.", 0); exit(1); @@ -459,7 +459,7 @@ pOprog = new_prog(); word = fread_word(fp); - if (!(trigger = flag_value(oprog_flags, word))) + if ((trigger = flag_value(oprog_flags, word)) == NO_FLAG) { bug("OBJprogs: invalid trigger.", 0); exit(1); @@ -1351,76 +1351,100 @@ sk1 = *(struct skill_type *) p1; sk2 = *(struct skill_type *) p2; - if (IS_NULLSTR(sk1.name)) - return 2; - else if (IS_NULLSTR(sk2.name)) - return 1; - - return strcmp(sk1.name, sk2.name); + return str_cmp(sk1.name, sk2.name); } -int sort_socials(void) +void add_social(SOCIAL_DATA * social) { - SOCIAL_DATA *tmp, *tmp_next, **socials; - int i = 0, j; + SOCIAL_DATA *tmp; - alloc_mem(socials, SOCIAL_DATA *, maxSocial); + hash_social(social); - for (tmp = social_first; tmp; tmp = tmp_next) + for (tmp = social_first; tmp; tmp = tmp->next) { - tmp_next = tmp->next; - socials[i++] = tmp; - UNLINK(tmp, social_first, social_last, next, prev); + if (str_cmp(social->name, tmp->name) < 0) + { + INSERT(social, tmp, social_first, next, prev); + break; + } } - for (j = 0; j < i; j++) + if (!tmp) + LINK(social, social_first, social_last, next, prev); +} + +void unlink_social(SOCIAL_DATA * social) +{ + unhash_social(social); + UNLINK(social, social_first, social_last, next, prev); +} + +void add_help(HELP_DATA * help) +{ + HELP_DATA *tmp; + + for (tmp = help_first; tmp; tmp = tmp->next) { - for (tmp = social_first; tmp; tmp = tmp->next) + if (str_cmp(help->keyword, tmp->keyword) < 0) { - if (strcmp(socials[j]->name, tmp->name) < 0) - { - INSERT(socials[j], tmp, social_first, next, prev); - break; - } + INSERT(help, tmp, help_first, next, prev); + break; } - - if (!tmp) - LINK(socials[j], social_first, social_last, next, prev); } - free_mem(socials); - return i; + + if (!tmp) + LINK(help, help_first, help_last, next, prev); } -int sort_helps(void) +void newcmd_insert_name_sort(CMD_DATA * a) { - HELP_DATA *tmp, *tmp_next, **helps; - int i = 0, j; - - alloc_mem(helps, HELP_DATA *, top_help); + CMD_DATA *lsort = cmd_first_sorted; + CMD_DATA *lsort_prev = NULL; - for (tmp = help_first; tmp; tmp = tmp_next) + if (!cmd_first_sorted) { - tmp_next = tmp->next; - helps[i++] = tmp; - UNLINK(tmp, help_first, help_last, next, prev); + cmd_first_sorted = a; + return; } - for (j = 0; j < i; j++) + // sort cmds by level + for (; lsort; lsort_prev = lsort, lsort = lsort->next_sort) { - for (tmp = help_first; tmp; tmp = tmp->next) + if (str_cmp(a->name, lsort->name) > 0) { - if (strcmp(helps[j]->keyword, tmp->keyword) < 0) - { - INSERT(helps[j], tmp, help_first, next, prev); - break; - } + continue; } - if (!tmp) - LINK(helps[j], help_first, help_last, next, prev); + // add cmd to this point in the list + if (lsort_prev) + { // insert in the list + a->next_sort = lsort; + lsort_prev->next_sort = a; + } + else // we are at the head + { + // insert at the head + a->next_sort = cmd_first_sorted; + cmd_first_sorted = a; + } + return; } - free_mem(helps); - return i; + + lsort_prev->next_sort = a; +} + +void add_command(CMD_DATA * command) +{ + hash_command(command); + newcmd_insert_name_sort(command); + LINK(command, cmd_first, cmd_last, next, prev); +} + +void unlink_command(CMD_DATA * command) +{ + unhash_command(command); + UNLINK_SINGLE(command, next_sort, CMD_DATA, cmd_first_sorted); + UNLINK(command, cmd_first, cmd_last, next, prev); } #define MAX_PERM_BLOCK 131072 @@ -1461,31 +1485,7 @@ return pMem; } -void build_command_hash(void) -{ - CMD_DATA *tmp, *tmp_next; - - for (tmp = cmd_first; tmp; tmp = tmp_next) - { - tmp_next = tmp->next; - - add_command(tmp); - } -} - -void build_social_hash(void) -{ - SOCIAL_DATA *tmp, *tmp_next; - - for (tmp = social_first; tmp; tmp = tmp_next) - { - tmp_next = tmp->next; - - add_social(tmp); - } -} - -void add_command(CMD_DATA * command) +void hash_command(CMD_DATA * command) { int hash; @@ -1514,7 +1514,7 @@ return; } -void unlink_command(CMD_DATA * command) +void unhash_command(CMD_DATA * command) { int hash; @@ -1529,7 +1529,7 @@ UNLINK_SINGLE(command, next_hash, CMD_DATA, command_hash[hash]); } -void unlink_social(SOCIAL_DATA * social) +void unhash_social(SOCIAL_DATA * social) { int hash; @@ -1547,7 +1547,7 @@ UNLINK_SINGLE(social, next_hash, SOCIAL_DATA, social_hash[hash]); } -void add_social(SOCIAL_DATA * social) +void hash_social(SOCIAL_DATA * social) { int hash; @@ -1571,4 +1571,47 @@ LINK_LAST(social, next_hash, SOCIAL_DATA, social_hash[hash]); return; +} + +int convert_level(char *arg) +{ + if (IS_NULLSTR(arg)) + return 0; + else if (is_number(arg)) + return atoi(arg); + else if (is_name("IMM", arg)) + return LEVEL_IMMORTAL; + else if (is_name("HERO", arg) || is_name("HRO", arg)) + return LEVEL_HERO; + else + return 0; +} + +void convert_area_credits(AREA_DATA * pArea) +{ + char high[MAX_STRING_LENGTH], low[MAX_STRING_LENGTH], builder[MSL]; + + if (!pArea || pArea->version > 0) + return; + + if (3 != sscanf(pArea->credits, "{ %[^} ] %[^} ] } %s", low, high, builder) + && 3 != sscanf(pArea->credits, "{ %[^} ]-%[^} ] } %s", low, high, + builder) + && 3 != sscanf(pArea->credits, "[ %[^] ] %[^] ] ] %s", low, high, + builder) + && 3 != sscanf(pArea->credits, "[ %[^] ]-%[^] ] ] %s", low, high, + builder)) + { + if (2 == sscanf(pArea->credits, "{ %[^} ] } %s", low, builder) + || 2 == sscanf(pArea->credits, "[ %[^] ] ] %s", low, builder)) + { + replace_string(pArea->lvl_comment, low); + replace_string(pArea->credits, builder); + } + return; + } + replace_string(pArea->lvl_comment, ""); + replace_string(pArea->credits, builder); + pArea->min_level = convert_level(low); + pArea->max_level = convert_level(high); } diff -ur src/dofun.h new/dofun.h --- src/dofun.h Wed Apr 9 23:26:59 2003 +++ new/dofun.h Wed Apr 23 00:11:35 2003 @@ -323,5 +323,6 @@ COMMAND_FUN (do_btalk) COMMAND_FUN (do_areaset) COMMAND_FUN (do_roster) +COMMAND_FUN (do_map) // *INDENT-ON* diff -ur src/explored.c new/explored.c --- src/explored.c Wed Apr 9 23:26:58 2003 +++ new/explored.c Wed Apr 23 00:11:35 2003 @@ -36,32 +36,26 @@ #include <time.h> #include "merc.h" -void setbit(char *explored, vnum_t pIndex) +int bitcount(char c) { - SET_BIT(explored[pIndex / 8], (1 << (pIndex % 8))); - return; -} - -int getbit(char *explored, vnum_t pIndex) -{ - return (IS_SET(explored[pIndex / 8], (1 << (pIndex % 8))) != 0); -} - -void rembit(char *explored, vnum_t pIndex) -{ - REMOVE_BIT(explored[pIndex / 8], (1 << (pIndex % 8))); - return; -} - -int bitcount(char ch) -{ - int bit, count = 0; + int count = 0; - for (bit = 1 << 7; bit > 0; bit >>= 1) - { - if (IS_SET(ch, bit)) - count++; - } + if (c & BIT_A) + count++; + if (c & BIT_B) + count++; + if (c & BIT_C) + count++; + if (c & BIT_D) + count++; + if (c & BIT_E) + count++; + if (c & BIT_F) + count++; + if (c & BIT_G) + count++; + if (c & BIT_H) + count++; return count; } @@ -71,7 +65,7 @@ int pIndex = 0, count = 0; if (IS_NPC(ch)) - return 0; + return top_room; for (pIndex = 0; pIndex < MAX_EXPLORE_HASH; pIndex++) { @@ -93,50 +87,45 @@ { nMatch++; if (IS_SET(pRoom->room_flags, ROOM_NOEXPLORE) - && getbit(ch->pcdata->explored, vnum)) - rembit(ch->pcdata->explored, vnum); + && STR_IS_SET(ch->pcdata->explored, vnum)) + STR_REMOVE_BIT(ch->pcdata->explored, vnum); } else { - if (getbit(ch->pcdata->explored, vnum)) - rembit(ch->pcdata->explored, vnum); + if (STR_IS_SET(ch->pcdata->explored, vnum)) + STR_REMOVE_BIT(ch->pcdata->explored, vnum); } } } -int areacount(CHAR_DATA * ch) +int areacount(CHAR_DATA * ch, AREA_DATA * area) { vnum_t pIndex = 0, count = 0; if (IS_NPC(ch)) - return 0; + return top_room; - if ((ch->in_room == NULL) || (ch->in_room->area == NULL)) + if (ch == NULL || area == NULL) return 0; - for (pIndex = ch->in_room->area->min_vnum; - pIndex <= ch->in_room->area->max_vnum; pIndex++) + for (pIndex = area->min_vnum; pIndex <= area->max_vnum; pIndex++) { - count += getbit(ch->pcdata->explored, pIndex); + count += STR_IS_SET(ch->pcdata->explored, pIndex) ? 1 : 0; } return count; } -int arearooms(CHAR_DATA * ch) +int arearooms(AREA_DATA * area) { int count = 0; vnum_t pIndex = 0; ROOM_INDEX_DATA *pRoom; - if (IS_NPC(ch)) - return 0; - - if ((ch->in_room == NULL) || (ch->in_room->area == NULL)) + if (!area) return 0; - for (pIndex = ch->in_room->area->min_vnum; - pIndex <= ch->in_room->area->max_vnum; pIndex++) + for (pIndex = area->min_vnum; pIndex <= area->max_vnum; pIndex++) { if ((pRoom = get_room_index(pIndex)) != NULL && !IS_SET(pRoom->room_flags, ROOM_NOEXPLORE)) @@ -154,15 +143,15 @@ fprintf(fp, "RoomRLE %d", bit); - for (pIndex = 0; pIndex < (MAX_EXPLORE_HASH * 8) - 1; pIndex++) + for (pIndex = 0; pIndex < MAX_VNUM; pIndex++) { - if (getbit(explored, pIndex) == bit) + if ((STR_IS_SET(explored, pIndex) ? 1 : 0) == bit) count++; else { fprintf(fp, " %d", count); count = 1; - bit = getbit(explored, pIndex); + bit = (STR_IS_SET(explored, pIndex)) ? 1 : 0; } } fprintf(fp, " %d -1\n", count); @@ -174,7 +163,7 @@ vnum_t pIndex; int bit = 0; int count = 0; - int pos = 0; + vnum_t pos = 0; pIndex = 0; @@ -192,7 +181,9 @@ do { if (bit == 1) - SET_BIT(explored[pIndex / 8], (1 << (pIndex % 8))); + { + STR_SET_BIT(explored, pIndex); + } pIndex++; } while (pIndex < pos + count); @@ -202,29 +193,92 @@ return; } +struct area_index +{ + AREA_DATA *area; + double percent; +}; + +typedef struct area_index AREA_INDEX; + +int compare_area_explored(const void *v1, const void *v2) +{ + AREA_INDEX area1 = *(AREA_INDEX *) v1; + AREA_INDEX area2 = *(AREA_INDEX *) v2; + + return (int) (area2.percent - area1.percent); +} + CH_CMD(do_explored) { - int rcnt; + int line = 1, i = 0, c = 0, rcnt; double rooms, percent; + AREA_DATA *pArea; + AREA_INDEX *list; if (!ch || IS_NPC(ch)) return; - rcnt = roomcount(ch); - rooms = (double) top_explored; - percent = (double) rcnt / (rooms / 100); - - chprintf(ch, "ROM has {G%d{x explorable rooms.", top_explored); - chprintf(ch, "You have explored {G%d (%.2f%%){x of the mud{x", rcnt, - percent); - - rcnt = areacount(ch); - rooms = (double) (arearooms(ch)); - percent = (double) rcnt / (rooms / 100); - - chprintf(ch, "\n\rThis area has {G%.0f{x explorable rooms.", rooms); - chprintf(ch, "You have explored {G%d (%.2f%%){x rooms in this area.{x", - rcnt, percent); + if (IS_NULLSTR(argument)) + { + rcnt = roomcount(ch); + rooms = (double) top_explored; + percent = UMIN((double) rcnt / (rooms / 100), 100); - return; + chprintf(ch, "ROM has {G%d{x explorable rooms.", top_explored); + chprintf(ch, "You have explored {G%d (%.2f%%){x of the mud{x", rcnt, + percent); + + rcnt = areacount(ch, ch->in_room->area); + rooms = (double) (arearooms(ch->in_room->area)); + percent = UMIN((double) rcnt / (rooms / 100), 100); + + chprintf(ch, "\n\rThis area has {G%.0f{x explorable rooms.", rooms); + chprintf(ch, "You have explored {G%d (%.2f%%){x rooms in this area.{x", + rcnt, percent); + } + else if (is_exact_name(argument, "reset")) + { + memset(ch->pcdata->explored, 0, MAX_EXPLORE_HASH); + chprintln(ch, "Your explored rooms were set to 0."); + } + else if (!str_prefix(argument, "list")) + { + alloc_mem(list, AREA_INDEX, top_area); + + for (pArea = area_first; pArea != NULL; pArea = pArea->next) + { + rcnt = areacount(ch, pArea); + rooms = (double) (arearooms(pArea)); + percent = UMIN((double) rcnt / (rooms / 100), 100); + list[i].area = pArea; + list[i].percent = percent; + i++; + } + qsort(list, i, sizeof(AREA_INDEX), compare_area_explored); + + for (c = 0; c < i; c++) + { + pArea = list[c].area; + percent = list[c].percent; + + chprintf(ch, "{D[{Y%3.0f{y%%{D]{x %-32s", percent, pArea->name); + if (line >= 2) + { + line = 0; + chprintln(ch, ""); + } + line++; + } + if (line >= 2) + chprintln(ch, ""); + free_mem(list); + } + else + { + chprintln(ch, "Syntax: explored - show current area and world."); + chprintln(ch, + " : explored list - list percentages for all areas."); + chprintln(ch, " : explored reset - reset explored rooms."); + } } diff -ur src/fight.c new/fight.c --- src/fight.c Wed Apr 9 23:26:58 2003 +++ new/fight.c Wed Apr 23 00:11:35 2003 @@ -3112,9 +3112,8 @@ if ((pexit = was_in->exit[door]) == 0 || pexit->u1.to_room == NULL || IS_SET(pexit->exit_info, EX_CLOSED) || number_range(0, ch->daze) != 0 || (IS_NPC(ch) && - IS_SET(pexit->u1. - to_room->room_flags, - ROOM_NO_MOB))) + IS_SET(pexit->u1.to_room-> + room_flags, ROOM_NO_MOB))) continue; move_char(ch, door, FALSE); diff -ur src/flags.c new/flags.c --- src/flags.c Wed Apr 9 23:26:58 2003 +++ new/flags.c Wed Apr 23 00:11:35 2003 @@ -201,7 +201,7 @@ pos = flag_value(flag_table, word); - if (pos == 0) + if (pos == NO_FLAG) { chprintln(ch, "That flag doesn't exist!"); return; diff -ur src/globals.h new/globals.h --- src/globals.h Wed Apr 9 23:26:59 2003 +++ new/globals.h Wed Apr 23 00:11:35 2003 @@ -143,4 +143,6 @@ GLOBAL(CMD_DATA * command_hash[126]); GLOBAL(SOCIAL_DATA * social_hash[27]); +GLOBAL_DEF(CMD_DATA * cmd_first_sorted, NULL); + #endif diff -ur src/handler.c new/handler.c --- src/handler.c Wed Apr 9 23:26:58 2003 +++ new/handler.c Wed Apr 23 00:11:35 2003 @@ -1467,7 +1467,7 @@ } ++ch->in_room->area->nplayer; if (!IS_SET(ch->in_room->room_flags, ROOM_NOEXPLORE)) - setbit(ch->pcdata->explored, ch->in_room->vnum); + STR_SET_BIT(ch->pcdata->explored, ch->in_room->vnum); } if ((obj = get_eq_char(ch, WEAR_LIGHT)) != NULL && @@ -1519,13 +1519,54 @@ return; } +void link_obj_to_char(CHAR_DATA * ch, OBJ_DATA * obj) +{ + OBJ_DATA *otmp; + + if (!IS_NPC(ch) || !ch->pIndexData->pShop) + { + LINK(obj, ch->first_carrying, ch->last_carrying, next_content, + prev_content); + return; + } + + for (otmp = ch->first_carrying; otmp; otmp = otmp->next_content) + { + if (obj->pIndexData == otmp->pIndexData && + !str_cmp(obj->short_descr, otmp->short_descr)) + { + /* if this is an unlimited item, destroy the new one */ + if (IS_OBJ_STAT(otmp, ITEM_INVENTORY)) + { + extract_obj(obj); + return; + } + obj->cost = otmp->cost; /* keep it standard */ + } + if (obj->level > otmp->level) + { + INSERT(obj, otmp, ch->first_carrying, next_content, prev_content); + break; + } + else if (obj->level == otmp->level + && !str_cmp(obj->short_descr, otmp->short_descr)) + { + INSERT(obj, otmp, ch->first_carrying, next_content, prev_content); + break; + } + } + + if (!otmp) + LINK(obj, ch->first_carrying, ch->last_carrying, next_content, + prev_content); +} + /* * Give an obj to a char. */ void obj_to_char(OBJ_DATA * obj, CHAR_DATA * ch) { - LINK(obj, ch->first_carrying, ch->last_carrying, next_content, - prev_content); + link_obj_to_char(ch, obj); obj->carried_by = ch; obj->in_room = NULL; obj->in_obj = NULL; diff -ur src/hedit.c new/hedit.c --- src/hedit.c Wed Apr 9 23:26:58 2003 +++ new/hedit.c Wed Apr 23 00:11:35 2003 @@ -128,7 +128,7 @@ help->keyword = str_dup(argument); help->text = str_dup(""); - LINK(help, help_first, help_last, next, prev); + add_help(help); edit_start(ch, help, ED_HELP); chprintln(ch, "Ok."); diff -ur src/interp.c new/interp.c --- src/interp.c Wed Apr 9 23:26:58 2003 +++ new/interp.c Wed Apr 23 00:11:35 2003 @@ -457,7 +457,7 @@ int col; col = 0; - for (cmd = cmd_first; cmd; cmd = cmd->next) + for (cmd = cmd_first_sorted; cmd; cmd = cmd->next_sort) { if (cmd->level < LEVEL_HERO && cmd->level <= get_trust(ch) && cmd->show) { @@ -479,7 +479,7 @@ int col; col = 0; - for (cmd = cmd_first; cmd; cmd = cmd->next) + for (cmd = cmd_first_sorted; cmd; cmd = cmd->next_sort) { if (cmd->level >= LEVEL_HERO && cmd->level <= get_trust(ch) && cmd->show) diff -ur src/interp.h new/interp.h --- src/interp.h Wed Apr 9 23:26:59 2003 +++ new/interp.h Wed Apr 23 00:11:35 2003 @@ -63,7 +63,7 @@ int level; int log; bool show; - CMD_DATA *next, *prev, *next_hash; + CMD_DATA *next, *prev, *next_hash, *next_sort; bool valid; }; diff -ur src/magic.c new/magic.c --- src/magic.c Wed Apr 9 23:26:58 2003 +++ new/magic.c Wed Apr 23 00:11:35 2003 @@ -286,8 +286,8 @@ if ((sn = find_spell(ch, arg1)) < 1 || skill_table[sn].spell_fun == spell_null || (!IS_NPC(ch) && (!can_use_skpell(ch, sn) - || ch->pcdata-> - learned[sn] == 0))) + || ch-> + pcdata->learned[sn] == 0))) { chprintln(ch, "You don't know any spells of that name."); return; @@ -2788,9 +2788,7 @@ || IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL) || IS_SET(ch->in_room->room_flags, ROOM_NO_RECALL) || (IS_NPC(victim) && is_gqmob(ch, - victim-> - pIndexData-> - vnum) + victim->pIndexData->vnum) != -1) || (IS_NPC(victim) && IS_QUESTOR(ch) && ch->pcdata->questmob == victim->pIndexData->vnum) diff -ur src/magic2.c new/magic2.c --- src/magic2.c Wed Apr 9 23:26:58 2003 +++ new/magic2.c Wed Apr 23 00:11:35 2003 @@ -64,7 +64,9 @@ || IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL) || IS_SET(ch->in_room->room_flags, ROOM_NO_RECALL) || (IS_NPC(victim) && is_gqmob(ch, - victim->pIndexData->vnum) + victim-> + pIndexData-> + vnum) != -1) || (IS_NPC(victim) && IS_QUESTOR(ch) && ch->pcdata->questmob == victim->pIndexData->vnum) @@ -123,10 +125,17 @@ || IS_SET(to_room->room_flags, ROOM_ARENA) || IS_SET(from_room->room_flags, ROOM_ARENA) || (IS_NPC(victim) && is_gqmob(ch, - victim->pIndexData->vnum) - != -1) - || (IS_NPC(victim) && IS_QUESTOR(ch) - && ch->pcdata->questmob == victim->pIndexData->vnum) + victim-> + pIndexData-> + vnum) != + -1) || (IS_NPC(victim) + && + IS_QUESTOR(ch) + && ch->pcdata-> + questmob == + victim-> + pIndexData-> + vnum) || victim->level >= level + 3 || (!IS_NPC(victim) && victim->level >= LEVEL_HERO) /* NOT trust */ || (IS_NPC(victim) && IS_SET(victim->imm_flags, IMM_SUMMON)) || (IS_NPC(victim) && saves_spell(level, victim, DAM_NONE)) diff -ur src/mem.c new/mem.c --- src/mem.c Wed Apr 9 23:26:58 2003 +++ new/mem.c Wed Apr 23 00:11:35 2003 @@ -94,6 +94,10 @@ pArea->security = 9; pArea->builders = str_dup("None"); pArea->credits = str_dup(""); + pArea->lvl_comment = str_dup(""); + pArea->min_level = 0; + pArea->max_level = MAX_LEVEL; + pArea->version = 0; pArea->min_vnum = 0; pArea->max_vnum = 0; pArea->age = 32; /* 32 so areas reset on boot */ diff -ur src/merc.h new/merc.h --- src/merc.h Wed Apr 9 23:26:59 2003 +++ new/merc.h Wed Apr 23 00:11:35 2003 @@ -189,6 +189,7 @@ #define MAX_DAMAGE_MESSAGE 41 #define MAX_RANK 6 #define MAX_HOUSE_ROOMS 5 +#define MAX_VNUM 60000 #define MAX_LEVEL 60 #define LEVEL_HERO (MAX_LEVEL - 9) #define LEVEL_IMMORTAL (MAX_LEVEL - 8) @@ -1045,6 +1046,7 @@ * Item types. * Used in #OBJECTS. */ +#define ITEM_NONE 0 #define ITEM_LIGHT 1 #define ITEM_SCROLL 2 #define ITEM_WAND 3 @@ -1932,13 +1934,16 @@ { AREA_DATA *next; AREA_DATA *prev; + AREA_DATA *next_sort; const char *file_name; const char *name; const char *credits; + const char *lvl_comment; + int version; int age; int nplayer; - int low_range; - int high_range; + int min_level; + int max_level; vnum_t min_vnum; vnum_t max_vnum; bool empty; @@ -2103,6 +2108,12 @@ #define IS_SET(flag, bit) ((flag) & (bit)) #define SET_BIT(var, bit) ((var) |= (bit)) #define REMOVE_BIT(var, bit) ((var) &= ~(bit)) +/* bit string operations */ +#define STR_IS_SET(var, bit) ((((char *)(var))[((bit)/8)]) & ((1<<((bit)%8)))) +#define STR_SET_BIT(var, bit) ((((char *)(var))[((bit)/8)]) |= ((1<<((bit)%8)))) +#define STR_REMOVE_BIT(var, bit) ((((char *)(var))[((bit)/8)]) &= ~((1<<((bit)%8)))) +#define STR_TOGGLE_BIT(var, bit) ((((char *)(var))[((bit)/8)]) ^= ((1<<((bit)%8)))) + #define IS_NULLSTR(str) ((str) == NULL || (str)[0] == '\0') #define ENTRE(min,num,max) ( ((min) < (num)) && ((num) < (max)) ) #define CHECK_POS(a, b, c) { \ @@ -2475,6 +2486,8 @@ */ #define OBJ_VNUM_DUMMY 30 +#define NO_FLAG -99 + /* * Area flags. */ @@ -2486,6 +2499,8 @@ #define AREA_CLOSED (BIT_E) #define MAX_DIR 6 + +#define AREA_VERSION 1 /* * Global Constants diff -ur src/mob_cmds.c new/mob_cmds.c --- src/mob_cmds.c Wed Apr 9 23:26:58 2003 +++ new/mob_cmds.c Wed Apr 23 00:11:35 2003 @@ -1340,8 +1340,8 @@ || IS_SET(pexit->exit_info, EX_CLOSED) || (IS_NPC(ch) && IS_SET - (pexit->u1. - to_room->room_flags, + (pexit->u1.to_room-> + room_flags, ROOM_NO_MOB))) continue; @@ -1792,8 +1792,8 @@ { if ((vobj = get_obj_here(NULL, - obj->in_room ? obj->in_room : obj-> - carried_by->in_room, arg))) + obj->in_room ? obj->in_room : obj->carried_by-> + in_room, arg))) { extract_obj(vobj); } @@ -2026,8 +2026,8 @@ if ((victim = get_char_room(NULL, - (obj->in_room) ? obj->in_room : obj-> - carried_by->in_room, arg)) == NULL) + (obj->in_room) ? obj->in_room : obj->carried_by-> + in_room, arg)) == NULL) return; interpret(victim, argument); @@ -2119,8 +2119,8 @@ fAll = TRUE; else if ((victim = get_char_room(NULL, - obj->in_room ? obj->in_room : obj-> - carried_by->in_room, target)) == NULL) + obj->in_room ? obj->in_room : obj->carried_by-> + in_room, target)) == NULL) return; if (is_number(min)) @@ -2228,8 +2228,8 @@ if (!IS_NULLSTR(arg)) vch = get_char_room(NULL, - obj->in_room ? obj->in_room : obj-> - carried_by->in_room, arg); + obj->in_room ? obj->in_room : obj->carried_by-> + in_room, arg); argument = one_argument(argument, arg); if (!IS_NULLSTR(arg)) obj1 = @@ -2355,8 +2355,8 @@ } else if ((ch = get_char_room(NULL, - obj->in_room ? obj->in_room : obj-> - carried_by->in_room, target)) == NULL) + obj->in_room ? obj->in_room : obj->carried_by-> + in_room, target)) == NULL) return; if (!str_cmp(arg1, "none")) diff -ur src/mob_prog.c new/mob_prog.c --- src/mob_prog.c Wed Apr 9 23:26:58 2003 +++ new/mob_prog.c Wed Apr 23 00:11:35 2003 @@ -296,8 +296,8 @@ || (iFlag == 2 && IS_NPC(vch)) || (iFlag == 3 && IS_NPC(mob) && IS_NPC(vch) - && mob-> - pIndexData->vnum == + && mob->pIndexData-> + vnum == vch->pIndexData->vnum) || (iFlag == 4 && is_same_group(mob, vch))) && can_see(mob, vch)) @@ -449,6 +449,7 @@ const char *original; char buf[MIL], code; int lval = 0, oper = 0, rval = -1; + flag_t temp; original = line; line = one_argument(line, buf); @@ -604,22 +605,27 @@ switch (check) { case CHK_AFFECTED: - return (lval_char != NULL - && IS_AFFECTED(lval_char, flag_value(affect_flags, buf))); + if ((temp = flag_value(affect_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_AFFECTED(lval_char, temp)); case CHK_ACT: + if ((temp = flag_value(act_flags, buf)) == NO_FLAG) + return FALSE; return (lval_char != NULL - && IS_NPC(lval_char) - && IS_SET(lval_char->act, flag_value(act_flags, buf))); + && IS_NPC(lval_char) && IS_SET(lval_char->act, temp)); case CHK_PLR: + if ((temp = flag_value(plr_flags, buf)) == NO_FLAG) + return FALSE; return (lval_char != NULL - && !IS_NPC(lval_char) - && IS_SET(lval_char->act, flag_value(plr_flags, buf))); + && !IS_NPC(lval_char) && IS_SET(lval_char->act, temp)); case CHK_IMM: - return (lval_char != NULL - && IS_SET(lval_char->imm_flags, flag_value(imm_flags, buf))); + if ((temp = flag_value(imm_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_SET(lval_char->imm_flags, temp)); case CHK_OFF: - return (lval_char != NULL - && IS_SET(lval_char->off_flags, flag_value(off_flags, buf))); + if ((temp = flag_value(off_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_SET(lval_char->off_flags, temp)); case CHK_CARRIES: if (is_number(buf)) return (lval_char != NULL @@ -770,6 +776,7 @@ const char *original; char buf[MIL], code; int lval = 0, oper = 0, rval = -1; + flag_t temp; original = line; line = one_argument(line, buf); @@ -915,22 +922,27 @@ switch (check) { case CHK_AFFECTED: - return (lval_char != NULL - && IS_AFFECTED(lval_char, flag_value(affect_flags, buf))); + if ((temp = flag_value(affect_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_AFFECTED(lval_char, temp)); case CHK_ACT: + if ((temp = flag_value(act_flags, buf)) == NO_FLAG) + return FALSE; return (lval_char != NULL - && IS_NPC(lval_char) - && IS_SET(lval_char->act, flag_value(act_flags, buf))); + && IS_NPC(lval_char) && IS_SET(lval_char->act, temp)); case CHK_PLR: + if ((temp = flag_value(plr_flags, buf)) == NO_FLAG) + return FALSE; return (lval_char != NULL - && !IS_NPC(lval_char) - && IS_SET(lval_char->act, flag_value(plr_flags, buf))); + && !IS_NPC(lval_char) && IS_SET(lval_char->act, temp)); case CHK_IMM: - return (lval_char != NULL - && IS_SET(lval_char->imm_flags, flag_value(imm_flags, buf))); + if ((temp = flag_value(imm_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_SET(lval_char->imm_flags, temp)); case CHK_OFF: - return (lval_char != NULL - && IS_SET(lval_char->off_flags, flag_value(off_flags, buf))); + if ((temp = flag_value(off_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_SET(lval_char->off_flags, temp)); case CHK_CARRIES: if (is_number(buf)) return (lval_char != NULL @@ -1021,8 +1033,8 @@ else if (lval_obj != NULL && (lval_obj->in_room != NULL || lval_obj->carried_by != NULL)) lval = - lval_obj->in_room ? lval_obj->in_room->vnum : lval_obj-> - carried_by->in_room->vnum; + lval_obj->in_room ? lval_obj->in_room-> + vnum : lval_obj->carried_by->in_room->vnum; break; case CHK_SEX: if (lval_char != NULL) @@ -1086,6 +1098,7 @@ const char *original; char buf[MIL], code; int lval = 0, oper = 0, rval = -1; + flag_t temp; original = line; line = one_argument(line, buf); @@ -1223,22 +1236,27 @@ switch (check) { case CHK_AFFECTED: - return (lval_char != NULL - && IS_AFFECTED(lval_char, flag_value(affect_flags, buf))); + if ((temp = flag_value(affect_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_AFFECTED(lval_char, temp)); case CHK_ACT: + if ((temp = flag_value(act_flags, buf)) == NO_FLAG) + return FALSE; return (lval_char != NULL - && IS_NPC(lval_char) - && IS_SET(lval_char->act, flag_value(act_flags, buf))); + && IS_NPC(lval_char) && IS_SET(lval_char->act, temp)); case CHK_PLR: + if ((temp = flag_value(plr_flags, buf)) == NO_FLAG) + return FALSE; return (lval_char != NULL - && !IS_NPC(lval_char) - && IS_SET(lval_char->act, flag_value(plr_flags, buf))); + && !IS_NPC(lval_char) && IS_SET(lval_char->act, temp)); case CHK_IMM: - return (lval_char != NULL - && IS_SET(lval_char->imm_flags, flag_value(imm_flags, buf))); + if ((temp = flag_value(imm_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_SET(lval_char->imm_flags, temp)); case CHK_OFF: - return (lval_char != NULL - && IS_SET(lval_char->off_flags, flag_value(off_flags, buf))); + if ((temp = flag_value(off_flags, buf)) == NO_FLAG) + return FALSE; + return (lval_char != NULL && IS_SET(lval_char->off_flags, temp)); case CHK_CARRIES: if (is_number(buf)) return (lval_char != NULL @@ -1331,8 +1349,8 @@ else if (lval_obj != NULL && (lval_obj->in_room != NULL || lval_obj->carried_by != NULL)) lval = - lval_obj->in_room ? lval_obj->in_room->vnum : lval_obj-> - carried_by->in_room->vnum; + lval_obj->in_room ? lval_obj->in_room-> + vnum : lval_obj->carried_by->in_room->vnum; break; case CHK_SEX: if (lval_char != NULL) @@ -1441,8 +1459,8 @@ case 'N': i = (ch != NULL && can_see(mob, - ch)) ? (IS_NPC(ch) ? ch->short_descr : ch-> - name) : someone; + ch)) ? (IS_NPC(ch) ? ch-> + short_descr : ch->name) : someone; break; case 't': i = someone; @@ -1455,8 +1473,8 @@ case 'T': i = (vch != NULL && can_see(mob, - vch)) ? (IS_NPC(vch) ? vch->short_descr : vch-> - name) : someone; + vch)) ? (IS_NPC(vch) ? vch-> + short_descr : vch->name) : someone; break; case 'r': if (rch == NULL) @@ -1473,8 +1491,8 @@ rch = get_random_char(mob, NULL, NULL); i = (rch != NULL && can_see(mob, - rch)) ? (IS_NPC(ch) ? ch->short_descr : ch-> - name) : someone; + rch)) ? (IS_NPC(ch) ? ch-> + short_descr : ch->name) : someone; break; case 'q': i = someone; @@ -1488,10 +1506,10 @@ i = (mob->mprog_target != NULL && can_see(mob, mob->mprog_target)) ? (IS_NPC(mob->mprog_target) ? + mob-> + mprog_target->short_descr : mob->mprog_target-> - short_descr : mob-> - mprog_target->name) : - someone; + name) : someone; break; case 'j': i = he_she[URANGE(0, mob->sex, 2)]; @@ -1513,9 +1531,7 @@ case 'X': i = (mob->mprog_target != NULL && can_see(mob, mob->mprog_target)) ? he_she[URANGE(0, - mob-> - mprog_target-> - sex, + mob->mprog_target->sex, 2)] : someone; break; @@ -1542,9 +1558,7 @@ case 'Y': i = (mob->mprog_target != NULL && can_see(mob, mob->mprog_target)) ? him_her[URANGE(0, - mob-> - mprog_target-> - sex, + mob->mprog_target->sex, 2)] : someone; break; @@ -1571,9 +1585,7 @@ case 'Z': i = (mob->mprog_target != NULL && can_see(mob, mob->mprog_target)) ? his_her[URANGE(0, - mob-> - mprog_target-> - sex, + mob->mprog_target->sex, 2)] : someones; break; @@ -1739,14 +1751,13 @@ case 'Q': i = (obj && obj->oprog_target != - NULL) ? (IS_NPC(obj->oprog_target) ? obj->oprog_target-> - short_descr : obj->oprog_target->name) : (room - && room-> - rprog_target - != - NULL) - ? (IS_NPC(room->rprog_target) ? room->rprog_target-> - short_descr : room->rprog_target->name) : someone; + NULL) ? (IS_NPC(obj->oprog_target) ? obj-> + oprog_target->short_descr : obj->oprog_target-> + name) : (room + && room->rprog_target != + NULL) ? (IS_NPC(room->rprog_target) ? room-> + rprog_target->short_descr : room-> + rprog_target->name) : someone; break; case 'j': bug("Obj/room received case 'j'", 0); @@ -1764,15 +1775,13 @@ case 'X': i = (obj && obj->oprog_target != NULL) ? he_she[URANGE(0, - obj-> - oprog_target-> - sex, 2)] : (room - && - room-> - rprog_target - != - NULL) - ? he_she[URANGE(0, room->rprog_target->sex, 2)] : someone; + obj->oprog_target->sex, + 2)] : (room + && + room->rprog_target + != + NULL) ? + he_she[URANGE(0, room->rprog_target->sex, 2)] : someone; break; case 'k': bug("received case 'k'.", 0); @@ -1794,15 +1803,13 @@ case 'Y': i = (obj && obj->oprog_target != NULL) ? him_her[URANGE(0, - obj-> - oprog_target-> - sex, 2)] : (room - && - room-> - rprog_target - != - NULL) - ? him_her[URANGE(0, room->rprog_target->sex, 2)] : someone; + obj->oprog_target->sex, + 2)] : (room + && + room->rprog_target + != + NULL) ? + him_her[URANGE(0, room->rprog_target->sex, 2)] : someone; break; case 'l': bug("received case 'l'.", 0); @@ -1824,15 +1831,13 @@ case 'Z': i = (obj && obj->oprog_target != NULL) ? his_her[URANGE(0, - obj-> - oprog_target-> - sex, 2)] : (room - && - room-> - rprog_target - != - NULL) - ? his_her[URANGE(0, room->rprog_target->sex, 2)] : someones; + obj->oprog_target->sex, + 2)] : (room + && + room->rprog_target + != + NULL) ? + his_her[URANGE(0, room->rprog_target->sex, 2)] : someones; break; case 'o': i = something; diff -ur src/nanny.c new/nanny.c --- src/nanny.c Wed Apr 9 23:26:58 2003 +++ new/nanny.c Wed Apr 23 00:11:35 2003 @@ -167,7 +167,7 @@ write_to_buffer(d, "\n\r", 2); - if (strcmp(crypt(argument, ch->pcdata->pwd), ch->pcdata->pwd)) + if (str_casecmp(crypt(argument, ch->pcdata->pwd), ch->pcdata->pwd)) { write_to_buffer(d, "Wrong password.\n\r", 0); close_socket(d); @@ -321,7 +321,7 @@ write_to_buffer(d, "\n\r", 2); - if (strcmp(crypt(argument, ch->pcdata->pwd), ch->pcdata->pwd)) + if (str_casecmp(crypt(argument, ch->pcdata->pwd), ch->pcdata->pwd)) { write_to_buffer(d, "Passwords don't match.\n\rRetype password: ", 0); d->connected = CON_GET_NEW_PASSWORD; @@ -351,7 +351,7 @@ one_argument(argument, arg); - if (!strcmp(arg, "help")) + if (!str_cmp(arg, "help")) { argument = one_argument(argument, arg); if (argument[0] == '\0') diff -ur src/olc.c new/olc.c --- src/olc.c Wed Apr 9 23:26:59 2003 +++ new/olc.c Wed Apr 23 00:11:35 2003 @@ -596,6 +596,9 @@ {"age", (void *) &xArea.age, olced_number, NULL}, {"reset", NULL, olced_olded, (const void *) aedit_reset}, {"security", (void *) &xArea.security, olced_number, NULL}, + {"lvlmsg", (void *) &xArea.lvl_comment, olced_str, NULL}, + {"minlvl", (void *) &xArea.min_level, olced_number, NULL}, + {"maxlvl", (void *) &xArea.max_level, olced_number, NULL}, {"builder", NULL, olced_olded, (const void *) aedit_builder}, {"vnum", NULL, olced_olded, (const void *) aedit_vnum}, {"lvnum", NULL, olced_olded, (const void *) aedit_lvnum}, @@ -1629,7 +1632,7 @@ clean_area_links(pArea); unlink(pArea->file_name); - UNLINK(pArea, area_first, area_last, next, prev); + unlink_area(pArea); free_area(pArea); do_asave(NULL, "changed"); chprintln(ch, "Area deleted."); @@ -2106,14 +2109,6 @@ chprintln(ch, "Syntax: raedit create\n\r raedit <race name>"); return; } - - pRace = race_lookup(arg); - - if (!pRace || IS_NULLSTR(pRace->name)) - { - chprintln(ch, "That race does not exist."); - return; - } else if (!str_cmp(arg, "save")) { save_races(); @@ -2133,6 +2128,11 @@ return; } + else if ((pRace = race_lookup(arg)) == NULL) + { + chprintln(ch, "That race does not exist."); + return; + } edit_start(ch, pRace, ED_RACE); return; @@ -2582,8 +2582,9 @@ * -------------------------- */ { - if (str_cmp(arg4, "none") - && flag_value(wear_loc_flags, arg4) == -1) + int wear; + + if ((wear = flag_value(wear_loc_flags, arg4)) == NO_FLAG) { chprintln(ch, "Resets: '? wear-loc'"); return; @@ -2594,16 +2595,11 @@ return; } pReset->arg1 = atol(arg3); - if (!str_cmp(arg4, "none")) - { - pReset->arg3 = WEAR_NONE; + pReset->arg3 = wear; + if (pReset->arg3 == WEAR_NONE) pReset->command = 'G'; - } else - { - pReset->arg3 = flag_value(wear_loc_flags, arg4); pReset->command = 'E'; - } } } add_reset(ch->in_room, pReset, atol(arg1)); diff -ur src/olc_act.c new/olc_act.c --- src/olc_act.c Wed Apr 9 23:26:58 2003 +++ new/olc_act.c Wed Apr 23 00:11:35 2003 @@ -55,13 +55,13 @@ #define ALT_FLAGVALUE_SET( _blargh, _table, _arg ) \ { \ flag_t blah = flag_value( _table, _arg ); \ - _blargh = blah; \ + _blargh = UMAX(0, blah); \ } #define ALT_FLAGVALUE_TOGGLE( _blargh, _table, _arg ) \ { \ flag_t blah = flag_value( _table, _arg ); \ - _blargh ^= blah; \ + TOGGLE_BIT(_blargh, UMAX(0, blah)); \ } /* Return TRUE if area changed, FALSE if not. */ @@ -813,15 +813,16 @@ EDIT_AREA(ch, pArea); chprintf(ch, "%s\n\r", - stringf(0, ALIGN_CENTER, "-", + stringf(ch, 0, ALIGN_CENTER, "-", FORMATF("[ %s: %s ]", olc_ed_name(ch), olc_ed_vnum(ch)))); chprintlnf(ch, "Name: [%5d] %s", pArea->vnum, pArea->name); #if 0 /* ROM OLC */ chprintlnf(ch, "Recall: [%5d] %s", pArea->recall, - get_room_index(pArea->recall) ? get_room_index(pArea->recall)-> - name : "none"); + get_room_index(pArea->recall) ? get_room_index(pArea-> + recall)->name : + "none"); #endif /* ROM */ chprintlnf(ch, "File: %s", pArea->file_name); @@ -840,7 +841,7 @@ chprintlnf(ch, "Flags: [%s]", flag_string(area_flags, pArea->area_flags)); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return FALSE; } @@ -862,7 +863,7 @@ AREA_DATA *pArea; pArea = new_area(); - LINK(pArea, area_first, area_last, next, prev); + add_area(pArea); top_area++; edit_start(ch, pArea, ED_AREA); SET_BIT(pArea->area_flags, AREA_ADDED); @@ -1021,6 +1022,12 @@ return TRUE; /* The lower value has been set. */ } + if (iupper > MAX_VNUM) + { + chprintlnf(ch, "Vnum can't be higher than %d.", MAX_VNUM); + return FALSE; + } + pArea->max_vnum = iupper; chprintln(ch, "Upper vnum set."); @@ -1062,6 +1069,12 @@ return FALSE; } + if (ilower > MAX_VNUM) + { + chprintlnf(ch, "Vnum can't be higher than %d", MAX_VNUM); + return FALSE; + } + pArea->min_vnum = ilower; chprintln(ch, "Lower vnum set."); return TRUE; @@ -1127,8 +1140,8 @@ buf1[0] = '\0'; strcat(buf1, - stringf(0, ALIGN_CENTER, "-", FORMATF("[ %s: %s ]", olc_ed_name(ch), - olc_ed_vnum(ch)))); + stringf(ch, 0, ALIGN_CENTER, "-", + FORMATF("[ %s: %s ]", olc_ed_name(ch), olc_ed_vnum(ch)))); strcat(buf1, "\n\r"); sprintf(buf, "Description:\n\r%s", pRoom->description); @@ -1282,7 +1295,7 @@ } } - strcat(buf1, draw_line(NULL, 0)); + strcat(buf1, draw_line(ch, NULL, 0)); chprintln(ch, buf1); if (pRoom->first_rprog) { @@ -1322,7 +1335,7 @@ * Set the exit flags, needs full argument. * ---------------------------------------- */ - if ((value = flag_value(exit_flags, argument)) > 0) + if ((value = flag_value(exit_flags, argument)) != NO_FLAG) { ROOM_INDEX_DATA *pToRoom; int rev; /* ROM OLC */ @@ -1864,7 +1877,7 @@ /* * Make sure the location on mobile is valid. */ - if ((pwear_loc = flag_value(wear_loc_flags, argument)) == -1) + if ((pwear_loc = flag_value(wear_loc_flags, argument)) == NO_FLAG) { chprintln(ch, "REdit: Invalid wear_loc. '? wear-loc'"); return FALSE; @@ -2067,8 +2080,9 @@ "[v4] Weight Mult [%ld]", obj->value[0], flag_string(container_flags, obj->value[1]), get_obj_index(obj->value[2]) ? get_obj_index(obj->value - [2])->short_descr - : "none", obj->value[2], obj->value[3], obj->value[4]); + [2])-> + short_descr : "none", obj->value[2], obj->value[3], + obj->value[4]); break; case ITEM_DRINK_CON: @@ -2310,7 +2324,7 @@ pObj->value[0] = atol(argument); break; case 1: - if ((value = flag_value(container_flags, argument)) <= 0) + if ((value = flag_value(container_flags, argument)) != NO_FLAG) TOGGLE_BIT(pObj->value[1], value); else { @@ -2452,7 +2466,7 @@ EDIT_OBJ(ch, pObj); chprintf(ch, "%s\n\r", - stringf(0, ALIGN_CENTER, "-", + stringf(ch, 0, ALIGN_CENTER, "-", FORMATF("[ %s: %s ]", olc_ed_name(ch), olc_ed_vnum(ch)))); chprintlnf(ch, "Name: [%s]\n\rArea: [%5d] %s", @@ -2512,7 +2526,7 @@ show_obj_values(ch, pObj); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); if (pObj->first_oprog) { int cnt; @@ -2558,7 +2572,7 @@ return FALSE; } - if ((value = flag_value(apply_flags, loc)) < 0) /* Hugin */ + if ((value = flag_value(apply_flags, loc)) == NO_FLAG) /* Hugin */ { chprintln(ch, "Valid affects are:"); show_help(ch, "apply"); @@ -2721,14 +2735,14 @@ argument = one_argument(argument, mod); one_argument(argument, bvector); - if (type[0] == '\0' || (typ = flag_value(apply_types, type)) < 0) + if (type[0] == '\0' || (typ = flag_value(apply_types, type)) == NO_FLAG) { chprintln(ch, "Invalid apply type. Valid apply types are:"); show_help(ch, "apptype"); return FALSE; } - if (loc[0] == '\0' || (value = flag_value(apply_flags, loc)) < 0) + if (loc[0] == '\0' || (value = flag_value(apply_flags, loc)) == NO_FLAG) { chprintln(ch, "Valid applys are:"); show_help(ch, "apply"); @@ -2736,7 +2750,7 @@ } if (bvector[0] == '\0' || - (bv = flag_value(bitvector_type[typ].table, bvector)) <= 0) + (bv = flag_value(bitvector_type[typ].table, bvector)) == NO_FLAG) { chprintln(ch, "Invalid bitvector type."); chprintln(ch, "Valid bitvector types are:"); @@ -2902,7 +2916,7 @@ EDIT_MOB(ch, pMob); chprintf(ch, "%s\n\r", - stringf(0, ALIGN_CENTER, "-", + stringf(ch, 0, ALIGN_CENTER, "-", FORMATF("[ %s: %s ]", olc_ed_name(ch), olc_ed_vnum(ch)))); chprintlnf(ch, "Name: [%s]\n\rArea: [%5d] %s", @@ -3038,7 +3052,7 @@ } } - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return FALSE; } @@ -3327,7 +3341,7 @@ argument = one_argument(argument, arg); - if (!strcmp(arg, "show") && is_number(argument)) + if (!str_cmp(arg, "show") && is_number(argument)) { if (atol(argument) == 0) { @@ -3382,7 +3396,7 @@ return FALSE; } - if ((value = flag_value(mprog_flags, trigger)) <= 0) + if ((value = flag_value(mprog_flags, trigger)) == NO_FLAG) { chprintln(ch, "Valid flags are:"); show_help(ch, "mprog"); @@ -3470,7 +3484,7 @@ return FALSE; } - if ((value = flag_value(oprog_flags, trigger)) == 0) + if ((value = flag_value(oprog_flags, trigger)) == NO_FLAG) { chprintln(ch, "Valid flags are:"); show_help(ch, "oprog"); @@ -3558,7 +3572,7 @@ return FALSE; } - if ((value = flag_value(rprog_flags, trigger)) == 0) + if ((value = flag_value(rprog_flags, trigger)) == NO_FLAG) { chprintln(ch, "Valid flags are:"); show_help(ch, "rprog"); @@ -4013,15 +4027,13 @@ return FALSE; } - if (str_cmp(argument, "none") - && (value = flag_value(type_flags, argument)) == -1) + if ((value = flag_value(type_flags, argument)) == NO_FLAG) { chprintln(ch, "MEdit: That type of item is not known."); return FALSE; } - pMob->pShop->buy_type[atoi(arg1)] = - !str_cmp(argument, "none") ? 0 : value; + pMob->pShop->buy_type[atoi(arg1)] = value; chprintln(ch, "Shop type set."); return TRUE; diff -ur src/olc_class.c new/olc_class.c --- src/olc_class.c Wed Apr 9 23:26:59 2003 +++ new/olc_class.c Wed Apr 23 00:11:35 2003 @@ -202,7 +202,7 @@ EDIT_CLASS(ch, pClass); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); chprintlnf(ch, "Name : %s", pClass->name); chprintlnf(ch, "Who Name : %s", pClass->who_name); chprintlnf(ch, "Prime Attribute: %s", stat_name(pClass->attr_prime)); @@ -219,7 +219,7 @@ chprintlnf(ch, "Uses spells : %s", pClass->fMana ? "TRUE" : "FALSE"); chprintlnf(ch, "Base Group : %s", pClass->base_group); chprintlnf(ch, "Default Group : %s", pClass->default_group); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return TRUE; } diff -ur src/olc_cmd.c new/olc_cmd.c --- src/olc_cmd.c Wed Apr 9 23:26:59 2003 +++ new/olc_cmd.c Wed Apr 23 00:11:35 2003 @@ -53,7 +53,7 @@ else if (!str_prefix(argument, "null")) { chprintln(ch, "NULL commands:"); - for (i = cmd_first; i; i = i->next) + for (i = cmd_first_sorted; i; i = i->next_sort) { if (i->do_fun == do_null) { @@ -72,10 +72,10 @@ bool any = FALSE; chprintln(ch, "Functions missing command entries:"); - for (j = 0; dofun_table[j].fun != NULL; i++) + for (j = 0; dofun_table[j].fun != NULL; j++) { found = FALSE; - for (cmd = cmd_first; cmd; cmd = cmd->next) + for (cmd = cmd_first_sorted; cmd; cmd = cmd->next_sort) { if (dofun_table[j].fun == cmd->do_fun) { @@ -99,7 +99,7 @@ else if ((fun = do_fun_lookup(argument)) != NULL) { chprintlnf(ch, "%s commands:", argument); - for (i = cmd_first; i; i = i->next) + for (i = cmd_first_sorted; i; i = i->next_sort) { if (i->do_fun == fun) { @@ -119,7 +119,7 @@ EDIT_CMD(ch, pCmd); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); chprintlnf(ch, "Name : %s", pCmd->name); chprintlnf(ch, "DoFun : %s", do_fun_name(pCmd->do_fun)); chprintlnf(ch, "Position : %s", @@ -127,7 +127,7 @@ chprintlnf(ch, "Level : %d", pCmd->level); chprintlnf(ch, "Log : %s", flag_string(log_flags, pCmd->log)); chprintlnf(ch, "fShow : %s", !pCmd->show ? "FALSE" : "TRUE"); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return TRUE; } @@ -144,7 +144,6 @@ pCmd = new_command(); replace_string(pCmd->name, buf); add_command(pCmd); - LINK(pCmd, cmd_first, cmd_last, next, prev); edit_start(ch, pCmd, ED_CMD); chprintln(ch, "Command created."); @@ -199,7 +198,7 @@ else { - UNLINK(pCmd, cmd_first, cmd_last, next, prev); + unlink_command(pCmd); free_command(pCmd); pCmd = cmd_first; edit_start(ch, pCmd, ED_CMD); @@ -258,9 +257,9 @@ INSERT(pCmd, iCmd, cmd_first, next, prev); for (tmp = cmd_first; tmp; tmp = tmp->next) - unlink_command(tmp); + unhash_command(tmp); for (tmp = cmd_first; tmp; tmp = tmp->next) - add_command(tmp); + hash_command(tmp); chprintln(ch, "Command moved."); @@ -283,7 +282,7 @@ } if (arg1[0] != pCmd->name[0]) { - unlink_command(pCmd); + unhash_command(pCmd); relocate = TRUE; } else @@ -291,7 +290,7 @@ replace_string(pCmd->name, arg1); if (relocate) - add_command(pCmd); + hash_command(pCmd); chprintln(ch, "Name set."); return TRUE; } diff -ur src/olc_deity.c new/olc_deity.c --- src/olc_deity.c Wed Apr 9 23:26:59 2003 +++ new/olc_deity.c Wed Apr 23 00:11:35 2003 @@ -121,11 +121,11 @@ EDIT_DEITY(ch, pDeity); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); chprintlnf(ch, "Name : %s", pDeity->name); chprintlnf(ch, "Desc : %s", pDeity->desc); chprintlnf(ch, "Skill : %s", IS_STRSET(pDeity->skillname)); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return TRUE; } diff -ur src/olc_group.c new/olc_group.c --- src/olc_group.c Wed Apr 9 23:26:59 2003 +++ new/olc_group.c Wed Apr 23 00:11:35 2003 @@ -47,7 +47,7 @@ EDIT_GROUP(ch, pGroup); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); chprintlnf(ch, "Name: %s", pGroup->name); chprintln(ch, "Class Ratings:"); for (x = 0; x < maxClass; x++) @@ -57,7 +57,7 @@ for (x = 0; pGroup->spells[x] != NULL; x++) chprintlnf(ch, "%2d) %s", x + 1, pGroup->spells[x]); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return TRUE; } diff -ur src/olc_mpcode.c new/olc_mpcode.c --- src/olc_mpcode.c Wed Apr 9 23:26:59 2003 +++ new/olc_mpcode.c Wed Apr 23 00:11:35 2003 @@ -745,12 +745,12 @@ buffer = new_buf(); - add_buf(buffer, draw_line(NULL, 0)); + add_buf(buffer, draw_line(ch, NULL, 0)); add_buf(buffer, "\n\r"); sprintf(buf, "Vnum: [%ld]\n\r" "Code:\n\r%s", pMcode->vnum, pMcode->code); add_buf(buffer, buf); - add_buf(buffer, draw_line(NULL, 0)); + add_buf(buffer, draw_line(ch, NULL, 0)); add_buf(buffer, "\n\r"); page_to_char(buf_string(buffer), ch); free_buf(buffer); @@ -767,12 +767,12 @@ buffer = new_buf(); - add_buf(buffer, draw_line(NULL, 0)); + add_buf(buffer, draw_line(ch, NULL, 0)); add_buf(buffer, "\n\r"); sprintf(buf, "Vnum: [%ld]\n\r" "Code:\n\r%s", pOcode->vnum, pOcode->code); add_buf(buffer, buf); - add_buf(buffer, draw_line(NULL, 0)); + add_buf(buffer, draw_line(ch, NULL, 0)); add_buf(buffer, "\n\r"); page_to_char(buf_string(buffer), ch); free_buf(buffer); @@ -788,12 +788,12 @@ EDIT_RPCODE(ch, pRcode); buffer = new_buf(); - add_buf(buffer, draw_line(NULL, 0)); + add_buf(buffer, draw_line(ch, NULL, 0)); add_buf(buffer, "\n\r"); sprintf(buf, "Vnum: [%ld]\n\r" "Code:\n\r%s", pRcode->vnum, pRcode->code); add_buf(buffer, buf); - add_buf(buffer, draw_line(NULL, 0)); + add_buf(buffer, draw_line(ch, NULL, 0)); add_buf(buffer, "\n\r"); page_to_char(buf_string(buffer), ch); free_buf(buffer); diff -ur src/olc_race.c new/olc_race.c --- src/olc_race.c Wed Apr 9 23:26:59 2003 +++ new/olc_race.c Wed Apr 23 00:11:35 2003 @@ -87,7 +87,7 @@ EDIT_RACE(ch, pRace); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); chprintlnf(ch, "Name:\t[%s] Who Name: [%s] PC Race: [%s]", pRace->name, pRace->who_name, pRace->pc_race == 0 ? "{WNO{w" : "{RYES{w"); @@ -141,7 +141,7 @@ chprintlnf(ch, "Size:\t[%s]", flag_string(size_flags, pRace->size)); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return FALSE; } diff -ur src/olc_save.c new/olc_save.c --- src/olc_save.c Wed Apr 9 23:26:59 2003 +++ new/olc_save.c Wed Apr 23 00:11:35 2003 @@ -978,6 +978,11 @@ fprintf(fp, "Builders %s~\n", fix_string(pArea->builders)); fprintf(fp, "VNUMs %ld %ld\n", pArea->min_vnum, pArea->max_vnum); fprintf(fp, "Credits %s~\n", pArea->credits); + if (!IS_NULLSTR(pArea->lvl_comment)) + fprintf(fp, "LvlComment %s~\n", pArea->lvl_comment); + fprintf(fp, "MinLevel %d\n", pArea->min_level); + fprintf(fp, "MaxLevel %d\n", pArea->max_level); + fprintf(fp, "Version %d\n", AREA_VERSION); fprintf(fp, "Security %d\n", pArea->security); fprintf(fp, "Flags %s\n", fwrite_flags(pArea->area_flags)); fprintf(fp, "End\n\n\n\n"); diff -ur src/olc_skill.c new/olc_skill.c --- src/olc_skill.c Wed Apr 9 23:26:59 2003 +++ new/olc_skill.c Wed Apr 23 00:11:35 2003 @@ -113,7 +113,7 @@ EDIT_SKILL(ch, pSkill); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); chprintlnf(ch, "Name: %s", pSkill->name); chprintln(ch, "Class Levels:"); @@ -135,7 +135,7 @@ chprintlnf(ch, "Damage Noun: %s", IS_STRSET(pSkill->noun_damage)); chprintlnf(ch, "Message Off: %s", IS_STRSET(pSkill->msg_off)); chprintlnf(ch, "Message Obj: %s", IS_STRSET(pSkill->msg_obj)); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return TRUE; } diff -ur src/olc_social.c new/olc_social.c --- src/olc_social.c Wed Apr 9 23:26:59 2003 +++ new/olc_social.c Wed Apr 23 00:11:35 2003 @@ -78,7 +78,7 @@ } chprintf(ch, "%s\n\r", - stringf(0, ALIGN_CENTER, "-", + stringf(ch, 0, ALIGN_CENTER, "-", FORMATF("[ %s: %s ]", olc_ed_name(ch), olc_ed_vnum(ch)))); chprintf(ch, "Name : %s\n\r" @@ -94,7 +94,7 @@ IS_STRSET(pSocial->vict_found), IS_STRSET(pSocial->char_auto), IS_STRSET(pSocial->others_auto)); - chprintln(ch, draw_line(NULL, 0)); + chprintln(ch, draw_line(ch, NULL, 0)); return TRUE; } @@ -113,7 +113,7 @@ return FALSE; } - UNLINK(pSocial, social_first, social_last, next, prev); + unlink_social(pSocial); free_social(pSocial); edit_done(ch); chprintln(ch, "Social deleted."); @@ -140,7 +140,6 @@ pSocial = new_social(); replace_string(pSocial->name, arg); add_social(pSocial); - LINK(pSocial, social_first, social_last, next, prev); edit_start(ch, pSocial, ED_SOCIAL); chprintln(ch, "Social created."); return TRUE; @@ -255,7 +254,7 @@ } if (arg1[0] != psocial->name[0]) { - unlink_social(psocial); + unhash_social(psocial); relocate = TRUE; } else @@ -263,7 +262,7 @@ replace_string(psocial->name, arg1); if (relocate) - add_social(psocial); + hash_social(psocial); chprintln(ch, "Name set."); return TRUE; } diff -ur src/proto.h new/proto.h --- src/proto.h Wed Apr 9 23:26:59 2003 +++ new/proto.h Wed Apr 23 00:11:35 2003 @@ -59,10 +59,12 @@ const char *color_to_tilde args((const char *str)); const char *tilde_to_color args((const char *str)); unsigned int strlen_color args((const char *string)); -const char *draw_line args((char *fill, int len)); +const char *draw_line args((CHAR_DATA * ch, char *fill, int len)); const char *smash_colour args((const char *str)); const char *stringf -args((int length, int align, const char *fill, const char *string)); +args( + (CHAR_DATA * ch, int length, int align, const char *fill, + const char *string)); bool is_ansi_printed_char args((char c)); void public_ch args((CHAR_DATA * ch, const char *argument, @@ -171,7 +173,10 @@ int dice args((int number, int size)); int interpolate args((int level, int value_00, int value_32)); void smash_tilde args((const char *str)); -bool str_cmp args((const char *astr, const char *bstr)); +int str_cmp args((const char *astr, const char *bstr)); +int str_casecmp args((const char *astr, const char *bstr)); +int str_ncmp args((const char *astr, const char *bstr, size_t len)); +int str_ncasecmp args((const char *astr, const char *bstr, size_t len)); bool str_prefix args((const char *astr, const char *bstr)); bool str_infix args((const char *astr, const char *bstr)); bool str_suffix args((const char *astr, const char *bstr)); @@ -453,14 +458,11 @@ /*explored.c */ void fread_rle args((char *explored, FILE * fp)); void fwrite_rle args((char *explored, FILE * fp)); -int arearooms args((CHAR_DATA * ch)); -void setbit args((char *explored, vnum_t pIndex)); -void rembit args((char *explored, vnum_t pIndex)); -int getbit args((char *explored, vnum_t pIndex)); +int arearooms args((AREA_DATA * area)); void update_explored args((CHAR_DATA * ch)); int bitcount args((char ch)); int roomcount args((CHAR_DATA * ch)); -int areacount args((CHAR_DATA * ch)); +int areacount args((CHAR_DATA * ch, AREA_DATA * area)); bool emptystring args((const char *)); void draw_map args((CHAR_DATA * ch, const char *desc)); @@ -557,10 +559,12 @@ int check_buddy args((CHAR_DATA * ch, CHAR_DATA * fch)); -int sort_socials args((void)); -int sort_helps args((void)); int srt_skills args((const void *p1, const void *p2)); +void add_help args((HELP_DATA * help)); +void add_area args((AREA_DATA * pArea)); +void unlink_area args((AREA_DATA * pArea)); + char *FORMATF args((const char *formatbuf, ...)) __attribute__ ((format(printf, 1, 2))); void *alloc_perm args((size_t sMem)); @@ -569,14 +573,24 @@ void update_members args((CHAR_DATA * ch, bool pdelete)); void load_members args((void)); -void build_command_hash args((void)); -void build_social_hash args((void)); void unlink_command args((CMD_DATA * command)); void add_command args((CMD_DATA * command)); +void unhash_command args((CMD_DATA * command)); +void hash_command args((CMD_DATA * command)); void unlink_social args((SOCIAL_DATA * social)); void add_social args((SOCIAL_DATA * social)); +void unhash_social args((SOCIAL_DATA * social)); +void hash_social args((SOCIAL_DATA * social)); + SOCIAL_DATA *find_social args((const char *command)); + +void set_on_off +args( + (CHAR_DATA * ch, flag_t * flags, flag_t flag, const char *on, + const char *off)); +void print_on_off +args((CHAR_DATA * ch, bool is_set, const char *cmd, const char *desc)); #undef CD #undef MID diff -ur src/quest.c new/quest.c --- src/quest.c Wed Apr 9 23:26:59 2003 +++ new/quest.c Wed Apr 23 00:11:35 2003 @@ -611,7 +611,7 @@ * build up quest points :> Make the item worth their while. */ - if (!strcmp(arg1, "list")) + if (!str_cmp(arg1, "list")) { act("$n asks $N for a list of quest items.", ch, NULL, questman, TO_ROOM); @@ -626,7 +626,7 @@ return; } - else if (!strcmp(arg1, "buy")) + else if (!str_cmp(arg1, "buy")) { if (arg2[0] == '\0') @@ -693,7 +693,7 @@ return; } - else if (!strcmp(arg1, "sell")) + else if (!str_cmp(arg1, "sell")) { if (arg2[0] == '\0') { @@ -734,7 +734,7 @@ do_mob_tell(ch, questman, buf); return; } - else if (!strcmp(arg1, "identify")) + else if (!str_cmp(arg1, "identify")) { if (arg2[0] == '\0') @@ -782,7 +782,7 @@ return; } - else if (!strcmp(arg1, "request")) + else if (!str_cmp(arg1, "request")) { act("$n asks $N for a quest.", ch, NULL, questman, TO_ROOM); act("You ask $N for a quest.", ch, NULL, questman, TO_CHAR); @@ -809,7 +809,7 @@ generate_quest(ch, questman); return; } - else if (!strcmp(arg1, "complete")) + else if (!str_cmp(arg1, "complete")) { if (ch->pcdata->questgiver != questman->pIndexData->vnum) { @@ -905,7 +905,7 @@ return; } - else if (!strcmp(arg1, "quit") || !strcmp(arg1, "fail")) + else if (!str_cmp(arg1, "quit") || !str_cmp(arg1, "fail")) { act("$n informs $N $e wishes to quit $s quest.", ch, NULL, questman, TO_ROOM); diff -ur src/recycle.c new/recycle.c --- src/recycle.c Wed Apr 9 23:26:59 2003 +++ new/recycle.c Wed Apr 23 00:11:35 2003 @@ -83,6 +83,8 @@ d->run_buf = NULL; d->run_head = NULL; d->outsize = 2000; + d->scr_width = 80; + d->scr_height = 25; alloc_mem(d->outbuf, char, d->outsize); return d; } diff -ur src/save.c new/save.c --- src/save.c Wed Apr 9 23:26:59 2003 +++ new/save.c Wed Apr 23 00:11:35 2003 @@ -731,35 +731,14 @@ } - /* RT initialize skills */ - - if (found && ch->version < 2) /* need to add the new skills */ - { - group_add(ch, "rom basics", FALSE); - add_base_groups(ch); - add_default_groups(ch); - ch->pcdata->learned[gsn_recall] = 50; - } - - /* fix levels */ - if (found && ch->version < 6 && (ch->level > 51 || ch->trust > 51)) - { - ch->level += 149; - ch->trust += 149; - } - - /* ream gold */ - if (found && ch->version < 4) - { - ch->gold /= 100; - } - if (found) + { /* Change this to set player levels when changing max level The first number is the OLD max level, the second is the - NEW max level, and the third is the version that should be + NEW max level, and the third is the new version that should be in the pfile after the change. */ set_player_level(ch, 0, 0, 0); + } return found; } diff -ur src/skills.c new/skills.c --- src/skills.c Wed Apr 9 23:26:59 2003 +++ new/skills.c Wed Apr 23 00:11:35 2003 @@ -728,7 +728,7 @@ return TRUE; } - if (!strcmp(arg, "drop")) + if (!str_cmp(arg, "drop")) { if (argument[0] == '\0') { diff -ur src/string.c new/string.c --- src/string.c Wed Apr 9 23:26:59 2003 +++ new/string.c Wed Apr 23 00:11:35 2003 @@ -646,6 +646,11 @@ { char cEnd; + if (IS_NULLSTR(argument)) + { + arg_first[0] = '\0'; + return ""; + } while (*argument == ' ') argument++; @@ -1004,7 +1009,8 @@ return (result); } -const char *stringf(int length, int align, const char *fill, const char *string) +const char *stringf(CHAR_DATA * ch, int length, int align, const char *fill, + const char *string) { const char *count_string; char temp; @@ -1027,7 +1033,10 @@ if (length <= 0) { - length = 79; + if (!ch || !ch->desc) + length = 79; + else + length = ch->desc->scr_width - 1; } while (*count_string && nCount != length) @@ -1177,7 +1186,7 @@ /* Can use colour coded fills like eg. draw_line("{w-{W+{R*{W+", 0); */ -const char *draw_line(char *fill, int len) +const char *draw_line(CHAR_DATA * ch, char *fill, int len) { static char buf_new[5][MSL]; static int i; @@ -1186,12 +1195,14 @@ char lbuf[MSL]; int count; unsigned int m; - char *result = buf_new[i]; + char *result; // rotate buffers ++i; i %= 5; + result = buf_new[i]; + result[0] = '\0'; if (!fill) @@ -1199,7 +1210,10 @@ if (len <= 0) { - len = 79; + if (!ch || !ch->desc) + len = 79; + else + len = ch->desc->scr_width - 1; } mod = len % strlen_color(fill); len /= strlen_color(fill); @@ -1280,7 +1294,7 @@ i %= 10; va_start(args, formatbuf); - vsnprintf(buf[i], MSL * 3, formatbuf, args); + vsnprintf(buf[i], sizeof(buf[i]), formatbuf, args); va_end(args); return buf[i]; diff -ur src/tables.c new/tables.c --- src/tables.c Wed Apr 9 23:26:59 2003 +++ new/tables.c Wed Apr 23 00:11:35 2003 @@ -430,6 +430,7 @@ }; const struct flag_type type_flags[] = { + {"none", ITEM_NONE, FALSE}, {"light", ITEM_LIGHT, TRUE}, {"scroll", ITEM_SCROLL, TRUE}, {"wand", ITEM_WAND, TRUE}, diff -ur src/tablesave.c new/tablesave.c --- src/tablesave.c Wed Apr 9 23:26:59 2003 +++ new/tablesave.c Wed Apr 23 00:11:35 2003 @@ -413,6 +413,7 @@ bool *pbool; int cnt = 0, i; RANK_DATA *rdata; + flag_t ftemp; while (str_cmp((word = fread_word(fp)), "#END")) { @@ -465,7 +466,8 @@ (flag_t *) ((int) temp->puntero_field - (int) typebase + (int) puntero); string = fread_string(fp); - *pentero = flag_value(flagtable, string); + ftemp = flag_value(flagtable, string); + *pentero = UMAX(0, ftemp); free_string(string); found = TRUE, cnt++; break; @@ -476,7 +478,8 @@ (int *) ((int) temp->puntero_field - (int) typebase + (int) puntero); string = fread_string(fp); - *pint = flag_value(flagtable, string); + ftemp = flag_value(flagtable, string); + *pint = UMAX(0, ftemp); free_string(string); found = TRUE, cnt++; break; @@ -771,8 +774,8 @@ fprintf(fp, "%s\t\t", temp->field); for (i = 0; i < - (temp->argument ? (int) temp-> - argument : *(int *) temp->argument2); i++) + (temp->argument ? (int) temp->argument : *(int *) temp-> + argument2); i++) fprintf(fp, "%d ", pbool[i] == TRUE ? 1 : 0); fprintf(fp, "@\n"); break; @@ -864,7 +867,7 @@ i = new_command(); *i = emptycmd; load_struct(fp, &cmd, cmdsavetable, i); - LINK(i, cmd_first, cmd_last, next, prev); + add_command(i); } } @@ -1269,7 +1272,7 @@ pSocial = new_social(); *pSocial = socialzero; load_struct(fp, &soc, socialsavetable, pSocial); - LINK(pSocial, social_first, social_last, next, prev); + add_social(pSocial); } file_close(fp); diff -ur src/telnet.c new/telnet.c --- src/telnet.c Wed Apr 9 23:26:59 2003 +++ new/telnet.c Wed Apr 23 00:11:35 2003 @@ -293,8 +293,8 @@ t2 = (unsigned char) inbuf[i + 4]; y = t2 + (t1 * 16); - d->scr_width = URANGE(1, x, 150); - d->scr_height = URANGE(1, y, 80); + d->scr_width = URANGE(10, x, 250); + d->scr_height = URANGE(10, y, 250); return; } diff -ur src/war.c new/war.c --- src/war.c Wed Apr 9 23:26:59 2003 +++ new/war.c Wed Apr 23 00:11:35 2003 @@ -436,9 +436,9 @@ } else if (!str_cmp(arg, "info")) { - stringf(0, ALIGN_CENTER, "-", "[ {WWAR INFO{g ]"); + stringf(ch, 0, ALIGN_CENTER, "-", "[ {WWAR INFO{g ]"); chprintlnf(ch, "{g%s{x", - stringf(0, ALIGN_CENTER, "-", "[ {WWAR INFO{g ]")); + stringf(ch, 0, ALIGN_CENTER, "-", "[ {WWAR INFO{g ]")); chprintlnf(ch, "{RStarted by : {W%s", IS_NULLSTR(war_info.who) ? "Unknown" : war_info.who); chprintlnf(ch, "{RFighting : {W%d player%s.", war_info.inwar, @@ -450,7 +450,7 @@ war_info.timer); chprintlnf(ch, "{RType : {W%s war.{x", wartype_name(war_info.wartype)); - chprintlnf(ch, "{g%s{x", draw_line(NULL, 0)); + chprintlnf(ch, "{g%s{x", draw_line(ch, NULL, 0)); return; } else if (!str_cmp(arg, "status")) @@ -459,7 +459,7 @@ bool found = FALSE; chprintlnf(ch, "{g%s{x", - stringf(0, ALIGN_CENTER, "-", "[ {WWAR COMBATENTS{g ]")); + stringf(ch, 0, ALIGN_CENTER, "-", "[ {WWAR COMBATENTS{g ]")); for (wch = player_first; wch != NULL; wch = wch->next_player) { if (IS_SET(wch->act, PLR_WAR)) @@ -475,7 +475,7 @@ } if (!found) chprintln(ch, "No one in the war yet."); - chprintf(ch, "{g%s{x\n\r", draw_line(NULL, 0)); + chprintf(ch, "{g%s{x\n\r", draw_line(ch, NULL, 0)); return; } else if (!str_cmp(arg, "join")) diff -ur src/webserver.c new/webserver.c --- src/webserver.c Wed Apr 9 23:26:59 2003 +++ new/webserver.c Wed Apr 23 00:11:35 2003 @@ -191,8 +191,8 @@ WPWD_DATA *current; for (current = wpwd_first; current; current = current->next) - if (!strcasecmp(current->name, username)) - if (!strcasecmp(current->passw, crypt(password, username))) + if (!str_casecmp(current->name, username)) + if (!str_casecmp(current->passw, crypt(password, username))) return TRUE; return FALSE; @@ -459,7 +459,7 @@ va_start(args, fmt); - len = vsnprintf(buf, 2 * MSL, fmt, args); + len = vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); if (len > 0) @@ -491,7 +491,7 @@ char *p = '\0'; if (lastcolor == TRUE) - strncpy(out, "</FONT>", MSL); + strcpy(out, "</FONT>"); else out[0] = '\0'; @@ -500,7 +500,7 @@ case '\0': break; case ' ': - strncpy(code, " ", MIL); + strcpy(code, " "); break; default: case 'x': @@ -557,7 +557,7 @@ SET_WWW_FONT(code, "gray"); break; case '-': - strncpy(code, "~", MIL); + strcpy(code, "~"); break; case '`': switch (number_range(1, 14)) @@ -608,7 +608,7 @@ } break; case ANSI_KEY: - strncpy(code, "{", MIL); + strcpy(code, "{"); break; } @@ -1170,8 +1170,8 @@ else if (victim->in_room == victim->fighting->in_room) { strcat(buf, - IS_NPC(victim) ? victim->fighting-> - short_descr : victim->fighting->name); + IS_NPC(victim) ? victim->fighting->short_descr : victim-> + fighting->name); strcat(buf, "."); } else @@ -1361,8 +1361,8 @@ if (tn != -1) { - snprintf(buf2, MSL, "%s, ", group_table[gn].spells[sn]); - strncat(buf, buf2, MSL); + sprintf(buf2, "%s, ", group_table[gn].spells[sn]); + strcat(buf, buf2); displayed[tn] = TRUE; } @@ -1371,7 +1371,7 @@ buf[(strlen(buf) - 2)] = '\0'; else - strncpy(buf, "None", MSL); + strcpy(buf, "None"); if (!past_default) { @@ -1387,9 +1387,9 @@ { under_line(buf3, group_table[gn].spells[sn]); - snprintf(buf2, MSL, "<A HREF=\"#%s\">%s</A>, ", buf3, - group_table[gn].spells[sn]); - strncat(buf, buf2, MSL); + sprintf(buf2, "<A HREF=\"#%s\">%s</A>, ", buf3, + group_table[gn].spells[sn]); + strcat(buf, buf2); } else { @@ -1401,7 +1401,7 @@ buf[(strlen(buf) - 2)] = '\0'; else - strncpy(buf, "None", MSL); + strcpy(buf, "None"); } send_buf(wdesc->fd, "%s</TD></TR>\n", buf); } @@ -1420,8 +1420,8 @@ if (!displayed[sn] && (min_class_level(sn) < ANGEL)) { - snprintf(buf2, MSL, "%s, ", skill_table[sn].name); - strncat(buf, buf2, MSL); + sprintf(buf2, "%s, ", skill_table[sn].name); + strcat(buf, buf2); displayed[sn] = TRUE; } } @@ -1429,7 +1429,7 @@ buf[(strlen(buf) - 2)] = '\0'; else - strncpy(buf, "None", MSL); + strcpy(buf, "None"); send_buf(wdesc->fd, "%s</TD></TR>\n", buf); send_buf(wdesc->fd, "</TABLE>\n"); @@ -1461,8 +1461,8 @@ break; if (skill_lookup(race->skills[i]) == sn) { - snprintf(buf2, MSL, "%s, ", skill_table[sn].name); - strncat(buf, buf2, MSL); + sprintf(buf2, "%s, ", skill_table[sn].name); + strcat(buf, buf2); displayed[sn] = TRUE; } } @@ -1471,7 +1471,7 @@ buf[(strlen(buf) - 2)] = '\0'; else - strncpy(buf, "None", MSL); + strcpy(buf, "None"); send_buf(wdesc->fd, "%s</TD></TR>\n", buf); } send_buf(wdesc->fd, "</TABLE>\n"); @@ -1493,8 +1493,8 @@ break; if (!displayed[sn]) { - snprintf(buf2, MSL, "%s, ", skill_table[sn].name); - strncat(buf, buf2, MSL); + sprintf(buf2, "%s, ", skill_table[sn].name); + strcat(buf, buf2); displayed[sn] = TRUE; } } @@ -1502,7 +1502,7 @@ buf[(strlen(buf) - 2)] = '\0'; else - strncpy(buf, "None", MSL); + strcpy(buf, "None"); send_buf(wdesc->fd, "%s</TD></TR>\n", buf); send_buf(wdesc->fd, "</TABLE>\n"); print_footer(wdesc); @@ -1661,7 +1661,7 @@ print_header(wdesc, "Commands"); send_buf(wdesc->fd, "<TABLE>\n"); - for (i = cmd_first; i; i = i->next) + for (i = cmd_first_sorted; i; i = i->next_sort) { if (i->level >= LEVEL_IMMORTAL || !i->show) continue; @@ -1864,7 +1864,7 @@ sprintf(skill_list[lev], "<TR><TD>Level %d</TD><TD>%s", lev, buf2); else - strncat(skill_list[lev], buf2, MSL); + strcat(skill_list[lev], buf2); } } for (lev = 0; lev < LEVEL_HERO + 1; lev++) @@ -1964,7 +1964,7 @@ { if (!str_suffix(".log", Dir->d_name)) { - strncpy(buf, Dir->d_name, MSL); + strcpy(buf, Dir->d_name); buf[strlen(buf) - 4] = '\0'; send_buf(wdesc->fd, "%s<TD><A href=\"%s%s/log/%s\">%s</A></TD>\n", @@ -2202,7 +2202,7 @@ { if (!str_suffix(".log", Dir->d_name)) { - strncpy(buf2, Dir->d_name, MSL); + strcpy(buf2, Dir->d_name); buf2[strlen(buf2) - 4] = '\0'; if (!str_cmp(buf2, check)) { diff -ur src/webserver.h new/webserver.h --- src/webserver.h Wed Apr 9 23:39:38 2003 +++ new/webserver.h Wed Apr 23 00:11:35 2003 @@ -72,7 +72,7 @@ #if !defined(__CYGWIN__) unsigned int sin_size; #else - int sin_size; + int sin_size; #endif bool valid; bool keepalive;