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

108 lines
3.7 KiB
C

/* /d/standard/hotel.c
* from Nightmare IV
* a place to stay for rest and other things
* created by Descartes of Borg (what a cutie!)
* and Lassondra@Nightmare 940424
*/
#include <lib.h>
#include <clock.h>
#include <daemons.h>
inherit LIB_ROOM;
int query_occupied(int chambre);
string query_key_id(int chambre);
object query_room(int chambre);
void check_out();
static private void random_key(int chambre);
static private mapping __Rooms;
void create() {
int x;
room::create();
SetProperties( ([ "indoors":1, "light":2, "no castle":1]) );
SetShort("the Nightmare Inn");
SetLong(
"You find yourself at the entrance of the most prestigious "
"inn in Nightmare. The floor is carpeted with plush red carpet, "
"and the walls are trimmed with golden paint. Large oaken "
"doors from where you entered stand behind you, and directly "
"in front of you the front desk of the hotel stands."
" Type list to see the available rooms, and <rent 'type'> to rent a certain type of room."
);
SetItems( ([ "entrance" : "The lobby of the hotel is very "
"large and spacious. It looks like it is a rather "
"expensive hotel.",
"floor" : "The floor is covered with a very thick "
"red carpet, with golden fringes at the edges.",
"carpet" : "The carpet is in good shape, although "
"it is a bit worn in spots. There is a golden "
"symbol of the hotel standing in the center of it.",
({ "wall", "walls" }) :
"The walls have been painted white with some gold "
"trim on all the edges.",
({ "doors", "door" }) :
"The heavy oaken doors are ornately carved with "
"the hotel ensignia. The doors gleam in the light "
"from the large amount of polishing they receive.",
"desk" : "The front desk is also made from oak, and "
"stands at the back of the lobby.",
"hotel" : "You are in the Nightmare Inn."
])
);
SetExits( ([
"north" : "/domains/Praxis/hall",
"west" : "/domains/Praxis/n_centre1.c",
]) );
// if(!event_pending(this_object())) {
// if((x=hour(time())) > 9) x= (9+(20-x))*HOUR;
// else x = HOUR*(9-x);
// event("check_out", x, 0, 1);
// }
// SetNoClean(1);
// __Rooms = allocate_mapping(10);
// this_object()->check_out();
}
void reset() {
int x;
room::reset();
if(present("receptionist")) return;
new("/domains/Praxis/obj/mon/receptionist")->move(this_object());
}
void set_occupied(int x) { __Rooms[x]["occupied"] = 1; }
int query_occupied(int chambre) {
return __Rooms[chambre]["occupied"];
}
string query_key_id(int chambre) {
return __Rooms[chambre]["key id"];
}
object query_room(int x) {
return load_object(sprintf("/domains/Praxis/inn%d", x));
}
void check_out() {
object *tmp;
int i, j;
if(previous_object() != this_object() &&
base_name(previous_object()) != EVENTS_D) return;
for(i=1; i<11; i++) {
__Rooms[100+i] = ([ "occupied":0, "key id": random_key(100+i) ]);
j = sizeof(tmp = livings() & all_inventory(query_room(100+i)));
while(j--) {
message("my_action", "Check out time!\nThe receptionist "
"hurries you out into the lobby.", tmp[j]);
tmp[j]->eventMoveLiving("/domains/Praxis/hotel", "out");
}
}
}
string random_key(int chambre) {
return sprintf("praxishotel%d%d", chambre, random(100));
}
void init(){
::init();
}