/
ScryMUD/mud/
ScryMUD/mud/grrmud/Boards/
ScryMUD/mud/grrmud/Help/
ScryMUD/mud/grrmud/Pfiles/
ScryMUD/mud/grrmud/PlayerSacks/
ScryMUD/mud/grrmud/PlayerShops/
ScryMUD/mud/grrmud/help_filter/
ScryMUD/mud/hegemon/
ScryMUD/mud/hegemon/data/
ScryMUD/mud/hegemon/data/help/battle/
ScryMUD/mud/hegemon/data/help/client/
ScryMUD/mud/hegemon/data/help/communications/
ScryMUD/mud/hegemon/data/help/skills/
ScryMUD/mud/hegemon/data/help/spells/
ScryMUD/mud/include/
ScryMUD/mud/lib/
ScryMUD/mud/lib/bitfield/
ScryMUD/mud/lib/log/
ScryMUD/mud/lib/string2/
// $Id: classes.h,v 1.7.2.3 2000/03/18 00:46:31 justin Exp $
// $Revision: 1.7.2.3 $  $Author: justin $ $Date: 2000/03/18 00:46:31 $

//
//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
//

///********************  classes.h  *****************************///



#ifndef __CLASSES_INCLUDE
#define __CLASSES_INCLUDE


#include <string2.h>
#include <bitfield.h>
#include <list2.h>
#include "script.h"

class critter;  //foward declaration


// Used to hold cmd-line arguments

class CmdLineInfo {
protected:
   
public:
   static void init(int argc, char** argv);
};



// This is used for reading in overloaded objects
enum class_id_enum {
   ROOM_CLASS_ID = 0,
   VEHICLE_CLASS_ID = 1
};//class_id_enum


class HegemonMarkup {
public:
   /**  Turn any hot characters, such as <,> into Hegemon
    * markup characters.  This will make this string safe for
    * inclusion in hegemon markup text.
    */
   static String makeSafeForHegTag(const char* string);
}; 

class ContainedObject;

class ObjectContainer {
private:
   List<ContainedObject*> inv;

public:
   int appendObject(ContainedObject* o) {
      inv.append(o);
      return TRUE;
   }

   int prependObject(ContainedObject* o) {
      inv.prepend(o);
      return TRUE;
   }

   ContainedObject* removeObject(ContainedObject* o) {
      return inv.loseData(o);
   }

   List<ContainedObject*>& getInv() { return inv; }
};//ObjectContainer


class ContainedObject {
private:
   ObjectContainer* contained_by;

public:
   ContainedObject() : contained_by(NULL) { };
   ContainedObject(ObjectContainer* ptr) : contained_by(ptr) { };

   int appendContainer(ObjectContainer* ptr) {
      if (ptr->appendObject(this)) {
         contained_by->removeObject(this);
         contained_by = ptr;
         return TRUE;
      }
      return FALSE;
   }//appendContainer

   int prependContainer(ObjectContainer* ptr) {
      if (ptr->prependObject(this)) {
         contained_by->removeObject(this);
         contained_by = ptr;
         return TRUE;
      }
      return FALSE;
   }//appendContainer

   ObjectContainer* getContainer() {
      return contained_by;
   }

};//ContainedObject


///************************  stat_cell  ************************///
 
class stat_spell_cell {
private:
   static int _cnt;

public:
   int stat_spell;
   int bonus_duration;
   
   stat_spell_cell() : stat_spell(0), bonus_duration(0) { _cnt++; }
   stat_spell_cell(int ss, int bd) :
         stat_spell(ss),
         bonus_duration(bd) { _cnt++; }
   stat_spell_cell(const stat_spell_cell& src) :
         stat_spell(src.stat_spell),
         bonus_duration(src.bonus_duration) { _cnt++; }
   ~stat_spell_cell() { _cnt--; }

   String toString() const ;

   static int getInstanceCount() { return _cnt; } //how many ZoneList objects exist?
};//stat_spell 
 


///***********************  PathCell  *****************************///

class PathCell {
private:
   String desc;
   String dir_to_next;
   int i_th_dir;
   int is_destination;
   static int _cnt;
   PathCell(const PathCell& src);

public:
   PathCell(String& description, String& direction_to_next, int is_dest);
   PathCell();

   ~PathCell() { _cnt--; }

   static int getInstanceCount() { return _cnt; } //how many ZoneList objects exist?

   void setDesc(String& description) { desc = description; }
   String& getDesc() { return desc; }
   String* getDescPtr() { return &desc; }

   void setDir(int i_th, const String& dir) { i_th_dir = i_th; dir_to_next = dir; }
   String& getDir() { return dir_to_next; }
   int getDirNum() const { return i_th_dir; }

   void setIsDest(int i);
   int isDest();

   //need the veh_num and cell_num to display appropriately.
   void stat(int veh_num, int cell_num, critter& pc);

   void Clear();
   void Read(ifstream& da_file);
   void Write(ofstream& da_file);
};//PathCell

#endif