sunder2.1a/clan/
sunder2.1a/class/
sunder2.1a/class/bak/
sunder2.1a/doc/ideas/
sunder2.1a/gods/
sunder2.1a/i3/
sunder2.1a/log/
sunder2.1a/msgbase/
sunder2.1a/player/
sunder2.1a/src/o/
sunder2.1a/time/
/**********************************************************
 *************** S U N D E R M U D *** 2 . 0 **************
 **********************************************************
 * The unique portions of the SunderMud code as well as   *
 * the integration efforts for code from other sources is *
 * based primarily on the efforts of:                     *
 *                                                        *
 * Lotherius <aelfwyne@operamail.com> (Alvin W. Brinson)  *
 *    and many others, see "help sundermud" in the mud.   *
 **********************************************************/


#ifndef _GLOBALMERC_H
# define _GLOBALMERC_H   1

/*
 * This file contains all the structs and globals.
 */

/*
 * TYPEDEF STRUCTS
 */
typedef struct  i3_chardata             I3_CHARDATA;
typedef struct  affect_data             AFFECT_DATA;
typedef struct  area_data               AREA_DATA;
typedef struct  ban_data                BAN_DATA;
typedef struct  char_data               CHAR_DATA;
typedef struct  descriptor_data         DESCRIPTOR_DATA;
typedef struct  exit_data               EXIT_DATA;
typedef struct  extra_descr_data        EXTRA_DESCR_DATA;
typedef struct  help_data               HELP_DATA;
typedef struct  kill_data               KILL_DATA;
typedef struct  mob_index_data          MOB_INDEX_DATA;
typedef struct  obj_data                OBJ_DATA;
typedef struct  obj_index_data          OBJ_INDEX_DATA;
typedef struct  pc_data                 PC_DATA;
typedef struct  reset_data              RESET_DATA;
typedef struct  room_index_data         ROOM_INDEX_DATA;
typedef struct  shop_data               SHOP_DATA;
typedef struct  time_info_data          TIME_INFO_DATA;
typedef struct  mud_data                MUD_DATA;
typedef struct  weather_data            WEATHER_DATA;
typedef struct  prog_list               PROG_LIST;
typedef struct  prog_code               PROG_CODE;
typedef struct  lease_data      	    LEASE;
typedef struct 	note_data  		        NOTE_DATA;
typedef struct 	board_data 		        BOARD_DATA;


/* 
 * FUNCTION TYPES
 */

/*
 * Function types.
 */
typedef void DO_FUN     args( ( CHAR_DATA *ch, char *argument ) );
typedef bool SPEC_FUN   args( ( CHAR_DATA *ch ) );
typedef void SPELL_FUN  args( ( int sn, int level, CHAR_DATA *ch, void *vo ) );
typedef void OBJ_FUN    args( ( OBJ_DATA *obj, char *argument ) );
typedef void ROOM_FUN   args( ( ROOM_INDEX_DATA *room, char *argument ) );

/*
 * EXTERN STRUCTS & GLOBAL VARIABLES
 */

extern  struct 	disable_cmd_type   	*disable_cmd_list;
extern  struct 	crier_type         	*crier_list;
extern  struct 	account_type       	*account_list;
extern  struct 	lease_data     		*lease_list;
extern  struct 	race_type       	race_table      [];
extern  struct  skill_type      	skill_table     [MAX_SKILL];
extern  struct  social_type     	social_table    [MAX_SOCIALS];
extern  const   struct  str_app_type    str_app         [26];
extern  const   struct  int_app_type    int_app         [26];
extern  const   struct  wis_app_type    wis_app         [26];
extern  const   struct  dex_app_type    dex_app         [26];
extern  const   struct  con_app_type    con_app         [26];
extern  const   struct  class_type      class_table     [MAX_CLASS];
extern  const   struct  attack_type     attack_table    [];
extern  const   struct  pc_race_type    pc_race_table   [];
extern  const   struct  liq_type        liq_table       [LIQ_MAX];
extern  const   struct  material_data   material_table [];
extern  const   struct  wear_data       wear_info[];
extern  const   struct  spec_type       spec_table[];
extern  const   struct  cmd_type        cmd_table [];
//extern struct work_type       *work_orders; /* Was for threading */
extern  const   char   			*size_table [];
extern  const   char  			*day_name [];
extern  const   char   			*month_name [];
extern  char *  const   		dir_name[];
extern  const   sh_int  		rev_dir[];
extern          HELP_DATA         *     help_first;
extern          SHOP_DATA         *     shop_first;
extern          BAN_DATA          *     ban_list;
extern          CHAR_DATA         *     char_list;
extern          DESCRIPTOR_DATA   *     descriptor_list;
extern          NOTE_DATA         *     note_list;
extern          OBJ_DATA          *     object_list;
extern          PROG_CODE         *     mprog_list;
extern          PROG_CODE         *     rprog_list;
extern          PROG_CODE         *     oprog_list;
extern          AFFECT_DATA       *     affect_free;
extern          BAN_DATA          *     ban_free;
extern          CHAR_DATA         *     char_free;
extern          DESCRIPTOR_DATA   *     descriptor_free;
extern          EXTRA_DESCR_DATA  *     extra_descr_free;
extern          NOTE_DATA         *     note_free;
extern          OBJ_DATA          *     obj_free;
extern          PC_DATA           *     pcdata_free;
extern          struct char_group *     group_free;
extern          time_t                  current_time;
extern          bool                    fLogAll;
extern          FILE *                  fpReserve;
extern          KILL_DATA               kill_table      [];
extern          TIME_INFO_DATA          time_info;
extern          WEATHER_DATA            weather_info;
extern          MUD_DATA                mud;
extern          bool                    MOBtrigger;
extern          AREA_DATA *             area_first;
extern          AREA_DATA *             area_last;
extern          SHOP_DATA *             shop_last;
extern          int                     top_affect;
extern          int                     top_area;
extern          int                     top_ed;
extern          int                     top_exit;
extern          int                     top_help;
extern          int                     top_mob_index;
extern          int                     top_obj_index;
extern          int                     top_reset;
extern          int                     top_room;
extern          int                     top_shop;
extern          int                     top_vnum_mob;
extern          int                     top_vnum_obj;
extern          int                     top_vnum_room;
extern          char                    str_empty       [1];
extern  MOB_INDEX_DATA *        mob_index_hash  [MAX_KEY_HASH];
extern  OBJ_INDEX_DATA *        obj_index_hash  [MAX_KEY_HASH];
extern  ROOM_INDEX_DATA *       room_index_hash [MAX_KEY_HASH];
extern 	BOARD_DATA 		boards[MAX_BOARD];




/* Structures */

/*------------------------
 * System-Level Structures
 *-----------------------*/

/* Global Structure for globally accessed "Generic Data".
 * I know some people don't like the idea of a "Global Structure, however
 * there are way too many globals floating around in different source files,
 * and we need to get handle on them for organization.
 * All of these are accessed with the mud.xxxx pointer style.
 * Expect more stuff to be moved in. -- Lotherius
 */

struct mud_data
{
     /* These things are loaded from the RC file */
     bool            verify;                     /* Require verification of Emails? */
     sh_int          clogin;                     /* Color Login? */
     sh_int          death;                      /* Level of death "reality" */
     int             port;                       /* Port Number to operate on */
     int             fordemi;                    /* How many mortal heroes needed for a demigod */
     sh_int          mudxp;                      /* How hard is it to level */
     int             makelevel;                  /* Minlevel to make a clan */
     int             makecost;                   /* Min gold cost to make a clan */
     int             makeqp;                     /* Questpoints to make a clan */
     /* These are not. */
     bool            nonotify;                   /* Used when something spammy is about to happen */
     int             renumber;                   /* If an area needs renumbered, the modifier is stored here. */
     /* Memlog Stuff. */
     char           *ml_ident     [MAX_MEMLOG];  /* Use a txt identifier for readability */
     int             ml_perm_alloc[MAX_MEMLOG];  /* Allocated Perms. Not freed. */
     int             ml_mem_alloc [MAX_MEMLOG];  /* Allocated memory that can be freed */
     int             ml_mem_dalloc[MAX_MEMLOG];  /* De-allocated memory (with free_mem */
};

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

struct  weather_data
{
     int                mmhg;
     int                change;
     int                sky;
     int                sunlight;
};

/* Site Ban Structure */
struct  ban_data
{
          BAN_DATA   *next;
          char       *name;
};

/* Disabled Commands */
struct  disable_cmd_type
{
          char                     *name;
          int                       level;
          struct disable_cmd_type  *next;
          DO_FUN                   *disable_fcn;
};

/* Command Table Definition */
struct  cmd_type
{
     char *const     name;
     DO_FUN         *do_fun;
     sh_int          position;
     sh_int          level;
     sh_int          log;
     bool            show;
     char *const     helpmsg;           /* Text to show on enhanced "commands" listing. */
     long            category;          // Possible Categories for commands
     bool            disabled;
     int             disabled_level;
}; 

/* Help table */
struct  help_data
{
     HELP_DATA   *next;
     sh_int       level;
     char        *keyword;
     char        *text;
};


/* Town Crier Messages */
struct crier_type
{
     struct crier_type      *next;
     char                   *text;   /* Message the town crier will shout */
};

/* Socials */
struct  social_type
{
     char      name[20];
     char *    char_no_arg;
     char *    others_no_arg;
     char *    char_found;
     char *    others_found;
     char *    vict_found;
     char *    char_not_found;
     char *    char_auto;
     char *    others_auto;
};

/* Attack types */
struct attack_type
{
     char  *name;                       /* name and message */
     int    damage;                     /* damage class     */
};

/*-------------------------
 * Descriptors and Accounts
 *------------------------*/

/*
 *  * Descriptor (channel) structure.
 *  */
struct  descriptor_data
{
     DESCRIPTOR_DATA    *next;
     DESCRIPTOR_DATA    *snoop_by;
     CHAR_DATA          *character;
     CHAR_DATA          *original;
     char               *host;
     sh_int              descriptor;
     sh_int              connected;
     bool                fcommand;
     char                inbuf[4 * MAX_INPUT_LENGTH];
     char                incomm[MAX_INPUT_LENGTH];
     char                inlast[MAX_INPUT_LENGTH];
     int                 repeat;
     int                 outsize;
     int                 outtop;
     char               *outbuf;
     char               *afk_outbuf;
     bool                multi_comm;
     char               *showstr_head;
     char               *showstr_point;
     void               *pEdit;
     char              **pString;
     int                 editor;
     bool                ansi;                /* Ansi/VT colour, so can ask at startup */
     bool				 pueblo;			  /* Pueblo enabled? */
     bool                msp;
     bool                mxp;
     char               *client;              /* MXP Client Version... */
     char               *support;             /* Client support string. */
     time_t              save_time;           /* Last save time */
# if !defined (NOZLIB)
     z_stream           *out_compress;        /* MCCP Compression Stream            */
     unsigned char      *out_compress_buf;    /* MCCP Buffer                        */
# endif
};

/*
 * Data for player accounts, this is kept online so keep it small.
 */
struct account_type
{
     struct account_type       *next;
     char                      *acc_name;               /* Email Address of the Account   */
     char                      *password;               /* Password for Account           */
     short                      status;                 /* Account Status                 */
     int                        permadead;              /* Number of players Permadeathed */
     int                        heroes;                 /* Number of Mortal Heroes ever   */
     int                        demigods;               /* Number of Demigods ever        */
     char                      *char_name[MAX_CHARS];   /* Characters Belonging to this Account */
     int                        vcode;                  /* Verification Code - NOT SAVED */
};

/*------------------
 * Character Classes
 *-----------------*/

struct  class_type
{
          char      *name;               /* the full name of the class   */
          char       who_name[4];        /* Three-letter name for 'who'  */
          sh_int     attr_prime;         /* Prime attribute              */
          int        weapon;             /* First weapon                 */
          sh_int     guild[MAX_GUILD];   /* No Longer Used               */
          sh_int     skill_adept;        /* Maximum skill level          */
          sh_int     thac0_00;           /* Thac0 for level  0           */
          sh_int     thac0_32;           /* Thac0 for level 32           */
          sh_int     hp_min;             /* Min hp gained on leveling    */
          sh_int     hp_max;             /* Max hp gained on leveling    */
          bool       fMana;              /* Class gains mana on level    */
};

/*------------------
 * Skills and Spells
 *-----------------*/
struct  skill_type
{
     char *             name;                   /* Name of skill                */
     sh_int             skill_level[MAX_CLASS]; /* Level needed by class        */
     SPELL_FUN *        spell_fun;              /* Spell pointer                */
     sh_int             target;                 /* Legal targets                */
     sh_int             minimum_position;       /* Position for caster / user   */
     sh_int *           pgsn;                   /* Pointer to associated gsn    */
     sh_int             slot;                   /* Slot for #OBJECT loading     */
     sh_int             min_mana;               /* Minimum mana used            */
     sh_int             beats;                  /* Waiting time after use       */
     char *             noun_damage;            /* Damage message               */
     char *             msg_off;                /* Wear off message             */
     char *             component;              /* component                    */
     sh_int		bon_stat;		/* Stat that gives bonus/penalty to prac  */
     // Skill Tree Info
     bool		isgroup;		/* This is a group, not a skill           */
     sh_int		parent;			/* Parent group (slot) 		    	  */
     sh_int		sibling;		/* Previous skill in group required 	  */
     sh_int		kissing_cousin;		/* Related skill required	    	  */
     sh_int		distant_cousin;		/* Related skill that gives bonus   	  */
     sh_int		bastard_child;		/* If primary, bastard_child gets penalty */
     bool		matriarch;		/* This is allowed to be primary    	  */
};

/*----------------
 * Race Types
 *---------------*/

struct race_type
{
     char      *name;                   /* call name of the race */
     bool       pc_race;                /* can be chosen by pcs  */
     long       act;                    /* act bits for the race */
     long       aff;                    /* aff bits for the race */
     long       detect;                 /* Detect bits for the race */
     long       protect;                /* Protect bits for the race */
     long       off;                    /* off bits for the race */
     long       imm;                    /* imm bits for the race */
     long       res;                    /* res bits for the race */
     long       vuln;                   /* vuln bits for the race */
     long       form;                   /* default form flag for the race */
     long       parts;                  /* default parts for the race */
     sh_int     encumbrance;            /* emcumbrance value */
};

/* We're no longer going to depend on the records to line up between the two race tables. Yay. */

struct pc_race_type  /* additional data for pc races */
{
     char      *name;                   /* MUST be the same as in race_type */
     char       who_name[10];
     sh_int     points;                 /* cost in points of the race */
     sh_int     maxage;                 /* Maximum years old */
     sh_int     startage;               /* Starting Age */
     sh_int     class_mult[MAX_CLASS];  /* exp multiplier for class, * 100 */ // Not used
     char      *skills[5];              /* bonus skills for the race */
     int        recall;                 /* room # of this race's recall */
     int        healer;                 /* room # of this race's healer */
     sh_int     stats[MAX_STATS];       /* starting stats */
     sh_int     max_stats[MAX_STATS];   /* maximum stats */
     sh_int     size;                   /* aff bits for the race */ 
     /* size should be on race_type, not pc_race_type */
};

/*-------------------
 * Note Board Structs
 *------------------*/

/* Notes */
struct  note_data
{
     NOTE_DATA  *next;
     char       *sender;
     char       *date;
     char       *to_list;
     char       *subject;
     char       *text;
     time_t      date_stamp;
     time_t      expire;
};

/* Data about a board */
struct board_data
{
     char *short_name; /* Max 8 chars */
     char *long_name;  /* Explanatory text, should be no more than 40 ? chars */
     
     int read_level;   /* minimum level to see board */
     int write_level;  /* minimum level to post notes */
     
     char *names;       /* Default recipient */
     int force_type;    /* Default action (DEF_XXX) */
     
     int purge_days;    /* Default expiration */
     
     /* Non-constant data */
     
     NOTE_DATA *note_first; /* pointer to board's first note */
     bool changed;          /* currently unused */     
};


/*-----------------------------------------
 * Mobs | Chars | Players | Objects | Rooms
 *----------------------------------------*/

/* An affect */

struct  affect_data
{
     AFFECT_DATA       *next;
     sh_int             type;
     sh_int             level;
     sh_int             duration;
     sh_int             location;
     sh_int             modifier;
     sh_int             where;          /* Added for protect/detect fields */
     int                bitvector;
     char              *caster;
};

/* Improved materials code - Lotherius */
struct material_data
{
     char     *name;            /* What it is... */
     sh_int    type;            /* the identifier */
     long      vuln_flag;       /* set if applicable, otherwise 0 */
     int       durable;         /* The material's durability */
     int       difficult;       /* Material's repair difficulty */
     int       pierce;          /* Object's resistence to pierce */
     int       slash;           /* To bash */
     int       bash;            /* To slash */
     int       exotic;          /* To exotic */
     long      flags;           /* Material Flags */     
};

/* data for wear_info.. unsure where this fits in the organization :) */
struct wear_data
{
     char *name;        // Name of the body part or location
     bool ispart;       // Is this a body part?
     int  hitpct;       // Percent chance to hit (all must add up to 100%)
     long wear_flag;    // Which piece of armor relates to this body part.
     long item_flag;    // Flag on associated items.
     long part_req;     // Flag required on target to be protected on this part.     
     bool has_ac;       // Is this body part protectable by armor (Has its own AC)
     long supercede;    // Wear slot that supercedes this one (is outside of)          
     //                 // Determines what AC to use and and which eq to damage          
};
 
/*
 * Attribute bonus structures.
 * Many of these need Implemented, that will wait for Sunder > 2.0
 * Of those that are used, they may be underused.
 * CAVEAT: Not all of this has been done!
 */

struct  str_app_type
{
     sh_int       tohit;        /* Modifier to chance to hit beyond hitroll */ /* Unused */
     sh_int       todam;        /* Modifier to damage beyond damroll        */ /* Unused */
     sh_int       carry;        /* Amount of weight ch can carry            */
     sh_int       wield;        /* How large of a weapon ch can wield       */
};

struct  int_app_type
{
     sh_int       learn;        /* How well one learns INT based skills     */
     sh_int       mspell;       /* Effectiveness of mage-style spells       */
     sh_int       languages;    /* Max # of languages ch may learn          */ /* Unused */
};

struct  wis_app_type
{
     sh_int       practice;     /* How many practices ch gets per level    */
     sh_int       cspell;       /* Effectiveness of cleric-style spells    */
     sh_int       perception;   /* Character's perceptiveness              */ /* Unused */
};

struct  dex_app_type
{
     sh_int       defensive;    /* Bonus to dodge, parry, etc              */ /* Unused */
     sh_int       dualmod;      /* Modifier to dual wielding               */ /* Unused */
     sh_int       xhit;         /* Chance for extra attack                 */ /* Unused */
};

struct  con_app_type
{
     sh_int       hitp;         /* Extra hitpoints upon level             */
     sh_int       shock;        /* Modifier to avoid Bad Things (TM)      */ /* Unused */
};

//struct  cha_app_type            /* charisma */
//{
//       sh_int       bluff;        /* Mod to not getting caught by guards when flagged Thief or Killer */
//       sh_int       charm;        /* Mod to how well your charm spells/skills work on others */
//       sh_int       seduce;       /* Mod to not be attacked by mobs of opposite gender */
//};

/* Shops */
struct  shop_data
{
     SHOP_DATA *next;                      /* Next shop in list           */
     int        keeper;                    /* Vnum of shop keeper mob     */
     sh_int     buy_type [MAX_TRADE];      /* Item types shop will buy    */
     sh_int     profit_buy;                /* Cost multiplier for buying  */
     sh_int     profit_sell;               /* Cost multiplier for selling */
     sh_int     open_hour;                 /* First opening hour          */
     sh_int     close_hour;                /* First closing hour          */
};


/* Grouping */
struct char_group
{
          struct char_group   *next;
          CHAR_DATA           *gch;
};

/* Aliases on Players */
struct alias_data
{
          char   *name;
          char   *command_string;
};


/* Missed Tells */
struct afk_tell_type
{
     char   *message;
     struct afk_tell_type *next;
};


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

/*
 * This structure is used in special.c to lookup spec funcs and
 * also in olc_act.c to display listings of spec funcs.
 */
struct spec_type
{
     char *      spec_name;
     SPEC_FUN *  spec_fun;
};

/*
 * This structure is used in bit.c to lookup flags and stats.
 */
struct flag_type
{
     char * name;
     int    bit;
     bool   settable;
};


/* Liquids */
struct  liq_type
{
     char *     liq_name;
     char *     liq_color;
     sh_int     liq_affect[3];
};

/* Extended Descriptions */
struct  extra_descr_data
{
     EXTRA_DESCR_DATA   *next;          /* Next in list                     */
     char               *keyword;       /* Keyword in look/examine          */
     char               *description;   /* What to see                      */
};



/*-------------------
 * The Larger Structs
 *------------------*/

/*
 * Prototype for a mob.
 * This is the in-memory version of #MOBILES.
 */
struct  mob_index_data
{
     MOB_INDEX_DATA *   next;
     SPEC_FUN *         spec_fun;
     SHOP_DATA *        pShop;
     PROG_LIST *        mprogs;
     AREA_DATA *        area;           /* OLC */
     int                vnum;
     bool               new_format;
     sh_int             count;
     sh_int             killed;
     char *             player_name;   /* Odd... why player_name? No players here... */
     char *             short_descr;
     char *             long_descr;
     char *             description;
     char *             notes;
     long               act;
     long               affected_by;    /* Old affected_by */
     long               detections;     /* affected bits 2 */
     long               protections;    /* affected bits 3 */
     sh_int             alignment;
     sh_int             level;
     sh_int             hitroll;
     sh_int             hit[3];
     sh_int             mana[3];
     sh_int             damage[3];
     sh_int             dam_type;
     long               off_flags;
     long               imm_flags;
     long               res_flags;
     long               vuln_flags;
     sh_int             start_pos;
     sh_int             default_pos;
     sh_int             sex;
     sh_int             race;
     long               gold;
     long               form;
     long               parts;
     sh_int             size;
     sh_int             material;
     int                total_teach_skills;
     char               *teach_skills[MAX_TEACH_SKILLS];
     long               mprog_flags;
};

/*
 * One character (PC or NPC).  Be sure to add fields here always!
 * Actually, only if you need them for mobs dammit.
 * Otherwise use pcdata, that's why it's called pcdata!
 * Need to move a lot of those over to pcdata sometime, the only reason I haven't done so
 * yet is each requires a lot of sanity checking in the code to keep from trying to access pcdata
 * on an NPC.
 * Would save lots of space.
 */

struct  char_data
{
     CHAR_DATA *        next;
     CHAR_DATA *        next_in_room;
     CHAR_DATA *        master;
     CHAR_DATA *        leader;
     CHAR_DATA *        fighting;
     CHAR_DATA *        reply;
     CHAR_DATA *        pet;
     CHAR_DATA *        mprog_target;
     SPEC_FUN *         spec_fun;
     MOB_INDEX_DATA *   pIndexData;
     RESET_DATA *       reset;
     DESCRIPTOR_DATA *  desc;
     AFFECT_DATA *      affected;
     OBJ_DATA *         carrying;
     OBJ_DATA *         on; /* furniture */
     ROOM_INDEX_DATA *  in_room;
     ROOM_INDEX_DATA *  was_in_room;
     PC_DATA *          pcdata;
     struct char_group *group[MAX_GMEMBERS]; /* Lotherius */
     char *             name;
     sh_int             version;
     char *             short_descr;
     char *             long_descr;
     char *             description;
     /* Zeran - orig fields are for polyself spell handling */
     char *             poly_name;
     char *             short_descr_orig;
     char *             long_descr_orig;
     char *             description_orig;
     sh_int             sex;
     sh_int             race;
     sh_int             level;
     sh_int             trust;
     int                recall_perm; /*vnum of permanent recall room*/
     int                recall_temp; /*vnum of temp recall room, ie, psychic anchor*/
     int                played;      /* Move to pcdata */
     int                lines;       /* for the pager  */       /* Move to pcdata */
     time_t             logon;                                  /* Move to pcdata */
     time_t             last_note;                              /* Move to pcdata */
     sh_int             note_type;                              /* Move to pcdata */
     sh_int             timer;
     sh_int             wait;
     sh_int             hit;
     sh_int             max_hit;
     sh_int             mana;
     sh_int             max_mana;
     sh_int             move;
     sh_int             max_move;
     long               gold;
     int                exp;
     long               act;
     long               comm;                                    /* RT added to pad the vector */
     long               imm_flags;
     long               res_flags;
     long               vuln_flags;
     sh_int             invis_level;
     sh_int             cloak_level;                             /* Move to pcdata */
     long               affected_by;
     long               detections;                              /* Affected bits 2 */
     long               protections;                             /* Affected bits 3 */
     sh_int             position;
     sh_int             carry_weight;
     sh_int             carry_number;
     sh_int             saving_throw;
     sh_int             alignment;
     sh_int             hitroll;
     sh_int             damroll;
     sh_int             armor;					 /* Now just armor, for magical modifiers */
     sh_int             wimpy;                                   /* Move to pcdata */
     /* stats */
     sh_int             perm_stat[MAX_STATS];
     sh_int             mod_stat[MAX_STATS];
     /* parts stuff */
     long               form;
     long               parts;
     sh_int             size;
     /*  Zeran - added encumbrance */
     sh_int             encumbrance;
     sh_int             material;
     /* mobile stuff */
     long               off_flags;
     sh_int             damage[3];
     sh_int             dam_type;
     sh_int             start_pos;
     sh_int             default_pos;
     bool               searching;
     bool               quitting;
     char *             speaking;     /* Here for the day when mobiles speak their own languages too */
     sh_int             mprog_delay;
};


/*
 *  * Data which only PC's have.
 *  */
struct  pc_data
{
     PC_DATA *                  next;
     char *                     pwd;
     int                        pwd_tries;
     char *                     bamfin;
     char *                     bamfout;
     char *                     title;
     char *                     email;
     char *                     immtitle;
     char *                     mplaying;                  /* Music playing, not multi .. heh */
     struct alias_data *        aliases[MAX_ALIAS];
     bool                       has_alias;
     struct afk_tell_type *     afk_tell_first;
     struct afk_tell_type *     afk_tell_last;
     sh_int                     pcrace;                    /* For pc racetable */
     int                        startyear;
     int                        startmonth;
     int                        startday;
     int                        age_mod;                   /* for youth spells, etc */
     sh_int                     perm_hit;
     sh_int                     perm_mana;
     sh_int                     perm_move;
     sh_int                     true_sex;
     bool                       mortal;                    /* True for mortal, False for Demi-God */
     int                        last_level;
     int                        security;                  /* OLC */ /* Builder security */
     sh_int                     condition[3];
     char *                     prompt;
     sh_int                     learned[MAX_SKILL];
     sh_int                     points;
     bool                       confirm_delete;
     int                        battle_rating;
     int                        pkill_wins;
     int                        pkill_losses;
     int                        home_room;                 /*for immortals*/
     long	                mob_rating;                /* same as battle rating but for mobs */
     long                       mob_wins;
     long                       mob_losses;
     struct account_type *      account;
     struct clan_main_type *    clan;
     struct clan_main_type *    cedit;                  /* Clan being edited. */
     struct clan_main_type *    petition;               /* Clan trying to join */
     sh_int                     clrank;                 /* Clan rank */
     BOARD_DATA *               board;                  /* The current board */
     time_t                     last_note[MAX_BOARD];   /* last note for the boards */
     NOTE_DATA *                in_progress;
     CHAR_DATA *                questgiver;
     long                       questpoints;
     sh_int                     nextquest;
     sh_int                     countdown;
     int                        questobj;
     int                        questmob;
     long                       questearned;          /* lotherius - total ever earned */
     sh_int                     mvolume;
     sh_int                     svolume;
     sh_int                     mode;                 /* MODE... used to flag a few functions */
     long			bankaccount;
     sh_int             	pclass;
     long               	notify;
     long               	wiznet;
     sh_int             	practice;
     sh_int             	train;
    I3_CHARDATA                  *i3chardata;
};

/*
 * Prototype for an object.
 */
struct  obj_index_data
{
     AREA_DATA         *area;
     OBJ_INDEX_DATA    *next;
     EXTRA_DESCR_DATA  *extra_descr;
     AFFECT_DATA       *affected;
     PROG_LIST *        oprogs;
     long               oprog_flags;
     bool               new_format;
     char *             name;
     char *             short_descr;
     char *             description;
     char *             notes;
     int                vnum;
     sh_int             repop;
     sh_int             reset_num;
     sh_int             material;
     sh_int             item_type;
     int                extra_flags;
     int                wear_flags;
     long               vflags;		// Flags of this object
     sh_int             level;
     sh_int             condition;
     sh_int             count;
     sh_int             weight;
     sh_int             size;
     int                cost;
     int                value[5];
};

/*
 * One object.
 */
struct  obj_data
{
     OBJ_DATA *           next;
     OBJ_DATA *           next_content;
     OBJ_DATA *           contains;
     OBJ_DATA *           in_obj;
     CHAR_DATA *          on; /* furniture */
     CHAR_DATA *          carried_by;
     RESET_DATA *         reset;
     EXTRA_DESCR_DATA *   extra_descr;
     AFFECT_DATA *        affected;
     OBJ_INDEX_DATA *     pIndexData;
     ROOM_INDEX_DATA *    in_room;
     CHAR_DATA *          oprog_target;
     sh_int               oprog_delay;
     bool                 enchanted;
     char *               owner; /* Current Owner */
     char *               name;
     char *               short_descr;
     char *               description;
     int                  serialnum;
     sh_int               item_type;
     int                  extra_flags;
     int                  wear_flags;
     long		  vflags;
     sh_int               wear_loc;
     sh_int               weight;
     int                  cost;
     sh_int               level;
     sh_int               condition;
     sh_int               material;
     sh_int               size;          /* Zeran - added for equipment size restrictions */
     sh_int               timer;
     int                  value[5];
     int                  valueorig[5];  /* Zeran - added for condition changes */
     char *               origin;        /* Where the object came from - for lore. autogenerated by code */
};

/*
 * Exit data.
 */
struct  exit_data
{
     union
     {
          ROOM_INDEX_DATA *     to_room;
          int                   vnum;
     }
     u1;
     sh_int             exit_info;
     int                key;
     char *             keyword;
     char *             description;
     EXIT_DATA *        next;
     int                rs_flags;
     int                orig_door;
};

/*
 * 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.
 * Zeran - modified for better functionality 
 */
struct  reset_data
{
     RESET_DATA *       next;
     char               command;
     int                arg1;
     int                arg2;
     int                arg3;
     int                count;
};


/*
 * Area definition.
 */
struct  area_data
{
     AREA_DATA *         next;
     char *              name;
     int                 zone;
     int                 age;
     int                 nplayer;
     bool                empty;
     char *              filename;
     char *              builders;    /* Listing of */
     char *              soundfile;   /* The name of the midi for this area */
     char *              credits;     /* Credits */
     int                 security;    /* Value 1-9  */
     int                 lvnum;       /* Lower vnum */
     int                 uvnum;       /* Upper vnum */
     int                 vnum;        /* Area vnum  */
     int                 llev;        /* Low Level Suggested */
     int                 hlev;        /* High Level Suggested */
     int                 area_flags;
};

struct lease_data
{
     LEASE                 *next;
     ROOM_INDEX_DATA       *room;
     struct clan_main_type *clan;
     bool                   valid;
     int                    room_rent;
     char                  *rented_by;
     bool                   owner_only;
     int                    paid_month;
     int                    paid_day;
     int                    paid_year;
     char                  *lease_descr;
     char                  *lease_name;
     sh_int                 shop_type;
     int                   shop_gold;
     bool                   changed;
};
/*
 * Room type.
 */
struct  room_index_data
{
     ROOM_INDEX_DATA   *next;
     CHAR_DATA         *people;
     OBJ_DATA          *contents;
     //  AFFECT_DATA   *affected;
     EXTRA_DESCR_DATA  *extra_descr;
     AREA_DATA         *area;
     EXIT_DATA         *exit[6];
     RESET_DATA        *reset_first;
     RESET_DATA        *reset_last;
     PROG_LIST *        rprogs;
     CHAR_DATA *        rprog_target;
     long               rprog_flags;
     sh_int             rprog_delay;
     char              *name;
     char              *description;
     char              *notes;
     int                vnum;
     int                room_flags;
     sh_int             light;
     sh_int             sector_type;
     LEASE             *lease;
}; 

/*-------------------
 * MobProg Structures
 *------------------*/

struct prog_list
{
     int              trig_type;
     char *           trig_phrase;
     int              vnum;
     char *           code;
     PROG_LIST *      next;
     bool             valid;
};
 
struct prog_code
{
     int              vnum;
     char *           code;
     PROG_CODE *      next;
};

#endif /* GLOBALMERC_H */