/* dispel magic, illusion, conjuration */ #define SPELLNAME (string)caster->query_spell_name() status dispel(string spell_type, mixed alt_type) { int i; string file; string targ; string spell_name; int spell_level; if(!spell_type) { notify_fail("dispel illusion, dispel magic, dispel conjuration?\n"); return 0; } if(!alt_type) alt_type = "abjuration"; file = file_name(this_object()); sscanf(file, "%s#%d", file, i); sscanf(spell_type,"%s %s", spell_type, targ); spell_type = lower_case(spell_type); switch(spell_type) { case "illusion": spell_name = "Dispel Illusion"; spell_level = 5; break; case "magic": spell_name = "Dispel Magic"; spell_level = 10; break; case "conjuration": spell_name = "Dispel Conjuration"; spell_level = 7; break; default: notify_fail("dispel illusion, dispel magic, dispel conjuration?\n"); return 0; break; } this_player()->load_spell(({ "target", targ, "name", spell_name, "sphere", alt_type, "cost", spell_level, "level", spell_level, "cast time", 1, "spell object", file, "passive", })); return 1; } /*******************************************************************/ /* called when this is cloned to target */ status cast_spell(object caster,object target,object prev,int dmg) { object ob, *inv; status flag; int i; if(SPELLNAME == "Dispel Illusion") { if((ob = (object)target->query_illusion_object())) { flag = 1; ob->dispel_magic(); } inv = all_inventory(target); for(i = sizeof(inv); i--; ) { if((ob = (object)inv[i]->query_illusion_object())) { flag = 1; ob->dispel_magic(); } } if(!flag) { write("There is no illusion on "+ target->short() +".\n"); } else { tell_room(environment(caster),"You feel some magic drain away...\n"); } } else if(SPELLNAME == "Dispel Conjuration") { if(!living(target)) { if(target == environment(caster)) { write("Don't be silly.\n"); } else write(target->query_name() +" is not a conjured monster.\n"); } else { if(function_exists("time_out", target)) { /* assume uses inherit/timer*/ target->dispel_magic(); tell_room(environment(caster),"You feel some magic drain away...\n"); } else { write(target->query_name() +" is not conjured.\n"); } } } else if(SPELLNAME == "Dispel Magic") { inv = all_inventory(target); for(i = sizeof(inv); i--; ) { inv[i]->dispel_magic(); } target->dispel_magic(); tell_room(environment(caster),"You feel some magic drain away...\n"); } if(this_object()) { destruct(this_object()); } return 1; } status id(string str) { return str == "spell"; } /* Native Mode Move */ #include <move.h>