/* ************************************************************************ * File: act.other.c Part of CircleMUD * * Usage: Miscellaneous player-level commands * * * * All rights reserved. See license.doc for complete information. * * * * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University * * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * ************************************************************************ */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> #include "structs.h" #include "utils.h" #include "comm.h" #include "interpreter.h" #include "handler.h" #include "db.h" #include "spells.h" #include "screen.h" #include "house.h" /* extern variables */ extern struct str_app_type str_app[]; extern struct room_data *world; extern struct descriptor_data *descriptor_list; extern struct room_data *world; extern struct dex_skill_type dex_app_skill[]; extern struct spell_info_type spell_info[]; extern struct index_data *mob_index; extern char *class_abbrevs[]; /* extern procedures */ SPECIAL(shop_keeper); ACMD(do_quit) { void die(struct char_data * ch); void Crash_rentsave(struct char_data * ch, int cost); extern int free_rent; struct descriptor_data *d, *next_d; if (IS_NPC(ch) || !ch->desc) return; if (subcmd != SCMD_QUIT && GET_LEVEL(ch) < LVL_IMMORT) send_to_char("You have to type quit - no less, to quit!\r\n", ch); else if (GET_POS(ch) == POS_FIGHTING) send_to_char("No way! You're fighting for your life!\r\n", ch); else if (GET_POS(ch) < POS_STUNNED) { send_to_char("You die before your time...\r\n", ch); die(ch); } else { if (!GET_INVIS_LEV(ch)) act("$n has left the game.", TRUE, ch, 0, 0, TO_ROOM); sprintf(buf, "%s has quit the game.", GET_NAME(ch)); mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE); send_to_char("Goodbye, friend.. Come back soon!\r\n", ch); /* * kill off all sockets connected to the same player as the one who is * trying to quit. Helps to maintain sanity as well as prevent duping. */ for (d = descriptor_list; d; d = next_d) { next_d = d->next; if (d == ch->desc) continue; if (d->character && (GET_IDNUM(d->character) == GET_IDNUM(ch))) close_socket(d); } if (free_rent) Crash_rentsave(ch, 0); extract_char(ch); /* Char is saved in extract char */ } } ACMD(do_save) { if (IS_NPC(ch) || !ch->desc) return; if (cmd) { sprintf(buf, "Saving %s.\r\n", GET_NAME(ch)); send_to_char(buf, ch); } save_char(ch, NOWHERE); Crash_crashsave(ch); if (ROOM_FLAGGED(ch->in_room, ROOM_HOUSE_CRASH)) House_crashsave(world[ch->in_room].number); } /* generic function for commands which are normally overridden by special procedures - i.e., shop commands, mail commands, etc. */ ACMD(do_not_here) { send_to_char("Sorry, but you cannot do that here!\r\n", ch); } ACMD(do_sneak) { struct affected_type af; byte percent; send_to_char("Okay, you'll try to move silently for a while.\r\n", ch); if (IS_AFFECTED(ch, AFF_SNEAK)) affect_from_char(ch, SKILL_SNEAK); percent = number(1, 101); /* 101% is a complete failure */ if (percent > GET_SKILL(ch, SKILL_SNEAK) + dex_app_skill[GET_DEX(ch)].sneak) return; af.type = SKILL_SNEAK; af.duration = GET_LEVEL(ch); af.modifier = 0; af.location = APPLY_NONE; af.bitvector = AFF_SNEAK; affect_to_char(ch, &af); } ACMD(do_hide) { byte percent; send_to_char("You attempt to hide yourself.\r\n", ch); if (IS_AFFECTED(ch, AFF_HIDE)) REMOVE_BIT(AFF_FLAGS(ch), AFF_HIDE); percent = number(1, 101); /* 101% is a complete failure */ if (percent > GET_SKILL(ch, SKILL_HIDE) + dex_app_skill[GET_DEX(ch)].hide) return; SET_BIT(AFF_FLAGS(ch), AFF_HIDE); } ACMD(do_steal) { struct char_data *vict; struct obj_data *obj; char vict_name[240]; char obj_name[240]; int percent, gold, eq_pos, pcsteal = 0; extern int pt_allowed; bool ohoh = FALSE; ACMD(do_gen_comm); argument = one_argument(argument, obj_name); one_argument(argument, vict_name); if (!(vict = get_char_room_vis(ch, vict_name))) { send_to_char("Steal what from who?\r\n", ch); return; } else if (vict == ch) { send_to_char("Come on now, that's rather stupid!\r\n", ch); return; } if (!pt_allowed) { if (!IS_NPC(vict) && !PLR_FLAGGED(vict, PLR_THIEF) && !PLR_FLAGGED(vict, PLR_KILLER) && !PLR_FLAGGED(ch, PLR_THIEF)) { /* * SET_BIT(ch->specials.act, PLR_THIEF); send_to_char("Okay, you're the * boss... you're now a THIEF!\r\n",ch); sprintf(buf, "PC Thief bit set * on %s", GET_NAME(ch)); log(buf); */ pcsteal = 1; } if (PLR_FLAGGED(ch, PLR_THIEF)) pcsteal = 1; /* * We'll try something different... instead of having a thief flag, just * have PC Steals fail all the time. */ } /* 101% is a complete failure */ percent = number(1, 101) - dex_app_skill[GET_DEX(ch)].p_pocket; if (GET_POS(vict) < POS_SLEEPING) percent = -1; /* ALWAYS SUCCESS */ /* NO NO With Imp's and 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")) { if (!(obj = get_obj_in_list_vis(vict, obj_name, vict->carrying))) { for (eq_pos = 0; eq_pos < NUM_WEARS; eq_pos++) if (GET_EQ(vict, eq_pos) && (isname(obj_name, GET_EQ(vict, eq_pos)->name)) && CAN_SEE_OBJ(ch, GET_EQ(vict, eq_pos))) { obj = GET_EQ(vict, eq_pos); break; } if (!obj) { act("$E hasn't got that item.", FALSE, ch, 0, vict, TO_CHAR); return; } else { /* It is equipment */ if ((GET_POS(vict) > POS_STUNNED)) { send_to_char("Steal the equipment now? Impossible!\r\n", ch); return; } else { act("You unequip $p and steal it.", FALSE, ch, obj, 0, TO_CHAR); act("$n steals $p from $N.", FALSE, ch, obj, vict, TO_NOTVICT); obj_to_char(unequip_char(vict, eq_pos), ch); } } } else { /* obj found in inventory */ percent += GET_OBJ_WEIGHT(obj); /* Make heavy harder */ if (AWAKE(vict) && (percent > GET_SKILL(ch, SKILL_STEAL))) { ohoh = TRUE; act("Oops..", FALSE, ch, 0, 0, TO_CHAR); act("$n tried to steal something from you!", FALSE, ch, 0, vict, TO_VICT); act("$n tries to steal something from $N.", TRUE, ch, 0, vict, TO_NOTVICT); } else { /* Steal the item */ if ((IS_CARRYING_N(ch) + 1 < CAN_CARRY_N(ch))) { if ((IS_CARRYING_W(ch) + GET_OBJ_WEIGHT(obj)) < CAN_CARRY_W(ch)) { obj_from_char(obj); obj_to_char(obj, ch); send_to_char("Got it!\r\n", ch); } } else send_to_char("You cannot carry that much.\r\n", ch); } } } else { /* Steal some coins */ if (AWAKE(vict) && (percent > GET_SKILL(ch, SKILL_STEAL))) { ohoh = TRUE; act("Oops..", FALSE, ch, 0, 0, TO_CHAR); act("You discover that $n has $s hands in your wallet.", FALSE, ch, 0, vict, TO_VICT); act("$n tries to steal gold from $N.", TRUE, ch, 0, vict, TO_NOTVICT); } else { /* Steal some gold coins */ gold = (int) ((GET_GOLD(vict) * number(1, 10)) / 100); gold = MIN(1782, gold); if (gold > 0) { GET_GOLD(ch) += gold; GET_GOLD(vict) -= gold; sprintf(buf, "Bingo! You got %d gold coins.\r\n", gold); send_to_char(buf, ch); } else { send_to_char("You couldn't get any gold...\r\n", ch); } } } if (ohoh && IS_NPC(vict) && AWAKE(vict)) hit(vict, ch, TYPE_UNDEFINED); } ACMD(do_practice) { void list_skills(struct char_data * ch); one_argument(argument, arg); if (*arg) send_to_char("You can only practice skills in your guild.\r\n", ch); else list_skills(ch); } ACMD(do_visible) { void appear(struct char_data * ch); void perform_immort_vis(struct char_data *ch); if (GET_LEVEL(ch) >= LVL_IMMORT) { perform_immort_vis(ch); return; } if IS_AFFECTED(ch, AFF_INVISIBLE) { appear(ch); send_to_char("You break the spell of invisibility.\r\n", ch); } else send_to_char("You are already visible.\r\n", ch); } ACMD(do_title) { skip_spaces(&argument); delete_doubledollar(argument); if (IS_NPC(ch)) send_to_char("Your title is fine... go away.\r\n", ch); else if (PLR_FLAGGED(ch, PLR_NOTITLE)) send_to_char("You can't title yourself -- you shouldn't have abused it!\r\n", ch); else if (strstr(argument, "(") || strstr(argument, ")")) send_to_char("Titles can't contain the ( or ) characters.\r\n", ch); else if (strlen(argument) > MAX_TITLE_LENGTH) { sprintf(buf, "Sorry, titles can't be longer than %d characters.\r\n", MAX_TITLE_LENGTH); send_to_char(buf, ch); } else { set_title(ch, argument); sprintf(buf, "Okay, you're now %s %s.\r\n", GET_NAME(ch), GET_TITLE(ch)); send_to_char(buf, ch); } } int perform_group(struct char_data *ch, struct char_data *vict) { if (IS_AFFECTED(vict, AFF_GROUP) || !CAN_SEE(ch, vict)) return 0; SET_BIT(AFF_FLAGS(vict), AFF_GROUP); if (ch != vict) act("$N is now a member of your group.", FALSE, ch, 0, vict, TO_CHAR); act("You are now a member of $n's group.", FALSE, ch, 0, vict, TO_VICT); act("$N is now a member of $n's group.", FALSE, ch, 0, vict, TO_NOTVICT); return 1; } void print_group(struct char_data *ch) { struct char_data *k; struct follow_type *f; if (!IS_AFFECTED(ch, AFF_GROUP)) send_to_char("But you are not the member of a group!\r\n", ch); else { send_to_char("Your group consists of:\r\n", ch); k = (ch->master ? ch->master : ch); if (IS_AFFECTED(k, AFF_GROUP)) { sprintf(buf, " [%3dH %3dM %3dV] [%2d %s] $N (Head of group)", GET_HIT(k), GET_MANA(k), GET_MOVE(k), GET_LEVEL(k), CLASS_ABBR(k)); act(buf, FALSE, ch, 0, k, TO_CHAR); } for (f = k->followers; f; f = f->next) { if (!IS_AFFECTED(f->follower, AFF_GROUP)) continue; sprintf(buf, " [%3dH %3dM %3dV] [%2d %s] $N", GET_HIT(f->follower), GET_MANA(f->follower), GET_MOVE(f->follower), GET_LEVEL(f->follower), CLASS_ABBR(f->follower)); act(buf, FALSE, ch, 0, f->follower, TO_CHAR); } } } ACMD(do_group) { struct char_data *vict; struct follow_type *f; int found; one_argument(argument, buf); if (!*buf) { print_group(ch); return; } if (ch->master) { act("You can not enroll group members without being head of a group.", FALSE, ch, 0, 0, TO_CHAR); return; } if (!str_cmp(buf, "all")) { perform_group(ch, ch); for (found = 0, f = ch->followers; f; f = f->next) found += perform_group(ch, f->follower); if (!found) send_to_char("Everyone following you is already in your group.\r\n", ch); return; } if (!(vict = get_char_room_vis(ch, buf))) send_to_char(NOPERSON, ch); else if ((vict->master != ch) && (vict != ch)) act("$N must follow you to enter your group.", FALSE, ch, 0, vict, TO_CHAR); else { if (!IS_AFFECTED(vict, AFF_GROUP)) perform_group(ch, vict); else { if (ch != vict) act("$N is no longer a member of your group.", FALSE, ch, 0, vict, TO_CHAR); act("You have been kicked out of $n's group!", FALSE, ch, 0, vict, TO_VICT); act("$N has been kicked out of $n's group!", FALSE, ch, 0, vict, TO_NOTVICT); REMOVE_BIT(AFF_FLAGS(vict), AFF_GROUP); } } } ACMD(do_ungroup) { struct follow_type *f, *next_fol; struct char_data *tch; void stop_follower(struct char_data * ch); one_argument(argument, buf); if (!*buf) { if (ch->master || !(IS_AFFECTED(ch, AFF_GROUP))) { send_to_char("But you lead no group!\r\n", ch); return; } sprintf(buf2, "%s has disbanded the group.\r\n", GET_NAME(ch)); for (f = ch->followers; f; f = next_fol) { next_fol = f->next; if (IS_AFFECTED(f->follower, AFF_GROUP)) { REMOVE_BIT(AFF_FLAGS(f->follower), AFF_GROUP); send_to_char(buf2, f->follower); if (!IS_AFFECTED(f->follower, AFF_CHARM)) stop_follower(f->follower); } } REMOVE_BIT(AFF_FLAGS(ch), AFF_GROUP); send_to_char("You disband the group.\r\n", ch); return; } if (!(tch = get_char_room_vis(ch, buf))) { send_to_char("There is no such person!\r\n", ch); return; } if (tch->master != ch) { send_to_char("That person is not following you!\r\n", ch); return; } if (!IS_AFFECTED(tch, AFF_GROUP)) { send_to_char("That person isn't in your group.\r\n", ch); return; } REMOVE_BIT(AFF_FLAGS(tch), AFF_GROUP); act("$N is no longer a member of your group.", FALSE, ch, 0, tch, TO_CHAR); act("You have been kicked out of $n's group!", FALSE, ch, 0, tch, TO_VICT); act("$N has been kicked out of $n's group!", FALSE, ch, 0, tch, TO_NOTVICT); if (!IS_AFFECTED(tch, AFF_CHARM)) stop_follower(tch); } ACMD(do_report) { struct char_data *k; struct follow_type *f; if (!IS_AFFECTED(ch, AFF_GROUP)) { send_to_char("But you are not a member of any group!\r\n", ch); return; } sprintf(buf, "%s reports: %d/%dH, %d/%dM, %d/%dV\r\n", GET_NAME(ch), GET_HIT(ch), GET_MAX_HIT(ch), GET_MANA(ch), GET_MAX_MANA(ch), GET_MOVE(ch), GET_MAX_MOVE(ch)); CAP(buf); k = (ch->master ? ch->master : ch); for (f = k->followers; f; f = f->next) if (IS_AFFECTED(f->follower, AFF_GROUP) && f->follower != ch) send_to_char(buf, f->follower); if (k != ch) send_to_char(buf, k); send_to_char("You report to the group.\r\n", ch); } ACMD(do_split) { int amount, num, share; struct char_data *k; struct follow_type *f; if (IS_NPC(ch)) return; one_argument(argument, buf); if (is_number(buf)) { amount = atoi(buf); if (amount <= 0) { send_to_char("Sorry, you can't do that.\r\n", ch); return; } if (amount > GET_GOLD(ch)) { send_to_char("You don't seem to have that much gold to split.\r\n", ch); return; } k = (ch->master ? ch->master : ch); if (IS_AFFECTED(k, AFF_GROUP) && (k->in_room == ch->in_room)) num = 1; else num = 0; for (f = k->followers; f; f = f->next) if (IS_AFFECTED(f->follower, AFF_GROUP) && (!IS_NPC(f->follower)) && (f->follower->in_room == ch->in_room)) num++; if (num && IS_AFFECTED(ch, AFF_GROUP)) share = amount / num; else { send_to_char("With whom do you wish to share your gold?\r\n", ch); return; } GET_GOLD(ch) -= share * (num - 1); if (IS_AFFECTED(k, AFF_GROUP) && (k->in_room == ch->in_room) && !(IS_NPC(k)) && k != ch) { GET_GOLD(k) += share; sprintf(buf, "%s splits %d coins; you receive %d.\r\n", GET_NAME(ch), amount, share); send_to_char(buf, k); } for (f = k->followers; f; f = f->next) { if (IS_AFFECTED(f->follower, AFF_GROUP) && (!IS_NPC(f->follower)) && (f->follower->in_room == ch->in_room) && f->follower != ch) { GET_GOLD(f->follower) += share; sprintf(buf, "%s splits %d coins; you receive %d.\r\n", GET_NAME(ch), amount, share); send_to_char(buf, f->follower); } } sprintf(buf, "You split %d coins among %d members -- %d coins each.\r\n", amount, num, share); send_to_char(buf, ch); } else { send_to_char("How many coins do you wish to split with your group?\r\n", ch); return; } } ACMD(do_use) { struct obj_data *mag_item; int equipped = 1; half_chop(argument, arg, buf); if (!*arg) { sprintf(buf2, "What do you want to %s?\r\n", CMD_NAME); send_to_char(buf2, ch); return; } mag_item = GET_EQ(ch, WEAR_HOLD); if (!mag_item || !isname(arg, mag_item->name)) { switch (subcmd) { case SCMD_RECITE: case SCMD_QUAFF: equipped = 0; if (!(mag_item = get_obj_in_list_vis(ch, arg, ch->carrying))) { sprintf(buf2, "You don't seem to have %s %s.\r\n", AN(arg), arg); send_to_char(buf2, ch); return; } break; case SCMD_USE: sprintf(buf2, "You don't seem to be holding %s %s.\r\n", AN(arg), arg); send_to_char(buf2, ch); return; break; default: log("SYSERR: Unknown subcmd passed to do_use"); return; break; } } switch (subcmd) { case SCMD_QUAFF: if (GET_OBJ_TYPE(mag_item) != ITEM_POTION) { send_to_char("You can only quaff potions.", ch); return; } break; case SCMD_RECITE: if (GET_OBJ_TYPE(mag_item) != ITEM_SCROLL) { send_to_char("You can only recite scrolls.", ch); return; } break; case SCMD_USE: if ((GET_OBJ_TYPE(mag_item) != ITEM_WAND) && (GET_OBJ_TYPE(mag_item) != ITEM_STAFF)) { send_to_char("You can't seem to figure out how to use it.\r\n", ch); return; } break; } mag_objectmagic(ch, mag_item, buf); } ACMD(do_wimpy) { int wimp_lev; one_argument(argument, arg); if (!*arg) { if (GET_WIMP_LEV(ch)) { sprintf(buf, "Your current wimp level is %d hit points.\r\n", GET_WIMP_LEV(ch)); send_to_char(buf, ch); return; } else { send_to_char("At the moment, you're not a wimp. (sure, sure...)\r\n", ch); return; } } if (isdigit(*arg)) { if ((wimp_lev = atoi(arg))) { if (wimp_lev < 0) send_to_char("Heh, heh, heh.. we are jolly funny today, eh?\r\n", ch); else if (wimp_lev > GET_MAX_HIT(ch)) send_to_char("That doesn't make much sense, now does it?\r\n", ch); else if (wimp_lev > (GET_MAX_HIT(ch) >> 1)) send_to_char("You can't set your wimp level above half your hit points.\r\n", ch); else { sprintf(buf, "Okay, you'll wimp out if you drop below %d hit points.\r\n", wimp_lev); send_to_char(buf, ch); GET_WIMP_LEV(ch) = wimp_lev; } } else { send_to_char("Okay, you'll now tough out fights to the bitter end.\r\n", ch); GET_WIMP_LEV(ch) = 0; } } else send_to_char("Specify at how many hit points you want to wimp out at. (0 to disable)\r\n", ch); return; } ACMD(do_display) { int i; if (IS_NPC(ch)) { send_to_char("Mosters don't need displays. Go away.\r\n", ch); return; } skip_spaces(&argument); if (!*argument) { send_to_char("Usage: prompt { H | M | V | all | none }\r\n", ch); return; } if ((!str_cmp(argument, "on")) || (!str_cmp(argument, "all"))) SET_BIT(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE); else { REMOVE_BIT(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE); for (i = 0; i < strlen(argument); i++) { switch (LOWER(argument[i])) { case 'h': SET_BIT(PRF_FLAGS(ch), PRF_DISPHP); break; case 'm': SET_BIT(PRF_FLAGS(ch), PRF_DISPMANA); break; case 'v': SET_BIT(PRF_FLAGS(ch), PRF_DISPMOVE); break; } } } send_to_char(OK, ch); } ACMD(do_gen_write) { FILE *fl; char *tmp, *filename; struct stat fbuf; extern int max_filesize; time_t ct; switch (subcmd) { case SCMD_BUG: filename = BUG_FILE; break; case SCMD_TYPO: filename = TYPO_FILE; break; case SCMD_IDEA: filename = IDEA_FILE; break; default: return; } ct = time(0); tmp = asctime(localtime(&ct)); if (IS_NPC(ch)) { send_to_char("Monsters can't have ideas - Go away.\r\n", ch); return; } skip_spaces(&argument); delete_doubledollar(argument); if (!*argument) { send_to_char("That must be a mistake...\r\n", ch); return; } sprintf(buf, "%s %s: %s", GET_NAME(ch), CMD_NAME, argument); mudlog(buf, CMP, LVL_IMMORT, FALSE); if (stat(filename, &fbuf) < 0) { perror("Error statting file"); return; } if (fbuf.st_size >= max_filesize) { send_to_char("Sorry, the file is full right now.. try again later.\r\n", ch); return; } if (!(fl = fopen(filename, "a"))) { perror("do_gen_write"); send_to_char("Could not open the file. Sorry.\r\n", ch); return; } fprintf(fl, "%-8s (%6.6s) [%5d] %s\n", GET_NAME(ch), (tmp + 4), world[ch->in_room].number, argument); fclose(fl); send_to_char("Okay. Thanks!\r\n", ch); } #define TOG_OFF 0 #define TOG_ON 1 #define PRF_TOG_CHK(ch,flag) ((TOGGLE_BIT(PRF_FLAGS(ch), (flag))) & (flag)) ACMD(do_gen_tog) { long result; extern int nameserver_is_slow; char *tog_messages[][2] = { {"You are now safe from summoning by other players.\r\n", "You may now be summoned by other players.\r\n"}, {"Nohassle disabled.\r\n", "Nohassle enabled.\r\n"}, {"Brief mode off.\r\n", "Brief mode on.\r\n"}, {"Compact mode off.\r\n", "Compact mode on.\r\n"}, {"You can now hear tells.\r\n", "You are now deaf to tells.\r\n"}, {"You can now hear auctions.\r\n", "You are now deaf to auctions.\r\n"}, {"You can now hear shouts.\r\n", "You are now deaf to shouts.\r\n"}, {"You can now hear gossip.\r\n", "You are now deaf to gossip.\r\n"}, {"You can now hear the congratulation messages.\r\n", "You are now deaf to the congratulation messages.\r\n"}, {"You can now hear the Wiz-channel.\r\n", "You are now deaf to the Wiz-channel.\r\n"}, {"You are no longer part of the Quest.\r\n", "Okay, you are part of the Quest!\r\n"}, {"You will no longer see the room flags.\r\n", "You will now see the room flags.\r\n"}, {"You will now have your communication repeated.\r\n", "You will no longer have your communication repeated.\r\n"}, {"HolyLight mode off.\r\n", "HolyLight mode on.\r\n"}, {"Nameserver_is_slow changed to NO; IP addresses will now be resolved.\r\n", "Nameserver_is_slow changed to YES; sitenames will no longer be resolved.\r\n"}, {"Autoexits disabled.\r\n", "Autoexits enabled.\r\n"} }; if (IS_NPC(ch)) return; switch (subcmd) { case SCMD_NOSUMMON: result = PRF_TOG_CHK(ch, PRF_SUMMONABLE); break; case SCMD_NOHASSLE: result = PRF_TOG_CHK(ch, PRF_NOHASSLE); break; case SCMD_BRIEF: result = PRF_TOG_CHK(ch, PRF_BRIEF); break; case SCMD_COMPACT: result = PRF_TOG_CHK(ch, PRF_COMPACT); break; case SCMD_NOTELL: result = PRF_TOG_CHK(ch, PRF_NOTELL); break; case SCMD_NOAUCTION: result = PRF_TOG_CHK(ch, PRF_NOAUCT); break; case SCMD_DEAF: result = PRF_TOG_CHK(ch, PRF_DEAF); break; case SCMD_NOGOSSIP: result = PRF_TOG_CHK(ch, PRF_NOGOSS); break; case SCMD_NOGRATZ: result = PRF_TOG_CHK(ch, PRF_NOGRATZ); break; case SCMD_NOWIZ: result = PRF_TOG_CHK(ch, PRF_NOWIZ); break; case SCMD_QUEST: result = PRF_TOG_CHK(ch, PRF_QUEST); break; case SCMD_ROOMFLAGS: result = PRF_TOG_CHK(ch, PRF_ROOMFLAGS); break; case SCMD_NOREPEAT: result = PRF_TOG_CHK(ch, PRF_NOREPEAT); break; case SCMD_HOLYLIGHT: result = PRF_TOG_CHK(ch, PRF_HOLYLIGHT); break; case SCMD_SLOWNS: result = (nameserver_is_slow = !nameserver_is_slow); break; case SCMD_AUTOEXIT: result = PRF_TOG_CHK(ch, PRF_AUTOEXIT); break; default: log("SYSERR: Unknown subcmd in do_gen_toggle"); return; break; } if (result) send_to_char(tog_messages[subcmd][TOG_ON], ch); else send_to_char(tog_messages[subcmd][TOG_OFF], ch); return; }