mud/lib/domains/Praxis/monastery.c
2020-09-06 05:43:07 -07:00

110 lines
3.5 KiB
C

#include <lib.h>
inherit LIB_ROOM;
object *begging;
void init() {
::init();
add_action("confess", "confess");
add_action("pray", "pray");
}
void create() {
::create();
SetListen("default", "You hear the faint sounds of "
"chanting from up the stairs.");
SetListen("upstairs", "You hear the chanting of monks.");
SetListen("chants", "We serve an old man in a dry season"
"\nA lighthouse keeper in the desert sun\n"
"Dreamers of sleepers and white treason\n"
"We dream of rain and the history of the gun\n");
begging = ({});
SetShort( "Praxis monastary");
SetLong(
"You are in the ornate monastary of Praxis.\n"
"In this huge open monastary run by Praxis monks, the wretched "
"murders come to confess, and the dead come to pray for resurrection. "
"A small stairway to the east leads to the monastary attic and "
"basement. The Praxis Chapel where monks marry people is north. "
"Boc La Road is outside the monastary to the south. ");
SetExits(
(["south" : "/domains/Praxis/e_boc_la1",
"east" : "/domains/Praxis/stairs",
"north" : "/domains/Praxis/chapel"]) );
SetProperty("light", 2);
SetProperty("indoors", 1);
SetItems(
(["monastery" : "The home of the Nightmare monks.",
"chamber" : "People come here to pray for resurrection "
"when they die.",
"stairway" : "A small spiral set of stairs leading to "
"the attic and cellar.",
"road" : "Boc La Road."]) );
SetProperty("no attack", 1);
SetProperty("no steal", 1);
SetProperty("no castle", 1);
}
int pray() {
if(!this_player()->query_ghost()) {
notify_fail("The living do not need to pray for revival.\n");
return 0;
}
this_player()->revive();
this_player()->SetHealthPoints(10);
this_player()->set_heart_beat(1);
this_player()->set_heal_rate(2);
return 1;
}
int confess(string str) {
object *inv;
int i, ok;
string res;
if(str != "murder") {
notify_fail("Confess what?\n");
return 0;
}
ok = 0;
if(sscanf(this_player()->getenv("TITLE"), "%s murderer $N%*s", res)
!= 1) {
notify_fail("You are no murderer.\n");
return 0;
}
i = sizeof(inv = all_inventory(this_object()));
while(i--) if(inv[i]->query_class() == "monk") ok = 1;
if(!ok) {
write("There is no one here to whom you may confess.");
return 1;
}
message("my_action", "You beg the monks for forgiveness for "
"your murder of a "+lower_case(res)+".", this_player());
message("my_action", ("You pray that forgiveness does not mean "
"death."), this_player());
say(this_player()->query_cap_name()+" begs for "+
this_player()->query_possessive()+" murder of a "+
lower_case(str)+".");
begging += ({ this_player() });
call_out("forgive", 60, this_player());
return 1;
}
object *query_forgiven() { return begging; }
void forgive(object ob) {
string tmp;
if(member_array(ob, begging) == -1) return;
begging -= ({ ob });
tmp = call_other("/domains/Praxis/"+ob->query_class()+"_hall",
"get_new_title", ob);
message("info", "You are now forgiven.", ob);
ob->setenv("TITLE", tmp);
ob->add_mp(-500);
ob->add_hp(100- (ob->query_skill("faith")));
}