#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"

#define MONK_AUTODROP 11

void    divide_to_char  args( ( CHAR_DATA *ch ) );
void    divide2_to_char args( ( CHAR_DATA *ch ) );
void    divide3_to_char args( ( CHAR_DATA *ch ) );
void    divide4_to_char args( ( CHAR_DATA *ch ) );
void    divide5_to_char args( ( CHAR_DATA *ch ) );
void    divide6_to_char args( ( CHAR_DATA *ch ) );
void    do_rand_typo    args( ( CHAR_DATA *ch ) );
void    autodrop        args( ( CHAR_DATA *ch) );

#define MAX_QUOTES 5        



void do_nosummon( CHAR_DATA *ch, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
 
    one_argument( argument, arg );
 
    if (IS_NPC(ch)) return;
 
    if ( arg[0] == '\0')
    {
        send_to_char( "Do you wish to switch summon ON or OFF?\n\r", ch );
        return;
    }
 
    if (IS_IMMUNE(ch, IMM_SUMMON) && !str_cmp(arg,"on"))
    {
        REMOVE_BIT(ch->immune, IMM_SUMMON);
        send_to_char("You can no longer be the target of summon and portal.\n\r", ch);
    }
    else if (!IS_IMMUNE(ch, IMM_SUMMON) && !str_cmp(arg,"on")) {
send_to_char("But your nosummon is already on!\n\r", ch);
        return;}
    else if (!IS_IMMUNE(ch, IMM_SUMMON) && !str_cmp(arg,"off"))
    {
        SET_BIT(ch->immune, IMM_SUMMON);
        send_to_char("You can now be the target of summon and portal.\n\r", ch);
    }
    else if (IS_IMMUNE(ch, IMM_SUMMON) && !str_cmp(arg,"off")) {
        send_to_char("But your nosummon is already off!\n\r", ch);
        return;}
    else
        send_to_char( "Do you wish to switch it ON or OFF?\n\r", ch );
    return;
}


void divide_to_char(CHAR_DATA *ch)
{
send_to_char("-------------------------------------------------------------------------------\r\n",
ch); }
 
void divide2_to_char(CHAR_DATA *ch)
{
send_to_char("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\r\n",
ch); }

void divide3_to_char(CHAR_DATA *ch)
{
send_to_char("===============================================================================\r\n",ch);
}
 
void divide4_to_char(CHAR_DATA *ch)
{
send_to_char("-=[**]=-=[**]=-=[**]=-=[**]=-=[**]=-=[***]=-=[**]=-=[**]=-=[**]=-=[**]=-=[**]=-\r\n",ch);
}

void divide5_to_char(CHAR_DATA *ch)
{
send_to_char("-=[***********]=-------------=[***********]=-",ch);
}
 
void divide6_to_char(CHAR_DATA *ch)
{
send_to_char("-    -   -  - - -- ---====*====--- -- - -  -   -    -",ch);
}


struct quote_type
{
    char *      text;        /* Declare the Quote table... */
    char *      author;
};

const struct quote_type quote_table [MAX_QUOTES] =
  {
    { "Extraordinary Claims require Extraordinary evidence.", "Carl Sagan" }, /* Quote No 1 */
    { "Eagles may soar high and free, but tigers never get sucked into jet engines...",
      "Anon" },
    { "The mud says,'Good bye.' in it's best AOL voice.", "#4Xkilla#n" },
    { "Bye!", "Xkilla" }, /* Thats 4 quotes! */
    { "My thy blade stay sharp and thy heart forever dark!", "#3KaVir#n" },
  };
 
void do_rand_quote( CHAR_DATA *ch )
{
    char buf[MAX_STRING_LENGTH];
    int number;
 
    number = number_range( 1, MAX_QUOTES) - 1;

    sprintf ( buf, "\n\r#4%s\n\r - #1%s#n\n\r",
       quote_table[number].text,
       quote_table[number].author);           /* NB Yellow quote, Red author */
    send_to_char ( buf, ch );
    return;
}
const char *typo_table [14] =
{
   "Uhh, invalid command maybe!",
   "What is that suppose to be!",
   "What is your problem!",
   "What ever you say!",
   "#1Info#2->#4 You can't type!",
   "You're very dumb aren't you!",
   "What!!",
   "AAAAGGGGGGGHHHHHHHHH!!!!!",
   "Chance of that working next time is 2%",
   "Chance of that working next time is 95%",
   "Chance of that working next time is 0%",
   "NOT EVEN #2XKILLA#4 WOULD TYPE THAT!!!!",
   "NOT EVEN ERREON WOULD TYPE THAT!!!!",
   "Master I don't think he can type master"
};
 
void do_rand_typo(CHAR_DATA *ch)
{
  char buf[MAX_STRING_LENGTH];
  int number;
 
  number = number_range(1, 13);
 
  sprintf(buf, "#1%s\n\r", typo_table[number]);
  send_to_char(buf, ch);
  return;
}


void do_circle( CHAR_DATA *ch, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
    CHAR_DATA *victim;
 
    one_argument( argument, arg );
 
        if (IS_NPC(ch)) return;
 
        if (!IS_CLASS(ch, CLASS_NINJA) || ch->pcdata->powers[NPOWER_NINGENNO] < 6) {
        send_to_char("Huh?\n\r", ch );
        return;}
 
    if ( ( victim = get_char_room( ch, arg ) ) == NULL )
    {
        if (ch->fighting == NULL) {
        send_to_char( "They aren't here.\n\r", ch );
        return;}
        else victim = ch->fighting;
    }
 
    if ( victim == ch )
    {
        send_to_char( "How can you circle yourself?\n\r", ch );
        return;
    }
 
    if ( is_safe( ch, victim ) )
      return;

 
    check_killer( ch, victim );
        if (number_percent() > 10)
        multi_hit( ch, victim, gsn_circle );
    else
        damage( ch, victim, 0, gsn_circle );
 
    WAIT_STATE( ch, 8 );
    return;
}


void do_autostance(CHAR_DATA *ch, char *argument ) {
 
        char    arg     [MAX_INPUT_LENGTH];
 
        argument = one_argument(argument,arg);
 
        if (IS_NPC(ch)) return;
 

        if (!str_cmp(arg,"none")) {
        send_to_char("You no longer autostance.\n\r", ch );
        ch->stance[MONK_AUTODROP] = STANCE_NONE;}
        else if (!str_cmp(arg, "crane")) {
        send_to_char("You now autostance into the crane stance.\n\r",ch );
        ch->stance[MONK_AUTODROP] = STANCE_CRANE;}
        else if (!str_cmp(arg, "crab")) {
        send_to_char("You now autostance into the crab stance.\n\r", ch );
        ch->stance[MONK_AUTODROP] = STANCE_CRAB;}
        else if (!str_cmp(arg, "bull")) {
        send_to_char("You now autostance into the bull stance.\n\r", ch );
ch->stance[MONK_AUTODROP] = STANCE_BULL;}
        else if (!str_cmp(arg, "viper")) {
        send_to_char("You now autostance into the viper stance.\n\r", ch
);
        ch->stance[MONK_AUTODROP] = STANCE_VIPER;}
        else if (!str_cmp(arg, "mongoose")) {
        send_to_char("You now autostance into the mongoose stance.\n\r",
ch);
        ch->stance[MONK_AUTODROP] = STANCE_MONGOOSE;}
        else if (!str_cmp(arg, "mantis")
        && ch->stance[STANCE_CRANE] >= 200
        && ch->stance[STANCE_VIPER] >= 200) {
        send_to_char("You now autostance into the mantis stance.\n\r",
ch);
        ch->stance[MONK_AUTODROP] = STANCE_MANTIS;}
        else if (!str_cmp(arg, "monkey")
        && ch->stance[STANCE_CRANE] >= 200
        && ch->stance[STANCE_MONGOOSE] >= 200) {
        send_to_char("You now autostance into the monkey stance.\n\r",
ch);
ch->stance[MONK_AUTODROP] = STANCE_MONKEY;}
        else if (!str_cmp(arg, "swallow")
        && ch->stance[STANCE_CRAB] >= 200
        && ch->stance[STANCE_MONGOOSE] >= 200) {
        send_to_char("You now autostance into the swallow stance.\n\r",
ch);
        ch->stance[MONK_AUTODROP] = STANCE_SWALLOW;}
        else if (!str_cmp(arg, "tiger")
        && ch->stance[STANCE_BULL] >= 200
        && ch->stance[STANCE_VIPER] >= 200) {
        send_to_char("You now autostance into the tiger stance.\n\r", ch);
        ch->stance[MONK_AUTODROP] = STANCE_TIGER;}
        else if (!str_cmp(arg, "dragon")
        && ch->stance[STANCE_CRAB] >= 200
        && ch->stance[STANCE_BULL] >= 200) {
        send_to_char("You now autostance into the dragon stance.\n\r",
ch);
        ch->stance[MONK_AUTODROP] = STANCE_DRAGON;}
        else send_to_char("You can't set your autostance to that!\n\r",ch);
}
 
void autodrop(CHAR_DATA *ch) {
 
        int st;
        char buf [MAX_INPUT_LENGTH];
        char buf2 [MAX_INPUT_LENGTH];
        char stancename [10];
 
        if (IS_NPC(ch)) return;
 
        st = ch->stance[11];
        if (st == STANCE_VIPER) sprintf(stancename,"viper");
        else if (st == STANCE_CRANE) sprintf(stancename,"crane");
        else if (st == STANCE_CRAB) sprintf(stancename,"crab");
        else if (st == STANCE_MONGOOSE) sprintf(stancename,"mongoose");
        else if (st == STANCE_BULL) sprintf(stancename,"bull");
        else if (st == STANCE_MANTIS) sprintf(stancename,"mantis");
        else if (st == STANCE_DRAGON) sprintf(stancename,"dragon");
        else if (st == STANCE_TIGER) sprintf(stancename,"tiger");
        else if (st == STANCE_MONKEY) sprintf(stancename,"monkey");
        else if (st == STANCE_SWALLOW) sprintf(stancename,"swallow");
        else return;
 
        if (ch->stance[0] < 1) {
        ch->stance[0] = st;
 
        sprintf(buf, "You autodrop into the %s stance.", stancename);
        act(buf, ch, NULL, NULL, TO_CHAR);
        sprintf(buf2, "$n autodrops into the %s stance.", stancename);
        act(buf2, ch, NULL, NULL, TO_ROOM);
}
}


void do_level( CHAR_DATA *ch, char *argument )
{
    char arg       [MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    char skill  [20];
    one_argument( argument, arg );
    if (IS_NPC(ch)) return;
 
 
send_to_char(

"#7------------------------------------------------------------------------------\n\r",ch);
send_to_char(
 " #6                         -= Skill =-           \n\r",ch);
send_to_char(

"#7------------------------------------------------------------------------------\n\r",ch);
send_to_char(
 "   #6                         Weapon\n\r",ch);
sprintf( buf,
"#1Unarm: %-3d Slice: %-3d Stab: %-3d Slash: %-3d Whip  : %-3d Claw: %-3d Blast: %-3d\n\r",

ch->wpn[0],ch->wpn[1],ch->wpn[2],ch->wpn[3],ch->wpn[4],ch->wpn[5],ch->wpn[6]);
send_to_char(buf,ch);
sprintf( buf,
"#1Pound: %-3d Crush: %-3d Grep: %-3d  Bite: %-3d Pierce: %-3d Suck: %-3d\n\r",
ch->wpn[7],ch->wpn[8],ch->wpn[9],ch->wpn[10],
ch->wpn[11],ch->wpn[12]);
send_to_char(buf,ch);
send_to_char(

"#7------------------------------------------------------------------------------\n\r",ch);
send_to_char(
 "    #6                  Basic Stances\n\r",ch);
sprintf( buf,
"#0Viper : %-3d Crane: %-3d Crab  : %-3d Mongoose: %-3d Bull: %-3d\n\r",
ch->stance[1],ch->stance[2],ch->stance[3],ch->stance[4],ch->stance[5]);
send_to_char(buf,ch);
send_to_char(

"#7------------------------------------------------------------------------------\n\r",ch);
send_to_char(
"       #6            Advanced Stances\n\r",ch);
sprintf( buf,
"#2Mantis: %-3d Dragon: %-3d Tiger: %-3d Monkey: %-3d Swallow : %-3d\n\r",
ch->stance[6],ch->stance[7],ch->stance[8],ch->stance[9],ch->stance[10]);
send_to_char(buf,ch);
send_to_char(

"#7------------------------------------------------------------------------------\n\r",ch);
send_to_char(
 "        #6                    Magic\n\r",ch);
sprintf( buf,
"#5Purple: %-3d  #1Red: %-3d #4 Blue: %-3d #2 Green: %-3d  #3Yellow: %-3d\n\r",ch->spl[0],
ch->spl[1],ch->spl[2],ch->spl[3],ch->spl[4]);
send_to_char(buf,ch);
send_to_char(  
    
"#7------------------------------------------------------------------------------#n\n\r",ch);
	if ( IS_SET(ch->special, SPC_PRINCE) )
	  send_to_char("#0You are a prince!        #n             \n\r", ch);

    sprintf(skill, "#0Generation : %d            #n             \n\r", ch->pcdata->stats[UNI_GEN]);
    send_to_char( skill, ch );
    sprintf(skill, "#0Recall Room : %d         #n             \n\r",ch->home);
    if ( IS_CLASS(ch, CLASS_DEMON) )
     send_to_char("#0You are a demon!        #n               \n\r", ch);
    if ( IS_CLASS(ch, CLASS_MAGE) )
     send_to_char("#0You are a mage!       #n                 \n\r", ch);    
     if ( IS_CLASS(ch, CLASS_WEREWOLF) )
     send_to_char("#0You are a werewolf! #n                   \n\r", ch);
    if ( IS_CLASS(ch, CLASS_VAMPIRE) )
     send_to_char("#0You are a vampire!         #n            \n\r", ch);

 
return;
}


void do_affects( CHAR_DATA *ch, char *argument )
{
   char buf[MAX_STRING_LENGTH];
   AFFECT_DATA *paf;
 
     if (IS_NPC(ch)) return;
     if ( ch->affected == NULL )
        {
		send_to_char( "--------------------------------------------\n\r", ch);
                send_to_char( "You have nothing affecting you at this time.\n\r", ch);
                send_to_char( "--------------------------------------------\n\r", ch);
        return;
        }
     if ( ch->affected != NULL )
       {
         send_to_char( "#4You are affected by:#n\n\r", ch );
         for ( paf = ch->affected; paf != NULL; paf = paf->next )
            {
               sprintf( buf, "#3Spell:#n '%s'", skill_table[paf->type].name );
               send_to_char( buf, ch );
               if ( ch->level >= 0 )
                   {
   sprintf( buf, " modifies %s by %d for %d hours with bits %s.\n\r",
                      affect_loc_name( paf->location ),
                      paf->modifier,
                      paf->duration,
                      affect_bit_name( paf->bitvector ) );
                      send_to_char( buf, ch );
                     }
 
            }
 
     }
 
     return;
 
}
void do_afk( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];
 
        if ( IS_NPC(ch) )
        return;
 
        if (IS_SET(ch->flag2, EXTRA_AFK))
        {
        free_string( ch->pcdata->title);
        ch->pcdata->title = str_dup( ch->short_descr );
        free_string( ch->short_descr );
        ch->short_descr = NULL;
        send_to_char( "#6You are no longer#2 AFK#6.#n\n\r", ch );
        sprintf(buf,"#6%s is no longer #2AFK#6!#n",ch->name);
        do_info(ch,buf);
        REMOVE_BIT(ch->flag2,EXTRA_AFK);
        return;
        }
 
        else if (!IS_SET(ch->flag2,EXTRA_AFK))
        {
        free_string( ch->short_descr );
        ch->short_descr = str_dup( ch->pcdata->title );
        free_string( ch->pcdata->title );
        ch->pcdata->title = str_dup(".. #1A#2F#3K#n");
        send_to_char( "#6You are now #2AFK#6.#n\n\r", ch );
        sprintf(buf,"#6%s is now #2AFK#6!#n",ch->name);
        do_info(ch,buf);
        SET_BIT(ch->flag2,EXTRA_AFK);
        WAIT_STATE(ch, 25);
        return;
        }
 
else
return;
 
}

void do_apply ( CHAR_DATA *ch, char *argument )
{
    char arg1[MAX_INPUT_LENGTH];
 
    argument = one_argument( argument, arg1 );
 
    if (IS_NPC(ch))
        send_to_char("Only Players can be Quest Trusted.\n\r",ch);
 
    if ( arg1[0] == '\0' )
    {
        send_to_char( "Usage: APPLY QUEST\n\r", ch );
        return;
    }
    if (!str_cmp( arg1, "quest" ))
    {
        if (IS_EXTRA(ch, EXTRA_TRUSTED))
                {
                send_to_char("You are already Quest Trusted\n\r",ch);
    return;
                }
        send_to_char("Your application for Questing Trust has been recieved\n\r",ch);
        send_to_char("and is being processed.....\n\r\n\r",ch);
        if ( ( ch->pcdata->score[SCORE_NUM_QUEST] >= 2) &&
           (ch->pcdata->score[SCORE_QUEST] >= 100))
        {
        send_to_char("You have been blessed with Questing Trust.\n\r",ch);
        SET_BIT(ch->extra, EXTRA_TRUSTED);
 return;
        }
        else
        {
        send_to_char("Your Application has been Denied!\n\r",ch);
        send_to_char("You need to complete 2 quests,\n\r",ch);
        send_to_char("Must have 100 qp on hand.\n\r",ch);
        return;
        }
}
}

void do_selfrestore( CHAR_DATA *ch, char *argument )
{
    if (IS_NPC(ch)) return;
    if (ch->in_room == NULL || ch->in_room->vnum != 3054)
    {
        send_to_char("You can only get a restore at the Temple Altar of Midgaard.\n\r",ch);
        return;
    }
        if ( ch->exp < 100000)
        {
            send_to_char("You need 100,000 xp to restore self.\n\r", ch);
            return;
        }
    ch->exp   -= 100000;
do_restore(ch,"self");
    send_to_char("God answers you, you are restored.\n\r",ch);
    return;
}

void do_clanname( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    char      arg [MAX_INPUT_LENGTH];
    argument = one_argument( argument, arg );
    if ( IS_NPC(ch) ) return;
 
    if ( arg[0] == '\0' )
    {
    send_to_char( "Who's clan do you wish to change or name?\n\r", ch );
        return;
    }
 
    if ( ( victim = get_char_room( ch, arg ) ) == NULL )
    {
        send_to_char( "They aren't here.\n\r", ch );
        return;
    }
    if ( IS_NPC(victim) ) return;

    smash_tilde( argument );
    if ( strlen(argument) < 0 || strlen(argument) > 13 )
    {
        send_to_char( "Clan name should be between 0 and 13 letters long.\n\r", ch );
        send_to_char( "Leave a blank to remove clan.\n\r", ch);
        return;
    }
    free_string( victim->clan );
    victim->clan = str_dup( argument );
        send_to_char("Clan set.\n\r", ch);
        send_to_char("Clan set.\n\r", victim);
    return;
}
void do_version( CHAR_DATA *ch, char *argument )
{
    send_to_char( "******************************************************\n\r", ch );
    send_to_char( "*         Revenge of Kalos Version: 1.0              *\n\r", ch );
    send_to_char( "*                Coded by: Xkilla                    *\n\r", ch );
    send_to_char( "******************************************************\n\r", ch );
    return;
}

void do_restore( CHAR_DATA *ch, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    CHAR_DATA *victim;
    DESCRIPTOR_DATA *d;
 
    sprintf(buf,"%s: Restore %s",ch->name,argument);
    if (ch->level < NO_WATCH) do_watching(ch,buf);
 
    one_argument( argument, arg );
    if ( arg[0] == '\0' )
    {
        send_to_char( "Restore whom?\n\r", ch );
        return;
}
 
if ( get_trust(ch) >=  MAX_LEVEL - 2 && !str_cmp(arg,"all"))
    {
    /* cure all */
 
        for (d = descriptor_list; d != NULL; d = d->next)
        {
            victim = d->character;
 
            if (victim == NULL || IS_NPC(victim))
                continue;
 
 
            {
                affect_strip(victim,gsn_poison);
                affect_strip(victim,gsn_blindness);
                affect_strip(victim,gsn_sleep);
                affect_strip(victim,gsn_sleep);
                affect_strip(victim,gsn_curse);
 
                victim->hit     = victim->max_hit;
                victim->mana    = victim->max_mana;
                victim->move    = victim->max_move;
                update_pos( victim);
                if (victim->in_room != NULL)
                    act("$n has restored you.",ch,NULL,victim,TO_VICT);
            }
        }
        send_to_char("All active players restored.\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_SET(victim->act, PLR_GODLESS) && get_trust(ch) < NO_GODLESS
        && !IS_SET(ch->extra , EXTRA_ANTI_GODLESS))
    {
        send_to_char( "You failed.\n\r", ch );
        return;
    }
 victim->hit  = victim->max_hit;
    victim->mana = victim->max_mana;
    victim->move = victim->max_move;
    victim->loc_hp[0] = 0;
    victim->loc_hp[1] = 0;
    victim->loc_hp[2] = 0;
    victim->loc_hp[3] = 0;
    victim->loc_hp[4] = 0;
    victim->loc_hp[5] = 0;
    victim->loc_hp[6] = 0;
    update_pos( victim );
    act( "$n has restored you.", ch, NULL, victim, TO_VICT );
    send_to_char( "Ok.\n\r", ch );
    return;
}


void do_newbiepack( CHAR_DATA *ch, char *argument )
{
 
        char buf[MAX_STRING_LENGTH];
 
        if (IS_SET(ch->newbits,NEWBIE_PACK))
        {
        send_to_char("Due to abuse you now may only create 1 newbie pack\n\r",ch);
        return;
        }

        else if (ch->level == 1)
        {
        ch->level = 12;
        ch->trust = 12;
        do_oload(ch,"2319");
        do_oload(ch,"30333");
        do_oload(ch,"30334");
        do_oload(ch,"30335");
        do_oload(ch,"30336");
        do_oload(ch,"30337");
        do_oload(ch,"30338");
        do_oload(ch,"30339");
        do_oload(ch,"30339");
        do_oload(ch,"30340");
        do_oload(ch,"30340");
        do_oload(ch,"30341");
        do_oload(ch,"30342");
        do_oload(ch,"30342");
        do_oload(ch,"30343");
        do_oload(ch,"30343");
        do_oload(ch,"30344");
        do_oload(ch,"2622");
        do_oload(ch,"2204");
        ch->level = 1;
        ch->trust = 0;
        do_open(ch,"girdle");
        sprintf(buf,"all girdle");
        do_put(ch,buf);
        send_to_char("You now have a newbie pack!\n\r", ch);
        SET_BIT(ch->newbits,NEWBIE_PACK);
        }

return;
}