/* * $Id: act_wiz.c 998 2007-01-21 21:23:49Z zsuzsu $ */ /*************************************************************************** * ANATOLIA 2.1 is copyright 1996-1997 Serdar BULUT, Ibrahim CANPUNAR * * ANATOLIA has been brought to you by ANATOLIA consortium * * Serdar BULUT {Chronos} bulut@rorqual.cc.metu.edu.tr * * Ibrahim Canpunar {Asena} canpunar@rorqual.cc.metu.edu.tr * * Murat BICER {KIO} mbicer@rorqual.cc.metu.edu.tr * * D.Baris ACAR {Powerman} dbacar@rorqual.cc.metu.edu.tr * * By using this code, you have agreed to follow the terms of the * * ANATOLIA license, in the file Anatolia/anatolia.licence * ***************************************************************************/ /*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * ROM 2.4 is copyright 1993-1995 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@pacinfo.com) * * Gabrielle Taylor (gtaylor@pacinfo.com) * * Brian Moore (rom@rom.efn.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * ***************************************************************************/ #include <sys/types.h> #include <sys/time.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdarg.h> #include <errno.h> #include <limits.h> #include <dirent.h> #ifdef LINUX #include <time.h> #endif #include "merc.h" #include "debug.h" #include "db/cmd.h" #include "interp.h" #include "update.h" #include "quest.h" #include "obj_prog.h" #include "fight.h" #include "quest.h" #include "db/db.h" #include "olc/olc.h" #include "waffects.h" #include "augment.h" #include "stats.h" #include "fixes.h" /* command procedures needed */ DECLARE_DO_FUN(do_rstat ); DECLARE_DO_FUN(do_mstat ); DECLARE_DO_FUN(do_dstat ); DECLARE_DO_FUN(do_ostat ); DECLARE_DO_FUN(do_rset ); DECLARE_DO_FUN(do_mset ); DECLARE_DO_FUN(do_oset ); DECLARE_DO_FUN(do_sset ); DECLARE_DO_FUN(do_mfind_old ); DECLARE_DO_FUN(do_ofind ); DECLARE_DO_FUN(do_ofind_old ); DECLARE_DO_FUN(do_mload ); DECLARE_DO_FUN(do_oload ); DECLARE_DO_FUN(do_save ); DECLARE_DO_FUN(do_look ); DECLARE_DO_FUN(do_stand ); DECLARE_DO_FUN(do_help ); DECLARE_DO_FUN(do_awardqp ); DECLARE_DO_FUN(do_awardxp ); DECLARE_DO_FUN(do_awardprac ); DECLARE_DO_FUN(do_warena ); qtrouble_t *qtrouble_lookup(CHAR_DATA *ch, int vnum); void ofind_vnum (CHAR_DATA *ch, int vnum); int repossess_limiteds (CHAR_DATA *ch, CHAR_PDATA *pvict); extern int rebooter; /* * display immortal commands */ void do_wizcmd(CHAR_DATA *ch, const char *argument) { cmd_t *cmd; int col; int clevel; int control; if (IS_NPC(ch)) { char_puts("Huh?\n", ch); return; } for( clevel = LEVEL_HERO + 1; clevel < MAX_LEVEL + 1; clevel++ ) { control = 0; col = 0; for (cmd = cmd_table; cmd->name; cmd++) { if (cmd->level < LEVEL_IMMORTAL || IS_SET(cmd->flags, CMD_HIDDEN)) continue; if(cmd->level == clevel) { control++; if(control==1) char_printf(ch, "\n{C ==============={R Level {R%-2d {C ==============={x\n",clevel); if (ch->level < IMPLEMENTOR && !is_name(cmd->name, ch->pcdata->granted)) { char_printf(ch, "{D%-12s{x",cmd->name); if (++col % 6 == 0) char_puts("\n", ch); } else { char_printf(ch, "{W%-12s{x",cmd->name); if (++col % 6 == 0) char_puts("\n", ch); } } } } } /* * stop all fighting in the realm */ void do_wpeace(CHAR_DATA *ch, const char *argument ) { CHAR_DATA *rch; char buf[MAX_STRING_LENGTH]; rch = ch; for ( rch = char_list; rch; rch = rch->next ) { if ( ch->desc == NULL || ch->desc->connected != CON_PLAYING ) continue; if ( rch->fighting ) { sprintf( buf, "%s has declared World Peace.\n\r", ch->name ); send_to_char( buf, rch ); stop_fighting( rch, TRUE ); } } send_to_char( "You have declared World Peace.\n\r", ch ); return; } void do_objlist(CHAR_DATA *ch, const char *argument) { FILE *fp; OBJ_DATA *obj; BUFFER *buf; int bp, bpmax; if ((fp = dfopen(TMP_PATH, "objlist.txt", "w+")) == NULL) { char_puts("File error.\n", ch); return; } buf = buf_new(-1); for(obj = object_list; obj != NULL; obj = obj->next) { if (obj->pIndexData->affected == NULL) continue; buf_clear(buf); buf_printf(buf, "\n#Obj: %s (Vnum : %d) \n", mlstr_mval(obj->short_descr), obj->pIndexData->vnum); format_obj(buf, obj); if (!IS_SET(obj->extra_flags, ITEM_ENCHANTED)) format_obj_affects(buf, obj->pIndexData->affected, FOA_F_NODURATION); format_obj_affects(buf, obj->affected, 0); build_points(obj->pIndexData, &bp, &bpmax); buf_printf(buf, "Build Points: %d/%d\n", bp, bpmax); fprintf(fp, "%s", fix_string(buf_string(buf))); } buf_free(buf); fclose(fp); } void do_limited(CHAR_DATA *ch, const char *argument) { extern int top_obj_index; OBJ_DATA *obj; OBJ_INDEX_DATA *obj_index; int lCount = 0; int ingameCount; int nMatch; int vnum; int bp = 0, bpmax = 0; if (argument[0] != '\0') { obj_index = get_obj_index(atoi(argument)); if (obj_index == NULL) { char_puts("Not found.\n", ch); return; } if (obj_index->limit == -1) { char_puts("Thats not a limited item.\n", ch); return; } nMatch = 0; build_points(obj_index, &bp, &bpmax); char_printf(ch, "{D[{%c%7d{D] {%c%3d{w of {C%3d{D max" " {c%3d{xlvl {W:{x %s\n", build_point_percent_color(bp, bpmax), obj_index->vnum, (obj_index->count > obj_index->limit) ? 'R' : 'c', obj_index->count, obj_index->limit, obj_index->level, mlstr_mval(obj_index->short_descr)); ingameCount = 0; for (obj=object_list; obj != NULL; obj=obj->next) if (obj->pIndexData->vnum == obj_index->vnum) { ingameCount++; if (obj->carried_by != NULL) char_printf(ch, " Carried by %s\n", obj->carried_by->name); else if (obj->in_room != NULL) char_printf(ch, " At {D[{W%7d{D]{x %s\n", obj->in_room->vnum, mlstr_cval(obj->in_room->name, ch)); else if (obj->in_obj != NULL) char_printf(ch, " In {D[{W%7d{D]{x %s\n", obj->in_obj->pIndexData->vnum, mlstr_mval(obj->in_obj->short_descr)); } char_printf(ch, " {c%d {wfound in game. {c%d {wshould be in pFiles.{x\n", ingameCount, obj_index->count-ingameCount); return; } nMatch = 0; for (vnum = 0; nMatch < top_obj_index; vnum++) if ((obj_index = get_obj_index(vnum)) != NULL) { nMatch++; if (obj_index->limit != -1) { lCount++; build_points(obj_index, &bp, &bpmax); char_printf(ch, "{D[{%c%7d{D] {%c%3d{w of {C%3d{D max" " {c%3d{Dlvl {W:{x %s\n", build_point_percent_color(bp, bpmax), obj_index->vnum, (obj_index->count > obj_index->limit) ? 'R' : 'c', obj_index->count, obj_index->limit, obj_index->level, mlstr_mval(obj_index->short_descr)); } } char_printf(ch, "\n{c%d{w of {c%d {wobjects are limited.{x\n", lCount, nMatch); } void do_rare(CHAR_DATA *ch, const char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; extern int top_obj_index; OBJ_DATA *obj; OBJ_INDEX_DATA *obj_index; int lCount = 0; int ingameCount; int nMatch; int vnum; int min_level, max_level, tmp; int bp = 0, bpmax = 0; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); if (arg1[0] == '\0') { char_puts("Syntax: rare [min-level] [max-level]\n" " or: rare [vnum]\n", ch); return; } if (arg2[0] == '\0') { obj_index = get_obj_index(atoi(arg1)); if (obj_index == NULL) { char_puts("Not found.\n", ch); return; } if (IS_SET(obj_index->extra_flags, ITEM_RARE)) { char_puts("Thats not a rare item.\n", ch); return; } nMatch = 0; build_points(obj_index, &bp, &bpmax); char_printf(ch, "{D[{%c%7d{D] {%c%3d{w of {C%3d{D max" " {c%3d{xlvl {W:{x %s\n", build_point_percent_color(bp, bpmax), obj_index->vnum, (obj_index->count > obj_index->limit) ? 'R' : 'c', obj_index->count, obj_index->limit, obj_index->level, mlstr_mval(obj_index->short_descr)); ingameCount = 0; for (obj=object_list; obj != NULL; obj=obj->next) if (obj->pIndexData->vnum == obj_index->vnum) { ingameCount++; if (obj->carried_by != NULL) char_printf(ch, " Carried by %s\n", obj->carried_by->name); else if (obj->in_room != NULL) char_printf(ch, " At {D[{W%7d{D]{x %s\n", obj->in_room->vnum, mlstr_cval(obj->in_room->name, ch)); else if (obj->in_obj != NULL) char_printf(ch, " In {D[{W%7d{D]{x %s\n", obj->in_obj->pIndexData->vnum, mlstr_mval(obj->in_obj->short_descr)); } char_printf(ch, " {c%d {wfound in game. {c%d {wshould be in pFiles.{x\n", ingameCount, obj_index->count-ingameCount); return; } nMatch = 0; min_level = atoi(arg1); max_level = atoi(arg2); if (min_level > max_level) { tmp = min_level; min_level = max_level; max_level = tmp; } for (vnum = 0; nMatch < top_obj_index; vnum++) if ((obj_index = get_obj_index(vnum)) != NULL) { nMatch++; if (obj_index->level >= min_level && obj_index->level <= max_level && IS_SET(obj_index->extra_flags, ITEM_RARE)) { lCount++; build_points(obj_index, &bp, &bpmax); char_printf(ch, "{D[{%c%7d{D] {%c%3d{w of {C%3d{D max" " {c%3d{Dlvl {W:{x %s\n", build_point_percent_color(bp, bpmax), obj_index->vnum, (obj_index->count > obj_index->limit) ? 'R' : 'c', obj_index->count, obj_index->limit, obj_index->level, mlstr_mval(obj_index->short_descr)); } } char_printf(ch, "\n{c%d{w of {c%d {wobjects are rare.{x\n", lCount, nMatch); } /* * Syntax: ofind [vnum] * or: ofind type [pill|wand|armor|all] level [min] [max] flags [rare][noremove] * or: ofind weapon [spear|dagger] level [min] [max] flags [flaming] * * by Zsuzsu */ void do_ofind (CHAR_DATA *ch, const char *argument) { extern int top_obj_index; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; int affect[APPLY_MAX][3]; /* [argument]->[loc][min][max] */ AFFECT_DATA *pAf; OBJ_INDEX_DATA *obj_index; BUFFER *output; AREA_DATA *pArea; int lCount = 0, nMatch = 0, vnum = 0, min_level = 0, max_level = 999, bp = 0, bpmax = 0, item_type = 0, extra_flags = 0, wear_flag = 0, weapon = -1, tmp = 0, min_vnum = 0, bp_percent = -1, min_weight = -1, max_weight = -1, max_vnum = top_obj_index; int i; bool is_limited = FALSE, closed_area = FALSE; const flag_t *f = NULL; for (i = 0; i<APPLY_MAX; i++) affect[i][0] = APPLY_NONE; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); if (arg1[0] == '\0') { char_puts( "Syntax: ofind [vnum]\n" " or: ofind [options]\n" " level [min] [max]\n" " type [pill|boat|light]\n" " wear [neck|ring]\n" " weapon [spear|dagger]\n" /* " flags [rare] [noremove]\n" " aff [flaming]\n" */ " weight [min] [max]\n" " bp [percent] (>=)\n" " affect [loc] [min] [max]\n" " limited\n" " closed (show closed areas)\n" , ch); return; } if (arg2[0] == '\0' && str_prefix(arg1, "limited")) { ofind_vnum(ch, atoi(arg1)); return; } while (arg1[0] != '\0') { if (arg2[0] == '\0') argument = one_argument(argument, arg2, sizeof(arg2)); /*limited items*/ if (!str_prefix(arg1, "limited")) { is_limited = TRUE; strnzcpy(arg1, sizeof(arg1), arg2); arg2[0] = '\0'; continue; } /*level range*/ else if (!str_prefix(arg1, "levels") || !str_prefix(arg1, "lvls")) { min_level = atoi(arg2); argument = one_argument(argument, arg2, sizeof(arg2)); if (!isdigit(arg2[0])) { max_level = min_level; strnzcpy(arg1, sizeof(arg1), arg2); arg2[0] = '\0'; continue; } max_level = atoi(arg2); if (min_level > max_level) { tmp = min_level; min_level = max_level; max_level = tmp; } arg2[0] = '\0'; } /*weight range*/ else if (!str_prefix(arg1, "weight")) { min_weight = atoi(arg2); argument = one_argument(argument, arg2, sizeof(arg2)); if (!isdigit(arg2[0])) { max_weight = min_weight; strnzcpy(arg1, sizeof(arg1), arg2); arg2[0] = '\0'; continue; } max_weight = atoi(arg2); if (min_weight > max_weight) { tmp = min_weight; min_weight = max_weight; max_weight = tmp; } arg2[0] = '\0'; } /*item type*/ else if (!str_prefix(arg1, "type")) { if ((f = flag_lookup(item_types, arg2)) == NULL) { char_puts("What type?\n", ch); show_flags(ch, item_types); return; } SET_BIT(item_type, f->bit); arg2[0] = '\0'; } /*wear location*/ else if (!str_prefix(arg1, "wear") || !str_prefix(arg1, "location")) { if ((f = flag_lookup(wear_flags, arg2)) == NULL) { char_puts("Wear where?\n", ch); show_flags(ch, wear_flags); return; } SET_BIT(wear_flag, f->bit); arg2[0] = '\0'; } /*weapon class*/ else if (!str_prefix(arg1, "weapon")) { SET_BIT(item_type, ITEM_WEAPON); if ((weapon = flag_value(weapon_class, arg2)) < 0) { char_puts("What kind of weapon?\n", ch); show_flags(ch, weapon_class); return; } arg2[0] = '\0'; } /* only for a certain area */ else if (!str_prefix(arg1, "area")) { pArea = area_lookup(atoi(arg2)); if (!pArea) { char_printf(ch, "Can't find area #%s.\n", arg2); return; } min_vnum = pArea->min_vnum; max_vnum = pArea->max_vnum; arg2[0] = '\0'; } /* build point percentage */ else if (!str_cmp(arg1, "bp")) { bp_percent = atoi(arg2); arg2[0] = '\0'; } /* show closed area items */ else if (!str_prefix(arg1, "closed")) { closed_area = TRUE; strnzcpy(arg1, sizeof(arg1), arg2); arg2[0] = '\0'; } /*affects*/ else if (!str_prefix(arg1, "affect")) { int location; if ((location = flag_value(apply_flags, arg2)) < 0) { char_printf(ch, "Affect '%s' invalid\n" "Valid Affects are:\n", arg2); show_flags(ch, apply_flags); return; } for (i=0; i < APPLY_MAX && affect[i][0] != APPLY_NONE; i++); if (i >= APPLY_MAX) { char_puts("Too many affects, sorry.\n", ch); return; } affect[i][0] = location; argument = one_argument(argument, arg2, sizeof(arg2)); if (!isdigit(arg2[0])) { affect[i][1] = affect[i][2] = 0; strnzcpy(arg1, sizeof(arg1), arg2); arg2[0] = '\0'; continue; } affect[i][1] = atoi(arg2); argument = one_argument(argument, arg2, sizeof(arg2)); if (!isdigit(arg2[0])) { affect[i][2] = affect[i][1]; strnzcpy(arg1, sizeof(arg1), arg2); arg2[0] = '\0'; continue; } affect[i][2] = atoi(arg2); if (affect[i][1] > affect[i][2]) { tmp = affect[i][1]; affect[i][1] = affect[i][2]; affect[i][2] = tmp; } arg2[0] = '\0'; } argument = one_argument(argument, arg1, sizeof(arg1)); } output = buf_new(-1); /* now do the search */ for (vnum = min_vnum; nMatch < max_vnum; vnum++) if ((obj_index = get_obj_index(vnum)) != NULL) { nMatch++; if (is_limited && !IS_OBJ_LIMITED(obj_index)) continue; if (obj_index->level < min_level || obj_index->level > max_level) continue; if (item_type && obj_index->item_type != item_type) continue; if (min_weight > -1 && (obj_index->weight < min_weight || obj_index->weight > max_weight)) continue; if (wear_flag && !IS_SET(obj_index->wear_flags, wear_flag)) continue; if (extra_flags && !IS_SET(obj_index->extra_flags, extra_flags)) continue; if (weapon >= 0 && obj_index->value[ITEM_WEAPON_TYPE] != weapon) continue; if (bp_percent != -1) { build_points(obj_index, &bp, &bpmax); if (bp_percent == 101) { if (bp <= bpmax) continue; } else if (bp == 0 && bp_percent != 0) continue; else if (bp*100 < bpmax * bp_percent) continue; } if (affect[0][0] != APPLY_NONE) { bool has_affect = FALSE; for (i = 0; i < APPLY_MAX && affect[i][0] != APPLY_NONE; i++) { pAf = obj_index->affected; while(pAf && !has_affect) { has_affect = (affect[i][0] == pAf->location && pAf->modifier >= affect[i][1] && pAf->modifier <= affect[i][2]); pAf = pAf->next; } if (!has_affect) break; } if (!has_affect) continue; } pArea = area_vnum_lookup(obj_index->vnum); if (!closed_area && IS_SET(pArea->flags, AREA_CLOSED)) continue; lCount++; if (bp_percent == -1) build_points(obj_index, &bp, &bpmax); buf_printf(output, "{D[{%c%7d{D] {%c%3d{w of {%c%3d{D max" " {%c%3d{Dlvl {W:{x %s\n", build_point_percent_color(bp, bpmax), obj_index->vnum, (IS_SET(pArea->flags, AREA_CLOSED) && obj_index->count > 0) ? 'Y': (obj_index->limit == -1) ? 'c' : (obj_index->count > obj_index->limit) ? 'R' : 'C', obj_index->count, IS_SET(pArea->flags, AREA_CLOSED) || obj_index->limit == -1 ? 'D' : 'C', obj_index->limit, IS_SET(pArea->flags, AREA_CLOSED) ? 'D' : 'c', obj_index->level, mlstr_mval(obj_index->short_descr)); } buf_printf(output, "\n {c%d{w of {c%d {wobjects fit that criteria.{x\n", lCount, nMatch); page_to_char(buf_string(output), ch); buf_free(output); } void ofind_vnum (CHAR_DATA *ch, int vnum) { OBJ_DATA *obj; OBJ_INDEX_DATA *obj_index; int ingameCount; int nMatch; int bp = 0, bpmax = 0; obj_index = get_obj_index(vnum); if (obj_index == NULL) { char_puts("Not found.\n", ch); return; } nMatch = 0; build_points(obj_index, &bp, &bpmax); char_printf(ch, "{D[{%c%7d{D] {%c%3d{w of {C%3d{D max" " {c%3d{xlvl {W:{x %s\n", build_point_percent_color(bp, bpmax), obj_index->vnum, (obj_index->count > obj_index->limit) ? 'R' : 'c', obj_index->count, obj_index->limit, obj_index->level, mlstr_mval(obj_index->short_descr)); ingameCount = 0; for (obj=object_list; obj != NULL; obj=obj->next) if (obj->pIndexData->vnum == obj_index->vnum) { ingameCount++; if (obj->carried_by != NULL) char_printf(ch, " Carried by %s\n", obj->carried_by->name); else if (obj->in_room != NULL) char_printf(ch, " At {D[{W%7d{D]{x %s\n", obj->in_room->vnum, mlstr_cval(obj->in_room->name, ch)); else if (obj->in_obj != NULL) char_printf(ch, " In {D[{W%7d{D]{x %s\n", obj->in_obj->pIndexData->vnum, mlstr_mval(obj->in_obj->short_descr)); } char_printf(ch, " {c%d {wfound in game. {c%d {wshould be in pFiles.{x\n", ingameCount, obj_index->count-ingameCount); } void do_wiznet(CHAR_DATA *ch, const char *argument) { int flag; if (argument[0] == '\0') { /* show wiznet status */ BUFFER *output; output = buf_new(-1); buf_printf(output, "Wiznet status: %s\n", IS_SET(ch->pcdata->wiznet, WIZ_ON) ? "ON" : "OFF"); buf_add(output, "\nlvl | channel | status"); buf_add(output, "\n----|------------------|-------\n"); for (flag = 0; wiznet_table[flag].name != NULL; flag++) { if (wiznet_table[flag].level == ML) continue; if (wiznet_table[flag].level > ch->level) continue; buf_printf(output, "%3d | {%c%-17s{x| %s{x\n", wiznet_table[flag].level, wiznet_table[flag].level > ch->level ? 'D' : 'W', wiznet_table[flag].name, wiznet_table[flag].level > ch->level ? "{DN/A" : IS_SET(ch->pcdata->wiznet, wiznet_table[flag].flag) ? "{GON" : "{rOFF"); } page_to_char(buf_string(output), ch); buf_free(output); return; } if (!str_prefix(argument,"on")) { char_puts("Welcome to Wiznet!\n", ch); SET_BIT(ch->pcdata->wiznet, WIZ_ON); return; } if (!str_prefix(argument,"off")) { char_puts("Signing off of Wiznet.\n", ch); REMOVE_BIT(ch->pcdata->wiznet, WIZ_ON); return; } flag = wiznet_lookup(argument); if (flag == -1 || ch->level < wiznet_table[flag].level || (wiznet_table[flag].level == ML && !IS_TRUSTED_IMP(ch))) { char_puts("No such option.\n", ch); return; } TOGGLE_BIT(ch->pcdata->wiznet, wiznet_table[flag].flag); if (!IS_SET(ch->pcdata->wiznet, wiznet_table[flag].flag)) char_printf(ch,"You will no longer see %s on wiznet.\n", wiznet_table[flag].name); else char_printf(ch, "You will now see %s on wiznet.\n", wiznet_table[flag].name); } void wiznet2(flag64_t flag, int min_level, flag64_t flag_skip, CHAR_DATA *ch, const char *format, ...) { DESCRIPTOR_DATA *d; char msg[MAX_STRING_LENGTH]; va_list ap; va_start(ap, format); vsnprintf(msg, sizeof(msg), format, ap); va_end(ap); for (d = descriptor_list; d != NULL; d = d->next) { CHAR_DATA *vch = d->original ? d->original : d->character; if (d->connected != CON_PLAYING || !vch || vch->level < LEVEL_IMMORTAL || !IS_SET(vch->pcdata->wiznet, WIZ_ON) || (flag && !IS_SET(vch->pcdata->wiznet, flag)) || (flag_skip && IS_SET(vch->pcdata->wiznet, flag_skip)) || vch->level < min_level || vch == ch) continue; if (IS_SET(vch->pcdata->wiznet, WIZ_PREFIX)) act_puts("--> ", vch, NULL, NULL, TO_CHAR | ACT_NOLF, POS_DEAD); act_puts(msg, vch, NULL, ch, TO_CHAR, POS_DEAD); } } void wiznet(const char *msg, CHAR_DATA *ch, const void *arg, flag64_t flag, flag64_t flag_skip, int min_level) { DESCRIPTOR_DATA *d; for (d = descriptor_list; d != NULL; d = d->next) { CHAR_DATA *vch = d->original ? d->original : d->character; if (d->connected != CON_PLAYING || !vch || vch->level < LEVEL_IMMORTAL || !IS_SET(vch->pcdata->wiznet, WIZ_ON) || (flag && !IS_SET(vch->pcdata->wiznet, flag)) || (flag_skip && IS_SET(vch->pcdata->wiznet, flag_skip)) || vch->level < min_level || vch == ch) continue; if (IS_SET(vch->pcdata->wiznet, WIZ_PREFIX)) act_puts("--> ", vch, NULL, NULL, TO_CHAR | ACT_NOLF, POS_DEAD); act_puts(msg, vch, arg, ch, TO_CHAR, POS_DEAD); } } /* * Death reports * by Zsuzsu */ void wiznet_death(CHAR_DATA *killer, CHAR_DATA *victim, int death_type) { if (killer == victim) { wiznet("{W$N{x has {Rdied{x of natural causes.", victim, NULL, WIZ_DEATHS, 0, 0); return; } switch (death_type) { case DEATH_DUEL: wiznet("{W$N{x has lost a {Rduel{x to {W$t{x.", victim, mlstr_mval(killer->short_descr), WIZ_DEATHS, 0, 0); break; case DEATH_ENSLAVED: wiznet("{W$N{x has been {renslaved{x by {W$t{x.", victim, mlstr_mval(killer->short_descr), WIZ_DEATHS, 0, 0); break; case DEATH_SLAY: wiznet("{W$N{x was {rslain{x by $t.", victim, mlstr_mval(killer->short_descr), WIZ_DEATHS, 0, 0); break; case DEATH_KILL: default: if (IS_NPC(killer)) wiznet("{W$N{x was {Rkilled{x by $t.", victim, mlstr_mval(killer->short_descr), WIZ_DEATHS, 0, 0); else { wiznet("{W$N{x was {rmurdered{x by {W$t{x.", victim, mlstr_mval(killer->short_descr), WIZ_DEATHS, 0, 0); log_printf("death: %s[%d] murdered by %s[%d](%d/%d)", victim->name, victim->level, killer->name, killer->level, killer->hit, killer->max_hit); } } } void wiznet_theft(CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *container, OBJ_DATA *obj, int theft_type, int chance, bool success, int worth) { BUFFER *output; output = buf_new(-1); switch (theft_type) { case THEFT_STEAL: buf_printf(output, "{W$N{x {g%s{x ", success ? "stole" : "failed to steal"); if (obj == NULL) buf_printf(output, "%d coins from %s", worth, mlstr_mval(victim->short_descr)); else buf_printf(output, "%s{D(%d){x from %s", mlstr_mval(obj->short_descr), worth/100, mlstr_mval(victim->short_descr)); if (container != NULL) buf_printf(output, "'s %s", mlstr_mval(container->short_descr)); if (chance > 0) buf_printf(output, " {D(chance %d%%){x", chance); break; case THEFT_PLANT: buf_printf(output, "{W$N{x {g%s{x ", success ? "planted" : "failed to plant"); if (obj == NULL) buf_printf(output, "%d %s on %s", (worth > 0) ? worth : worth*-1, (worth > 0) ? "silver" : "gold", mlstr_mval(victim->short_descr)); else buf_printf(output, "%s %s %s", mlstr_mval(obj->short_descr), container ? "in" : "on", mlstr_mval(victim->short_descr)); if (container != NULL) buf_printf(output, "'s %s", mlstr_mval(container->short_descr)); if (chance > 0) buf_printf(output, " {D(chance %d%%){x", chance); break; case THEFT_PAWN: buf_printf(output, "{W$N{x {g%s{x %s to %s for %d coins {D(worth %d){x.", success ? "pawned" : "tried to pawn", mlstr_mval(obj->short_descr), mlstr_mval(victim->short_descr), chance, worth); break; case THEFT_SWITCH: buf_printf(output, "{W$N{x {g%s a switcheroo{x on %s of %s for %s {D(%d%%){x", success ? "pulled" : "failed", mlstr_mval(victim->short_descr), mlstr_mval(obj->short_descr), mlstr_mval(container->short_descr), chance); break; } wiznet(buf_string(output), ch, NULL, WIZ_ECONOMY, 0, 0); buf_free(output); } void do_tick(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("tick area : area update\n",ch); char_puts("tick char : char update\n",ch); char_puts("tick room : room update\n",ch); char_puts("tick track: track update\n",ch); char_puts("tick obj : obj update\n",ch); return; } if (is_name(arg, "area")) { area_update(); char_puts("Area updated.\n", ch); return; } if (is_name(arg, "char player")) { char_update(); char_puts("Players updated.\n", ch); return; } if (is_name(arg, "room")) { room_update(); char_puts("Room updated.\n", ch); return; } if (is_name(arg, "track")) { track_update(); char_puts("Tracks updated.\n", ch); return; } if (is_name(arg, "obj")) { obj_update(); char_puts("Objects updated.\n", ch); return; } do_tick(ch,str_empty); return; } /* equips a character */ void do_outfit(CHAR_DATA *ch, const char *argument) { OBJ_DATA *obj; class_t *cl = class_lookup(ch->class); int sn,vnum; if ((ch->level > 5 && !IS_IMMORTAL(ch)) || IS_NPC(ch) || cl == NULL) { char_puts("Find it yourself!\n",ch); return; } if ((obj = get_eq_char(ch, WEAR_LIGHT)) == NULL) { obj = create_obj(get_obj_index(OBJ_VNUM_SCHOOL_BANNER), 0); obj->cost = 0; obj->condition = 100; obj_to_char(obj, ch); equip_char(ch, obj, WEAR_LIGHT); } if ((obj = get_eq_char(ch, WEAR_BODY)) == NULL) { obj = create_obj(get_obj_index(OBJ_VNUM_SCHOOL_VEST), 0); obj->cost = 0; obj->condition = 100; obj_to_char(obj, ch); equip_char(ch, obj, WEAR_BODY); } /* do the weapon thing */ if ((obj = get_eq_char(ch,WEAR_WIELD)) == NULL) { sn = 0; vnum = cl->weapon; obj = create_obj(get_obj_index(vnum),0); obj->condition = 100; obj_to_char(obj,ch); equip_char(ch,obj,WEAR_WIELD); } if (((obj = get_eq_char(ch,WEAR_WIELD)) == NULL || !IS_WEAPON_STAT(obj,WEAPON_TWO_HANDS)) && (obj = get_eq_char(ch, WEAR_SHIELD)) == NULL) { obj = create_obj(get_obj_index(OBJ_VNUM_SCHOOL_SHIELD), 0); obj->cost = 0; obj->condition = 100; obj_to_char(obj, ch); equip_char(ch, obj, WEAR_SHIELD); } char_puts("You have been equipped by gods.\n",ch); } void do_smote(CHAR_DATA *ch, const char *argument) { CHAR_DATA *vch; const char *letter, *name; char last[MAX_INPUT_LENGTH], temp[MAX_STRING_LENGTH]; int matches = 0; if (!IS_NPC(ch) && IS_SET(ch->restricted_channels, CHAN_GLOBAL_EMOTE)) { char_puts("You can't show your emotions.\n", ch); return; } if (argument[0] == '\0') { char_puts("Emote what?\n", ch); return; } if (strstr(argument,ch->name) == NULL) { char_puts("You must include your name in an smote.\n",ch); return; } char_printf(ch, "%s\n", argument); for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (vch->desc == NULL || vch == ch) continue; if ((letter = strstr(argument,vch->name)) == NULL) { char_printf(ch, "%s\n", argument); continue; } strnzcpy(temp, sizeof(temp), argument); temp[strlen(argument) - strlen(letter)] = '\0'; last[0] = '\0'; name = vch->name; for (; *letter != '\0'; letter++) { if (*letter == '\'' && matches == strlen(vch->name)) { strnzcat(temp, sizeof(temp), "r"); continue; } if (*letter == 's' && matches == strlen(vch->name)) { matches = 0; continue; } if (matches == strlen(vch->name)) matches = 0; if (*letter == *name) { matches++; name++; if (matches == strlen(vch->name)) { strnzcat(temp, sizeof(temp), "you"); last[0] = '\0'; name = vch->name; continue; } strnzncat(last, sizeof(last), letter, 1); continue; } matches = 0; strnzcat(temp, sizeof(temp), last); strnzncat(temp, sizeof(temp), letter, 1); last[0] = '\0'; name = vch->name; } char_printf(ch, "%s\n", temp); } } void do_bamfin(CHAR_DATA *ch, const char *argument) { if (!IS_NPC(ch)) { if (argument[0] == '\0') { char_printf(ch, "Your poofin is '%s'\n", ch->pcdata->bamfin); return; } if (strstr(argument, ch->name) == NULL) { char_puts("You must include your name.\n",ch); return; } free_string(ch->pcdata->bamfin); ch->pcdata->bamfin = str_dup(argument); char_printf(ch, "Your poofin is now '%s'\n", ch->pcdata->bamfin); } } void do_bamfout(CHAR_DATA *ch, const char *argument) { if (!IS_NPC(ch)) { if (argument[0] == '\0') { char_printf(ch, "Your poofout is '%s'\n", ch->pcdata->bamfout); return; } if (strstr(argument,ch->name) == NULL) { char_puts("You must include your name.\n", ch); return; } free_string(ch->pcdata->bamfout); ch->pcdata->bamfout = str_dup(argument); char_printf(ch, "Your poofout is now '%s'\n", ch->pcdata->bamfout); } } void do_deny(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Deny whom?\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (victim->level >= ch->level) { char_puts("You failed.\n", ch); return; } SET_BIT(victim->state_flags, STATE_DENY); char_puts("You are denied access!\n", victim); wiznet("$N denies access to $i", ch, victim, WIZ_PENALTIES, 0, 0); char_puts("Ok.\n", ch); save_char_obj(victim, FALSE); stop_fighting(victim, TRUE); quit_char(victim, 0); } void do_disconnect(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; DESCRIPTOR_DATA *d; CHAR_DATA *victim; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Disconnect whom?\n", ch); return; } if (is_number(arg)) { int desc; desc = atoi(arg); for (d = descriptor_list; d != NULL; d = d->next) { if (d->descriptor == desc) { close_descriptor(d); char_puts("Ok.\n", ch); return; } } } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (victim->desc == NULL) { act("$N doesn't have a descriptor.", ch, NULL, victim, TO_CHAR); return; } for (d = descriptor_list; d != NULL; d = d->next) if (d == victim->desc) { close_descriptor(d); char_puts("Ok.\n", ch); return; } bug("Do_disconnect: desc not found.", 0); char_puts("Descriptor not found!\n", ch); return; } void do_echo(CHAR_DATA *ch, const char *argument) { DESCRIPTOR_DATA *d; if (argument[0] == '\0') { char_puts("Global echo what?\n", ch); return; } for (d = descriptor_list; d; d = d->next) if (d->connected == CON_PLAYING) { if (d->character->level >= ch->level) char_puts("global> ", d->character); char_printf(d->character, "%s\n", argument); } } void do_recho(CHAR_DATA *ch, const char *argument) { DESCRIPTOR_DATA *d; if (argument[0] == '\0') { char_puts("Local echo what?\n", ch); return; } for (d = descriptor_list; d; d = d->next) if (d->connected == CON_PLAYING && d->character->in_room == ch->in_room) { if (d->character->level >= ch->level) char_puts("local> ",d->character); char_printf(d->character, "%s\n", argument); } } void do_zecho(CHAR_DATA *ch, const char *argument) { DESCRIPTOR_DATA *d; if (argument[0] == '\0') { char_puts("Zone echo what?\n",ch); return; } for (d = descriptor_list; d; d = d->next) if (d->connected == CON_PLAYING && d->character->in_room != NULL && ch->in_room != NULL && d->character->in_room->area == ch->in_room->area) { if (d->character->level >= ch->level) char_puts("zone> ", d->character); char_printf(d->character, "%s\n", argument); } } void do_pecho(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument(argument, arg, sizeof(arg)); if (argument[0] == '\0' || arg[0] == '\0') { char_puts("Personal echo what?\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (victim->level >= ch->level && ch->level != MAX_LEVEL) char_puts("personal> ", victim); char_printf(victim, "%s\n", argument); char_printf(ch, "personal> %s\n", argument); } ROOM_INDEX_DATA *find_location(CHAR_DATA *ch, const char *argument) { CHAR_DATA *victim; OBJ_DATA *obj; if (is_number(argument)) return get_room_index(atoi(argument)); if ((victim = get_char_world(ch, argument)) != NULL) return victim->in_room; if ((obj = get_obj_world(ch, argument)) != NULL) return obj->in_room; return NULL; } void do_transfer(CHAR_DATA *ch, const char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *location, *from_room; DESCRIPTOR_DATA *d; CHAR_DATA *victim; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); if (arg1[0] == '\0') { char_puts("Transfer whom (and where)?\n", ch); return; } if (!str_cmp(arg1, "all")) { for (d = descriptor_list; d != NULL; d = d->next) if (d->connected == CON_PLAYING && d->character != ch && d->character->in_room != NULL && can_see(ch, d->character)) doprintf(do_transfer, ch, "%s %s", d->character->name, arg2); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (victim->in_room == NULL) { char_puts("They are in limbo.\n", ch); return; } /* * Thanks to Grodyn for the optional location parameter. */ if (arg2[0]) { if ((location = find_location(ch, arg2)) == NULL) { char_puts("No such location.\n", ch); return; } if (room_is_private(location) && ch->level < MAX_LEVEL) { char_puts("That room is private right now.\n", ch); return; } } else { if (ch->in_room == victim->in_room && victim->last_transfer != NULL) location = victim->last_transfer; else location = ch->in_room; } if (victim->fighting != NULL) stop_fighting(victim, TRUE); act("$n disappears in a mushroom cloud.", victim, NULL, NULL, TO_ROOM); from_room = victim->in_room; char_from_room(victim); /*Zz*/ if (ch->in_room == location) { char_printf(ch, "{D[{W%d{D]{w %s arrives from a puff of smoke.", from_room->vnum, mlstr_mval(victim->short_descr)); act("$N arrives from a puff of smoke.", ch, NULL, victim, TO_NOTVICT); } else { act("$N arrives from a puff of smoke.", location->people, NULL, victim, TO_NOTVICT); act("$N transfered.", ch, NULL, victim, TO_CHAR); } victim->last_transfer = from_room; if (ch != victim) act("$n has transferred you.", ch, NULL, victim, TO_VICT); char_to_room(victim, location); if (JUST_KILLED(victim)) return; do_look(victim, "auto"); } void do_at(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *location; ROOM_INDEX_DATA *original; OBJ_DATA *on; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0' || argument[0] == '\0') { char_puts("At where what?\n", ch); return; } if ((location = find_location(ch, arg)) == NULL) { char_puts("No such location.\n", ch); return; } if (room_is_private(location) && ch->level < MAX_LEVEL) { char_puts("That room is private right now.\n", ch); return; } original = ch->in_room; on = ch->on; char_from_room(ch); char_to_room(ch, location); if (JUST_KILLED(ch)) return; interpret(ch, argument); /* handle 'at xxx quit' */ if (JUST_KILLED(ch) || ch->extracted) return; char_from_room(ch); char_to_room(ch, original); if (JUST_KILLED(ch)) return; ch->on = on; } void do_goto(CHAR_DATA *ch, const char *argument) { ROOM_INDEX_DATA *location; CHAR_DATA *rch; CHAR_DATA *pet = NULL; if (argument[0] == '\0') { char_puts("Goto where?\n", ch); return; } if ((location = find_location(ch, argument)) == NULL) { char_puts("No such location.\n", ch); return; } if (ch->level < LEVEL_IMMORTAL) { if (ch->fighting) { char_puts("No way! You are fighting.\n", ch); return; } if (IS_PUMPED(ch)) { act_puts("You are too pumped to pray now.", ch, NULL, NULL, TO_CHAR, POS_DEAD); return; } #if 0 if (!IS_SET(ch->in_room->room_flags, ROOM_PEACE)) { char_puts("You must be in a safe place in order " "to make a transportation.\n", ch); return; } #endif if (!IS_BUILDER(ch, location->area) || !IS_BUILDER(ch, ch->in_room->area)) { char_puts("You cannot transfer yourself there.\n", ch); return; } } if (ch->fighting != NULL) stop_fighting(ch, TRUE); for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) if (IS_TRUSTED(rch, ch->invis_level)) { if (ch->pcdata != NULL && ch->pcdata->bamfout[0] != '\0') act("$t", ch, ch->pcdata->bamfout, rch, TO_VICT); else act("$n leaves in a swirling mist.", ch, NULL, rch, TO_VICT); } if (ch->pet && ch->in_room == ch->pet->in_room) pet = ch->pet; char_from_room(ch); for (rch = location->people; rch; rch = rch->next_in_room) if (IS_TRUSTED(rch, ch->invis_level)) { if (ch->pcdata && ch->pcdata->bamfin[0]) act("$t", rch, ch->pcdata->bamfin, NULL, TO_CHAR); else act("$N appears in a swirling mist.", rch, NULL, ch, TO_CHAR); } char_to_room(ch, location); if (JUST_KILLED(ch)) return; do_look(ch, "auto"); if (pet && !IS_AFFECTED(pet, AFF_SLEEP)) { if (ch->pet->position != POS_STANDING) do_stand(pet, str_empty); char_from_room(pet); char_to_room(pet, location); } } void do_violate(CHAR_DATA *ch, const char *argument) { ROOM_INDEX_DATA *location; CHAR_DATA *rch; if (argument[0] == '\0') { char_puts("Goto where?\n", ch); return; } if ((location = find_location(ch, argument)) == NULL) { char_puts("No such location.\n", ch); return; } if (!room_is_private(location)) { char_puts("That room isn't private, use goto.\n", ch); return; } if (ch->fighting != NULL) stop_fighting(ch, TRUE); for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) if (IS_TRUSTED(rch, ch->invis_level)) { if (ch->pcdata != NULL && ch->pcdata->bamfout[0] != '\0') act("$t", ch, ch->pcdata->bamfout, rch, TO_VICT); else act("$n leaves in a swirling mist.", ch, NULL, rch, TO_VICT); } char_from_room(ch); for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) if (IS_TRUSTED(rch, ch->invis_level)) { if (ch->pcdata && ch->pcdata->bamfin[0] != '\0') act("$t", rch, ch->pcdata->bamfin, NULL, TO_CHAR); else act("$N appears in a swirling mist.", rch, NULL, ch, TO_CHAR); } char_to_room(ch, location); if (JUST_KILLED(ch)) return; do_look(ch, "auto"); } /* RT to replace the 3 stat commands */ void do_stat(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; OBJ_DATA *obj; ROOM_INDEX_DATA *location; CHAR_DATA *victim; const char *string; string = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Syntax:\n", ch); char_puts(" stat <name>\n", ch); char_puts(" stat obj <name>\n", ch); char_puts(" stat mob <name>\n", ch); char_puts(" stat room <number>\n", ch); char_puts(" stat desc <number>\n", ch); return; } if (!str_prefix(arg, "room")) { do_rstat(ch, string); return; } if (!str_prefix(arg, "obj")) { do_ostat(ch, string); return; } if (!str_prefix(arg, "char") || !str_cmp(arg, "mob")) { do_mstat(ch, string); return; } if (!str_cmp(arg, "desc")) { do_dstat(ch, string); return; } /* do it the old way */ obj = get_obj_world(ch, argument); if (obj != NULL) { do_ostat(ch, argument); return; } victim = get_char_world(ch, argument); if (victim != NULL) { do_mstat(ch, argument); return; } location = find_location(ch, argument); if (location != NULL) { do_rstat(ch, argument); return; } char_puts("Nothing by that name found anywhere.\n",ch); } void do_rstat(CHAR_DATA *ch, const char *argument) { char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *location; ROOM_HISTORY_DATA *rh; OBJ_DATA *obj; CHAR_DATA *rch; BUFFER *output; int door; one_argument(argument, arg, sizeof(arg)); location = (arg[0] == '\0') ? ch->in_room : find_location(ch, arg); if (location == NULL) { char_puts("No such location.\n", ch); return; } if (ch->in_room != location && room_is_private(location) && !IS_TRUSTED(ch,IMPLEMENTOR)) { char_puts("That room is private right now.\n", ch); return; } output = buf_new(-1); if (ch->in_room->affected_by) buf_printf(output, "Affected by %s\n", flag_string(raffect_flags, ch->in_room->affected_by)); if (ch->in_room->room_flags) buf_printf(output, "Room Flags %s\n", flag_string(room_flags, ch->in_room->room_flags)); mlstr_dump(output, "Name: ", location->name); buf_printf(output, "Area: '%s'\nOwner: '%s'\n", location->area->name, location->owner); buf_printf(output, "Vnum: %d Sector: %d Light: %d Healing: %d Mana: %d\n", location->vnum, location->sector_type, location->light, location->heal_rate, location->mana_rate); buf_printf(output, "Room flags: [%s].\n", flag_string(room_flags, location->room_flags)); buf_add(output, "Description:\n"); mlstr_dump(output, str_empty, location->description); if (location->ed != NULL) { ED_DATA *ed; buf_add(output, "Extra description keywords: '"); for (ed = location->ed; ed; ed = ed->next) { buf_add(output, ed->keyword); if (ed->next != NULL) buf_add(output, " "); } buf_add(output, "'.\n"); } buf_add(output, "Characters:"); for (rch = location->people; rch; rch = rch->next_in_room) { if (can_see(ch,rch)) { buf_add(output, " "); one_argument(rch->name, buf, sizeof(buf)); buf_add(output, buf); } } buf_add(output, ".\nObjects: "); for (obj = location->contents; obj; obj = obj->next_content) { buf_add(output, " "); one_argument(obj->name, buf, sizeof(buf)); buf_add(output, buf); } buf_add(output, ".\n"); for (door = 0; door <= 5; door++) { EXIT_DATA *pexit; if ((pexit = location->exit[door]) != NULL) { buf_printf(output, "Door: %d. To: %d. Key: %d. Exit flags: %d.\nKeyword: '%s'.\n", door, pexit->to_room.r == NULL ? -1 : pexit->to_room.r->vnum, pexit->key, pexit->exit_info, pexit->keyword); mlstr_dump(output, "Description: ", pexit->description); } } buf_add(output, "Tracks:\n"); for (rh = location->history;rh != NULL;rh = rh->next) buf_printf(output,"%s took door %i.\n", rh->name, rh->went); send_to_char(buf_string(output), ch); buf_free(output); } void do_ostat(CHAR_DATA *ch, const char *argument) { int i; BUFFER *output; char arg[MAX_INPUT_LENGTH]; OBJ_DATA *obj; int autow_avg = 0, w_avg = 0, avg_dnum = 0, avg_dsize = 0; bool from_world = FALSE; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Stat what?\n", ch); return; } if ((obj = get_obj_room(ch, argument)) == NULL) { if ((obj = get_obj_world(ch, argument)) == NULL) { char_puts("Nothing like that in hell, heaven or earth.\n",ch); return; } else from_world = TRUE; } output = buf_new(-1); buf_printf(output, "Name: %s\n", obj->name); buf_printf(output, "Vnum: %d Type: %s Resets: %d\n", obj->pIndexData->vnum, flag_string(item_types, obj->pIndexData->item_type), obj->pIndexData->reset_num); buf_printf(output, "Wear: %s\n", flag_string(wear_flags, obj->wear_flags)); buf_printf(output, "Extra: %s\n", flag_string(extra_flags, obj->extra_flags)); buf_printf(output, "Number: %d/%d Weight: %d/%d/%d (10th pounds)\n", 1, get_obj_number(obj), obj->weight, get_obj_weight(obj),get_true_weight(obj)); buf_printf(output, "Level: %d Cost: %d Condition: %d Timer: %d Count: %d\n", obj->level, obj->cost, obj->condition, obj->timer, obj->pIndexData->count); buf_printf(output, "Material: %s MatDesc: %s\n", obj->material->name, obj->material_descr); buf_printf(output, "room: %d In object: %s Carried by: %s Wear_loc: %d\n", obj->in_room == NULL ? 0 : obj->in_room->vnum, obj->in_obj == NULL ? "(none)" : mlstr_mval(obj->in_obj->short_descr), obj->carried_by == NULL ? "(none)" : can_see(ch,obj->carried_by) ? obj->carried_by->name : "someone", obj->wear_loc); if (!mlstr_null(obj->owner)) buf_printf(output, "Owner: %s\n", mlstr_mval(obj->owner)); if (!mlstr_null(obj->killer)) buf_printf(output, "Killer: %s\n", mlstr_mval(obj->killer)); mlstr_dump(output, "Short description: ", obj->short_descr); mlstr_dump(output, "Long description: ", obj->description); buf_printf(output, "Values: %d %d %d %d %d\n", obj->value[0], obj->value[1], obj->value[2], obj->value[3], obj->value[4]); /* now give out vital statistics as per identify */ switch (obj->pIndexData->item_type) { int i; case ITEM_SCROLL: case ITEM_POTION: case ITEM_PILL: buf_printf(output, "Level %d spells of:", obj->value[0]); for (i = 1; i < 5; i++) if (obj->value[i] >= 0) buf_printf(output, " '%s'", skill_name(obj->value[i])); buf_add(output, ".\n"); break; case ITEM_WAND: case ITEM_STAFF: buf_printf(output, "Has %d(%d) charges of level %d", obj->value[ITEM_WAND_CHARGES_TOTAL], obj->value[ITEM_WAND_CHARGES_REMAINING], obj->value[ITEM_WAND_LEVEL]); if (obj->value[ITEM_WAND_SPELL] >= 0) buf_printf(output, " '%s'", skill_name(obj->value[ITEM_WAND_SPELL])); buf_add(output, ".\n"); break; case ITEM_DRINK_CON: buf_printf(output, "It holds %s-colored %s.\n", liq_table[obj->value[ITEM_DRINK_TYPE]].liq_color, liq_table[obj->value[ITEM_DRINK_TYPE]].liq_name); break; case ITEM_WEAPON: buf_printf(output, "%s\n", flag_string(weapon_class, obj->value[ITEM_WEAPON_TYPE])); autow_avg = get_autoweapon(obj->pIndexData, &avg_dnum, &avg_dsize, 100); w_avg = (1 + obj->value[ITEM_WEAPON_DICE_SIZE]) * obj->value[ITEM_WEAPON_DICE_NUM]/2; buf_printf(output, "Dam Average: {%c%d {Dauto: %d (%d%%){x\n", w_avg > autow_avg * 1.20 ? 'R' : w_avg > autow_avg ? 'Y' : w_avg > autow_avg * 0.90 ? 'G' : w_avg > autow_avg * 0.80 ? 'B' : 'M', w_avg, autow_avg, (w_avg - autow_avg)*100 / autow_avg +100); buf_printf(output, "Damage noun is %s.\n", attack_table[obj->value[ITEM_WEAPON_ATTACK_TYPE]].noun); if (obj->value[ITEM_WEAPON_FLAGS]) buf_printf(output,"Weapons flags: %s\n", flag_string(weapon_type2, obj->value[ITEM_WEAPON_FLAGS])); break; case ITEM_ARMOR: buf_printf(output, "Armor class is %d pierce, %d bash, %d slash, and %d vs. magic\n", obj->value[ITEM_ARMOR_AC_PIERCE], obj->value[ITEM_ARMOR_AC_BASH], obj->value[ITEM_ARMOR_AC_SLASH], obj->value[ITEM_ARMOR_AC_EXOTIC]); break; case ITEM_CONTAINER: buf_printf(output,"Capacity: %d# Maximum weight: %d# flags: %s\n", obj->value[ITEM_CONTAINER_WEIGHT], obj->value[ITEM_CONTAINER_PER_ITEM_WEIGHT], flag_string(cont_flags, obj->value[ITEM_CONTAINER_FLAGS])); if (obj->value[ITEM_CONTAINER_WEIGHT_MULTI] != 100) buf_printf(output,"Weight multiplier: %d%%\n", obj->value[ITEM_CONTAINER_WEIGHT_MULTI]); break; } if (obj->ed) { ED_DATA *ed; buf_add(output, "Extra description keywords: '"); for (ed = obj->ed; ed; ed = ed->next) { buf_add(output, ed->keyword); if (ed->next) buf_add(output, " "); } buf_add(output, "'\n"); } if (obj->pIndexData->ed) { ED_DATA *ed; buf_add(output, "pIndexData extra description keywords: '"); for (ed = obj->pIndexData->ed; ed; ed = ed->next) { buf_add(output, ed->keyword); if (ed->next) buf_add(output, " "); } buf_add(output, "'\n"); } if (!mlstr_null(obj->writtenDesc)) mlstr_dump(output, "WrittenDesc: ", obj->writtenDesc); if (!IS_SET(obj->extra_flags, ITEM_ENCHANTED)) format_obj_affects(output, obj->pIndexData->affected, FOA_F_NODURATION); format_obj_affects(output, obj->affected, 0); show_augment(ch, obj, output); if (obj->pIndexData->oprogs) { buf_add(output, "Object progs:\n"); for (i = 0; i < OPROG_MAX; i++) if (obj->pIndexData->oprogs[i] != NULL) buf_printf(output, "%s: {y%s{x\n", optype_table[i], oprog_name_lookup(obj->pIndexData->oprogs[i])); } buf_printf(output,"Damage condition : %d (%s)\n", obj->condition, get_cond_alias(obj)); if (obj->stolen_from > 0) buf_printf(output,"Stolen from [%d]\n", obj->stolen_from); for (i = 0; i < PAST_OWNER_MAX; i++) { if (!IS_NULLSTR(obj->past_owner[i])) { buf_printf(output, "PastOwner[%d]: %s %s\n", i, obj->past_owner[i], obj->past_owner_ip[i]); } } if (from_world) buf_printf(output, "Not in this room.\n"); buf_printf(output, "Next: %s Next_content: %s\n", obj->next == NULL ? "(none)" : mlstr_mval(obj->next->short_descr), obj->next_content == NULL ? "(none)" : mlstr_mval(obj->next_content->short_descr)); send_to_char(buf_string(output), ch); buf_free(output); } void do_mstat(CHAR_DATA *ch, const char *argument) { char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; AFFECT_DATA *paf; CHAR_DATA *victim; BUFFER *output; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Stat whom?\n", ch); return; } if ((victim = get_char_world(ch, argument)) && IS_NPC(victim)) { if ((victim = get_char_room(ch, argument)) == NULL) { char_puts("They aren't here.\n", ch); return; } } if (!victim) { char_puts("They aren't here.\n", ch); return; } output = buf_new(-1); buf_printf(output, "{yName:{x [{C%s{x] Vnum: {D[{W%6d{D]{x " "Reset Zone: {D%s{x Room: [{c%6d{x]\n", victim->name, IS_NPC(victim) ? victim->pIndexData->vnum : 0, (IS_NPC(victim) &&victim->zone) ? victim->zone->name : "?", victim->in_room == NULL ? 0 : victim->in_room->vnum); buf_printf(output, "Level: {c%d{D + {c%d{x " "Class: {c%s{x " "Race: {c%s {D({c%s{D){x " "Sex: {c%s{x\n", victim->level, victim->drain_level, class_name(victim), race_name(victim->race), race_name(ORG_RACE(victim)), flag_string(gender_table, victim->sex)); if (IS_NPC(victim)) snprintf(buf, sizeof(buf), "{c%d{x", victim->alignment); else { snprintf(buf, sizeof(buf), "{c%s{D-{c%s{x", flag_string(ethos_table, victim->ethos), flag_string(align_names, NALIGN(victim))); } if (IS_NPC(victim)) buf_printf(output, "Damage: {c%d{Dd{c%d{x " "Message: {c%s{x\n", victim->damage[DICE_NUMBER], victim->damage[DICE_TYPE], attack_table[victim->dam_type].noun); buf_printf(output, "Size: {c%s{x " "Align: %s " "Religion: {c%s{x.\n", flag_string(size_table, victim->size), buf, IS_NPC(victim) || victim->religion > MAX_RELIGION-1 ? "Zsuzsu" : religion_table[victim->religion].leader); buf_printf(output, "Str: {C%2d{x({c%2d{x) " "pierce: {c%5d{x " "Wimpy: {c%4d{x " "HP: {C%4d{D/{c%-4d{x\n", get_curr_stat(victim,STAT_STR), victim->perm_stat[STAT_STR], GET_AC(victim,AC_PIERCE), victim->wimpy, victim->hit, victim->max_hit); buf_printf(output, "Int: {C%2d{x({c%2d{x) " "bash: {c%5d{x " "Trains: {c%2d{x " "Mana: {C%4d{D/{c%-4d{x\n", get_curr_stat(victim,STAT_INT), victim->perm_stat[STAT_INT], GET_AC(victim,AC_BASH), victim->train, victim->mana, victim->max_mana); buf_printf(output, "Wis: {C%2d{x({c%2d{x) " "slash: {c%5d{x " "Practs: {c%3d{x " "Move: {C%4d{D/{c%-4d{x\n", get_curr_stat(victim,STAT_WIS), victim->perm_stat[STAT_WIS], GET_AC(victim,AC_SLASH), victim->practice, victim->move, victim->max_move); buf_printf(output, "Dex: {C%2d{x({c%2d{x) " "magic: {c%5d{x " "Deaths: {c%3d{x ", get_curr_stat(victim,STAT_DEX), victim->perm_stat[STAT_DEX], GET_AC(victim,AC_EXOTIC), IS_NPC(victim) ? 0 : victim->pcdata->death); if (!IS_NPC(victim) && ch->level == ML) { buf_printf(output, "{rPKs: %3d{D/{r%-3d{x", victim->pcdata->pk_kills, victim->pcdata->pk_deaths); } buf_add(output, "\n"); buf_printf(output, "Con: {C%2d{x({c%2d{x) " "saves: {c%5d{x " "Hit: {C%4d{x " "Exp: {c%6d{x\n", get_curr_stat(victim,STAT_CON), victim->perm_stat[STAT_CON], victim->saving_throw, GET_HITROLL(victim), victim->exp); buf_printf(output, "Cha: {C%2d{x({c%2d{x) " " " "Dam: {C%4d{x " "tnl: {c%6d{x\n", get_curr_stat(victim,STAT_CHA), victim->perm_stat[STAT_CHA], GET_DAMROLL(victim), IS_NPC(victim) ? 0 : exp_to_level(victim)); if (IS_TRUSTED_IMP(ch) && !IS_NPC(victim)) { buf_printf(output, "Lck: {C%2d{x({c%2d{x) " "\n", get_curr_stat(victim,STAT_LCK), victim->perm_stat[STAT_LCK]); buf_printf(output, "Trends: Str: {C%2d{D/%2d{x" " Int: {C%2d{D/%2d{x" " Wis: {C%2d{D/%2d{x" " Dex: {C%2d{D/%2d{x" " Con: {C%2d{D/%2d{x" " Cha: {C%2d{D/%2d{x\n", victim->pcdata->trend_stat[STAT_STR]/victim->level, victim->pcdata->trend_stat[STAT_STR], victim->pcdata->trend_stat[STAT_INT]/victim->level, victim->pcdata->trend_stat[STAT_INT], victim->pcdata->trend_stat[STAT_WIS]/victim->level, victim->pcdata->trend_stat[STAT_WIS], victim->pcdata->trend_stat[STAT_DEX]/victim->level, victim->pcdata->trend_stat[STAT_DEX], victim->pcdata->trend_stat[STAT_CON]/victim->level, victim->pcdata->trend_stat[STAT_CON], victim->pcdata->trend_stat[STAT_CHA]/victim->level, victim->pcdata->trend_stat[STAT_CHA] ); buf_printf(output, "LvlAvg: Str: {C%2d{D/%2d{x" " Int: {C%2d{D/%2d{x" " Wis: {C%2d{D/%2d{x" " Dex: {C%2d{D/%2d{x" " Con: {C%2d{D/%2d{x" " Cha: {C%2d{D/%2d{x\n", (victim->pcdata->stat_avg[STAT_STR][STAT_AVG_NUM]) ? victim->pcdata->stat_avg[STAT_STR][STAT_AVG_TOTAL] / victim->pcdata->stat_avg[STAT_STR][STAT_AVG_NUM] : 0, victim->pcdata->stat_avg[STAT_STR][STAT_AVG_NUM], (victim->pcdata->stat_avg[STAT_INT][STAT_AVG_NUM]) ? victim->pcdata->stat_avg[STAT_INT][STAT_AVG_TOTAL] / victim->pcdata->stat_avg[STAT_INT][STAT_AVG_NUM] : 0, victim->pcdata->stat_avg[STAT_INT][STAT_AVG_NUM], (victim->pcdata->stat_avg[STAT_WIS][STAT_AVG_NUM]) ? victim->pcdata->stat_avg[STAT_WIS][STAT_AVG_TOTAL] / victim->pcdata->stat_avg[STAT_WIS][STAT_AVG_NUM] : 0, victim->pcdata->stat_avg[STAT_WIS][STAT_AVG_NUM], (victim->pcdata->stat_avg[STAT_DEX][STAT_AVG_NUM]) ? victim->pcdata->stat_avg[STAT_DEX][STAT_AVG_TOTAL] / victim->pcdata->stat_avg[STAT_DEX][STAT_AVG_NUM] : 0, victim->pcdata->stat_avg[STAT_DEX][STAT_AVG_NUM], (victim->pcdata->stat_avg[STAT_CON][STAT_AVG_NUM]) ? victim->pcdata->stat_avg[STAT_CON][STAT_AVG_TOTAL] / victim->pcdata->stat_avg[STAT_CON][STAT_AVG_NUM] : 0, victim->pcdata->stat_avg[STAT_CON][STAT_AVG_NUM], (victim->pcdata->stat_avg[STAT_CHA][STAT_AVG_NUM]) ? victim->pcdata->stat_avg[STAT_CHA][STAT_AVG_TOTAL] / victim->pcdata->stat_avg[STAT_CHA][STAT_AVG_NUM] : 0, victim->pcdata->stat_avg[STAT_CHA][STAT_AVG_NUM] ); } if (!IS_NPC(victim)) { buf_printf(output, "Thirst: {c%d{x Hunger: {c%d{x Full: {c%d{x " "Drunk: {C%d{D/{c%d{x Bloodlust: {c%d{x Desire: {c%d{x\n", victim->pcdata->condition[COND_THIRST], victim->pcdata->condition[COND_HUNGER], victim->pcdata->condition[COND_FULL], victim->pcdata->condition[COND_DRUNK], drunk_tolerance(victim), victim->pcdata->condition[COND_BLOODLUST], victim->pcdata->condition[COND_DESIRE]); } buf_printf(output, "Gold: {Y%ld{x " "Silver: {W%ld{x ", victim->gold, victim->silver); if (!IS_NPC(victim)) { buf_printf(output, "Bank Gold: {Y%ld{x " "Silver: {W%ld{x\n", victim->pcdata->bank_g, victim->pcdata->bank_s); } buf_printf(output, "Carry number: {C%d{D/{c%d{x " "Carry weight: {C%ld{D/{c%ld{D (%d%%){x\n", victim->carry_number, can_carry_n(victim), ch_weight_carried(victim), ch_max_carry_weight(victim), ENCUMBERANCE(victim)); if (!IS_NPC(victim)) { buf_printf(output, "Age: {c%3d{x " "Played: {c%d{x " "Last Level: {c%d{x " "Timer: {c%d{x\n", get_age(victim), (int) (victim->played+current_time-victim->logon) / 3600, victim->pcdata->last_level, victim->timer); } if (!IS_NPC(victim)) { buf_printf(output, "AlignKills: {c%d{x %s" " {c%d{x %s" " {c%d{x %s" " {c%d{x %s\n", victim->pcdata->align_killed[ALIGN_INDEX_NONE], "non", victim->pcdata->align_killed[ALIGN_INDEX_GOOD], "good", victim->pcdata->align_killed[ALIGN_INDEX_NEUTRAL], "neutral", victim->pcdata->align_killed[ALIGN_INDEX_EVIL], "evil"); buf_printf(output, "AlignStanding: {c%s{x", flag_string(standing_types, align_standing(victim))); if (ch->level >= ML) { buf_printf(output, " {c%d{x %s" " {c%d{x %s" " {c%d{x %s", victim->pcdata->align_standing[ALIGN_INDEX_GOOD], "good", victim->pcdata->align_standing[ALIGN_INDEX_NEUTRAL], "neutral", victim->pcdata->align_standing[ALIGN_INDEX_EVIL], "evil"); } buf_printf(output, "\n"); } if (!IS_NPC(victim)) { buf_printf(output, "Acct: [{c%s{x]\n", flag_string(acct_flags, victim->acct_flags)); buf_printf(output, "Config: [{c%s{x]\n", flag_string(plr_conf_flags, victim->conf_flags)); buf_printf(output, "State: [{c%s{x]\n", flag_string(state_flags, victim->state_flags)); } buf_printf(output, "Fixes: [{c%s{x]\n", flag_string(fixed_flags, victim->fixed_flags)); if (victim->comm) buf_printf(output, "Comm: [{c%s{x]\n", flag_string(comm_flags, victim->comm)); if (victim->channels) { channel_t *ct; char color = 'x'; buf_printf(output, "Channels:["); for (ct = channel_table; ct->name; ct++) { if (victim->level >= ct->write_level || victim->level >= ct->read_level) { if (IS_SET(victim->channels, ct->flag)) color = 'c'; else color = 'D'; if (IS_SET(victim->restricted_channels, ct->flag)) color = 'r'; buf_printf(output, "{%c%s ", color, ct->name); } } buf_printf(output, "{x]\n"); } else buf_printf(output, "Channels:[{Dnone{x]\n"); if (!IS_NPC(victim) && victim->pcdata->wiznet && (ch->level > victim->level || IS_TRUSTED_IMP(ch))) { int flag; char color = 'x'; buf_printf(output, "Wiznet: ["); for (flag = 0; wiznet_table[flag].name; flag++) { if (wiznet_table[flag].level <= victim->level) { if (IS_SET(victim->pcdata->wiznet, wiznet_table[flag].flag)) color = 'c'; else color = 'D'; buf_printf(output, "{%c%s ", color, wiznet_table[flag].name); } } buf_printf(output, "{x]\n"); } if (IS_NPC(victim)) buf_printf(output, "Act: [{c%s{x]\n", flag_string(act_flags, victim->pIndexData->act)); if (IS_NPC(victim)) buf_printf(output, "Attr: [{c%s{x]\n", flag_string(mob_attr_flags, victim->pIndexData->attr_flags)); if (IS_NPC(victim) && victim->pIndexData->off_flags) buf_printf(output, "Offense: [{c%s{x]\n", flag_string(off_flags, victim->pIndexData->off_flags)); if (victim->imm_flags) buf_printf(output, "Immune: [{c%s{x]\n", flag_string(imm_flags, victim->imm_flags)); if (victim->res_flags) buf_printf(output, "Resist: [{c%s{x]\n", flag_string(res_flags, victim->res_flags)); if (victim->vuln_flags) buf_printf(output, "Vulner: [{c%s{x]\n", flag_string(vuln_flags, victim->vuln_flags)); if (victim->affected_by) buf_printf(output, "Affected [{C%s{x]\n", flag_string(affect_flags, victim->affected_by)); for (paf = victim->affected; paf != NULL; paf = paf->next) buf_printf(output, "Spell: '{c%s{x' modifies {c%s{x by {c%d{x for {c%d{x hours with bits {c%s{x, level {c%d{x.\n", skill_name(paf->type), flag_string(apply_flags, paf->location), paf->modifier, paf->duration, flag_string(affect_flags, paf->bitvector), paf->level ); if (IS_NPC(victim)) { buf_printf(output, "Form: [{c%s{x]\n", flag_string(form_flags, victim->form)); buf_printf(output, "Parts: [{c%s{x]\n", flag_string(part_flags, victim->parts)); } mlstr_dump(output, "Short description: ", victim->short_descr); if (IS_NPC(victim)) mlstr_dump(output, "Long description: ", victim->long_descr); if (IS_NPC(victim) && victim->spec_fun != 0) buf_printf(output, "Mobile has special procedure {y%s{x.\n", spec_name(victim->spec_fun)); buf_printf(output, "Group: {c%d{x " "Master: {c%s{x Leader: {c%s{x Pet: {c%s{x\n", IS_NPC(victim) ? victim->group : 0, victim->master ? victim->master->name : "(none)", victim->leader ? victim->leader->name : "(none)", victim->pet ? victim->pet->name : "(none)"); if (!IS_NPC(victim)) { qtrouble_t *qt; if (IS_ON_QUEST(victim)) { buf_printf(output, "QuestCnt: [{C%d{x] " "QuestPnts: [{C%d{x] " "Questnext: [{c%d{x]\n" "Questgiver: [{c%d{x] ", victim->pcdata->questcount, victim->pcdata->questpoints, victim->pcdata->questtime < 0 ? -victim->pcdata->questtime : 0, victim->pcdata->questgiver); buf_printf(output, "QuestCntDown: [{c%d{x] " "QuestObj: [{c%d{x] " "Questmob: [{c%d{x]\n", victim->pcdata->questtime > 0 ? victim->pcdata->questtime : 0, victim->pcdata->questobj, victim->pcdata->questmob); } else { buf_printf(output, "QuestCnt: [{C%d{x] " "QuestPnts: [{C%d{x] " "Questnext: [{c%d{x] " "NOT QUESTING\n", victim->pcdata->questcount, victim->pcdata->questpoints, victim->pcdata->questtime < 0 ? -victim->pcdata->questtime : 0); } buf_add(output, "Quest Troubles: "); for (qt = victim->pcdata->qtrouble; qt; qt = qt->next) buf_printf(output, "[{W%d{x]{D-{x[{c%d{x] ", qt->vnum, qt->count-1); buf_add(output, "{x\n"); if (!IS_NULLSTR(victim->pcdata->twitlist)) buf_printf(output, "Twitlist: [{D%s{x]\n", victim->pcdata->twitlist); buf_printf(output, "Security: {c%d{x\n", victim->pcdata->security); if (!IS_NULLSTR(victim->pcdata->granted)) buf_printf(output, "Granted: [{y%s{x]\n", victim->pcdata->granted); } if (IS_NPC(victim)) buf_printf(output,"Count: {c%d{x Killed: {c%d{x\n", victim->pIndexData->count, victim->pIndexData->killed); buf_printf(output, "Fighting: {C%s{x " "In_mind: [{c%s{x], Target: [{c%s{x]\n", victim->fighting ? victim->fighting->name : "(none)" , victim->in_mind ? victim->in_mind : "none", victim->target ? victim->target->name : "none"); buf_printf(output, "Position: {c%s{x ", flag_string(position_table, victim->position)); if (IS_PUMPED(victim)) buf_add(output, "Adrenaline is gushing."); buf_add(output, "\n"); buf_printf(output, "Last fought: [{c%s{x], Last fight time: [{c%s{x]\n", victim->last_fought ? victim->last_fought->name : "none", (victim->last_fight_time < 2) ? "-" : strtime(victim->last_fight_time)); buf_printf(output, "CursedByWitch: {c%s{x ", (victim->cursed_by_witch) ? victim->cursed_by_witch->name : "(none)"); if (!IS_NPC(victim)) { buf_printf(output, "SavedStalkers: {c%2d{x Enslaver: {c%s{x", victim->pcdata->saved_stalkers, (victim->pcdata->enslaver) ? victim->pcdata->enslaver : "(none)"); if (!IS_NULLSTR(victim->pcdata->pk_ok_list)) buf_printf(output, "\nPKOKlist: [{r%s{x]", victim->pcdata->pk_ok_list); if (!IS_NULLSTR(victim->pcdata->fake_ip) && ch->level > victim->level && IS_TRUSTED_IMP(ch)) { buf_printf(output, "\nFakeIP: [{r%s{x]", victim->pcdata->fake_ip); } } buf_add(output, "\n"); page_to_char(buf_string(output), ch); buf_free(output); } DO_FUN(do_dstat) { BUFFER *output; DESCRIPTOR_DATA *d; char arg[MAX_INPUT_LENGTH]; int desc; one_argument(argument, arg, sizeof(arg)); if (!is_number(arg)) { do_help(ch, "'WIZ STAT'"); return; } desc = atoi(arg); for (d = descriptor_list; d; d = d->next) if (d->descriptor == desc) break; if (!d) { char_puts("dstat: descriptor not found\n", ch); return; } output = buf_new(-1); buf_printf(output, "Desc: [%d] Conn: [%d] " "Outsize: [%d] Outtop: [%d]\n", d->descriptor, d->connected, d->outsize, d->outtop); buf_printf(output, "Inbuf: [%s]\n", d->inbuf); buf_printf(output, "Incomm: [%s]\n", d->incomm); buf_printf(output, "Repeat: [%d] Inlast: [%s]\n", d->repeat, d->inlast); if (d->character) buf_printf(output, "Ch: [%s]\n", d->character->name); if (d->original) buf_printf(output, "Original: [%s]\n", d->original->name); if (d->olced) buf_printf(output, "OlcEd: [%s]\n", d->olced->name); if (d->pString) buf_printf(output, "pString: [%s]\n", *d->pString); if (d->showstr_head) buf_printf(output, "showstr_head: [%s]\n", d->showstr_head); page_to_char(buf_string(output), ch); buf_free(output); } void do_vnum(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; const char *string; string = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Syntax:\n",ch); char_puts(" vnum obj <name>\n",ch); char_puts(" vnum mob <name>\n",ch); return; } if (!str_cmp(arg, "obj")) { do_ofind_old(ch, string); return; } if (!str_cmp(arg, "mob") || !str_cmp(arg, "char")) { do_mfind_old(ch, string); return; } /* do both */ do_mfind_old(ch, argument); do_ofind_old(ch, argument); } void do_mfind_old(CHAR_DATA *ch, const char *argument) { extern int top_mob_index; char arg[MAX_INPUT_LENGTH]; MOB_INDEX_DATA *pMobIndex; int vnum; int nMatch; bool found; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Find whom?\n", ch); return; } found = FALSE; nMatch = 0; /* * Yeah, so iterating over all vnum's takes 10,000 loops. * Get_mob_index is fast, and I don't feel like threading another link. * Do you? * -- Furey */ for (vnum = 0; nMatch < top_mob_index; vnum++) if ((pMobIndex = get_mob_index(vnum)) != NULL) { nMatch++; if (is_name(argument, pMobIndex->name)) { found = TRUE; char_printf(ch, "[%5d] %s\n", pMobIndex->vnum, mlstr_mval(pMobIndex->short_descr)); } } if (!found) char_puts("No mobiles by that name.\n", ch); } void do_ofind_old(CHAR_DATA *ch, const char *argument) { extern int top_obj_index; char arg[MAX_INPUT_LENGTH]; OBJ_INDEX_DATA *pObjIndex; int vnum; int nMatch; bool found; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Find what?\n", ch); return; } found = FALSE; nMatch = 0; /* * Yeah, so iterating over all vnum's takes 10,000 loops. * Get_obj_index is fast, and I don't feel like threading another link. * Do you? * -- Furey */ for (vnum = 0; nMatch < top_obj_index; vnum++) if ((pObjIndex = get_obj_index(vnum)) != NULL) { nMatch++; if (is_name(argument, pObjIndex->name)) { found = TRUE; char_printf(ch, "[%5d] %s\n", pObjIndex->vnum, mlstr_mval(pObjIndex->short_descr)); } } if (!found) char_puts("No objects by that name.\n", ch); } void do_owhere(CHAR_DATA *ch, const char *argument) { BUFFER *buffer = NULL; OBJ_DATA *obj; OBJ_DATA *in_obj; int number = 0, max_found = 200; int vnum = 0; bool limited = FALSE, limited_pc = FALSE; bool corpse_pc; if (argument[0] == '\0') { char_puts("Find what?\n",ch); return; } vnum = atoi(argument); if (ch->level >= L3) { limited = !str_prefix("limited", argument); limited_pc = !str_cmp(argument, "limited_pc"); } corpse_pc = !str_cmp(argument, "corpse_pc"); for (obj = object_list; obj != NULL; obj = obj->next) { if (!can_see_obj(ch, obj) || ((vnum && obj->pIndexData->vnum != vnum) || (limited && !IS_OBJ_LIMITED(obj->pIndexData)) || (!vnum && !limited && !is_name(argument, obj->name))) || (!IS_IMMORTAL(ch) && ch->level < obj->level)) continue; if (buffer == NULL) buffer = buf_new(-1); for (in_obj = obj; in_obj->in_obj != NULL; in_obj = in_obj->in_obj) ; if (limited_pc && (in_obj->carried_by == NULL || IS_NPC(in_obj->carried_by))) continue; if (corpse_pc && in_obj->pIndexData->item_type != ITEM_CORPSE_PC) continue; if (in_obj->carried_by != NULL && (in_obj->carried_by->invis_level > ch->level || in_obj->carried_by->incog_level > ch->level)) continue; number++; if (in_obj->carried_by != NULL && can_see(ch,in_obj->carried_by) && in_obj->carried_by->in_room != NULL) buf_printf(buffer, "%3d) {D[{W%6d{D]{x %s is carried by %s {D[{wRoom {W%d{D]{x\n", number, obj->pIndexData->vnum, mlstr_mval(obj->short_descr), fix_short(PERS(in_obj->carried_by, ch)), in_obj->carried_by->in_room->vnum); else if (in_obj->in_room != NULL && can_see_room(ch, in_obj->in_room)) buf_printf(buffer, "%3d) {D[{W%6d{D]{x %s is in %s {D[{wRoom {W%d{D]{x\n", number, obj->pIndexData->vnum, mlstr_mval(obj->short_descr), mlstr_cval(in_obj->in_room->name, ch), in_obj->in_room->vnum); else buf_printf(buffer, "%3d) {D[{W%6d{D]{x %s{x is somewhere\n", number, obj->pIndexData->vnum, mlstr_mval(obj->short_descr)); if (number >= max_found) break; } if (buffer == NULL) char_puts("Nothing like that in heaven or earth.\n", ch); else { page_to_char(buf_string(buffer),ch); buf_free(buffer); } } void do_mwhere(CHAR_DATA *ch, const char *argument) { BUFFER *buffer; CHAR_DATA *victim; int count = 0; if (argument[0] == '\0') { DESCRIPTOR_DATA *d; /* show characters logged */ buffer = buf_new(-1); for (d = descriptor_list; d != NULL; d = d->next) { if (d->character != NULL && d->connected == CON_PLAYING && d->character->in_room != NULL && d->character->in_room->area != NULL && can_see(ch,d->character) && can_see_room(ch,d->character->in_room)) { victim = d->character; count++; if (d->original != NULL) buf_printf(buffer,"%3d){D%-15.15s{w %-10.10s {D({r%s{D) {D[{W%6d{D]{w %s\n", count, victim->in_room->area->name, victim->name, mlstr_mval(victim->short_descr), victim->in_room->vnum, mlstr_mval(victim->in_room->name) ); else buf_printf(buffer,"%3d){D%-15.15s{w %-10.10s {D[{W%6d{D]{w %s\n", count, victim->in_room->area->name, victim->name, victim->in_room->vnum, mlstr_mval(victim->in_room->name) ); } } page_to_char(buf_string(buffer),ch); buf_free(buffer); return; } buffer = NULL; for (victim = char_list; victim; victim = victim->next) if (victim->in_room && is_name(argument, victim->name) && can_see(ch,victim)) { if (buffer == NULL) buffer = buf_new(-1); count++; buf_printf(buffer, "%3d) {D[{W%6d{D]{w %-28s {D[{W%6d{D]{w %s\n", count, IS_NPC(victim) ? victim->pIndexData->vnum : 0, IS_NPC(victim) ? mlstr_mval(victim->short_descr) : victim->name, victim->in_room->vnum, mlstr_mval(victim->in_room->name)); } if (buffer) { page_to_char(buf_string(buffer),ch); buf_free(buffer); } else act("You didn't find any $T.", ch, NULL, argument, TO_CHAR); } void do_reboo(CHAR_DATA *ch, const char *argument) { char_puts("If you want to REBOOT, spell it out.\n", ch); } void do_shutdow(CHAR_DATA *ch, const char *argument) { char_puts("If you want to SHUTDOWN, spell it out.\n", ch); } void do_shutdown(CHAR_DATA *ch, const char *argument) { bool active; char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { do_help(ch, "SHUTDOWN"); return; } active = dfexist(TMP_PATH, SHUTDOWN_FILE); if (!str_prefix(arg, "status")) { char_printf(ch, "Shutdown status: %s\n", active ? "active" : "inactive"); return; } if (!str_prefix(arg, "activate")) { if (!active) { FILE *fp = dfopen(TMP_PATH, SHUTDOWN_FILE, "w"); if (!fp) { char_printf(ch, "Error: %s.\n", strerror(errno)); return; } fclose(fp); wiznet("$N has activated shutdown", ch, NULL, 0, 0, 0); char_puts("Shutdown activated.\n", ch); } else char_puts("Shutdown already activated.\n", ch); return; } if (!str_prefix(arg, "deactivate") || !str_prefix(arg, "cancel")) { if (!active) char_puts("Shutdown already inactive.\n", ch); else { if (dunlink(TMP_PATH, SHUTDOWN_FILE) < 0) { char_printf(ch, "Error: %s.\n", strerror(errno)); return; } wiznet("$N has deactivated shutdown", ch, NULL, 0, 0, 0); char_puts("Shutdown deactivated.\n", ch); } return; } do_shutdown(ch, str_empty); } void do_protect(CHAR_DATA *ch, const char *argument) { CHAR_DATA *victim; if (argument[0] == '\0') { char_puts("Protect whom from snooping?\n",ch); return; } if ((victim = get_char_world(ch,argument)) == NULL) { char_puts("You can't find them.\n",ch); return; } if (IS_SET(victim->comm,COMM_SNOOP_PROOF)) { act_puts("$N is no longer snoop-proof.", ch, NULL, victim, TO_CHAR, POS_DEAD); char_puts("Your snoop-proofing was just removed.\n", victim); REMOVE_BIT(victim->comm, COMM_SNOOP_PROOF); } else { act_puts("$N is now snoop-proof.", ch, NULL, victim, TO_CHAR, POS_DEAD); char_puts("You are now immune to snooping.\n", victim); SET_BIT(victim->comm, COMM_SNOOP_PROOF); } } void do_snoop(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; DESCRIPTOR_DATA *d; CHAR_DATA *victim; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Snoop whom?\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (victim->desc == NULL) { char_puts("No descriptor to snoop.\n", ch); return; } if (victim == ch) { char_puts("Cancelling all snoops.\n", ch); wiznet("$N stops being such a snoop.", ch, NULL, WIZ_SNOOPS, 0, ch->level); for (d = descriptor_list; d != NULL; d = d->next) if (d->snoop_by == ch->desc) d->snoop_by = NULL; return; } if (victim->desc->snoop_by != NULL) { char_puts("Busy already.\n", ch); return; } if (!is_room_owner(ch,victim->in_room) && ch->in_room != victim->in_room && room_is_private(victim->in_room) && !IS_TRUSTED(ch, IMPLEMENTOR)) { char_puts("That character is in a private room.\n",ch); return; } if (victim->level >= ch->level || IS_SET(victim->comm, COMM_SNOOP_PROOF)) { char_puts("You failed.\n", ch); return; } if (ch->desc != NULL) for (d = ch->desc->snoop_by; d != NULL; d = d->snoop_by) if (d->character == victim || d->original == victim) { char_puts("No snoop loops.\n", ch); return; } victim->desc->snoop_by = ch->desc; wiznet("$N starts snooping on $i.", ch, victim, WIZ_SNOOPS, 0, ch->level); char_puts("Ok.\n", ch); } void do_switch(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Switch into whom?\n", ch); return; } if (ch->desc == NULL) return; if (ch->desc->original != NULL) { char_puts("You are already switched.\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (victim == ch) { char_puts("Ok.\n", ch); return; } if (!IS_NPC(victim)) { char_puts("You can only switch into mobiles.\n", ch); return; } if (!is_room_owner(ch,victim->in_room) && ch->in_room != victim->in_room && room_is_private(victim->in_room) && !IS_TRUSTED(ch,IMPLEMENTOR)) { char_puts("That character is in a private room.\n", ch); return; } if (victim->desc != NULL) { char_puts("Character in use.\n", ch); return; } wiznet("$N switches into $i.", ch, victim, WIZ_SWITCHES, 0, ch->level); ch->desc->character = victim; ch->desc->original = ch; victim->desc = ch->desc; ch->desc = NULL; /* change communications to match */ if (ch->prompt != NULL) victim->prompt = str_qdup(ch->prompt); victim->comm = ch->comm; victim->lines = ch->lines; if (IS_SET(ch->state_flags, STATE_LOG)) SET_BIT(victim->state_flags, STATE_LOG); char_puts("You assume your new identity.\n", victim); } void do_return(CHAR_DATA *ch, const char *argument) { if (ch->desc == NULL) return; if (ch->desc->original == NULL) return; char_puts("You return to your original body.\n", ch); if (ch->prompt != NULL) { free_string(ch->prompt); ch->prompt = NULL; } wiznet("$N returns from $i.", ch->desc->original, ch, WIZ_SWITCHES, 0, ch->desc->original->level); REMOVE_BIT(ch->desc->character->state_flags, STATE_LOG); ch->desc->character = ch->desc->original; ch->desc->original = NULL; ch->desc->character->desc = ch->desc; ch->desc = NULL; do_replay(ch, str_empty); } /* trust levels for load and clone */ bool obj_check(CHAR_DATA *ch, OBJ_DATA *obj) { if (IS_TRUSTED(ch, GOD) || (IS_TRUSTED(ch, IMMORTAL) && obj->level <= 20 && obj->cost <= 1000) || (IS_TRUSTED(ch, DEMI) && obj->level <= 10 && obj->cost <= 500) || (IS_TRUSTED(ch, ANGEL) && obj->level <= 5 && obj->cost <= 250) || (IS_TRUSTED(ch, AVATAR) && obj->level == 0 && obj->cost <= 100)) return TRUE; else return FALSE; } bool mob_check(CHAR_DATA *ch, CHAR_DATA *mob) { if ((mob->level > 20 && !IS_TRUSTED(ch, GOD)) || (mob->level > 10 && !IS_TRUSTED(ch, IMMORTAL)) || (mob->level > 5 && !IS_TRUSTED(ch, DEMI)) || (mob->level > 0 && !IS_TRUSTED(ch, ANGEL)) || !IS_TRUSTED(ch, AVATAR)) return FALSE; else return TRUE; } /* for clone, to insure that cloning goes many levels deep */ void recursive_clone(CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *clone) { OBJ_DATA *c_obj, *t_obj; for (c_obj = obj->contains; c_obj != NULL; c_obj = c_obj->next_content) if (obj_check(ch, c_obj)) { t_obj = create_obj(c_obj->pIndexData, 0); clone_obj(c_obj, t_obj); obj_to_obj(t_obj, clone); recursive_clone(ch, c_obj, t_obj); } } /* command that is similar to load */ void do_clone(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; const char *rest; CHAR_DATA *mob; OBJ_DATA *obj; rest = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Clone what?\n",ch); return; } if (!str_prefix(arg,"object")) { mob = NULL; obj = get_obj_here(ch,rest); if (obj == NULL) { char_puts("You don't see that here.\n",ch); return; } } else if (!str_prefix(arg,"mobile") || !str_prefix(arg,"character")) { obj = NULL; mob = get_char_room(ch,rest); if (mob == NULL) { char_puts("You don't see that here.\n",ch); return; } } else { /* find both */ mob = get_char_room(ch,argument); obj = get_obj_here(ch,argument); if (mob == NULL && obj == NULL) { char_puts("You don't see that here.\n",ch); return; } } /* clone an object */ if (obj) { OBJ_DATA *clone; if (!obj_check(ch,obj)) { char_puts("You haven't enough power.\n", ch); return; } clone = create_obj(obj->pIndexData, 0); clone_obj(obj, clone); if (obj->carried_by != NULL) obj_to_char(clone, ch); else obj_to_room(clone, ch->in_room); recursive_clone(ch, obj, clone); act("$n has created $p.", ch, clone, NULL, TO_ROOM); act("You clone $p.", ch, clone, NULL, TO_CHAR); wiznet("$N clones $p.", ch, clone, WIZ_LOAD, 0, ch->level); return; } else if (mob != NULL) { CHAR_DATA *clone; OBJ_DATA *new_obj; if (!IS_NPC(mob)) { char_puts("You can only clone mobiles.\n",ch); return; } if (!mob_check(ch, mob)) { char_puts("You haven't enough power.\n", ch); return; } clone = create_mob(mob->pIndexData); clone_mob(mob,clone); for (obj = mob->carrying; obj != NULL; obj = obj->next_content) if (obj_check(ch,obj)) { new_obj = create_obj(obj->pIndexData, 0); clone_obj(obj, new_obj); recursive_clone(ch, obj, new_obj); obj_to_char(new_obj, clone); new_obj->wear_loc = obj->wear_loc; } act("$n has created $N.", ch, NULL, clone, TO_ROOM); act("You clone $N.", ch, NULL, clone, TO_CHAR); wiznet("$N clones $i.", ch, clone, WIZ_LOAD, WIZ_SECURE, ch->level); char_to_room(clone, ch->in_room); } } /* RT to replace the two load commands */ void do_load(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg, sizeof(arg)); if (ch->level <= L7 && !is_name(ch->name, ch->in_room->area->builders)) { char_puts("You can't load here!\n", ch); return; } if (arg[0] == '\0') { char_puts("Syntax:\n", ch); char_puts(" load mob <vnum>\n", ch); char_puts(" load obj <vnum> <level>\n", ch); return; } if (!str_cmp(arg,"mob") || !str_cmp(arg,"char")) { do_mload(ch, argument); return; } if (!str_cmp(arg,"obj")) { do_oload(ch, argument); return; } /* echo syntax */ do_load(ch,str_empty); } void do_mload(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; MOB_INDEX_DATA *pMobIndex; CHAR_DATA *victim; int vnum; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0' || !is_number(arg)) { char_puts("Syntax: load mob <vnum>.\n", ch); return; } if ((pMobIndex = get_mob_index(vnum = atoi(arg))) == NULL) { char_printf(ch, "%d: No mob has that vnum.\n", vnum); return; } victim = create_mob(pMobIndex); act("$n has created $N!", ch, NULL, victim, TO_ROOM); wiznet("$N loads $i.", ch, victim, WIZ_LOAD, 0, ch->level); act("You have created $N!", ch, NULL, victim, TO_CHAR); char_to_room(victim, ch->in_room); } void do_oload(CHAR_DATA *ch, const char *argument) { char arg1[MAX_INPUT_LENGTH] ,arg2[MAX_INPUT_LENGTH]; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; int vnum; argument = one_argument(argument, arg1, sizeof(arg1)); one_argument(argument, arg2, sizeof(arg2)); if (arg1[0] == '\0' || !is_number(arg1)) { char_puts("Syntax: load obj <vnum>.\n", ch); return; } vnum = atoi(arg1); if ((pObjIndex = get_obj_index(vnum)) == NULL) { char_printf(ch, "%d: No objects with this vnum.\n", vnum); return; } obj = create_obj(pObjIndex, 0); if (CAN_WEAR(obj, ITEM_TAKE)) obj_to_char(obj, ch); else obj_to_room(obj, ch->in_room); act("$n has created $p!", ch, obj, NULL, TO_ROOM); wiznet("$N loads $p.", ch, obj, WIZ_LOAD, 0, ch->level); act("You have created $p!", ch, obj, NULL, TO_CHAR); } void do_purge(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; OBJ_DATA *obj; DESCRIPTOR_DATA *d; one_argument(argument, arg, sizeof(arg)); if (ch->level <= (L7) && !is_name(ch->name, ch->in_room->area->builders)) { char_puts("You can't purge in this area!\n", ch); return; } if (arg[0] == '\0') { /* 'purge' */ CHAR_DATA *vnext; OBJ_DATA *obj_next; for (victim = ch->in_room->people; victim; victim = vnext) { vnext = victim->next_in_room; if (IS_NPC(victim) && !IS_SET(victim->pIndexData->act, ACT_NOPURGE) && victim != ch /* safety precaution */) extract_char(victim, 0); } for (obj = ch->in_room->contents; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (!IS_OBJ_STAT(obj, ITEM_NOPURGE)) extract_obj(obj, 0); } act("$n purges the room!", ch, NULL, NULL, TO_ROOM); char_puts("Ok.\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (!IS_NPC(victim)) { if (ch == victim) { char_puts("Ho ho ho.\n", ch); return; } if (ch->level <= victim->level) { char_puts("Maybe that wasn't a good idea...\n",ch); char_printf(ch,"%s tried to purge you!\n",ch->name); return; } act("$n disintegrates $N.", ch, 0, victim, TO_NOTVICT); if (victim->level > 1) save_char_obj(victim, FALSE); d = victim->desc; extract_char(victim, 0); if (d) close_descriptor(d); return; } act("$n purges $N.", ch, NULL, victim, TO_NOTVICT); extract_char(victim, 0); } void do_restore(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; CHAR_DATA *vch; DESCRIPTOR_DATA *d; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0' || !str_cmp(arg,"room")) { /* cure room */ for (vch = ch->in_room->people; vch; vch = vch->next_in_room) { affect_strip(vch,gsn_plague); affect_strip(vch,gsn_poison); affect_strip(vch,gsn_blindness); affect_strip(vch,gsn_sleep); affect_strip(vch,gsn_curse); vch->hit = vch->max_hit; vch->mana = vch->max_mana; vch->move = vch->max_move; update_pos(vch); act("$n has restored you.",ch,NULL,vch,TO_VICT); } wiznet("$N restored room $j.", ch, (const void*) ch->in_room->vnum, WIZ_RESTORE, 0, ch->level); char_puts("Room restored.\n",ch); return; } if (ch->level >= MAX_LEVEL - 1 && !str_cmp(arg,"all")) { /* cure all */ for (d = descriptor_list; d != NULL; d = d->next) { victim = d->character; if (victim == NULL || IS_NPC(victim)) continue; affect_strip(victim,gsn_plague); affect_strip(victim,gsn_poison); affect_strip(victim,gsn_blindness); affect_strip(victim,gsn_sleep); affect_strip(victim,gsn_curse); victim->hit = victim->max_hit; victim->mana = victim->max_mana; victim->move = victim->max_move; update_pos(victim); if (victim->in_room != NULL) act("$n has restored you.",ch,NULL,victim,TO_VICT); } char_puts("All active players restored.\n",ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } affect_strip(victim, gsn_plague); affect_strip(victim, gsn_poison); affect_strip(victim, gsn_blindness); affect_strip(victim, gsn_sleep); affect_strip(victim, gsn_curse); victim->hit = victim->max_hit; victim->mana = victim->max_mana; victim->move = victim->max_move; update_pos(victim); act("$n has restored you.", ch, NULL, victim, TO_VICT); wiznet("$N restored $i", ch, victim, WIZ_RESTORE, 0, ch->level); char_puts("Ok.\n", ch); } void do_freeze(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Freeze whom?\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (victim->level >= ch->level) { char_puts("You failed.\n", ch); return; } TOGGLE_BIT(victim->state_flags, STATE_FREEZE); if (!IS_SET(victim->state_flags, STATE_FREEZE)) { char_puts("You can play again.\n", victim); char_puts("FREEZE removed.\n", ch); wiznet("$N thaws $i.", ch, victim, WIZ_PENALTIES, 0, 0); } else { char_puts("You can't do ANYthing!\n", victim); char_puts("FREEZE set.\n", ch); wiznet("$N puts $i in the deep freeze.", ch, victim, WIZ_PENALTIES, 0, 0); } save_char_obj(victim, FALSE); } void do_log(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Log whom?\n", ch); return; } if (!str_cmp(arg, "all")) { if (fLogAll) { fLogAll = FALSE; char_puts("Log ALL off.\n", ch); } else { fLogAll = TRUE; char_puts("Log ALL on.\n", ch); } return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } /* * No level check, gods can log anyone. */ TOGGLE_BIT(victim->state_flags, STATE_LOG); if (!IS_SET(victim->state_flags, STATE_LOG)) char_puts("LOG removed.\n", ch); else char_puts("LOG set.\n", ch); } /* Coded by Thornan for Iceydepths */ void do_addlag(CHAR_DATA *ch, const char *argument) { CHAR_DATA *victim; char arg[MAX_STRING_LENGTH]; int x; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { send_to_char("addlag to who?\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("They're not here.\n", ch); return; } if ((x = atoi(argument)) <= 0) { send_to_char("That makes a LOT of sense.\n", ch); return; } if (x > 100) { send_to_char("There's a limit to cruel and unusual punishment\n", ch); return; } send_to_char("Somebody REALLY didn't like you\n", victim); WAIT_STATE(victim, x); send_to_char("Adding lag now...\n", ch); return; } /* void do_check(CHAR_DATA *ch, const char *argument) { char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; BUFFER *buffer; CHAR_DATA *victim; int count = 1; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0'|| !str_prefix(arg,"stats")) { buffer = buf_new(ch->lang); for (victim = char_list; victim != NULL; victim = victim->next) { if (IS_NPC(victim) || !can_see(ch,victim)) continue; if (victim->desc == NULL) { sprintf(buf,"%3d) %s is linkdead.\n\r", count, victim->name); buf_add(buffer, buf); count++; continue; } if (victim->desc->connected >= CON_GET_NEW_RACE && victim->desc->connected <= CON_PICK_WEAPON) { sprintf(buf,"%3d) %s is being created.\n\r", count, victim->name); buf_add(buffer, buf); count++; continue; } if ( (victim->desc->connected == CON_GET_OLD_PASSWORD || victim->desc->connected >= CON_READ_IMOTD)) { sprintf(buf,"%3d) %s is connecting.\n\r", count, victim->name); buf_add(buffer, buf); count++; continue; } if (victim->desc->connected == CON_PLAYING) { sprintf(buf, "%3d) %s, Level %d connected since {M%d{x hours ({G%d total hours{x)\n\r", count, victim->name, victim->level, ((int)(current_time - victim->pcdata->logon)) /3600, (victim->pcdata->played + (int)(current_time - victim->pcdata->logon)) /3600 ); buf_add(buffer, buf); if (arg[0]!='\0' && !str_prefix(arg, "stats")) { sprintf(buf, " {C%5d HP %5d M ({Y%2dstr %2dint %2dwis %2ddex %2dcon{x) {m%3d Tr %3d Pr {B%4d golds %d Qpts{x\n\r", victim->max_hit, victim->max_mana, victim->perm_stat[STAT_STR], victim->perm_stat[STAT_INT], victim->perm_stat[STAT_WIS], victim->perm_stat[STAT_DEX], victim->perm_stat[STAT_CON], victim->pcdata->train, victim->pcdata->practice, victim->gold + victim->silver/100, victim->pcdata->questpoints); buf_add(buffer, buf); } count++; continue; } sprintf(buf, "%3d) BUGGY (Oops!)...please report to Implemetators: " "%s %d\n\r", count, victim->name, victim->desc->connected); buf_add(buffer, buf); count++; } page_to_char(buf_string(buffer),ch); buf_free(buffer); return; } if (!str_prefix(arg,"eq")) { buffer = buf_new(ch->lang); for (victim = char_list; victim != NULL; victim = victim->next) { if (IS_NPC(victim) || !victim->desc || victim->desc->connected != CON_PLAYING || !can_see(ch,victim)) continue; sprintf(buf, "%3d) %-10s, %2d items(weight %4d) {YHit:%2d, Dam:%2d, {WAC:%3d %3d %3d %3d, {ySav:%d{x\n\r", count, victim->name, victim->carry_number, victim->carry_weight, victim->hitroll, victim->damroll, victim->armor[AC_PIERCE], victim->armor[AC_BASH], victim->armor[AC_SLASH], victim->armor[AC_EXOTIC], buf_add(buffer, buf)); count++; } page_to_char(buf_string(buffer),ch); buf_free(buffer); return; } if (!str_prefix(arg,"snoop")) { char bufsnoop [100]; if(ch->level < MAX_LEVEL ) { char_puts("You can't use this check option.\n\r",ch); return; } buffer = buf_new(ch->lang); for (victim = char_list; victim != NULL; victim = victim->next) { if (IS_NPC(victim) || !victim->desc || victim->desc->connected != CON_PLAYING || !can_see(ch,victim)) continue; if(victim->desc->snoop_by != NULL) sprintf(bufsnoop," %15s .", victim->desc->snoop_by->character->name); else sprintf(bufsnoop," (none) ." ); sprintf(buf,"%3d %15s : %s \n\r",count,victim->name, bufsnoop); buf_add(buffer, buf); count++; } page_to_char(buf_string(buffer),ch); buf_free(buffer); return; } char_puts("{CSyntax: {W'check' {Ydisplay info about players\n\r",ch); char_puts(" {W'check stats' {Ydisplay info and resume stats\n\r",ch); char_puts(" {W'check eq' {Yresume eq of all players\n\r",ch); char_puts(" {W'check snoop' {Ydisplay info about snoops\n\r",ch); char_puts("{RUse the stat command in case of doubt about someone...{x\n\r", ch); return; } */ void do_noexp(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; //int gain; // int xp; one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Freeze whom?\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (!IS_NPC(victim) && victim->level >= ch->level) { char_puts("You failed to remove $i's exp gain.\n", ch); return; } TOGGLE_BIT(victim->state_flags, STATE_NOEXP); if (!IS_SET(victim->state_flags, STATE_NOEXP)) { char_puts("You can gain experience again.\n", victim); char_puts("NOEXP removed.\n", ch); wiznet("$N 'gives' $i experience ability back.", ch, victim, WIZ_PENALTIES, 0, 0); } else { char_puts("You can't gain any experience!\n", victim); char_puts("NOEXP set.\n", ch); wiznet("$N removes $i 's experience ability.", ch, victim, WIZ_PENALTIES, 0, 0); } save_char_obj(victim, FALSE); } void do_peace(CHAR_DATA *ch, const char *argument) { CHAR_DATA *rch; for (rch = ch->in_room->people; rch; rch = rch->next_in_room) { if (!rch->fighting) continue; stop_fighting(rch, TRUE); if (IS_NPC(rch)) { /* * avoid aggressive mobs and hunting mobs attacks */ AFFECT_DATA af; af.where = TO_AFFECTS; af.type = gsn_reserved; af.level = MAX_LEVEL; af.duration = 15; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_CALM | AFF_SCREAM; affect_to_char(rch, &af); } } char_puts("Ok.\n", ch); } void do_wizlock(CHAR_DATA *ch, const char *argument) { extern bool wizlock; wizlock = !wizlock; if (wizlock) { wiznet("$N has wizlocked the game.", ch, NULL, 0, 0, 0); char_puts("Game wizlocked.\n", ch); } else { wiznet("$N removes wizlock.", ch, NULL, 0, 0, 0); char_puts("Game un-wizlocked.\n", ch); } } /* RT anti-newbie code */ void do_newlock(CHAR_DATA *ch, const char *argument) { extern bool newlock; newlock = !newlock; if (newlock) { wiznet("$N locks out new characters.", ch, NULL, 0, 0, 0); char_puts("New characters have been locked out.\n", ch); } else { wiznet("$N allows new characters back in.", ch, NULL, 0, 0, 0); char_puts("Newlock removed.\n", ch); } } /* award gives a char specified amount of qp or xp */ #define AWARD_XP 1 #define AWARD_QP 2 #define AWARD_GP 3 #define AWARD_RP 4 #define AWARD_PRAC 5 void do_award(CHAR_DATA *ch, const char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int award_type = 0; int value = 0; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); argument = one_argument(argument, arg3, sizeof(arg3)); if (arg1[0] == '\0' || arg2[0] == '\0') { do_help(ch, "WIZ AWARD"); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (!str_prefix(arg3, "experience") || !str_prefix(arg3, "xp") || !str_prefix(arg3, "exp")) award_type = AWARD_XP; else if (!str_prefix(arg3, "questpoints") || !str_prefix(arg3, "qps")) award_type = AWARD_QP; else if (!str_prefix(arg3, "gold") || !str_prefix(arg3, "gps")) award_type = AWARD_GP; else if (!str_prefix(arg3, "roleplay") || !str_prefix(arg3, "rps")) award_type = AWARD_RP; else if (!str_prefix(arg3, "practices")) award_type = AWARD_PRAC; if (arg2[0] == '\0' && award_type == AWARD_RP) value = 1; else if (arg2[0] == '\0' || !is_number(arg2)) { char_puts("Value must be numeric.\n", ch); return; } else value = atoi(arg2); switch (award_type) { case AWARD_XP: if (value < -2000 || value > 10000) { char_puts("Value range is -2000 to 10000.\n", ch); return; } act_puts("$N has awarded you {W$t{x experience points.\n", victim, arg2, ch, TO_CHAR, POS_DEAD); act_puts("You award {W$t{x experiene points to $N.\n", ch, arg2, victim, TO_CHAR, POS_DEAD); gain_exp(victim, value); break; case AWARD_QP: if (value < -5000 || value > 2000) { char_puts("Value range is -5000 to 2000.\n", ch); return; } if (value < 0 && victim->pcdata->questpoints - value < 0) { char_printf(ch, "%s only has %d quest points!\n", victim->name, victim->pcdata->questpoints); return; } act_puts("$N has awarded you {W$t{x quest points.\n", victim, arg2, ch, TO_CHAR, POS_DEAD); act_puts("You awarded {W$t{x quest points to $N.\n", ch, arg2, victim, TO_CHAR, POS_DEAD); victim->pcdata->questpoints += value; break; case AWARD_GP: if (value < -1000000 || value > 100000) { char_puts("Value range is -1000000 to 100000.\n", ch); return; } if (value < 0 && victim->pcdata->bank_g - value < 0) { char_printf(ch, "%s only has %d gold in the bank!\n", victim->name, victim->pcdata->bank_g); return; } act_puts("$N has transfered {W$t{x gold pieces into your bank account.\n", victim, arg2, ch, TO_CHAR, POS_DEAD); act_puts("You transfer {W$t{x gold pieces into $N's bank account.\n", ch, arg2, victim, TO_CHAR, POS_DEAD); victim->pcdata->bank_g += value; break; case AWARD_RP: if (value < -100 || value > 10) { char_puts("Value range is -100 to 10.\n", ch); return; } char_puts("Not yet implemented.\n", ch); return; break; case AWARD_PRAC: if (value < -100 || value > 25) { char_puts("Value range is -100 to 25.\n", ch); return; } if (value < 0 && victim->practice < 0) { char_printf(ch, "%s only has %d practices!\n", victim->name, victim->practice); return; } act_puts("$N has awarded you {W$t{x practice points.\n", victim, arg2, ch, TO_CHAR, POS_DEAD); act_puts("You awarded {W$t{x practice points to $N.\n", ch, arg2, victim, TO_CHAR, POS_DEAD); victim->practice += value; break; default: char_puts("Awarding that is not an option.\n", ch); return; } } /* RT set replaces sset, mset, oset, and rset */ void do_set(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Syntax:\n",ch); char_puts(" set mob <name> <field> <value>\n",ch); char_puts(" set obj <name> <field> <value>\n",ch); char_puts(" set room <room> <field> <value>\n",ch); char_puts(" set skill <name> <spell or skill> <value>\n",ch); return; } if (!str_prefix(arg,"mobile") || !str_prefix(arg,"character")) { do_mset(ch,argument); return; } if (!str_prefix(arg,"skill") || !str_prefix(arg,"spell")) { do_sset(ch,argument); return; } if (!str_prefix(arg,"object")) { do_oset(ch,argument); return; } if (!str_prefix(arg,"room")) { do_rset(ch,argument); return; } /* echo syntax */ do_set(ch,str_empty); } void do_sset(CHAR_DATA *ch, const char *argument) { char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; char arg3 [MAX_INPUT_LENGTH]; CHAR_DATA *victim; int value; int sn; bool fAll; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); argument = one_argument(argument, arg3, sizeof(arg3)); if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0') { char_puts("Syntax:\n",ch); char_puts(" set skill <name> <spell or skill> <value>\n", ch); char_puts(" set skill <name> all <value>\n",ch); char_puts("(use the name of the skill, not the number)\n",ch); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } fAll = !str_cmp(arg2, "all"); sn = 0; if (!fAll && (sn = sn_lookup(arg2)) < 0) { char_puts("No such skill or spell.\n", ch); return; } /* * Snarf the value. */ if (!is_number(arg3)) { char_puts("Value must be numeric.\n", ch); return; } value = atoi(arg3); if (value < 0 || value > 100) { char_puts("Value range is 0 to 100.\n", ch); return; } if (fAll) for (sn = 0; sn < skills.nused; sn++) set_skill(victim, sn, 100); else set_skill(victim, sn, value); char_puts("Ok.\n", ch); } void do_string(CHAR_DATA *ch, const char *argument) { char type[MAX_INPUT_LENGTH]; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; CHAR_DATA *victim; OBJ_DATA *obj; argument = one_argument(argument, type, sizeof(type)); argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); strnzcpy(arg3, sizeof(arg3), argument); if (type[0] == '\0' || arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0') { char_puts("Syntax:\n",ch); char_puts(" string char <name> <field> <string>\n",ch); char_puts(" fields: name short long desc title spec\n",ch); char_puts(" string obj <name> <field> <string>\n",ch); char_puts(" fields: name short long extended\n",ch); return; } if (!str_prefix(type, "character") || !str_prefix(type, "mobile")) { if ((victim = get_char_room(ch, arg1)) == NULL) { char_puts("They aren't here.\n", ch); return; } /* clear zone for mobs */ victim->zone = NULL; /* string something */ if (!str_prefix(arg2, "name")) { if (!IS_NPC(victim)) { char_puts("Not on PC's.\n", ch); return; } free_string(victim->name); victim->name = str_dup(arg3); return; } if (!str_prefix(arg2, "short")) { if (!IS_NPC(victim)) { char_puts(" Not on PC's.\n", ch); return; } mlstr_edit(&victim->short_descr, arg3); return; } if (!str_prefix(arg2, "desc")) { mlstr_append(ch, &victim->description, arg3); return; } if (!str_prefix(arg2, "long")) { if (!IS_NPC(victim)) { char_puts("Not on PC's.\n", ch); return; } mlstr_editnl(&victim->long_descr, arg3); return; } if (!str_prefix(arg2, "title")) { if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (victim->level != LEVEL_HERO && ch->level < L1) { char_puts("You don't have the power to set that title.\n", ch); return; } if (set_title(victim, arg3)) { char_printf(ch, "Title set: %s%s", victim->name, victim->pcdata->title); } else { char_printf(ch, "The title was over the maximum of %d visible characters.", MAX_TITLE_LENGTH); } return; } } if (!str_prefix(type,"object")) { /* string an obj */ if ((obj = get_obj_room(ch, arg1)) == NULL) { char_puts("Nothing like that in heaven or earth.\n", ch); return; } if (obj->pIndexData->limit >= 0) { char_puts("You cannot string limited objs.\n", ch); return; } if (!str_prefix(arg2, "name")) { free_string(obj->name); obj->name = str_dup(arg3); return; } if (!str_prefix(arg2, "short")) { mlstr_edit(&obj->short_descr, arg3); return; } if (!str_prefix(arg2, "long")) { mlstr_edit(&obj->description, arg3); return; } if (!str_prefix(arg2, "ed") || !str_prefix(arg2, "extended") || !str_prefix(arg2, "exd")) { ED_DATA *ed; if (obj->carried_by != ch) { char_puts("Obj must be in your inventory.\n", ch); return; } argument = one_argument(argument, arg3, sizeof(arg3)); if (argument == NULL) { char_puts("Syntax: oset <object> ed <keyword> " "lang\n", ch); return; } ed = ed_new(); ed->keyword = str_dup(arg3); ed->next = obj->ed; mlstr_append(ch, &ed->description, argument); obj->ed = ed; return; } } /* echo bad use message */ do_string(ch,str_empty); } void do_oset(CHAR_DATA *ch, const char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_STRING_LENGTH]; OBJ_DATA *obj; int value; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); one_argument(argument, arg3, sizeof(arg3)); if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0') { char_puts("Syntax:\n",ch); char_puts(" set obj <object> <field> <value>\n",ch); char_puts("Field being one of:\n", ch); char_puts("value0 value1 value2 value3 value4 (v1-v4)\n", ch); char_puts("owner level cost timer\n", ch); char_puts("material matdesc\n", ch); return; } if ((obj = get_obj_world(ch, arg1)) == NULL) { char_puts("Nothing like that in heaven or earth.\n", ch); return; } value = atoi(arg3); /* * Set something. */ if (!str_cmp(arg2, "value0") || !str_cmp(arg2, "v0")) { obj->value[0] = UMIN(50,value); return; } if (!str_cmp(arg2, "value1") || !str_cmp(arg2, "v1")) { obj->value[1] = value; return; } if (!str_cmp(arg2, "value2") || !str_cmp(arg2, "v2")) { obj->value[2] = value; return; } if (!str_cmp(arg2, "value3") || !str_cmp(arg2, "v3")) { obj->value[3] = value; return; } if (!str_cmp(arg2, "value4") || !str_cmp(arg2, "v4")) { obj->value[4] = value; return; } if (!str_prefix(arg2, "level")) { obj->level = value; return; } if (!str_prefix(arg2, "cost")) { obj->cost = value; return; } if (!str_prefix(arg2, "timer")) { obj->timer = value; return; } if (!str_prefix(arg2, "owner")) { mlstr_free(obj->owner); obj->owner = mlstr_new(arg3); return; } if (!str_prefix(arg2, "material")) { if ((value = material_lookup_name(arg3)) > 0) { obj->material = MATERIAL(value); char_printf(ch, "Material set to '%s'.\n", arg3); } else { char_printf(ch, "Couldn't find material '%s'.\n", arg3); } return; } /* * Generate usage message. */ do_oset(ch, str_empty); return; } void do_rset(CHAR_DATA *ch, const char *argument) { char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; char arg3 [MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *location; int value; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); one_argument(argument, arg3, sizeof(arg3)); if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0') { char_puts("Syntax:\n",ch); char_puts(" set room <location> <field> <value>\n",ch); char_puts(" Field being one of:\n", ch); char_puts(" flags sector\n", ch); return; } if ((location = find_location(ch, arg1)) == NULL) { char_puts("No such location.\n", ch); return; } if (ch->in_room != location && room_is_private(location) && !IS_TRUSTED(ch,IMPLEMENTOR)) { char_puts("That room is private right now.\n",ch); return; } /* * Snarf the value. */ if (!is_number(arg3)) { char_puts("Value must be numeric.\n", ch); return; } value = atoi(arg3); /* * Set something. */ if (!str_prefix(arg2, "flags")) { location->room_flags = value; return; } if (!str_prefix(arg2, "sector")) { location->sector_type = value; return; } /* * Generate usage message. */ do_rset(ch, str_empty); return; } /* * 7 STAT Login Idl Name Host * */ void do_sockets( CHAR_DATA *ch, const char *argument ) { BUFFER *output; char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; DESCRIPTOR_DATA *d; char *st = NULL; int count; count = 0; output = buf_new(-1); one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') buf_printf(output, "\n{D[{gNum {GState {gLogin {GIdl{D] {GPlayer {gHost{x\n" "{D-------------------------------------------------{x\n"); for (d = descriptor_list; d; d = d->next) { CHAR_DATA *vch = d->original ? d->original : d->character; if (vch) { if (!can_see(ch, vch) || (arg[0] && str_prefix(arg, vch->name))) continue; } else if (arg[0]) continue; count++; buf_printf(output, "{D[{y%3d ", d->descriptor); switch( d->connected ) { case CON_RESOLV: st = "{Dresol"; break; case CON_BREAK_CONNECT: st = "{DLINKD"; break; case CON_PLAYING: st = "{cPLAY "; break; case CON_DUMMY: st = "{Ddummy"; break; case CON_GET_NAME: st = "{cName?"; break; case CON_CONFIRM_NEW_NAME: st = "{cConNm"; break; case CON_GET_OLD_PASSWORD: st = "{cOldPw"; break; case CON_GET_NEW_PASSWORD: st = "{cNewPw"; break; case CON_CONFIRM_NEW_PASSWORD: st = "{cConPw"; break; case CON_ANSI_DETECTOR: st = "{cAnsi?"; break; case CON_NEWBIE_DETECTOR: st = "{cNewb?"; break; case CON_NEWBIE_PROTECTION: st = "{cnProt"; break; case CON_TRUE_LIFER: st = "{cTLife"; break; case CON_GET_NEW_RACE: st = "{cRace?"; break; case CON_GET_NEW_SEX: st = "{cSex? "; break; case CON_GET_NEW_CLASS: st = "{cClass"; break; case CON_GET_ETHOS: st = "{cEthos"; break; case CON_PICK_HOMETOWN: st = "{cHome?"; break; case CON_ACCEPT_STATS: case CON_ROLL_STATS: st = "{cRoll "; break; case CON_GET_ALIGNMENT: st = "{cAlign"; break; case CON_DEFAULT_CHOICE: st = "{cCust?"; break; case CON_GEN_GROUPS: st = "{cGCust"; break; case CON_PICK_WEAPON: st = "{cWepon"; break; case CON_CREATE_DONE: st = "{ccDone"; break; case CON_READ_IMOTD: st = "{cIMOTD"; break; case CON_READ_MOTD: st = "{cMOTD "; break; default: st = "{c ??? "; break; } buf_printf(output, "%s ", st); if (vch) { strftime(buf, sizeof(buf), "{C%H:%M", localtime(&vch->logon)); buf_printf(output, "%s", buf); } else buf_printf(output, "--:--"); if (vch && vch->timer > 0) buf_printf(output, " {y%3d{D]", vch->timer ); else buf_printf(output, " {D]"); buf_printf(output, " {w%-10s", vch ? vch->name : "(none)"); buf_printf(output, " {%c%s{x", (vch && vch->pcdata->fake_ip && IS_TRUSTED_IMP(ch)) ? 'y' : 'c', (vch && vch->pcdata->fake_ip) ? vch->pcdata->fake_ip : d->host); buf_add(output, "\n"); } if (count == 0) { char_puts("No one by that name is connected.\n",ch); buf_free(output); return; } buf_printf(output, "%d user%s\n", count, count == 1 ? str_empty : "s"); page_to_char(buf_string(output), ch); buf_free(output); } void do_sockets_old( CHAR_DATA *ch, const char *argument ) { CHAR_DATA *vch; DESCRIPTOR_DATA *d; char buf [ MAX_STRING_LENGTH ]; char buf2 [ MAX_STRING_LENGTH ]; int count; char * st; char s[100]; char idle[10]; count = 0; buf[0] = '\0'; buf2[0] = '\0'; strcat( buf2, "\n\r[{BNum {YConnected_State {CLogin@ {yIdl{x] {RPlayer Name{MHost{x\n\r" ); strcat( buf2, "{C------------------------------------------------------------------------------{x\n"); for ( d = descriptor_list; d; d = d->next ) { if ( d->character && can_see( ch, d->character ) ) { /* NB: You may need to edit the CON_ values */ switch( d->connected ) { case CON_PLAYING: st = " {YPLAYING "; break; case CON_DUMMY: st = "{YDUMMY - pload "; break; case CON_GET_NAME: st = "{YGet Name "; break; case CON_GET_OLD_PASSWORD: st = "{YGet Old Passwd "; break; case CON_CONFIRM_NEW_NAME: st = "{YConfirm Name "; break; case CON_GET_NEW_PASSWORD: st = "{YGet New Passwd "; break; case CON_CONFIRM_NEW_PASSWORD: st = "{YConfirm Passwd "; break; case CON_ANSI_DETECTOR: st = "{YANSI? "; break; case CON_NEWBIE_DETECTOR: st = "{YNewbie? "; break; case CON_NEWBIE_PROTECTION: st = "{YNewbie Protect?"; break; case CON_TRUE_LIFER: st = "{YTrue Lifer "; break; case CON_GET_NEW_RACE: st = "{YGet New Race "; break; case CON_GET_NEW_SEX: st = "{YGet New Sex "; break; case CON_GET_NEW_CLASS: st = "{YGet New Class "; break; case CON_ACCEPT_STATS: case CON_ROLL_STATS: st = "{YRolling Stats "; break; case CON_GET_ALIGNMENT: st = "{YGet New Align "; break; case CON_DEFAULT_CHOICE: st = "{YChoosing Cust "; break; case CON_GEN_GROUPS: st = "{YCustomization "; break; case CON_PICK_WEAPON: st = "{YPicking Weapon "; break; case CON_READ_IMOTD: st = "{YReading IMOTD "; break; case CON_BREAK_CONNECT: st = "{DLINKDEAD "; break; case CON_READ_MOTD: st = "{YReading MOTD "; break; default: st = "{B!UNKNOWN! "; break; } count++; /* Format "login" value... */ vch = d->original ? d->original : d->character; strftime( s, 100, "{C%I:%M%p{x", localtime( &vch->logon ) ); if ( vch->timer > 0 ) sprintf( idle, "{y%-2d{x", vch->timer ); else sprintf( idle, "{y {x" ); sprintf( buf, "[{y%3d %15s %7s %2s{x] {R%-10s {M%-70.70s{x\n\r", d->descriptor, st, s, idle, ( d->original ) ? d->original->name : ( d->character ) ? d->character->name : "{R(None!){x", d->host ); strcat( buf2, buf ); } } sprintf( buf, "{M\n\r%d user%s\n\r{x", count, count == 1 ? "" : "s" ); strcat( buf2, buf ); send_to_char( buf2, ch ); return; } void do_osockets(CHAR_DATA *ch, const char *argument) { BUFFER *output; char arg[MAX_INPUT_LENGTH]; DESCRIPTOR_DATA *d; int count; count = 0; output = buf_new(-1); one_argument(argument, arg, sizeof(arg)); for (d = descriptor_list; d; d = d->next) { CHAR_DATA *vch = d->original ? d->original : d->character; if (vch) { if (!can_see(ch, vch) || (arg[0] && !is_name(arg, vch->name))) continue; } else if (arg[0]) continue; count++; buf_printf(output, "[%3d %2d] %s@%s", d->descriptor, d->connected, vch ? vch->name : "(none)", (vch && vch->pcdata->fake_ip) ? vch->pcdata->fake_ip : d->host); if (vch && vch->timer) buf_printf(output, " (idle %d)", vch->timer); buf_add(output, "\n"); } if (count == 0) { char_puts("No one by that name is connected.\n",ch); buf_free(output); return; } buf_printf(output, "%d user%s\n", count, count == 1 ? str_empty : "s"); page_to_char(buf_string(output), ch); buf_free(output); } /* * Thanks to Grodyn for pointing out bugs in this function. */ void do_force(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0' || argument[0] == '\0') { char_puts("Force whom to do what?\n", ch); return; } one_argument(argument, arg2, sizeof(arg2)); if (!str_cmp(arg2,"delete") || !str_prefix(arg2,"mob")) { char_puts("That will NOT be done.\n",ch); return; } if (!str_cmp(arg, "all")) { CHAR_DATA *vch; CHAR_DATA *vch_next; if (ch->level < MAX_LEVEL - 3) { char_puts("Not at your level!\n",ch); return; } for (vch = char_list; vch && !IS_NPC(vch); vch = vch_next) { vch_next = vch->next; if (vch->level < ch->level) { act_puts("$n forces you to '$t'.", ch, argument, vch, TO_VICT, POS_DEAD); interpret_raw(vch, argument, TRUE, ch->level); } } } else if (!str_cmp(arg,"players")) { CHAR_DATA *vch; CHAR_DATA *vch_next; if (ch->level < MAX_LEVEL - 2) { char_puts("Not at your level!\n",ch); return; } for (vch = char_list; vch && !IS_NPC(vch); vch = vch_next) { vch_next = vch->next; if (vch->level < ch->level && !IS_IMMORTAL(vch)) { act_puts("$n forces you to '$t'.", ch, argument, vch, TO_VICT, POS_DEAD); interpret_raw(vch, argument, TRUE, ch->level); } } } else if (!str_cmp(arg,"gods")) { CHAR_DATA *vch; CHAR_DATA *vch_next; if (ch->level < MAX_LEVEL - 2) { char_puts("Not at your level!\n",ch); return; } for (vch = char_list; vch && !IS_NPC(vch); vch = vch_next) { vch_next = vch->next; if (vch->level < ch->level && IS_IMMORTAL(vch)) { act_puts("$n forces you to '$t'.", ch, argument, vch, TO_VICT, POS_DEAD); interpret_raw(vch, argument, TRUE, ch->level); } } } else { CHAR_DATA *victim; if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (victim == ch) { char_puts("Aye aye, right away!\n", ch); return; } if (!is_room_owner(ch,victim->in_room) && ch->in_room != victim->in_room && room_is_private(victim->in_room) && !IS_TRUSTED(ch,IMPLEMENTOR)) { char_puts("That character is in a private room.\n",ch); return; } if (!IS_NPC(victim)) { if (victim->level >= ch->level) { char_puts("Do it yourself!\n", ch); return; } if (ch->level < MAX_LEVEL -3) { char_puts("Not at your level!\n",ch); return; } } act_puts("$n forces you to '$t'.", ch, argument, victim, TO_VICT, POS_DEAD); interpret(victim, argument); } char_puts("Ok.\n", ch); } /* * force helpfiles on people */ void do_inform(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; char cmd[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0' || argument[0] == '\0') { char_puts("Inform whom about what?\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (victim == ch) { char_puts("Uhm, yeah.\n", ch); return; } if (!IS_NPC(victim)) { if (victim->level >= ch->level) { char_puts("Do it yourself!\n", ch); return; } snprintf(cmd, sizeof(cmd), "help %s", argument); act_puts("$n forces you to '{c$t{x'.", ch, cmd, victim, TO_VICT, POS_DEAD); interpret(victim, cmd); } char_puts("Ok.\n", ch); } /* * New routines by Dionysos. */ void do_invis(CHAR_DATA *ch, const char *argument) { int level; char arg[MAX_STRING_LENGTH]; /* RT code for taking a level argument */ one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') /* take the default path */ if (ch->invis_level) { ch->invis_level = 0; act("$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM); char_puts("You slowly fade back into existence.\n", ch); } else { ch->invis_level = LEVEL_IMMORTAL; act("$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM); char_puts("You slowly vanish into thin air.\n", ch); } else /* do the level thing */ { level = atoi(arg); if (ch->pcdata->security < 9) { // char_puts("LOL. NO SECURITY.\n",ch); if ((level < 2) || (level > ch->level)) { char_puts("Invis level must be between 2 and your level.\n",ch); return; } else { ch->reply = NULL; ch->invis_level = level; act("$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM); char_puts("You slowly vanish into thin air.\n", ch); } } else { // char_puts("WoooW. You've got security.\n",ch); if ((level < 2) || (level > MAX_LEVEL)) { char_printf(ch, "Invis level must be between 2 and %d for your security.\n", MAX_LEVEL); return; } else { ch->reply = NULL; ch->invis_level = level; act("$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM); char_puts("You slowly vanish into thin air.\n", ch); char_printf(ch, "You are now Wizi %d\n", level); } } } } void do_incognito(CHAR_DATA *ch, const char *argument) { int level; char arg[MAX_STRING_LENGTH]; /* RT code for taking a level argument */ one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') /* take the default path */ if (ch->incog_level) { ch->incog_level = 0; act("$n is no longer cloaked.", ch, NULL, NULL, TO_ROOM); char_puts("You are no longer cloaked.\n", ch); } else { ch->incog_level = LEVEL_IMMORTAL; act("$n cloaks $s presence.", ch, NULL, NULL, TO_ROOM); char_puts("You cloak your presence.\n", ch); } else /* do the level thing */ { level = atoi(arg); if (level < 2 || level > ch->level) { char_puts("Incog level must be between 2 and your level.\n",ch); return; } else { ch->reply = NULL; ch->incog_level = level; act("$n cloaks $s presence.", ch, NULL, NULL, TO_ROOM); char_puts("You cloak your presence.\n", ch); } } } void do_holylight(CHAR_DATA *ch, const char *argument) { if (IS_NPC(ch)) return; TOGGLE_BIT(ch->conf_flags, PLR_CONF_HOLYLIGHT); char_printf(ch, "Holy light mode %s.\n", IS_SET(ch->conf_flags, PLR_CONF_HOLYLIGHT) ? "on" : "off"); } /* * anoncolor - anonymous colors for imms so morts can * descern if several imms are taking part in * the same conversation. * * by Zsuzsu */ void do_anoncolor(CHAR_DATA *ch, const char *argument) { char buf[] = "rmgybmcRGYBMC"; char *p = NULL; CHAR_DATA *wch; int i=0, j=0; char old_color = ch->pcdata->anon_color; char arg[MAX_STRING_LENGTH]; one_argument(argument, arg, sizeof(arg)); /* change color */ if (old_color == 0 || (!str_prefix(arg, "set") && ch->level >= L1)) { /* NOTE: allowing IMMs to set to a specific color, * rather than a random one, will defeat the * purpose of this feature. People will always * tend to favor certain colors and will * consistantly choose them, thus compromising * the anonimity. */ for (wch = char_list; wch && !IS_NPC(wch); wch = wch->next) { if (IS_IMMORTAL(wch)) if (wch->pcdata->anon_color) { p = strchr(buf, wch->pcdata->anon_color); *p= '-'; } } for (i=0; i < sizeof(buf); i++) { if (buf[i] != '-') buf[j++] = buf[i]; } buf[j] = '\0'; ch->pcdata->anon_color = buf[number_range(0, strlen(buf)-1)]; if (old_color) { log_printf("%s's anon color was '%s' is now '%s'", ch->name, color_name(old_color), color_name(ch->pcdata->anon_color)); char_printf(ch, "Your anonymous color was '{%c%s{x' but is now '{%c%s{x.'\n", old_color, color_name(old_color), ch->pcdata->anon_color, color_name(ch->pcdata->anon_color)); } else { log_printf("%s's anon color is now '%s'", ch->name, color_name(ch->pcdata->anon_color)); char_printf(ch, "Your anonymous color is set to {%c%s{x.\n", ch->pcdata->anon_color, color_name(ch->pcdata->anon_color)); } } /* list who has what color */ else if (arg[0] == '\0' || !str_prefix(arg, "list")) { char_puts("Current anonymous immortal colors:\n", ch); for (wch = char_list; wch && !IS_NPC(wch); wch = wch->next) { if (IS_IMMORTAL(wch) && can_see(ch, wch)) char_printf(ch, "%20s : {%c%s{x\n", wch->name, wch->pcdata->anon_color ? wch->pcdata->anon_color : 'x', wch->pcdata->anon_color ? color_name(wch->pcdata->anon_color) : "NONE"); } } else { char_puts("Syntax: anoncolor [list|set]", ch); } } /* prefix command: it will put the string typed on each line typed */ DO_FUN(do_prefi) { char_puts("You cannot abbreviate the prefix command.\n", ch); } DO_FUN(do_prefix) { if (argument[0] == '\0') { if (ch->prefix[0] == '\0') { char_puts("You have no prefix to clear.\n",ch); return; } char_puts("Prefix removed.\n",ch); free_string(ch->prefix); ch->prefix = str_empty; return; } free_string(ch->prefix); ch->prefix = str_dup(argument); char_printf(ch, "Prefix set to '%s'.\n", argument); } void advance(CHAR_DATA *victim, int level) { int iLevel; int tra; int pra; race_t *r = race_lookup(victim->race); tra = victim->train; pra = victim->practice; victim->pcdata->plevels = 0; /* * Lower level: * Reset to level 1. * Then raise again. * Currently, an imp can lower another imp. * -- Swiftest */ if (level <= victim->level) { int temp_prac; char_puts("**** OOOOHHHHHHHHHH NNNNOOOO ****\n", victim); temp_prac = victim->practice; victim->level = 1; victim->exp = base_exp(victim); victim->max_hit = CHAR_CREATE_INITIAL_HP + r->pcdata->hp_bonus; victim->max_mana = CHAR_CREATE_INITIAL_MANA + r->pcdata->mana_bonus + (victim->perm_stat[STAT_INT] * 2/ 3 + victim->perm_stat[STAT_WIS] /2); victim->max_move = CHAR_CREATE_INITIAL_MOVE + ((victim->perm_stat[STAT_CON]/5 + victim->perm_stat[STAT_DEX]/5) * 5); victim->practice = 0; victim->hit = victim->max_hit; victim->mana = victim->max_mana; victim->move = victim->max_move; victim->pcdata->perm_hit = victim->max_hit; victim->pcdata->perm_mana = victim->max_mana; victim->pcdata->perm_move = victim->max_move; victim->pcdata->perm_dam = 0; victim->pcdata->perm_nim = 0; advance_level(victim); victim->practice = temp_prac; } else char_puts("**** OOOOHHHHHHHHHH YYYYEEEESSS ****\n", victim); for (iLevel = victim->level; iLevel < level; iLevel++) { char_puts("{CYou raise a level!!{x ", victim); victim->exp += exp_to_level(victim); victim->level++; advance_level(victim); } victim->exp_tl = 0; victim->train = tra; victim->practice = pra; save_char_obj(victim, FALSE); } void do_advance(CHAR_DATA *ch, const char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int level; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); if (arg1[0] == '\0' || arg2[0] == '\0' || !is_number(arg2)) { char_puts("Syntax: advance <char> <level>.\n", ch); return; } if ((victim = get_char_room(ch, arg1)) == NULL) { char_puts("That player is not here.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if ((level = atoi(arg2)) < 1 || level > MAX_LEVEL) { char_printf(ch, "Level must be 1 to %d.\n", MAX_LEVEL); return; } if (level > ch->level) { char_puts("Limited to your level.\n", ch); return; } advance(victim, level); } void do_mset(CHAR_DATA *ch, const char *argument) { char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; char arg3 [MAX_INPUT_LENGTH]; char arg4 [MAX_INPUT_LENGTH]; CHAR_DATA *victim; int value, val2; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); argument = one_argument(argument, arg3, sizeof(arg3)); one_argument(argument, arg4, sizeof(arg4)); if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0') { char_puts("Syntax:\n",ch); char_puts(" set char <name> <field> <value>\n",ch); char_puts(" Field being one of:\n", ch); char_puts(" str int wis dex con cha sex class level\n",ch); char_puts(" race align ethos practice train gold\n", ch); char_puts(" hp mana move thirst drunk full bloodlust desire\n", ch); char_puts(" hometown clan relig trouble questp questt\n", ch); char_puts(" noghost newbie multikiller security pkok\n", ch); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { char_puts("They aren't here.\n", ch); return; } /* * Snarf the value (which need not be numeric). */ value = is_number(arg3) ? atoi(arg3) : -1; val2 = is_number(arg4) ? atoi(arg4) : -1; /* * Set something. */ if (!str_cmp(arg2, "str")) { if (value < 3 || value > get_max_train(victim,STAT_STR)) { char_printf(ch, "Strength range is 3 to %d\n.", get_max_train(victim,STAT_STR)); return; } victim->perm_stat[STAT_STR] = value; return; } if (!str_cmp(arg2, "trouble")) { if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (value == -1 || val2 == -1) { char_puts("Usage: set char <name> trouble " "<vnum> <value>.\n", ch); return; } qtrouble_set(victim, value, val2+1); char_puts("Ok.\n", ch); return; } if (!str_cmp(arg2, "security")) { /* OLC */ if (IS_NPC(ch)) { char_puts("Si, claro.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (value > ch->pcdata->security || value < 0) { if (ch->pcdata->security != 0) char_printf(ch, "Valid security is 0-%d.\n", ch->pcdata->security); else char_puts("Valid security is 0 only.\n", ch); return; } victim->pcdata->security = value; return; } if (!str_cmp(arg2, "int")) { if (value < 3 || value > get_max_train(victim,STAT_INT)) { char_printf(ch, "Intelligence range is 3 to %d.\n", get_max_train(victim,STAT_INT)); return; } victim->perm_stat[STAT_INT] = value; return; } if (!str_cmp(arg2, "wis")) { if (value < 3 || value > get_max_train(victim,STAT_WIS)) { char_printf(ch, "Wisdom range is 3 to %d.\n",get_max_train(victim,STAT_WIS)); return; } victim->perm_stat[STAT_WIS] = value; return; } if (!str_cmp(arg2, "questp")) { if (value == -1) value = 0; if (!IS_NPC(victim)) victim->pcdata->questpoints = value; return; } if (!str_cmp(arg2, "questt")) { if (value == -1) value = 30; if (!IS_NPC(victim)) victim->pcdata->questtime = value; return; } if (!str_cmp(arg2, "relig")) { if (value == -1) value = 0; victim->religion = value; return; } if (!str_cmp(arg2, "dex")) { if (value < 3 || value > get_max_train(victim,STAT_DEX)) { char_printf(ch, "Dexterity ranges is 3 to %d.\n", get_max_train(victim,STAT_DEX)); return; } victim->perm_stat[STAT_DEX] = value; return; } if (!str_cmp(arg2, "con")) { if (value < 3 || value > get_max_train(victim,STAT_CON)) { char_printf(ch, "Constitution range is 3 to %d.\n", get_max_train(victim,STAT_CON)); return; } victim->perm_stat[STAT_CON] = value; return; } if (!str_cmp(arg2, "cha")) { if (value < 3 || value > get_max_train(victim,STAT_CHA)) { char_printf(ch, "Constitution range is 3 to %d.\n", get_max_train(victim,STAT_CHA)); return; } victim->perm_stat[STAT_CHA] = value; return; } if (!str_prefix(arg2, "sex")) { if (value < 0 || value > 2) { char_puts("Sex range is 0 to 2.\n", ch); return; } if ((victim->class == CLASS_WARLOCK) || (victim->class == CLASS_WITCH) || (victim->class == CLASS_NECROMANCER)) { char_puts("Because of class restrictions," " you can't change their sex.\n", ch); return; } victim->sex = value; if (!IS_NPC(victim)) victim->pcdata->true_sex = value; return; } if (!str_prefix(arg2, "class")) { int cl; if (IS_NPC(victim)) { char_puts("Mobiles have no class.\n",ch); return; } cl = cn_lookup(arg3); if (cl < 0) { BUFFER *output; output = buf_new(-1); buf_add(output, "Possible classes are: "); for (cl = 0; cl < classes.nused; cl++) { if (cl > 0) buf_add(output, " "); buf_add(output, CLASS(cl)->name); } buf_add(output, ".\n"); send_to_char(buf_string(output), ch); buf_free(output); return; } victim->class = cl; victim->exp = exp_for_level(victim, victim->level); victim->exp_tl = 0; update_skills(victim); return; } if (!str_prefix(arg2, "level")) { if (!IS_NPC(victim)) { char_puts("You must 'advance' players.\n", ch); return; } if (value < 0 || value > MAX_LEVEL) { char_printf(ch, "Level range is 0 to %d.\n", MAX_LEVEL); return; } victim->level = value; return; } if (!str_prefix(arg2, "gold")) { victim->gold = value; return; } if (!str_prefix(arg2, "hp")) { if (value < -10 || value > 30000) { char_puts("Hp range is -10 to 30,000 hit points.\n", ch); return; } victim->max_hit = value; if (!IS_NPC(victim)) victim->pcdata->perm_hit = value; return; } if (!str_prefix(arg2, "mana")) { if (value < 0 || value > 60000) { char_puts("Mana range is 0 to 60,000 mana points.\n", ch); return; } victim->max_mana = value; if (!IS_NPC(victim)) victim->pcdata->perm_mana = value; return; } if (!str_prefix(arg2, "move")) { if (value < 0 || value > 60000) { char_puts("Move range is 0 to 60,000 move points.\n", ch); return; } victim->max_move = value; if (!IS_NPC(victim)) victim->pcdata->perm_move = value; return; } if (!str_prefix(arg2, "practice")) { if (value < 0 || value > 250) { char_puts("Practice range is 0 to 250 sessions.\n", ch); return; } victim->practice = value; return; } if (!str_prefix(arg2, "train")) { if (value < 0 || value > 50) { char_puts("Training session range is 0 to 50 sessions.\n", ch); return; } victim->train = value; return; } if (!str_prefix(arg2, "align")) { if (value < -1000 || value > 1000) { char_puts("Alignment range is -1000 to 1000.\n", ch); return; } victim->alignment = value; char_puts("Remember to check their hometown.\n", ch); return; } if (!str_prefix(arg2, "ethos")) { int ethos; if (IS_NPC(victim)) { char_puts("Mobiles don't have an ethos.\n", ch); return; } ethos = flag_value(ethos_table, arg3); if (ethos < 0) { char_puts("%s: Unknown ethos.\n", ch); char_puts("Valid ethos types are:\n", ch); show_flags(ch, ethos_table); return; } victim->ethos = ethos; return; } if (!str_prefix(arg2, "hometown")) { if (IS_NPC(victim)) { char_puts("Mobiles don't have hometowns.\n", ch); return; } if (value < 0 || value > 8) { char_puts("Please choose one of the following :.\n", ch); char_puts("Town Alignment Value\n", ch); char_puts("---- --------- -----\n", ch); char_puts("Midgaard Any 0\n", ch); char_puts("New Thalos Any 1\n", ch); char_puts("Titan Any 2\n", ch); char_puts("Old Mid Evil 3\n", ch); char_puts("Magic Any 4\n", ch); char_puts("Emerald Any 5\n", ch); char_puts("Fayten Good 6\n", ch); char_puts("Virgin Any 7\n", ch); char_puts("Caerlon Neutral 8\n", ch); return; } if ((value == 6 && !IS_GOOD(victim)) || (value == 8 && !IS_NEUTRAL(victim)) || (value == 3 && !IS_EVIL(victim))) { char_puts("The hometown doesn't match this character's alignment.\n", ch); return; } victim->hometown = value; return; } if (!str_prefix(arg2, "thirst")) { if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (value < -1 || value > 100) { char_puts("Thirst range is -1 to 100.\n", ch); return; } victim->pcdata->condition[COND_THIRST] = value; return; } if (!str_prefix(arg2, "drunk")) { if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (value < -1 || value > 100) { char_puts("Drunk range is -1 to 100.\n", ch); return; } victim->pcdata->condition[COND_DRUNK] = value; return; } if (!str_prefix(arg2, "full")) { if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (value < -1 || value > 100) { char_puts("Full range is -1 to 100.\n", ch); return; } victim->pcdata->condition[COND_FULL] = value; return; } if (!str_prefix(arg2, "hunger")) { if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (value < -1 || value > 100) { char_puts("Hunger range is -1 to 100.\n", ch); return; } victim->pcdata->condition[COND_HUNGER] = value; return; } if (!str_prefix(arg2, "bloodlust")) { if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (value < -1 || value > 100) { char_puts("Full range is -1 to 100.\n", ch); return; } victim->pcdata->condition[COND_BLOODLUST] = value; return; } if (!str_prefix(arg2, "desire")) { if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (value < -1 || value > 100) { char_puts("Full range is -1 to 100.\n", ch); return; } victim->pcdata->condition[COND_DESIRE] = value; return; } if (!str_prefix(arg2, "race")) { int race; race = rn_lookup(arg3); if (race == -1) { char_puts("That is not a valid race.\n",ch); return; } if (!IS_NPC(victim) && !RACE(race)->pcdata) { char_puts("That is not a valid player race.\n",ch); return; } victim->race = race; SET_ORG_RACE(victim, race); update_skills(victim); victim->exp = exp_for_level(victim, victim->level); victim->exp_tl = 0; return; } if (!str_prefix(arg2, "noghost")) { if (IS_NPC(victim)) { char_puts("Not on NPCs.\n", ch); return; } REMOVE_BIT(victim->state_flags, STATE_GHOST); REMOVE_BIT(victim->affected_by, AFF_PASS_DOOR); REMOVE_BIT(victim->affected_by, AFF_FLYING); char_puts("The player is no longer a ghost.\n", ch); return; } if (!str_prefix(arg2, "newbie")) { if (IS_NPC(victim)) { char_puts("Not on NPCs.\n", ch); return; } if (value == 0) { REMOVE_BIT(victim->acct_flags, ACCT_NEWBIE); char_puts("The player is not a newbie.\n", ch); } else if (value == 1) { SET_BIT(victim->acct_flags, ACCT_NEWBIE); char_puts("The player is now under newbie protection.\n", ch); } else { char_puts("Accepted values are 0 (false) or 1 (true).\n", ch); } return; } if (!str_prefix(arg2, "multikiller")) { if (IS_NPC(victim)) { char_puts("Not on NPCs.\n", ch); return; } if (value == 0) { REMOVE_BIT(victim->acct_flags, ACCT_MULTIKILLER); char_puts("The player is no longer a multikiller.\n", ch); } else if (value == 1) { SET_BIT(victim->acct_flags, ACCT_MULTIKILLER); char_puts("The player is now a multikiller.\n", ch); } else { char_puts("Accepted values are 0 (false) or 1 (true).\n", ch); } return; } if (!str_prefix(arg2, "truelifer")) { if (IS_NPC(victim)) { char_puts("Not on NPCs.\n", ch); return; } if (value == 0) { REMOVE_BIT(victim->acct_flags, ACCT_TRUE_LIFER); char_puts("The player is no longer a true lifer.\n", ch); } else if (value == 1) { if (ch->level >= ML-1) { SET_BIT(victim->acct_flags, ACCT_TRUE_LIFER); char_puts("The player is now a true lifer.\n", ch); } } else { char_puts("Accepted values are 0 (false) or 1 (true).\n", ch); } return; } if (!str_prefix(arg2, "pkok")) { name_toggle(&victim->pcdata->pk_ok_list, arg3, ch, "PKOK"); return; } /* set a fake ip address for imms to see in sockets so upper * level admins can have anonymous characters */ if (!str_cmp(arg2, "fakeip") && IS_TRUSTED_IMP(ch)) { if (IS_NPC(victim)) { char_puts("Not on NPCs.\n", ch); return; } free_string(victim->pcdata->fake_ip); victim->pcdata->fake_ip = str_dup(arg3); return; } if (!str_prefix(arg2, "clan")) { int cn; if (IS_NPC(victim)) { char_puts("Not on an NPC.\n", ch); return; } if ((cn = cln_lookup(arg3)) < 0) { char_puts("Incorrect clan name.\n", ch); return; } if (cn != victim->clan) { clan_t *clan; if (victim->clan && (clan = clan_lookup(victim->clan))) { clan_update_lists(clan, victim); clan_save(clan); } victim->clan = cn; if (cn) { clan = CLAN(cn); if (IS_IMMORTAL(victim)) { victim->pcdata->clan_status = CLAN_PATRON; name_add(&clan->member_list[CLAN_PATRON], victim->name, NULL, NULL); } else { victim->pcdata->clan_status = CLAN_RECRUIT; name_add(&clan->member_list[CLAN_RECRUIT], victim->name, NULL, NULL); } clan_save(clan); } else { victim->pcdata->clan_status = CLAN_FREEMAN; } update_skills(victim); } char_puts("Ok.\n", ch); return; } /* * Generate usage message. */ do_mset(ch, str_empty); } void do_desocket(CHAR_DATA *ch, const char *argument) { DESCRIPTOR_DATA *d; int socket; char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg, sizeof(arg)); if (!is_number(arg)) { char_puts("The argument must be a number.\n", ch); return; } if (arg[0] == '\0') { char_puts("Disconnect which socket?\n", ch); return; } else { socket = atoi(arg); for (d = descriptor_list; d != NULL; d = d->next) { if (d->descriptor == socket) { if (d->character == ch) { char_puts("It would be foolish to disconnect yourself.\n", ch); return; } if (d->connected == CON_PLAYING) { char_puts("Why don't you just use disconnect?\n", ch); return; } write_to_descriptor(d->descriptor, "You are being disconnected by an immortal.", 0); close_descriptor(d); char_puts("Done.\n", ch); return; } } char_puts("No such socket is connected.\n", ch); return; } } void do_smite(CHAR_DATA *ch, const char *argument) { CHAR_DATA *victim; if (argument[0] == '\0') { char_puts("You are so frustrated you smite yourself! OWW!\n", ch); return; } if ((victim = get_char_world(ch, argument)) == NULL) { char_puts("You'll have to smite them some other day.\n", ch); return; } if (IS_NPC(victim) && ch->level < L5) { char_puts("That poor mob never did anything to you.\n", ch); return; } if (victim->level > ch->level) { char_puts("How dare you!\n", ch); return; } if (victim->position < POS_SLEEPING) { char_puts("Take pity on the poor thing.\n", ch); return; } act("A bolt comes down out of the heavens and smites you!", victim, NULL, ch, TO_CHAR); act("You reach down and smite $n!", victim, NULL, ch, TO_VICT); act("A bolt from the heavens smites $n!", victim, NULL, ch, TO_NOTVICT); victim->hit = victim->hit / 2; return; } void do_popularity(CHAR_DATA *ch, const char *argument) { BUFFER *output; AREA_DATA *area; extern AREA_DATA *area_first; int i; output = buf_new(-1); buf_add(output, "Area popularity statistics (in char * ticks)\n"); for (area = area_first,i=0; area != NULL; area = area->next,i++) { if (i % 2 == 0) buf_add(output, "\n"); buf_printf(output, "%-20s %-8lu ", area->name, area->count); } buf_add(output, "\n\n"); page_to_char(buf_string(output), ch); buf_free(output); } void do_herotitle(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Change whose title to what?\n", ch); return; } victim = get_char_world(ch, arg); if (victim == NULL) { char_puts("Nobody is playing with that name.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC's.\n", ch); return; } if (argument[0] == '\0') { char_puts("Change the title to what?\n", ch); return; } /* if (ch->level < L1 && victim->level != LEVEL_HERO) { char_puts("You can only change the titles of heros.\n", ch); return; } */ if (set_title(victim, argument)) { char_printf(ch, "Title set to: %s%s\n", victim->name, victim->pcdata->title); char_printf(victim, "Your title is set to: %s%s\n", victim->name, victim->pcdata->title); } else { char_printf(ch, "The title was over the maximum of %d visible characters.", MAX_TITLE_LENGTH); } } /* * .gz files are checked for too, just in case. */ void do_rename(CHAR_DATA* ch, const char *argument) { char old_name[MAX_INPUT_LENGTH], new_name[MAX_INPUT_LENGTH]; char strsave[PATH_MAX]; char *file_name; CHAR_DATA *victim; clan_t *clan; argument = first_arg(argument, old_name, sizeof(old_name), FALSE); first_arg(argument, new_name, sizeof(new_name), FALSE); if (!old_name[0]) { char_puts("Rename who?\n",ch); return; } victim = get_char_world(ch, old_name); if (!victim) { char_puts("There is no such a person online.\n",ch); return; } if (IS_NPC(victim)) { char_puts("You cannot use Rename on NPCs.\n",ch); return; } if (victim != ch && victim->level >= ch->level) { char_puts("You failed.\n",ch); return; } if (!victim->desc || (victim->desc->connected != CON_PLAYING)) { char_puts("This player has lost his link or is inside a pager or the like.\n",ch); return; } if (!new_name[0]) { char_puts("Rename to what new name?\n",ch); return; } if (!pc_name_ok(new_name)) { char_puts("The new name is illegal.\n",ch); return; } if (victim->clan && (clan = clan_lookup(victim->clan))) { bool touched = FALSE; if (name_delete(&clan->member_list[victim->pcdata->clan_status], old_name, NULL, NULL)) { touched = TRUE; name_add(&clan->member_list[victim->pcdata->clan_status], new_name, NULL, NULL); } if (touched) clan_save(clan); } /* delete old pfile */ if (str_cmp(new_name, old_name)) { DESCRIPTOR_DATA *d; OBJ_DATA *obj; for (d = descriptor_list; d; d = d->next) if (d->character && !str_cmp(d->character->name, new_name)) { char_puts ("A player with the name you specified already exists!\n",ch); return; } /* check pfile */ file_name = capitalize(new_name); if (dfexist(PLAYER_PATH, file_name)) { char_puts("A player with that name already exists!\n", ch); return; } /* check .gz pfile */ snprintf(strsave, sizeof(strsave), "%s.gz", file_name); if (dfexist(PLAYER_PATH, strsave)) { char_puts ("A player with that name already exists in a compressed file!\n",ch); return; } /* change object owners */ for (obj = object_list; obj; obj = obj->next) if (obj->owner && !str_cmp(mlstr_mval(obj->owner), old_name)) { mlstr_free(obj->owner); obj->owner = mlstr_new(new_name); } dunlink(PLAYER_PATH, capitalize(old_name)); } /* * NOTE: Players who are level 1 do NOT get saved under a new name */ free_string(victim->name); victim->name = str_dup(new_name); mlstr_free(victim->short_descr); victim->short_descr = mlstr_new(new_name); save_char_obj(victim, FALSE); char_puts("Character renamed.\n", ch); act_puts("$n has renamed you to $N!", ch, NULL, victim, TO_VICT, POS_DEAD); } void do_notitle(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; if (!IS_IMMORTAL(ch)) return; argument = one_argument(argument, arg, sizeof(arg)); if ((victim = get_char_world(ch ,arg)) == NULL) { char_puts("He is not currently playing.\n", ch); return; } TOGGLE_BIT(victim->state_flags, STATE_NOTITLE); if (!IS_SET(victim->state_flags, STATE_NOTITLE)) char_puts("You can change your title again.\n", victim); else char_puts("You won't be able to change your title anymore.\n", victim); char_puts("Ok.\n", ch); } void do_noaffect(CHAR_DATA *ch, const char *argument) { AFFECT_DATA *paf,*paf_next; char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; if (!IS_IMMORTAL(ch)) return; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Noaff whom?\n", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { char_puts("He is not currently playing.\n", ch); return; } for (paf = victim->affected; paf != NULL; paf = paf_next) { paf_next = paf->next; if (paf->duration >= 0) { skill_t *sk; if ((sk = skill_lookup(paf->type)) && !IS_NULLSTR(sk->msg_off)) act_puts(sk->msg_off, victim, NULL, NULL, TO_CHAR, POS_RESTING); affect_remove(victim, paf); } } } void do_affrooms(CHAR_DATA *ch, const char *argument) { ROOM_INDEX_DATA *room; ROOM_INDEX_DATA *room_next; int count = 0; if (!top_affected_room) char_puts("No affected room.\n",ch); for (room = top_affected_room; room ; room = room_next) { room_next = room->aff_next; count++; char_printf(ch, "%d) [Vnum : %5d] %s\n", count, room->vnum , mlstr_cval(room->name, ch)); } } void do_find(CHAR_DATA *ch, const char *argument) { char* path; ROOM_INDEX_DATA *location; if (argument[0] == '\0') { char_puts("Ok. But what I should find?\n", ch); return; } if ((location = find_location(ch, argument)) == NULL) { char_puts("No such location.\n", ch); return; } path = find_way(ch, ch->in_room, location); char_printf(ch, "%s.\n", path); log_printf("From %d to %d: %s.\n", ch->in_room->vnum, location->vnum, path); return; } void do_reboot(CHAR_DATA *ch, const char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { char_puts("Usage: reboot now\n" "Usage: reboot <ticks to reboot>\n" "Usage: reboot cancel\n" "Usage: reboot status\n", ch); return; } if (is_name(arg,"cancel")) { reboot_counter = -1; char_puts("Reboot canceled.\n", ch); return; } if (is_name(arg, "now")) { reboot_mud(); return; } if (is_name(arg, "status")) { if (reboot_counter == -1) char_printf(ch, "Automatic rebooting is inactive.\n"); else char_printf(ch, "Reboot in %i minutes.\n", reboot_counter); return; } if (is_number(arg)) { reboot_counter = atoi(arg); rebooter = 1; char_printf(ch, "Legends & Lore will reboot in %i ticks.\n", reboot_counter); return; } do_reboot(ch, ""); } void reboot_mud(void) { extern bool merc_down; DESCRIPTOR_DATA *d,*d_next; log("Rebooting Legends & Lore"); for (d = descriptor_list; d != NULL; d = d_next) { d_next = d->next; write_to_buffer(d,"Legends & Lore is going down for rebooting NOW!\n\r",0); if (d->character) save_char_obj(d->character, TRUE); close_descriptor(d); } merc_down = TRUE; } DO_FUN(do_msgstat) { varr *v; mlstring **mlp; int i; BUFFER *output; if (argument[0] == '\0') { for (i = 0; i < MAX_MSG_HASH; i++) { varr *v = msg_hash_table+i; char_printf(ch, "%3d: %d msgs\n", i, v->nused); } return; } if (!is_number(argument)) { do_help(ch, "MSGSTAT"); return; } i = atoi(argument); if (i < 0 || i >= MAX_MSG_HASH) { char_printf(ch, "Valid hash key range is 0..%d\n", MAX_KEY_HASH); return; } v = msg_hash_table+i; output = buf_new(-1); buf_printf(output, "Dumping msgs with hash #%d\n", i); for (i = 0; i < v->nused; i++) { mlp = VARR_GET(v, i); mlstr_dump(output, str_empty, *mlp); buf_add(output, "\n"); } page_to_char(buf_string(output), ch); buf_free(output); } extern int str_count; extern int str_real_count; /* XXX */ DO_FUN(do_strstat) { char_printf(ch, "Strings: %d\n" "Allocated: %d\n", str_count, str_real_count); } DO_FUN(do_grant) { cmd_t *cmd; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); if (arg1[0] == '\0') { do_help(ch, "'WIZ GRANT'"); return; } if ((victim = get_char_room(ch, arg1)) == NULL) { char_puts("They aren't here.\n", ch); return; } if (IS_NPC(victim)) { char_puts("Not on NPC.\n", ch); return; } if (arg2[0] == '\0') { char_printf(ch, "Granted commands for %s: [%s]\n", victim->name, victim->pcdata->granted); return; } if (is_number(arg2)) { int lev = atoi(arg2); if (lev < LEVEL_IMMORTAL) { char_printf(ch, "grant: granted level must be at least %d\n", LEVEL_HERO); return; } if (lev > ch->level) { char_puts("grant: granted level cannot be higher" " than yours.\n", ch); return; } for (cmd = cmd_table; cmd->name; cmd++) { if (cmd->level < LEVEL_HERO || cmd->level > lev) continue; name_add(&victim->pcdata->granted, cmd->name, ch, "grant"); } return; } for (; arg2[0]; argument = one_argument(argument, arg2, sizeof(arg2))) { if ((cmd = cmd_lookup(arg2)) == NULL && str_cmp(arg2, "none") && str_cmp(arg2, "all")) { char_printf(ch, "%s: command not found.\n", arg2); continue; } if (cmd && cmd->level < LEVEL_IMMORTAL) { char_printf(ch, "%s: not a wizard command.\n", arg2); continue; } if (cmd && cmd->level > ch->level) { char_printf(ch, "%s: is above your level.\n", arg2); continue; } name_toggle(&victim->pcdata->granted, arg2, ch, "grant"); } } DO_FUN(do_disable) { cmd_t *cmd; char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { do_help(ch, "'WIZ ENABLE DISABLE'"); return; } if (!str_cmp(arg, "?")) { char_puts("Disabled commands:\n", ch); for (cmd = cmd_table; cmd->name; cmd++) if (IS_SET(cmd->flags, CMD_DISABLED)) char_printf(ch, "%s\n", cmd->name); return; } for (; arg[0]; argument = one_argument(argument, arg, sizeof(arg))) { if ((cmd = cmd_lookup(arg)) == NULL) { char_printf(ch, "%s: command not found.\n", arg); continue; } if (!str_cmp(cmd->name, "enable")) { char_puts("'enable' command cannot be disabled.\n", ch); return; } SET_BIT(cmd->flags, CMD_DISABLED); char_printf(ch, "%s: command disabled.\n", cmd->name); } } DO_FUN(do_enable) { cmd_t *cmd; char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { do_help(ch, "'WIZ ENABLE DISABLE'"); return; } for (; arg[0]; argument = one_argument(argument, arg, sizeof(arg))) { if ((cmd = cmd_lookup(arg)) == NULL) { char_printf(ch, "%s: command not found.\n", arg); continue; } REMOVE_BIT(cmd->flags, CMD_DISABLED); char_printf(ch, "%s: command enabled.\n", cmd->name); } } DO_FUN(do_warena) { if (is_affected_world(WAFF_ARENA)) { WORLD_AFFECT_DATA *paff; while ((paff = affect_find_world(WAFF_ARENA)) != NULL) { if (paff->level <= ch->level) { affect_remove_world(paff); wiznet("$N has removed {Yarena{x mode from the world.", ch, NULL, WIZ_ANNOUNCE, 0, 0); } else char_puts("Sorry, you're not high enough level to do that.", ch); } } else { WORLD_AFFECT_DATA waff; waff.player = ch; waff.player_name = ch->name; waff.level = LEVEL_IMMORTAL; waff.type = WAFF_ARENA; waff.duration = -1; waff.modifier = 0; waff.chance = 100; waff.min_level = 0; waff.max_level = LEVEL_HERO; waff.visible_level = MIN_PK_LEVEL; waff.notify = WAFF_NOTIFY_ON | WAFF_NOTIFY_OFF; waff.area = NULL; affect_to_world(&waff); wiznet("$N has put the world in {Yarena{x mode.", ch, NULL, WIZ_ANNOUNCE, 0, 0); } } /* * scatter all NPC mobs or objects in the room * throughout the world or area to be found for quests. * * by Zsuzsu */ DO_FUN(do_scatter) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; AREA_DATA *pArea = NULL; ROOM_INDEX_DATA *pRoom = NULL; CHAR_DATA *vch = NULL, *vch_next; OBJ_DATA *obj, *r_next_cont; int count = 0; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); if (arg1[0] == '\0') { do_help(ch, "'WIZ SCATTER'"); return; } if (!str_prefix(arg1, "area")) { if (arg2[0] == '\0') pArea = ch->in_room->area; else if (!is_number(arg2) || (pArea = area_lookup(atoi(arg2))) == NULL) { char_puts("Can't find that area.\n", ch); return; } } else if (!str_prefix(arg1, "world")) { pArea = NULL; } else { do_help(ch, "'WIZ SCATTER'"); return; } act("You toss everything in the room to the winds.", ch, NULL, NULL, TO_CHAR); act("$n tosses everything in the room to the winds.", ch, NULL, NULL, TO_ROOM); for (vch = ch->in_room->people; vch; vch = vch_next) { vch_next = vch->next_in_room; if (vch == ch || !vch->in_room || !IS_NPC(vch) || IS_IMMORTAL(vch) || !(pRoom = get_random_room(ch, pArea)) || !pRoom->area || !pRoom->area->name || !pRoom->name) continue; /*pRoom = get_random_room(ch, pArea);*/ char_printf(ch, "{D%3d){x %s {Dsent to{x %-15.15s {D[{W%6d{D]{x %s\n", count++, mlstr_mval(vch->short_descr), pRoom->area->name, pRoom->vnum, mlstr_mval(pRoom->name)); transfer_char(vch, NULL, pRoom, NULL, NULL, NULL); } for (obj = ch->in_room->contents; obj; obj = r_next_cont) { r_next_cont = obj->next_content; pRoom = get_random_room(ch, pArea); char_printf(ch, "{D%3d){x %s {Dsent to{x %-15.15s {D[{W%6d{D]{x %s\n", count++, mlstr_mval(obj->short_descr), pRoom->area->name, pRoom->vnum, mlstr_mval(pRoom->name)); obj_from_room(obj); obj_to_room(obj, pRoom); } } /* * aschar - As Character * get some info that normally you'd have * to snoop and force to see. */ DO_FUN(do_aschar) { char arg1[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument(argument, arg1, sizeof(arg1)); if (arg1[0] == '\0' || argument[0] == '\0') { char_puts("As whom? Do what?\n",ch); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { char_puts("Couldn't find that person in the realm.\n",ch); return; } if (victim->level > ch->level) { char_puts("You don't have the power for that insight.\n",ch); return; } switch (argument[0]) { case 'p': /*practice*/ show_skills(ch, victim); break; default: char_puts("Sorry, don't know how to do that.\n", ch); } } /* * reclaim - deletes objects from pfiles. * All files are loaded, the vnum of * the item is searched for in all the * player's containers, and is removed. * * This is mostly useful for reseting the * number of limiteds in a realm. * * by Zsuzsu */ DO_FUN(do_reclaim) { char arg[MAX_INPUT_LENGTH]; struct dirent *dp; DIR *dirp; DESCRIPTOR_DATA * d; CHAR_DATA *victim; OBJ_INDEX_DATA *obj_index; int count = 0, pcount = 0; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { do_help(ch, "'WIZ RECLAIM'"); return; } obj_index = get_obj_index(atoi(arg)); if (!obj_index) { char_puts("Bad vnum?\n", ch); return; } if ((dirp = opendir(PLAYER_PATH)) == NULL) { char_printf(ch, "BUG: unable to open player directory %s\n", PLAYER_PATH); return; } char_printf(ch, "Attempting to reclaim: %s\n", mlstr_mval(obj_index->short_descr)); d = malloc(sizeof(*d)); d->connected = CON_DUMMY; for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) { #if defined (LINUX) || defined (WIN32) if (strlen(dp->d_name) < 3) continue; #else if (dp->d_namlen < 3 || dp->d_type != DT_REG) continue; #endif victim = get_char_world(ch, dp->d_name); if (!victim) { if (!load_char_obj(d, dp->d_name)) { DEBUG(DEBUG_RECLAIM, "reclaim couldn't load: %s", dp->d_name); continue; } victim = d->character; } pcount = strip_obj_from_char(ch, victim, obj_index); if (pcount > 0) { char_printf(ch, "{W%12s{x had {Y%3d{x.\n", victim->name, pcount); save_char_obj(victim, FALSE); } count += pcount; if (victim->desc != NULL && victim->desc->connected == CON_DUMMY) free_char(victim); victim = NULL; } closedir(dirp); free(d); char_printf(ch, "Total reclaimed: {Y%3d{x.\n", count); } /* * Silence a player or the whole mud for a certain channel. * This replaces do_nogossip do_nochan etc. * * by Zsuzsu */ DO_FUN(do_silence) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; char *chan_name = NULL; char *on_off = NULL; bool set_on = FALSE; bool toggle = FALSE; CHAR_DATA *victim; channel_t *channel; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); argument = one_argument(argument, arg3, sizeof(arg2)); if (arg1[0] == '\0') { do_help(ch, "'WIZ SILENCE'"); return; } victim = get_char_world(ch, arg1); if (victim && !IS_NPC(victim)) { chan_name = arg2; on_off = arg3; } else { victim = NULL; chan_name = arg1; on_off = arg2; } if (victim && victim->level >= ch->level) { char_puts("Nice try.\n", ch); return; } /* nochan - all except PRAY channel*/ if (victim && (chan_name[0] == '\0' || !str_prefix(chan_name, "nochan"))) { TOGGLE_BIT(victim->restricted_channels, ALL ^ CHAN_WIZHELP); char_printf(ch, "%s's privileges to {WALL CHANNELS{x have been %s{x!", victim->name, IS_SET(victim->restricted_channels, ALL ^ CHAN_WIZHELP) ? "{Rrevoked" : "{Grestored"); char_printf(victim, "Your privileges to {WALL CHANNELS{x have been %s{x!", IS_SET(victim->restricted_channels, ALL ^ CHAN_WIZHELP) ? "{Rrevoked" : "{Grestored"); snprintf(buf, sizeof(buf), "$N %s{x $i's channel privilege to {WALL CHANNELS{x.", IS_SET(victim->restricted_channels, ALL ^ CHAN_WIZHELP) ? "{Rrevoked" : "{Grestored"); wiznet(buf, ch, victim, WIZ_PENALTIES, 0, 0); return; } channel = channel_lookup(chan_name); if (!channel) { char_puts("Illegal channel or player name.\n", ch); return; } if (!str_cmp(on_off, "on")) set_on = TRUE; else if (!str_cmp(on_off, "off")) set_on = FALSE; else { toggle = TRUE;; } if (victim) { if (toggle) TOGGLE_BIT(victim->restricted_channels, channel->flag); else if (set_on) SET_BIT(victim->restricted_channels, channel->flag); else REMOVE_BIT(victim->restricted_channels, channel->flag); char_printf(ch, "%s's privilege to {W%s{x has been %s{x.", victim->name, channel->name, IS_SET(victim->restricted_channels, channel->flag) ? "{Rrevoked" : "{Grestored"); char_printf(victim, "Your privilege to {W%s{x has been %s{x.", channel->name, IS_SET(victim->restricted_channels, channel->flag) ? "{Rrevoked" : "{Grestored"); snprintf(buf, sizeof(buf), "$N %s{x $i's channel privilege to {W%s{x.", IS_SET(victim->restricted_channels, channel->flag) ? "{Rrevoked" : "{Grestored", channel->name); wiznet(buf, ch, victim, WIZ_PENALTIES, 0, 0); } else { if (toggle) TOGGLE_BIT(global_channels, channel->flag); else if (set_on) REMOVE_BIT(global_channels, channel->flag); else SET_BIT(global_channels, channel->flag); char_printf(ch, "Global privileges to {W%s{x have been %s{x.", channel->name, IS_SET(global_channels, channel->flag) ? "{Grestored" : "{Rrevoked"); snprintf(buf, sizeof(buf), "$N has %s{x {Bglobal{x channel privilege to {W%s{x.", !IS_SET(global_channels, channel->flag) ? "{Rrevoked" : "{Grestored", channel->name); wiznet(buf, ch, NULL, WIZ_ANNOUNCE, 0, 0); } } /* * matchup two players (or mobs) * so you can compare their viability in battle * in such things as dodge odds against each other. * * by Zsuzsu */ DO_FUN(do_matchup) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; CHAR_DATA *player1; CHAR_DATA *player2; int chance1 = 100; int chance2 = 100; argument = one_argument(argument, arg1, sizeof(arg1)); argument = one_argument(argument, arg2, sizeof(arg2)); if (arg1[0] == '\0' || arg2[0] == '\0') { do_help(ch, "'MATCHUP'"); return; } player1 = get_char_world(ch, arg1); if (player1 == NULL) { char_puts("Can't find the attacker in the realm.\n", ch); return; } player2 = get_char_world(ch, arg2); if (player2 == NULL) { char_puts("Can't find the defender in the realm.\n", ch); return; } char_printf(ch, "Battle Odds:\n"); char_printf(ch," {r%20.20s{x v {b%s{x\n", player1->name, player2->name); char_printf(ch, "Level: {r%3d{x /{b%3d{x\n", LEVEL(player1), LEVEL(player2)); char_printf(ch, "Str: {r%2d{x / {b%2d{x\n", get_curr_stat(player1, STAT_STR), get_curr_stat(player2, STAT_STR)); char_printf(ch, "Dex: {r%2d{x / {b%2d{x\n", get_curr_stat(player1, STAT_DEX), get_curr_stat(player2, STAT_DEX)); char_printf(ch, "Encumberance: {r%3d{x% / {b%d{x%\n", ENCUMBERANCE(player1), ENCUMBERANCE(player2)); char_printf(ch, "Saves: {r%3d{x / {b%3d{x\n", player1->saving_throw, player2->saving_throw); char_printf(ch, "\n"); char_printf(ch, "HitRoll: {r%3d{x / {b%3d{x\n", GET_HITROLL(player1), GET_HITROLL(player2)); char_printf(ch, "toHit: {r%4d{x / {b%d{x {D(needed of d20){x\n", tohit_chance(player1, player2, 0, WEAR_WIELD), tohit_chance(player2, player1, 0, WEAR_WIELD)); char_printf(ch, "toHit(2nd weapon): {r%4d{x / {b%d{x\n", tohit_chance(player1, player2, 0, WEAR_SECOND_WIELD), tohit_chance(player2, player1, 0, WEAR_SECOND_WIELD)); char_printf(ch, "\n"); char_printf(ch, "Parry: {D(%3d%%) {r%3d{x%% /{b%3d{x%% {D(%3d%%){x\n", get_skill(player1, gsn_parry), parry_chance(player2, player1), parry_chance(player1, player2), get_skill(player2, gsn_parry)); chance1 = chance1 - (chance1 * parry_chance(player2, player1) / 100); chance2 = chance2 - (chance2 * parry_chance(player1, player2) / 100); char_printf(ch, "Dodge: {D(%3d%%) {r%3d{x%% /{b%3d{x%% {D(%3d%%){x\n", get_skill(player1, gsn_dodge), dodge_chance(player2, player1), dodge_chance(player1, player2), get_skill(player2, gsn_dodge)); chance1 = chance1 - (chance1 * dodge_chance(player2, player1) / 100); chance2 = chance2 - (chance2 * dodge_chance(player1, player2) / 100); char_printf(ch, "Shield Block {D(%3d%%) {r%3d{x%% /{b%3d{x%% {D(%3d%%){x\n", get_skill(player1, gsn_shield_block), shield_block_chance(player2, player1), shield_block_chance(player1, player2), get_skill(player2, gsn_shield_block)); chance1 = chance1 - (chance1 * shield_block_chance(player2, player1) / 100); chance2 = chance2 - (chance2 * shield_block_chance(player1, player2) / 100); char_printf(ch, "Hand Block: {D(%3d%%) {r%3d{x%% /{b%3d{x%% {D(%3d%%){x\n", get_skill(player1, gsn_hand_block), hand_block_chance(player2, player1), hand_block_chance(player1, player2), get_skill(player2, gsn_hand_block)); chance1 = chance1 - (chance1 * hand_block_chance(player2, player1) / 100); chance2 = chance2 - (chance2 * hand_block_chance(player1, player2) / 100); char_printf(ch, "Haft Block: {D(%3d%%) {r%3d{x%% /{b%3d{x%% {D(%3d%%){x\n", get_skill(player1, gsn_haft_block), haft_block_chance(player2, player1), haft_block_chance(player1, player2), get_skill(player2, gsn_haft_block)); chance1 = chance1 - (chance1 * haft_block_chance(player2, player1) / 100); chance2 = chance2 - (chance2 * haft_block_chance(player1, player2) / 100); char_printf(ch, "Tumble: {D(%3d%%) {r%3d{x%% /{b%3d{x%% {D(%3d%%){x\n", get_skill(player1, gsn_tumble), tumble_chance(player2, player1), tumble_chance(player1, player2), get_skill(player2, gsn_tumble)); chance1 = chance1 - (chance1 * tumble_chance(player2, player1) / 100); chance2 = chance2 - (chance2 * tumble_chance(player1, player2) / 100); char_printf(ch, "Blink: {D(%3d%%) {r%3d{x%% /{b%3d{x%% {D(%3d%%){x\n", get_skill(player1, gsn_blink), blink_chance(player2, player1), blink_chance(player1, player2), get_skill(player2, gsn_blink)); chance1 = chance1 - (chance1 * blink_chance(player2, player1) / 100); chance2 = chance2 - (chance2 * blink_chance(player1, player2) / 100); char_printf(ch, "Total Evasion: {r%3d{x%% /{b%3d{x%%\n", 100 - chance1, 100 - chance2); /* char_printf(ch, "\n"); char_printf(ch, "Saves: {r%3d{x / {b%3d{x\n", player1->saving_throw, player2->saving_throw); */ char_printf(ch, "\n"); char_printf(ch, "Invis Level: {r%3d{x / {b%3d{x\n", get_invis_level(player1), get_invis_level(player2)); char_printf(ch, "Detect Invis Level: {r%3d{x / {b%3d{x\n", get_detect_invis_level(player1), get_detect_invis_level(player2)); } DO_FUN(do_pload) { DESCRIPTOR_DATA *d = NULL; char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument(argument, arg, sizeof(arg)); if (arg[0] == '\0') { do_help(ch, "'WIZ PLOAD'"); return; } victim = get_char_world_unrestricted(arg); if (victim != NULL) { char_puts("But they are already in the realm!\n",ch); return; } d = new_descriptor(); d->connected = CON_DUMMY; if (!load_char_obj(d, arg)) { char_puts("A soul by that name can't be found in the astral plane\n",ch); free_descriptor(d); return; } d->character->desc = d; d->character->next = char_list; char_list = d->character; if (d->character->in_room != NULL) { char_to_room( d->character, ch->in_room); } act( "$n summons $N's soul from the astral plane.", ch, NULL, d->character, TO_ROOM ); act( "You summon $N's soul from the astral plane.", ch, NULL, d->character, TO_CHAR ); if (d->character->pet != NULL) { char_to_room(d->character->pet,d->character->in_room); act("$n arrived, tethered to $r master's soul.", d->character->pet,NULL,NULL,TO_ALL); } } DO_FUN(do_punload) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; victim = get_char_world_unrestricted(arg); if (!victim) { char_puts("They are already wandering the astral plane\n",ch); return; } if (victim->desc->connected != CON_DUMMY) { char_puts("Whoa, you got a live one there!\n",ch); return; } act("$n releases $N's soul back into the astral plane.\n", ch, NULL, victim, TO_ROOM); act("You release $N's soul back into the astral plane.\n", ch, NULL, victim, TO_CHAR); if (victim->was_in_room) { char_to_room(victim, victim->was_in_room); if (victim->pet) { act("$N follows $r master.\n", ch, NULL, victim->pet, TO_ALL); char_to_room(victim->pet, victim->was_in_room); } } save_char_obj(victim, FALSE); do_quit(victim, ""); } int zz_object_costs (CHAR_DATA *ch); int zz_finger_armor_to_jewelery (CHAR_DATA *ch); int zz_wealth_reduction (CHAR_DATA *ch); int zz_mobs_material_flesh (CHAR_DATA *ch); int zz_wear_about_armor (CHAR_DATA *ch); int zz_mob_shopkeeper_profit (CHAR_DATA *ch); int zz_onehanded_bows (CHAR_DATA *ch); /* * Zsuzsu's One-Shot * this is a function that should be run exactly once. * usually it's to update the entire mud of something. */ DO_FUN(do_zzoneshot) { bool sec = FALSE; if (strcmp(ch->name, "Zsuzsu")) { char_puts("Curious little bugger, aren't you. {Y:){z\n", ch); return; } if ((sec = IS_SET(ch->pcdata->wiznet, WIZ_SECURE))) REMOVE_BIT(ch->pcdata->wiznet, WIZ_SECURE); zz_object_costs(ch); zz_mob_shopkeeper_profit(ch); char_puts("Remember to asave the changes, sweetie.\n", ch); if (sec) SET_BIT(ch->pcdata->wiznet, WIZ_SECURE); } /* set all obj's cost for certain types*/ int zz_object_costs (CHAR_DATA *ch) { extern int top_obj_index; OBJ_INDEX_DATA *pObjIndex; int nMatch = 0; int vnum; int count = 0; int cost = 0; int rcost = 0; for (vnum = 0; nMatch < top_obj_index; vnum++) if ((pObjIndex = get_obj_index(vnum)) != NULL) { nMatch++; if (pObjIndex->vnum < 200) continue; if ((cost = get_autocost(pObjIndex))) { rcost = number_range(cost * 90/100, cost * 110/100); if (pObjIndex->vnum >= 17600 && pObjIndex->vnum < 17700) rcost = rcost / 10; rcost = UMAX(5, rcost); LOG("changing: %d from %d sug %d to %d", vnum, pObjIndex->cost, cost, rcost); pObjIndex->cost = rcost; count++; } } char_printf(ch, "Item costs changed: {c%d{x.\n", count); return count; } /* turn all wear_about items into clothing instead of armor */ int zz_wear_about_armor (CHAR_DATA *ch) { extern int top_obj_index; OBJ_INDEX_DATA *pObjIndex; int nMatch = 0; int vnum; int count = 0; for (vnum = 0; nMatch < top_obj_index; vnum++) if ((pObjIndex = get_obj_index(vnum)) != NULL) { nMatch++; if (pObjIndex->vnum < 200) continue; if (IS_SET(pObjIndex->wear_flags, ITEM_WEAR_ABOUT) && pObjIndex->item_type == ITEM_ARMOR) { pObjIndex->item_type = ITEM_CLOTHING; LOG("changing: %d to clothing", vnum); count++; } } char_printf(ch, "wear_about Armors changed: {c%d{x.\n", count); return count; } /* change rings to jewelery type */ int zz_finger_armor_to_jewelery (CHAR_DATA *ch) { extern int top_obj_index; OBJ_INDEX_DATA *pObjIndex; int nMatch = 0; int vnum; int count = 0; for (vnum = 0; nMatch < top_obj_index; vnum++) if ((pObjIndex = get_obj_index(vnum)) != NULL) { nMatch++; if (pObjIndex->vnum < 200) continue; if (IS_SET(pObjIndex->wear_flags, ITEM_WEAR_FINGER) && pObjIndex->item_type == ITEM_ARMOR) { LOG("changing: %d", vnum); pObjIndex->item_type = ITEM_JEWELRY; count++; } } char_printf(ch, "Items changed: {c%d{x.\n", count); return count; } /* change rings to jewelery type */ int zz_onehanded_bows (CHAR_DATA *ch) { extern int top_obj_index; OBJ_INDEX_DATA *pObjIndex; int nMatch = 0; int vnum; int count = 0; for (vnum = 0; nMatch < top_obj_index; vnum++) if ((pObjIndex = get_obj_index(vnum)) != NULL) { nMatch++; if (pObjIndex->vnum < 200) continue; if (pObjIndex->item_type == ITEM_WEAPON && !IS_SET(pObjIndex->value[ITEM_WEAPON_FLAGS], WEAPON_TWO_HANDS) && (pObjIndex->value[ITEM_WEAPON_TYPE] == WEAPON_BOW || pObjIndex->value[ITEM_WEAPON_TYPE] == WEAPON_POLEARM || pObjIndex->value[ITEM_WEAPON_TYPE] == WEAPON_BASTARDSWORD)) { SET_BIT(pObjIndex->value[ITEM_WEAPON_FLAGS], WEAPON_TWO_HANDS); LOG("adding twohanded: %d", vnum); count++; } if (pObjIndex->item_type == ITEM_WEAPON && IS_SET(pObjIndex->value[ITEM_WEAPON_FLAGS], WEAPON_TWO_HANDS) && (pObjIndex->value[ITEM_WEAPON_TYPE] == WEAPON_LONGSWORD || pObjIndex->value[ITEM_WEAPON_TYPE] == WEAPON_WHIP)) { REMOVE_BIT(pObjIndex->value[ITEM_WEAPON_FLAGS], WEAPON_TWO_HANDS); LOG("removing twohanded: %d", vnum); count++; } } char_printf(ch, "Items changed: {c%d{x.\n", count); return count; } /* reduce all mob's wealth */ int zz_wealth_reduction (CHAR_DATA *ch) { int count = 0; int vnum; MOB_INDEX_DATA *pMobIndex; for (vnum = 200; vnum <= 120000; vnum++) { if ((pMobIndex = get_mob_index(vnum)) != NULL) { if ((pMobIndex->wealth/100) > ((pMobIndex->level)/2)) { if (pMobIndex->level > 91 && pMobIndex->pShop) continue; if (pMobIndex->mana[2] == 95) pMobIndex->wealth = UMIN(pMobIndex->wealth, number_range(pMobIndex->level * 30, pMobIndex->level * 60)); else pMobIndex->wealth = UMIN(pMobIndex->wealth, number_range(0, pMobIndex->level * 50)); count++; } } } char_printf(ch, "Mobs changed: {c%d{x.\n", count); return count; } /* take all mobs with an 'unknown' material and make them * 'flesh'. */ int zz_mobs_material_flesh (CHAR_DATA *ch) { int count = 0; int vnum; MOB_INDEX_DATA *pMobIndex; char_printf(ch, "Changing mob material to flesh if not set.\n"); for (vnum = 0; vnum <= 120000; vnum++) { if ((pMobIndex = get_mob_index(vnum)) != NULL) { if (IS_NULLSTR(pMobIndex->material_descr) && pMobIndex->material == MATERIAL(MAT_UNKNOWN)) { pMobIndex->material = MATERIAL(material_lookup_name("flesh")); count++; } } } char_printf(ch, "Mobs changed: {c%d{x.\n", count); return count; } /* shopkeepers profit */ int zz_mob_shopkeeper_profit (CHAR_DATA *ch) { int count = 0; int vnum = 0; MOB_INDEX_DATA *pMobIndex; for (vnum = 0; vnum <= 120000; vnum++) { if ((pMobIndex = get_mob_index(vnum)) != NULL) { if (pMobIndex->pShop) { if (pMobIndex->vnum >= 17600 && pMobIndex->vnum < 17700) pMobIndex->pShop->profit_sell = number_range(75, 90); else pMobIndex->pShop->profit_sell = number_range(10, 20); count++; } } } char_printf(ch, "Shopkeeper profit changed: {c%d{x.\n", count); return count; } /* * if the obj has a desc, and it matches an existing material, * assign the material to that type, and remove the description. */ int zz_obj_material_descr (CHAR_DATA *ch) { extern int top_obj_index; OBJ_INDEX_DATA *pObjIndex; int nMatch = 0; int vnum; int count = 0; for (vnum = 0; nMatch < top_obj_index; vnum++) if ((pObjIndex = get_obj_index(vnum)) != NULL) { nMatch++; } char_printf(ch, "Items changed: {c%d{x.\n", count); return count; }