/*
....[@@@..[@@@..............[@.................. 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@hom.net
MUD++ development mailing list mudpp@van.ml.org
------------------------------------------------------------------------------
exit.h
*/
#ifndef _EXIT_H
#define _EXIT_H
#include "nameable.h"
#include "io.h"
#include "streamable.h"
#include "string.h"
#include "index.h"
#include "bit.h"
#include "vmobject.h"
class Affect;
class Room;
const int EXIT_UNDEF = 0;
const int EXIT_SIMPLE = 1;
const int EXIT_IS_DOOR = 2;
const int EXIT_CLOSED = 3;
const int EXIT_LOCKED = 4;
const int EXIT_BASHED = 5;
const int EXIT_NO_PICK = 6;
const int EXIT_NO_LOCK = 7;
const int EXIT_NO_BASH = 8;
const int EXIT_NO_MAGE = 9;
const int EXIT_NO_CLERIC = 10;
const int EXIT_NO_THIEF = 11;
const int EXIT_NO_WARRIOR = 12;
const int EXIT_NO_5 = 13;
const int EXIT_NO_6 = 14;
const int EXIT_NO_7 = 15;
const int EXIT_NO_8 = 16;
const int EXIT_NO_MORTAL = 17;
const int EXIT_HIDDEN = 18;
const int EXIT_TRAP = 19;
const int EXIT_SLAM = 20;
const int MAX_EXIT_BIT_FIELDS = 1;
extern const bitType exit_bits[];
class Exit : public Nameable, public Streamable, public virtual VMObject
{
public:
Index room_index;
Room *room_ptr;
unsigned long original_flags[ MAX_EXIT_BIT_FIELDS ];
unsigned long flags[ MAX_EXIT_BIT_FIELDS ];
Index key;
String desc;
Exit()
: room_ptr(0)
{
memset( (void *)original_flags, 0,
sizeof( original_flags[0] * MAX_EXIT_BIT_FIELDS ) );
memset( (void *)flags, 0,
sizeof( flags[0] * MAX_EXIT_BIT_FIELDS ) );
}
Exit( const char * strName, const char * rIndex,
const char * kIndex, int start_flags, const char *str )
: Nameable( strName ),
room_index( rIndex ),
room_ptr(0), key( kIndex ),
desc( str )
{
// Temporaryh
original_flags[0] = start_flags;
flags[0] = start_flags;
}
Exit( const String & strName, const Index & rIndex,
const Index & kIndex, int start_flags, const String & str )
: Nameable( strName ),
room_index( rIndex ),
room_ptr(0), key( kIndex ),
desc( str )
{
// Temporary
original_flags[0] = start_flags;
flags[0] = start_flags;
}
virtual vmtype getVMType() { return VMT_EXIT; }
int readFrom( StaticInput & ) { return -1; }
int writeTo( Output & ) const { return -1; }
void out( const char * ) const {}
void out( const String & ) const {}
void addAffect( Affect * ) {}
void rmAffect( int ) {}
Affect * getAffect( int ) { return 0; }
const Index & getIndex() const { return room_index; }
Room * getRoom() const { return room_ptr; }
Room * toRoom() const { return room_ptr; }
void setDesc( const String & x ) { desc = x; }
const String & getDesc() const { return desc; }
void reset();
void hardLink();
void toggleExitBit( int x ) { TOGGLE_BIT( flags, x ); }
bool exitBitSet( int x ) { return IS_SET( flags, x ); }
void setIsDoor() { SET_BIT( flags, EXIT_IS_DOOR ); }
void setIsClosed() { SET_BIT( flags, EXIT_CLOSED ); }
void setIsLocked() { SET_BIT( flags, EXIT_LOCKED ); }
void setIsBashed() { SET_BIT( flags, EXIT_BASHED ); }
void setIsNoPick() { SET_BIT( flags, EXIT_NO_PICK ); }
void setIsNoLock() { SET_BIT( flags, EXIT_NO_LOCK ); }
void setIsNoBash() { SET_BIT( flags, EXIT_NO_BASH ); }
void rmIsDoor() { CLR_BIT( flags, EXIT_IS_DOOR ); }
void rmIsClosed() { CLR_BIT( flags, EXIT_CLOSED ); }
void rmIsLocked() { CLR_BIT( flags, EXIT_LOCKED ); }
void rmIsBashed() { CLR_BIT( flags, EXIT_BASHED ); }
void rmIsNoPick() { CLR_BIT( flags, EXIT_NO_PICK ); }
void rmIsNoLock() { CLR_BIT( flags, EXIT_NO_LOCK ); }
void rmIsNoBash() { CLR_BIT( flags, EXIT_NO_BASH ); }
bool isDoor() const { return IS_SET( flags, EXIT_IS_DOOR ); }
bool isClosed() const { return IS_SET( flags, EXIT_CLOSED ); }
bool isOpen() const { return ! IS_SET( flags, EXIT_CLOSED ); }
bool isLocked() const { return IS_SET( flags, EXIT_LOCKED ); }
bool isBashed() const { return IS_SET( flags, EXIT_BASHED ); }
bool isNoPick() const { return IS_SET( flags, EXIT_NO_PICK ); }
bool isNoLock() const { return IS_SET( flags, EXIT_NO_LOCK ); }
bool isNoBash() const { return IS_SET( flags, EXIT_NO_BASH ); }
};
inline int lookupExitBit( const char * x )
{ return lookupBit( exit_bits, x ); }
inline const char * lookupExitBitName( int x )
{ return lookupBitName( exit_bits, x ); }
#endif