// $Id: door.h,v 1.7.2.5 2000/05/03 01:32:07 justin Exp $ // $Revision: 1.7.2.5 $ $Author: justin $ $Date: 2000/05/03 01:32:07 $ // //ScryMUD Server Code //Copyright (C) 1998 Ben Greear // //This program is free software; you can redistribute it and/or //modify it under the terms of the GNU General Public License //as published by the Free Software Foundation; either version 2 //of the License, or (at your option) any later version. // //This program is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. // //You should have received a copy of the GNU General Public License //along with this program; if not, write to the Free Software //Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // To contact the Author, Ben Greear: greear@cyberhighway.net, (preferred) // greearb@agcs.com // ///************************** door data ********************/// #ifndef GRRMUD_DOOR_INCLUDE_H #define GRRMUD_DOOR_INCLUDE_H #include <bitfield.h> #include <list2.h> #include <string2.h> #include "classes.h" #include "room.h" class room; class door_data { protected: static int _cnt; public: List<String*> names; //the direction e, w... will be first String long_desc; int vis_bit; int door_num; // the vnum of the door int token_num; int key_num; int in_zone; //owner zone // When modifying this, modify DOOR_DATA_FLAGS_NAMES in const.cc bitfield door_data_flags; // 0 open exit, basically no door // 1 is_mag_lockable, 2 is_closed, 3 is_locked, 4 is_pckabl, // 5 is_lockable, 6 mag_locked (spell only can open it) // 7 is_destructable, 8 is_closeable, 9 is_flippable // 10 in_use, 11 is_unopenable (by players, auto only) // 12 is_vehicle_exit, 13 is_secret, 14 is_blocked, // 15 !complete 16 secret_when_open_too, 17 consume_key // 18 !passdoor int isOpen() const { return !(door_data_flags.get(2)); } int canClose() const { return canOpen(); } int isVehicleExit() const { return door_data_flags.get(12); } int canOpen() const { return (!door_data_flags.get(11) && door_data_flags.get(8)); } int canLock() const { return door_data_flags.get(5); } int isClosed() const { return door_data_flags.get(2); } int isLocked() const { return door_data_flags.get(3); } int isMagLocked() const { return door_data_flags.get(6); } int isSecret() const { return (door_data_flags.get(13) || door_data_flags.get(16)); } int isInUse() const { return door_data_flags.get(10); } int isInZone(int zn) { return zn == in_zone; } int isNotComplete() const { return door_data_flags.get(15); } int isSecretWhenOpen() const { return door_data_flags.get(16); } int consumesKey() const { return door_data_flags.get(17); } int isNoPassdoor() const { return door_data_flags.get(18); } void setComplete() { door_data_flags.turn_off(15); } void setNotComplete() { door_data_flags.turn_on(15); } void setIdNum(int i) { door_num = i; } int getIdNum() const { return door_num; } int getZoneNum() const { return in_zone; } int getKeyNum() const { return key_num; } int getTokenNum() const { return token_num; } door_data (); //default constructor door_data(const door_data& source); //copy constructor door_data& operator=(const door_data& source); ~door_data (); void close() { door_data_flags.turn_on(2); } void open() { door_data_flags.turn_off(2); } void lock() { close(); door_data_flags.turn_on(3); } void unlock() { door_data_flags.turn_off(3); } void Clear(); void dbRead(int door_num); void fileRead(ifstream& da_file); void Write(ofstream& da_file); static int getInstanceCount() { return _cnt; } }; //door_data //*********************** door **************************// class critter; class door { protected: static int _cnt; public: door_data* dr_data; int destination; short distance; List<stat_spell_cell*> affected_by; critter* crit_blocking; int ticks_till_disolve; //for temp doors int in_room; door(); door(const door& source); //copy constructor door& operator= (const door& source); ~door(); void Clear(); void Write(ofstream& da_file); void Read(ifstream& da_file); int getVisBit() const { if (dr_data) return dr_data->vis_bit; return 0; } int isOpen() const { return (dr_data && dr_data->isOpen()); } int isSecret() const { return dr_data && dr_data->isSecret(); } int isClosed() const { return dr_data && dr_data->isClosed(); } int canOpen() const { return dr_data && dr_data->canOpen(); } int isLocked() const { return dr_data && dr_data->isLocked(); } int isMagLocked() const { return dr_data && dr_data->isMagLocked(); } int isVehicleExit() const { return dr_data && dr_data->isVehicleExit(); } int canClose() const { return canOpen(); } int isSecretWhenOpen() const { return dr_data && dr_data->isSecretWhenOpen(); } int consumesKey() const { return dr_data && dr_data->consumesKey(); } int isNoPassdoor() const { return (dr_data && dr_data->isNoPassdoor()); } int getIdNum() const { if (dr_data) return dr_data->getIdNum(); return 0; } void lock() { if (dr_data) dr_data->lock(); } void unlock() { if (dr_data) dr_data->unlock(); } void open() { if (dr_data) dr_data->open(); } void close() { if (dr_data) dr_data->close(); } int getKeyNum() const { if (dr_data) return dr_data->getKeyNum(); return 0; } int getTokenNum() const { if (dr_data) return dr_data->getTokenNum(); return 0; } stat_spell_cell* isAffectedBy(int spell_num); room* getDestRoom(); String* getDirection(); ///****************** Static Functions ***************************/// static door* findDoor(const List<door*> &lst, const int i_th, const String* name, const int see_bit, const room& rm, int& count_sofar); static door* findDoor(const List<door*> &lst, const int i_th, const String* name, const int see_bit, const room& rm); static door* findDoor(const List<door*>& lst, const int i_th, const String* name, const int see_bit, const int rm_vis_bit); static door* findDoor(const List<door*>& lst, const int i_th, const String* name, const int see_bit, const int rm_vis_bit, int& count_sofar); static door* findDoorByDest(const List<door*>& lst, int dest_room); static int getInstanceCount() { return _cnt; } };//struct door #endif