/**************************************************************************
 * Selfclass snippet designed for Godwars/LOW4 but should work for other  *
 * godwars derivatives with little to no tweaking. I decided not to use   *
 * the mages in stock low4 because they were very buggy. I am planning    *
 * on writing a unique mage class in the future and will probably release *
 * that as well. I will release an updated version of this snippet when   *
 * I do that. I don't ask for any credits in a helpfile or an email or    *
 * anything. All I ask is that if you use this snippet you leave the      *
 * comments intact. You can delete this header but leave the comments     *
 * alone.								  *
 *									  *
 *                                                                        *
 * Sharmair recoded my original selfclass snippet and gave me a lot of    *
 * suggestions. I was going to put his version of it in this release as   *
 * a second option of functions, but when I got to editing it and using   *
 * some of his suggestions I realized that mine wasn't that different.    *
 * So if you really wanna see exactly what his function was, look for     *
 * the thread on mudbytes.net where we discuss this snippet. Thanks to    *
 * everybody who posted constructive criticism on this snippet.           *
 *                                                                        *
 *                                                                        *
 * Don't forget to add this to interp.c and merc.h they should look like  *
 * this:    								  *
 *									  *
 * merc.h								  *
 * DECLARE_DO_FUN(	do_selfclass	);				  *
 *									  *
 * interp.c								  *
 * {"selfclass",	do_selfclass,	POS_STANDING, 3, LOG_NORMAL },    *
 *									  *
 *************************************************************************/

/* Add this function to any file you like. Mine is in low_act.c for no real 
 * reason. Leave this comment out of the code.
 */

/*
 * Selfclass command by Igabod with a good bit of help from Sharmair of
 * the forums at http://www.mudbytes.net
 */
void do_selfclass(CHAR_DATA *ch,char *argument)
{
        char arg1[MAX_INPUT_LENGTH];
	const char* cname = "";

        if (IS_NPC(ch)) return;

        if (ch->level < 3)
        {
                do_huh(ch,"");
                return;
        }

        argument = one_argument(argument,arg1);

        if (ch->class != 0 || IS_SET(ch->special,SPC_CHAMPION))
        {
                stc("You already have a class!\r\n",ch);
                return;
        }

        if (arg1[0] == '\0')
        {
                stc("Syntax: selfclass <class>\r\n\r\n"
                "Class being one of:\r\n"
		"Monk Drow Ninja Vampire Werewolf Demon Highlander\r\n\r\n",ch);
                return;
        }

/*
 * Monk
 */
        if (!str_cmp(arg1,"monk"))
        {
                ch->class = CLASS_MONK;
		cname = "a Monk";
        }

/*
 * Drow
 */
        else if (!str_cmp(arg1,"drow"))
        {
                ch->class = CLASS_DROW;
		cname = "a Drow";
        }

/*
 *Ninja
 */
        else if (!str_cmp(arg1,"ninja"))
        {
                ch->class = CLASS_NINJA;
		cname = "a Ninja";
        }

/*
 * Vampire
 */
        else if (!str_cmp(arg1,"vampire"))
        {
                ch->class = CLASS_VAMPIRE;
                SET_BIT(ch->immune,IMM_SUNLIGHT);
		cname = "a Vampire";
        }

/*
 * Werewolf
 */
        else if (!str_cmp(arg1,"werewolf"))
        {
                ch->class = CLASS_WEREWOLF;
		cname = "a Werewolf";
        }

/*
 * Demon
 */
        else if (!str_cmp(arg1,"demon"))
        {
                ch->class = CLASS_DEMON;
                ch->special = SPC_DEMON_LORD;
		cname = "a Demon";
        }

/*
 * Highlander
 */
        else if (!str_cmp(arg1,"highlander"))
        {
                ch->class = CLASS_HIGHLANDER;
                ch->pcdata->powers[0] = 1;
		cname = "a Highlander";
        }

	else
	{
		do_selfclass(ch,"");
		return;
	}

	free_string(ch->lord);
	ch->lord = str_dup("");
	ch->pcdata->stats[UNI_GEN] = 1;
	do_mclear(ch,"");
	sprintf(arg1,"%s is now %s.",ch->name,cname);
	do_info(ch,arg1);
	log_string(arg1);
	sprintf(arg1,"You are now %s!\r\n",cname);
	stc(arg1,ch);
	return;
}


/* Now delete this comment and do a clean compile and you are ready to 
 * go.
 *
 * You may want to change the UNI_GEN to a different number depending
 * on your mud. On my mud I've changed up generation quite a bit so I
 * set it to 10 by default but it's set as 1 here.
 *
 * Igabod
 */