// _keep.c
// mage spell
// created by Descartes of Borg 921116
#include <std.h>
inherit DAEMON;
int cmd_keep(string str) {
object ob;
string who, what, which;
int con, cost;
if(!str) {
notify_fail("Keep what?\n");
return 0;
}
if(sscanf(str, "%s for %s", what, who) != 2) {
notify_fail("Keep what from whom?\n");
return 0;
}
who = lower_case(who);
ob = present(what, environment(this_player()));
if(!ob) ob = present(what, this_player());
if(!ob) ob = parse_objects(environment(this_player()), what);
if(!ob) ob = parse_objects(this_player(), what);
if(!ob) {
notify_fail("No "+what+" to cast a keep on!\n");
return 0;
}
if(ob->query_property("keep") || environment(this_player())->query_property("no magic")) {
notify_fail("A magical force prevents you from casting that spell.\n");
return 0;
}
con = (int)this_player()->query_skill("conjuring");
if(con < 10) {
notify_fail("You are not skilled enough to cast such a spell.\n");
return 0;
}
cost = random(con*2);
if((int)this_player()->query_mp() < cost) {
notify_fail("Too low on magic power.\n");
return 0;
}
write("You cast a spell to keep the "+what+" in "+capitalize(who)+"'s possession.\n");
say(this_player()->query_cap_name()+" casts a spell of keeping.\n", this_player());
ob->set_property("keep", who);
this_player()->add_skill_points("conjuring", cost);
this_player()->add_exp(random(cost));
call_out("remove_keep", 6*cost, ob);
return 1;
}
void remove_keep(object ob) {
if(!ob) return;
ob->remove_property("keep");
}
void help() {
write("Syntax: <keep [what] for [player]\n\n"+
"This spell makes it impossible for anyone to carry an object other\n"+
"than the person named by the spell caster. The duration of the spell\n"+
"is based on the spell casters ability to cast conjuring spells.\n"
"See also: hold, brand\n"
);
}