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;