/**************************************************************************/
// act_wiz2.cpp - more immortal commands
/***************************************************************************
* The Dawn of Time v1.69r (c)1997-2004 Michael Garratt *
* >> A number of people have contributed to the Dawn codebase, with the *
* majority of code written by Michael Garratt - www.dawnoftime.org *
* >> To use this source code, you must fully comply with all the licenses *
* in licenses.txt... In particular, you may not remove this copyright *
* notice. *
***************************************************************************
* >> Original Diku Mud copyright (c)1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, & Katja Nyboe. *
* >> Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* >> ROM 2.4 is copyright 1993-1995 Russ Taylor and 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) *
* >> Oblivion 1.2 is copyright 1996 Wes Wagner *
**************************************************************************/
#include "include.h" // dawn standard includes
#include "olc.h"
#include "nanny.h"
#include "ictime.h"
#include "channels.h"
#define COLUMNS 8
/* command procedures needed */
DECLARE_DO_FUN(do_rstat );
DECLARE_DO_FUN(do_mstat );
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_resetlu );
DECLARE_DO_FUN(do_mfind );
DECLARE_DO_FUN(do_ofind );
DECLARE_DO_FUN(do_slookup );
DECLARE_DO_FUN(do_mload );
DECLARE_DO_FUN(do_oload );
DECLARE_DO_FUN(do_force );
DECLARE_DO_FUN(do_forcetick );
DECLARE_DO_FUN(do_quit );
DECLARE_DO_FUN(do_save );
DECLARE_DO_FUN(do_look );
DECLARE_DO_FUN(do_stand );
DECLARE_DO_FUN(do_count );
GAMBLE_FUN *gamble_lookup( const char *name );
void affectprofile_list( char_data *ch );
char *get_weapontype(OBJ_DATA *obj); // prototype - handler.c
void laston_save (char_data *); // laston.c
void dismount args( ( char_data *) ); // act_move.c
void send_zmudmap_to_char(char_data *ch);
PFILE_TYPE find_pfiletype(const char *name);
void set_char_magic_bits(char_data * ch);
void laston_login(char_data *ch);
void laston_update_char(char_data *ch); // laston.cpp
/*
* Local functions.
*/
ROOM_INDEX_DATA * find_location args( ( char_data *ch, char *arg ) );
void ostat_show_to_char( char_data *ch, OBJ_DATA *obj);
/**************************************************************************/
void do_slookup( char_data *ch, char *argument )
{
char arg[MIL];
int sn;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
ch->println( "Lookup which skill or spell?" );
return;
}
if ( !str_cmp( arg, "all" ) )
{
for ( sn = 0; sn < MAX_SKILL; sn++ )
{
if ( skill_table[sn].name == NULL )
break;
ch->printf("Sn: %3d Slot: %3d Skill/spell: '%s'\r\n",
sn, skill_table[sn].slot, skill_table[sn].name );
}
}
else
{
if ( ( sn = skill_lookup( arg ) ) < 0 )
{
ch->println( "No such skill or spell." );
return;
}
ch->printf("Sn: %3d Slot: %3d Skill/spell: '%s'\r\n",
sn, skill_table[sn].slot, skill_table[sn].name );
}
return;
}
/**************************************************************************/
/* RT set replaces sset, mset, oset, and rset */
void do_set( char_data *ch, char *argument )
{
char arg[MIL];
argument = one_argument(argument,arg);
if (arg[0] == '\0')
{
ch->println( "Syntax:" );
ch->println( " set char <name> <field> <value>" );
ch->println( " set mob <name> <field> <value>" );
ch->println( " set obj <name> <field> <value>" );
ch->println( " set room <room> <field> <value>" );
ch->println( " set skill <name> <spell or skill> <value>" );
ch->println( " set skillresetLU <name> <spell or skill> <value>" );
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,"skillresetLU"))
{
do_resetlu( 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,"");
}
/**************************************************************************/
// resets the last used counter on players
void do_resetlu( char_data *ch, char *argument )
{
char arg1 [MIL];
char arg2 [MIL];
char arg3 [MIL];
char_data *victim;
int lower, upper;
int sn;
bool fAll, fRealms, fLanguages, fSpells;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " set skillresetLU <name> <spell or skill>" );
ch->println( " set skillresetLU <name> all" );
ch->println( " set skillresetLU <name> realms" );
ch->println( " set skillresetLU <name> languages" );
ch->println( " set skillresetLU <name> spells" );
ch->println( " (use the name of the skill, not the number)" );
ch->println( " This command resets the last used time on the skill(s)" );
return;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
fAll = !str_cmp( arg2, "all" );
fRealms = !str_cmp( arg2, "realms" );
fLanguages = !str_cmp( arg2, "languages" );
fSpells = !str_cmp( arg2, "spells" );
sn = 0;
if ( !(fAll || fRealms || fLanguages || fSpells)
&& ( sn = skill_lookup( arg2 ) ) < 0 )
{
ch->println( "No such skill, spell or set skill group exists." );
ch->println( "Groups are: all, realms (includes spheres etc), languages and spells." );
return;
}
if ( fAll )
{
ch->println( "Resetting lastused on all skills, realms, spheres and spells on char." );
for ( sn = 0; sn < MAX_SKILL; sn++ )
{
if ( skill_table[sn].name != NULL )
victim->pcdata->last_used[sn] = 0;
}
}
else if ( fRealms )
{
ch->println( "Resetting lastused on all realms and spheres on char." );
lower= skill_lookup( "abjuration" );
upper= skill_lookup( "time" );
for ( sn = lower; sn <= upper; sn++ )
{
if ( skill_table[sn].name != NULL )
victim->pcdata->last_used[sn] = 0;
}
}
else if ( fLanguages )
{
ch->println( "Resetting lastused on all languages on char." );
lower= skill_lookup( "human" );
upper= skill_lookup( "kobold" );
for ( sn = lower; sn <= upper; sn++ )
{
if ( skill_table[sn].name != NULL )
victim->pcdata->last_used[sn] = 0;
}
}
else if ( fSpells )
{
lower= skill_lookup( "acid blast" );
upper= skill_lookup( "lightning breath" );
ch->println( "Reseting lastused on all spells on char." );
for ( sn = lower; sn <= upper; sn++ )
{
if ( skill_table[sn].name != NULL )
victim->pcdata->last_used[sn] = 0;
}
}
{
victim->pcdata->last_used[sn] = 0;
}
ch->println( "Done." );
return;
}
/**************************************************************************/
extern language_data *languages;
/**************************************************************************/
void do_sset( char_data *ch, char *argument )
{
char arg1 [MIL];
char arg2 [MIL];
char arg3 [MIL];
char_data *victim;
int value, lower, upper;
int sn;
bool fAll, fRealms, fLanguages, fSpells;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
if ( arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " set skill <name> <spell or skill> <value>" );
ch->println( " set skill <name> all <value>" );
ch->println( " set skill <name> realms <value>" );
ch->println( " set skill <name> languages <value>" );
ch->println( " set skill <name> spells <value>" );
ch->println( " (use the name of the skill, not the number)" );
return;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
fAll = !str_cmp( arg2, "all" );
fRealms = !str_cmp( arg2, "realms" );
fLanguages = !str_cmp( arg2, "languages" );
fSpells = !str_cmp( arg2, "spells" );
sn = 0;
if ( !(fAll || fRealms || fLanguages || fSpells)
&& ( sn = skill_lookup( arg2 ) ) < 0 )
{
ch->println( "No such skill, spell or set skill group exists." );
ch->println( "Groups are: all, realms (includes spheres etc), languages and spells." );
return;
}
if (!str_cmp("grant", arg3))
{
value=101;
}
else
{
/*
* Snarf the value.
*/
if ( !is_number( arg3 ) )
{
ch->println( "Value must be numeric." );
return;
}
value = atoi( arg3 );
if ( value < 0 || value > 100 )
{
ch->println( "Value range is 0 to 100." );
ch->println( "Or use the word 'grant' to give the skill/spell for out of class reasons." );
return;
}
}
if ( fAll )
{
ch->println( "Setting all skills, realms, spheres and spells on char." );
for ( sn = 0; sn < MAX_SKILL; sn++ )
{
if ( skill_table[sn].name != NULL )
victim->pcdata->learned[sn] = value;
}
}
else if ( fRealms )
{
ch->println( "Setting all realms and spheres on char." );
lower= skill_lookup( "abjuration" );
upper= skill_lookup( "time" );
for ( sn = lower; sn <= upper; sn++ )
{
if ( skill_table[sn].name != NULL )
victim->pcdata->learned[sn] = value;
}
}
else if ( fLanguages )
{
ch->println( "Setting all languages on char." );
for(language_data *language=languages; language; language=language->next){
if(language->gsn<0
|| language->gsn>MAX_SKILL
|| IS_NULLSTR(skill_table[language->gsn].name))
{
continue;
}
if(IS_SET(language->flags, LANGFLAG_SYSTEM_LANGUAGE)){
ch->printlnf("Skipping system language %s.",
skill_table[language->gsn].name);
}else{
ch->printlnf("%s set from %d to %d.",
skill_table[language->gsn].name,
victim->pcdata->learned[language->gsn], value);
victim->pcdata->learned[language->gsn] = value;
}
}
}
else if ( fSpells )
{
lower= FIRST_SPELL;
upper= LAST_SPELL;
ch->println( "Setting all spells on char." );
for ( sn = lower; sn <= upper; sn++ )
{
if ( skill_table[sn].name != NULL )
victim->pcdata->learned[sn] = value;
}
}else {
if(victim->pcdata->learned[sn] == value){
ch->printf("No change in skill on %s.\r\n", victim->name);
}else{
ch->printf("Skill on %s changed from %d to %d.\r\n",
victim->name, victim->pcdata->learned[sn], value);
victim->pcdata->learned[sn] = value;
}
}
ch->printf("Done.\r\n");
return;
}
/**************************************************************************/
void do_mset( char_data *ch, char *argument )
{
char arg1 [MIL];
char arg2 [MIL];
char arg3 [MIL];
char_data *victim;
int value;
smash_tilde( argument );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
strcpy( arg3, argument );
if ( arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " set char <name> <field> <value>" );
ch->println( " Field being one of:" );
ch->println( " sex class level temple" );
ch->println( " race group gold silver maxhp hp maxmana mana maxmove move prac" );
ch->println( " train thirst hunger drunk full tired bleeding security" );
ch->println( " alliance tendency rps wildness will damroll" );
ch->println( " mkills mdefeats recall age worshiptime title immtitle" );
ch->println( " autoafkafter");
if (IS_TRUSTED(ch,MAX_LEVEL-1))
{
ch->println( " dip RRXP RRPS newimmortal council sublevel subprac subtrain nopkill" );
ch->println( " immrole accurate_laston_times highimmortal_laston_access" );
}
if (IS_TRUSTED(ch,MAX_LEVEL))
{
ch->println( " xp cp dip votes cannochannel" );
}
ch->println( " PKILL RELATED: pkkills pkdefeats pksafe pkool pknorecall karns kcountdown" );
ch->println( " (to let someone quit, set pknorecall and pknoquit to 0)" );
ch->println( " ATTRIBUTES:" );
ch->println( " st qu pr em in co ag sd me re" );
ch->println( " pst pqu ppr pem pin pco pag psd pme pre" );
return;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if(!IS_ADMIN(ch) && get_trust(ch) <= get_trust(victim) && victim!=ch)
{
ch->println( "Maybe that wasn't a good idea..." );
victim->printlnf( "%s just tried to set '%s %s' on you.",
PERS(ch, victim), arg2, argument);
return;
}
// clear zones for mobs
victim->zone = NULL;
// Snarf the value (which need not be numeric).
value = is_number( arg3 ) ? atoi( arg3 ) : -1;
// Do the setting
if ( !str_prefix( arg2, "pkkills" ) || !str_prefix( arg2, "pkills" ) )
{
if ( value < 0 )
{
ch->println( "*bonk self* - You can't have -ve pkills!" );
return;
}
ch->printf("Pkkills changed from %d to %d on %s(%s)\r\n",
victim->pkkills, value, victim->short_descr, victim->name);
victim->pkkills = value;
return;
}
if ( !str_prefix( arg2, "pkdefeats" ) )
{
if ( value < 0 )
{
ch->println( "*bonk self* - You can't have -ve pkdefeats!" );
return;
}
ch->printf("Pkdefeats changed from %d to %d on %s(%s)\r\n",
victim->pkdefeats, value, victim->short_descr, victim->name);
victim->pkdefeats = value;
return;
}
if ( !str_prefix( arg2, "pksafe" ) )
{
if ( value < 0 )
{
ch->println( "*bonk self* - You can't safe for -ve hours!" );
return;
}
if ( value > 100 )
{
ch->println( "Try a lower value." );
return;
}
ch->printlnf("Pksafe change from %d to %d on %s(%s)",
victim->pksafe, value, victim->short_descr, victim->name);
victim->pksafe = value;
return;
}
if ( !str_prefix( arg2, "pkool" ) )
{
if ( value < 0 )
{
ch->println( "*bonk self* - You have -ve hours!" );
return;
}
if ( value > 15000 )
{
ch->println( "That is getting a bit high dont you think?" );
return;
}
ch->printlnf("Pkools changed from %d to %d on %s(%s)",
victim->pkool, value, victim->short_descr, victim->name);
victim->pkool = value;
return;
}
if ( !str_prefix( arg2, "pknorecall" ) )
{
if ( value < 0 )
{
ch->println( "*bonk self* - You have -ve hours!" );
return;
}
if ( value > 50 )
{
ch->println( "That is getting a bit high dont you think? (try 50)" );
return;
}
ch->printlnf("Pknorecall changed from %d to %d on %s(%s)",
victim->pknorecall, value, victim->short_descr, victim->name);
victim->pknorecall = value;
return;
}
if ( !str_prefix( arg2, "bleeding" ) )
{
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
if ( value < -1 || value > 100 )
{
ch->println( "Bleeding range is -1 to 100." );
return;
}
ch->printf("Bleeding changed from %d to %d on %s(%s)\r\n",
victim->bleeding, value, victim->short_descr, victim->name);
victim->bleeding = value;
return;
}
if ( !str_prefix( arg2, "pknoquit" ) )
{
if ( value < 0 )
{
ch->println( "*bonk self* - You have -ve hours!" );
return;
}
if ( value > 50 )
{
ch->println( "That is getting a bit high dont you think? (try 50)" );
return;
}
ch->printlnf("Pknoquit changed from %d to %d on %s(%s)",
victim->pknoquit, value, victim->short_descr, victim->name);
victim->pknoquit = value;
return;
}
if(!IS_NPC(victim)){
if ( !str_prefix( arg2, "immtitle" ) ){
if(get_trust(victim) >= get_trust(ch)){
ch->println("I am sure they can manage their own immtitle.");
return;
}
ch->printlnfbw("Immtitle changed from '%s' to '%s' on %s.",
victim->pcdata->immtitle,
PERS(victim, ch),
arg3);
replace_string(victim->pcdata->immtitle, arg3);
return;
}
if ( !str_prefix( arg2, "title" ) ){
if(get_trust(victim) >= get_trust(ch)){
ch->println("I am sure they can manage their own title.");
return;
}
ch->printlnfbw("Title changed from '%s' to '%s' on %s.",
victim->pcdata->title,
PERS(victim, ch),
arg3);
replace_string(victim->pcdata->title, arg3);
return;
}
}
if ( !str_prefix( arg2, "karns" ) )
{
if (IS_NPC(victim))
{
ch->println( "You can't set this on NPCs!" );
return;
}
if ( value < 0 || value > 5 )
{
ch->println( "*bonk self* - Karns must be in the range of 0 to 5." );
return;
}
ch->printf("Karns changed from %d to %d on %s(%s)\r\n",
victim->pcdata->karns, value, victim->short_descr, victim->name);
victim->pcdata->karns= value;
return;
}
if ( !str_prefix( arg2, "kcountdown" ) )
{
if (IS_NPC(victim))
{
ch->println( "You can't set this on NPCs!" );
return;
}
if ( value < 1 )
{
ch->println( "*bonk self* - You can't be safe for less than one hour." );
return;
}
if ( value > 20000 )
{
ch->println( "Try a lower value." );
return;
}
ch->printf("Karn countdown changed from %d to %d on %s(%s)\r\n",
victim->pcdata->next_karn_countdown, value, victim->short_descr, victim->name);
victim->pcdata->next_karn_countdown = value;
return;
}
// Addition for worshipTimer
if ( !str_prefix( arg2, "worshiptime" ))
{
if (IS_NPC(victim))
{
ch->println("You can't set this on NPCs!" );
return;
}
if (value < 0 || value > 1000000)
{
ch->println( "Valid Range for `#`=Cworshiptime`^ is (`W0`^ - `W1000000`^)" );
return;
}
ch->printlnf( "Worship Time changed from `#`Y%d`^ to `Y%d`^ on %s(`W%s`^).",
(int)(current_time - victim->pcdata->worship_time) , value, victim->short_descr, victim->name);
victim->pcdata->worship_time = (current_time - value);
return;
}
if ( !str_prefix( arg2, "damroll" ))
{
if (!IS_NPC(victim))
{
ch->println( "You can't set this on players!" );
return;
}
if ( value < -1000 || value > 5000 )
{
ch->println( "Between -1000 and 5000 please!" );
return;
}
ch->printlnf("Damroll changed from %d to %d on %s(%s)",
victim->damroll, value, victim->short_descr, victim->name);
victim->damroll=value;
ch->println( "DO NOT FORGET TO PURGE THIS MOB IF YOU DONT INTEND FOR IT TO BE LIKE THIS PERMANENTLY!!!" );
};
if ( !str_prefix( arg2, "st" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_ST] = value;
reset_char(victim);
ch->printlnf("Perm ST set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "qu" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_QU] = value;
reset_char(victim);
ch->printlnf("Perm QU set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "pr" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_PR] = value;
reset_char(victim);
ch->printlnf("Perm PR set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "em" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_EM] = value;
reset_char(victim);
ch->printlnf("Perm EM set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "in" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_IN] = value;
reset_char(victim);
ch->printlnf("Perm IN set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "co" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_CO] = value;
reset_char(victim);
ch->printlnf("Perm CO set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "ag" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_AG] = value;
reset_char(victim);
ch->printlnf("Perm AG set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "sd" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_SD] = value;
reset_char(victim);
ch->printlnf("Perm SD set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "me" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_ME] = value;
reset_char(victim);
ch->printlnf("Perm ME set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "re" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
victim->perm_stats[STAT_RE] = value;
reset_char(victim);
ch->printlnf("Perm RE set to %d on %s(%s)",
value, victim->short_descr, victim->name);
return;
}
if ( !str_prefix( arg2, "pst" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential ST changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_ST], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_ST] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "pqu" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential QU changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_QU], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_QU] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "ppr" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential PR changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_PR], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_PR] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "pem" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential EM changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_EM], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_EM] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "pin" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential IN changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_IN], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_IN] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "pco" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential CO changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_CO], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_CO] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "pag" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential AG changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_AG], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_AG] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "psd" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential SD changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_SD], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_SD] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "pme" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential ME changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_ME], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_ME] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "pre" ) )
{
if ( value < 1 || value > 101 )
{
ch->println( "Stat range is 1 to 101." );
return;
}
ch->printlnf("Potential RE changed from %d to %d on %s(%s)",
victim->potential_stats[STAT_RE], value, victim->short_descr, victim->name);
victim->potential_stats[STAT_RE] = value;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "sex" ) )
{
if ( value < 0 || value > 2 )
{
ch->println( "Sex range is 0 to 2." );
ch->println( "0 = It, 1 = Male, 2 = Female." );
return;
}
ch->printlnf("Sex changed from %d to %d on %s.",
victim->sex, value, PERS(victim, ch));
ch->println( "0 = It, 1 = Male, 2 = Female." );
victim->sex = value;
if (!IS_NPC(victim)){
victim->pcdata->true_sex = value;
}
return;
}
if ( !str_prefix( arg2, "mkills" ))
{
if ( IS_NPC( victim )) {
ch->println("Not on NPC's." );
return;
}
ch->printlnf("MKills changed from %d to %d on %s(%s)",
victim->pcdata->mkills, value,
victim->short_descr, victim->name );
victim->pcdata->mkills = value;
return;
}
if ( !str_prefix( arg2, "mdefeats" ))
{
if ( IS_NPC( victim )) {
ch->println("Not on NPC's." );
return;
}
ch->printlnf("MDefeats changed from %d to %d on %s(%s)",
victim->pcdata->mdefeats, value,
victim->short_descr, victim->name );
victim->pcdata->mdefeats = value;
return;
}
if ( !str_prefix( arg2, "autoafkafter" ) )
{
if(IS_NPC(victim)){
ch->println("autoafkafter can be set on players only.");
return;
}
ch->printlnf("autoafkafter changed on %s from %d to %d",
PERS(victim, ch),
victim->pcdata->autoafkafter,
value);
victim->pcdata->autoafkafter=value;
return;
}
if ( !str_prefix( arg2, "age" ))
{
if ( value < 0 )
{
ch->println( "Age must be 1 or greater (if 0 it clears their age)." );
return;
}
if ( value > 200 )
{
ch->println( "Age must be less than 200." );
return;
}
if (IS_NPC(victim))
{
ch->println( "You can't set age on NPCs!" );
return;
}
if(value==0){
victim->pcdata->birthdate=0;
ch->printlnf("Age cleared on %s", PERS(victim,ch));
}else{
victim->pcdata->birthdate=current_time-(value *ICTIME_IRLSECS_PER_YEAR);
ch->printlnf("Age set on %s to %d.", PERS(victim,ch), value);
}
return;
}
if ( !str_prefix( arg2, "recall" ))
{
if ( value < 0 )
{
ch->println( "Recall room must be 0 or greater." );
return;
}
if ( value != 0 )
{
if ( !get_room_index( value ))
{
ch->println( "That room doesn't exist." );
return;
}
}
ch->printlnf("Recall room changed from %d to %d on %s(%s)",
victim->recall_room, value, victim->short_descr, victim->name);
victim->recall_room = value;
return;
}
if ( !str_prefix( arg2, "alliance" ) )
{
if ( value < -3 || value > 3 )
{
ch->println( "Alliance range is -3 to 3." );
return;
}
ch->printlnf("Alliance changed from %d to %d on %s(%s)",
victim->alliance , value, victim->short_descr, victim->name);
victim->alliance = value;
return;
}
if ( !str_prefix( arg2, "tendency" ) )
{
if ( value < -3 || value > 3 )
{
ch->println( "Tendency range is -3 to 3." );
return;
}
ch->printlnf("Tendency changed from %d to %d on %s(%s)",
victim->tendency , value, victim->short_descr, victim->name);
victim->tendency = value;
return;
}
if ( !str_prefix( arg2, "class" ) )
{
int clss;
if (IS_NPC(victim))
{
ch->println( "Mobiles have no class. :)" );
return;
}
clss = class_lookup(arg3);
if ( clss == -1 )
{
char buf[MSL];
strcpy( buf, "Possible classes are: " );
for ( clss = 0; class_table[clss].name; clss++ )
{
if ( clss > 0 )
strcat( buf, " " );
strcat( buf, class_table[clss].name );
}
ch->println(buf);
return;
}
ch->printlnf("Class changed from %s to %s on %s(%s)",
class_table[victim->clss].name, class_table[clss].name, victim->short_descr, victim->name);
victim->clss = clss;
reset_char(victim);
return;
}
if ( !str_prefix( arg2, "level" ) )
{
if ( !IS_NPC(victim) )
{
ch->println( "Not on PC's." );
return;
}
if ( value < 0 || value > 100 )
{
ch->println( "Level range for mobs is 0 to 100." );
return;
}
ch->printlnf("Level changed from %d to %d on %s(%s)",
victim->level, value, victim->short_descr, victim->name);
victim->level = value;
return;
}
if ( !str_prefix( arg2, "wildness" ) )
{
if ( !IS_NPC(victim) )
{
ch->println( "Not on players." );
return;
}
if ( value < 0 || value > 600 )
{
ch->println( "Level range for wildness on mobs is 0 to 600." );
return;
}
ch->printlnf("Wildness changed from %d to %d on %s(%s)",
victim->wildness , value, victim->short_descr, victim->name);
victim->wildness = value;
return;
}
if ( !str_prefix( arg2, "will" ) )
{
if ( !IS_NPC(victim) )
{
ch->println( "Not on players." );
return;
}
if ( value < 0 || value > 600 )
{
ch->println( "Level range for will on mobs is 0 to 600." );
return;
}
ch->printlnf("Will changed from %d to %d on %s(%s)",
victim->will , value, victim->short_descr, victim->name);
victim->will = value;
return;
}
if ( !str_prefix( arg2, "gold" ) )
{
ch->printlnf("`YGold`x changed from %ld to %d on %s(%s)",
victim->gold, value, victim->short_descr, victim->name);
victim->gold = value;
return;
}
if ( !str_prefix(arg2, "silver" ) )
{
ch->printlnf("`CSilver`x changed from %ld to %d on %s(%s)",
victim->silver, value, victim->short_descr, victim->name);
victim->silver = value;
return;
}
if ( !str_prefix(arg2, "fame" ) )
{
ch->printlnf("`MFame`x changed from %ld to %d on %s(%s)",
victim->pcdata->fame, value, victim->short_descr, victim->name);
victim->pcdata->fame = value;
return;
}
if ( !str_prefix(arg2, "mps" ) )
{
ch->printlnf("`MMilitary Points`x changed from %ld to %d on %s(%s)",
victim->pcdata->military_points, value, victim->short_descr, victim->name);
victim->pcdata->military_points = value;
return;
}
if ( !str_prefix(arg2, "clout" ) )
{
ch->printlnf("`MClout`x changed from %ld to %d on %s(%s)",
victim->pcdata->clout, value, victim->short_descr, victim->name);
victim->pcdata->clout = value;
return;
}
if ( !str_prefix(arg2, "divinity" ) )
{
ch->printlnf("`MDivinity`x changed from %ld to %d on %s(%s)",
victim->pcdata->divinity, value, victim->short_descr, victim->name);
victim->pcdata->divinity = value;
return;
}
if ( !str_prefix( arg2, "bank" ) )
{
ch->printlnf("`GBank`x changed from %ld to %d on %s(%s)",
victim->bank, value, victim->short_descr, victim->name);
victim->bank = value;
return;
}
if ( !str_prefix( arg2, "hp" ) )
{
if ( value < -10 || value > 30000 )
{
ch->println( "Hp range is -10 to 30,000 hit points." );
return;
}
ch->printlnf("Hitpoints changed from %d to %d on %s(%s)",
victim->hit, value, victim->short_descr, victim->name);
victim->hit = value;
return;
}
if ( !str_prefix( arg2, "maxhp" ) )
{
if ( value < -10 || value > 30000 )
{
ch->println( "Maxhp range is -10 to 30,000 hit points." );
return;
}
ch->printlnf("Maxhitpoints changed from %d to %d on %s(%s)",
victim->max_hit, value, victim->short_descr, victim->name);
victim->max_hit = value;
if (!IS_NPC(victim)){
victim->pcdata->perm_hit = value;
}
return;
}
if ( !str_prefix( arg2, "mana" ) )
{
if ( value < 0 || value > 30000 )
{
ch->println( "Mana range is 0 to 30,000 mana points." );
return;
}
ch->printlnf("Mana changed from %d to %d on %s(%s)",
victim->mana , value, victim->short_descr, victim->name);
victim->mana = value;
return;
}
if ( !str_prefix( arg2, "maxmana" ) )
{
if ( value < 0 || value > 30000 )
{
ch->println( "MaxMana range is 0 to 30,000 mana points." );
return;
}
ch->printlnf("MaxMana changed from %d to %d on %s(%s)",
victim->max_mana , value, victim->short_descr, victim->name);
victim->max_mana = value;
if (!IS_NPC(victim))
victim->pcdata->perm_mana = value;
return;
}
if ( !str_prefix( arg2, "move" ) )
{
if ( value < 0 || value > 30000 )
{
ch->println( "Move range is 0 to 30,000 move points." );
return;
}
ch->printlnf("Movement points changed from %d to %d on %s(%s) (max on players)",
victim->move , value, victim->short_descr, victim->name);
victim->move = value;
return;
}
if ( !str_prefix( arg2, "maxmove" ) )
{
if ( value < 0 || value > 30000 )
{
ch->println( "MaxMove range is 0 to 30,000 move points." );
return;
}
ch->printlnf("MaxMovement points changed from %d to %d on %s(%s) (max on players)",
victim->max_move , value, victim->short_descr, victim->name);
victim->max_move = value;
if (!IS_NPC(victim))
victim->pcdata->perm_move = value;
return;
}
if ( !str_prefix( arg2, "practice" ) )
{
if ( value < -20 || value > 250 )
{
ch->println( "Practice range is -20 to 250 sessions." );
return;
}
ch->printlnf("Practices changed from %d to %d on %s(%s)",
victim->practice , value, victim->short_descr, victim->name);
victim->practice = value;
return;
}
if ( !str_prefix( arg2, "train" ))
{
if (value < -20 || value > 100 )
{
ch->println( "Training session range is -20 to 100 sessions." );
return;
}
ch->printlnf("Trains changed from %d to %d on %s(%s)",
victim->train, value, victim->short_descr, victim->name);
victim->train = value;
return;
}
if ( !str_prefix( arg2, "temple" ))
{
if (get_room_index(value)==NULL)
{
ch->println( "That room does not exist." );
return;
}
ch->printlnf("Temple changed from %d to %d on %s(%s)",
victim->temple , value, victim->short_descr, victim->name);
victim->temple = value;
return;
}
if ( !str_prefix( arg2, "thirst" ) )
{
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
if ( value < -1 || value > 100 )
{
ch->println( "Thirst range is -1 to 100." );
return;
}
ch->printlnf("Thirst changed from %d to %d on %s(%s)",
victim->pcdata->condition[COND_THIRST], value, victim->short_descr, victim->name);
victim->pcdata->condition[COND_THIRST] = value;
return;
}
if ( !str_prefix( arg2, "drunk" ) )
{
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
if ( value < -1 || value > 100 )
{
ch->println( "Drunk range is -1 to 100." );
return;
}
ch->printlnf("Drunk changed from %d to %d on %s(%s)",
victim->pcdata->condition[COND_DRUNK], value, victim->short_descr, victim->name);
victim->pcdata->condition[COND_DRUNK] = value;
return;
}
if ( !str_prefix( arg2, "full" ) )
{
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
if ( value < -1 || value > 100 )
{
ch->println( "Full range is -1 to 100." );
return;
}
ch->printlnf("Full changed from %d to %d on %s(%s)",
victim->pcdata->condition[COND_FULL], value, victim->short_descr, victim->name);
victim->pcdata->condition[COND_FULL] = value;
return;
}
if ( !str_prefix( arg2, "hunger" ) )
{
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
if ( value < -1 || value > 100 )
{
ch->println( "Full range is -1 to 100." );
return;
}
ch->printlnf("Hunger changed from %d to %d on %s(%s)",
victim->pcdata->condition[COND_HUNGER], value, victim->short_descr, victim->name);
victim->pcdata->condition[COND_HUNGER] = value;
return;
}
if ( !str_prefix( arg2, "tired" ) )
{
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
if ( value < -1 || value > 80 )
{
ch->println( "Full range is -1 to 80." );
ch->println( "-1 means never get tired, 0 = just woken up, 16 = you feel tired." );
ch->println( "30-40 will collapse, 80 pretty much means instant sleep the next tick." );
return;
}
ch->printlnf("Tired changed from %d to %d on %s(%s)",
victim->pcdata->tired, value, victim->short_descr, victim->name);
victim->pcdata->tired = value;
return;
}
if ( !str_prefix( arg2, "rps" ) )
{
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
if ( value < -10000 || value > 200000 )
{
ch->println( "Full range is -10000 to 200000." );
return;
}
ch->printlnf("RPS changed from %ld to %d on %s(%s)",
victim->pcdata->rp_points, value, victim->short_descr, victim->name);
victim->pcdata->rp_points = value;
return;
}
if (!str_prefix( arg2, "race" ) )
{
int race;
race = race_lookup(arg3);
if ( race == -1)
{
ch->printlnf( "'%s' is not a valid race.", arg3 );
return;
}
if(!IS_NPC(victim) && !race_table[race]->pc_race())
{
ch->printlnf( "%s is not a valid player race.", race_table[race]->name );
return;
}
ch->printlnf("Race changed from %s to %s on %s(%s)",
race_table[victim->race]->name,
race_table[race]->name, victim->short_descr, victim->name);
victim->race = race;
reset_char(victim); // recalc the changes
return;
}
// Council
if ( !str_prefix( arg2, "council" ))
{
ch->println( "Use lastoncouncil" );
return;
}
if ( !str_prefix( arg2, "security" ) ) // OLC security
{
if ( IS_NPC( victim ) )
{
ch->println( "Not on NPC's." );
return;
}
if (value<0 || value>9)
{
ch->println( "The olc security must be between 0 and 9." );
return;
}
if ( IS_TRUSTED(ch, MAX_LEVEL) || (value <= ch->pcdata->security && value >= 0) ){
ch->printlnf("OLC security changed from %d to %d on %s(%s)",
victim->pcdata->security, value, victim->short_descr, victim->name);
victim->pcdata->security = value;
REMOVE_CONFIG2(victim, CONFIG2_READ_BUILDER_LEGAL);
// move the pfile if required
{
PFILE_TYPE pt=get_pfiletype(victim);
if(victim->pcdata->pfiletype!=pt && pt!=PFILE_NONE){
rename(pfilename(victim->name,victim->pcdata->pfiletype),
pfilename(victim->name,pt)); // move the file
}
victim->pcdata->pfiletype=pt;
}
laston_update_char(victim);
}else{
if ( ch->pcdata->security != 0 ){
ch->printlnf("Valid olc security is 0-%d.", ch->pcdata->security );
}else{
ch->println( "Valid olc security is 0 only." );
}
return;
}
return;
}
if (!str_prefix(arg2,"group"))
{
if (!IS_NPC(victim))
{
ch->println( "Only on NPCs." );
return;
}
victim->group = value;
return;
}
// stuff set on players only by max_level-1 and higher
if(IS_TRUSTED(ch,MAX_LEVEL-1) && !IS_NPC(victim))
{
if ( !str_cmp( arg2, "dip" ) && IS_NOBLE(ch))
{
if ( value < 0 || value > 50 )
{
ch->println( "Diplomacy value must be between 0 and 50." );
return;
}
victim->pcdata->diplomacy= value;
ch->printlnf("Diplomacy set to %d on %s.", value, victim->name);
return;
}
// sublevel related stuff
if ( !str_cmp( arg2, "sublevel" ) )
{
if ( value < 0 || value > 20 )
{
ch->println( "Sublevel must be between 0 and 20" );
return;
}
ch->printlnf("Sublevel changed from %d to %d on %s.",
victim->pcdata->sublevel, value, victim->name);
victim->pcdata->sublevel= value;
return;
}
if ( !str_cmp( arg2, "subprac" ) )
{
if ( value < 0 || value > 20 )
{
ch->println( "Subprac must be between 0 and 20" );
return;
}
ch->printlnf("Subprac changed from %d to %d on %s.",
victim->pcdata->sublevel_pracs, value, victim->name);
victim->pcdata->sublevel_pracs= value;
return;
}
if ( !str_cmp( arg2, "subtrain" ) )
{
if ( value < 0 || value > 20 )
{
ch->println( "Subtrain must be between 0 and 5" );
return;
}
ch->printlnf("Subtrain changed from %d to %d on %s.",
victim->pcdata->sublevel_trains, value, victim->name);
victim->pcdata->sublevel_trains= value;
return;
}
// reduced systems to subtly slow players down
if ( !str_cmp( arg2, "rrps" ) )
{
if ( value < 0 || value > 500 )
{
ch->println( "Reduced RPS percentage must be between 0 and 500, 0 = normal RPS." );
return;
}
ch->printlnf("Reduced RPS percentage changed from %d to %d on %s.",
victim->pcdata->reduce_rps_percent, value, victim->name);
victim->pcdata->reduce_rps_percent= value;
return;
}
if ( !str_cmp( arg2, "rxp" ) )
{
if ( value < 0 || value > 500 )
{
ch->println( "Reduced XP percentage must be between 0 and 500, 0 = normal RPS." );
return;
}
ch->printlnf("Reduced XP percentage changed from %d to %d on %s.",
victim->pcdata->reduce_xp_percent, value, victim->name);
victim->pcdata->reduce_xp_percent= value;
return;
}
if ( !str_cmp( arg2, "nopkill" ) )
{
if(IS_NPC(victim)){
ch->println("nopkill can be set on players only.");
return;
}
if(HAS_CONFIG2(victim, CONFIG2_NOPKILL)){
REMOVE_CONFIG2(victim, CONFIG2_NOPKILL);
ch->printlnf("nopkill status removed on %s", PERS(victim, ch));
}else{
SET_CONFIG2(victim, CONFIG2_NOPKILL);
ch->printlnf("nopkill status set on %s", PERS(victim, ch));
}
return;
}
if ( !str_cmp( arg2, "accurate_laston_times" ) )
{
if(IS_NPC(victim)){
ch->println("accurate_laston_times can be set on players only.");
return;
}
if(HAS_CONFIG2(victim, CONFIG2_ACCURATE_LASTON_TIMES)){
REMOVE_CONFIG2(victim, CONFIG2_ACCURATE_LASTON_TIMES);
ch->printlnf("accurate_laston_times removed on %s by %s", PERS(victim, ch), PERS(ch, ch));
append_datetimestring_to_file( SECURE_FILE,
FORMATF("accurate_laston_times removed on %s by %s", PERS(victim, NULL), PERS(ch, NULL)));
}else{
SET_CONFIG2(victim, CONFIG2_ACCURATE_LASTON_TIMES);
ch->printlnf("accurate_laston_times set on %s by %s", PERS(victim, ch), PERS(ch, ch));
append_datetimestring_to_file( SECURE_FILE,
FORMATF("accurate_laston_times set on %s by %s", PERS(victim, NULL), PERS(ch, NULL)));
}
return;
}
if ( !str_cmp( arg2, "highimmortal_laston_access" ) )
{
if(IS_NPC(victim)){
ch->println("highimmortal_laston_access can be set on players only.");
return;
}
if(HAS_CONFIG2(victim, CONFIG2_HIGHIMMORTAL_LASTON_ACCESS)){
REMOVE_CONFIG2(victim, CONFIG2_HIGHIMMORTAL_LASTON_ACCESS);
ch->printlnf("highimmortal_laston_access removed on %s by %s", PERS(victim, ch), PERS(ch, ch));
append_datetimestring_to_file( SECURE_FILE,
FORMATF("highimmortal_laston_access removed on %s by %s", PERS(victim, NULL), PERS(ch, NULL)));
}else{
SET_CONFIG2(victim, CONFIG2_HIGHIMMORTAL_LASTON_ACCESS);
ch->printlnf("highimmortal_laston_access set on %s by %s", PERS(victim, ch), PERS(ch, ch));
append_datetimestring_to_file( SECURE_FILE,
FORMATF("highimmortal_laston_access set on %s by %s", PERS(victim, NULL), PERS(ch, NULL)));
}
return;
}
if ( !str_cmp( arg2, "newimmortal" ) )
{
int t;
char buf[MIL];
if(!IS_IMMORTAL(victim) || IS_NPC(victim)){
ch->println("on imms only.");
return;
}
for (t=0; t<MAX_STATS; t++){
victim->potential_stats[t] = 100;
victim->perm_stats[t] = 100;
}
victim->pcdata->security = UMAX(6,victim->pcdata->security);
ch->printlnf("Security is now at %d.", victim->pcdata->security);
sprintf(buf, "%s all grant", TRUE_CH(victim)->name);
do_sset( ch, buf);
// turn on their log
{
SET_BIT(victim->act, PLR_LOG);
sprintf( buf, "Player log turned ON by %s", ch->name);
append_playerlog( victim, buf);
ch->printlnf("LOG set on %s.", victim->name);
}
save_char_obj( victim );
reset_char(victim);
ch->printlnf("Immortal character setup completed on %s.", victim->name);
return;
}
if ( !str_cmp( arg2, "immrole" ) )
{
if(!IS_IMMORTAL(victim) || IS_NPC(victim)){
ch->println("roles can be set on imms only.");
return;
}
if(c_str_len(arg3)>12){
ch->println("Warning, only the first 12 visible characters in the immrole are shown in score.");
}
if(IS_NULLSTR(victim->pcdata->imm_role)){
ch->printlnf("Immrole on %s set to '%s`x'",
PERS(victim, ch), arg3);
}else{
ch->printlnf("Immrole on %s changed from '%s`x' to '%s`x'",
PERS(victim, ch), victim->pcdata->imm_role, arg3);
}
replace_string(victim->pcdata->imm_role, arg3);
save_char_obj( victim );
ch->printlnf("Your immrole has been set to '%s`x' by %s",
victim->pcdata->imm_role, PERS(ch, victim));
return;
}
}
// stuff set on players only by max_level or law
if (!IS_NPC(victim) && (IS_TRUSTED(ch,MAX_LEVEL)))
/*|| IS_SET(TRUE_CH(ch)->pcdata->council, COUNCIL_HEADLAW)))*/
{
if ( !str_cmp( arg2, "xp" ) )
{
if ( value < 1 )
{
ch->println( "Experience value must be greater than zero." );
return;
}
ch->printlnf("Experience points changed from %d to %d on %s.",
victim->exp, value, victim->name);
victim->exp= value;
return;
}
}
// stuff set on players only by max_level
if (!IS_NPC(victim) && IS_TRUSTED(ch,MAX_LEVEL))
{
if ( !str_cmp( arg2, "cp" ) )
{
if ( value < 1 || value > 200 )
{
ch->println( "Full creation points range is 1 to 200." );
return;
}
victim->pcdata->points = value;
ch->printlnf("Creation points set to %d on %s.",
value, victim->name);
return;
}
if ( !str_cmp( arg2, "votes" ) )
{
if ( IS_NPC(victim) )
{
ch->println( "Not on NPC's." );
return;
}
if ( value < 0 || value > 50000 )
{
ch->println( "Votes must be between 0 and 50000." );
return;
}
victim->pcdata->dip_points= value;
ch->printlnf("Votes set to %d on %s.", value, victim->name);
return;
}
if ( !str_cmp( arg2, "cannochannel" ) )
{
if (IS_SET(victim->comm, COMM_CANNOCHANNEL))
{
ch->printlnf("CANNOCHANNEL Ability removed from %s",victim->name);
REMOVE_BIT(victim->comm,COMM_CANNOCHANNEL);
}
else
{
SET_BIT(victim->comm,COMM_CANNOCHANNEL);
ch->printlnf("CANNOCHANNEL granted to %s",victim->name);
}
save_char_obj( victim );
return;
}
}
/*
* Generate usage message.
*/
do_mset( ch, "" );
return;
}
/**************************************************************************/
// Kalahn - October 97
void do_oextended( char_data *ch, char *argument )
{
EXTRA_DESCR_DATA *ed, *ed_prev;
OBJ_DATA *obj;
char obj_arg [MIL];
char mode [MIL];
char keyword [MIL];
char arg1 [MIL];
char arg2 [MIL];
char arg3 [MIL];
if (IS_UNSWITCHED_MOB(ch)){
ch->println( "Players only." );
return;
}
if (( !IS_HERO(ch)
&& !IS_IMMORTAL(ch)
&& !IS_RP_SUPPORT(ch)))
{
do_huh( ch, "" );
return;
}
smash_tilde( argument );
argument = one_argument( argument, obj_arg );
argument = one_argument( argument, mode );
argument = one_argument( argument, keyword );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
/****************** HELP ******************/
/* show the help if something isn't right */
if ( obj_arg[0] == '\0' || mode[0] == '\0')
{
ch->println( "Syntax:" );
ch->println( " OEXTENDED <object> <mode> <keyword> [...]" );
ch->println( " mode: add clear copy edit remove rename tag" );
ch->println( " add - adds a new keyword with empty description." );
ch->println( " appendkey - appends keywords to existing keywords" );
ch->println( " clear - clears ALL extended description on an object!" );
ch->println( " copy - copies an extended description from another object." );
ch->println( " edit - puts you into the description editor for keyword." );
ch->println( " remove - removes an extended description." );
ch->println( " rename - renames keyword to new keyword." );
ch->println( " A keyword can be more than one word - use 'x y' syntax." );
ch->println( " (for more help on any of these type 'OEXTENDED <object> <mode>'");
return;
}
// find object we are working on
if ( (obj = get_obj_here(ch, obj_arg)) == NULL )
{
ch->wraplnf("Object '%s' not found in your inventory or the room.", arg1);
return;
}
if ( IS_OBJ_STAT( obj, OBJEXTRA_NO_RESTRING )) {
ch->println( "You cannot set an extended description on that object." );
return;
}
{ // log the usage of the oextended command to 2 files, a global, and a player
char logbuf[MSL];
sprintf (logbuf,"oextnd: %5d: %-13s - '%s'", obj->pIndexData->vnum,
TRUE_CH(ch)->name, argument);
// general log
append_datetimestring_to_file(RESTRING_LOGFILE, logbuf);
// personal playerlog
{
char buffilename[MSL];
if (!IS_UNSWITCHED_MOB(ch))
{
sprintf(buffilename, RESTRING_LOGS_DIR"%.8s.rst",
TRUE_CH(ch)->name);
append_logentry_to_file( ch, buffilename, logbuf);
}
}
}
/****************** ADD ******************/
if (!str_prefix(mode,"add"))
{
// display help if required
if ( keyword[0] == '\0')
{
ch->println( "Syntax:" );
ch->println( " OEXTENDED <object> ADD <keyword>" );
ch->println( " Add an empty keyword to an object.\r\n" ); // extre LF
ch->println( "e.g oextended book add page3" );
ch->println( "or even oextended book add 'page3 three'" );
}
// add the new extended description to the object
ed = new_extra_descr();
ed->keyword = str_dup( keyword );
ed->description = str_dup( " " );
ed->next = obj->extra_descr;
obj->extra_descr = ed;
// mark the object as restrung
obj->restrung=true;
ch->wraplnf("Added the keyword '%s' to '%s'.",
keyword,
obj->name);
return;
}
/****************** COPY ******************/
if (!str_prefix(mode,"copy"))
{
OBJ_DATA *objsrc;
char *pdesc;
// display help if required
if ( keyword[0] == '\0' || arg1[0] == '\0' || arg2[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " OEXTENDED <object> COPY <newkeyword> <objectsrc> <srckeyword>" );
ch->println( " Copies an extended description from another object" );
ch->println( " and names it after the new keyword.\r\n" ); // extra LF
ch->println( "e.g oextended book copy page4 scroll writing" );
ch->println( " This will copy from a scroll the extended description" );
ch->println( " called writing and renaming the keyword to page4." );
}
// find source object of the extended
if ( (objsrc = get_obj_here(ch, arg1)) == NULL )
{
ch->wraplnf("Source of Keyword Object '%s' wasn't found in your "
"inventory or the room.", arg1);
return;
}
// find the keyword on the source object - use either the
// custom or vnum keyword - search for custom first
pdesc = get_extra_descr( arg2, objsrc->extra_descr );
if ( !IS_NULLSTR(pdesc))
{ // extended unique objects extended descriptions
ch->println( "Found matching custom extended on source object - copied." );
}
else // vnums extended descriptions
{
pdesc = get_extra_descr( arg2, objsrc->pIndexData->extra_descr );
if ( !IS_NULLSTR(pdesc))
{
ch->println( "Found matching vnum extended on source object - copied." );
}
else
{
ch->wraplnf("Couldn't find any matching keywords on '%s'.", obj->name);
return;
}
}
// copy the extended description to the target object
ed = new_extra_descr();
ed->keyword = str_dup( keyword );
ed->description = str_dup( pdesc );
ed->next = obj->extra_descr;
obj->extra_descr = ed;
// mark the object as restrung
obj->restrung=true;
return;
}
/****************** CLEAR ******************/
if (!str_prefix(mode,"clear"))
{
// display help if required
if ( keyword[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " OEXTENDED <object> CLEAR ALL");
ch->println( " Clears all customised extended description from an object.\r\n" ); // extra LF
ch->println( "note: object then reverts back to the original vnum extendeds." );
}
// custom extended must already exist on object to be removed
if (!obj->extra_descr)
{
ch->wraplnf("There are no custom extended descriptions "
"on '%s'.", obj->name);
ch->println( "Reminder: you can only clear when there are extendeds to clear." );
return;
}
if (str_cmp("all", keyword))
{
ch->println( "You must type ALL as the keyword to confirm you want to clear all extendeds." );
return;
}
// custom extended exists on this object
for (ed=obj->extra_descr; ed != NULL; ed = ed->next )
{
obj->extra_descr =ed->next;
free_extra_descr(ed); // free the memory
}
// mark the object as restrung
obj->restrung=true;
ch->wraplnf("All custom extendeds have been cleared on '%s'.", obj->name);
return;
}
/****************** EDIT ******************/
if (!str_prefix(mode,"edit"))
{
// display help if required
if ( keyword[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " OEXTENDED <object> EDIT <keyword>" );
ch->println( " Edits the text section of an extended description.\r\n" ); // extra LF
ch->println( "e.g oextended book edit page4" );
ch->println( " This will bring up the description editor with the contents" );
ch->println( " Of the keyword to page4 on the object book." );
ch->println( "Note: you can only edit an existing custom extended, use the" );
ch->println( " copy command if you want to base your extended off another.");
}
// custom extended must already exist on object to be edited
if (!obj->extra_descr)
{
ch->wraplnf("There are no custom extended descriptions on '%s'.", obj->name);
ch->println( "Reminder: you can only edit an existing custom extended, use the" );
ch->println( "copy command first if you want to base your extended off another." );
return;
}
// custom extended exists on this object
for (ed=obj->extra_descr ; ed != NULL; ed = ed->next )
{
if ( is_name( (char *) keyword, ed->keyword ) )
{
// put them into the editor
ch->wraplnf("Keyword Match Found - Editing extended keyword "
"'%s' on '%s'.",ed->keyword, obj->name);
string_append(ch, &ed->description);
// mark the object as restrung
obj->restrung=true;
return;
}
}
ch->wraplnf("Couldn't find any matching keywords on the "
"objects custom extendeds (object '%s').", obj->name);
return;
}
/****************** REMOVE ******************/
if (!str_prefix(mode,"remove"))
{
// display help if required
if ( keyword[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " OEXTENDED <object> REMOVE <keyword>" );
ch->println( " Removes an extended description from an object.\r\n" ); // extra LF
ch->println( "e.g oextended book remove page4" );
ch->println( " This will remove the extended description" );
ch->println( " that is referenced by the keyword page4 from." );
ch->println( " The book object." );
ch->println( "Notes: use rename to remove part of a keyword." );
ch->println( " You can only remove a custom extendeds from an object." );
ch->println( " To get rid of a vnum extended - add a custom extended." );
ch->wrapln("(because vnum extendeds aren't used when you have at "
"least one extended description.");
}
// custom extended must already exist on object to be removed
if (!obj->extra_descr)
{
ch->wraplnf("There are no custom extended descriptions on '%s'.", obj->name);
ch->println( "Reminder: you can only remove an existing custom extended." );
return;
}
// custom extended exists on this object
ed_prev = NULL;
for (ed=obj->extra_descr; ed != NULL; ed = ed->next )
{
if ( is_name( (char *) keyword, ed->keyword ) )
{
// the extended is found
ch->wraplnf("Keyword '%s' found on '%s' - removed.",
ed->keyword, obj->name);
// remove the extended
if (ed_prev){ // we aren't the head in the list
ed_prev->next = ed->next;
}else{
obj->extra_descr =ed->next;
}
free_extra_descr(ed); // free the memory
return;
}
ed_prev = ed;
}
ch->wraplnf("Couldn't find any matching keywords on the "
"custom extendeds on '%s' to remove.", obj->name);
return;
}
/****************** RENAME ******************/
if (!str_prefix(mode,"rename"))
{
// trim the spaces to the right of the newkeyword
while ( !IS_NULLSTR(arg1) && is_space(arg1[str_len(argument)-1]))
{
arg1[str_len(arg1)-1]='\0';
}
// check we have a new keyword left
if(arg1[0] == '\0' )
{
ch->println( "You must put in a replacement keyword." );
ch->println( "use 'x y' format for multiple keys." );
return;
}
// display help if required
if ( keyword[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " OEXTENDED <object> RENAME <oldkeyword> <newkeyword>" );
ch->println( " Renames the custom oldkeyword on an extended description" );
ch->println( " to the newkeyword.\r\n" ); // extra LF
ch->println( "e.g oextended book rename page4 'page3 three'" );
ch->println( " This will rename the extended descriptions called page4" );
ch->println( " to the keyword 'page3 three'." );
ch->println( " For someone to look at the keyword they must type one of the words in it." );
ch->println( "Notes: You can only rename keywords on a custom extended description." );
}
// custom extended must already exist on object to be renamed
if (!obj->extra_descr)
{
ch->wraplnf("There are no custom extended descriptions on '%s'.", obj->name);
ch->println( "Reminder: you can only rename on custom extendeds." );
return;
}
// custom extended exists on this object
for (ed=obj->extra_descr; ed != NULL; ed = ed->next )
{
if ( is_name( (char *) keyword, ed->keyword ) )
{
// the extended is found
free_string(ed->keyword);
ed->keyword = str_dup( arg1 );
return;
}
}
ch->wraplnf("Couldn't find any matching keywords on the "
"custom extendeds on '%s' to rename.", obj->name);
return;
}
/****************** ADDKEY ******************/
if (!str_prefix(mode,"appendkey"))
{
// trim the spaces to the right of the tag to add
while ( !IS_NULLSTR(arg1) && is_space(arg1[str_len(argument)-1]))
{
arg1[str_len(arg1)-1]='\0';
}
// check we have a tag left
if(arg1[0] == '\0' )
{
ch->println( "You must put in a keyword/keywords you wish to append." );
return;
}
// display help if required
if ( keyword[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " OEXTENDED <object> APPENDKEY <currentkeyword> <keyword to add>" );
ch->println( " appends another keyword to the current keywords of an extended description\r\n" ); // extra LF
ch->println( "e.g oextended book appendkey page3 three" );
ch->println( " This will add an keyword of 'three' to the current keyword page3" );
}
// custom extended must already exist on object to be renamed
if (!obj->extra_descr)
{
ch->wraplnf("There are no custom extended descriptions on '%s'.", obj->name);
ch->println( "Reminder: you can only append keywords to custom extendeds." );
return;
}
// custom extended exists on this object
for (ed=obj->extra_descr; ed != NULL; ed = ed->next )
{
if ( is_name( (char *) keyword, ed->keyword ) )
{
char tbuf[MSL];
// the extended is found - add new keyword.
sprintf (tbuf,"%s %s", ed->keyword, arg1);
free_string(ed->keyword);
ed->keyword = str_dup( tbuf );
ch->wraplnf("Keyword is now '%s' on '%s'" ,tbuf, obj->name);
ed->keyword = str_dup( tbuf );
return;
}
}
ch->wraplnf("Couldn't find any matching keywords on the "
"custom extendeds on '%s' to append your keyword to.", obj->name);
return;
}
ch->println( "Incorrect Mode... type 'oextended' for help." );
return;
}
/**************************************************************************/
void do_string( char_data *ch, char *argument )
{
char type [MIL];
char arg1 [MIL];
char arg2 [MIL];
char arg3 [MIL];
char logged[MIL];
char_data *victim;
OBJ_DATA *obj;
if (IS_UNSWITCHED_MOB(ch)){
ch->println( "Players only." );
return;
}
if (( !IS_HERO(ch)
&& !IS_IMMORTAL(ch)
&& !IS_RP_SUPPORT(ch)))
{
do_huh( ch, "" );
return;
}
sprintf(logged, argument );
smash_tilde( argument );
argument = one_argument( argument, type );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
strcpy( arg3, argument );
if ( type[0] == '\0' || arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
ch->println( "Syntax:" );
if (IS_IMMORTAL(ch))
{
ch->println( " STRING OBJ <name> <field> <string>" );
}
else
{
ch->println( " STRING OBJ <name_of_object> <field> <string>" );
ch->println( " (hold the object you wish to string)" );
}
ch->println( " fields: name short long" );
ch->println( " (use oextended for extended descriptions)\r\n" ); // extra LF
if (!IS_IMMORTAL(ch))
return;
ch->println( " STRING CHAR <name> <field> <string>" );
ch->println( " fields: name long desc spec\r\n" ); // extra LF
ch->println( " Use the SHORT command to set short descriptions" );
ch->println( " Use CHARDESC for doing the long description on mobs.\r\n" ); //extra LF
ch->println( " See HELP STRING for examples on how to string mobs for quests." );
return;
}
if (!str_prefix(type,"object"))
{
// string an obj
if (IS_IMMORTAL(ch))
{
if ( (obj = get_obj_here(ch, arg1)) == NULL )
{
ch->println( "Nothing like that in heaven or earth." );
return;
}
}else
{
if ( (obj = get_obj_wear( ch, arg1)) == NULL )
{
ch->println( "You must be wearing or holding the object you wish to restring." );
return;
}
}
if ( IS_OBJ_STAT( obj, OBJEXTRA_NO_RESTRING )) {
ch->println( "You cannot restring that object." );
return;
}
{ // log the usage of the string command to 2 files, a global, and a player
char logbuf[MSL];
sprintf (logbuf,"string: %5d: %-13s - '%s'", obj->pIndexData->vnum,
TRUE_CH(ch)->name, logged);
// general log
append_datetimestring_to_file(RESTRING_LOGFILE, logbuf);
// personal playerlog
{
char buffilename[MSL];
if (!IS_UNSWITCHED_MOB(ch))
{
sprintf(buffilename, RESTRING_LOGS_DIR"%.8s.rst", TRUE_CH(ch)->name);
append_logentry_to_file( ch, buffilename, logbuf);
}
}
}
if ( !str_prefix( arg2, "name" ) )
{
ch->wraplnf("Name has been changed on %s [%d] from '%s' to '%s'",
obj->short_descr, obj->pIndexData->vnum, obj->name, arg3);
free_string( obj->name );
obj->name = str_dup( arg3 );
// mark the object as restrung
obj->restrung=true;
return;
}
if ( !str_prefix( arg2, "short" ) )
{
ch->wraplnf("Short description has been changed on %s [%d] from '%s' to '%s'",
obj->name, obj->pIndexData->vnum, obj->short_descr, arg3);
replace_string( obj->short_descr, arg3);
// mark the object as restrung
obj->restrung=true;
return;
}
if ( !str_prefix( arg2, "long" ) )
{
ch->wraplnf("Long description has been changed on %s [%d] from '%s' to '%s'",
obj->short_descr, obj->pIndexData->vnum, obj->description, arg3);
replace_string( obj->description, arg3);
// mark the object as restrung
obj->restrung=true;
return;
}
if ( !str_prefix( arg2, "ed" ) || !str_prefix( arg2, "extended"))
{
EXTRA_DESCR_DATA *ed;
argument = one_argument( argument, arg3 );
if ( IS_NULLSTR(argument) )
{
ch->println( "Syntax: string obj <object> ed <keyword> <string>" );
return;
}
strcat(argument,"\r\n");
// add the extended description to the object
ed = new_extra_descr();
ed->keyword = str_dup( arg3 );
ed->description = str_dup( argument );
ed->next = obj->extra_descr;
obj->extra_descr = ed;
return;
}
}
// echo bad use message for those that are heros
if (!IS_IMMORTAL(ch)){
do_string(ch,"");
}
if (!str_prefix(type,"character") || !str_prefix(type,"mobile"))
{
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
// clear zone for mobs
victim->zone = NULL;
// string something
if ( !str_prefix( arg2, "name" ) )
{
if ( !IS_NPC(victim) ){
ch->println( "You can only change the name of mobs using the string command." );
return;
}
replace_string( victim->name, arg3 );
return;
}
if ( !str_prefix( arg2, "description" ) ){
ch->wraplnf("Description changed from '%s' to '%s' on %s",
victim->description, arg3, PERS(victim, ch));
replace_string(victim->description, arg3);
return;
}
if ( !str_prefix( arg2, "long" ) ){
ch->wraplnf("Long/default description changed from '%s' to '%s' on %s",
victim->long_descr, arg3, PERS(victim, ch));
replace_string( victim->long_descr, arg3 );
return;
}
if ( !str_prefix( arg2, "spec" ) ){
if ( !IS_NPC(victim) ){
ch->println( "Not on PC's." );
return;
}
SPEC_FUN *newspec=spec_lookup( arg3 );
if ( !newspec ){
ch->printlnf( "No such spec function '%s'." , arg3 );
return;
}
victim->spec_fun = newspec;
ch->printlnf("Spec function changed to '%s' on %s.",
arg3,PERS(victim, ch) );
return;
}
}
// echo bad use message
do_string(ch,"");
}
/**************************************************************************/
void do_oset( char_data *ch, char *argument )
{
char arg1 [MIL];
char arg2 [MIL];
char arg3 [MIL];
OBJ_DATA *obj;
int value;
smash_tilde( argument );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
strcpy( arg3, argument );
if ( arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " set obj <object> <field> <value>" );
ch->println( " Field being one of:" );
ch->println( " value0 value1 value2 value3 value4 (v1-v4)" );
ch->println( " extra wear level weight cost timer" );
ch->println( " note: flag values can be set using ABC...XYZabcde" );
return;
}
if ( ( obj = get_obj_world( ch, arg1 ) ) == NULL )
{
ch->println( "Nothing like that in heaven or earth." );
return;
}
// Snarf the value (which need not be numeric).
if(is_number(arg3) || has_space(arg3)){
value = atoi( arg3 );
}else{
value = flags_read(arg3 );
}
// Set something.
if ( !str_cmp( arg2, "value0" ) || !str_cmp( arg2, "v0" ) )
{
ch->printlnf("object value 0 changed from %d to %d", obj->value[0], value);
obj->value[0] = value;
return;
}
if ( !str_cmp( arg2, "value1" ) || !str_cmp( arg2, "v1" ) )
{
ch->printlnf("object value 1 changed from %d to %d", obj->value[1], value);
obj->value[1] = value;
return;
}
if ( !str_cmp( arg2, "value2" ) || !str_cmp( arg2, "v2" ) )
{
ch->printlnf("object value 2 changed from %d to %d", obj->value[2], value);
obj->value[2] = value;
return;
}
if ( !str_cmp( arg2, "value3" ) || !str_cmp( arg2, "v3" ) )
{
ch->printlnf("object value 3 changed from %d to %d", obj->value[3], value);
obj->value[3] = value;
return;
}
if ( !str_cmp( arg2, "value4" ) || !str_cmp( arg2, "v4" ) )
{
ch->printlnf("object value 4 changed from %d to %d", obj->value[4], value);
obj->value[4] = value;
return;
}
if ( !str_prefix( arg2, "extra" ) )
{
ch->printlnf("object extra flags changed from %d to %d", obj->extra_flags , value);
obj->extra_flags = value;
return;
}
if ( !str_prefix( arg2, "wear" ) )
{
ch->printlnf("object wear flags changed from %d to %d", obj->wear_flags , value);
obj->wear_flags = value;
return;
}
if ( !str_prefix( arg2, "level" ) )
{
ch->printlnf("object level changed from %d to %d", obj->level, value);
obj->level = value;
return;
}
if ( !str_prefix( arg2, "weight" ) )
{
ch->printlnf("object weight changed from %d to %d", obj->weight, value);
obj->weight = value;
return;
}
if ( !str_prefix( arg2, "cost" ) )
{
ch->printlnf("object cost changed from %d to %d", obj->cost, value);
obj->cost = value;
return;
}
if ( !str_prefix( arg2, "timer" ) )
{
ch->printlnf("object timer changed from %d to %d", obj->timer, value);
obj->timer = value;
return;
}
// Generate usage message.
do_oset( ch, "" );
return;
}
/**************************************************************************/
void do_rset( char_data *ch, char *argument )
{
char arg1 [MIL];
char arg2 [MIL];
char arg3 [MIL];
ROOM_INDEX_DATA *location;
int value;
smash_tilde( argument );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
strcpy( arg3, argument );
if ( arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
ch->println( "Syntax:" );
ch->println( " set room <location> <field> <value>" );
ch->println( " Field being one of:" );
ch->println( " flags sector" );
return;
}
if ( ( location = find_location( ch, arg1 ) ) == NULL )
{
ch->println( "No such location." );
return;
}
if (ch->in_room != location
&& is_room_private_to_char( location, ch )
&& !IS_TRUSTED(ch,IMPLEMENTOR))
{
ch->println( "That room is private right now." );
return;
}
/*
* Snarf the value.
*/
if ( !is_number( arg3 ) )
{
ch->println( "Value must be numeric." );
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, "" );
return;
}
/**************************************************************************/
// Written by Stimpy, ported to rom2.4 by Silverhand with extras
// Searching written by Kal
void do_sockets( char_data *ch, char *argument )
{
char_data *vch;
connection_data *c;
char buf [ MSL ];
char buf2 [ MSL ];
char showname [ MSL ];
char rcounter[ MSL ];
int count;
char * st;
char s[100];
char arg[MSL];
argument = one_argument( argument, arg );
count= 0;
buf[0]= '\0';
buf2[0]= '\0';
strcat( buf2, "\r\n`=\x9b[`=\x9cNum `=\x9d""Connected_State `=\x9fLogin@"
" `=\xa0Idle`=\x9b] `=\xa1Player Name `=\xa2Host `=\xa3(Sys time: " );
strftime( s, 100, "%I:%M%p", localtime( ¤t_time ) );
strcat( buf2,s);
strcat( buf2,")\r\n");
strcat( buf2,
"`=\xa4--------------------------------------------------------------------------`c\r\n");
for ( c = connection_list; c; c = c->next )
{
char addr[MSL];
// can't see high level imms hidden from lower imms
if (CH(c) && !can_see_who( ch, CH(c)) ){
continue;
}
// do matching if they specified an argument
if(!IS_NULLSTR(arg)){
// if host name matches we dont do any other matching
if(str_infix(arg,c->remote_hostname))
{
if (CH(c)){ // character connection (match on character name)
if (!is_name( arg, CH(c)->name)){
continue;
}
}else{ // at title screen (ignore) or mudftp (match on username)
if(!IS_NULLSTR(c->username)){
if(!is_name( arg, c->username)){
continue;
}
}
}
}
}
count++;
// display the hostname and ident if known
if(IS_NULLSTR(c->ident_username)){
if(IS_NULLSTR(c->ident_raw_result)){
sprintf(addr, "`=\xa2%s%s%s",
c->protocol==PROTOCOL_IPV6?"[":"",
c->remote_hostname,
c->protocol==PROTOCOL_IPV6?"]":"");
}else{
sprintf( addr, "`=\xa6#`s@`=\xa2%s%s%s",
c->protocol==PROTOCOL_IPV6?"[":"",
c->remote_hostname,
c->protocol==PROTOCOL_IPV6?"]":"");
}
}else{
sprintf( addr, "`#`=\xa5%s`s@`=\xa2%s%s%s",
c->ident_username,
c->protocol==PROTOCOL_IPV6?"[":"",
c->remote_hostname,
c->protocol==PROTOCOL_IPV6?"]":"");
}
sprintf(showname,"%s",( c->original ) ? c->original->name
: ( c->character ) ? c->character->name
: "(unknown)");
// NB: You may need to edit the CON_ values
switch( c->connected_state )
{
case CON_PLAYING: st = " PLAYING "; break;
case CON_DETECT_CLIENT_SETTINGS:st = "detect settings"; break;
case CON_GET_NAME: st = " Get Name "; break;
case CON_CONFIRM_CREATING_NEW: st = "conf create new"; break;
case CON_GET_CREATION_PASSWORD: st = "get create pass"; break;
case CON_GET_CONNECT_PASSWORD: st = "get connectpass"; break;
case CON_GET_CONNECT_PASS2CREATE:st= "get connectpas2"; break;
case CON_NAME_SELECT: st = " name selector "; break;
case CON_GET_OLD_PASSWORD: st = "Get Old Passwd "; break;
case CON_GET_NEW_PASSWORD: st = "Get New Passwd "; break;
case CON_CONFIRM_NEW_PASSWORD: st = "Confirm Passwd "; break;
case CON_CONFIRM_NEW_NAME: st = "Confirm newName"; break;
case CON_GET_NEW_RACE: st = " Get New Race "; break;
case CON_GET_NEW_SEX: st = " Get New Sex "; break;
case CON_GET_NEW_CLASS: st = " Get New Class "; break;
case CON_GET_ALIGNMENT: st = " Get New Align "; break;
case CON_DEFAULT_CHOICE: st = " Choosing Cust "; break;
case CON_GEN_GROUPS: st = " Customization "; break;
case CON_PICK_WEAPON: st = " Picking Weapon"; break;
case CON_READ_IMOTD: st = " Reading IMOTD "; break;
case CON_BREAK_CONNECT: st = " LINKDEAD "; break;
case CON_READ_MOTD: st = " Reading MOTD "; break;
case CON_GET_ALLIANCE: st = " Get Alliance "; break;
case CON_GET_TENDENCY: st = " Get Tendency "; break;
case CON_HOTREBOOT_RECOVER: st = " HOTREBOOTING "; break;
case CON_FTP_COMMAND: st = " FTPCOMMAND ";
sprintf(showname,"-%s-",c->username); break;
case CON_FTP_DATA: st = " FTPDATA ";
sprintf(showname,"-%s-",c->username); break;
case CON_FTP_AUTH: st = " FTPCONNECTING ";
sprintf(showname,"-%s-",c->username); break;
case CON_WEB_REQUEST: st = " WEB REQUEST "; break;
case CON_RESOLVE_IP: st = " RESOLVING IP "; break;
case CON_GET_EMAIL: st = " GET EMAIL ADDR"; break;
case CON_ENTER_UNLOCK_ID: st = "ENTERING UNLOCK"; break;
case CON_GET_AUTOMAP: st = " GET AUTOMAP "; break;
case CON_RECHECK_EMAIL: st = " RECHECK EMAIL "; break;
case CON_REROLL_STATS:
sprintf(rcounter, " Rerolling #%-3d",
c->character->pcdata->reroll_counter);
st = &rcounter[0]; break;
case CON_GET_COLOUR: st = " Get colour "; break;
default: st = " !UNKNOWN! "; break;
}
// Format "login" value...
if (c->character){
vch = c->original ? c->original : c->character;
strftime( s, 100, "%I:%M%p", localtime( &vch->logon ) );
}else{
s[0]='\0';
}
int idletime=(int)(current_time-c->idle_since);
sprintf( buf, "`=\x9b[`=\x9c%3d %s%s `=\x9f%7s `=\xa0%4d%s`=\x9b] `=\xa1%-12s %s%s`=\xa2%c%d\r\n",
c->connected_socket,
(c->connected_state==CON_PLAYING?"`=\x9d":"`=\x9e"),
st,
s,
(idletime<600?idletime:idletime/60),
(idletime<600?"s":"m"),
showname,
c->multiple_logins && IS_ADMIN(ch)?"`=\xa7":"`=\xa2",
addr,
(c->multiple_logins && IS_ADMIN(ch)?'*':
(CH(c) && IS_SET(CH(c)->config,CONFIG_IGNORE_MULTILOGINS))?'+':':'),
c->remote_port );
strcat( buf2, buf );
// flush the buffer - avoid crash with too many connections
ch->print( buf2 );
buf2[0]='\0';
}
if(!IS_NULLSTR(arg)){
sprintf( buf, "\r\n`x%d matching connection%s\r\n", count, count == 1 ? "" : "s" );
}else{
sprintf( buf, "\r\n`x%d connection%s\r\n", count, count == 1 ? "" : "s" );
}
strcat( buf2, buf );
ch->print( buf2 );
return;
}
/**************************************************************************/
// forced_interpret allows force to be used in olc and also handles
// alias parsing etc
void forced_interpret( char_data *ch, char *argument)
{
// handle forced mobs
if(IS_UNSWITCHED_MOB(ch)){
interpret(ch, argument);
return;
}
if (ch->desc){
if ( ch->desc->showstr_point ){ // pager
show_string( ch->desc, argument );
}else if ( ch->desc->pString ){ // string editor
string_add( ch, argument );
}else if(ch->desc->editor){ // in olc editor
char hold_incomm[MIL];
strcpy(hold_incomm, ch->desc->incomm);
strcpy(ch->desc->incomm, argument);
if(!run_olc_editor( ch->desc )){
interpret(ch, substitute_alias(ch->desc, argument));
}
strcpy(ch->desc->incomm, hold_incomm);
}else{ // standard force
interpret(ch, substitute_alias(ch->desc, argument));
}
}else{
// must be a linkless player
interpret(ch, argument);
}
}
/**************************************************************************/
void do_force( char_data *ch, char *argument )
{
char arg[MIL];
char arg2[MIL];
argument = one_argument( argument, arg );
if ( IS_NULLSTR(arg) || IS_NULLSTR(argument) ){
ch->println( "syntax: force <player|mob> <command for them to execute>" );
ch->println( "syntax: force all <command for all to execute>" );
ch->println( "syntax: force players <command for all players to execute>" );
ch->println( "syntax: force immortals <command for all immortals below your level to execute>" );
return;
}
one_argument(argument,arg2);
if (!str_cmp(arg2,"delete") ){
ch->println( "That will NOT be done." );
return;
}
if ( !str_cmp( arg, "all" ) )
{
char_data *vch;
char_data *vch_next_player;
for ( vch = player_list; vch; vch = vch_next_player )
{
vch_next_player = vch->next_player;
if ( !IS_NPC(vch) && get_trust( vch ) < get_trust( ch ) )
{
if (can_see_who(vch, TRUE_CH(ch))){
vch->printlnf("%s forces you to '%s'.", TRUE_CH(ch)->name, argument);
}else{
vch->printlnf("An Olympian god forces you to '%s'.", argument);
}
forced_interpret( vch, argument );
}
}
}
else if (!str_cmp(arg,"players"))
{
char_data *vch;
char_data *vch_next_player;
for ( vch = player_list; vch; vch = vch_next_player )
{
vch_next_player = vch->next_player;
if ( !IS_NPC(vch) && get_trust( vch ) < get_trust( ch )
&& vch->level < LEVEL_HERO)
{
if (can_see_who(vch, TRUE_CH(ch))){
vch->printlnf("%s forces you to '%s'.", TRUE_CH(ch)->name, argument);
}else{
vch->printlnf("An Olympian god forces you to '%s'.", argument);
}
forced_interpret( vch, argument );
}
}
}
else if (!str_cmp(arg,"immortals"))
{
char_data *vch;
char_data *vch_next_player;
for ( vch = player_list; vch; vch = vch_next_player )
{
vch_next_player = vch->next_player;
if ( !IS_NPC(vch) && get_trust( vch ) < get_trust( ch )
&& vch->level >= LEVEL_HERO)
{
if (can_see_who(vch, TRUE_CH(ch))){
vch->printlnf("%s forces you to '%s'.", TRUE_CH(ch)->name, argument);
}else{
vch->printlnf("An Olympian god forces you to '%s'.", argument);
}
forced_interpret( vch, argument );
}
}
}
else
{
char_data *victim;
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if ( victim == ch )
{
ch->println( "Aye aye, right away!" );
return;
}
if( IS_NPC(victim) && !str_prefix(arg2,"mob")){
ch->println( "You can't force mobs to use the mob command." );
return;
}
if (ch->in_room != victim->in_room
&& is_room_private_to_char( victim->in_room, ch )
&& !IS_TRUSTED(ch,IMPLEMENTOR))
{
ch->println("That character is in a private room." );
return;
}
if ( get_trust( victim ) >= get_trust( ch ) )
{
ch->println( "Do it yourself!" );
return;
}
// questing wiznet
if (IS_NPC(victim))
{
char qbuf[MSL];
sprintf (qbuf, "`mQUEST> %s forces mob '%s' to '%s'`x",
ch->name, victim->name, argument);
wiznet(qbuf,ch,NULL,WIZ_QUESTING,0,LEVEL_IMMORTAL);
}
victim->last_force = tick_counter;
if (can_see_who(victim, TRUE_CH(ch))){
victim->printlnf("%s forces you to '%s'.", TRUE_CH(ch)->name, argument);
}else{
victim->printlnf("An Olympian god forces you to '%s'.", argument);
}
forced_interpret( victim, argument );
}
if (IS_SILENT(ch)){
ch->println( "Ok - force done silently." );
}else{
ch->println( "Ok - force done." );
}
return;
}
/**************************************************************************/
// used for forcing mobs
void do_mforce( char_data *ch, char *argument )
{
char arg[MIL];
char arg2[MIL];
argument = one_argument( argument, arg );
if ( IS_NULLSTR(arg) || IS_NULLSTR(argument) ){
ch->println( "syntax: force <mob> <command for mob to execute>" );
return;
}
one_argument(argument,arg2);
{
char_data *victim;
if ( ( victim = get_char_room( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if ( victim == ch )
{
ch->println( "Aye aye, right away!" );
return;
}
if( !IS_NPC(victim)){
ch->println( "You can only force mobs to do commands with the mforce command." );
return;
}
if( !str_prefix(arg2,"mob")){
ch->println( "You can't force mobs to use the mob command." );
return;
}
// questing wiznet
if (IS_NPC(victim))
{
char qbuf[MSL];
sprintf (qbuf, "`mQUEST> %s forces mob '%s' to '%s'`x",
ch->name, victim->name, argument);
wiznet(qbuf,ch,NULL,WIZ_QUESTING,0,LEVEL_IMMORTAL);
}
victim->last_force = tick_counter;
if (can_see_who(victim, TRUE_CH(ch))){
victim->printlnf("%s forces you to '%s'.", TRUE_CH(ch)->name, argument);
}else{
victim->printlnf("An Olympian god forces you to '%s'.", argument);
}
forced_interpret( victim, argument );
}
if (IS_SILENT(ch)){
ch->println( "Ok - force done silently." );
}else{
ch->println( "Ok - force done." );
}
return;
}
/**************************************************************************/
// used for forcing newbies
void do_nforce( char_data *ch, char *argument )
{
char arg[MIL];
char arg2[MIL];
argument = one_argument( argument, arg );
if ( IS_NULLSTR(arg) || IS_NULLSTR(argument) ){
ch->println( "syntax: force <newbie> <command for newbie to execute>" );
return;
}
one_argument(argument,arg2);
{
char_data *victim;
if ( ( victim = get_char_room( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if ( victim == ch )
{
ch->println( "Aye aye, right away!" );
return;
}
if( IS_NPC(victim) || !IS_NEWBIE(victim)){
ch->println( "You can only force newbie players to do commands with the nforce command." );
return;
}
victim->last_force = tick_counter;
if (can_see_who(victim, TRUE_CH(ch))){
victim->printlnf("%s forces you to '%s'.", TRUE_CH(ch)->name, argument);
}else{
victim->printlnf("An Olympian god forces you to '%s'.", argument);
}
forced_interpret( victim, argument );
}
if (IS_SILENT(ch)){
ch->println( "Ok - force done silently." );
}else{
ch->println( "Ok - force done." );
}
return;
}
/**************************************************************************/
// Another piece of Kal's magic testing code :)
void do_forcetick( char_data *ch, char *)
{
extern int pulse_point;
pulse_point=1;
ch->println( "TICK FORCED!" );
}
/**************************************************************************/
// New routines by Dionysos. Defaulting to LEVEL_IMMORTAL Kalahn
// Tweaked for FadeIN/OUT by Kerenos
void do_wizinvis( char_data *ch, char *argument )
{
int level;
char arg[MSL];
char_data *rch;
one_argument( argument, arg );
if ( IS_NULLSTR(arg)){ // take the default path
if ( ch->invis_level){
ch->invis_level= 0;
if ( !ch->pcdata || IS_NULLSTR( ch->pcdata->fadein ) ){
act( "$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM );
}else{
act( "$t", ch, ch->pcdata->fadein, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch)){
act("($n fadein)",ch,NULL,rch,TO_VICT);
}
}
}
ch->println("You slowly fade back into existence.");
}else{
if ( !ch->pcdata || IS_NULLSTR( ch->pcdata->fadeout ) ){
act( "$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM );
}else{
act( "$t", ch, ch->pcdata->fadeout, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n fadeout)",ch,NULL,rch,TO_VICT);
}
}
}
if (get_trust(ch) > LEVEL_IMMORTAL)
ch->invis_level= LEVEL_IMMORTAL;
else
ch->invis_level= get_trust(ch);
if (ch->invis_level== LEVEL_IMMORTAL){
ch->println("You are now invisible to mortal beings.");
}else{
ch->println( "You slowly vanish into thin air." );
}
}
}else{ // do the level thing
level = atoi(arg);
if (level < 2 || level > get_trust(ch)){
ch->println( "Invis level must be between 2 and your level." );
return;
}else{
ch->invis_level= level;
if ( !IS_SWITCHED(ch)) {
if ( IS_NULLSTR( ch->pcdata->fadeout )) {
act( "$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM );
}else{
act( "$t", ch, ch->pcdata->fadeout, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room){
if (IS_IMMORTAL(rch)){
act("($n fadeout)",ch,NULL,rch,TO_VICT);
}
}
}
}else{
act( "$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM );
}
if (ch->invis_level== LEVEL_IMMORTAL){
ch->println( "You are now invisible to mortal beings." );
}else{
ch->println( "You slowly vanish into thin air." );
}
}
}
ch->printlnf("True invisiblity level is now %d", INVIS_LEVEL(ch));
return;
}
/**************************************************************************/
void do_iwizi( char_data *ch, char *argument )
{
int level;
char_data *rch;
if ( IS_NULLSTR(argument))
// take the default path
if ( ch->iwizi)
{ // iwizi being turned off
ch->iwizi= 0;
// show message to room if they just became room visible
if(!INVIS_LEVEL(ch) && !IS_OOC(ch)){
if ( !ch->pcdata || IS_NULLSTR( ch->pcdata->fadein ) )
act( "$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM );
else
{
act( "$t", ch, ch->pcdata->fadein, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n iwizi fadein)",ch,NULL,rch,TO_VICT);
}
}
}
}
ch->printlnf("Iwizi set to 0.");
}
else // iwizi being turned on to LEVEL_IMMORTAL
{
// show message to room if they just became room visible
if(!INVIS_LEVEL(ch) && !IS_OOC(ch)){
if ( !ch->pcdata || IS_NULLSTR( ch->pcdata->fadeout ) ){
act( "$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM );
}else{
act( "$t", ch, ch->pcdata->fadeout, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n iwizi fadeout)",ch,NULL,rch,TO_VICT);
}
}
}
}
if (get_trust(ch) > LEVEL_IMMORTAL)
ch->iwizi= LEVEL_IMMORTAL;
else
ch->iwizi= get_trust(ch);
ch->printlnf( "Iwizi set to %d.", ch->iwizi);
}
else
// do the level thing
{
level = atoi(argument);
if (level < 2 || level > get_trust(ch))
{
ch->println( "Iwizi level must be between 2 and your level." );
return;
}
else
{
ch->iwizi = level;
if(!IS_OOC(ch))
{
if ( !IS_SWITCHED(ch)) {
if ( IS_NULLSTR( ch->pcdata->fadeout )) {
act( "$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM );
} else {
act( "$t", ch, ch->pcdata->fadeout, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n iwizi fadeout)",ch,NULL,rch,TO_VICT);
}
}
}
}else{
act( "$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM );
}
}
ch->printlnf("Iwizi set to %d.", ch->iwizi);
}
}
return;
}
/**************************************************************************/
void do_olcwizi( char_data *ch, char *argument )
{
int level;
char_data *rch;
if ( IS_NULLSTR(argument)){
// take the default path
if ( ch->olcwizi){ // olcwizi being turned off
ch->olcwizi= 0;
// show message to room if they just became room visible
if(!INVIS_LEVEL(ch) && IS_OLC(ch)){
if ( !ch->pcdata || IS_NULLSTR( ch->pcdata->fadein ) )
act( "$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM );
else
{
act( "$t", ch, ch->pcdata->fadein, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n olcwizi fadein)",ch,NULL,rch,TO_VICT);
}
}
}
}
ch->printlnf("Olcwizi set to 0.");
}else{ // olcwizi being turned on to LEVEL_IMMORTAL
// show message to room if they just became room visible
if(!INVIS_LEVEL(ch) && IS_OLC(ch)){
if ( !ch->pcdata || IS_NULLSTR( ch->pcdata->fadeout ) ){
act( "$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM );
}else{
act( "$t", ch, ch->pcdata->fadeout, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n olcwizi fadeout)",ch,NULL,rch,TO_VICT);
}
}
}
}
if (get_trust(ch) > LEVEL_IMMORTAL)
ch->olcwizi= LEVEL_IMMORTAL;
else
ch->olcwizi= get_trust(ch);
ch->printlnf( "Olcwizi set to %d.", ch->olcwizi);
}
}else{ // do the level thing
level = atoi(argument);
if (level < 2 || level > get_trust(ch))
{
ch->println( "Olcwizi level must be between 2 and your level." );
return;
}else{
ch->olcwizi = level;
if(IS_OLC(ch))
{
if ( !IS_SWITCHED(ch)) {
if ( IS_NULLSTR( ch->pcdata->fadeout )) {
act( "$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM );
} else {
act( "$t", ch, ch->pcdata->fadeout, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n olcwizi fadeout)",ch,NULL,rch,TO_VICT);
}
}
}
}else{
act( "$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM );
}
}
ch->printlnf("Olcwizi set to %d.", ch->olcwizi);
}
}
return;
}
/**************************************************************************/
void do_owizi( char_data *ch, char *argument )
{
int level;
char_data *rch;
if ( IS_NULLSTR(argument))
// take the default path
if ( ch->owizi)
{ // owizi being turned off
ch->owizi= 0;
// show message to room if they just became room visible
if(!INVIS_LEVEL(ch) && IS_OOC(ch)){
if ( !ch->pcdata || IS_NULLSTR( ch->pcdata->fadein ) )
act( "$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM );
else
{
act( "$t", ch, ch->pcdata->fadein, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n owizi fadein)",ch,NULL,rch,TO_VICT);
}
}
}
}
ch->printlnf("Owizi set to 0.");
}
else // owizi being turned on to LEVEL_IMMORTAL
{
// show message to room if they just became room visible
if(!INVIS_LEVEL(ch) && IS_OOC(ch)){
if ( !ch->pcdata || IS_NULLSTR( ch->pcdata->fadeout ) ){
act( "$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM );
}else{
act( "$t", ch, ch->pcdata->fadeout, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n owizi fadeout)",ch,NULL,rch,TO_VICT);
}
}
}
}
if (get_trust(ch) > LEVEL_IMMORTAL)
ch->owizi= LEVEL_IMMORTAL;
else
ch->owizi= get_trust(ch);
ch->printlnf("Owizi set to %d.", ch->owizi);
}
else
// do the level thing
{
level = atoi(argument);
if (level < 2 || level > get_trust(ch))
{
ch->println( "Owizi level must be between 2 and your level." );
return;
}
else
{
ch->owizi = level;
if(!IS_OOC(ch))
{
if ( !IS_SWITCHED(ch)) {
if ( IS_NULLSTR( ch->pcdata->fadeout )) {
act( "$n slowly fades into thin air.", ch, NULL, NULL, TO_ROOM );
} else {
act( "$t", ch, ch->pcdata->fadeout, NULL, TO_ROOM );
for (rch = ch->in_room->people; rch; rch = rch->next_in_room)
{
if (IS_IMMORTAL(rch))
{
act("($n owizi fadeout)",ch,NULL,rch,TO_VICT);
}
}
}
}else{
act( "$n slowly fades into existence.", ch, NULL, NULL, TO_ROOM );
}
}
ch->printlnf("Owizi set to %d.", ch->owizi);
}
}
return;
}
/**************************************************************************/
void do_incognito( char_data *ch, char *argument )
{
int level;
char arg[MSL];
/* RT code for taking a level argument */
one_argument( argument, 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 );
ch->println( "You are no longer cloaked." );
}
else
{
if (get_trust(ch) > LEVEL_IMMORTAL)
ch->incog_level = LEVEL_IMMORTAL;
else
ch->incog_level = get_trust(ch);
act( "$n cloaks $s presence.", ch, NULL, NULL, TO_ROOM );
if (ch->incog_level == LEVEL_IMMORTAL)
ch->println( "You cloak your presence from mere mortals." );
else
ch->println( "You cloak your presence." );
}
else
/* do the level thing */
{
level = atoi(arg);
if (level < 2 || level > get_trust(ch))
{
ch->println( "Incog level must be between 2 and your level." );
return;
}
else
{
ch->reply = NULL;
ch->incog_level = level;
act( "$n cloaks $s presence.", ch, NULL, NULL, TO_ROOM );
if (ch->incog_level == LEVEL_IMMORTAL)
ch->println( "You cloak your presence from mere mortals." );
else
ch->println( "You cloak your presence." );
}
}
return;
}
/**************************************************************************/
void do_holyset(char_data *ch, char *argument)
{
char arg[MIL];
argument = one_argument(argument, arg);
if (!str_prefix(arg, "\0"))
{
ch->printlnf("Say what? Try Syntax: HOLYSET <type>");
ch->printlnf(" Type: LIGHT, SPEECH, NAME, WALK, or VNUM");
return;
}
if (!str_prefix(arg, "speech"))
{
if(IS_UNSWITCHED_MOB(ch))
{
return;
}
if ( HAS_HOLYSPEECH(ch) )
{
REMOVE_BIT(ch->config, CONFIG_HOLYSPEECH);
ch->println( "Holy speech mode off." );
}
else
{
SET_BIT(ch->config, CONFIG_HOLYSPEECH);
ch->println( "Holy speech mode on." );
}
return;
}
if (!str_prefix(arg, "name"))
{
if(IS_UNSWITCHED_MOB(ch))
return;
if ( IS_SET(TRUE_CH(ch)->act, PLR_HOLYNAME) )
{
REMOVE_BIT(TRUE_CH(ch)->act, PLR_HOLYNAME);
ch->println( "Holy name mode off." );
}
else
{
SET_BIT(TRUE_CH(ch)->act, PLR_HOLYNAME);
ch->println( "Holy name mode on." );
}
return;
}
if (!str_prefix(arg, "walk"))
{
if(IS_UNSWITCHED_MOB(ch))
return;
if ( IS_SET(TRUE_CH(ch)->act, PLR_HOLYWALK) )
{
REMOVE_BIT(TRUE_CH(ch)->act, PLR_HOLYWALK);
ch->println( "Holy walk off." );
}
else
{
SET_BIT(TRUE_CH(ch)->act, PLR_HOLYWALK);
ch->println( "Holy walk on." );
}
return;
}
if (!str_prefix(arg, "vnum"))
{
if(IS_UNSWITCHED_MOB(ch))
return;
if ( IS_SET(TRUE_CH(ch)->act, PLR_HOLYVNUM) )
{
REMOVE_BIT(TRUE_CH(ch)->act, PLR_HOLYVNUM);
ch->println( "Holyvnum off." );
}
else
{
SET_BIT(TRUE_CH(ch)->act, PLR_HOLYVNUM);
ch->println( "Holyvnum on." );
}
return;
}
if (!str_prefix(arg, "light"))
{
if ( IS_UNSWITCHED_MOB(ch) )
return;
if ( IS_SET(TRUE_CH(ch)->act, PLR_HOLYLIGHT) )
{
REMOVE_BIT(TRUE_CH(ch)->act, PLR_HOLYLIGHT);
ch->println( "Holy light mode off." );
}
else
{
SET_BIT(TRUE_CH(ch)->act, PLR_HOLYLIGHT);
ch->println( "Holy light mode on." );
}
return;
}
}
/**************************************************************************/
void do_seevnum( char_data *ch, char *argument )
{
if(IS_UNSWITCHED_MOB(ch))
{
ch->println( "Immortal players only." );
return;
}
if (IS_NULLSTR(argument))
{
ch->println( "`xType a command as the parameter..." );
ch->println( "e.g. `=Cseevnum inv`x" );
}
if ( !IS_SET(TRUE_CH(ch)->act, PLR_HOLYVNUM) )
{
SET_BIT(TRUE_CH(ch)->act, PLR_HOLYVNUM);
ch->println("SEEVNUM BEGINS:");
interpret( ch, argument );
ch->println("SEEVNUM FINISHED.");
REMOVE_BIT(TRUE_CH(ch)->act, PLR_HOLYVNUM);
}
else
{
ch->println("SEEVNUM BEGINS");
interpret( ch, argument );
ch->println("SEEVNUM FINISHED");
}
return;
}
/**************************************************************************/
// Kal - Jan 00 :)
void do_inroom( char_data *ch, char *argument )
{
if(IS_NULLSTR(argument)){
ch->print("Syntax: inroom <command>\r\n"
"Notes: inroom removes you ability see objects and mobs outside the room\r\n"
" you are currently in, this is useful to specifically find an object\r\n"
" with stat, or set, and stat into a mob in the current room etc.\r\n");
return;
}
SET_BIT(ch->dyn,DYN_IN_ROOM_ONLY);
ch->println("INROOM BEGINS");
// do the command
interpret( ch, argument );
ch->println("INROOM ENDS");
REMOVE_BIT(ch->dyn,DYN_IN_ROOM_ONLY);
}
/**************************************************************************/
void do_silently( char_data *ch, char *argument )
{
int old_invis_level;
int whovis;
whovis = IS_SET(TRUE_CH(ch)->comm, COMM_WHOVIS);
REMOVE_BIT(TRUE_CH(ch)->comm, COMM_WHOVIS);
SET_BIT(ch->dyn,DYN_SILENTLY);
ch->println("SILENTLY BEGINS");
// back up the wizi level
old_invis_level= ch->invis_level;
// hide them to mortals
ch->invis_level= UMAX(ch->invis_level, LEVEL_IMMORTAL);
// do the command
interpret( ch, argument );
// restore their wizi
ch->invis_level=old_invis_level;
ch->println("SILENTLY FINISHED");
REMOVE_BIT(ch->dyn,DYN_SILENTLY);
if (whovis){
SET_BIT(TRUE_CH(ch)->comm, COMM_WHOVIS);
}
return;
}
/**************************************************************************/
/*void do_whovis( char_data *ch, char *)
{
if(IS_UNSWITCHED_MOB(ch))
return;
if ( IS_SET(TRUE_CH(ch)->comm, COMM_WHOVIS) )
{
ch->wrapln( "You are already visible on the wholist... use whoinvis to disappear.");
}
else
{
SET_BIT(TRUE_CH(ch)->comm, COMM_WHOVIS);
ch->println( "You are now visible on the who list to everyone no matter what." );
}
return;
}*/
/**************************************************************************/
void do_whoinvis( char_data *ch, char *)
{
if(IS_UNSWITCHED_MOB(ch))
return;
if ( IS_SET(TRUE_CH(ch)->comm, COMM_WHOVIS) )
{
REMOVE_BIT(TRUE_CH(ch)->comm, COMM_WHOVIS);
ch->printlnf( "You are now `Rinvisible`X on the wholist.");
}
else
{
SET_BIT(TRUE_CH(ch)->comm, COMM_WHOVIS);
ch->printlnf("you are now `Cvisible`X on the wholist.");
}
return;
}
/**************************************************************************/
/* prefix command: it will put the string typed on each line typed */
void do_prefi (char_data *ch, char *)
{
ch->println( "You cannot abbreviate the prefix command." );
return;
}
/**************************************************************************/
void do_prefix (char_data *ch, char *argument)
{
if (IS_NULLSTR(argument))
{
if (IS_NULLSTR(ch->prefix))
{
ch->println( "You have no prefix to clear." );
return;
}
ch->println( "Prefix removed." );
replace_string(ch->prefix, "");
return;
}
if (IS_NULLSTR(ch->prefix)){
ch->printlnf("Prefix changed to %s.",argument);
}else{
ch->printlnf("Prefix set to %s.\r\n",argument);
}
ch->println("Type 'prefix' by itself to get out of prefix mode");
replace_string(ch->prefix,argument);
}
/**************************************************************************/
void do_pinfo( char_data *ch, char *argument )
{
char buf[MSL];
char pcolour[MSL];
char bracket_col[MIL];
BUFFER *output;
int nMatch;
char_data *wch;
char status[2];
char reduced_buf[MIL];
bool generic_short;
// status used to display different status codes
// - s when sleeping
// - * when fighting
// - + when in pkill fight
// - ~ when in description editor
// - @ when switched
// - # when writing a note
if ( is_number( argument ) )
{
ch->println( "Levels are not supported by pinfo." );
return;
}
nMatch = 0;
output = new_buf();
for ( wch = player_list; wch; wch = wch->next_player )
{
if (!can_see_who(ch,wch))
continue;
// filter on name/short
if (!is_name( argument, wch->name )
&& !is_name( argument, wch->short_descr)
&& !is_name( argument, race_table[wch->race]->name)
&& !is_name( argument, class_table[wch->clss].name)
)
continue;
nMatch++;
status[0]='\0';
if (!IS_AWAKE(wch))
sprintf(status,"s");
if (wch->pnote)
sprintf(status,"#");
if (wch->controlling)
sprintf(status,"@");
else if (IS_IN_EDITMODE(wch))
sprintf(status,"~");
if (wch->fighting)
{
if (!IS_NPC(wch->fighting) && status[0]!= '@')
sprintf(status,"+");
else
sprintf(status,"*");
}
// setup the colour codes
sprintf(pcolour,"`%s",
(IS_LETGAINED(wch) && wch->pcdata->diplomacy==0) ? "g":
(wch->pcdata->diplomacy? "R" : "x"));
sprintf(bracket_col,"`%s", HAS_CHANNELOFF(wch,CHANNEL_OOC)?"c":
IS_IRC(wch)?"B": IS_IMMORTAL(wch)?"G":"x");
// reduced RPS or XP system
reduced_buf[0]='\0';
if (IS_ADMIN(ch) && wch->pcdata->reduce_xp_percent
|| wch->pcdata->reduce_rps_percent)
{
sprintf( reduced_buf, " `#`Y(RXP %d RRPS %d)`^",
wch->pcdata->reduce_xp_percent, wch->pcdata->reduce_rps_percent);
}
// get generic short description colour
{
char tempbuf[MIL];
sprintf(tempbuf,"a %s %s",
(wch->sex==0 ? "sexless" : wch->sex==1 ? "male" : "female"),
race_table[wch->race]->name);
if(str_cmp(wch->short_descr, tempbuf)){
generic_short=false;
}else{
generic_short=true;
}
}
// Format it up
sprintf( buf, "%s[%s%1s%1s%3d %+2d/%+2d %-6.6s %-3.3s %3d %3d%3d %2d%s] %s%s%s%s-`x%s %s%s`x\r\n",
bracket_col,
pcolour, (wch->pcdata->true_sex==1) ? "M" : "F", status, wch->level,
wch->alliance, wch->tendency,
!IS_NULLSTR(race_table[wch->race]->short_name)?race_table[wch->race]->short_name:"",
class_table[wch->clss].short_name,
(int) wch->hit*100/(wch->max_hit==0?1:wch->max_hit),
(int) wch->mana*100/(wch->max_mana==0?1:wch->max_mana),
wch->pkkills,
wch->pcdata->karns,
bracket_col,
(IS_NULLSTR(wch->description)?"`B":"`x"), // those with no long have a blue name
wch->name,
!IS_NULLSTR(wch->pcdata->immtalk_name)?"`#`G#`&":"",
wch->pcdata?(IS_NULLSTR(wch->pcdata->charnotes)?"":"`Y"):"`x",
reduced_buf,
(generic_short?"`B":"`x"), // those with a generic short have a blue short
wch->short_descr);
add_buf(output,buf);
}
ch->println("`x"
" S L A T R C H M P K\r\n"
" E V L E C L P N K R\r\n"
" X L I N E A % % S N" );
ch->sendpage(buf_string(output));
free_buf(output);
return;
}
/**************************************************************************/
/**************************************************************************/
/*
* do_rename renames a player to another name.
* PCs only. Previous file is deleted, if it exists.
* Char is then saved to new file.
* New name is checked against std. checks, existing offline players and
* online players.
* .gz files are not checked for
*/
bool check_parse_name (char* name); // comm.c
/**************************************************************************/
void do_rename (char_data* ch, char* argument)
{
char old_name[MIL],
new_name[MIL],
buf[MSL],
renamer[MSL];
char *previous_name;
char_data* victim;
argument = one_argument(argument, old_name); // find new/old name
one_argument(argument, new_name);
// Trivial checks
if (IS_NULLSTR(old_name))
{
ch->println( "Rename who?" );
return;
}
victim = get_char_world (ch, old_name);
if (!victim)
{
ch->println( "There is no such a person online." );
return;
}
if (IS_NPC(victim))
{
ch->println("You cannot use Rename on NPCs." );
return;
}
// allow rename self new_name,but otherwise only lower level
if ( (victim != ch) && (get_trust (victim) >= get_trust (ch)) )
{
ch->println("You failed." );
return;
}
if (!victim->desc || (victim->desc->connected_state != CON_PLAYING) )
{
ch->println( "This player has lost his link or is inside a pager or the like." );
return;
}
if (!new_name[0])
{
ch->println( "Rename to what new name?" );
return;
}
// First, check if there is a player named that off-line
{
PFILE_TYPE result=find_pfiletype(new_name);
if(result !=PFILE_NONE){
ch->printlnf("A player with a name of '%s' already exists! (pt=%d)",
new_name, (int)result);
return;
}
}
{ // dont allow duplicates with names in creation/level 1 unsaved player
connection_data *dc;
for ( dc = connection_list; dc; dc = dc->next )
{
if ( CH(dc) && !str_cmp(new_name, CH(dc)->name) )
{
ch->println( "Someone else is currently creating using that name." );
return;
}
}
}
if(count_char(new_name, '`')>0){
ch->println("You can't put the `` character into a name.");
return;
}
if (!check_parse_name(new_name))
{
ch->println( "The new name is illegal, letting you rename anyway." );
}
strcpy(renamer, PERS(ch, NULL));
// Rename the character and save them to a new file
previous_name=victim->name;
victim->name = str_dup(capitalize(new_name));
// create the new file
save_char_obj(victim);
// unlink the old file
unlink(pfilename(previous_name, victim->pcdata->pfiletype));
free_string(previous_name);
// all finished
ch->printlnf("You have renamed %s to %s.", old_name , victim->name);
// update laston
laston_update_char(victim);
laston_save(NULL);// resave laston data
logf("%s renamed %s to %s", renamer, old_name , victim->name);
sprintf(buf,"%s renamed %s to %s\r\n", renamer, old_name, victim->name);
wiznet(buf,ch,NULL,WIZ_SECURE,0,get_trust(ch));
victim->position = POS_STANDING; // I am laaazy
victim->wraplnf("You have been renamed to '%s' by %s.",
victim->name, can_see_who(victim, ch)?ch->name:"an Olympian god");
// do an autonote?
if(GAMESETTING2(GAMESET2_AUTONOTE_RENAMES_TO_ADMIN)){
autonote(NOTE_SNOTE, "p_anote()","player rename", "adminrename", buf, true);
}
}
/**************************************************************************/
// lets you make a mob die quickly for questing purposes
// also can be used to speed hotreboots - using qdie all
void do_qdie( char_data *ch, char *argument )
{
char arg[MIL];
char_data *victim;
argument = one_argument( argument, arg );
if ( IS_NULLSTR(arg))
{
ch->println( "syntax: qdie %playername (sets the HP to 1 on the mob playername is fighting)" );
ch->println( " or: qdie %mobname (sets the HP to 1 on the mob if it is fighting someone)" );
ch->println( " or: qdie all (sets the HP to 1 on the fights)" );
return;
}
if ( !str_cmp( arg, "all" ) )
{
char_data *vch;
char_data *vch_next;
if (!IS_ADMIN(ch))
{
ch->println( "Not at your level!" );
return;
}
for ( vch = player_list; vch != NULL; vch = vch_next )
{
if (vch->next == NULL)
{
return;
}
vch_next = vch->next_player;
victim= vch->fighting;
if (victim && IS_NPC(victim) && victim->hit>1)
{
ch->printlnf( "Current hitpoints on %s lvl: %d have been set to 1 from %d (was fighting %s lvl: %d).",
victim->short_descr, victim->level, victim->hit,
vch->name, vch->level);
victim->hit=1;
update_pos( victim);
}
}
return;
}
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if (!IS_NPC(victim ))
{
if (!victim->fighting)
{
ch->println( "That player isn't fighting anyone." );
return;
}
else
victim= victim->fighting;
}
if (!IS_NPC(victim))
{
ch->println( "That player isn't a mob!" );
return;
}
if (!victim->fighting)
{
ch->println( "That mob isn't fighting anyone!" );
return;
}
if (victim->hit>1)
victim->hit=1;
update_pos( victim);
ch->printlnf("Current hitpoints on %s have been set to 1.", victim->short_descr);
}
/**************************************************************************/
void do_showplayerlist( char_data *ch, char *)
{
char_data *vch;
char_data *vch_next;
int count=0;
for ( vch = player_list; vch != NULL; vch = vch_next )
{
if (vch->next == NULL)
{
return;
}
vch_next = vch->next_player;
count++;
ch->printlnf("%2d - %s ", count, vch->name);
}
return;
}
/**************************************************************************/
/**************************************************************************/
void do_overwritepasswd( char_data *ch, char *argument )
{
char arg[MIL];
connection_data *c;
if(IS_NPC(ch)) {
ch->println( "Only immortal players can use the overwrite password command." );
return;
}
one_argument( argument, arg );
if ( IS_NULLSTR(arg) ) {
ch->titlebar("OVERWRITE PASSWORD");
ch->println("`x-- How to use this command:");
ch->println("1. Tell a player to connect to the mud, and type in their player name.");
ch->wrapln("2. When it prompts them for a password, use the sockets command to find "
"out their socket number... then type `=Coverwritepassword <socketnum>`x "
"for their connection.");
ch->wrapln("3. Tell them to just press enter when asked for the password. The "
"mud will allow them to login to the game. They can change their password "
"using the password command in the form `=Cpasswd - <newpassword>`x.");
ch->println("Note1: This command can't be used on immortal characters.");
ch->wrapln("Note2: You can also use the command on players which have "
"already logged in, so they could use - in place of their old password "
"with the password command.");
ch->titlebar("");
return;
}
if (is_number(arg))
{
int socknum;
socknum = atoi(arg);
for ( c = connection_list; c != NULL; c = c->next )
{
if ( c->connected_socket == socknum)
{
if (CH(c))
{
if (IS_NPC(CH(c))){
ch->println( "Not on switched players." );
}else if (IS_IMMORTAL(CH(c))){
ch->println( "Not on IMMORTALS!" );
}else{
CH(c)->pcdata->overwrite_pwd = true;
ch->printlnf("Tell %s to type `=Cpasswd - <newpassword>`x"
" to update their password.", CH(c)->name);
logf( "%s overwrote the password on %s!", ch->name, CH(c)->name);
}
return;
}else{
ch->printlnf( "Connection %d hasn't provided their name yet.", socknum);
return;
}
}
}
}
// show the help
do_overwritepasswd(ch,"");
ch->println( "You must use the socket number of a player which is "
"available using the `=Csockets`x command." );
return;
}
/**************************************************************************/
// displays a table showing all the info on all PC races
void do_rinfo( char_data *ch, char *)
{
char buf[MSL];
BUFFER *output;
race_data *race;
output= new_buf();
sprintf( buf,"`?%s`x", makef_titlebar("RINFO")); add_buf(output,buf);
sprintf( buf,"`^===================== `Ysize`^ ========== `YHP`^ ========== `Ydefault`^ ======= `Yrecall`^ =\r\n"); add_buf(output,buf);
sprintf( buf,"`^===== `Yrace`^ ======== `Ylow`^==`Yhigh`^ ==`Y start`^==`Ymax `^======== `Y lang `^======= `Yvnum `^=\r\n"); add_buf(output,buf);
for ( race = race_list->next; race; race=race->next )
{
if(!race->pc_race()){
continue;
}
sprintf( buf,"%s%-18s %3d %3d %3d %4d %14s %5d\n`x",
race->creation_selectable()?" `x":"`Y*`x",
race->name,
race->low_size,
race->high_size,
race->start_hp,
race->max_hp,
race->language->name,
race->recall_room);
add_buf(output,buf);
}
sprintf( buf,"`?%s`x", makef_titlebar("`xSee also the raceinfo command, `Y*`x=not creation selectable")); add_buf(output,buf);
ch->sendpage(buf_string(output));
free_buf(output);
}
/**************************************************************************/
// by Kalahn - June 98 - basically owhere tweaked
void do_rwhere(char_data *ch, char *argument)
{
char buf[MIL];
BUFFER *buffer;
OBJ_DATA *obj;
OBJ_DATA *in_obj;
bool found;
bool display_stat = false;
int display_number=0;
OBJ_DATA *display_obj= NULL;
int number = 0, max_found, vnum;
found = false;
number = 0;
max_found = 200;
if ( !IS_NULLSTR(argument))
{
if ( !is_number( argument ) ){
ch->println( "Syntax: rwhere <item number in list>" );
ch->println( " rwhere with no parameters to see list of all restrung objects in the game." );
return;
}
display_stat =true;
display_number = atoi( argument );
if (display_number <0){
ch->println( "Value must be greater than 0." );
return;
}
}
buffer = new_buf();
sprintf( buf,"`?%s`x", makef_titlebar("RESTRUNG OBJECTS WHERE"));
add_buf(buffer,buf);
for ( obj = object_list; obj != NULL; obj = obj->next )
{
if ( !can_see_obj( ch, obj ) || !obj->restrung || ch->level < obj->level)
continue;
// check to see if the item shouldn't be flaged as restrung
/* if (obj->pIndexData){
if (!str_cmp(obj->short_descr,obj->pIndexData->short_descr)
&& !str_cmp(obj->name,obj->pIndexData->name)
&& !str_cmp(obj->description,obj->pIndexData->description)
&& !obj->extra_descr)
{
obj->restrung= false;
continue;
}
}
*/
found = true;
number++;
if (display_stat){
if (number==display_number){
display_obj=obj;
}
continue;
}
for ( in_obj = obj; in_obj->in_obj; in_obj = in_obj->in_obj )
;
if (obj->pIndexData){
vnum=obj->pIndexData->vnum;
}else{
vnum=-1;
}
if ( in_obj->carried_by != NULL && can_see(ch,in_obj->carried_by)
&& in_obj->carried_by->in_room != NULL)
{
sprintf( buf, "`G%3d)`x %s [%d] is \n carried by %s [Room %d]`x\r\n",
number, obj->short_descr, vnum, 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))
{
sprintf( buf, "`Y%3d)`x %s [%d] is \n in %s [Room %d]`x\r\n",
number, obj->short_descr, vnum,
in_obj->in_room->name, in_obj->in_room->vnum);
}
else
sprintf( buf, "`R%3d)`x %s [%d] is somewhere`x\r\n",
number, obj->short_descr, vnum);
buf[0] = UPPER(buf[0]);
if (!add_buf(buffer,buf))
{
ch->println( "Too many objects... buffer overflow." );
break;
}
if (number >= max_found)
{
add_buf(buffer,"Not all restrung objects are listed - due to list limit.\r\n");
break;
}
}
if(!found){
ch->println("No restrung objects are currently in the game.");
}else{
ch->sendpage(buf_string(buffer));
// rwhere searching code
if (display_stat){
if (display_obj){
ostat_show_to_char(ch, display_obj);
}else{
ch->printlnf("Didn't find restring object %d in "
"the rwhere list.", display_number);
}
}
}
free_buf(buffer);
}
/**************************************************************************/
// by Kalahn - June 98
void do_breaktell(char_data *ch, char *argument)
{
char arg[MIL];
char_data *wch;
bool found;
if (IS_NPC(ch)){
ch->println( "Players only." );
return;
}
if (IS_SET(ch->comm, COMM_WHOVIS)){
ch->println( "No point unless you are whoinvis first." );
return;
}
argument = one_argument( argument, arg );
if ( IS_NULLSTR(arg))
{
ch->println( "syntax: breaktell <playername>" );
ch->println( " or: breaktell all" );
return;
}
found=false;
if ( !str_cmp( arg, "all" ) )
{
for ( wch = player_list; wch; wch = wch->next_player )
{
if (can_see_who(wch,ch))
continue;
if (TRUE_CH(wch)->retell == ch) {
ch->printf("retell from %s disconnected.\r\n", TRUE_CH(wch)->name);
TRUE_CH(wch)->retell =NULL;
found=true;
}
if (TRUE_CH(wch)->reply == ch) {
ch->printf("reply from %s disconnected.\r\n", TRUE_CH(wch)->name);
TRUE_CH(wch)->reply =NULL;
found=true;
}
}
if (!found){
ch->println( "No one was found who can see you on the wholist,\r\n"
"that had some form of tell lock on you." );
}
return;
}
if ( ( wch= get_char_world( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if (can_see_who(wch,ch)){ // was (ch,wch)
ch->printlnf( "%s can see you on the wholist.", TRUE_CH(wch)->name );
return;
}
if (TRUE_CH(wch)->retell == ch) {
ch->printlnf( "Retell from %s disconnected.", TRUE_CH(wch)->name);
TRUE_CH(wch)->retell =NULL;
found=true;
}
if (TRUE_CH(wch)->reply == ch) {
ch->printlnf( "Reply from %s disconnected.", TRUE_CH(wch)->name);
TRUE_CH(wch)->reply =NULL;
found=true;
}
if (!found){
ch->println( "They aren't sending you retells nor replying to you." );
}
}
/**************************************************************************/
// if a player is noprayed, all their prayers are automatically ignored
// on wiznet prayers... but it appears no different to the imm
// Kalahn August 98
void do_nopray( char_data *ch, char *argument )
{
char arg[MIL], buf[MSL];
char_data *victim;
// can only be used by imms
if ( !IS_IMMORTAL(ch) )
{
do_huh(ch,"");
return;
}
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
ch->println( "Nopray whom?" );
return;
}
if ( ( victim = get_whovis_player_world( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
// can't nopray higher level imms than yourself
if ( get_trust( victim ) >= LEVEL_IMMORTAL
&& get_trust( victim ) >= get_trust( ch ) )
{
ch->println( "You failed." );
return;
}
if ( IS_SET(victim->comm, COMM_NOPRAY) )
{
REMOVE_BIT(victim->comm, COMM_NOPRAY);
logf("nopray removed on %s by %s", victim->name, ch->name);
ch->printf("nopray removed on %s - prays from them will now be heard on wiznet.\r\n", victim->name);
sprintf(buf,"$N reconnects the prayers of %s to wiznet prayers",victim->name);
wiznet(buf,ch,NULL,WIZ_PENALTIES,WIZ_SECURE,0);
}
else
{
SET_BIT(victim->comm, COMM_NOPRAY);
logf("nopray set on %s by %s", victim->name, ch->name);
ch->printf("nopray set on %s - prays from them will NOT be heard on wiznet :)\r\n", victim->name);
sprintf(buf,"$N disconnects the prayers of %s to wiznet prayers",victim->name);
wiznet(buf,ch,NULL,WIZ_PENALTIES,WIZ_SECURE,0);
}
return;
}
/**************************************************************************/
void do_noterestrict( char_data *ch, char *argument )
{
char arg[MIL], buf[MSL];
char_data *victim;
if (!IS_ADMIN(ch))
//&& !IS_SET(TRUE_CH(ch)->pcdata->council, COUNCIL_HEADLAW))
{
ch->println( "Noterestrict can only be used by an admin." );
return;
}
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
ch->wrapln( "Toggle restricted note writing on whom? (When on they can only write to imm)." );
return;
}
if ( ( victim = get_whovis_player_world( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
// can't reduce laston on high level imms than yourself
if(victim!=ch){
if ( get_trust( victim ) >= LEVEL_IMMORTAL
&& get_trust( victim ) >= get_trust( ch ) )
{
ch->println( "You failed." );
return;
}
}
if ( HAS_CONFIG(victim, CONFIG_NOTE_ONLY_TO_IMM))
{
REMOVE_CONFIG(victim, CONFIG_NOTE_ONLY_TO_IMM);
logf("noterestriction removed on %s by %s", victim->name, ch->name);
ch->printf("noterestriction removed on %s by %s\r\n", victim->name, ch->name);
sprintf(buf,"$N turned off note restriction on %s.",victim->name);
wiznet(buf,ch,NULL,WIZ_PENALTIES,WIZ_SECURE,0);
}
else
{
SET_CONFIG(victim, CONFIG_NOTE_ONLY_TO_IMM);
logf("noterestriction enabled on %s by %s", victim->name, ch->name);
ch->printf("noterestriction ebabled on %s by %s\r\n", victim->name, ch->name);
sprintf(buf,"$N turned on note restriction on %s.",victim->name);
wiznet(buf,ch,NULL,WIZ_PENALTIES,WIZ_SECURE,0);
}
save_char_obj( victim );
return;
}
/**************************************************************************/
void do_holylist(char_data *ch, char *)
{
ch->println( " action status" );
ch->println( "---------------------" );
ch->printlnf( "holylight %s",
IS_SET( TRUE_CH(ch)->act, PLR_HOLYLIGHT ) ? "ON" : "OFF" );
ch->printlnf( "holyname %s",
IS_SET( TRUE_CH(ch)->act, PLR_HOLYNAME ) ? "ON" : "OFF" );
ch->printlnf( "holyspeech %s (character dependant)",
HAS_HOLYSPEECH(ch) ? "ON" : "OFF" );
ch->printlnf( "holywalk %s",
IS_SET( TRUE_CH(ch)->act, PLR_HOLYWALK ) ? "ON" : "OFF" );
ch->printlnf( "holyvnum %s",
IS_SET( TRUE_CH(ch)->act, PLR_HOLYVNUM ) ? "ON" : "OFF" );
if(TRUE_CH(ch)->incog_level)
{
ch->printlnf( "incognito ON at %d", TRUE_CH(ch)->incog_level);
}
else
{
ch->println( "incognito OFF" );
}
ch->printlnf( "wizi %d", ch->invis_level);
if(TRUE_CH(ch)->iwizi)
{
ch->printlnf( "`RIC `xwizi ON at %d", TRUE_CH(ch)->iwizi);
}
else
{
ch->println( "`RIC `xwizi OFF" );
}
if(TRUE_CH(ch)->olcwizi)
{
ch->printlnf( "`YOLC `xwizi ON at %d", TRUE_CH(ch)->olcwizi);
}
else
{
ch->println( "`YOLC `xwizi OFF" );
}
if(TRUE_CH(ch)->owizi)
{
ch->printlnf( "`BOOC `xwizi ON at %d", TRUE_CH(ch)->owizi);
}
else
{
ch->println( "`BOOC `xwizi OFF");
}
}
/**************************************************************************/
// Kerenos November 98
void do_fadein( char_data *ch, char *argument )
{
if ( !IS_NPC( ch )) {
smash_tilde( argument );
if ( argument[0] == '\0' ) {
ch->printf("Your fadein is %s\r\n",ch->pcdata->fadein );
return;
}
free_string( ch->pcdata->fadein );
ch->pcdata->fadein = str_dup( argument );
ch->printf("Your fadein is now %s\r\n",ch->pcdata->fadein );
}
return;
}
/**************************************************************************/
// Kerenos November 98
void do_fadeout( char_data *ch, char *argument )
{
if ( !IS_NPC( ch )) {
smash_tilde( argument );
if ( argument[0] == '\0' ) {
ch->printf("Your fadeout is %s\r\n", ch->pcdata->fadeout );
return;
}
free_string( ch->pcdata->fadeout );
ch->pcdata->fadeout = str_dup( argument );
ch->printf("Your fadeout is now %s\r\n",ch->pcdata->fadeout );
}
return;
}
/**************************************************************************/
void do_strip_affects( char_data *ch, char *argument )
{
AFFECT_DATA *paf;
AFFECT_DATA *paf_next;
int sn;
char_data *victim;
char arg1[MIL];
char arg2[MIL];
argument = one_argument( argument, arg1);
argument = one_argument( argument, arg2);
if ( IS_NULLSTR( arg1 )) {
ch->println( "Syntax: stripaff <target> <all|specific spell>" );
return;
}
if (( victim = get_char_world( ch, arg1 )) == NULL ) {
ch->printlnf( "No '%s' found.", arg1 );
return;
}
if (( !str_cmp( arg2, "all" )) || ( IS_NULLSTR ( arg2 ))) {
ch->println( "All affects cleared." );
if ( str_cmp( victim->name, ch->name ))
victim->println( "Any affects upon you from the gods have been stripped away!" );
for (paf = victim->affected; paf != NULL; paf = paf_next) {
paf_next = paf->next;
affect_remove(victim, paf);
}
victim->affected = NULL;
return;
}
sn = skill_lookup(arg2);
if ( is_affected( victim, sn )) {
for (paf = victim->affected; paf !=NULL; paf=paf_next) {
paf_next = paf->next;
if ( paf->type == sn)
affect_remove(victim, paf);
}
ch->println( "Affect removed." );
if ( str_cmp( victim->name, ch->name ))
victim->println("Some of your affects have been stripped away!" );
return;
}
}
/**************************************************************************/
void do_setalliance( char_data *ch, char *argument )
{
char arg1 [MIL];
char arg2 [MIL];
char_data *victim;
int value;
smash_tilde( argument );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
ch->println( "Syntax: setalliance <name> <value>" );
ch->println( " Value being a number from -3 to 3" );
return;
}
if (( victim = get_char_world( ch, arg1 ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
// clear zones for mobs
victim->zone = NULL;
/*
* Snarf the value (which need not be numeric).
*/
value = is_number( arg2 ) ? atoi( arg2 ) : 99;
if ( value < -3 || value > 3 ) {
ch->println( "Alliance range is -3 to 3." );
return;
}
ch->printlnf( "Alliance changed from %d to %d on %s(%s)",
victim->alliance , value, victim->short_descr, victim->name);
victim->alliance = value;
return;
}
/**************************************************************************/
void do_settendency( char_data *ch, char *argument )
{
char arg1 [MIL];
char arg2 [MIL];
char_data *victim;
int value;
smash_tilde( argument );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
ch->println( "Syntax: settendency <name> <value>" );
ch->println( " Value being a number from -3 to 3" );
return;
}
if (( victim = get_char_world( ch, arg1 ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
// clear zones for mobs
victim->zone = NULL;
/*
* Snarf the value (which need not be numeric).
*/
value = is_number( arg2 ) ? atoi( arg2 ) : 99;
if ( value < -3 || value > 3 ) {
ch->println( "Tendency range is -3 to 3." );
return;
}
ch->printlnf( "Tendency changed from %d to %d on %s(%s)",
victim->tendency, value, victim->short_descr, victim->name);
victim->tendency = value;
return;
}
/**************************************************************************/
void do_dream( char_data *ch, char *argument )
{
char buf[MSL];
if( IS_AWAKE(ch)){
ch->println("You day dream a bit...\r\nTry dreaming while you are asleep.");
return;
}
if( IS_NULLSTR(argument)){
ch->println("What would you like to dream?");
return;
}
ch->printlnf( "You dream: `s%s`x", argument );
if (!IS_SET(ch->comm, COMM_NOPRAY)){
sprintf(buf,"`w%s dreams `w'`s%s`w'`x\r\n",
ch->name, argument);
wiznet(buf,NULL,NULL,WIZ_PRAYERS_DREAMS,0,AVATAR);
}
return;
}
/**************************************************************************/
void flush_cached_write_to_buffer(connection_data *d);
/**************************************************************************/
void do_rawcolour( char_data *ch, char *argument )
{
if ( IS_NULLSTR( argument ))
{
ch->println( "Rawcolour what?" );
return;
}
if(!ch->desc){
ch->println( "You must have a valid connection to use raw colour." );
return;
}
ch->println("RAWCOLOUR BEGIN.");
// condensing system has to be flushed for raw colour to work correctly
flush_cached_write_to_buffer(ch->desc);
ch->desc->parse_colour=false;
forced_interpret( ch, argument );
if(ch->desc){
flush_cached_write_to_buffer(ch->desc);
ch->desc->parse_colour=true;
ch->println("RAWCOLOUR END.");
}
}
/**************************************************************************/
void do_permrawcolour( char_data *ch, char *argument )
{
if ( str_cmp("confirm", argument)) {
ch->printf("Turns on raw colour permantantly (till use the raw command to turn it off):\r\n");
ch->printf("type 'permraw confirm' to activate.\r\n");
return;
}
if(!ch->desc){
ch->println("You must have an active connection to do this.");
return;
}
ch->println("RAWCOLOUR TURNED ON, USE ANY COMMAND WITH RAW TO TURN IT OFF OR RELOG.");
flush_cached_write_to_buffer(ch->desc);
ch->desc->parse_colour=false;
}
/**************************************************************************/
void do_showaffectprofile( char_data *ch, char *argument )
{
int index;
bool found = false;
if ( IS_NULLSTR(argument))
{
if(!codehelp(ch,"showaffectprofile", false))
{
ch->println("Syntax: showaffectprofile <profile>");
ch->println("The affectprofile must be one of the following:");
affectprofile_list( ch );
return;
}
}
if ( !is_number( argument ))
{
for ( index=0; !IS_NULLSTR(affectprofile_table[index].name);index++)
{
if ( !str_prefix( argument, affectprofile_table[index].name ))
{
found = true;
break;
}
}
if (!found)
{
ch->printf("The affectprofile must be one of the following:\r\n");
affectprofile_list( ch );
return;
}
}
else
{
index = atoi(argument);
if ( index < 0 || IS_NULLSTR(affectprofile_table[index].name))
{
ch->printf("The affectprofile must be one of the following:\r\n");
affectprofile_list( ch );
return;
}
}
makef_titlebar( "Affect Profile");
ch->printf("`=rName: `x%s\r\n", affectprofile_table[index].name );
ch->printf("`=rDesc: `x%s\r\n", affectprofile_table[index].description );
ch->printf("`=rFlags: `x%d\r\n", affectprofile_table[index].flags );
ch->printf("`=rWear Msg: `x%s\r\n",affectprofile_table[index].wear_message );
ch->printf("`=rWear Loc: `x%-15s `=rWear Amount: `x%d\r\n",
flag_string( apply_types, affectprofile_table[index].wear_location),
affectprofile_table[index].wear_amount );
ch->printf("`=rForced Drop Msg: `x%s\r\n", affectprofile_table[index].forced_drop_message );
ch->printf("`=rRemove Message: `x%s\r\n", affectprofile_table[index].remove_message );
ch->printf("\r\n == Movement Stats ==\r\n" );
ch->printf(" `=rChance: `x%-3d `=rLocation: `x%-3d `=rAmount: `x%-3d\r\n",
affectprofile_table[index].move_chance,
affectprofile_table[index].move_location,
affectprofile_table[index].move_amount );
ch->printf(" `=rMessage: `x%s\r\n", affectprofile_table[index].move_message );
ch->printf("\r\n == Tick Stats ==\r\n" );
ch->printf(" `=rChance: `x%-3d `=rLocation: `x%-3d `=rAmount: `x%-3d\r\n",
affectprofile_table[index].tick_chance,
affectprofile_table[index].tick_location,
affectprofile_table[index].tick_amount );
ch->printf(" `=rMessage: `x%s\r\n", affectprofile_table[index].tick_message );
ch->println("NOTE: The affect profile system has not been finished");
return;
}
/**************************************************************************/
void affectprofile_list( char_data *ch )
{
int index;
for(index=0; !IS_NULLSTR(affectprofile_table[index].name);index++)
{
ch->printf("%-2d %-25s - %s\r\n",
index, affectprofile_table[index].name,
affectprofile_table[index].description);
}
return;
}
/**************************************************************************/
void do_freevnum(char_data *ch, char *argument)
{
int i,j;
char arg[MIL];
if (!HAS_SECURITY(ch,1)){
ch->println("The freevnum command is an olc command, you don't have olc permissions.");
return;
}
if ( !IS_BUILDER( ch, ch->in_room->area, BUILDRESTRICT_AREA) && !IS_IMMORTAL(ch)){
ch->println("freevnum: Invalid security for viewing information about this area.");
return;
}
one_argument( argument, arg );
if ( IS_NULLSTR( arg )){
ch->printf("Syntax: freevnum <obj/mob/room>\r\n");
return;
}
j=1;
if (!str_cmp(arg,"obj"))
{
ch->titlebar("FREE OBJ VNUMS");
ch->titlebar(ch->in_room->area->name);
for (i = ch->in_room->area->min_vnum; i <= ch->in_room->area->max_vnum; i++) {
if (get_obj_index(i) == NULL) {
ch->printf("%8d ",i);
if (j == COLUMNS) {
ch->printf("\r\n" );
j=0;
}
j++;
}
}
ch->printf("`x\r\n");
return;
}
if (!str_cmp(arg,"mob"))
{
ch->titlebar("FREE MOBILE VNUMS");
ch->titlebar(ch->in_room->area->name);
for (i = ch->in_room->area->min_vnum; i <= ch->in_room->area->max_vnum; i++) {
if (get_mob_index(i) == NULL) {
ch->printf("%8d ",i);
if (j == COLUMNS) {
ch->printf("\r\n" );
j=0;
}
j++;
}
}
ch->printf("`x\r\n");
return;
}
if (!str_cmp(arg,"room"))
{
ch->titlebar("FREE ROOM VNUMS");
ch->titlebar(ch->in_room->area->name);
for (i = ch->in_room->area->min_vnum; i <= ch->in_room->area->max_vnum; i++) {
if (get_room_index(i) == NULL) {
ch->printf("%8d ",i);
if (j == COLUMNS) {
ch->printf("\r\n" );
j=0;
}
j++;
}
}
ch->printf("`x\r\n");
return;
}
ch->printf("Syntax: freevnum <obj/mob/room>\r\n");
return;
}
/**************************************************************************/
void do_removequester( char_data *ch, char *argument )
{
char arg[MIL], buf[MSL];
char_data *victim;
// can only be used by imms
if ( !IS_IMMORTAL(ch) )
{
do_huh(ch,"");
return;
}
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
ch->println( "Removequester status from whom?" );
return;
}
if ( ( victim = get_whovis_player_world( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if ( IS_SET(victim->act, PLR_QUESTER) )
{
REMOVE_BIT(victim->act, PLR_QUESTER);
logf("quester flag removed on %s by %s", victim->name, ch->name);
ch->printf("quester flag removed on %s.\r\n", victim->name);
victim->printf("Your quester flag has been removed.\r\n");
sprintf(buf,"$N removes the quester flag of %s",victim->name);
wiznet(buf,ch,NULL,WIZ_QUESTING,WIZ_SECURE,0);
}else{
ch->printf("%s didn't have the quester flag set to start with.\r\n",
PERS(victim, ch));
}
return;
}
/**************************************************************************/
void do_setdeity( char_data *ch, char *argument ) // Tibault 11/07/2000
{
char victimName[MIL];
char deityName[MIL];
char_data* victim;
DEITY_DATA* pDeity;
argument = one_argument( argument, victimName);
argument = one_argument( argument, deityName);
if ( victimName[0] == '\0' || deityName[0] == '\0' )
{
ch->println( "Syntax: `#`=Csetdeity `W<char> <deity name/none>`^." );
ch->println( "Look at `#`=Cdedit list`^ for all the existing deities." );
return;
}
if (( victim = get_char_world( ch, victimName ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if (IS_NPC(victim))
{
ch->println( "You cannot `#`=Csetdeity`^ on NPC's.");
return;
}
if (!HAS_CLASSFLAG( victim, CLASSFLAG_DEITIES ))
{
ch->println( "You can only `#`=Csetdeity`^ on classes with the `Ydeities`^ flag." );
ch->println( "This flag is set in `#`=Cclassedit`^." );
return;
}
if ( strstr(deityName, "none") != '\0' )
{
if ( victim->deity && victim->deity->name )
{
ch->printlnf( "`#`Y%s`^ no longer worships `W%s`^.", victim->name, victim->deity->name );
victim->printlnf( "%s no longer cares for you!", victim->deity->name) ;
victim->pcdata->worship_time = current_time;
victim->deity = NULL;
return;
}
else
{
ch->printlnf( "`#`Y%s`^ already doesn't worship any deity.", victim->name );
return;
}
}
if ( (pDeity = deity_lookup(deityName)) == NULL)
{
ch->printlnf( "`#`Y%s`^ is not a valid deity.", deityName);
ch->println( "Please look at `#`=Cdedit list`^ for existing deities." );
return;
}
ch->printlnf("`#`Y%s`^ worships `W%s`^ now.", victim->name, pDeity->name );
victim->deity = pDeity;
victim->pcdata->worship_time = current_time;
victim->printlnf( "You now worship %s!", pDeity->name );
return;
}
/**************************************************************************/
void do_setrace( char_data *ch, char *argument )
{
char arg [MIL];
int race;
smash_tilde( argument );
argument = one_argument( argument, arg );
if ( arg[0] == '\0' )
{
ch->printf("Syntax: setrace <race> - Note: This is a self set only command\r\n" );
return;
}
race = race_lookup(arg);
if ( race == -1)
{
ch->printlnf("'%s' is not a valid race.", arg);
return;
}
if ( !race_table[race]->pc_race() )
{
ch->printlnf("%s is not a valid player race.", race_table[race]->name );
return;
}
ch->printlnf("Your race has changed from %s to %s.",
race_table[ch->race]->name,
race_table[race]->name );
ch->race = race;
reset_char(ch); // recalc the changes
return;
}
/**************************************************************************/
// add a single person to the iwhere buffer
void add_iwhere_person(BUFFER *buffer, char_data *v, int *count, int *group)
{
char buf[MSL];
if(IS_NPC(v)){
sprintf(buf,"%s%2d) `x[%s%5d`x] %-12s `Y(in the body of %s`S%2d`Y)`x is in %s (%s%s`x)\r\n",
colour_table[((*group)%14)+1].code, *group,
colour_table[(v->in_room->vnum%14)+1].code,
v->in_room->vnum,
TRUE_CH(v)->name,v->short_descr, INVIS_LEVEL(v),
v->in_room->name,
colour_table[(v->in_room->area->vnum%14)+1].code,
v->in_room->area->name);
}else{
sprintf(buf,"%s%2d) `x[%s%5d`x] %-12s`S%2d`x is in %s (%s%s`x)\r\n",
colour_table[((*group)%14)+1].code,*group,
colour_table[(v->in_room->vnum%14)+1].code,
v->in_room->vnum, v->name,
INVIS_LEVEL(v),
v->in_room->name,
colour_table[(v->in_room->area->vnum%14)+1].code,
v->in_room->area->name);
}
++(*count);
SET_BIT(v->dyn, DYN_TEMP_FLAG);
add_buf(buffer,buf);
}
/**************************************************************************/
// adds a whole room entry to the iwhere buffer - Kal - Nov 99
void add_iwhere_room_list(char_data *looker, BUFFER *buffer, char_data *v, int *count, int *group)
{
if(!v->in_room){
bugf("add_iwhere_room_list: v->in_room==NULL, v->name==%s\r\n", v->name);
return;
}
if(!can_see_who(looker, v)){
return;
}
(*group)++;
// add the person to the list
add_iwhere_person(buffer, v, count, group);
// get all those in the room
for( char_data *rch = v->in_room->people; rch; rch = rch->next_in_room )
{
if( IS_SET(rch->dyn, DYN_TEMP_FLAG)
|| IS_UNSWITCHED_MOB(rch)
|| !can_see_who(looker, rch)){
continue;
};
add_iwhere_person(buffer, rch, count, group);
}
}
/**************************************************************************/
// immortal where - Kal - Nov 99
// shows where imms are, and any morts in the room, including switches
void do_iwhere( char_data *ch, char *)
{
BUFFER *buffer;
char_data *vch;
int count=0;
int group=0;
char buf[MSL];
buffer = new_buf();
add_buf(buffer,"`=t`#"); // get the set colour
sprintf( buf, "`^%s`x", makef_titlebar("IMMORTAL WHERE`^"));
add_buf(buffer,buf);
// turn off everyones DYN_TEMP_FLAG
for ( vch = char_list; vch; vch = vch->next)
{
REMOVE_BIT(vch->dyn, DYN_TEMP_FLAG);
if(vch->controlling){
REMOVE_BIT(vch->controlling->dyn, DYN_TEMP_FLAG);
}
}
for ( vch = char_list; vch; vch = vch->next)
{
// dont directly list morts or those already list
if(IS_SET(vch->dyn, DYN_TEMP_FLAG) || !IS_IMMORTAL(vch)){
continue;
};
add_iwhere_room_list(ch, buffer, vch, &count, &group);
// switched imm in a room that hasn't been processed yet
if(vch->controlling && !IS_SET(vch->controlling->dyn, DYN_TEMP_FLAG)){
add_iwhere_room_list(ch, buffer, vch->controlling, &count, &group);
}
}
sprintf( buf, "`^%s`x", makef_titlebar("%d TOTAL`^", count));
add_buf(buffer,buf);
ch->sendpage(buf_string(buffer));
free_buf(buffer);
return;
}
/**************************************************************************/
void do_pracsystester( char_data *ch, char *argument )
{
char arg[MIL];
char_data *victim;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
ch->printf("Set whom as a prac/improve system tester?\r\n");
ch->printf("Dont put this on players unless you know what you are doing.\r\n");
return;
}
if ( ( victim = get_whovis_player_world( ch, arg ) ) == NULL )
{
ch->println( "They aren't here." );
return;
}
if ( HAS_CONFIG(victim,CONFIG_PRACSYS_TESTER))
{
REMOVE_CONFIG(victim,CONFIG_PRACSYS_TESTER);
ch->printf("%s is no longer a prac system tester.\r\n", victim->name);
}
else
{
SET_CONFIG(victim,CONFIG_PRACSYS_TESTER);
ch->printf("%s is no a prac system tester.\r\n", victim->name);
}
save_char_obj( victim );
return;
}
/**************************************************************************/
void do_forcetime( char_data *ch, char * )
{
time_info.minute = 59;
ch->println("Minutes set to 59.");
ch->printlnf( "WEATHER - Change %d Mage Castmod %d MMHG %d Moon Bright %d Sky %d Sunlight %d",
weather_info[ch->in_room->sector_type].change,
weather_info[ch->in_room->sector_type].mage_castmod,
weather_info[ch->in_room->sector_type].mmhg,
weather_info[ch->in_room->sector_type].moon_getting_brighter,
weather_info[ch->in_room->sector_type].sky,
weather_info[ch->in_room->sector_type].sunlight );
}
/**************************************************************************/
void do_webpass( char_data *ch, char *argument )
{
if(IS_NPC(ch)){
ch->println("Players only sorry!");
return;
}
if(IS_NULLSTR(argument)){
ch->println( "This command sets your password for the webpage." );
ch->println( "Syntax: webpass <password>");
return;
}
if(str_len(argument )>=25){
ch->println("Password must be less than 25 characters.");
return;
}
char *new_pass=dot_crypt(argument, ch->name);
if(count_char(new_pass, '~')!=0){
ch->println("The new password is not suitable, try another.");
return;
}
ch->println("Web password set.");
replace_string(ch->pcdata->webpass, new_pass);
laston_update_char(ch);
save_char_obj(ch);
}
/**************************************************************************/
// Take an object off a player, regardless of if it is no remove etc.
// - Balo/Kal, Sept 01
void do_immget(char_data *ch,char *argument)
{
char_data *victim;
obj_data *obj;
char arg1[MIL];
char buf[MSL];
buf[0] = '\0';
bool found = false;
argument = one_argument(argument,arg1);
// unswitched mobs can't use this command
if(IS_UNSWITCHED_MOB(ch)){
ch->println( "Players or switched players only." );
return;
}
if(IS_NULLSTR(arg1)){
ch->println("Syntax:");
ch->println("immget <char|mob> <item>");
ch->wrapln("Takes an object off a player/mob, if they are actually using the item."
" The first time the command is used, it will unequip them, the second time "
"it will actually take the item.");
return;
}
if((victim = get_char_room(ch,arg1)) == NULL){
ch->printlnf("There is no mob/player called '%s' here.", arg1);
return;
}
if(!IS_NPC(victim) && IS_TRUSTED(victim, get_trust(ch))){
ch->println("They are too high level for you to do that.");
return;
}
for(obj = victim->carrying; obj; obj = obj->next_content ){
if ( is_name( argument, obj->name )
&& can_see_obj( ch, obj ))
{
found = true;
break;
}
}
if(!found){
ch->printlnf("%s doesn't have any '%s' item.", PERS(victim, ch), argument );
return;
}
if( obj->wear_loc != WEAR_NONE ){
ch->printlnf("%s is currently using %s", PERS(victim, ch), obj->short_descr);
ch->wraplnf("Unequiping it from them into their inventory... "
"if you want to take it off them, use immget once more.");
unequip_char(victim, obj);
victim->printlnf("%s has just unequiped %s from you, into your inventory.",ch->name,obj->short_descr);
return;
}
obj_from_char( obj );
obj_to_char( obj, ch );
ch->printlnf("You have taken %s from %s.", obj->short_descr, PERS(victim, ch));
victim->printlnf("%s has taken %s from you.",ch->name,obj->short_descr);
}
/**************************************************************************/
// turn on/off the prompt switch prefix
void do_switchprefix( char_data *ch, char *argument )
{
if(!IS_SWITCHED(ch)){
ch->wrapln("This command is used to turn on/off the prefix to "
"your prompt that is displayed while you are switched. It has "
"no effect while you aren't switched.");
return;
}
if(IS_SET(TRUE_CH(ch)->dyn, DYN_NO_PROMPT_SWITCHED_PREFIX)){
REMOVE_BIT(TRUE_CH(ch)->dyn, DYN_NO_PROMPT_SWITCHED_PREFIX);
ch->println("The switch prefix on your prompt is now displayed.");
}else{
SET_BIT(TRUE_CH(ch)->dyn, DYN_NO_PROMPT_SWITCHED_PREFIX);
ch->println("The switch prefix on your prompt is no longer displayed.");
}
}
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/