// _mheal.c // Author: Hanse (with original code from _heal.c made by Descartes) // Date: 8-Nov-92 // Modified by Bohemund to restrict it for use only by clerics, // ansi was added as well. // Date: 10-Jan-94 #include <std.h> inherit DAEMON; void send_messages(object tp, object ob, string limb); int cmd_mheal(string str) { string whom, limb; int amount, cost, healing, i, wisdom; object tp, ob; string * limbs; if(!str) { notify_fail("Heal 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((string)tp->query_class() != "cleric") { notify_fail("Only clerics may use such powerful curative magic.\n"); return 0; } if((int)tp->query_alignment() < 750) { notify_fail("You have betrayed the source of your powers.\n"); return 0; } healing = (int)tp->query_skill("healing"); wisdom = (int)tp->query_stats("wisdom"); ob = find_player(str); if(!ob) { if(sscanf(str, "%s %s", whom, limb) != 2) { notify_fail("Correct syntax: <heal [who] [(limb)]\n"); return 0; } ob = find_player(whom); } if(!ob) { notify_fail("Heal whom?\n"); return 0; } if(ob == tp) { notify_fail("This spell is only for healing over long distances.\n"); return 0; } if(!limb) cost = 22; else if(limb == "all") cost = 44; else if(member_array(limb, (string *)ob->query_limbs()) == -1) { notify_fail("The target does not have a(n) "+limb+" limb.\n"); return 0; } else cost = 14; if(ob != tp) cost = random(cost) + 10; if((int)tp->query_mp() < cost) { notify_fail("Too low on magic power.\n"); return 0; } tp->add_mp(-cost); if(healing < 5) amount = 0; else amount = random(wisdom + (healing/10)); tp->add_skill_points("healing", amount * 2); if((string)tp->query_class()=="monk" && ob->query_alignment() < 0) tp->add_alignment(-amount); else tp->add_alignment(amount); this_player()->set_magic_round(); tp->add_exp(random((amount/2)+2)); if(!limb) { ob->add_hp(amount); send_messages(tp, ob, 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, limb); } else { ob->heal_limb(limb, amount); send_messages(tp, ob, limb); } return 1; } void send_messages(object tp, object ob, string limb) { string what, thing; thing = "prayer"; what = "a prayer of healing"; tell_object(tp, "%^GREEN%^%^BOLD%^You heal "+ob->query_cap_name()+ "'s wounds through "+thing+"."); tell_object(ob, "%^GREEN%^%^BOLD%^"+tp->query_cap_name()+ " heals your wounds through "+thing+"."); tell_room(environment(tp), "%^GREEN%^%^BOLD%^"+tp->query_cap_name()+ " mutters "+what+".", ({tp, ob})); } void help() { write("Syntax: <heal [player] [(limb)]>\n\n" "Heals the player named over a distance. If no limb is given, then " "it heals hp. Otherwise it heals the limb named. The argument \"all\" " "is a valid argument for the limb. This heal is very expensive sp " "wise and is usable only by clerics who have proven their goodness.\n"); }