/************************************************************************************
 Hello.  This will allow you to set double exp on and off.  To use this you must
 keep all the comments in the code and mail me at the.green.machine@gmail.com.  Alright on with 
 code!  BTW this was done on a Rom2.4 but shouldn't be hard to port to others.  I 
 have also tested this on a Rot2.0b3 heh.  Happy MUDding... 
 Kjwah....................Daurven?
 mail: the.green.machine@gmail.com
 MUD : Don't have a MUD..  lol
*************************************************************************************/
-> act_wiz.c <-

at the top of it I have it above wiznet stuff stick this.

bool doublexp;

then wherever you wanna stick this(I have it at the bottom) put this somewhere.

/* Double exp by Kjwah.......  Daurven? :) */
void do_doublexp(CHAR_DATA *ch, char *argument) {
	char buf[MSL]; /* MSL = MAX_STRING_LENGTH */

        /* Show if its on or off if the argument is NULL */
	if (argument[0] == '\0') {
		if (doublexp) {
			send_to_char("Double exp is on.\n\r",ch);
			return;
		} else {
			send_to_char("Double exp is not on.\n\r",ch);
			return;
		}
	}
        /* Activates double exp and sends a message :) */
	if (!strcmp (argument, "on")) {
		send_to_char("Double exp set.\n\r",ch);
		sprintf(buf,"%s has set double exp on!",ch->name);
		do_announce(ch,buf); /* Comment out if you dont have announce */
		doublexp = TRUE;
		return;
	}
        
        /* Turns off double exp and sends a message :( */
	if (!strcmp (argument, "off")) {
		send_to_char("Double exp is now off.\n\r",ch);
		sprintf(buf,"%s has disabled double exp.",ch->name);
		do_announce(ch,buf); /* Comment out if you dont have announce */
		doublexp = FALSE;
		return;
	}
}

-> fight.c <-

I have this at the top under the rest of the local functions

bool    doublexp;

Next look for this in void group_gain


        xp = xp_compute (gch, victim, group_levels);
        sprintf (buf, "You receive %d experience points.\n\r", xp);
        send_to_char (buf, gch);
        gain_exp (gch, xp);

change that to look like this...

	xp = xp_compute (gch, victim, group_levels);
        if (doublexp) {
            xp = xp * 2;
	    send_to_char("Double exp\n\r", gch);
            sprintf (buf, "You receive {G%d{x (double)experience points.\n\r", xp);
            send_to_char (buf, gch);
            gain_exp (gch, xp);
        } else {
            sprintf (buf, "You receive %d experience points.\n\r", xp);
            send_to_char (buf, gch);
            gain_exp (gch, xp);
	}

or you can have it like this

	xp = xp_compute (gch, victim, group_levels);
        if (doublexp) {
            xp = xp * 2;
	    send_to_char("Double exp\n\r", gch);
        }
        sprintf (buf, "You receive %d experience points.\n\r", xp);
        send_to_char (buf, gch);
        gain_exp (gch, xp);

-> interp.c <-
stick this with the rest of the immortal commands order doesn't matter.
I have it set at MAX_LEVEL so it doesn't get abused.  change the level if you want.

	{"doublexp",	do_doublexp,POS_DEAD, ML, LOG_ALWAYS, 1},

-> interp.h <-
Stick this somewhere also order is nice but as above doesn't matter :)

DECLARE_DO_FUN( do_doublexp );


---------------------------------------------------------------------------------
That should be all to it.  If you have any problems please try and fix them 
yourself before you mail me asking for help.