/** Invisibilty **/ inherit "inherit/timer"; status invisibility(mixed targ, mixed alt_type) { int time, i; string file; if(!alt_type) alt_type = "illusion"; time = (objectp(alt_type)) ? (int)alt_type->query_cast_level() : (int)call_other(this_player(),"query_"+alt_type); file = file_name(this_object()); sscanf(file, "%s#%d", file, i); this_player()->load_spell(({ "target", this_player(), "name", "Invisibility", "sphere", alt_type, "cost", 8, "damage", time, "level", 8, "cast time", 1, "spell object", file, "passive", "component", "gem#gemstone#stone#rock", /* other spell options... "msg target", 0, "msg room", 0, "msg caster", 0, */ })); return 1; } /* call when this object is cloned to target */ status cast_spell(object caster, object target, object previous, int time) { object ob; ob = present("invisibility 2", caster); if(ob) { write("You extend the time of your invisibility spell.\n"); ob->adj_time(time*30); destruct(this_object()); } else { caster->set_invis(time); adj_time(time*45); write("You suddenly disappear.\n"); say((string)caster->query_name()+" "+(string)caster->query_mmsgout()+"\n"); } return 1; } void extra_long() { if(this_player() == environment()) write("You are invisible.\n"); else write(environment()->query_name()+" is invisible.\n"); } void time_out() { environment()->set_invis(0); environment()->save_character(); ::time_out(); } status drop(status quit) { if(quit) time_out(); return 1; } void dispel_magic() { time_out(); } status id(string str) { return str == "spell" || str == "invisibility"; } /* Native Mode Move */ #include <move.h>