#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"); }