1stMud4.5.3/
1stMud4.5.3/backup/
1stMud4.5.3/bin/
1stMud4.5.3/bin/extras/
1stMud4.5.3/data/i3/
1stMud4.5.3/doc/1stMud/
1stMud4.5.3/doc/Diku/
1stMud4.5.3/doc/MPDocs/
1stMud4.5.3/doc/Rom/
1stMud4.5.3/notes/
/**************************************************************************
*  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
*  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
*                                                                         *
*  Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael         *
*  Chastain, Michael Quan, and Mitchell Tse.                              *
*                                                                         *
*  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.                                               *
*                                                                         *
*  Much time and thought has gone into this software and you are          *
*  benefiting.  We hope that you share your changes too.  What goes       *
*  around, comes around.                                                  *
***************************************************************************
*       ROM 2.4 is copyright 1993-1998 Russ Taylor                        *
*       ROM has been brought to you by the ROM consortium                 *
*           Russ Taylor (rtaylor@hypercube.org)                           *
*           Gabrielle Taylor (gtaylor@hypercube.org)                      *
*           Brian Moore (zump@rom.org)                                    *
*       By using this code, you have agreed to follow the terms of the    *
*       ROM license, in the file Rom24/doc/rom.license                    *
***************************************************************************
*          1stMud ROM Derivative (c) 2001-2004 by Markanth                *
*            http://www.firstmud.com/  <markanth@firstmud.com>            *
*         By using this code you have agreed to follow the term of        *
*             the 1stMud license in ../doc/1stMud/LICENSE                 *
***************************************************************************/

#ifndef __STRUCTS_H_
#define __STRUCTS_H_    	1

#define LinkList(type, name) type * name##_first, * name##_last
#define LinkNext(type) type *next, *prev
#define LinkNextName(type, name) type *next_##name, *prev_##name
#define CheckValid    bool valid

struct ban_data
{
	LinkNext(BanData);
	CheckValid;
	flag_t ban_flags;
	int level;
	const char *name;
};

struct buf_type
{
	LinkNext(Buffer);
	CheckValid;
	buf_t state;
	int size;
	char *string;
};

struct auction_data
{
	LinkNext(AuctionData);
	ObjData *item;
	CharData *owner;
	CharData *high_bidder;
	int status;
	int number;
	auc_t type;
	money_t bid;
	 CheckValid;
};

struct time_data
{
	int hour;
	int day;
	int month;
	int year;
	sun_t sunlight;
};

struct weather_data
{
	int temp;
	int precip;
	int wind;
	int temp_vector;
	int precip_vector;
	int wind_vector;
	int climate_temp;
	int climate_precip;
	int climate_wind;
	const char *echo;
	const char *echo_color;
};

struct descriptor_data
{
	LinkNext(Descriptor);
	Descriptor *snoop_by;
	CharData *character;
	CharData *original;
	 CheckValid;
	const char *host;
	unsigned long ip;
	int port;
	SOCKET descriptor;
	connect_t connected;
	time_t connect_time;
	bool fcommand;
	bool fPrompt;
	char inbuf[4 * MAX_INPUT_LENGTH];
	char incomm[MAX_INPUT_LENGTH];
	char inlast[MAX_INPUT_LENGTH];
	int repeat;
	char *outbuf;
	int outsize;
	int outtop;
	const char *showstr_head;
	const char *showstr_point;
	void *pEdit;
	const char **pString;
	ed_t editor;
	flag_t desc_flags;
	unsigned int scr_width;
	unsigned int scr_height;
#ifndef DISABLE_MCCP
	z_stream *out_compress;
	unsigned char *out_compress_buf;
	size_t bytes_compressed;
	int mccp_version;
#endif
	size_t bytes_normal;
	const char *run_buf;
	const char *run_head;
	char ttype[60];
	struct
	{
		const char *supports;
		float mxp_ver;
		float client_ver;
		float style_ver;
		const char *client;
		int registered;
		flag_t flags;
		flag_t flags2;
	}
	mxp;
	struct
	{
		unsigned int keycode;
		char version[20];
	}
	portal;
	double imp_vers;
	double pueblo_vers;
#ifdef __cplusplus

	int wrap(const char *buf);
#endif

	int wrong_password_count;
};

struct str_app_type
{
	int tohit;
	int todam;
	int carry;
	int wield;
};

struct int_app_type
{
	int learn;
};

struct wis_app_type
{
	int practice;
};

struct dex_app_type
{
	int defensive;
};

struct con_app_type
{
	int hitp;
	int shock;
};

struct help_data
{
	LinkNext(HelpData);
	CheckValid;
	int level;
	const char *keyword;
	const char *text;
	help_t category;
	flag_t flags;
};

struct shop_data
{
	LinkNext(ShopData);
	CheckValid;
	vnum_t keeper;
	int buy_type[MAX_TRADE];
	int profit_buy;
	int profit_sell;
	int open_hour;
	int close_hour;
};

struct class_type
{
	const char *name[MAX_REMORT];
	const char *description;
	int *index;
	int attr_prime;
	vnum_t weapon;
	int skill_adept;
	int thac0_00;
	int thac0_32;
	int hp_min;
	int hp_max;
	bool fMana;
	const char *base_group;
	const char *default_group;
	flag_t flags;
};

struct weapon_type
{
	const char *name;
	vnum_t vnum;
	weapon_t type;
	int *gsn;
};

struct wiznet_type
{
	const char *name;
	flag_t flag;
	int level;
};

struct attack_type
{
	const char *name;
	const char *noun;
	dam_class damage;
};

struct deity_type
{
	const char *name;
	const char *desc;
	const char *skillname;
	ethos_t ethos;
	flag_t flags;
	 LinkNext(DeityData);
	 CheckValid;
};

struct corpse_data
{
	LinkNext(CorpseData);
	CheckValid;
	ObjData *corpse;
};

struct race_type
{
	const char *name;
	const char *description;
	bool pc_race;
	flag_t act;
	flag_t aff;
	flag_t off;
	flag_t imm;
	flag_t res;
	flag_t vuln;
	flag_t form;
	flag_t parts;
	int points;
	int *class_mult;
	const char *skills[MAX_RACE_SKILL];
	int stats[STAT_MAX];
	int max_stats[STAT_MAX];
	size_type size;
	flag_t flags;
	 LinkNext(RaceData);
	 CheckValid;
};

struct spec_type
{
	const char *name;
	Spec_F *function;
};

struct board_data
{
	const char *short_name;
	const char *long_name;
	int read_level;
	int write_level;
	const char *names;
	board_def force_type;
	int purge_days;
	 LinkList(NoteData, note);
	flag_t flags;

};

struct note_data
{
	LinkNext(NoteData);
	CheckValid;
	const char *sender;
	const char *date;
	const char *to_list;
	const char *subject;
	const char *text;
	const char *reply_text;
	const char *email_addr;
	const char *reply_addr;
	time_t date_stamp;
	time_t expire;
};

struct channel_type
{
	int *index;
	channel_types spec_flag;
	flag_t bit;
	const char *format;
	const char *color;
	int custom_color;
	int page_length;
	const char *name;
	const char *description;
	flag_t flags;
};

struct gquest_data
{
	LinkNext(GqData);
	CheckValid;
	CharData *ch;
	vnum_t *gq_mobs;
};

struct gquest_type
{
	vnum_t *mobs;
	const char *who;
	int mob_count;
	int timer;
	int involved;
	int qpoints;
	money_t gold;
	int minlevel;
	int maxlevel;
	gquest_t running;
	int cost;
};

struct affect_data
{
	LinkNext(AffectData);
	CheckValid;
	where_t where;
	int type;
	int level;
	int duration;
	apply_t location;
	int modifier;
	flag_t bitvector;
};

struct crs_data
{
	crs_t status;
	long timer;
	const char *who;
	const char *reason;
};

struct kill_data
{
	int number;
	int kills;
	int deaths;
};

struct mud_stats
{
	long logins;
	long quests;
	long qcomplete;
	long levels;
	long newbies;
	long deletions;
	long mobdeaths;
	long auctions;
	long aucsold;
	long pdied;
	long pkill;
	long notes;
	long remorts;
	long wars;
	long gquests;
	long connections;
	long boot_connects;
	int online;
	long web_requests;
	long chan_msgs;
	time_t lastupdate;
	int version;
};

struct bonus_data
{
	int mod;
	int time;
	const char *msg;
	bonus_t status;
};

struct mud_data
{
	time_t last_copyover;
	time_t longest_uptime;
	struct mud_stats stats;
	flag_t mud_flags;
	arena_t arena;
	int share_value;
	int pulsepersec;
	int rand_factor;
	int weath_unit;
	int max_vector;
	int climate_factor;
	const char *name;
	int unique_id;
	int default_port, webport_offset;
	const char *login_prompt;
	const char *bind_ip_address;
	int min_save_lvl;
	struct bonus_data bonus;
	int group_lvl_limit;
	int mobdam;
	int pcdam;
	flag_t disabled_signals;
	int max_points;
	flag_t cmdline_options;
	bool dont_save_area_list;
	size_t bytes_normal;
	size_t bytes_compressed;
};

struct war_data
{
	LinkNext(WarData);
	CheckValid;
	CharData *ch, *owner;
	long hit, mana, move;
	flag_t flags;
	int Class;
};

struct war_type
{
	WarData *first, *last;
	const char *who;
	int min_level;
	int max_level;
	int inwar;
	war_types wartype;
	int timer;
	war_t status;
};

struct wpwd_data
{
	LinkNext(WebpassData);
	CheckValid;
	const char *name;
	const char *passw;
	int level;
};

struct char_index
{
	LinkNext(CharIndex);
	CheckValid;
	Spec_F *spec_fun;
	ShopData *pShop;
	 LinkList(ProgList, mprog);
	AreaData *area;
	vnum_t vnum;
	vnum_t group;
	bool new_format;
	int count;
	long kills;
	long deaths;
	const char *player_name;
	const char *short_descr;
	const char *long_descr;
	const char *description;
	flag_t act;
	flag_t affected_by;
	int alignment;
	int level;
	int hitroll;
	int hit[DICE_MAX];
	int mana[DICE_MAX];
	int damage[DICE_MAX];
	int ac[MAX_AC];
	int dam_type;
	int autoset;
	int random;
	flag_t off_flags;
	flag_t imm_flags;
	flag_t res_flags;
	flag_t vuln_flags;
	position_t start_pos;
	position_t default_pos;
	sex_t sex;
	RaceData *race;
	money_t wealth;
	flag_t form;
	flag_t parts;
	size_type size;
	const char *material;
	flag_t mprog_flags;
};

struct stat_data
{
	LinkNext(StatData);
	CheckValid;
	const char *name;
	long gamestat[MAX_GAMESTAT];
	int version;
};

struct mbr_data
{
	LinkNext(ClanMember);
	CheckValid;
	const char *name;
	int rank;
	ClanData *clan;
	int level;
	money_t gold_donated;
	int qp_donated;
};

struct char_data
{
	LinkNext(CharData);
	LinkNextName(CharData, player);
	LinkNextName(CharData, in_room);
	CharData *master;
	CharData *leader;
	CharData *fighting;
	CharData *reply;
	CharData *pet;
	CharData *mprog_target;
	Spec_F *spec_fun;
	CharIndex *pIndexData;
	Descriptor *desc;
	 LinkList(AffectData, affect);
	 LinkList(ObjData, carrying);
	ObjData *on;
	RoomIndex *in_room;
	RoomIndex *was_in_room;
	AreaData *zone;
	PcData *pcdata;
	GenData *gen_data;
	CharData *hunting;
	WarData *war;
	GqData *gquest;
	 CheckValid;
	const char *name;
	long id;
	int version;
	const char *short_descr;
	const char *long_descr;
	const char *description;
	const char *prompt;
	const char *gprompt;
	const char *prefix;
	int group;
	sex_t sex;
	int rank;
	int Class[MAX_MCLASS];
	RaceData *race;
	int level;
	DeityData *deity;
	int trust;
	int lines;
	int columns;
	time_t logon;
	int timer;
	int wait;
	int daze;
	long hit;
	long max_hit;
	long mana;
	long max_mana;
	long move;
	long max_move;
	money_t gold;
	money_t silver;
	int exp;
	flag_t act;
	flag_t comm;
	flag_t wiznet;
	flag_t imm_flags;
	flag_t res_flags;
	flag_t vuln_flags;
	int invis_level;
	int incog_level;
	flag_t affected_by;
	position_t position;
	int practice;
	int train;
	int carry_weight;
	int carry_number;
	int saving_throw;
	int alignment;
	int hitroll;
	int damroll;
	int armor[MAX_AC];
	int wimpy;

	int perm_stat[STAT_MAX];
	int mod_stat[STAT_MAX];

	flag_t form;
	flag_t parts;
	size_type size;
	const char *material;

	flag_t off_flags;
	int damage[DICE_MAX];
	int dam_type;
	position_t start_pos;
	position_t default_pos;
	flag_t info_settings;
	int mprog_delay;
	int stance[MAX_STANCE];
	char color_prefix;
};

struct color_type
{
	const char *name;
	const char *description;
	int slot;
	colatt_t col_attr;
	flag_t flags;
};

struct color_template
{
	LinkNext(ColorTemplate);
	const char *name;
	const char *description;
	colatt_t *colors;
	 CheckValid;
};

struct quest_data
{
	CharData *mob, *giver;
	ObjData *obj;
	RoomIndex *room;
	int time;
	int points;
	quest_t status;
};

struct pc_data
{
	LinkNext(PcData);
	Buffer *buffer;
	int tells;
	int played;
	CharData *challenger;
	CharData *challenged;
	CharData *gladiator;
	 LinkList(NameList, killer);
	 CheckValid;
	const char *pwd;
	const char *bamfin;
	const char *bamfout;
	const char *pretit;
	const char *title;
	const char *who_descr;
	const char *afk_msg;
	long perm_hit;
	long perm_mana;
	long perm_move;
	sex_t true_sex;
	int last_level;
	int condition[COND_MAX];
	int *learned;
	bool *group_known;
	int points;
	bool confirm_delete;
	BoardData *board;
	time_t last_note[MAX_BOARD];
	NoteData *in_progress, *last_read;
	bool unsubscribed[MAX_BOARD];
	const char *alias[MAX_ALIAS];
	const char *alias_sub[MAX_ALIAS];
	int security;
	colatt_t *colors;
	ColorTemplate *color_scheme;
	long gamestat[MAX_GAMESTAT];
	QuestData quest;
	int trivia;
	bool confirm_remort;
	bool stay_race;
	char explored[MAX_EXPLORE_HASH];
	long home_invite;
	vnum_t home[MAX_HOME_VNUMS];
	vnum_t home_key;
	vnum_t home_room;
	int awins;
	int alosses;
	money_t plr_wager;
	money_t gold_bank;
	int shares;
	const char *webpass;
	char str_ed_key;
	const char *buddies[MAX_BUDDY];
	const char ***history;
	int *history_index;
	int timezone;
	const char *ignore[MAX_IGNORE];
	flag_t ignore_flags[MAX_IGNORE];
	ClanData *clan, *invited;
	int prime_class;
#ifndef DISABLE_I3
	I3_CHARDATA *i3chardata;
#endif
	flag_t vt100;
	time_t backup;
	const char *email;
	bool confirm_suicide;
	bool confirm_pk;
	long timers[MAX_TIMER];
};

struct gen_data
{
	LinkNext(GenData);
	CheckValid;
	bool *skill_chosen;
	bool *group_chosen;
	int points_chosen;
	int rerolls;
};

struct liq_type
{
	const char *liq_name;
	const char *liq_color;
	int liq_affect[5];
};

struct ed_data
{
	LinkNext(ExDescrData);
	CheckValid;
	const char *keyword;
	const char *description;
};

struct obj_index
{
	LinkNext(ObjIndex);
	CheckValid;
	LinkList(ExDescrData, ed);
	LinkList(AffectData, affect);
	LinkList(ProgList, oprog);
	AreaData *area;
	bool new_format;
	const char *name;
	const char *short_descr;
	const char *description;
	vnum_t vnum;
	int reset_num;
	const char *material;
	item_t item_type;
	flag_t extra_flags;
	flag_t wear_flags;
	int level;
	int condition;
	int count;
	int weight;
	money_t cost;
	long value[5];
	flag_t oprog_flags;
};

struct obj_data
{
	LinkNext(ObjData);
	LinkNextName(ObjData, content);
	LinkList(ObjData, content);
	ObjData *in_obj;
	ObjData *on;
	CharData *carried_by;
	 LinkList(ExDescrData, ed);
	 LinkList(AffectData, affect);
	ObjIndex *pIndexData;
	RoomIndex *in_room;
	CharData *oprog_target;
	int oprog_delay;
	 CheckValid;
	bool enchanted;
	const char *owner;
	const char *name;
	const char *short_descr;
	const char *description;
	item_t item_type;
	flag_t extra_flags;
	flag_t wear_flags;
	wloc_t wear_loc;
	int weight;
	money_t cost;
	int level;
	int condition;
	const char *material;
	int timer;
	long value[5];
};

struct exit_data
{
	union
	{
		RoomIndex *to_room;
		vnum_t vnum;
	}
	u1;
	flag_t exit_info;
	vnum_t key;
	const char *keyword;
	const char *description;
	 LinkNext(ExitData);
	 CheckValid;
	flag_t rs_flags;
	int orig_door;
};

struct reset_data
{
	LinkNext(ResetData);
	CheckValid;
	char command;
	vnum_t arg1;
	int arg2;
	vnum_t arg3;
	int arg4;
};

struct area_data
{
	LinkNext(AreaData);
	AreaData *next_sort;
	 CheckValid;
	const char *file_name;
	const char *name;
	const char *credits;
	const char *lvl_comment;
	const char *resetmsg;
	int version;
	int age;
	int nplayer;
	int min_level;
	int max_level;
	vnum_t min_vnum;
	vnum_t max_vnum;
	bool empty;
	const char *builders;
	int vnum;
	flag_t area_flags;
	int security;
	WeatherData weather;
	ClanData *clan;
	vnum_t recall;
	MspData *sound;
	long kills, deaths;
};

struct area_index
{
	AreaData *area;
	double percent;
	long stat;
};

struct room_index
{
	LinkNext(RoomIndex);
	CheckValid;
	LinkList(CharData, person);
	LinkList(ObjData, content);
	LinkList(ExDescrData, ed);
	AreaData *area;
	MspData *sound;
	ExitData *exit[MAX_DIR];
	 LinkList(ResetData, reset);
	 LinkList(ProgList, rprog);
	CharData *rprog_target;
	flag_t rprog_flags;
	int rprog_delay;
	const char *name;
	const char *description;
	const char *owner;
	vnum_t vnum;
	flag_t room_flags;
	int light;
	sector_t sector_type;
	int heal_rate;
	int mana_rate;
	int guild;
	int distance_from_source;
	RoomIndex *shortest_from_room;
	RoomIndex *shortest_next_room;
};

struct disabled_data
{
	LinkNext(DisabledData);
	CheckValid;
	CmdData *command;
	const char *disabled_by;
	const char *disabled_for;
	int level;
};

struct skill_type
{
	const char *name;
	int *skill_level;
	int *rating;
	Spell_F *spell_fun;
	tar_t target;
	position_t minimum_position;
	int *pgsn;
	int min_mana;
	int beats;
	const char *noun_damage;
	const char *msg_off;
	const char *msg_obj;
	MspData *sound;
	flag_t flags;
};

struct group_type
{
	const char *name;
	int *rating;
	const char *spells[MAX_IN_GROUP];
	flag_t flags;
};

#ifdef STFILEIO

struct st_data
{
	LinkNext(stFile);
	CheckValid;
	char *str;
	size_t pos, size;
	FILE *stream;
#if !defined WIN32 && !defined __CYGWIN__
	const char *temp;
#endif

	const char *file, *mode;
};

#endif

struct prog_list
{
	flag_t trig_type;
	const char *trig_phrase;
	ProgCode *prog;
	 LinkNext(ProgList);
	 CheckValid;
};

struct prog_code
{
	vnum_t vnum;
	const char *name;
	const char *code;
	AreaData *area;
	 LinkNext(ProgCode);
	 CheckValid;
	bool disabled;
	const char *disabled_text;
};

struct social_type
{
	const char *name;
	const char *char_no_arg;
	const char *others_no_arg;
	const char *char_found;
	const char *others_found;
	const char *vict_found;
	const char *char_not_found;
	const char *char_auto;
	const char *others_auto;
	flag_t flags;
	SocialData *next_hash;
	 LinkNext(SocialData);
	 CheckValid;
};

struct crash_type
{
	Descriptor *desc;
	char logline[MAX_INPUT_LENGTH];
	crash_status status;
	crash_t crashed;
};

struct clan_rank
{
	const char *rankname;
};

struct clan_type
{
	const char *name;
	const char *who_name;
	const char *description;
	vnum_t rooms[MAX_CLAN_ROOM];
	flag_t clan_flags;
	ethos_t ethos;
	ClanRank rank[MAX_RANK];
	money_t gold;
	int questpoints;
	 LinkNext(ClanData);
	 CheckValid;
};

struct cmd_type
{
	const char *name;
	Do_F *do_fun;
	position_t position;
	int level;
	log_t log;
	cmd_cat category;
	flag_t flags;
	CmdData *next_hash, *next_sort;
	 LinkNext(CmdData);
	 CheckValid;
};

struct song_data
{
	const char *group;
	const char *name;
	const char *lyrics[MAX_LINES];
	int lines;
	flag_t flags;
};

struct datatable_type
{
	const char *field;
	field_t type;
	void *argument;
	const void *arg1;
	const void *arg2;
	Ed_F *function;
	const void *arg3;
};

struct olc_ed_type
{
	const char *name;
	const char *longname;
	ed_t ed;
	void *type_zero;
	Do_F *do_fun;
	DataTable *table;
	Olc_F *create_fun;
	Olc_F *delete_fun;
	Olc_F *list_fun;
	TableSave_F *save_fun;
	const void *vnum;
	field_t field;
};

#ifndef DISABLE_WEBSRV
struct web_descriptor
{
	LinkNext(WebDescriptor);
	CheckValid;
	SOCKET fd;
	char request[MIL], baseurl[MIL];
	const char *stuff, *path, *buf;
	int their_addr;
};
#endif

struct pfile_list
{
	const char **names;
	int count;
};

#ifdef WIN32
struct dirent
{
	char d_name[1];
};
#endif

struct column_data
{
	bool newline;
	size_t col_pos;
	size_t line_len;
	size_t line_pos;
	size_t columns;
	size_t col_len;
	column_t type;
	void *to;
	 LinkNext(Column);
	 CheckValid;
};

struct msp_data
{
	const char *file;
	msp_t type;
	int volume;
	int loop;
	int priority;
	bool restart;
	const char *url;
	flag_t to;
	 LinkNext(MspData);
	 CheckValid;
};

#define MAX_PARTS       3

struct name_profile
{
	const char *title;
	const char *part[MAX_PARTS];
	int part_count[MAX_PARTS];
	bool valid;
	 LinkNext(NameProfile);
};

struct name_list
{
	const char *name;
	 LinkNext(NameList);
	bool valid;
};

struct wiz_data
{
	LinkNext(WizData);
	int level;
	const char *name;
	const char *email;
	const char *jobs;
	bool valid;
};

struct change_data
{
	bool valid;
	const char *change;
	const char *coder;
	time_t time;
};

#endif