/* ....[@@@..[@@@..............[@.................. MUD++ is a written from ....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and ....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++. ....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing ....[@......[@..[@@@@@..[@@@@@.................. development project. All ................................................ contributions are welcome. ....Copyright(C).1995.Melvin.Smith.............. Enjoy. ------------------------------------------------------------------------------ Melvin Smith (aka Fusion) msmith@falcon.mercer.peachnet.edu MUD++ development mailing list mudpp-list@spice.com ------------------------------------------------------------------------------ room.h */ #ifndef _ROOM_H #define _ROOM_H #include "file.h" #include "string.h" #include "llist.h" #include "vector.h" #include "nameable.h" #include "streamable.h" #include "exit.h" class Area; class Repop; class Description; class Object; class Char; class PC; class NPC; const int DIR_UNDEFINED = -1; const int DIR_NORTH = 0; const int DIR_EAST = 1; const int DIR_SOUTH = 2; const int DIR_WEST = 3; const int DIR_UP = 4; const int DIR_DOWN = 5; const int MAX_DIR = 6; // Unused const int DIR_NORTH_EAST = 6; const int DIR_NORTH_WEST = 7; const int DIR_SOUTH_EAST = 8; const int DIR_SOUTH_WEST = 9; class Room : public Nameable, public Streamable { protected: Area * area; String key; // Index key Vector vec; String desc; // Detailed room desc Exit * exits[ MAX_DIR ]; int temp; // temperature - function of environ and inside heat sources public: LList<Repop> repops; LList<Description> ed; LList<Object> inv; LList<Char> chars; Room() : area(0) { memset( exits, 0, sizeof( exits[0] ) * MAX_DIR ); } Room( Area *x ) : area(x) { memset( exits, 0, sizeof( exits[0] ) * MAX_DIR ); } Room( Area *x, const String & y ) : area(x), key(y) { memset( exits, 0, sizeof( exits[0] ) * MAX_DIR ); } ~Room(); // const Index & getIndex() const { return index; } // void setIndex( const Index & x ) { index = x; } // void setIndexScope( const String & x ) { index.setScope( x ); } void setKey( const String & x ) { key = x; } const String & getScope() const; const String getKey() const { return key; } void pulse(); int writeTo( OutFile & ) const; int readFrom( InFile & ); int writeProtoTo( OutFile & ) const {} int readProtoFrom( InFile & ) {} void hardLink(); void addRepop( Repop * ); void repop(); Area *getArea() { return area; } void addObjInv( Object * ); void rmObjInv( Object * ); void addCharInv( Char * ); void rmCharInv( Char * ); virtual void out( const char * ); virtual void out( const String & x ) { out( x.chars() ); } virtual void outAllCharExcept( const char *, Char *, Char * ); virtual void outAllCharExcept( const String &, Char *, Char * ); const String & getDesc() { return desc; } void setDesc( const String & x) { desc = x; } const String & getExtraDesc( const String & x ) { return getExtraDesc( x.chars() ); } const String & getExtraDesc( const char * ); void addExtraDesc( Description * d ) { ed.addTop( d ); } Exit * getExit( int ); Room *toRoom( int ); void addExit( Exit *, int ); void deleteExit( int ); Char *getChar( const String & ); // player or mob PC *getPC( const String & ); // player NPC *getNPC( const String & ); // mob Object *getObj( const String & ); }; inline void Room::outAllCharExcept( const String & x, Char * y, Char * z ) { outAllCharExcept( x.chars(), y, z ); } #endif