/* Dazzle came up with a great idea, and it inspired me so I worked on it some more.
* Basically I put everything into one command. You can turn each type on independantly, or
* you can turn them all on or off at once. Expanding the tick updates into a new function
* was his idea so i'm giving him credit for that as well.
*/
Changes for file merc.h
***********************
put this with your other external variables
extern bool double_exp;
extern bool double_qp;
extern bool quad_damage;
extern int global_exp;
extern int global_qp;
extern int global_quad;
extern sh_int display;
extern sh_int qpdisplay;
extern sh_int quaddisplay;
Changes for file fight.c
************************
add this to the damage function right before damage is shown
if (IS_NPC(victim) && !IS_NPC(ch) && quad_damage)
dam = dam * 4;
in function xp compute with the other declaration add this
int bonus = 0;
at the end right before the xp is returned put this
bonus = xp;
if (double_exp)
{
xp += bonus;
}
Changes for file act_wiz.c
**************************
put this with the other local functions
bool double_exp = FALSE;
bool double_qp = FALSE;
bool quad_damage = FALSE;
Put this at the end of act_wiz.c
void do_double( CHAR_DATA *ch, char *argument )
{
char arg[MIL];
char arg1[MIL];
char arg2[MIL];
int amount;
argument = one_argument( argument, arg );
argument = one_argument( argument, arg1);
one_argument( argument, arg2);
if ( arg[0] == '\0'|| arg1[0] == '\0' )
{
send_to_char("Syntax: all <on|off> ticks.\n\r",ch);
send_to_char("Syntax: <type> <on|off> ticks.\n\r", ch );
send_to_char("Valid types are: double | quest | quad\n\r", ch );
return;
}
if (!str_cmp(arg, "all"))
{
if (!str_cmp(arg1, "on"))
{
if ( arg2[0] == '\0' || !is_number( arg2 ) )
{
send_to_char("You need to apply the number of ticks.\n\r", ch );
return;
}
if (double_exp || double_qp || quad_damage )
{
send_to_char("One of the types is already in affect! Please turn it off in order to use the all option.\n\r",ch);
return;
}
amount = atoi( arg2 );
if ( amount < 0 || amount > 500 )
{
send_to_char( "Please choose an amount between 0 and 500.\n\r", ch );
return;
}
global_exp = amount;
double_exp = TRUE;
global_qp = amount;
double_qp = TRUE;
global_quad = amount;
quad_damage = TRUE;
info( NULL, 0, "{G[INFO]:{x {R%s has declared %d ticks of double exp, double qp, and quad damage for everyone!{x\n\r", ch->name, amount );
return;
}
if (!str_cmp(arg1, "off"))
{
if (!double_exp && !double_qp && !quad_damage)
{
send_to_char("All of the double types are off. Turn them on first.\n\r",ch);
return;
}
double_exp = FALSE;
global_exp = 0;
global_qp = 0;
double_qp = FALSE;
quad_damage = FALSE;
global_quad = 0;
info( NULL, 0, "{G[INFO]:{x {R%s has removed all of the double types!{x\n\r", ch->name);
return;
}
}
if (!str_cmp( arg, "exp"))
{
if (!str_cmp(arg1, "on"))
{
if ( arg2[0] == '\0' || !is_number( arg2 ) )
{
send_to_char("You need to apply the number of ticks.\n\r", ch );
return;
}
if (double_exp)
{
send_to_char("Double exp is already in affect!\n\r",ch);
return;
}
amount = atoi( arg2 );
if ( amount < 0 || amount > 500 )
{
send_to_char( "Please choose an amount between 0 and 500.\n\r", ch );
return;
}
global_exp = amount;
double_exp = TRUE;
info( NULL, 0, "{G[INFO]:{x {R%s has declared %d ticks of double exp for everyone!{x\n\r", ch->name, amount );
return;
}
if (!str_cmp(arg, "off"))
{
if (!double_exp)
{
send_to_char("Double exp is not on please turn it on first!\n\r",ch);
return;
}
double_exp = FALSE;
global_exp = 0;
info( NULL, 0, "{G[INFO]:{x {R%s has removed double experience!{x\n\r",ch->name);
return;
}
}
if (!str_cmp( arg, "quest"))
{
if (!str_cmp(arg1, "on"))
{
if ( arg2[0] == '\0' || !is_number( arg2 ) )
{
send_to_char("You need to apply the number of ticks.\n\r", ch );
return;
}
if (double_qp)
{
send_to_char("Double questpoints is already in affect!\n\r",ch);
return;
}
amount = atoi( arg2 );
if ( amount < 0 || amount > 500 )
{
send_to_char( "Please choose an amount between 0 and 500.\n\r", ch );
return;
}
global_qp = amount;
double_qp = TRUE;
info( ch, 0, "{G[INFO]:{x {R%s has declared %d ticks of double questpoints for everyone!{x\n\r", ch->name, amount );
send_to_char("Double questpoints is now in affect!\n\r",ch);
return;
}
if (!str_cmp(arg, "off"))
{
if (!double_qp)
{
send_to_char("Double questpoints is not on please turn it on first!\n\r",ch);
return;
}
double_qp = FALSE;
global_qp = 0;
info( NULL, 0, "{G[INFO]:{x {R%s has removed double questpoints!{x\n\r",ch->name);
return;
}
}
if (!str_cmp( arg, "quad"))
{
if (!str_cmp(arg1, "on"))
{
if ( arg2[0] == '\0' || !is_number( arg2 ) )
{
send_to_char("You need to apply the number of ticks.\n\r", ch );
return;
}
if (quad_damage)
{
send_to_char("Quad damage is already in affect!\n\r",ch);
return;
}
amount = atoi( arg2 );
if ( amount < 0 || amount > 500 )
{
send_to_char( "Please choose an amount between 0 and 500.\n\r", ch );
return;
}
global_quad = amount;
quad_damage = TRUE;
info( NULL, 0, "{G[INFO]:{x {R%s has declared %d ticks of quad damage for everyone!{x\n\r", ch->name, amount );
return;
}
if (!str_cmp(arg, "off"))
{
if (!quad_damage)
{
send_to_char("Quad damage is not on please turn it on first!\n\r",ch);
return;
}
quad_damage = FALSE;
global_quad = 0;
info( NULL, 0, "{G[INFO]:{x {R%s has removed quad damage!{x\n\r",ch->name);
return;
}
}
send_to_char("Syntax: all <on|off> ticks.\n\r",ch);
send_to_char("Syntax: <type > <on|off> ticks.\n\r", ch );
send_to_char("Valid types are: double | quest | quad\n\r", ch );
}
Changes for file update.c
*************************
int global_exp;
int global_qp;
int global_quad;
sh_int display;
sh_int qpdisplay;
sh_int quaddisplay;
Put this in update after the char_update function
void update_bonuses()
{
if ( global_exp-- >= -1 )
{
display++;
if ( display >= 3 && global_exp > 0 )
{
info( NULL, 0, "{G[INFO]:{x {BThere are %d ticks of double exp left.{x\n\r", global_exp );
display = 0;
return;
}
if (global_exp == 0)
{
info( NULL, 0, "{G[INFO]:{x {BDouble exp has run out!{x\n\r" );
double_exp = FALSE;
return;
}
}
if ( global_qp-- >= 0 )
{
qpdisplay++;
if ( qpdisplay >= 3 && global_qp > 0 )
{
info( NULL, 0, "{G[INFO]:{x {BThere are %d ticks of double questpoints left.{x\n\r", global_qp );
qpdisplay = 0;
return;
}
if ( global_qp == 0 )
{
info( NULL, 0, "{G[INFO]:{x {BDouble questpoints has run out!{x\n\r" );
double_qp = FALSE;
return;
}
}
if ( global_quad-- >= 0 )
{
quaddisplay++;
if ( quaddisplay >= 3 && global_quad > 0 )
{
info( NULL, 0, "{G[INFO]:{x {BThere are %d ticks of quad damage left.{x\n\r", global_quad );
quaddisplay = 0;
return;
}
if ( global_quad == 0 )
{
info( NULL, 0, "{G[INFO]:{x {BQaud damage has run out!{x\n\r" );
quad_damage = FALSE;
return;
}
}
}
Put this in update_handler in the pulse_point section
update_bonuses();