108 lines
3.7 KiB
C
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();
|
|
}
|