/*
....[@@@..[@@@..............[@.................. 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
------------------------------------------------------------------------------
area.h
*/
#ifndef _AREA_H
#define _AREA_H
#include "string.h"
#include "file.h"
#include "bit.h"
#include "affect.h"
#include "vector.h"
#include "combat.h"
#include "indexable.h"
#include "room.h"
#include "object.h"
#include "npc.h"
// Area is not really a thing but the methods for Thing are applicable
class Area : public Nameable, public Streamable
{
protected:
String file;
String key;
short int security;
int a_flags;
int repop_time;
int timer;
String repop_messg;
String builder;
short int mods;
char dirty_bit;
public:
IndexList<Room> roomIndex;
IndexList<Object> objIndex;
IndexList<NPC> npcIndex;
Area()
: security(1),a_flags(0),repop_time(2), timer(0),
repop_messg("Bonk!"),mods(0),dirty_bit(0)
{
}
Area( const String & x )
: key(x),
repop_time(2), timer(0), mods(0), dirty_bit(0)
{
file << x << ".are";
}
void setDirtyBit() { dirty_bit = 1; }
void rmDirtyBit() { dirty_bit = 0; }
int getDirtyBit() { return dirty_bit; }
virtual void addAffect( Affect * ) {} // area affects (conceivable)
virtual void rmAffect( int ) {}
// Send text to all players in an area.
virtual void outAllChar( const char * );
virtual void outAllChar( const String & x ) { outAllChar( x.chars() ); }
virtual void outAllCharExcept( const char *, PC * );
virtual void outAllCharExcept( const String & x, PC * pc ) { outAllCharExcept( x, pc ); }
void setKey( const String & x ) { key = x; }
const String & getKey() { return key; }
int reload();
int readProtoFrom( InFile & ) { return -1; }
int readFrom() { return Streamable::readFrom( file ); }
int readFrom( InFile & );
int writeProtoTo( OutFile & ) const { return -1; }
int writeTo() const { return Streamable::writeTo( file ); }
int writeTo( OutFile & ) const;
void hardLink();
const String & getFile();
void setFile( const String & );
const String & getBuilder();
void Builder( const String & );
int getSecurity() const;
int getRepopTime();
void setRepopTime( int t );
const String & getRepopMessg();
void setRepopMessg( const String & );
Object *lookupObj( const Index & );
Object *lookupObj( const String & );
Object *lookupObj( const char * );
Object *createObj( const Index & );
NPC *lookupNPC( const Index & );
NPC *lookupNPC( const String & );
NPC *lookupNPC( const char * );
NPC *createNPC( const Index & );
Room * lookupRoom( const Index & );
Room * lookupRoom( const String & );
Room * lookupRoom( const char * );
void repop();
void tick() { if( ++timer >= repop_time ) repop(); }
int addRoom( Room *room );
Room *getRoom( const Index & );
};
#endif