/** * This is an owned room inherit. It allows controllable entrance and * things like 'allow' and 'throwout' and stuff. Make sure the create on * this is called after the create in the basic room. * @author Pinkfish * @started 30th of June */ #include <room.h> private string _owner; private string* _allowed; private nosave string _save_file; private nosave string _front_door; protected int do_allow(string name); protected int do_throwout(string name); protected int do_disallow(string name); void load_room(); varargs mixed call_door( string direc, string func, mixed arg1, mixed arg2, mixed arg3); string query_owner(); void create() { _allowed = ({ }); load_room(); } /* create() */ /** @ignore yes */ void init() { if (this_player()->query_name() == query_owner()) { add_command("room", "allow <string'person'>", (: do_allow($4[0]) :)); add_command("room", "disallow <string'person'>", (: do_disallow($4[0]) :)); add_command("room", "throwout <indirect:living'person'>", (: do_throwout($4[0]) :)); } } /* init() */ /** * This method sets the save file for the owned room. * @param save_file the name of the save file */ void set_save_file(string name) { _save_file = name; } /* set_save_file() */ /** * This method returns the save file the owned room. * @return the save file for the owned room */ string query_save_file() { return _save_file; } /* query_save_file() */ /** * This method returns the current allowed list on the room. * @return the current allowed array */ string *query_allowed() { return _allowed; } /* query_allowed() */ /** * This method sets the allowed array for the room. * @param allowed the new allowed array. */ protected void set_allowed(string *allowed) { _allowed = allowed; } /* set_allowed() */ /** * This method returns the owner of the room. * @return the owner of the room */ string query_owner() { return _owner; } /* query_owner() */ /** * This method sets the owner of the room. * @param owner the new owner of the room */ void set_owner(string owner) { _owner = owner; } /* set_owner() */ /** * This the main entry point for the allow command. * @paran name the name of the person to allow */ protected int do_allow(string name) { name = lower_case(name); if (member_array(name, _allowed) != -1) { add_failed_mess("The person " + name + " is already allowed.\n"); return 0; } _allowed += ({ name }); write("Ok, you have allowed " + name + " to enter your room.\n"); return 1; } /* do_allow() */ /** * This the main entry point for the disallow command. * @paran name the name of the person to disallow * @return 1 on succes, 0 on failure */ protected int do_disallow(string name) { name = lower_case(name); if (member_array(name, _allowed) == -1) { add_failed_mess("The person " + name + " is not allowed to disallow.\n"); return 0; } _allowed -= ({ name }); write("Ok, you have disallowed " + name + " from entering your room.\n"); return 1; } /* do_disallow() */ /** * This is the main entry point for the throwout command. * @param name the name of the person to throwout * @return 1 on success, 0 on failure */ protected int do_throwout(object *people) { object per; object *moved; moved = ({ }); foreach (per in people) { if ( ROOM_HANDLER->exit_move( _front_door, 0, 0, per) ) { moved += ({ per }); } } if (!sizeof(moved)) { add_failed_mess("Unable to move $I for some reason.\n", people); return 0; } add_succeeded_mess("$N throw$s $I out of the room.\n", moved); return 1; } /* do_throwout() */ /** * This method sets the exit that is the front door. * @param exit the exit to use as the front door */ void set_front_door(string exit) { _front_door = exit; } /* set_front_door() */ /** * This method queries the current front door. * @return the current front door */ string query_front_door() { return _front_door; } /* query_front_door() */ /** * This method checks to see if they are allowed in. Allow anyone in * if the room is not locked. * @param person the person to check * @return 1 if they are allowed in, 0 if not */ int is_allowed_in(string person) { person = lower_case(person); if (person != query_owner()) { if (call_door(_front_door, "query_locked")) { if (member_array(person, _allowed) != -1) { return 0; } } } return 1; } /* is_allowed_in() */ /** * This method tests to see if the person in question is either the owner * or is allowed. * @param person the person to check */ int is_allowed(string person) { if (person == query_owner() || member_array(person, query_allowed()) != -1) { return 1; } return 0; } /* is_allowed() */ /** * This method loads the room setup. */ void load_room() { if (_save_file) { restore_object(_save_file); // Default the room to a locked door. call_door(_front_door, "set_locked", 1); } } /* load_room() */ /** * This method saves the room setup. */ void save_room() { if (_save_file) { save_object(_save_file); } } /* save_room() */