/*Double Cast Snippet by Hunter Zero of Nivaeh Genesis*/ /* July 2002*/ /*Purpose: to allow spellcasters to cast two spells, one right after the other, with little or no delay, and occainsionly tacking another spell on the end*/ /*All changes are in magic.c*/ /*Before do_cast*/ /*In the globabls section, under the target variable*/ char *spell_one; char *spell_two; char *target_grep; bool dcast1 = FALSE; bool dcast2 = FALSE; int new_delay; int old_delay; /*Function: do_cast*/ replace : target_name = one_argument (argument, arg1); one_argument (target_name, arg2); with: if (dcast1 == TRUE) { act ("{Y$N {cdraws back to cast two spells!{x", ch, NULL, NULL, TO_ROOM); ch->mana = ch->mana - 50; one_argument(argument, arg1); one_argument(target_name, arg2); } else if (dcast2 == TRUE) { one_argument(argument, arg1); one_argument(target_name, arg2); } else { target_name = one_argument (argument, arg1); one_argument (target_name, arg2); } /*End Function do_cast*/ /*interp.h*/ /*with the do_function delcarions*/ DECLARE_DO_FUN( do_double_cast ); /*interp.c*/ /*In the command table, near the cast command*/ { "doublecast", do_double_cast, POS_STANDING,0, LOG_NORMAL, 1 } /*End interp.c*/ /*Function : do_double_cast */ void do_double_cast(CHAR_DATA* ch, char* argument) { char arg1[MAX_STRING_LENGTH]; char arg2[MAX_STRING_LENGTH]; int sn; char buf[MSL]; /*Lets find our targets*/ spell_two = one_argument (argument, arg1); target_name = one_argument (argument, arg1); one_argument( target_name, arg2); target_grep = one_argument( target_name, arg2); spell_one = arg1; spell_two = arg2; target_name = target_grep; /*First Spell*/ dcast1 = TRUE; if ((sn = find_spell (ch, spell_one)) < 1 || skill_table[sn].spell_fun == spell_null || (!IS_NPC (ch) && (ch->level < skill_table[sn].skill_level[ch->class] || ch->pcdata->learned[sn] == 0))) { send_to_char ("You don't know any spells of that name.\n\r", ch); return; } new_delay = 0; old_delay = skill_table[sn].beats; skill_table[sn].beats = new_delay; do_cast( ch, spell_one); skill_table[sn].beats = old_delay; /*Switching the spell that went through*/ dcast1 = FALSE; dcast2 = TRUE; /*Second Spell*/ if ((sn = find_spell (ch, arg1)) < 1 || skill_table[sn].spell_fun == spell_null || (!IS_NPC (ch) && (ch->level < skill_table[sn].skill_level[ch->class] || ch->pcdata->learned[sn] == 0))) { send_to_char ("You don't know any spells of that name.\n\r", ch); return; } old_delay = skill_table[sn].beats; skill_table[sn].beats = new_delay; do_cast( ch, spell_two); skill_table[sn].beats = old_delay; return; }