ackfuss-4.4.0/board/
ackfuss-4.4.0/help/e/
ackfuss-4.4.0/help/f/
ackfuss-4.4.0/help/h/
ackfuss-4.4.0/help/l/
ackfuss-4.4.0/help/n/
ackfuss-4.4.0/help/q/
ackfuss-4.4.0/help/s/
ackfuss-4.4.0/help/u/
ackfuss-4.4.0/help/v/
ackfuss-4.4.0/help/y/
ackfuss-4.4.0/help/z/
ackfuss-4.4.0/player/c/
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  Ack 2.2 improvements copyright (C) 1994 by Stephen Dooley              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *       _/          _/_/_/     _/    _/     _/    ACK! MUD is modified    *
 *      _/_/        _/          _/  _/       _/    Merc2.0/2.1/2.2 code    *
 *     _/  _/      _/           _/_/         _/    (c)Stephen Zepp 1998    *
 *    _/_/_/_/      _/          _/  _/             Version #: 4.3          *
 *   _/      _/      _/_/_/     _/    _/     _/                            *
 *                                                                         *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/
/***************************************************************************
 * _/_/_/_/  _/    _/  _/_/_/_/ _/_/_/_/ AckFUSS is modified ACK!MUD 4.3.1 *
 * _/        _/    _/  _/       _/       copyright Matt Goff (Kline) 2008  *
 * _/_/      _/    _/  _/_/_/_/ _/_/_/_/                                   *
 * _/        _/    _/        _/       _/ Support for this code is provided *
 * _/        _/_/_/_/  _/_/_/_/ _/_/_/_/ at www.ackmud.net -- check it out!*
 ***************************************************************************/
#include <bitset>

#define DEC_ACK_H

#ifndef DEC_CONFIG_H
#include "h/config.h"
#endif

#ifndef DEC_GLOBALS_H
#include "globals.h"
#endif

#ifdef IMC
#ifndef DEC_IMC_H
#include "h/imc.h"
#endif
#endif

#ifndef DEC_LISTS_H
#include "lists.h"
#endif

#ifndef DEC_MQUEST_H
#include "h/mquest.h"
#endif

#ifndef DEC_STRFUNS_H
#include "h/strfuns.h"
#endif

#ifndef DEC_TYPEDEFS_H
#include "h/typedefs.h"
#endif

#ifndef DEC_UTILS_H
#include "h/utils.h"
#endif

struct DeleteObject
{
 template <typename T>
 void operator() (const T* ptr) const { delete ptr; };
};

class generic_list
{
 public:
  generic_list();
  ~generic_list();
  void *data;
};

class board_data
{
 public:
  board_data();
  ~board_data();
  int vnum;
  MESSAGE_DATA *first_message;
  MESSAGE_DATA *last_message;
  int min_read_lev;
  int min_write_lev;
  int expiry_time;
  int clan;
};

class disabled_data
{
 public:
  disabled_data();
  ~disabled_data();
  struct cmd_type const *command;
  char                  *disabled_by;
  short                 level;
};

class message_data
{
 public:
  message_data();
  ~message_data();
  bool is_free;
  MESSAGE_DATA *next;
  MESSAGE_DATA *prev;  /* Only used in save_board */
  BOARD_DATA *board;
  time_t datetime;
  char *author;
  char *title;
  char *message;
};

/*
 * color look-up table structure thingy.
 */
struct color_type
{
   char *name; /* eg, gossip, say, look */
   int index;  /* unique index */
};

struct ansi_type
{
   char *name;
   char *value;   /* escape sequence, or whatever */
   int index;
   char letter;
   int stlen;
};

#define color_NORMAL "\033[0m"

struct dl_list
{
   bool is_free;
   DL_LIST *next;
   DL_LIST *prev;
   void *this_one;
};

/*
 * Site ban structure.
 */
class ban_data
{
 public:
  ban_data();
  ~ban_data();
  char *name;
  char *banned_by;
  bool newbie;
};

class brand_data
{
 public:
  brand_data();
  ~brand_data();
  char *branded;
  char *branded_by;
  char *dt_stamp;
  char *message;
  char *priority;
};

class buf_data_struct
{
 public:
  buf_data_struct();
  ~buf_data_struct();
  bool is_free;
  BUF_DATA_STRUCT *next;
  BUF_DATA_STRUCT *prev;
  CHAR_DATA *ch;
  char **dest;
  char *buf;
  RET_FUN *returnfunc;
  MESSAGE_DATA *returnparm;
  int old_char_pos;
};

struct time_info_data
{
   int hour;
   int day;
   int month;
   int year;
   int moon;
};

struct weather_data
{
   int mmhg;
   int change;
   int sky;
   int sunlight;
   int moon_phase;
   int moon_loc;
   bool phase_changed;
};

struct member_data
{
   bool is_free;  /* Ramias:for run-time checks of LINK/UNLINK */
   CHAR_DATA *this_member;
   MEMBER_DATA *next;
   MEMBER_DATA *prev;
};

class mark_data
{
 public:
  mark_data();
  ~mark_data();
  int room_vnum;
  char *message;
  char *author;
  short duration;
  short type;   /* VAMP, WOLF */
};

struct council_data
{
   char *council_name;
   MEMBER_DATA *first_member;
   MEMBER_DATA *last_member;
   bool quorum;
   short council_time;
};

/*
 * Descriptor (channel) structure.
 */
class descriptor_data
{
 public:
  descriptor_data();
  ~descriptor_data();
   bool is_free;  /* Ramias:for run-time checks of LINK/UNLINK */
   DESCRIPTOR_DATA *next;
   DESCRIPTOR_DATA *prev;
   DESCRIPTOR_DATA *snoop_by;
   CHAR_DATA *character;
   CHAR_DATA *original;
   char *host;
   short descriptor;
   short connected;
   bool fcommand;
   char inbuf[4 * MAX_INPUT_LENGTH];
   char incomm[MAX_INPUT_LENGTH];
   char inlast[MAX_INPUT_LENGTH];
   short repeat;
   char *showstr_head;
   char *showstr_point;
   char *outbuf;
   int outsize;
   int outtop;
   unsigned int remote_port;  /* 'Pair Port' ? -S- */
   int check;  /* For new players */
   int flags;
   int childpid;  /* Child process id */
   time_t timeout;
};

#define DESC_FLAG_PASSTHROUGH 1  /* Used when data is being passed to */
                 /*
                  * Another prog.                     
                  */



struct family_name_type
{
   char *name;
   short clan_enemy;

};

struct politics_data_type
{

   short diplomacy[MAX_CLAN][MAX_CLAN];
   bool daily_negotiate_table[MAX_CLAN][MAX_CLAN];
   long int treasury[MAX_CLAN];
   bool end_current_state[MAX_CLAN][MAX_CLAN];
};

struct stance_app_type
{
   char *name;
   short ac_mod;
   short dr_mod;
   short hr_mod;
   float speed_mod;
};

/*
 * Attribute bonus structures.
 */
struct str_app_type
{
   short tohit;
   short todam;
   short carry;
   short wield;
};

struct int_app_type
{
   short learn;
   short spell_mod;
   short mana_regen;
};

struct wis_app_type
{
   short practice;
   short spell_save;
};

struct dex_app_type
{
   short defensive;
};

struct con_app_type
{
   short hitp;
   short shock;
};

/*
 * Shop types.
 */
class shop_data
{
 public:
  shop_data();
  ~shop_data();
  short buy_type[MAX_TRADE]; /* Item types shop will buy     */
  short close_hour;          /* First closing hour           */
  int keeper;                /* Vnum of shop keeper mob      */
  short open_hour;           /* First opening hour           */
  short profit_buy;          /* Cost multiplier for buying   */
  short profit_sell;         /* Cost multiplier for selling  */
};

/*
 * Per-class stuff.
 */
struct class_type
{
   char who_name[4]; /* Three-letter name for 'who'  */
   char *class_name; /* Full name                    */
   short attr_prime;   /* Prime attribute              */
   char *attr; /* Prime          */
   int guild;  /* Vnum of guild room           */
   short skill_adept;  /* Maximum skill level          */
   short thac0_00;  /* Thac0 for level  0           */
   short thac0_32;  /* Thac0 for level 32           */
   short hp_min; /* Min hp gained on leveling    */
   short hp_max; /* Max hp gained on leveling    */
   bool fMana; /* Class gains mana on level    */
   char *skill1;  /* Auto-learnt skill if any     */
};


struct race_type
{
   char race_name[4];   /* Three letter name for race */
   char *race_title; /* Full race name */
   short recall; /* Race's recall location */
   int race_room; /* vnum of race-only room */
   short race_str;  /* max_str to use for race */
   short race_int;
   short race_wis;
   short race_dex;
   short race_con;
   int race_flags;   /* flags for the various racial stuff    */
   bool wear_locs[MAX_WEAR];  /* on/off for each wear loc */
   int classes;   /* Number of classes for race   */
   short limit[MAX_CLASS];   /* Max for each class */
   char *comment; /* comments shown for new players */
   char *skill1;
   int strong_realms;
   int weak_realms;
   int resist_realms;
   int suscept_realms;
   bool player_allowed;
   bool has_money;
};

struct clan_type
{
   char *clan_name;  /* The name of the Clan */
   char *clan_abbr;  /* Abbrev. name - FIVE CHARS */
   short donat_room;   /* clan donation */
   short clan_room; /* Clan-only room */
   char *leader;  /* Clan leader */
   char *enemies; /* Enemies (if any) */
   int eq[MAX_CLAN_EQ]; /* vnums of objects to load */

};

/*
 * Data structure for notes.
 */
class note_data
{
 public:
  note_data();
  ~note_data();
  char *date;
  time_t date_stamp;
  char *sender;
  char *subject;
  char *text;
  char *to_list;
};

/*
 * An affect.
 */
class affect_data
{
 public:
  affect_data();
  ~affect_data();
  int bitvector;
  CHAR_DATA *caster;
  short duration;
  bool is_free;
  int level;
  short location;
  short modifier;
  AFFECT_DATA *next;
  AFFECT_DATA *prev;
  short type;
};

class room_affect_data
{
 public:
  room_affect_data();
  ~room_affect_data();
  bool is_free;
  ROOM_AFFECT_DATA *next;
  ROOM_AFFECT_DATA *prev;
  short duration;
  short level;
  int type;
  int bitvector;
  int applies_spell;   /* what spell is cast on a ch by the room..a sn */
  short modifier;
  short location;
  CHAR_DATA *caster;
};



/*
 * A kill structure (indexed by level).
 */
struct kill_data
{
   short number;
   short killed;
};


class magic_shield
{
 public:
  magic_shield();
  ~magic_shield();
  bool is_free;  /* Ramias:for run-time checks of LINK/UNLINK */
  MAGIC_SHIELD *next;
  MAGIC_SHIELD *prev;
  short type;   /* what kind is it? Electric, Fire, etc... */
  bool harmful; /* does the shield damage the attacker? */
  short attack_dam;   /* then hurt the attacker ;) */
  short percent;   /* percent of damage it absorbs per attack */
  short hits;   /* Shield hitpoints */
  int sn;
  char *absorb_message_room;
  char *absorb_message_victim;
  char *absorb_message_self;
  char *name;
  char *wearoff_room;
  char *wearoff_self;
};

/*
 * Prototype for a mob.
 * This is the in-memory version of #MOBILES.
 */
class mob_index_data
{
 public:
  mob_index_data();
  ~mob_index_data();
  std::bitset<MAX_BITSET> act;
  short ac_mod;
  int affected_by;
  short alignment;
  AREA_DATA *area;
  int cast;
  short clan;
  int def;
  char *description;
  short dr_mod;
  short hr_mod;
  int hunt_flags;
  bool is_free;
  short killed;
  short learned[MAX_SKILL];
  short level;
  char *long_descr;
  MOB_INDEX_DATA *next;
  char *player_name;
  short position;
  SHOP_DATA *pShop;
  short p_class;
  short race;
  int race_mods;
  int resist;
  short sex;
  char *short_descr;
  int skills;
  SPEC_FUN *spec_fun;
  float speed[MAX_SPEED];
  int strong_magic;
  int suscept;
  char *target;
  int vnum;
  int weak_magic;
};

/*
 * One character (PC or NPC).
 */
class char_data
{
 public:
  char_data();
  ~char_data();
  std::bitset<MAX_BITSET> act;
  int act_build; /* for setting what ya editing */
  short ac_mod; /* ac modifier */
  int adept_level;
  int affected_by;
  short alignment;
  short armor;
  int balance;   /* Amount of gold (if any) in bank */
  MONEY_TYPE *bank_money;
  int build_vnum;   /* the current vnum for w-y-e  */
  short carry_number;
  float carry_weight;
  int cast;
  short clan;   /* need to convert from pcdata to this */
  BRAND_DATA *current_brand;
  short damroll;
  int def;
  std::bitset<MAX_BITSET> deaf;
  short death_cnt;
  DESCRIPTOR_DATA *desc;
  char *description;
  short dr_mod; /* damroll modifier */
  int exp;
  short extract_timer;   /* same as object timer, only use for charmies */
  CHAR_DATA *fighting;
  AFFECT_DATA *first_affect;
  OBJ_DATA *first_carry;
  AFFECT_DATA *first_saved_aff;
  MAGIC_SHIELD *first_shield;
  int gold;
  int hit;
  short hitroll;
  short hr_mod; /* hitroll modifier */
  CHAR_DATA *hunting;  /* For hunting PC's/mobs   */
  int hunt_flags;   /* Action flags         */
  CHAR_DATA *hunt_for; /* Employer (crs, mercs)   */
  ROOM_INDEX_DATA *hunt_home;   /* Return to after hunting */
  OBJ_DATA *hunt_obj;  /* Looking for objects     */
  short incog;  /* Same as above except for incognito --Flar */
  short invis;  /* For wizinvis imms - lvl invis to */
  int intell_exp;
  ROOM_INDEX_DATA *in_room;
  bool is_free;
  bool is_quitting;
  AFFECT_DATA *last_affect;
  OBJ_DATA *last_carry;
  time_t last_note;
  AFFECT_DATA *last_saved_aff;
  MAGIC_SHIELD *last_shield;
  CHAR_DATA *leader;
  short level;  /* For m/c this = max of levels */
  short login_sex;
  time_t logon;
  char *long_descr;
  char *long_descr_orig;
  int lvl[MAX_CLASS];  /* Holds details for m/c levels */
  int lvl2[MAX_CLASS]; /* for remort (if any) */
  int mana;
  CHAR_DATA *master;
  int max_hit;
  int max_mana;
  int max_move;
  MONEY_TYPE *money;
  int move;
  char *name;
  CHAR_DATA *next_in_room;
  bool npc; /* For NPC's, no more flag */
  NPC_DATA *npcdata;
  short num_followers;
  CHAR_DATA *old_body; /* = descriptor->original */
  char *old_prompt; /* used to hold prompt when writing */
  PC_DATA *pcdata;
  int played;
  NOTE_DATA *pnote;
  int poly_level;
  short position;
  short practice;
  CHAR_DATA *prev_in_room;
  char *prompt;
  short p_class;
  short race;
  int race_mods;
  CHAR_DATA *reply;
  CHAR_DATA *rider;
  CHAR_DATA *riding;
  time_t save_time;
  short saving_throw;
  char *searching;  /* For PC's that quit      */
  int sentence;  /* For new legal system */
  short sex;
  OBJ_DATA *sitting;   /* What they're resting or sleeping on */
  float speed[MAX_SPEED];
  int stance;
  short stance_ac_mod;
  short stance_dr_mod;
  short stance_hr_mod;
  short stun_timer;
  bool switched; /* = not isnull(descriptor->original) */
  char *target;  /* last ch to attack */
  short timer;
  short trust;
  bool using_named_door;
  short wait;
  ROOM_INDEX_DATA *was_in_room;
  short wimpy;
  bool wizbit;
};

/*
 * Data which only NPC's have.
 */
class npc_data
{
 public:
  npc_data();
  ~npc_data();
  NPC_GROUP_DATA *ngroup;
  MOB_INDEX_DATA *pIndexData;
  RESET_DATA *reset;
  int resist;
  char *short_descr;
  int skills;
  SPEC_FUN *spec_fun;
  int strong_magic;
  int suscept;
  int weak_magic;
};

/*
 * Data which only PC's have.
 */
class pc_data
{
 public:
  pc_data();
  ~pc_data();
  char *alias[MAX_ALIASES];
  char *alias_name[MAX_ALIASES];
  char *assist_msg;
  char *bamfin;
  char *bamfout;
  short condition[MAX_COND];
  int color[MAX_COLOR];
  char dimcol;
  char *email_address;
  short failures;  /* Failed logins */
  char *header;  /* filename for helpedit */
  char hicol;
  char *host; /* Used to tell PC last login site */
  int hp_from_gain; /* same for hitpoints */
  char *ignore_list[MAX_IGNORES];  /* Ignore this person */
#ifdef IMC
  IMC_CHARDATA *imcchardata;
#endif
  bool is_free;
  char *lastlogin;
  short learned[MAX_SKILL];
  char *load_msg;
  int mana_from_gain;  /* saves non-item oriented mana total */
  short max_con;
  short max_dex;
  short max_int;
  short max_str;
  short max_wis;
  char *message; /* helpedit file contents */
  short mod_con;
  short mod_dex;
  short mod_int;
  short mod_str;
  short mod_wis;
  std::bitset<MAX_BITSET> monitor;   /* Imm channel monitoring */
  int move_from_gain;
  short movement; /* Quick movement */
  PC_DATA *next;
  short order[MAX_CLASS];   /* Class Order */
  short pagelen;
  char *pedit_state;
  char *pedit_string[MAX_PEDIT];
  short perm_con;
  short perm_dex;
  short perm_int;
  short perm_str;
  short perm_wis;
  PC_DATA *prev;
  char *pwd;
  QUEST_INFO *quest_info;
  short quest_points;
  int recall_vnum;
  RECORD_DATA *records; /* kill/damage/etc records */
  char *room_enter;
  char *room_exit;
  short ruler_rank;
  SUPER_DATA *super; /* struct for supers: vamp, wolves, hunters */
  short term_columns;
  short term_rows;
  char *title;
  bool valid_email;
  char *who_name;   /* To show on who name */
};

struct liq_type
{
   char *liq_name;
   char *liq_color;
   short liq_affect[3];
};

/*
 * Extra description data for a room or object.
 */
class extra_descr_data
{
 public:
  extra_descr_data();
  ~extra_descr_data();
  char *description;   /* What to see                      */
  char *keyword; /* Keyword in look/examine          */
  bool is_free;
  EXTRA_DESCR_DATA *next;
  EXTRA_DESCR_DATA *prev;
};

struct trigger_data
{
   bool is_free;  /* Ramias:for run-time checks of LINK/UNLINK */
   TRIGGER_DATA *next;
   TRIGGER_DATA *prev;
   char *message; /* properly formatted act format string to use in a TO_ROOM */
   int trigger;   /* command used on object  */
   int event;  /* trigger function index to be called  */
   int data;   /* data used in the event call..vnum, spell index, etc. */
   int register_data;   /* for storing generic info  */
   int on_value;  /* for conditional triggers..happens when register is higher than 
                   * on_value  */
   int at_vnum;   /* for at another room triggers. event will happen there */
   bool force_message;  /* Always does an act message, in addition to trigger */
   char *spell_name;
};


class obj_index_data
{
 public:
  obj_index_data();
  ~obj_index_data();
   AREA_DATA *area;
   short durability;
   std::bitset<MAX_BITSET> extra_flags;
   AFFECT_DATA *first_apply;
   EXTRA_DESCR_DATA *first_exdesc;
   TRIGGER_DATA *first_trigger;
   bool is_free;
   int item_apply;
   int item_type;
   AFFECT_DATA *last_apply;
   EXTRA_DESCR_DATA *last_exdesc;
   TRIGGER_DATA *last_trigger;
   short level;
   char *long_descr;
   short max_durability;
   char *name;
   OBJ_INDEX_DATA *next;
   OBJ_FUN *obj_fun;
   char *owner;
   char *short_descr;
   float speed;
   int value[MAX_OBJ_VALUE];
   int vnum;
   std::bitset<MAX_BITSET> wear_flags;
   short weight;
};

/*
 * One object.
 */
class obj_data
{
 public:
  obj_data();
  ~obj_data();
   bool is_free;  /* Ramias:for run-time checks of LINK/UNLINK */
   OBJ_DATA *next_in_carry_list; /* carry list is the list on a char, or in a container */
   OBJ_DATA *prev_in_carry_list;
   OBJ_DATA *first_in_carry_list;
   OBJ_DATA *last_in_carry_list;
   OBJ_DATA *next_in_room;
   OBJ_DATA *prev_in_room;
   OBJ_DATA *first_in_room;
   OBJ_DATA *last_in_room;
   OBJ_DATA *first_content;
   OBJ_DATA *last_content;
   OBJ_DATA *next_content;
   OBJ_DATA *prev_content;
   OBJ_DATA *in_obj;
   OBJ_FUN *obj_fun;
   CHAR_DATA *carried_by;
   EXTRA_DESCR_DATA *first_exdesc;
   EXTRA_DESCR_DATA *last_exdesc;
   AFFECT_DATA *first_apply;
   AFFECT_DATA *last_apply;
   OBJ_INDEX_DATA *pIndexData;
   ROOM_INDEX_DATA *in_room;
   char *owner;
   char *name;
   char *short_descr;
   char *long_descr;
   int item_type;
   std::bitset<MAX_BITSET> extra_flags;
   std::bitset<MAX_BITSET> wear_flags;
   int item_apply;
   int wear_loc;
   short weight;
   int cost;
   short level;
   short timer;
   int value[MAX_OBJ_VALUE];
   short durability;
   short max_durability;
   MONEY_TYPE *money;
   float speed;
   RESET_DATA *reset;
};

/*
 * Exit data.
 */
class exit_data
{
 public:
  exit_data();
  ~exit_data();
  char *description;
  std::bitset<MAX_BITSET> exit_info;
  bool is_free;
  short key;
  char *keyword;
  EXIT_DATA *next;
  ROOM_INDEX_DATA *to_room;
  int vnum;
};

/*
 * Reset commands:
 *   '*': comment
 *   'M': read a mobile
 *   'O': read an object
 *   'P': put object in object
 *   'G': give object to mobile
 *   'E': equip object to mobile
 *   'D': set state of door
 *   'R': randomize room exits
 *   'S': stop (end of list)
 */

/*
 * Area-reset definition.
 */
class reset_data
{
 public:
  reset_data();
  ~reset_data();
   bool is_free;  /* Ramias:for run-time checks of LINK/UNLINK */
   RESET_DATA *next;
   RESET_DATA *prev;
   char command;
   short arg1;
   short arg2;
   short arg3;
   char *notes;
   short count;
};



/*
 * Area definition.
 */

/*
 *   Npc Interaction stuff  Zen
 */

struct queued_interact_list
{
   bool is_free;
   QUEUED_INTERACT_LIST *next;
   QUEUED_INTERACT_LIST *prev;
   CHAR_DATA *mob;
};




struct influence_list
{
   bool is_free;
   INFLUENCE_LIST *next;
   INFLUENCE_LIST *prev;
   INFLUENCE_DATA *this_one;
};


struct control_list
{
   bool is_free;
   CONTROL_LIST *next;
   CONTROL_LIST *prev;
   CONTROL_DATA *this_one;
};

struct ruler_list
{
   bool is_free;
   RULER_LIST *next;
   RULER_LIST *prev;
   RULER_DATA *this_one;
};


struct control_data
{
   bool is_free;
   char *keyword;
   AREA_DATA *area;
   RULER_DATA *ruler;   /* what entity controls the area */
   INFLUENCE_LIST *first_influence; /* what current influences are for the area */
   INFLUENCE_LIST *last_influence;
   INTERACT_DATA *first_interact;   /* tells the mobs what to do */
   INTERACT_DATA *last_interact;
};


struct influence_data
{
   bool is_free;
   RULER_DATA *actor;
   int influence;
};


struct interact_data
{
   bool is_free;
   INTERACT_DATA *next;
   INTERACT_DATA *prev;
   int type;
   int min_value;
   int max_value;
   int action;
   char *say;
   CHAR_DATA *target;
};
#define	RULER_NONE	BIT_0
#define RULER_SOLO	BIT_1
#define RULER_GROUP	BIT_2
#define RULER_MALE	BIT_3
#define RULER_FEMALE	BIT_4
#define RULER_NEUTRAL	BIT_5



struct ruler_data
{
   bool is_free;
   RULER_DATA *next;
   RULER_DATA *prev;
   char *name;
   short ruler_rank;
   char *affiliation_name;
   short affiliation_index;
   char *keywords;
   short flags;
   CONTROL_LIST *first_control;
   CONTROL_LIST *last_control;
};


class area_data
{
 public:
  area_data();
  ~area_data();
  short                   age;
  short                   area_num;
  char                    *can_read;
  char                    *can_write;
  CONTROL_DATA            *control;
  char                    *filename;
  std::bitset<MAX_BITSET> flags;
  BUILD_DATA_LIST         *first_area_mobile;
  BUILD_DATA_LIST         *first_area_object;
  BUILD_DATA_LIST         *first_area_room;
  BUILD_DATA_LIST         *first_area_shop;
  RESET_DATA              *first_reset;
  int                     gold;
  char                    *keyword;
  BUILD_DATA_LIST         *last_area_mobile;
  BUILD_DATA_LIST         *last_area_object;
  BUILD_DATA_LIST         *last_area_room;
  BUILD_DATA_LIST         *last_area_shop;
  RESET_DATA              *last_reset;
  char                    *level_label;
  short                   max_level;
  int                     max_vnum;
  bool                    modified;
  short                   min_level;
  int                     min_vnum;
  char                    *name;
  char                    *owner;
  std::list<CHAR_DATA *>  player_list;
  char                    *reset_msg;
  short                   reset_rate;
};



/*
 * Room type.
 */
class room_index_data
{
 public:
  room_index_data();
  ~room_index_data();
   int                     affected_by;
   AREA_DATA               *area;
   char                    *description;
   EXIT_DATA               *exit[MAX_DIR];
   OBJ_DATA                *first_content;
   EXTRA_DESCR_DATA        *first_exdesc;
   CHAR_DATA               *first_person;
   ROOM_AFFECT_DATA        *first_room_affect;
   BUILD_DATA_LIST         *first_room_reset;
   bool                    is_free;  /* Ramias:for run-time checks of LINK/UNLINK */
   OBJ_DATA                *last_content;
   EXTRA_DESCR_DATA        *last_exdesc;
   CHAR_DATA               *last_person;
   ROOM_AFFECT_DATA        *last_room_affect;
   BUILD_DATA_LIST         *last_room_reset;
   short                   light;
   std::list<MARK_DATA *>  mark_list;
   char                    *name;
   ROOM_INDEX_DATA         *next;
   std::bitset<MAX_BITSET> room_flags;
   short                   sector_type;
   MONEY_TYPE              *treasure;
   int                     vnum;
};

/* Big MAG mod */
/* Area building stuff */

class build_data_list  /* Used for storing area file data. */
{
 public:
  build_data_list();
  ~build_data_list();
  bool is_free;
  BUILD_DATA_LIST *next;
  BUILD_DATA_LIST *prev;
  void *data;
};

struct lookup_type
{
   char *text;
   unsigned long int value;
   int cost;   /* if == NO_USE, only creators can set. */
};

class npc_group_data
{
 public:
  npc_group_data();
  ~npc_group_data();
  char *enemies;
  DL_LIST *first_follower;
  bool is_free;
  char *last_fighting;
  DL_LIST *last_follower;
  CHAR_DATA *leader;
  char *needs;
  NPC_GROUP_DATA *next;
  NPC_GROUP_DATA *prev;
  ROOM_INDEX_DATA *seek_room;
  short state;
  char *wants;
};

/*
 * Skills include spells as a particular case.
 */
struct skill_type
{
   short flag1;  /* mort or remort?      */
   short flag2;  /* normal and/or vamp?     */
   char *name; /* Name of skill                */
   short skill_level[MAX_CLASS];   /* Level needed by class        */
   SPELL_FUN *spell_fun;   /* Spell pointer (for spells)   */
   short target; /* Legal targets                */
   short minimum_position;   /* Position for caster / user   */
   short *pgsn;  /* Pointer to associated gsn    */
   short slot;   /* Slot for #OBJECT loading     */
   short min_mana;  /* Minimum mana used            */
   short beats;  /* Waiting time after use       */
   char *noun_damage;   /* Damage message               */
   char *msg_off; /* Wear off message             */
   char *room_off;   /* Wear off msg TO_ROOM    */
};




/*
 * Structure for a command in the command lookup table.
 */
struct cmd_type
{
   char *const name;
   DO_FUN *do_fun;
   short position;
   short level;
   short log;
   short type;   /*added by Aeria for do_commands */
   short show;   /*added by Aeria for do_commands */
   bool ghost_cmd;
};


/*
 * Structure for a social in the socials table.
 */
struct social_type
{
   char *name;
   char *char_no_arg;
   char *others_no_arg;
   char *char_found;
   char *others_found;
   char *vict_found;
   char *char_auto;
   char *others_auto;
};

/* Kline */
struct chanhistory
{
 time_t time[30][MAX_HISTORY];
 char message[30][MAX_HISTORY][MAX_STRING_LENGTH]; /* 30 channels, each with MAX_HISTORY, length of MSL */
 char aname[30][MAX_HISTORY][128]; /* To track area, for yell */
 int cbit[30][MAX_HISTORY]; /* To track which clan, family, tribe, or race */
};

class record_data
{
 public:
  record_data();
  ~record_data();
  int crusade;
  int mdam_amt;
  short mdam_gsn;
  int pdam_amt;
  short pdam_gsn;
  int pd;
  int pk;
  int md;
  int mk;
  int mquest_c;
  int mquest_f;
  int qp;
  int qp_tot;
};

class super_data
{
 public:
  super_data();
  ~super_data();
  short bloodline;
  int energy; /* rage, blood, or focus */
  int energy_max;
  short exp;
  short generation;
  int level;
  int skills_learned; /* total # skills known */
  int skills_max;     /* total # skills may learn; based on gen, etc */
  int pracs;
};

struct sysdata_type
{
 short build_obj_ac;
 short build_obj_dr;
 short build_obj_hp;
 short build_obj_hr;
 short build_obj_mp;
 short build_obj_mv;
 short build_obj_svs;
 short damcap;
 float expmult;
 short killperlev;
 float mob_ac;
 float mob_dr;
 float mob_hp;
 float mob_hr;
 float mob_mp;
 float mob_mv;
 float mob_svs;
 char *playtesters;
 short pulse;
 bool shownumbers;
 bool w_lock;
};

class fight_data
{
 public:
  fight_data();
  ~fight_data();
  bool is_free;
  FIGHT_DATA *next;
  FIGHT_DATA *prev;
  CHAR_DATA *ch;
};

class quest_info
{
 public:
  quest_info();
  ~quest_info();
  short amount[QUEST_MAX_DATA];
  bool is_questing;
  bool quest_complete;
  bool quest_hint[QUEST_MAX_DATA];
  int quest_item_vnum[QUEST_MAX_DATA];
  int quest_mob_vnum[QUEST_MAX_DATA];
  int quest_reward[QUEST_MAX_REWARD];
  short quest_type;
  short time_left;
  short wait_time;
};

struct h_queue
{
  struct h_queue *next;
  ROOM_INDEX_DATA *room;
  short dir;
};

struct clutch_type
{
   int command_number;
   bool destroy;  /* Destory object once clutched? */
   CLUTCH_FUN *func_name;  /* The name of the function.... */
};

struct eq_type
{
 char *const name;
 float ac;
 float dr;
 float hp;
 float hr;
 float mp;
 float mv;
 float svs;
};

/*
 * Our function prototypes.
 * One big lump ... this is every function in Merc.
 */
#define CD      CHAR_DATA
#define MID     MOB_INDEX_DATA
#define OD      OBJ_DATA
#define OID     OBJ_INDEX_DATA
#define RID     ROOM_INDEX_DATA
#define SF      SPEC_FUN
#define OBF	OBJ_FUN

/* interp.c */
void interpret args( ( CHAR_DATA * ch, char *argument ) );
bool IS_SWITCHED args( ( CHAR_DATA * ch ) );
bool check_social args( ( CHAR_DATA * ch, char *command, char *argument ) );
bool check_disabled args( ( const struct cmd_type *command ) );
void comlog args( ( CHAR_DATA * ch, bool cleanup, int cmd, char *args ) );

/* macros.c */
short get_remort_level   args( ( CHAR_DATA * ch ) );
short get_psuedo_level   args( ( CHAR_DATA * ch ) );
bool   ok_to_use          args( ( CHAR_DATA * ch, int value ) );
bool   check_level_use    args( ( CHAR_DATA * ch, int level ) );
int    exp_to_level       args( ( CHAR_DATA * ch, int p_class, int index ) );
int    exp_for_mobile     args( ( int level, CHAR_DATA * mob ) );
int    exp_mob_base       args( ( int level ) );
int    skill_table_lookup args( ( CHAR_DATA * ch, int sn, int return_type ) );
bool   is_remort          args( ( CHAR_DATA * ch ) );
bool   is_adept           args( ( CHAR_DATA * ch ) );
int    exp_to_level_vamp  args( ( int level ) );
int    exp_to_level_adept args( ( CHAR_DATA * ch ) );
void   reset_gain_stats   args( ( CHAR_DATA * ch ) );
int    exp_to_level_wolf  args( ( int level ) );
int    get_item_value     args( ( OBJ_DATA * obj ) );


           /*-------*\
			  ) quest.c (
			  \*-------*/

void quest_inform args( ( void ) );
void quest_complete args( ( CHAR_DATA * ch ) );
void quest_cancel args( ( void ) );
void generate_auto_quest args( ( void ) );
void crusade_reward args( ( CHAR_DATA *ch ) );


            /*------*\
			   ) save.c (
			   \*------*/
void save_char_obj args( ( CHAR_DATA * ch ) );
bool load_char_obj args( ( DESCRIPTOR_DATA * d, char *name, bool system_call ) );
void save_corpses args( ( void ) );
void fread_corpse args( ( FILE * fp ) );
void save_marks args( ( void ) );
void save_bans args( ( void ) );
char *initial args( ( const char *str ) );


          /*---------*\
			 ) special.c (
			 \*---------*/
SF *spec_lookup args( ( const char *name ) );
char *rev_spec_lookup args( ( SPEC_FUN *func ) );
void print_spec_lookup args( ( char *buf ) );

/* social-edit.c  */

void load_social_table args( ( void ) );


          /*---------*\
			 ) obj_fun.c (
			 \*---------*/
OBF *obj_fun_lookup args( ( const char *name ) );
char *rev_obj_fun_lookup args( ( OBJ_FUN *func ) );
void print_obj_fun_lookup args( ( char *buf ) );


         /*---------*\
			) trigger.c (
			\*---------*/

void trigger_handler args( ( CHAR_DATA * ch, OBJ_DATA * obj, int trigger ) );


          /*--------*\
			 ) update.c# (
			 \*--------*/
void advance_level args( ( CHAR_DATA * ch, int p_class, bool show, bool remort ) );
void gain_exp args( ( CHAR_DATA * ch, int gain ) );
void gain_bloodlust args( ( CHAR_DATA * ch, int value ) );
void gain_condition args( ( CHAR_DATA * ch, int iCond, int value ) );
void update_handler args( ( void ) );
bool check_rewield args( ( CHAR_DATA * ch ) );
bool check_re_equip args( ( CHAR_DATA * ch ) );
void auction_update args( ( void ) );
void check_vamp args( ( CHAR_DATA * ch ) );
int move_gain args( ( CHAR_DATA * ch ) );

/* write.c */
void write_start args( ( char **dest, RET_FUN *retfunc, void *retparm, CHAR_DATA * ch ) );
void write_interpret args( ( CHAR_DATA * ch, char *argument ) );

/* hunt.c */
void hunt_victim args( ( CHAR_DATA * ch ) );
void unhunt args( ( CHAR_DATA * ch ) );
int make_hunt args( ( CHAR_DATA * ch, CHAR_DATA * victim ) );
void hunt_obj args( ( CHAR_DATA * ch ) );
bool make_move args( ( CHAR_DATA * ch, int vnum ) );
char *find_path args( ( int, int, CHAR_DATA *, int, int, int ) );
bool mob_hunt args( ( CHAR_DATA * mob ) );
void char_hunt args( ( CHAR_DATA * ch ) );
bool set_hunt args( ( CHAR_DATA * ch, CHAR_DATA * fch, CHAR_DATA * vch, OBJ_DATA * vobj, int set_flags, int rem_flags ) );
void end_hunt args( ( CHAR_DATA * ch ) );
short h_find_dir args(( ROOM_INDEX_DATA * room, ROOM_INDEX_DATA * target, int h_flags ));
void hunt_move args(( CHAR_DATA * mob, short dir ));
void h_clear args(( void ));

  /*
   * update.c 
   */

void init_alarm_handler args( ( void ) );
void alarm_update args( ( void ) );

/*
 *      Rulers
 *
 */

void save_rulers args( ( void ) );
void load_rulers args( ( void ) );
const char *get_ruler_title args( ( int ruler_rank, int sex ) );

/*
 *  sysdat.c
 */
void load_sysdata args( ( void ) );
void save_sysdata args( ( void ) );


#undef  CD
#undef  MID
#undef  OD
#undef  OID
#undef  RID
#undef  SF
#undef  OBF