dyrt/
dyrt/bin/
dyrt/data/MAIL/
dyrt/data/WIZ_ZONES/
dyrt/include/machine/
dyrt/src/misc/cpp/
#ifndef __MUDTYPES_H__ 
#define __MUDTYPES_H__ 

#include "types.h"
#include <time.h>
#include <sys/time.h>

typedef long int LFLAGS;
typedef long int OFLAGS;
typedef DoubleLongInt  PFLAGS;
typedef long int SFLAGS;
typedef LongInt  MFLAGS;
typedef long int QFLAGS;    /* Quest flags */

#define TITLE_LEN   55               /* Max. length of a players title */
#define PROMPT_LEN  20               /* Max. length of the prompt */
#define PNAME_LEN   12               /* Max. length of a player-name */
#define MNAME_LEN   16               /* Max length, mobile-name */
#define ONAME_LEN   32               /* Max length, object-name */
#define SETIN_MAX   90               /* Max length, travel-message */
#define TTY_LEN     64               /* Max length, name of players host */
#define MSG_LEN    240               /* Max length of a message */
#define PASSWD_LEN  16               /* Max chars of passwd + 1 */
#define MAX_COM_LEN 300              /* Max chars in a command line */
#define NUM_CONDS    6
#define NUM_ACTS     4
#define MAX_EMAIL_LEN    128		/* max chars in email address */

#define YN_INIT         (0)
#define ASSUME_YES      (-1)
#define ASSUME_NO       (1)
#define ASSUME_NOTHING  (0)
#define YN_YES          (-1)
#define YN_NO           (1)
 
typedef struct _yn_struct {
  void (*yn_func)(int yn);
  int  assume;
  char prompt[MAX_COM_LEN];
  char old_prompt[PROMPT_LEN+20];
  void (*old_handler)(char *str);
} YN_STRUCT;


/* Trace struct */
typedef struct {
        int trace_item;         /* number for item/person */
        int trace_class;        /* 1 = obj, 2 = person */
        int trace_loc;          /* location of the item/person */
        int trace_carrf;        /* carry flag */
        int trace_oroom;        /* the room an object is in */
} TRACE;

/*
 * Setin struct
 */
typedef struct _SETIN_STRUCT {
    char	prompt[PROMPT_LEN+20];
    char	setin[SETIN_MAX+32];
    char	setout[SETIN_MAX+32];
    char	setmin[SETIN_MAX+32];
    char	setmout[SETIN_MAX+32];
    char	setvin[SETIN_MAX+32];
    char	setvout[SETIN_MAX+32];
    char	setqin[SETIN_MAX+32];
    char	setqout[SETIN_MAX+32];
    char	setsit[SETIN_MAX+32];
    char	setstand[SETIN_MAX+32];
    char        settrenter[SETIN_MAX+32];
    char        settrvict[SETIN_MAX+32];
    char        settrroom[SETIN_MAX+32];
} SETIN_STRUCT;

/* Party code */
typedef struct _party
{  int   leader;            /* The leader of the group */
   char  name[PNAME_LEN];   /* Group name, will show up in who */
   int   shares;            /* Total amount of shares */
   int   xp;                /* xp gained by the group */
} PARTY;

/* A setin-file entry.
 */
typedef struct _SETIN_REC {
    char        name[PNAME_LEN+1];
    char	prompt[PROMPT_LEN+32];
    char	setin[SETIN_MAX+32];
    char	setout[SETIN_MAX+32];
    char	setmin[SETIN_MAX+32];
    char	setmout[SETIN_MAX+32];
    char	setvin[SETIN_MAX+32];
    char	setvout[SETIN_MAX+32];
    char	setqin[SETIN_MAX+32];
    char	setqout[SETIN_MAX+32];
    char	setsit[SETIN_MAX+32];
    char	setstand[SETIN_MAX+32];
    char 	settrenter[SETIN_MAX+32];
    char   	settrvict[SETIN_MAX+32];
    char	settrroom[SETIN_MAX+32];
} SETIN_REC;


/* A condition as defined in database.c 
 */
typedef struct _CONDITION {
    short	cnd_code;
    short	cnd_data;
} CONDITION;


typedef short ACTION;

/* A line as defined in database.c 
 */
typedef struct _LINE {
    short	verb;
    short	item1;
    short	item2;
    CONDITION	conditions[NUM_CONDS];
    ACTION	actions[NUM_ACTS];
} LINE;


/* A PERSONA as described in the uaf_rand file 
 */
typedef struct _PERSONA {
    char	p_name[PNAME_LEN+1];
    char        p_title[TITLE_LEN+1];
    char	p_email[MAX_EMAIL_LEN+1];
    char        p_passwd[PASSWD_LEN];
    long int    p_home;
    int		p_score;
    int		p_strength;
    int         p_damage;
    int         p_armor;
    SFLAGS	p_sflags;
    PFLAGS	p_pflags;
    PFLAGS	p_mask;
    QFLAGS      p_quests;
    int		p_vlevel;
    int		p_level;
    time_t      p_last_on;
    int         p_wimpy;
    long int    p_id;
} PERSONA;



/* zone table entry 
 */
typedef struct _ZONE {
    char	*z_name;   /* Zone name */

    int         maxlocs;
    int         maxmobs;
    int         maxobjs;

    int_set     locations;
    int_set     mobiles;
    int_set     objects;

    Boolean     temporary; /* Real zone, or one to destruct on reset ? */
} ZONE;


/* Location data in the rooms arrray as read from locations file 
 */
typedef struct {
    int          r_exit[NEXITS];
    LFLAGS	 r_flags;
    char        *r_short;
    char        *r_long;
    long int     id;
    int_set      objects;      /* Set of objects in this loc. */
    int_set      mobiles;      /* Set of players/mobiles in this loc. */
    int_set      exits_to_me;  /* Set of locations that have exits to this */
    Boolean      temporary;    /* Can it be destructed on reset ? */
    Boolean      touched;      /* Has any exit been changed since last reset?*/
    int          zone;         /* To which zone do we belong ? */
/* Reset data: */
    long int     r_exit_reset[NEXITS];
    LFLAGS       r_flags_reset;
} Location;



/* An object
 */
typedef struct {

/* Unalterable, no need to reset on a reset: */
    char	 *oname;      /* objects name */
    char	 *oaltname;   /* objects alternate name */
    char	 *odesc[4];   /* descriptions for each state  */
    int		  omaxstate;  /* max state a wiz can SET an obj to */
    long	  oexamine;   /* ptr in file where examine text is found */
    char         *oexam_text; /* ptr to exam-txt for in-game created objs */
    long int      id;         /* unique ID, needed for new saved objects */
    Boolean       temporary;  /* Part of a wizards permenent zone ? */
    int           linked;     /* Which object, if any, is this linked to ? */
    int           zone;       /* To which zone do we belong ? */
    int           onum;       /* number for the code to test so that cloned
				 objects can behave like the originals. */
/* Alterable, needs saved reset values too: */
    int		  ovalue;     /* base value */
    int		  osize;
    int           oloc;
    int           ovis;       /* the objects visibility level */
    int           odamage;
    int           oarmor;
    int           ocarrf;
    int           ostate;
    OFLAGS        oflags;

    long int      oloc_reset;
    int		  osize_reset;
    int		  ovalue_reset;
    int           ovis_reset;
    int           odamage_reset;
    int           oarmor_reset;
    int           ocarrf_reset;
    int           ostate_reset;
    OFLAGS        oflags_reset;

    int_set       objects;    /* set of objects inside this object */
} Object;


/* A record describing a player or mobile in the world.
 */
typedef struct {
    char          pname[MNAME_LEN+1];
    char	  hate[MNAME_LEN+1];
    int           ploc;
    long int      phome;      /* players start-loc. and home */
    int           pdam;       /* Damage */
    int           parmor;
    int           pagg;       /* Agression */
    int	          pspeed;     /* Speed */
    int           pcarry;     /* Carrying capacity */
    int           pstr;
    int           pvis;
    time_t        p_last_on;
    SFLAGS	  psflags;
    PFLAGS        pflags;
    PFLAGS	  pmask;
    MFLAGS	  pmflags;
    QFLAGS        pquests;
    int           plev;
    int           pweapon;
    int           psitting;
    int           phelping;
    int           pfighting;
    int  	  pscore;
    char         *pftxt;       /* Mobile's one-line description */
    char         *p_exam;      /* exam-text for mobiles (may also be in DESC)*/
    int           pnum;        /* player/mobile number */
    int_set       objects;     /* set of objects carried by this character */
    long int      id;          /* Unique ID */
    Boolean       temporary;   /* Mobile part of a wizards permanent stuff ? */
    int           zone;        /* To which zone do we belong ? */
    int           pwimpy;

/* Reset data for mobiles: */

    char         *pname_reset;
    long int	  ploc_reset;
    int		  pstr_reset;
    int           pvis_reset;
    SFLAGS	  psflags_reset;
    PFLAGS	  pflags_reset;
    MFLAGS	  pmflags_reset;
    int		  plev_reset;
    int           pagg_reset;   /* Agression */
    int           pspeed_reset; /* Speed */
    int		  pdam_reset;
    int           parmor_reset;
    int           pwimpy_reset;
} UBLOCK_REC;

typedef UBLOCK_REC Mobile;
typedef UBLOCK_REC Player;







typedef struct _a_inp_h {
  struct _a_inp_h *next;
  void            (*inp_handler)(char *input_string);
} INP_HANDLER;

/* iDIRT Message System */
typedef struct _MAIL {
  void          (*old_handler)(char *str);
  FILE          *read;
  FILE          *write;
  Boolean	abort;
  Boolean	gate;
  int		pos; /* Position in list */
  int		current; /* Current mail */
  char          r_name[14];
  char          w_name[14];
  char          last[14];
  char          subject[MAX_COM_LEN];
  char          cc_list[MAX_COM_LEN];
  char          data[100];
  Boolean       level;
  char          prompt[PROMPT_LEN+20];
} MAIL;

/********************
typedef struct _MAIL {
  void              (*old_handler)(char *str);
  char othernames[2048];
  FILE *read;
  FILE *write;
  char r_name[14];
  char w_name[14];
  char last[14];
  char subject[MAX_COM_LEN];
  char data[100];
  Boolean level;
} MAIL;
*****************************/

typedef struct _PAGER {
  FILE *file;
  INP_HANDLER *oldhandler;
  int size;
  int read;
  Boolean brief;
  char old_prompt[PROMPT_LEN+20];
  char *pattern;
  char stopper[20];
} PAGER;

typedef struct _CONVERSE {
  char old_prompt[PROMPT_LEN+20];
  int talking_to;
  Boolean active;
} CONVERSE;

typedef struct _EDIT {
	void	(*old_handler)(char *str);
	char	old_prompt[PROMPT_LEN+20];
	int	num;
	Object 	*o;
 	Object *o2;
	UBLOCK_REC *mob;
	Location	*room;
} EDIT;


/* Player data that are not shared by mobiles.
 */
typedef struct _a_player {
  time_t             last_cmd;
  time_t             logged_on;
  time_t	     p_last_comm;   /* last gossip or say */
  int                fil_des;
  FILE               *stream;
  struct sockaddr_in sin;
  int                sin_len;
  INP_HANDLER        *inp_handler;
  MAIL    mails;          /* Mail structure */
  Boolean inmailer;       /* Is the user in the mailer? */
  TRACE              tr;        /* trace item struct */
  PAGER              pager;
  EDIT		     edits;
  CONVERSE	     converse;
  YN_STRUCT	     yn_handler; /* Miscellaneous crap for the yn handler (; */
  char               *inp_buffer_p;
  char               *inp_buffer_end;
  char               *sock_buffer_p;
  char               *sock_buffer_end;
  void               *writer;     /* Current writer */
  void		     *board;       /* similar to writer, to help with board */
  int                no_logins;   /* No of failed passwd */
  int                work;        /* General work area for use by code */
  char               work2[64];
  Boolean	     announced;
  Boolean	     is_new;	  /* a new player */
  Boolean            no_echo;     /* True if telnet should turn off echo */
  Boolean            isawiz;      /* Is this player a system's wizard? */
  Boolean	     ismonitored; /* is this player being monitored? */
  Boolean	     iamon;       /* Am I on? Init to false. */
  Boolean	     in_pbfr;     /* Are we busy inside pbfr()? */
  Boolean	     aliased;     /* Are we aliased? */
  Boolean	     a_new_player;/* Are we a new player? */
  int                quit_next;   /* Next on quit_list, -2 if not in list */
  int		     polymorphed; /* Polymorphed for how many more turns? */
  int		     pretend;     /* Who we pretend to be if aliased or poly */
  int                isforce;     /* Set to -1 if not force, else pl. indx. */
  int                i_follow;    /* Set to -1 if not following anyone. */
  int                me_ivct;     /* Invisible for how many cmds ? */

  int                snooped;     /* How many are snooping us? */
  int                snooptarget; /* Who if any are we snooping? */
  int                asmortal;    /* What level are we pretending to have? */
  int		     drunk;	  /* We are drunk :) */

  char               passwd[PASSWD_LEN];
  char               cprompt[PROMPT_LEN+32];
  char  	     prompt[PROMPT_LEN+32];
  char	             setin[SETIN_MAX+32];
  char		     setout[SETIN_MAX+32];
  char		     setmin[SETIN_MAX+32];
  char		     setmout[SETIN_MAX+32];
  char		     setvin[SETIN_MAX+32];
  char		     setvout[SETIN_MAX+32];
  char		     setqin[SETIN_MAX+32];
  char		     setqout[SETIN_MAX+32];
  char		     setsit[SETIN_MAX+32];
  char		     setstand[SETIN_MAX+32];
  char		     settrenter[SETIN_MAX+32];
  char		     settrvict[SETIN_MAX+32];
  char		     settrroom[SETIN_MAX+32];

   int       ghostcounter;
  char		     ghostsetout[SETIN_MAX+1];
  char		     ghostsetin[SETIN_MAX+1];
  char       ghostsetstand[SETIN_MAX+1];
  char       ghostsetsit[SETIN_MAX+1];
  char		     o_setin[SETIN_MAX+1]; /* dupl. sets for aliased pl. */
  char		     o_setout[SETIN_MAX+1];
  char		     o_prompt[PROMPT_LEN+20];

  char               wd_her[MNAME_LEN+1];
  char               wd_him[MNAME_LEN+1];
  char		     *wd_them;
  char		     *wd_it;

  char               ptitle[TITLE_LEN+1];
  char               hostname[MAXHOSTNAMELEN];
  char               prev_com[MAX_COM_LEN];
  char               inp_buffer[MAX_COM_LEN*16];
  char               sock_buffer[MAX_COM_LEN*16];

  char			email[MAX_EMAIL_LEN+1];

  FILE		*syslog_fp;
  char		syslog_match[10][80];
  int 		syslog_sameline;
  Boolean	syslog_popened;

  int           login_time;
  int           last_command;
  time_t        p_last_on;
   PARTY  *party;           /* Pointer to master party object */
   int    share;            /* Amount of shares owned by the player */


} PLAYER_REC;



/* The world. Contains some global variables.
 */
typedef struct _a_world {
  int               w_msg_low;
  int               w_msg_high;
  int               w_weather;
  int               w_lock;
  int               w_mob_stop;
  int               w_peace;
  int		    w_max_users;
  int               w_tournament;
  int		    w_delayed;
  int		    w_logins;
  int               w_record_num;
  PFLAGS	    w_pflags[10];
  PFLAGS	    w_mask[10];
} WORLD_REC;


/* ---------- */


typedef struct _calendar {
  char season;                    /* spring, summer, etc  */
  char modifier;                  /* late, early, etc     */
  char daytime;                   /* morning, noon, etc   */
  char daycount;                  /* 30 days per modifier */
  char light;                     /* is there light now?  */
  char temp;                      /* what is the temp?    */
  unsigned int countdown;         /* for timing           */
  
} CALENDAR;

#endif /* Add nothing past this line... */