diff --git a/changelog b/changelog index 66624cf..494ea75 100644 --- a/changelog +++ b/changelog @@ -5,6 +5,22 @@ The Builder Academy builderacademy.net 9091 tbaMUD 3.54 +[Nov 12 2007] - Rumble + Updated users command to fix GET_INVIS_LEV bug. + Updated the drink command to work in rooms where the sector type should logically allow it. +[Oct 04 2007] - Rumble +Increased the size of a mail message from 4k to 8k. + Updated remove_player so that the players command would not show phantom users when someone self-deletes. + Updated sedit_rooms_menu to prevent a crash bug when trying to display a shop with rooms that have been removed. +[Nov 01 2007] - Rumble + Updated mag_objectmagic bug where action description was not being used correctly on scrolls. + Increased the size of MAX_RAW_INPUT_LENGTH and PLR_DESC_LENGTH. +[Oct 19 2007] - Rumble + Fixed a few more 128 bit MOB_FLAGGED bugs. +[Oct 17 2007] - Rumble + Fixed loading of non-128 bit prefs in load_char. (thanks Ziz) +[Oct 15 2007] - Rumble + Removed some prototypes leftover from the old history command. (thanks Rhade) [Oct 13 2007] - Rumble Updated World, Help, News, Socials, and src for tbaMUD3.54rc. Fixed bug where toggling syslog enabled brief. (thanks Rhade) diff --git a/lib/text/wizlist b/lib/text/wizlist index 7993bcd..4f4c7e4 100644 --- a/lib/text/wizlist +++ b/lib/text/wizlist @@ -8,6 +8,7 @@ Greater Gods ~~~~~~~~~~~~ + Zizazat Gods ~~~~ diff --git a/lib/world/mob/292.mob b/lib/world/mob/292.mob index 121f5cb..06ee03c 100644 --- a/lib/world/mob/292.mob +++ b/lib/world/mob/292.mob @@ -198,20 +198,6 @@ reason why Kell is so successful. Myrama is truly marvelous! 50 2500 8 8 2 E -#29215 -herbalist shopkeeper~ -the Herbalist~ -The herbalist is here, reading to her plants. -~ - The herbalist is an ancient woman, but she still seems spry and sharp-minded -when it comes to plants. You've no doubt this woman is an expert in her field. - -~ -188426 0 0 0 0 0 0 0 500 E -23 13 -3 4d4+230 3d3+3 -230 52900 -8 8 2 -E #29216 lawyer~ the Lawyer~ diff --git a/lib/world/mob/30.mob b/lib/world/mob/30.mob index d1ddd00..173fc22 100644 --- a/lib/world/mob/30.mob +++ b/lib/world/mob/30.mob @@ -530,32 +530,6 @@ A small, quick, loyal beagle is here. 8 8 0 BareHandAttack: 4 E -#3093 -rottweiler pets~ -the rottweiler~ -A large, loyal rottweiler is here. -~ - The rottweiler looks like a strong, fierce fighter. -~ -16398 0 0 0 0 0 0 0 0 E -3 19 8 0d0+30 1d2+0 -30 900 -8 8 0 -BareHandAttack: 4 -E -#3094 -wolf pets~ -the wolf~ -A large, trained wolf is here. -~ - The wolf looks like a strong, fearless fighter. -~ -16398 0 0 0 0 0 0 0 0 E -4 19 7 0d0+40 1d2+0 -40 1600 -8 8 0 -BareHandAttack: 4 -E #3095 cryogenicist cryo~ the cryogenicist~ diff --git a/lib/world/mob/7.mob b/lib/world/mob/7.mob index 5146bd9..409e692 100644 --- a/lib/world/mob/7.mob +++ b/lib/world/mob/7.mob @@ -124,19 +124,6 @@ A guard is standing watch here. 8 8 1 BareHandAttack: 10 E -#709 -woodswoman~ -a woodswoman~ -A woodswoman is looking for a woodsman to nag. -~ - She looks upset about something. -~ -72 0 0 0 8192 0 0 0 0 E -7 18 5 1d1+70 1d2+1 -70 4900 -8 8 2 -BareHandAttack: 8 -E #710 messenger~ a messenger~ diff --git a/src/act.comm.c b/src/act.comm.c index 655bae2..d7b1150 100644 --- a/src/act.comm.c +++ b/src/act.comm.c @@ -33,9 +33,6 @@ ACMD(do_page); ACMD(do_gen_comm); ACMD(do_qcomm); void handle_webster_file(void); -ACMD(do_list_history); -void new_hist_messg(struct descriptor_data *d, const char *msg); -void free_hist_messg(struct descriptor_data *d); static long last_webster_teller = -1L; diff --git a/src/act.informative.c b/src/act.informative.c index 45480fb..0bd875d 100644 --- a/src/act.informative.c +++ b/src/act.informative.c @@ -1419,7 +1419,7 @@ ACMD(do_users) continue; if (showclass && !(showclass & (1 << GET_CLASS(tch)))) continue; - if (GET_INVIS_LEV(ch) > GET_LEVEL(ch)) + if (GET_INVIS_LEV(tch) > GET_LEVEL(ch)) continue; if (d->original) @@ -1967,8 +1967,8 @@ ACMD(do_toggle) } REMOVE_BIT_AR(PRF_FLAGS(ch), PRF_COLOR_1); REMOVE_BIT_AR(PRF_FLAGS(ch), PRF_COLOR_2); - SET_BIT_AR(PRF_FLAGS(ch), (PRF_COLOR_1 * (tp & 1))); - SET_BIT_AR(PRF_FLAGS(ch), (PRF_COLOR_2 * (tp & 2) >> 1)); + if (tp & 1) SET_BIT_AR(PRF_FLAGS(ch), PRF_COLOR_1); + if (tp & 2) SET_BIT_AR(PRF_FLAGS(ch), PRF_COLOR_2); send_to_char(ch, "Your %scolor%s is now %s.\r\n", CCRED(ch, C_SPR), CCNRM(ch, C_OFF), types[tp]); return; diff --git a/src/act.item.c b/src/act.item.c index 0d73267..e9355a8 100644 --- a/src/act.item.c +++ b/src/act.item.c @@ -825,8 +825,25 @@ ACMD(do_drink) return; if (!*arg) { + char buf[MAX_STRING_LENGTH]; + switch (SECT(IN_ROOM(ch))) { + case SECT_WATER_SWIM: + case SECT_WATER_NOSWIM: + case SECT_UNDERWATER: + if ((GET_COND(ch, HUNGER) > 20) && (GET_COND(ch, THIRST) > 0)) { + send_to_char(ch, "Your stomach can't contain anymore!\r\n"); + } + snprintf(buf, sizeof(buf), "$n takes a refreshing drink."); + act(buf, TRUE, ch, 0, 0, TO_ROOM); + send_to_char(ch, "You take a refreshing drink.\r\n"); + gain_condition(ch, THIRST, 1); + if (GET_COND(ch, THIRST) > 20) + send_to_char(ch, "You don't feel thirsty any more.\r\n"); + return; + default: send_to_char(ch, "Drink from what?\r\n"); return; + } } if (!(temp = get_obj_in_list_vis(ch, arg, NULL, ch->carrying))) { if (!(temp = get_obj_in_list_vis(ch, arg, NULL, world[IN_ROOM(ch)].contents))) { diff --git a/src/act.other.c b/src/act.other.c index 2ab35e8..ef1ac6f 100644 --- a/src/act.other.c +++ b/src/act.other.c @@ -202,9 +202,8 @@ ACMD(do_steal) if (!AWAKE(vict)) /* Easier to steal from sleeping people. */ percent -= 50; - /* NO NO With Imp's and Shopkeepers, and if player thieving is not allowed */ - if (GET_LEVEL(vict) >= LVL_IMMORT || pcsteal || - GET_MOB_SPEC(vict) == shop_keeper) + /* No stealing if not allowed. If it is no stealing from Imm's or Shopkeepers. */ + if (GET_LEVEL(vict) >= LVL_IMMORT || pcsteal || GET_MOB_SPEC(vict) == shop_keeper) percent = 101; /* Failure */ if (str_cmp(obj_name, "coins") && str_cmp(obj_name, "gold")) { diff --git a/src/act.wizard.c b/src/act.wizard.c index 31a338d..3c129f9 100644 --- a/src/act.wizard.c +++ b/src/act.wizard.c @@ -1317,35 +1317,43 @@ ACMD(do_return) ACMD(do_load) { - char buf[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH]; + char buf[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH], buf3[MAX_INPUT_LENGTH]; + int i=0, n=1; - two_arguments(argument, buf, buf2); + one_argument(two_arguments(argument, buf, buf2), buf3); if (!*buf || !*buf2 || !isdigit(*buf2)) { - send_to_char(ch, "Usage: load { obj | mob } \r\n"); + send_to_char(ch, "Usage: load < obj | mob > \r\n"); return; } - if (!is_number(buf2)) { + if (!is_number(buf2) || !is_number(buf3)) { send_to_char(ch, "That is not a number.\r\n"); return; } + if (atoi(buf3) > 0 ) { + n = atoi(buf3); + } else { + n = 1; + } + if (is_abbrev(buf, "mob")) { - struct char_data *mob; + struct char_data *mob=NULL; mob_rnum r_num; if ((r_num = real_mobile(atoi(buf2))) == NOBODY) { send_to_char(ch, "There is no monster with that number.\r\n"); return; } - mob = read_mobile(r_num, REAL); - char_to_room(mob, IN_ROOM(ch)); + for (i=0; i < n; i++) { + mob = read_mobile(r_num, REAL); + char_to_room(mob, IN_ROOM(ch)); - act("$n makes a quaint, magical gesture with one hand.", TRUE, ch, - 0, 0, TO_ROOM); - act("$n has created $N!", FALSE, ch, 0, mob, TO_ROOM); - act("You create $N.", FALSE, ch, 0, mob, TO_CHAR); - load_mtrigger(mob); + act("$n makes a quaint, magical gesture with one hand.", TRUE, ch, 0, 0, TO_ROOM); + act("$n has created $N!", FALSE, ch, 0, mob, TO_ROOM); + act("You create $N.", FALSE, ch, 0, mob, TO_CHAR); + load_mtrigger(mob); + } } else if (is_abbrev(buf, "obj")) { struct obj_data *obj; obj_rnum r_num; @@ -1354,15 +1362,17 @@ ACMD(do_load) send_to_char(ch, "There is no object with that number.\r\n"); return; } - obj = read_object(r_num, REAL); - if (CONFIG_LOAD_INVENTORY) - obj_to_char(obj, ch); - else - obj_to_room(obj, IN_ROOM(ch)); - act("$n makes a strange magical gesture.", TRUE, ch, 0, 0, TO_ROOM); - act("$n has created $p!", FALSE, ch, obj, 0, TO_ROOM); - act("You create $p.", FALSE, ch, obj, 0, TO_CHAR); - load_otrigger(obj); + for (i=0; i < n; i++) { + obj = read_object(r_num, REAL); + if (CONFIG_LOAD_INVENTORY) + obj_to_char(obj, ch); + else + obj_to_room(obj, IN_ROOM(ch)); + act("$n makes a strange magical gesture.", TRUE, ch, 0, 0, TO_ROOM); + act("$n has created $p!", FALSE, ch, obj, 0, TO_ROOM); + act("You create $p.", FALSE, ch, obj, 0, TO_CHAR); + load_otrigger(obj); + } } else send_to_char(ch, "That'll have to be either 'obj' or 'mob'.\r\n"); } diff --git a/src/db.c b/src/db.c index 395896e..0d04baa 100644 --- a/src/db.c +++ b/src/db.c @@ -3233,7 +3233,7 @@ int check_object_spell_number(struct obj_data *obj, int val) int error = FALSE; const char *spellname; - if (GET_OBJ_VAL(obj, val) == -1) /* i.e.: no spell */ + if (GET_OBJ_VAL(obj, val) == -1 || GET_OBJ_VAL(obj, val) == 0) /* no spell */ return (error); /* Check for negative spells, spells beyond the top define, and any spell @@ -3428,6 +3428,7 @@ void load_config( void ) snprintf(buf, sizeof(buf), "%s/%s", DFLT_DIR, CONFIG_CONFFILE); if ( !(fl = fopen(CONFIG_CONFFILE, "r")) && !(fl = fopen(buf, "r")) ) { snprintf(buf, sizeof(buf), "No %s file, using defaults", CONFIG_CONFFILE); + perror(buf); return; } diff --git a/src/dg_variables.c b/src/dg_variables.c index 481d726..bf4a8a9 100644 --- a/src/dg_variables.c +++ b/src/dg_variables.c @@ -1113,7 +1113,20 @@ o->contains)); strcpy(str, "0"); } break; - case 'h': + case 'e': + if (!str_cmp(field, "extra")) { + if (subfield && *subfield) { + if (check_flags_by_name_ar(GET_OBJ_EXTRA(o), NUM_ITEM_FLAGS, subfield, extra_bits) > 0) + snprintf(str, slen, "1"); + else + snprintf(str, slen, "0"); + } else + snprintf(str, slen, "0"); + } else { + sprintbitarray(GET_OBJ_EXTRA(o), extra_bits, EF_ARRAY_MAX, str); + } + break; + case 'h': /* thanks to Jamie Nelson (Mordecai of 4 Dimensions MUD) */ if (!str_cmp(field, "has_in")) { if (GET_OBJ_TYPE(o) == ITEM_CONTAINER) diff --git a/src/fight.c b/src/fight.c index efe534e..27ba374 100644 --- a/src/fight.c +++ b/src/fight.c @@ -1005,7 +1005,7 @@ void perform_violence(void) /* should master auto-assist followers? */ if (ch->master && PRF_FLAGGED(ch->master, PRF_AUTOASSIST) && FIGHTING(ch) && !FIGHTING(ch->master) && - (IN_ROOM(ch->master) == IN_ROOM(ch))) + (IN_ROOM(ch->master) == IN_ROOM(ch)) && !IS_NPC(ch->master)) do_assist(ch->master, GET_NAME(ch), 0, 0); hit(ch, FIGHTING(ch), TYPE_UNDEFINED); diff --git a/src/interpreter.c b/src/interpreter.c index 0ab4a33..cb73314 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -1222,12 +1222,7 @@ int perform_dupe_check(struct descriptor_data *d) case RECON: write_to_output(d, "Reconnecting.\r\n"); act("$n has reconnected.", TRUE, d->character, 0, 0, TO_ROOM); - - if (GET_INVIS_LEV(d->character)) - mudlog(BRF, MAX(LVL_IMMORT, GET_INVIS_LEV(d->character)), TRUE, "%s has reconnected. (invis %d)", GET_NAME(d->character), GET_INVIS_LEV(d->character)); - else - mudlog(BRF, LVL_IMMORT, TRUE, "%s has reconnected.", GET_NAME(d->character)); - + mudlog(NRM, MAX(0, GET_INVIS_LEV(d->character)), TRUE, "%s [%s] has reconnected.", GET_NAME(d->character), d->host); if (has_mail(GET_IDNUM(d->character))) write_to_output(d, "You have mail waiting.\r\n"); break; diff --git a/src/mail.h b/src/mail.h index 78725cc..470cad6 100644 --- a/src/mail.h +++ b/src/mail.h @@ -18,7 +18,7 @@ #define STAMP_PRICE 150 /* Maximum size of mail in bytes (arbitrary) */ -#define MAX_MAIL_SIZE 4096 +#define MAX_MAIL_SIZE 8192 /* size of mail file allocation blocks */ #define BLOCK_SIZE 100 diff --git a/src/medit.c b/src/medit.c index a1f355f..f4712f4 100644 --- a/src/medit.c +++ b/src/medit.c @@ -447,7 +447,7 @@ void medit_parse(struct descriptor_data *d, char *arg) if (OLC_MODE(d) > MEDIT_NUMERICAL_RESPONSE) { i = atoi(arg); if (!*arg || (!isdigit(arg[0]) && ((*arg == '-') && !isdigit(arg[1])))) { - write_to_output(d, "Field must be numerical, try again : "); + write_to_output(d, "Try again : "); return; } } else { /* String response. */ diff --git a/src/modify.c b/src/modify.c index aba8c19..8b70018 100644 --- a/src/modify.c +++ b/src/modify.c @@ -402,7 +402,7 @@ void page_string(struct descriptor_data *d, char *str, int keep_internal) if (!str || !*str) return; - if ((GET_PAGE_LENGTH(d->character) < 5 || GET_PAGE_LENGTH(d->character) > 254)) + if ((GET_PAGE_LENGTH(d->character) < 5 || GET_PAGE_LENGTH(d->character) > 255)) GET_PAGE_LENGTH(d->character) = PAGE_LENGTH; d->showstr_count = count_pages(str, d->character); CREATE(d->showstr_vector, char *, d->showstr_count); diff --git a/src/players.c b/src/players.c index 3a5bd3d..6a3d7cf 100644 --- a/src/players.c +++ b/src/players.c @@ -374,13 +374,15 @@ int load_char(const char *name, struct char_data *ch) else if (!strcmp(tag, "Plyd")) ch->player.time.played = atoi(line); else if (!strcmp(tag, "PfIn")) POOFIN(ch) = strdup(line); else if (!strcmp(tag, "PfOt")) POOFOUT(ch) = strdup(line); - else if (!strcmp(tag, "Pref")) + else if (!strcmp(tag, "Pref")) { if (sscanf(line, "%s %s %s %s", f1, f2, f3, f4) == 4) { PRF_FLAGS(ch)[0] = asciiflag_conv(f1); PRF_FLAGS(ch)[1] = asciiflag_conv(f2); PRF_FLAGS(ch)[2] = asciiflag_conv(f3); PRF_FLAGS(ch)[3] = asciiflag_conv(f4); - } + } else + PRF_FLAGS(ch)[0] = asciiflag_conv(f1); + } break; case 'Q': @@ -705,6 +707,9 @@ void remove_player(int pfilepos) if (!*player_table[pfilepos].name) return; + /* Update top_of_p_table. */ + top_of_p_table -= 1; + /* Unlink all player-owned files */ for (i = 0; i < MAX_FILES; i++) { if (get_filename(fname, sizeof(fname), i, player_table[pfilepos].name)) diff --git a/src/sedit.c b/src/sedit.c index 0605074..9fb079b 100644 --- a/src/sedit.c +++ b/src/sedit.c @@ -246,15 +246,18 @@ void sedit_products_menu(struct descriptor_data *d) void sedit_compact_rooms_menu(struct descriptor_data *d) { struct shop_data *shop; - int i, count = 0; + int i; shop = OLC_SHOP(d); get_char_colors(d->character); clear_screen(d); for (i = 0; S_ROOM(shop, i) != NOWHERE; i++) { - write_to_output(d, "%2d - [%s%5d%s] | %s", i, cyn, S_ROOM(shop, i), nrm, - !(++count % 5) ? "\r\n" : ""); + if (real_room(S_ROOM(shop, i)) != NOWHERE) { + write_to_output(d, "%2d - [@c%5d@n] - @y%s@n\r\n", i, S_ROOM(shop, i), world[real_room(S_ROOM(shop, i))].name); + } else { + write_to_output(d, "%2d - [@R!Removed Room!@n]\r\n", i); + } } write_to_output(d, "\r\n" "%sA%s) Add a new room.\r\n" diff --git a/src/shop.c b/src/shop.c index 0cbccb8..c43581d 100644 --- a/src/shop.c +++ b/src/shop.c @@ -240,7 +240,7 @@ int evaluate_expression(struct obj_data *obj, char *expr) name[ptr - end] = '\0'; for (eindex = 0; *extra_bits[eindex] != '\n'; eindex++) if (!str_cmp(name, extra_bits[eindex])) { - push(&vals, OBJ_FLAGGED(obj, 1 << eindex)); + push(&vals, OBJ_FLAGGED(obj, eindex)); break; } if (*extra_bits[eindex] == '\n') diff --git a/src/spell_parser.c b/src/spell_parser.c index 88d08fa..b6c03e7 100644 --- a/src/spell_parser.c +++ b/src/spell_parser.c @@ -386,7 +386,7 @@ void mag_objectmagic(struct char_data *ch, struct obj_data *obj, act("You recite $p which dissolves.", TRUE, ch, obj, 0, TO_CHAR); if (obj->action_description) - act(obj->action_description, FALSE, ch, obj, NULL, TO_ROOM); + act(obj->action_description, FALSE, ch, obj, tch, TO_ROOM); else act("$n recites $p.", FALSE, ch, obj, NULL, TO_ROOM); diff --git a/src/structs.h b/src/structs.h index e565750..eae9519 100644 --- a/src/structs.h +++ b/src/structs.h @@ -485,14 +485,14 @@ #define HISTORY_SIZE 5 /* Keep last 5 commands. */ #define MAX_STRING_LENGTH 49152 #define MAX_INPUT_LENGTH 512 /* Max length per *line* of input */ -#define MAX_RAW_INPUT_LENGTH 512 /* Max size of *raw* input */ +#define MAX_RAW_INPUT_LENGTH 1024 /* Max size of *raw* input */ #define MAX_MESSAGES 60 #define MAX_NAME_LENGTH 20 /* ** MAX_PWD_LENGTH changed from 10 to 30 for ascii test - Sam ** */ #define MAX_PWD_LENGTH 30 #define MAX_TITLE_LENGTH 80 #define HOST_LENGTH 40 -#define PLR_DESC_LENGTH 512 +#define PLR_DESC_LENGTH 2048 #define MAX_SKILLS 200 #define MAX_AFFECT 32 #define MAX_OBJ_AFFECT 6 /* Used in obj_file_elem */