/*
....[@@@..[@@@..............[@.................. 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
------------------------------------------------------------------------------
mudobj.h
*/
#ifndef _MUDOBJ_H
#define _MUDOBJ_H
#include "llist.h"
#include "action.h"
#include "bit.h"
#include "string.h"
#include "trigs.h"
#include "vmobject.h"
class Action;
class Affect;
class Modifier;
const int MAX_AFFECT_BIT_FIELDS = 1;
class MudObject : public VMObject
{
protected:
unsigned long aff_bits[MAX_AFFECT_BIT_FIELDS];
unsigned long trigger_bits[ MAX_NEWTRIG_BIT_FIELDS ];
public:
LList<Affect> aff_list;
LList<Action> o_list;
LList<Action> t_list; // this is for trigger actions
// and command actions
// doing is the pointer to what
// the char is doing
LList<struct TriggerData> triggers;
MudObject()
{
memset( aff_bits, 0,
sizeof( aff_bits[0] * MAX_AFFECT_BIT_FIELDS ) );
memset( trigger_bits, 0,
sizeof( trigger_bits[0] ) * MAX_NEWTRIG_BIT_FIELDS );
}
MudObject( const MudObject & x )
{
// Copy the aff_list.
// Still uncertain about how I want to do this so right
// now only copy the bit field.
memcpy( aff_bits, x.aff_bits,
sizeof( aff_bits[0] * MAX_AFFECT_BIT_FIELDS ) );
memcpy( trigger_bits, x.trigger_bits,
sizeof( trigger_bits[0] ) * MAX_NEWTRIG_BIT_FIELDS );
triggers.copy( x.triggers );
}
virtual ~MudObject();
virtual vmtype getVMType() { return VMT_MUDOBJECT; }
virtual bool isThing() const { return false; }
virtual bool isRoom() const { return false; }
virtual bool isChar() const { return false; }
virtual bool isObject() const { return false; }
virtual bool isPC() const { return false; }
virtual bool isNPC() const { return false; }
virtual bool isShopKeeper() const { return false; }
virtual bool affectedBy( int x ) { return IS_SET(aff_bits, x); }
virtual void addAffect( Affect * );
virtual void rmAffect( int );
virtual Affect * getAffect( int );
virtual void modify( Modifier *, bool ) {}
virtual void out( const char * ) {}
virtual void out( const String & ) {}
virtual void * findTrigger( int );
virtual void extract() {}
virtual void fromWorld() {}
virtual void toWorld() {}
inline void addTrigger( struct TriggerData * td )
{
triggers.add(td);
SET_BIT( trigger_bits, td->type);
}
inline void removeTrigger( struct TriggerData * td )
{
triggers.remove(td);
CLR_BIT( trigger_bits, td->type);
}
};
#endif