#include <std.h>
inherit DAEMON;
void send_messages(object tp, object ob, string Class, string limb);
int cmd_mend(string str) {
string whom, limb, Class;
int amount, cost, healing, i, wisdom;
object tp, ob;
string * limbs;
if(!str) {
notify_fail("Mend whom?\n");
return 0;
}
tp = this_player();
if(tp->query_casting()) {
notify_fail("You are in the middle of another spell!\n");
return 0;
}
if(!alignment_ok(this_player())) {
notify_fail("You have betrayed the source of your powers.\n");
return 0;
}
if((string)this_player()->query_name() == "guest" ||
this_player()->query_ghost()) {
notify_fail("You cannot do that.\n");
return 0;
}
healing = (int)tp->query_skill("healing");
wisdom = (int)tp->query_stats("wisdom");
Class = (string)tp->query_class();
if(str == "me" || str == "myself") ob = tp;
else ob = present(str, environment(tp));
if(!ob) {
if(sscanf(str, "%s %s", whom, limb) == 2) {
if(whom == "me" || whom == "myself") ob = tp;
else ob = present(whom, environment(tp));
}
}
if(!ob) {
notify_fail("Mend whom?\n");
return 0;
}
if(!limb) cost = 11;
else if(limb == "all") cost = 22;
else if(member_array(limb, (string *)ob->query_limbs()) == -1) {
notify_fail("You do not have a "+limb+".\n");
return 0;
}
else cost = 7;
if(ob != tp) cost = random(cost-1)+1;
if((int)tp->query_mp() < cost) {
notify_fail("Too low on magic power.\n");
return 0;
}
this_player()->set_magic_round();
tp->add_mp(-cost);
amount = random(wisdom/2 + 2) + healing/10;
if(tp == ob) tp->add_skill_points("healing", amount);
else {
tp->add_skill_points("healing", amount * 2);
if(this_player() != ob) {
if((string)tp->query_class()=="monk" && ob->query_alignment() < 0)
tp->add_alignment(-amount);
else tp->add_alignment(amount);
}
}
if(!limb) {
ob->add_hp(amount);
send_messages(tp, ob, Class, 0);
}
else if(limb == "all") {
limbs = (string *)ob->query_limbs();
for(i=0; i<sizeof(limbs); i++) {
ob->heal_limb(limbs[i], (amount / 2));
}
ob->add_hp(amount / 2);
send_messages(tp, ob, Class, limb);
}
else {
ob->heal_limb(limb, amount);
send_messages(tp, ob, Class, limb);
}
return 1;
}
void send_messages(object tp, object ob, string Class, string limb) {
string what, thing;
if(Class == "monk" || Class == "cleric") {
thing = "prayer";
what = "a prayer of healing";
}
else if(Class == "mage") {
thing = "magic";
what = "a spell of healing";
}
else {
thing = "nonsense";
what = "nonsense";
}
if(tp == ob) {
tell_object(tp, "You mend your own wounds through "+thing+".");
tell_room(environment(tp), tp->query_cap_name()+" mutters "+what
+".", ({tp}));
}
else {
tell_object(tp, "You mend "+ob->query_cap_name()+"'s wounds through "+thing+"");
tell_object(ob, tp->query_cap_name()+" mends your wounds through "+thing+"");
tell_room(environment(tp), tp->query_cap_name()+" mutters "+what+"", ({tp, ob}));
}
}
int help()
{
write( @EndText
Syntax: mend <player>
Effect:a healing magic command
restores some of <player>'s lost hit points
EndText
);
return 1;
}