// /bin/user/_absorb.c
// Written by Forlock for the Nightmare mudlib
#include <std.h>
inherit DAEMON;
int cmd_absorb (string str) {
object ob;
int ma, faith, damage;
if((string)this_player()->query_class()!="kataan") {
notify_fail("The demons laugh at you as you attempt to use a spell of "+
"darkness.\n");
return 0;
}
if(!str) {
ob = (object)this_player()->query_current_attacker();
if(!ob) {
notify_fail("Absorb from what?\n");
return 0;
}
}
else ob = present(str, environment(this_player()));
if(!ob) ob = parse_objects(environment(this_player()), str);
if(!ob || !living(ob)) {
notify_fail("Look again.\n");
return 0;
}
if(environment(this_player())->query_property("no magic")) {
notify_fail("A magic force prevents your spell.\n");
return 0;
}
if((int)this_player()->query_alignment() > -200 ) {
notify_fail("The demons howl with displeasure at you.\n");
return 0;
}
if(!faith=(int)this_player()->query_skill("faith")) {
notify_fail("The denizens of the underworld do not listen to you.\n");
return 0;
}
if(!ma=(int)this_player()->query_skill("magic attack")) {
notify_fail("You are not yet a powerfull enough magician to do this.\n");
return 0;
}
if((int)this_player()->query_mp() < 50) {
notify_fail("Too low on magic power.\n");
return 0;
}
if(this_player()->query_ghost()) {
notify_fail("Your voice is hollow.\n");
return 0;
}
if(this_player()->query_casting()) return 1;
if(!ob->kill_ob(this_player(),0)) return 1;
if(environment(this_player())->query_property("no attack")) {
notify_fail("A magic force prevents you from casting your spell.\n");
return 0;
}
write("You absorb some health from "+(string)ob->query_cap_name()+" and "
"feel stronger.");
tell_room(environment(this_player()), this_player()->query_cap_name()+
" suddenly looks stronger.", ({ob, this_player()}));
damage = random(ma/3 + faith/3)+10;
this_player()->set_casting(damage);
this_player()->add_mp(-50);
this_player()->add_hp(damage);
ob->add_hp(-damage);
this_player()->add_alignment(-10);
tell_object(ob,"Your life force is being sucked away by "+
this_player()->query_cap_name()+"!");
return 1;
}
void help() {
write("Syntax: <absorb [enemy]>\n\n"
"With this spell, you drain the strength of your enemies\n"
"and increase your own.\n"
);
}