// /cmds/skills/_aura.c // From the Nightmare Mudlib // A spell that creates a glowing shield around the caster // by Kalinash@Nightmare on May 1, 1994. #include <std.h> inherit DAEMON; int alignment_check(object ob); int cmd_aura(string who) { object ob, me, orb; int cost, defense, prot, length; string Class; me = this_player(); Class = me->query_class(); if(environment(this_player())->query_property("no magic")) return notify_fail("Something is blocking your concentration.\n"); if(Class != "mage" && Class != "kataan" && Class != "monk" && Class != "cleric") return notify_fail("You mumble in confusion.\n"); if(!who) who = me->query_name(); if(!ob=find_player(who)) return notify_fail(sprintf("%s doesn't seem to be on the mud.\n", capitalize(lower_case(who)))); if(!present(ob, environment(this_player()))) return notify_fail(sprintf("%s isn't here!\n", capitalize(lower_case(who)))); if((Class == "monk" || Class == "cleric") && !alignment_check(me)) return notify_fail("You have betrayed the source of your power.\n"); me->set_magic_round(); cost = 60 + (random(2000/((int)this_player()->query_stats("wisdom")+1))); defense = (int)this_player()->query_skill("magic defense"); cost = cost + (int)ob->query_magic_protection(0)*15; if((int)me->query_mp() < cost) return notify_fail("Too low on magic energy.\n"); if(me == ob) prot = (1+defense/25); else prot = (1+defense/20); me->add_mp(-cost); length = random(defense*10)+100; if(length > 600) length = 600; ob->add_magic_protection( ({ 0, prot, length }) ); orb = new("/std/obj/aura_orb"); orb->move(ob); orb->set_time(length); orb->start(); if(me == ob) me->add_skill_points("magic defense", random(10)); else { me->add_skill_points("magic defense", random(20)); me->add_exp(5); } if(Class == "monk" && (int)ob->query_alignment() < 0) me->add_alignment(-random(10)); else if(me != ob && (int)me->query_alignment() > 0 && (int)ob->query_alignment() > 0) me->add_alignment(random(10)); if(ob == me) message("my_action", "%^YELLOW%^You create a glowing shield " "around your body.%^RESET%^", me); else { message("my_action", sprintf("%%^YELLOW%%^You create a " "glowing shield around the body of %s", (string)ob->query_cap_name()), me); message("their_action", sprintf("%%^YELLOW%%^%s creates a " "glowing shield around your body.", me->query_cap_name()), ob); } message("other_action", sprintf("%s mumbles a %s of protection.", (string)me->query_cap_name(), Class == "mage" ? "spell" : "prayer"), environment(me), me); return 1; } int alignment_check(object ob) { if( (int)ob->query_alignment() > 200) return 1; if( (string)ob->query_class() == "cleric" && (int)ob->query_alignment() > 0) return 1; return 0; } void help() { message("help", "Usage: <aura [whom]>\n\nThis spells creates a " "glowing shield around the body of [whom].", this_player()); return; }