#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "rok.h"
bool check_disabled (const struct cmd_type *command);
BAN_DATA *ban_first;
DISABLED_DATA *disabled_first;
#define END_MARKER "END" /* for load_disabled() and save_disabled()*/
void do_class( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char arg1 [MAX_INPUT_LENGTH];
char arg2 [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( IS_NPC(ch) ) return;
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char( "Syntax: class <char> <class>.\n\r", ch );
send_to_char(" Classes:\n\r", ch );
send_to_char("None, ", ch);
send_to_char("Demon, ", ch);
send_to_char("Demon Lord, ", ch);
send_to_char("Purple Mage, Blue Mage, Yellow Mage, Green Mage, Red Mage, ", ch);
send_to_char( "Vampire, ", ch);
send_to_char("Werewolf, ", ch);
send_to_char("Highlander, ", ch);
send_to_char("Ninja, ", ch);
send_to_char("Battlerager, ", ch);
return;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
send_to_char( "That player is not here.\n\r", ch);
return;
}
if ( !str_cmp( arg2, "none" ) )
{
/* Used to make sure the person has enough "stuff" to change */
victim->pcdata->condition[COND_THIRST] = 10000;
victim->move = 10000;
victim->mana = 10000;
if ( IS_CLASS(victim, CLASS_WEREWOLF)
|| IS_CLASS(victim, CLASS_VAMPIRE) ) do_unwerewolf(victim,"");
if (IS_VAMPAFF(victim,VAM_DISGUISED) ) do_mask(victim,"self");
victim->pcdata->stats[UNI_FORM0] = 0;
/* All classes in general */
if (IS_VAMPAFF(victim,VAM_FANGS) )
{
send_to_char("Your fangs slide back into your gums.\n\r",victim);
act("$N's fangs slide back into $s gums.", ch, NULL, victim, TO_ROOM);
REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FANGS);
}
if (IS_CLASS(victim, CLASS_VAMPIRE) && IS_VAMPAFF(victim,VAM_CLAWS) )
{
send_to_char("Your claws slide back under your nails.\n\r",victim);
act("$N's claws slide back under $s nails.", ch, NULL, victim, TO_ROOM);
REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
}
else if (IS_CLASS(victim, CLASS_WEREWOLF) && IS_VAMPAFF(victim,VAM_CLAWS) )
{
send_to_char("Your talons slide back into your fingers.\n\r",victim);
act("$N's talons slide back into $s fingers.",ch,NULL,victim,TO_ROOM);
REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CLAWS);
}
if (IS_VAMPAFF(victim,VAM_NIGHTSIGHT) )
{
send_to_char("The red glow in your eyes fades.\n\r",victim);
act("The red glow in $N's eyes fades.", ch, NULL, victim, TO_ROOM);
REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
}
if (IS_AFFECTED(victim,AFF_SHADOWSIGHT) )
{
send_to_char("You can no longer see between planes.\n\r",victim);
REMOVE_BIT(victim->affected_by, AFF_SHADOWSIGHT);
}
if (IS_IMMUNE(victim,IMM_SHIELDED) )
{
send_to_char("You stop shielding your aura.\n\r",victim);
REMOVE_BIT(victim->immune, IMM_SHIELDED);
}
if (IS_VAMPAFF(victim,VAM_DISGUISED) )
{
free_string( victim->morph );
victim->morph = str_dup( victim->name );
send_to_char("You transform into yourself.\n\r", victim);
REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_DISGUISED);
}
if (IS_AFFECTED(victim,AFF_SHADOWPLANE) )
{
send_to_char("You fade back into the real world.\n\r",victim);
act("The shadows flicker and $N fades into existance.",ch,NULL,victim,TO_ROOM);
REMOVE_BIT(victim->affected_by,AFF_SHADOWPLANE);
do_look(ch,"auto");
}
if (IS_SET(victim->act, PLR_WIZINVIS) )
{
REMOVE_BIT(victim->act, PLR_WIZINVIS);
send_to_char( "You slowly fade into existence.\n\r", victim );
}
if (IS_SET(victim->act, PLR_HOLYLIGHT) )
{
REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
send_to_char( "Your senses return to normal.\n\r", victim );
}
/* Demon Stuff */
if (IS_DEMAFF(victim,DEM_HORNS) && IS_CLASS(victim, CLASS_DEMON) )
{
send_to_char("Your horns slide back into your head.\n\r",victim);
act("$N's horns slide back into $s head.", ch, NULL, victim, TO_ROOM);
REMOVE_BIT(victim->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
}
if (IS_DEMAFF(victim,DEM_HOOVES) && IS_CLASS(victim, CLASS_DEMON) )
{
send_to_char("Your hooves transform into feet.\n\r",victim);
act("$N's hooves transform back into $s feet.", ch, NULL,victim,TO_ROOM);
REMOVE_BIT(victim->pcdata->powers[DPOWER_CURRENT], DEM_HOOVES);
}
if (IS_DEMAFF(victim,DEM_WINGS) && IS_CLASS(victim, CLASS_DEMON) )
{
if (IS_DEMAFF(victim,DEM_UNFOLDED) && IS_CLASS(victim, CLASS_DEMON) )
{
send_to_char("Your wings fold up behind your back.\n\r",victim);
act("$N's wings fold up behind $s back.", ch, NULL, victim, TO_ROOM);
REMOVE_BIT(victim->pcdata->powers[DPOWER_CURRENT], DEM_UNFOLDED);
}
send_to_char("Your wings slide into your back.\n\r",victim);
act("$N's wings slide into $s back.", ch, NULL, victim, TO_ROOM);
REMOVE_BIT(victim->pcdata->powers[DPOWER_CURRENT], DEM_WINGS);
}
if ( IS_EXTRA(victim, EXTRA_OSWITCH) )
{
do_humanform(victim,"");
}
REMOVE_BIT(victim->special, SPC_CHAMPION );
REMOVE_BIT(victim->special, SPC_INCONNU );
REMOVE_BIT(victim->special, SPC_ANARCH );
REMOVE_BIT(victim->special, SPC_DEMON_LORD);
REMOVE_BIT(victim->affected_by, AFF_POLYMORPH);
REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_CHANGED);
REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_MIST);
REMOVE_BIT(victim->affected_by, AFF_ETHEREAL);
REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_FLYING);
REMOVE_BIT(victim->pcdata->stats[UNI_AFF], VAM_SONIC);
REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_BAT);
REMOVE_BIT(victim->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);
victim->pcdata->powers[DPOWER_FLAGS] = 0;
victim->pcdata->stats[DEMON_TOTAL] = 0;
victim->pcdata->stats[DEMON_CURRENT] = 0;
victim->pcdata->powers[1] = 0;
victim->pcdata->condition[COND_THIRST] = 0;
victim->move = victim->max_move;
victim->mana = victim->max_mana;
victim->hit = victim->max_hit;
victim->pcdata->rank = 0;
free_string(victim->lord);
victim->lord = str_dup( "" );
victim->pcdata->stats[UNI_GEN] = 0;
victim->pcdata->stats[UNI_AFF] = 0;
victim->pcdata->stats[UNI_CURRENT] = -1;
victim->beast = 15;
victim->special = 0;
victim->class = 0;
if (victim->trust < 7)
victim->trust = 0;
victim->level = 2;
send_to_char("You are classless now!\n\r", victim);
}
else if ( !str_cmp( arg2, "demon" ) )
{
victim->class = CLASS_DEMON;
SET_BIT(victim->special, SPC_CHAMPION);
send_to_char("You are now a demon!\n\r", victim);
}
else if ( !str_cmp( arg2, "dlord" ))
{
victim->class = CLASS_DEMON;
SET_BIT(victim->special, SPC_DEMON_LORD);
victim->level = 3;
send_to_char("You are now a demon!\n\r", victim);
}
else if ( !str_cmp( arg2, "purplemage" ) )
{
victim->class = 2;
if ( victim->trust > 6 )
{
victim->trust = victim->trust;
}
else
{
victim->trust = 6;
}
victim->level = 6;
victim->pcdata->powers[MPOWER_RUNE0] = 0;
victim->pcdata->powers[MPOWER_RUNE1] = 2047;
victim->pcdata->powers[MPOWER_RUNE2] = 1023;
victim->pcdata->powers[MPOWER_RUNE3] = 15;
send_to_char("You are now a purple mage!\n\r", victim);
}
else if ( !str_cmp( arg2, "redmage" ) )
{
victim->class = 2;
if ( victim->trust > 6 )
{
victim->trust=victim->trust;
}
else
{
victim->trust = 6;
}
victim->level = 6;
victim->pcdata->powers[MPOWER_RUNE0] = 1;
victim->pcdata->powers[MPOWER_RUNE1] = 2047;
victim->pcdata->powers[MPOWER_RUNE2] = 1023;
victim->pcdata->powers[MPOWER_RUNE3] = 15;
send_to_char("You are now a red mage!\n\r", victim);
}
else if ( !str_cmp( arg2, "yellowmage" ) )
{
victim->class = 2;
if ( victim->trust > 6 )
{
victim->trust=victim->trust;
}
else
{
victim->trust = 6;
}
victim->level = 6;
victim->pcdata->powers[MPOWER_RUNE0] = 4;
victim->pcdata->powers[MPOWER_RUNE1] = 2047;
victim->pcdata->powers[MPOWER_RUNE2] = 1023;
victim->pcdata->powers[MPOWER_RUNE3] = 15;
send_to_char("You are now a yellow mage!\n\r", victim);
}
else if ( !str_cmp( arg2, "bluemage" ) )
{
victim->class = 2;
if ( victim->trust > 6 )
{
victim->trust=victim->trust;
}
else
{
victim->trust = 6;
}
victim->level = 6;
victim->pcdata->powers[MPOWER_RUNE0] = 2;
victim->pcdata->powers[MPOWER_RUNE1] = 2047;
victim->pcdata->powers[MPOWER_RUNE2] = 1023;
victim->pcdata->powers[MPOWER_RUNE3] = 15;
send_to_char("You are now a blue mage!\n\r", victim);
}
else if ( !str_cmp( arg2, "greenmage" ) )
{
victim->class = 2;
if ( victim->trust > 6 )
{
victim->trust=victim->trust;
}
else
{
victim->trust = 6;
}
victim->level = 6;
victim->pcdata->powers[MPOWER_RUNE0] = 3;
victim->pcdata->powers[MPOWER_RUNE1] = 2047;
victim->pcdata->powers[MPOWER_RUNE2] = 1023;
victim->pcdata->powers[MPOWER_RUNE3] = 15;
send_to_char("You are now a green mage!\n\r", victim);
}
else if ( !str_cmp( arg2, "werewolf" ) )
{
victim->class = CLASS_WEREWOLF;
victim->pcdata->stats[UNI_GEN] = 0;
send_to_char("You are now a werewolf!\n\r", victim);
}
else if ( !str_cmp( arg2, "vampire" ) )
{
victim->class = CLASS_VAMPIRE;
victim->pcdata->stats[UNI_GEN] = 0;
victim->beast = 15;
send_to_char("You are now a vampire!\n\r", victim);
}
else if ( !str_cmp( arg2, "highlander" ) )
{
victim->class = 16;
victim->level = 3;
send_to_char("You are now a highlander!\n\r", victim);
}
else if ( !str_cmp( arg2, "battlerager" ) )
{
victim->class = 64;
victim->level = 3;
send_to_char("You are now a battlerager!\n\r", victim);
}
else if ( !str_cmp( arg2, "ninja" ) )
{
victim->class = 32;
victim->level = 3;
send_to_char("You are now a ninja!\n\r", victim);
}
else
{
send_to_char( "Syntax: class <char> <class>.\n\r", ch );
send_to_char(" Classes:\n\r", ch );
send_to_char("None, ", ch);
send_to_char("Demon, ", ch);
send_to_char("Demon Lord,", ch);
send_to_char("Purple Mage, Blue Mage, Yellow Mage, \n\rGreen Mage, Red Mage, ", ch);
send_to_char("Werewolf, ", ch);
send_to_char("Vampire, ", ch);
send_to_char("Highlander, ", ch);
send_to_char("Battlerager, ", ch);
send_to_char("Ninja,", ch);
return;
}
send_to_char("Class Set.\n\r",ch);
return;
}
void do_dagger( CHAR_DATA *ch, char *argument )
{
OBJ_DATA *obj;
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_NINJA))
{
send_to_char("Huh?\n\r",ch);
return;
}
if ( 60 > ch->practice)
{
send_to_char("It costs 60 points of primal to create a ninjitsu dagger.\n\r",ch);
return;
}
ch->practice -= 60;
obj = create_object(get_obj_index(29700) ,0 );
obj->level = 70;
obj_to_char(obj, ch);
act("A ninjitsu dagger appears in your hands in a flash of light.",ch,NULL,NULL,TO_CHAR);
act("A ninjitsu dagger appears in $n's hands in a flash of light.",ch,NULL,NULL,TO_ROOM);
return;
}
void do_sword( CHAR_DATA *ch, char *argument )
{
OBJ_DATA *obj;
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_NINJA))
{
send_to_char("Huh?\n\r",ch);
return;
}
if ( 60 > ch->practice)
{
send_to_char("It costs 60 points of primal to create a ninjitsu sword.\n\r",ch);
return;
}
ch->practice -= 60;
obj = create_object(get_obj_index(29701) ,0 );
obj->level = 70;
obj_to_char(obj, ch);
act("A ninjitsu sword appears in your hands in a flash of light.",ch,NULL,NULL,TO_CHAR);
act("A ninjitsu sword appears in $n's hands in a flash of light.",ch,NULL,NULL,TO_ROOM);
return;
}
void stc( const char *txt, CHAR_DATA *ch )
{
const char *point;
char *point2;
char buf[ MAX_STRING_LENGTH*4 ];
int skip = 0;
buf[0] = '\0';
point2 = buf;
if( txt && ch->desc )
{
if( IS_SET( ch->act, PLR_COLOUR ) )
{
for( point = txt ; *point ; point++ )
{
if( *point == '{' )
{
point++;
skip = colour( *point, ch, point2 );
while( skip-- > 0 )
++point2;
continue;
}
*point2 = *point;
*++point2 = '\0';
}
*point2 = '\0';
write_to_buffer( ch->desc, buf, point2 - buf );
}
else
{
for( point = txt ; *point ; point++ )
{
if( *point == '{' )
{
point++;
continue;
}
*point2 = *point;
*++point2 = '\0';
}
*point2 = '\0';
write_to_buffer( ch->desc, buf, point2 - buf );
}
}
return;
}
/*by Xkilla*/
char * plr_bit_name( int arg )
{
static char buf[512];
buf[0] = '\0';
if ( arg & PLR_IS_NPC ) strcat( buf, " npc" );
if ( arg & PLR_AUTOEXIT ) strcat( buf, " autoexit" );
if ( arg & PLR_AUTOLOOT ) strcat( buf, " autoloot" );
if ( arg & PLR_AUTOSAC ) strcat( buf, " autosac" );
if ( arg & PLR_BLANK ) strcat( buf, " blank" );
if ( arg & PLR_BRIEF ) strcat( buf, " brief" );
if ( arg & PLR_COMBINE ) strcat( buf, " combine" );
if ( arg & PLR_PROMPT ) strcat( buf, " prompt" );
if ( arg & PLR_TELNET_GA ) strcat( buf, " telnet_ga" );
if ( arg & PLR_HOLYLIGHT ) strcat( buf, " holylight" );
if ( arg & PLR_WIZINVIS ) strcat( buf, " wizinvis" );
if ( arg & PLR_INCOG ) strcat( buf, " incog" );
if ( arg & PLR_ANSI ) strcat( buf, " ansi" );
if ( arg & PLR_SILENCE ) strcat( buf, " silenced" );
if ( arg & PLR_NO_TELL ) strcat( buf, " no_tell" );
if ( arg & PLR_LOG ) strcat( buf, " log" );
if ( arg & PLR_FREEZE ) strcat( buf, " freeze" );
if ( arg & PLR_GODLESS ) strcat( buf, " godless" );
return ( buf[0] != '\0' ) ? buf+1 : "none";
}
char * extra_plr_bit_name( int arg )
{
static char buf[512];
buf[0] = '\0';
if ( arg & EXTRA_TRUSTED ) strcat( buf, " q_trusted" );
if ( arg & EXTRA_NEWPASS ) strcat( buf, " newpass" );
if ( arg & EXTRA_OSWITCH ) strcat( buf, " oswitch" );
if ( arg & EXTRA_SWITCH ) strcat( buf, " switch" );
if ( arg & EXTRA_FAKE_CON ) strcat( buf, " fake_con" );
if ( arg & TIED_UP ) strcat( buf, " tied_up" );
if ( arg & GAGGED ) strcat( buf, " gagged" );
if ( arg & BLINDFOLDED ) strcat( buf, " blindfolded" );
if ( arg & EXTRA_DONE ) strcat( buf, " non_virgin" );
if ( arg & EXTRA_EXP ) strcat( buf, " got_exp" );
if ( arg & EXTRA_PREGNANT ) strcat( buf, " pregnant" );
if ( arg & EXTRA_LABOUR ) strcat( buf, " labour" );
if ( arg & EXTRA_BORN ) strcat( buf, " born" );
if ( arg & EXTRA_PROMPT ) strcat( buf, " prompt" );
if ( arg & EXTRA_MARRIED ) strcat( buf, " married" );
if ( arg & EXTRA_CALL_ALL ) strcat( buf, " call_all" );
return ( buf[0] != '\0' ) ? buf+1 : "none";
}
char * get_position_name( int arg )
{
switch( arg )
{
case 0: return "dead";
case 1: return "mortal";
case 2: return "incap";
case 3: return "stunned";
case 4: return "sleeping";
case 5: return "meditating";
case 6: return "sitting";
case 7: return "resting";
case 8: return "fighting";
case 9: return "standing";
}
bug( "Get_position_name: unknown type %d.", arg );
return "(unknown)";
}
/*
* Itemaffect bit names :)
*/
char * itemaffect_bit_name( int arg )
{
static char buf[512];
buf[0] = '\0';
if ( arg & ITEMA_SHOCKSHIELD ) strcat( buf, " Shockshield" );
if ( arg & ITEMA_FIRESHIELD ) strcat( buf, " Fireshield" );
if ( arg & ITEMA_ICESHIELD ) strcat( buf, " Iceshield" );
if ( arg & ITEMA_ACIDSHIELD ) strcat( buf, " Acidshield" );
if ( arg & ITEMA_DBPASS ) strcat( buf, " Pass Door" );
if ( arg & ITEMA_CHAOSSHIELD ) strcat( buf, " Chaoshield" );
if ( arg & ITEMA_ARTIFACT ) strcat( buf, " Artifact" );
if ( arg & ITEMA_REGENERATE ) strcat( buf, " Regeneration" );
if ( arg & ITEMA_SPEED ) strcat( buf, " Speed" );
if ( arg & ITEMA_VORPAL ) strcat( buf, " Vorpal" );
if ( arg & ITEMA_PEACE ) strcat( buf, " Peace" );
if ( arg & ITEMA_RIGHT_SILVER ) strcat( buf, " Right Silver" );
if ( arg & ITEMA_LEFT_SILVER ) strcat( buf, " Left Silver" );
if ( arg & ITEMA_REFLECT ) strcat( buf, " Darkshield" );
if ( arg & ITEMA_RESISTANCE ) strcat( buf, " Resistance" );
if ( arg & ITEMA_VISION ) strcat( buf, " Vision" );
if ( arg & ITEMA_STALKER ) strcat( buf, " Stalker" );
if ( arg & ITEMA_VANISH ) strcat( buf, " Vanish" );
if ( arg & ITEMA_RAGER ) strcat( buf, " Rager" );
return ( buf[0] != '\0' ) ? buf+1 : "none";
}
void do_pstat ( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
CHAR_DATA *victim;
argument = one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char("Pstat whom?\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
send_to_char("They aren't here.\n\r", ch );
return;
}
if ( !IS_NPC( victim ) && IS_SET( victim->act, PLR_GODLESS ) &&
get_trust( ch ) < NO_GODLESS )
{
send_to_char( "You failed.\n\r", ch );
return;
}
sprintf( buf, "Name : %s.\n\r",
IS_NPC( victim ) ? victim->short_descr : victim->name );
send_to_char( buf, ch );
sprintf( buf, "Sex : %s. Room : %d. Align : %d. Primal : %d. Quest : %d.\n\r",
victim->sex == SEX_MALE ? "Male" :
victim->sex == SEX_FEMALE ? "Female" : "None",
victim->in_room == NULL ? 0 : victim->in_room->vnum,
victim->alignment,
victim->practice,
IS_NPC( victim ) ? 0 : victim->pcdata->quest
);
send_to_char( buf, ch );
sprintf( buf, "Level : %d. Trust : %d. Gold : %d. Exp : %d.\n\r",
victim->level,
victim->trust,
victim->gold,
victim->exp );
send_to_char( buf, ch );
sprintf( buf, "Hit : %d. Dam : %d. AC : %d. Position : %s\n\r",
char_hitroll( victim ),
char_damroll( victim ),
char_ac( victim ),
capitalize( get_position_name( victim->position ) ));
send_to_char( buf, ch );
sprintf( buf, "HP %d/%d. Mana %d/%d. Move %d/%d.\n\r",
victim->hit, victim->max_hit,
victim->mana, victim->max_mana,
victim->move, victim->max_move );
send_to_char( buf, ch );
sprintf( buf, "Str: %d. Int: %d. Wis: %d. Dex: %d. Con: %d.\n\r",
get_curr_str(victim),
get_curr_int(victim),
get_curr_wis(victim),
get_curr_dex(victim),
get_curr_con(victim) );
send_to_char( buf, ch );
sprintf( buf, "Fighting : %s. (%d)\n\r",
victim->fighting ? victim->fighting->name : "(None)",
victim->fighting ? victim->fighting->level : 0 );
send_to_char( buf, ch );
sprintf( buf, "Pkill : %d. Pdeath : %d. Mkill : %d. Mdeath : %d.\n\r",
IS_NPC( victim ) ? 0 : victim->pkill,
IS_NPC( victim ) ? 0 : victim->pdeath,
IS_NPC( victim ) ? 0 : victim->mkill,
IS_NPC( victim ) ? 0 : victim->mdeath );
send_to_char( buf, ch );
sprintf( buf, "TotExp : %12d. TotMobLev : %10d. TotQuestPoints : %10d.\n\r",
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_TOTAL_XP],
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_TOTAL_LEVEL],
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_QUEST] );
send_to_char( buf, ch );
sprintf( buf, "HighExp : %12d. HighMobLev : %10d. TotQuests : %10d.\n\r",
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_HIGH_XP],
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_HIGH_LEVEL],
IS_NPC( victim ) ? 0 : victim->pcdata->score[SCORE_NUM_QUEST] );
send_to_char( buf, ch );
if ( !IS_NPC( victim ) )
{
sprintf( buf, "Unarmed : %4d.", victim->wpn[0] );
send_to_char( buf, ch );
sprintf( buf, " Slice : %4d.", victim->wpn[1] );
send_to_char( buf, ch );
sprintf( buf, " Stab : %4d.", victim->wpn[2] );
send_to_char( buf, ch );
sprintf( buf, " Slash : %4d.", victim->wpn[3] );
send_to_char( buf, ch );
sprintf( buf, " Whip : %4d.\n\r", victim->wpn[4] );
send_to_char( buf, ch );
sprintf( buf, "Claw : %4d.", victim->wpn[5] );
send_to_char( buf, ch );
sprintf( buf, " Blast : %4d.", victim->wpn[6] );
send_to_char( buf, ch );
sprintf( buf, " Pound : %4d.", victim->wpn[7] );
send_to_char( buf, ch );
sprintf( buf, " Crush : %4d.", victim->wpn[8] );
send_to_char( buf, ch );
sprintf( buf, " Grep : %4d.\n\r", victim->wpn[9] );
send_to_char( buf, ch );
sprintf( buf, "Bite : %4d.", victim->wpn[10] );
send_to_char( buf, ch );
sprintf( buf, " Pierce : %4d.", victim->wpn[11] );
send_to_char( buf, ch );
sprintf( buf, " Suck : %4d.\n\r",victim->wpn[12] );
send_to_char( buf, ch );
sprintf( buf, "%-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d.\n\r",
"Purple", victim->spl[PURPLE_MAGIC],
"Red", victim->spl[RED_MAGIC],
"Blue", victim->spl[BLUE_MAGIC],
"Green", victim->spl[GREEN_MAGIC],
"Yellow", victim->spl[YELLOW_MAGIC] );
send_to_char( buf, ch );
sprintf( buf, "%-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %3d.\n\r",
"Viper", victim->stance[STANCE_VIPER],
"Crane", victim->stance[STANCE_CRANE],
"Crab", victim->stance[STANCE_CRAB],
"Mongoose", victim->stance[STANCE_MONGOOSE],
"Bull", victim->stance[STANCE_BULL] );
send_to_char( buf, ch );
sprintf( buf, "%-8s : %3d. %-8s : %3d. %-8s : %3d. %-8s : %-3d. %-8s : %3d.\n\r",
"Mantis", victim->stance[STANCE_MANTIS],
"Dragon", victim->stance[STANCE_DRAGON],
"Tiger", victim->stance[STANCE_TIGER],
"Monkey", victim->stance[STANCE_MONKEY],
"Swallow", victim->stance[STANCE_SWALLOW] );
send_to_char( buf, ch );
sprintf( buf, "Act : %s\n\r", plr_bit_name(victim->act ));
send_to_char( buf, ch );
sprintf( buf, "Extra : %s\n\r",
victim->extra <= 0 ? "(None)" : extra_plr_bit_name( victim->extra ) );
send_to_char( buf, ch );
sprintf( buf, "ItemAff : %s\n\r",
victim->itemaffect <= 0 ? "(None)" : itemaffect_bit_name(victim->itemaffect ) );
send_to_char( buf, ch );
sprintf( buf, "Affected by : %s.\n\r",
affect_bit_name( victim->affected_by ) );
send_to_char( buf, ch );
return;
}
}
void do_system( CHAR_DATA *ch, char *argument )
{
DESCRIPTOR_DATA *d;
char buf[MAX_STRING_LENGTH];
sprintf(buf,"%s: System: %s",ch->name,argument);
if (ch->level < NO_WATCH) do_watching(ch,buf);
if ( argument[0] == '\0' )
{
send_to_char( "System: NULL DATA\n\r", ch );
return;
}
for ( d = descriptor_list; d != NULL; d = d->next )
{
if ( d->connected == CON_PLAYING )
{
send_to_char( "#i#1Sys#2tem#n#4:", d->character);
send_to_char( argument, d->character );
send_to_char( "\n\r", d->character );
}
}
return;
}
void do_undeny( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
char *oldname;
CHAR_DATA *victim;
DESCRIPTOR_DATA *d;
ROOM_INDEX_DATA *in_room;
sprintf(buf,"%s: Undeny %s",ch->name,argument);
if (ch->level < NO_WATCH) do_watching(ch,buf);
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Undeny whom?", ch );
return;
}
if ((victim = get_char_world(ch, arg)) != NULL) {
send_to_char("They are already online.\n\r", ch );
return;}
if (!char_exists(FALSE,arg))
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
oldname = str_dup(ch->name);
d = ch->desc;
do_autosave(ch,"");
in_room = ch->in_room;
extract_char(ch, TRUE);
d->character = NULL;
load_char_obj(d, arg);
ch = d->character;
ch->next = char_list;
char_list = ch;
char_to_room(ch,in_room);
if ( IS_SET(ch->act, PLR_DENY) )
{
REMOVE_BIT(ch->act, PLR_DENY);
send_to_char( "DENY removed.\n\r", ch );
} else {
send_to_char("They are not DENIED.\n\r", ch ); }
d = ch->desc;
do_autosave(ch,"");
in_room = ch->in_room;
extract_char(ch, TRUE);
d->character = NULL;
load_char_obj(d, oldname);
ch = d->character;
ch->next = char_list;
char_list = ch;
char_to_room(ch,in_room);
return;
}
void set_switchname( CHAR_DATA *ch, char *title )
{
char buf[MAX_STRING_LENGTH];
if ( IS_NPC(ch) )
{
bug( "Set_switchname: NPC.", 0 );
return;
}
strcpy( buf, title );
free_string( ch->pcdata->switchname );
ch->pcdata->switchname = str_dup( buf );
return;
}
void set_pc_name( CHAR_DATA *ch, char *title )
{
char buf[MAX_STRING_LENGTH];
if ( IS_NPC(ch) )
{
bug( "Set_pc_name: NPC.", 0 );
return;
}
strcpy( buf, title );
free_string( ch->name);
ch->name = str_dup( buf );
return;
}
void reset_weapon( CHAR_DATA *ch, int dtype )
{
if ( ch->wpn[dtype] > 200 )
ch->wpn[dtype] = 200;
return;
}
void reset_spell( CHAR_DATA *ch, int dtype )
{
if ( ch->spl[dtype] > 200 )
ch->spl[dtype] = 200;
return;
}
void do_checkstats(CHAR_DATA *ch, char *argument)
{
DESCRIPTOR_DATA *d;
if (IS_NPC(ch))
{
send_to_char("Switch Back!\r\n", ch);
return;
}
send_to_char("Name Lvl Tst Class Gen Hit Mana Move HR DR AC QC QP\r\n", ch);
for (d = descriptor_list; d!=NULL; d = d->next)
{
char buf[MAX_STRING_LENGTH];
CHAR_DATA *wch;
char *class;
if (d->connected != CON_PLAYING) continue;
wch = (d->original != NULL) ? d->original : d->character;
if (IS_CLASS(wch, CLASS_DEMON))
class = "Demon";
else if (IS_CLASS(wch, CLASS_VAMPIRE))
class = "Vamp";
else if (IS_CLASS(wch, CLASS_WEREWOLF))
class = "Wolf";
else if (IS_CLASS(wch, CLASS_HIGHLANDER))
class = "HighL";
else if (IS_CLASS(wch, CLASS_MAGE))
class = "Mage";
else
class = "None";
sprintf(buf, "%-10s %-2d %-2d %-6s %-2d %-5d %-5d %-5d %-4d %-4d %-5d %-3d %-3d\r\n",
wch->name, wch->level, wch->trust, class,
wch->pcdata->stats[UNI_GEN], wch->max_hit,
wch->max_mana, wch->max_move,
char_hitroll(wch), char_damroll(wch), char_ac(wch),
wch->pcdata->score[SCORE_NUM_QUEST], wch->pcdata->quest);
send_to_char(buf, ch);
}
return;
}
/*by xkilla*/
void do_addlag(CHAR_DATA *ch, char *argument)
{
CHAR_DATA *victim;
char arg1[MAX_STRING_LENGTH];
int x;
argument = one_argument(argument, arg1);
if (arg1[0] == '\0')
{
send_to_char("Addlag to who?", ch);
return;
}
if ((victim = get_char_world(ch, arg1)) == NULL)
{
send_to_char("They're not here.", ch);
return;
}
if ((x = atoi(argument)) <= 0)
{
send_to_char("That makes a LOT of sense, ya lag yourself *DUH*.", ch);
return;
}
if (x > 100)
{
send_to_char("There's a limit to cruel and unusual punishment", ch);
return;
}
send_to_char("Somebody REALLY dosen't like you", victim);
WAIT_STATE(victim, x);
send_to_char("That ought to show that nerdy bitch...", ch);
return;
}
/*Color by Xkilla*/
int colour( char type, CHAR_DATA *ch, char *string )
{
char code[ 20 ];
char *p = '\0';
if( IS_NPC( ch ) )
return( 0 );
switch( type )
{
default:
sprintf( code, CLEAR );
break;
case 'x':
sprintf( code, CLEAR );
break;
case 'b':
sprintf( code, C_BLUE );
break;
case 'c':
sprintf( code, C_CYAN );
break;
case 'g':
sprintf( code, C_GREEN );
break;
case 'm':
sprintf( code, C_MAGENTA );
break;
case 'r':
sprintf( code, C_RED );
break;
case 'w':
sprintf( code, C_WHITE );
break;
case 'y':
sprintf( code, C_YELLOW );
break;
case 'B':
sprintf( code, C_B_BLUE );
break;
case 'C':
sprintf( code, C_B_CYAN );
break;
case 'G':
sprintf( code, C_B_GREEN );
break;
case 'M':
sprintf( code, C_B_MAGENTA );
break;
case 'R':
sprintf( code, C_B_RED );
break;
case 'W':
sprintf( code, C_B_WHITE );
break;
case 'Y':
sprintf( code, C_B_YELLOW );
break;
case 'D':
sprintf( code, C_D_GREY );
break;
case '*':
sprintf( code, "%c", 007 );
break;
case '/':
sprintf( code, "%c", 012 );
break;
case '{':
sprintf( code, "%c", '{' );
break;
case '.':
switch(number_range(1,15))
{
case 1: sprintf( code, C_RED ); break;
case 2: sprintf( code, C_GREEN ); break;
case 3: sprintf( code, C_YELLOW ); break;
case 4: sprintf( code, C_BLUE ); break;
case 5: sprintf( code, C_MAGENTA ); break;
case 6: sprintf( code, C_CYAN ); break;
case 7: sprintf( code, C_WHITE ); break;
case 8: sprintf( code, C_D_GREY ); break;
case 9: sprintf( code, C_B_RED ); break;
case 10: sprintf( code, C_B_GREEN ); break;
case 11: sprintf( code, C_B_YELLOW ); break;
case 12: sprintf( code, C_B_BLUE ); break;
case 13: sprintf( code, C_B_MAGENTA ); break;
case 14: sprintf( code, C_B_CYAN ); break;
case 15: sprintf( code, C_B_WHITE ); break;
}
break;
}
p = code;
while( *p != '\0' )
{
*string = *p++;
*++string = '\0';
}
return( strlen( code ) );
}
void colourconv( char *buffer, const char *txt , CHAR_DATA *ch )
{
const char *point;
int skip = 0;
if( ch->desc && txt )
{
if( IS_SET( ch->act, PLR_COLOUR ) )
{
for( point = txt ; *point ; point++ )
{
if( *point == '{' )
{
point++;
skip = colour( *point, ch, buffer );
while( skip-- > 0 )
++buffer;
continue;
}
*buffer = *point;
*++buffer = '\0';
}
*buffer = '\0';
}
else
{
for( point = txt ; *point ; point++ )
{
if( *point == '{' )
{
point++;
continue;
}
*buffer = *point;
*++buffer = '\0';
}
*buffer = '\0';
}
}
return;
}
void do_generation( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
int gen;
char arg1 [MAX_INPUT_LENGTH];
char arg2 [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( IS_NPC(ch) ) return;
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char( "Syntax: generation <char> <generation>.\n\r", ch );
send_to_char("Generation 1 is a Master <Class> and 2 is clan leader.\n\r", ch);
return;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
send_to_char( "That player is not here.\n\r", ch);
return;
}
gen = is_number( arg2 ) ? atoi( arg2 ) : -1;
send_to_char("Generation Set.\n\r",ch);
victim->pcdata->stats[UNI_GEN] = gen;
return;
}
void do_disable (CHAR_DATA *ch, char *argument)
{
int i;
DISABLED_DATA *p,*q;
char buf[100];
if (IS_NPC(ch))
{
send_to_char ("RETURN first.\n\r",ch);
return;
}
if (!argument[0]) /* Nothing specified. Show disabled commands. */
{
if (!disabled_first) /* Any disabled at all ? */
{
send_to_char ("There are no commands disabled.\n\r",ch);
return;
}
send_to_char ("Disabled commands:\n\r"
"Command Level Disabled by\n\r",ch);
for (p = disabled_first; p; p = p->next)
{
sprintf (buf, "%-12s %5d %-12s\n\r",p->command->name,
p->level, p->disabled_by);
send_to_char (buf,ch);
}
return;
}
/* command given */
/* First check if it is one of the disabled commands */
for (p = disabled_first; p ; p = p->next)
if (!str_cmp(argument, p->command->name))
break;
if (p) /* this command is disabled */
{
if (get_trust(ch) < p->level)
{
send_to_char ("This command was disabled by a higher power.\n\r", ch );
return;
}
/* Remove */
if (disabled_first == p) /* node to be removed == head ? */
disabled_first = p->next;
else /* Find the node before this one */
{
for (q = disabled_first; q->next != p; q = q->next);
q->next = p->next;
}
free_string (p->disabled_by); /* free name of disabler */
free_mem (p,sizeof(DISABLED_DATA)); /* free node */
save_disabled(); /* save to disk */
send_to_char ("Command enabled.\n\r",ch);
}
else /* not a disabled command, check if that command exists */
{
/* IQ test */
if (!str_cmp(argument,"disable"))
{
send_to_char ("You cannot disable the disable command.\n\r",ch);
return;
}
/* Search for the command */
for (i = 0; cmd_table[i].name[0] != '\0'; i++)
if (!str_cmp(cmd_table[i].name, argument))
break;
/* Found? */
if (cmd_table[i].name[0] == '\0')
{
send_to_char ("No such command.\n\r",ch);
return;
}
if (cmd_table[i].level > get_trust(ch))
{
send_to_char ("You dot have access to that command; you cannot disable it.\n\r", ch );
return;
}
/* Disable the command */
p = alloc_mem (sizeof(DISABLED_DATA));
p->command = &cmd_table[i];
p->disabled_by = str_dup (ch->name); /* save name of disabler */
p->level = get_trust(ch); /* save trust */
p->next = disabled_first;
disabled_first = p; /* add before the current first element */
send_to_char ("Command disabled.\n\r",ch);
save_disabled(); /* save to disk */
}
}
/* Check if that command is disabled
Note that we check for equivalence of the do_fun pointers; this means
that disabling 'chat' will also disable the '.' command
*/
bool check_disabled (const struct cmd_type *command)
{
DISABLED_DATA *p;
for (p = disabled_first; p ; p = p->next)
if (p->command->do_fun == command->do_fun)
return TRUE;
return FALSE;
}
/* Load disabled commands */
void load_disabled()
{
FILE *fp;
DISABLED_DATA *p;
char *name;
int i;
disabled_first = NULL;
fp = fopen (DISABLED_FILE, "r");
if (!fp) /* No disabled file.. no disabled commands : */
return;
name = fread_word (fp);
while (str_cmp(name, END_MARKER)) /* as long as name is NOT END_MARKER
:) */
{
/* Find the command in the table */
for (i = 0; cmd_table[i].name[0] ; i++)
if (!str_cmp(cmd_table[i].name, name))
break;
if (!cmd_table[i].name[0]) /* command does not exist? */
{
bug ("Skipping uknown command in " DISABLED_FILE " file.",0);
fread_number(fp); /* level */
fread_word(fp); /* disabled_by */
}
else /* add new disabled command */
{
p = alloc_mem(sizeof(DISABLED_DATA));
p->command = &cmd_table[i];
p->level = fread_number(fp);
p->disabled_by = str_dup(fread_word(fp));
p->next = disabled_first;
disabled_first = p;
}
name = fread_word(fp);
}
fclose (fp);
}
/* Save disabled commands */
void save_disabled()
{
FILE *fp;
DISABLED_DATA *p;
fp = fopen (DISABLED_FILE, "w");
if (!fp)
{
bug ("Could not open " DISABLED_FILE " for writing",0);
return;
}
for (p = disabled_first; p ; p = p->next)
fprintf (fp, "%s %d %s\n", p->command->name, p->level,
p->disabled_by);
fprintf (fp, "%s\n",END_MARKER);
fclose (fp);
fpReserve = fopen( NULL_FILE, "r" );
}
void load_bans() {
FILE *fp;
BAN_DATA *ban_last;
ban_last = NULL;
fp = fopen ("ban.txt", "r");
if (!fp) return;
for ( ; ; ) {
BAN_DATA *p;
if (feof(fp)) {
fclose(fp);
return;}
p = alloc_mem(sizeof(BAN_DATA));
p->name = str_dup(fread_word(fp));
fread_to_eol(fp);
if (ban_list == NULL)
ban_list = p;
else
ban_last->next = p;
ban_last = p;
}
/*
while (str_cmp(name, END_MARKER)) {
p = alloc_mem(sizeof(BAN_DATA));
p->name = name;
p->next = ban_first;
ban_first = p;
name = fread_word(fp);}
fclose(fp);*/
}
void save_bans(void)
{
FILE *fp;
BAN_DATA *p;
fclose(fpReserve);
fp = fopen ("ban.txt", "w");
if (!fp) {bug("could not open ban.txt",0);
return;}
for (p = ban_list; p != NULL; p = p->next) {
fprintf(fp, "%s\n", p->name);}
fclose(fp);
fpReserve = fopen(NULL_FILE, "r");
}