[Oct 23 2009] - Rumble

Fixed bug in renumbering zone table after deleting mobiles. (thanks Drefs)
  Fixed bug in renumbering zone table after deleting objects. (thanks Drefs)
  Upgraded column_list to use player screenwidth to determine how many columns t
o create (use column arg of 0). (thanks Maclir)
[Oct 20 2009] - Rumble
  Corrected several PRF_FLAGGED checks that mobs were using.
  Removed l-desc from stat player and title from stat mob. (thanks Xiu)
[Oct 19 2009] - Rumble
  Added a note to spec_assign.c assign_mobiles that guildguard, snake, thief, ma
gic user, puff, fido, janitor, and cityguards are now implemented via triggers.
  Fixed a bug where empty drink containers and fountains would show half empty.
(thanks Parna)
This commit is contained in:
Rumble 2009-10-23 00:29:56 +00:00
parent 44722575ea
commit baf644d031
16 changed files with 90 additions and 107 deletions

View file

@ -36,6 +36,16 @@ Xlist (mlist, olist, rlist, zlist, slist, tlist, qlist)
(lots of major bugfixes too) (lots of major bugfixes too)
@ @
tbaMUD 3.61 tbaMUD 3.61
[Oct 23 2009] - Rumble
Fixed bug in renumbering zone table after deleting mobiles. (thanks Drefs)
Fixed bug in renumbering zone table after deleting objects. (thanks Drefs)
Upgraded column_list to use player screenwidth to determine how many columns to create (use column arg of 0). (thanks Maclir)
[Oct 20 2009] - Rumble
Corrected several PRF_FLAGGED checks that mobs were using.
Removed l-desc from stat player and title from stat mob. (thanks Xiu)
[Oct 19 2009] - Rumble
Added a note to spec_assign.c assign_mobiles that guildguard, snake, thief, magic user, puff, fido, janitor, and cityguards are now implemented via triggers.
Fixed a bug where empty drink containers and fountains would show half empty. (thanks Parna)
[Oct 17 2009] - Rumble [Oct 17 2009] - Rumble
Added Ultima Zone 555 and 556. Originally by Casret, rebuilt by Parna. Added Ultima Zone 555 and 556. Originally by Casret, rebuilt by Parna.
Made MEDIT column menu's consistent with other OLC menu's. Made MEDIT column menu's consistent with other OLC menu's.

View file

@ -18,10 +18,11 @@ rumble@tbamud.com -- Rumble
8. Char is already equipped: (medit-s-desc), (oedit-s-desc) 8. Char is already equipped: (medit-s-desc), (oedit-s-desc)
9. SYSERR: Attempt to assign spec to non-existant mob # 9. SYSERR: Attempt to assign spec to non-existant mob #
10. No associated object exists when attempting to create a board [vnum #]. 10. No associated object exists when attempting to create a board [vnum #].
11. 11: SYSERR: Mob using >'((ch)-)player_specials....
1: Errant Rooms 1: Errant Rooms
------------
12: (Nowhere) [ 8868] House of Elders Chamber in Silverwood City (south) (Nowhere) [ 8868] House of Elders Chamber in Silverwood City (south)
The most common are exits to Nowhere. This happens when a builder The most common are exits to Nowhere. This happens when a builder
modifies a room exit but does not include an exit room vnum. These errant modifies a room exit but does not include an exit room vnum. These errant
@ -87,4 +88,22 @@ that is not used.
You need to delete this board from lib/etc/boards/ and modify boards.c and You need to delete this board from lib/etc/boards/ and modify boards.c and
boards.h. Again "grep #" *.[ch] to search for this vnum in all of your .c and boards.h. Again "grep #" *.[ch] to search for this vnum in all of your .c and
.h files to remove the reference. .h files to remove the reference.
11: SYSERR: Mob using >'((ch)-)player_specials....
Players and mobs (NPC's) share many of the same data fields, but not all.
So when a mob tries to access player data it gives a SYSERR like this:
SYSERR: Mob using >'((ch)-)player_specials...
The fix is actually a very easy one. All you have to do is make sure it only
checks player data if it is a player. The way this is done in the code is with
a non-player-character check. Now non-player-character (NPC) means it is a mob.
So you need a double negative to make sure it is not a non-player-character. I
know this is confusing, but just copy the example below.
- if (PRF_FLAGGED(ch, PRF_NOREPEAT)) // This line should be removed, hence the "-"
+ if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_NOREPEAT)) // This line should be added without the "+"
The changed line now will not just check for a flag, instead it will check if
it is a player (not an NPC) and it is flagged then continue.

View file

@ -7,5 +7,5 @@ log in to the game. You should change it to something more interesting
when you get a chance (as well as most of the other files in lib/text.) when you get a chance (as well as most of the other files in lib/text.)
If you need help, find a bug, or wish to contribute please stop by If you need help, find a bug, or wish to contribute please stop by
The Builder Academy at: builderacademy.net 9091 or @Chttp://tbamud.com@n. The Builder Academy at: tbamud.com 9091 or @Chttp://tbamud.com@n.

View file

@ -569,7 +569,7 @@ static void look_in_obj(struct char_data *ch, char *arg)
list_obj_to_char(obj->contains, ch, SHOW_OBJ_SHORT, TRUE); list_obj_to_char(obj->contains, ch, SHOW_OBJ_SHORT, TRUE);
} }
} else { /* item must be a fountain or drink container */ } else { /* item must be a fountain or drink container */
if ((GET_OBJ_VAL(obj, 1) == 0) && (!GET_OBJ_VAL(obj, 0) == -1)) if ((GET_OBJ_VAL(obj, 1) == 0) && (GET_OBJ_VAL(obj, 0) != -1))
send_to_char(ch, "It is empty.\r\n"); send_to_char(ch, "It is empty.\r\n");
else { else {
if (GET_OBJ_VAL(obj, 0) < 0) if (GET_OBJ_VAL(obj, 0) < 0)
@ -2237,7 +2237,7 @@ ACMD(do_commands)
} }
/* display commands list in a nice columnized format */ /* display commands list in a nice columnized format */
column_list(ch, 7, commands, no, FALSE); column_list(ch, 0, commands, no, FALSE);
} }
void free_history(struct char_data *ch, int type) void free_history(struct char_data *ch, int type)

View file

@ -351,7 +351,7 @@ int perform_move(struct char_data *ch, int dir, int need_specials_check)
return (0); return (0);
else if ((!EXIT(ch, dir) && !buildwalk(ch, dir)) || EXIT(ch, dir)->to_room == NOWHERE) else if ((!EXIT(ch, dir) && !buildwalk(ch, dir)) || EXIT(ch, dir)->to_room == NOWHERE)
send_to_char(ch, "Alas, you cannot go that way...\r\n"); send_to_char(ch, "Alas, you cannot go that way...\r\n");
else if (EXIT_FLAGGED(EXIT(ch, dir), EX_CLOSED) && (GET_LEVEL(ch) < LVL_IMMORT || !PRF_FLAGGED(ch, PRF_NOHASSLE))) { else if (EXIT_FLAGGED(EXIT(ch, dir), EX_CLOSED) && (GET_LEVEL(ch) < LVL_IMMORT || (!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_NOHASSLE)))) {
if (EXIT(ch, dir)->keyword) if (EXIT(ch, dir)->keyword)
send_to_char(ch, "The %s seems to be closed.\r\n", fname(EXIT(ch, dir)->keyword)); send_to_char(ch, "The %s seems to be closed.\r\n", fname(EXIT(ch, dir)->keyword));
else else
@ -656,19 +656,19 @@ ACMD(do_gen_door)
else if (!(DOOR_IS_LOCKED(ch, obj, door)) && else if (!(DOOR_IS_LOCKED(ch, obj, door)) &&
IS_SET(flags_door[subcmd], NEED_LOCKED)) IS_SET(flags_door[subcmd], NEED_LOCKED))
send_to_char(ch, "Oh.. it wasn't locked, after all..\r\n"); send_to_char(ch, "Oh.. it wasn't locked, after all..\r\n");
else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) && (PRF_FLAGGED(ch, PRF_AUTOKEY)) && (has_key(ch, keynum)) ) else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) && ((!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOKEY))) && (has_key(ch, keynum)) )
{ {
send_to_char(ch, "It is locked, but you have the key.\r\n"); send_to_char(ch, "It is locked, but you have the key.\r\n");
send_to_char(ch, "*Click*\r\n"); send_to_char(ch, "*Click*\r\n");
do_doorcmd(ch, obj, door, subcmd); do_doorcmd(ch, obj, door, subcmd);
} }
else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) && (PRF_FLAGGED(ch, PRF_AUTOKEY)) && (!has_key(ch, keynum)) ) else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) && ((!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOKEY))) && (!has_key(ch, keynum)) )
{ {
send_to_char(ch, "It is locked, and you do not have the key!\r\n"); send_to_char(ch, "It is locked, and you do not have the key!\r\n");
} }
else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) &&
IS_SET(flags_door[subcmd], NEED_UNLOCKED) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) &&
(GET_LEVEL(ch) < LVL_IMMORT || !PRF_FLAGGED(ch, PRF_NOHASSLE))) (GET_LEVEL(ch) < LVL_IMMORT || (!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_NOHASSLE))))
send_to_char(ch, "It seems to be locked.\r\n"); send_to_char(ch, "It seems to be locked.\r\n");
else if (!has_key(ch, keynum) && (GET_LEVEL(ch) < LVL_GOD) && else if (!has_key(ch, keynum) && (GET_LEVEL(ch) < LVL_GOD) &&
((subcmd == SCMD_LOCK) || (subcmd == SCMD_UNLOCK))) ((subcmd == SCMD_LOCK) || (subcmd == SCMD_UNLOCK)))

View file

@ -739,12 +739,14 @@ static void do_stat_character(struct char_data *ch, struct char_data *k)
buf, (!IS_NPC(k) ? "PC" : (!IS_MOB(k) ? "NPC" : "MOB")), buf, (!IS_NPC(k) ? "PC" : (!IS_MOB(k) ? "NPC" : "MOB")),
GET_NAME(k), IS_NPC(k) ? GET_ID(k) : GET_IDNUM(k), GET_ROOM_VNUM(IN_ROOM(k)), IS_NPC(k) ? NOWHERE : GET_LOADROOM(k)); GET_NAME(k), IS_NPC(k) ? GET_ID(k) : GET_IDNUM(k), GET_ROOM_VNUM(IN_ROOM(k)), IS_NPC(k) ? NOWHERE : GET_LOADROOM(k));
if (IS_MOB(k)) if (IS_MOB(k)) {
send_to_char(ch, "Keyword: %s, VNum: [%5d], RNum: [%5d]\r\n", k->player.name, GET_MOB_VNUM(k), GET_MOB_RNUM(k)); send_to_char(ch, "Keyword: %s, VNum: [%5d], RNum: [%5d]\r\n", k->player.name, GET_MOB_VNUM(k), GET_MOB_RNUM(k));
send_to_char(ch, "L-Des: %s", k->player.long_descr ? k->player.long_descr : "<None>\r\n");
}
send_to_char(ch, "Title: %s\r\n", k->player.title ? k->player.title : "<None>"); if (!IS_MOB(k))
send_to_char(ch, "Title: %s\r\n", k->player.title ? k->player.title : "<None>");
send_to_char(ch, "L-Des: %s", k->player.long_descr ? k->player.long_descr : "<None>\r\n");
send_to_char(ch, "D-Des: %s", k->player.description ? k->player.description : "<None>\r\n"); send_to_char(ch, "D-Des: %s", k->player.description ? k->player.description : "<None>\r\n");
sprinttype(k->player.chclass, pc_class_types, buf, sizeof(buf)); sprinttype(k->player.chclass, pc_class_types, buf, sizeof(buf));
@ -4441,7 +4443,7 @@ ACMD(do_plist)
len = 0; len = 0;
len += snprintf(buf + len, sizeof(buf) - len, "@W[ Id] (Lv) Name Last@n\r\n" len += snprintf(buf + len, sizeof(buf) - len, "@W[ Id] (Lv) Name Last@n\r\n"
"%s-----------------------------------------------%s\r\n", CCCYN(ch, C_NRM), "%s-------------------------------------%s\r\n", CCCYN(ch, C_NRM),
CCNRM(ch, C_NRM)); CCNRM(ch, C_NRM));
for (i = 0; i <= top_of_p_table; i++) { for (i = 0; i <= top_of_p_table; i++) {
@ -4466,7 +4468,7 @@ ACMD(do_plist)
UPPER(*player_table[i].name), player_table[i].name + 1, time_str); UPPER(*player_table[i].name), player_table[i].name + 1, time_str);
count++; count++;
} }
snprintf(buf + len, sizeof(buf) - len, "%s-----------------------------------------------%s\r\n" snprintf(buf + len, sizeof(buf) - len, "%s-------------------------------------%s\r\n"
"%d players listed.\r\n", CCCYN(ch, C_NRM), CCNRM(ch, C_NRM), count); "%d players listed.\r\n", CCCYN(ch, C_NRM), CCNRM(ch, C_NRM), count);
page_string(ch->desc, buf, TRUE); page_string(ch->desc, buf, TRUE);
} }

View file

@ -122,7 +122,8 @@ int prac_params[4][NUM_CLASSES] = {
* to visit spec_assign.c if you create any new mobiles that should be a guild * to visit spec_assign.c if you create any new mobiles that should be a guild
* master or guard so they can act appropriately. If you "recycle" the * master or guard so they can act appropriately. If you "recycle" the
* existing mobs that are used in other guilds for your new guild, then you * existing mobs that are used in other guilds for your new guild, then you
* don't have to change that file, only here. */ * don't have to change that file, only here. Guildguards are now implemented
* via triggers. This code remains as an example. */
struct guild_info_type guild_info[] = { struct guild_info_type guild_info[] = {
/* Midgaard */ /* Midgaard */

View file

@ -146,8 +146,12 @@ int delete_mobile(mob_rnum refpt)
/* Update zone table. */ /* Update zone table. */
for (zone = 0; zone <= top_of_zone_table; zone++) for (zone = 0; zone <= top_of_zone_table; zone++)
for (cmd_no = 0; ZCMD(zone, cmd_no).command != 'S'; cmd_no++) for (cmd_no = 0; ZCMD(zone, cmd_no).command != 'S'; cmd_no++)
if (ZCMD(zone, cmd_no).command == 'M' && ZCMD(zone, cmd_no).arg1 == refpt) if (ZCMD(zone, cmd_no).command == 'M'){
if (ZCMD(zone, cmd_no).arg1 == refpt) {
delete_zone_command(&zone_table[zone], cmd_no); delete_zone_command(&zone_table[zone], cmd_no);
} else
ZCMD(zone, cmd_no).arg1 -= (ZCMD(zone, cmd_no).arg1 > refpt);
}
/* Update shop keepers. */ /* Update shop keepers. */
if (shop_index) if (shop_index)

View file

@ -451,7 +451,7 @@ int delete_object(obj_rnum rnum)
delete_zone_command(&zone_table[zone], cmd_no); delete_zone_command(&zone_table[zone], cmd_no);
} else } else
ZCMD(zone, cmd_no).arg3 -= (ZCMD(zone, cmd_no).arg3 > rnum); ZCMD(zone, cmd_no).arg3 -= (ZCMD(zone, cmd_no).arg3 > rnum);
break; /* No break here - drop into next case. */
case 'O': case 'O':
case 'G': case 'G':
case 'E': case 'E':

View file

@ -299,28 +299,18 @@ void medit_save_internally(struct descriptor_data *d)
Display positions. (sitting, standing, etc) */ Display positions. (sitting, standing, etc) */
static void medit_disp_positions(struct descriptor_data *d) static void medit_disp_positions(struct descriptor_data *d)
{ {
int i;
get_char_colors(d->character); get_char_colors(d->character);
clear_screen(d); clear_screen(d);
column_list(d->character, 0, position_types, NUM_POSITIONS, TRUE);
for (i = 0; *position_types[i] != '\n'; i++) {
write_to_output(d, "%s%2d%s) %s\r\n", grn, i, nrm, position_types[i]);
}
write_to_output(d, "Enter position number : "); write_to_output(d, "Enter position number : ");
} }
/* Display the gender of the mobile. */ /* Display the gender of the mobile. */
static void medit_disp_sex(struct descriptor_data *d) static void medit_disp_sex(struct descriptor_data *d)
{ {
int i;
get_char_colors(d->character); get_char_colors(d->character);
clear_screen(d); clear_screen(d);
column_list(d->character, 0, genders, NUM_GENDERS, TRUE);
for (i = 0; i < NUM_GENDERS; i++) {
write_to_output(d, "%s%2d%s) %s\r\n", grn, i, nrm, genders[i]);
}
write_to_output(d, "Enter gender number : "); write_to_output(d, "Enter gender number : ");
} }
@ -341,15 +331,11 @@ static void medit_disp_attack_types(struct descriptor_data *d)
/* Display mob-flags menu. */ /* Display mob-flags menu. */
static void medit_disp_mob_flags(struct descriptor_data *d) static void medit_disp_mob_flags(struct descriptor_data *d)
{ {
int i, columns = 0;
char flags[MAX_STRING_LENGTH]; char flags[MAX_STRING_LENGTH];
get_char_colors(d->character); get_char_colors(d->character);
clear_screen(d); clear_screen(d);
for (i = 0; i < NUM_MOB_FLAGS; i++) { column_list(d->character, 0, action_bits, NUM_MOB_FLAGS, TRUE);
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, action_bits[i],
!(++columns % 2) ? "\r\n" : "");
}
sprintbitarray(MOB_FLAGS(OLC_MOB(d)), action_bits, AF_ARRAY_MAX, flags); sprintbitarray(MOB_FLAGS(OLC_MOB(d)), action_bits, AF_ARRAY_MAX, flags);
write_to_output(d, "\r\nCurrent flags : %s%s%s\r\nEnter mob flags (0 to quit) : ", cyn, flags, nrm); write_to_output(d, "\r\nCurrent flags : %s%s%s\r\nEnter mob flags (0 to quit) : ", cyn, flags, nrm);
} }
@ -357,15 +343,12 @@ static void medit_disp_mob_flags(struct descriptor_data *d)
/* Display affection flags menu. */ /* Display affection flags menu. */
static void medit_disp_aff_flags(struct descriptor_data *d) static void medit_disp_aff_flags(struct descriptor_data *d)
{ {
int i, columns = 0;
char flags[MAX_STRING_LENGTH]; char flags[MAX_STRING_LENGTH];
get_char_colors(d->character); get_char_colors(d->character);
clear_screen(d); clear_screen(d);
for (i = 0; i < NUM_AFF_FLAGS; i++) { /* +1 since AFF_FLAGS don't start at 0. */
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, affected_bits[i+1], column_list(d->character, 0, affected_bits + 1, NUM_AFF_FLAGS, TRUE);
!(++columns % 2) ? "\r\n" : "");
}
sprintbitarray(AFF_FLAGS(OLC_MOB(d)), affected_bits, AF_ARRAY_MAX, flags); sprintbitarray(AFF_FLAGS(OLC_MOB(d)), affected_bits, AF_ARRAY_MAX, flags);
write_to_output(d, "\r\nCurrent flags : %s%s%s\r\nEnter aff flags (0 to quit) : ", write_to_output(d, "\r\nCurrent flags : %s%s%s\r\nEnter aff flags (0 to quit) : ",
cyn, flags, nrm); cyn, flags, nrm);

View file

@ -349,15 +349,9 @@ static void oedit_disp_prompt_apply_menu(struct descriptor_data *d)
/* Ask for liquid type. */ /* Ask for liquid type. */
static void oedit_liquid_type(struct descriptor_data *d) static void oedit_liquid_type(struct descriptor_data *d)
{ {
int counter, columns = 0;
get_char_colors(d->character); get_char_colors(d->character);
clear_screen(d); clear_screen(d);
column_list(d->character, 0, drinks, NUM_LIQ_TYPES, TRUE);
for (counter = 0; counter < NUM_LIQ_TYPES; counter++) {
write_to_output(d, " %s%2d%s) %s%-20.20s %s", grn, counter, nrm, yel,
drinks[counter], !(++columns % 2) ? "\r\n" : "");
}
write_to_output(d, "\r\n%sEnter drink type : ", nrm); write_to_output(d, "\r\n%sEnter drink type : ", nrm);
OLC_MODE(d) = OEDIT_VALUE_3; OLC_MODE(d) = OEDIT_VALUE_3;
} }
@ -365,15 +359,9 @@ static void oedit_liquid_type(struct descriptor_data *d)
/* The actual apply to set. */ /* The actual apply to set. */
static void oedit_disp_apply_menu(struct descriptor_data *d) static void oedit_disp_apply_menu(struct descriptor_data *d)
{ {
int counter, columns = 0;
get_char_colors(d->character); get_char_colors(d->character);
clear_screen(d); clear_screen(d);
column_list(d->character, 0, apply_types, NUM_APPLIES, TRUE);
for (counter = 0; counter < NUM_APPLIES; counter++) {
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, counter, nrm,
apply_types[counter], !(++columns % 2) ? "\r\n" : "");
}
write_to_output(d, "\r\nEnter apply type (0 is no apply) : "); write_to_output(d, "\r\nEnter apply type (0 is no apply) : ");
OLC_MODE(d) = OEDIT_APPLY; OLC_MODE(d) = OEDIT_APPLY;
} }
@ -1036,6 +1024,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
case ITEM_FOUNTAIN: case ITEM_FOUNTAIN:
min_val = 0; min_val = 0;
max_val = NUM_LIQ_TYPES - 1; max_val = NUM_LIQ_TYPES - 1;
number--;
break; break;
case ITEM_KEY: case ITEM_KEY:
min_val = 0; min_val = 0;
@ -1096,7 +1085,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
OLC_OBJ(d)->affected[OLC_VAL(d)].location = 0; OLC_OBJ(d)->affected[OLC_VAL(d)].location = 0;
OLC_OBJ(d)->affected[OLC_VAL(d)].modifier = 0; OLC_OBJ(d)->affected[OLC_VAL(d)].modifier = 0;
oedit_disp_prompt_apply_menu(d); oedit_disp_prompt_apply_menu(d);
} else if (number < 0 || number >= NUM_APPLIES) } else if (number < 0 || number > NUM_APPLIES)
oedit_disp_apply_menu(d); oedit_disp_apply_menu(d);
else { else {
int counter; int counter;
@ -1111,7 +1100,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
} }
} }
OLC_OBJ(d)->affected[OLC_VAL(d)].location = number; OLC_OBJ(d)->affected[OLC_VAL(d)].location = number - 1;
write_to_output(d, "Modifier : "); write_to_output(d, "Modifier : ");
OLC_MODE(d) = OEDIT_APPLYMOD; OLC_MODE(d) = OEDIT_APPLYMOD;
} }

View file

@ -347,16 +347,11 @@ static void qedit_disp_menu(struct descriptor_data *d)
real_quest(quest->prev_quest) == NOTHING ? "" : QST_DESC(real_quest(quest->prev_quest))); real_quest(quest->prev_quest) == NOTHING ? "" : QST_DESC(real_quest(quest->prev_quest)));
OLC_MODE(d) = QEDIT_MAIN_MENU; OLC_MODE(d) = QEDIT_MAIN_MENU;
} }
/* For sector type. */ /* For quest type. */
void qedit_disp_type_menu(struct descriptor_data *d) void qedit_disp_type_menu(struct descriptor_data *d)
{ {
int counter, columns = 0;
clear_screen(d); clear_screen(d);
for (counter = 0; counter < NUM_AQ_TYPES; counter++) { column_list(d->character, 0, quest_types, NUM_AQ_TYPES, TRUE);
write_to_output(d, "@g%2d@n) %-20.20s %s", counter,
quest_types[counter], !(++columns % 2) ? "\r\n" : "");
}
write_to_output(d, "\r\nEnter Quest type : "); write_to_output(d, "\r\nEnter Quest type : ");
OLC_MODE(d) = QEDIT_TYPES; OLC_MODE(d) = QEDIT_TYPES;
} }
@ -364,14 +359,10 @@ void qedit_disp_type_menu(struct descriptor_data *d)
void qedit_disp_flag_menu(struct descriptor_data *d) void qedit_disp_flag_menu(struct descriptor_data *d)
{ {
char bits[MAX_STRING_LENGTH]; char bits[MAX_STRING_LENGTH];
int counter, columns = 0;
get_char_colors(d->character); get_char_colors(d->character);
clear_screen(d); clear_screen(d);
for (counter = 0; counter < NUM_AQ_FLAGS; counter++) { column_list(d->character, 0, aq_flags, NUM_AQ_FLAGS, TRUE);
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, counter + 1, nrm,
aq_flags[counter], !(++columns % 2) ? "\r\n" : "");
}
sprintbit(OLC_QUEST(d)->flags, aq_flags, bits, sizeof(bits)); sprintbit(OLC_QUEST(d)->flags, aq_flags, bits, sizeof(bits));
write_to_output(d, "\r\nQuest flags: @c%s@n\r\n" write_to_output(d, "\r\nQuest flags: @c%s@n\r\n"
"Enter quest flags, 0 to quit : ", bits); "Enter quest flags, 0 to quit : ", bits);
@ -612,6 +603,7 @@ void qedit_parse(struct descriptor_data *d, char *arg)
OLC_QUEST(d)->qm = number; OLC_QUEST(d)->qm = number;
break; break;
case QEDIT_TYPES: case QEDIT_TYPES:
number--;
if (number < 0 || number >= NUM_AQ_TYPES) { if (number < 0 || number >= NUM_AQ_TYPES) {
write_to_output(d, "Invalid choice!\r\n"); write_to_output(d, "Invalid choice!\r\n");
qedit_disp_type_menu(d); qedit_disp_type_menu(d);

View file

@ -371,14 +371,11 @@ static void redit_disp_exit_flag_menu(struct descriptor_data *d)
static void redit_disp_flag_menu(struct descriptor_data *d) static void redit_disp_flag_menu(struct descriptor_data *d)
{ {
char bits[MAX_STRING_LENGTH]; char bits[MAX_STRING_LENGTH];
int counter, columns = 0;
get_char_colors(d->character); get_char_colors(d->character);
clear_screen(d); clear_screen(d);
for (counter = 0; counter < NUM_ROOM_FLAGS; counter++) { column_list(d->character, 0, room_bits, NUM_ROOM_FLAGS, TRUE);
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, counter + 1, nrm,
room_bits[counter], !(++columns % 2) ? "\r\n" : "");
}
sprintbitarray(OLC_ROOM(d)->room_flags, room_bits, RF_ARRAY_MAX, bits); sprintbitarray(OLC_ROOM(d)->room_flags, room_bits, RF_ARRAY_MAX, bits);
write_to_output(d, "\r\nRoom flags: %s%s%s\r\n" write_to_output(d, "\r\nRoom flags: %s%s%s\r\n"
"Enter room flags, 0 to quit : ", cyn, bits, nrm); "Enter room flags, 0 to quit : ", cyn, bits, nrm);
@ -388,13 +385,8 @@ static void redit_disp_flag_menu(struct descriptor_data *d)
/* For sector type. */ /* For sector type. */
static void redit_disp_sector_menu(struct descriptor_data *d) static void redit_disp_sector_menu(struct descriptor_data *d)
{ {
int counter, columns = 0;
clear_screen(d); clear_screen(d);
for (counter = 0; counter < NUM_ROOM_SECTORS; counter++) { column_list(d->character, 0, sector_types, NUM_ROOM_SECTORS, TRUE);
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, counter, nrm,
sector_types[counter], !(++columns % 2) ? "\r\n" : "");
}
write_to_output(d, "\r\nEnter sector type : "); write_to_output(d, "\r\nEnter sector type : ");
OLC_MODE(d) = REDIT_SECTOR; OLC_MODE(d) = REDIT_SECTOR;
} }
@ -625,7 +617,7 @@ void redit_parse(struct descriptor_data *d, char *arg)
return; return;
case REDIT_SECTOR: case REDIT_SECTOR:
number = atoi(arg); number = atoi(arg) - 1;
if (number < 0 || number >= NUM_ROOM_SECTORS) { if (number < 0 || number >= NUM_ROOM_SECTORS) {
write_to_output(d, "Invalid choice!"); write_to_output(d, "Invalid choice!");
redit_disp_sector_menu(d); redit_disp_sector_menu(d);

View file

@ -59,7 +59,8 @@ static void ASSIGNROOM(room_vnum room, SPECIAL(fname))
} }
/* Assignments */ /* Assignments */
/* assign special procedures to mobiles */ /* assign special procedures to mobiles. Guildguards, snake, thief, magic user,
* puff, fido, janitor, and cityguards are now implemented via triggers. */
void assign_mobiles(void) void assign_mobiles(void)
{ {
assign_kings_castle(); assign_kings_castle();

View file

@ -954,6 +954,16 @@ void column_list(struct char_data *ch, int num_cols, const char **list, int list
int num_per_col, col_width,r,c,i, offset=0, len=0, temp_len, max_len=0; int num_per_col, col_width,r,c,i, offset=0, len=0, temp_len, max_len=0;
char buf[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH];
/* Work out the longest list item */
for (i=0; i<list_length; i++)
if (max_len < strlen(list[i]))
max_len = strlen(list[i]);
/* auto columns case */
if (num_cols == 0) {
num_cols = (IS_NPC(ch) ? 80 : GET_SCREEN_WIDTH(ch)) / (max_len + (show_nums ? 5 : 1));
}
/* Ensure that the number of columns is in the range 1-10 */ /* Ensure that the number of columns is in the range 1-10 */
num_cols = MIN(MAX(num_cols,1), 10); num_cols = MIN(MAX(num_cols,1), 10);

View file

@ -373,14 +373,10 @@ static int start_change_command(struct descriptor_data *d, int pos)
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
void zedit_disp_flag_menu(struct descriptor_data *d) void zedit_disp_flag_menu(struct descriptor_data *d)
{ {
int counter, columns = 0;
char bits[MAX_STRING_LENGTH]; char bits[MAX_STRING_LENGTH];
clear_screen(d); clear_screen(d);
for (counter = 0; counter < NUM_ZONE_FLAGS; counter++) { column_list(d->character, 0, zone_bits, NUM_ZONE_FLAGS, TRUE);
write_to_output(d, "@g%2d@n) %-20.20s %s", counter + 1,
zone_bits[counter], !(++columns % 2) ? "\r\n" : "");
}
sprintbitarray(OLC_ZONE(d)->zone_flags, zone_bits, ZN_ARRAY_MAX, bits); sprintbitarray(OLC_ZONE(d)->zone_flags, zone_bits, ZN_ARRAY_MAX, bits);
write_to_output(d, "\r\nZone flags: @c%s@n\r\n" write_to_output(d, "\r\nZone flags: @c%s@n\r\n"
@ -656,25 +652,12 @@ static void zedit_disp_arg2(struct descriptor_data *d)
up the input catch clause. */ up the input catch clause. */
static void zedit_disp_arg3(struct descriptor_data *d) static void zedit_disp_arg3(struct descriptor_data *d)
{ {
int i = 0;
write_to_output(d, "\r\n"); write_to_output(d, "\r\n");
switch (OLC_CMD(d).command) { switch (OLC_CMD(d).command) {
case 'E': case 'E':
while (*equipment_types[i] != '\n') { column_list(d->character, 0, equipment_types, NUM_WEARS, TRUE);
write_to_output(d, "%2d) %26.26s", i, equipment_types[i]);
if (*equipment_types[i + 1] != '\n')
write_to_output(d, " %2d) %26.26s", i + 1,
equipment_types[i + 1]);
write_to_output(d, "\r\n");
if (*equipment_types[i + 1] != '\n')
i += 2;
else
break;
}
write_to_output(d, "Location to equip : "); write_to_output(d, "Location to equip : ");
break; break;
case 'P': case 'P':
@ -730,7 +713,7 @@ void zedit_disp_levels(struct descriptor_data *d)
/* The event handler */ /* The event handler */
void zedit_parse(struct descriptor_data *d, char *arg) void zedit_parse(struct descriptor_data *d, char *arg)
{ {
int pos, i = 0, number; int pos, number;
switch (OLC_MODE(d)) { switch (OLC_MODE(d)) {
case ZEDIT_CONFIRM_SAVESTRING: case ZEDIT_CONFIRM_SAVESTRING:
@ -1104,12 +1087,9 @@ void zedit_parse(struct descriptor_data *d, char *arg)
} }
switch (OLC_CMD(d).command) { switch (OLC_CMD(d).command) {
case 'E': case 'E':
pos = atoi(arg); pos = atoi(arg) - 1;
/* Count number of wear positions. We could use NUM_WEARS, this is /* Count number of wear positions. */
more reliable. */ if (pos < 0 || pos >= NUM_WEARS)
while (*equipment_types[i] != '\n')
i++;
if (pos < 0 || pos >= i)
write_to_output(d, "Try again : "); write_to_output(d, "Try again : ");
else { else {
OLC_CMD(d).arg3 = pos; OLC_CMD(d).arg3 = pos;