/**************************************************************************
* 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-2003 by Ryan Jennings *
* http://1stmud.dlmud.com/ <r-jenn@shaw.ca> *
***************************************************************************/
#if !defined(STRUCTS_H)
#define STRUCTS_H
/*
* Site ban structure.
*/
struct ban_data
{
BAN_DATA *next;
BAN_DATA *prev;
bool valid;
flag_t ban_flags;
int level;
const char *name;
};
struct buf_type
{
BUFFER *next;
BUFFER *prev;
bool valid;
int state; /* error state of the buffer */
int size; /* size in k */
char *string; /* buffer's string */
};
struct auction_data
{
AUCTION_DATA *next;
AUCTION_DATA *prev;
OBJ_DATA *item;
CHAR_DATA *owner;
CHAR_DATA *high_bidder;
int status;
int number;
unsigned long bid;
bool valid;
};
/*
* Time and weather stuff.
*/
struct time_info_data
{
int hour;
int day;
int month;
int year;
sun_t sunlight;
};
struct weather_data
{
int temp; /* temperature */
int precip; /* precipitation */
int wind; /* umm... wind */
int temp_vector; /* vectors controlling */
int precip_vector; /* rate of change */
int wind_vector;
int climate_temp; /* climate of the area */
int climate_precip;
int climate_wind;
const char *echo; /* echo string */
const char *echo_color; /* color for the echo */
};
/*
* Descriptor (channel) structure.
*/
struct descriptor_data
{
DESCRIPTOR_DATA *next;
DESCRIPTOR_DATA *prev;
DESCRIPTOR_DATA *snoop_by;
CHAR_DATA *character;
CHAR_DATA *original;
bool valid;
const char *host;
int descriptor;
connect_t connected;
bool fcommand;
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; /* OLC */
const char **pString; /* OLC */
int editor; /* OLC */
flag_t d_flags;
unsigned int scr_width; /* screen width */
unsigned int scr_height; /* screen height */
#if !defined(NO_MCCP)
z_stream *out_compress;
unsigned char *out_compress_buf;
unsigned long bytes_compressed;
int mccp_version;
#endif
unsigned long 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;
#if defined(__cplusplus)
// a c++ example
void wrap(const char *buf);
#endif
};
/*
* Attribute bonus structures.
*/
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;
};
/*
* Help table types.
*/
struct help_data
{
HELP_DATA *next;
HELP_DATA *prev;
int level;
const char *keyword;
const char *text;
};
struct shop_data
{
SHOP_DATA *next;
SHOP_DATA *prev; /* Next shop in list */
vnum_t keeper; /* Vnum of shop keeper mob */
int buy_type[MAX_TRADE]; /* Item types shop will buy */
int profit_buy; /* Cost multiplier for buying */
int profit_sell; /* Cost multiplier for selling */
int open_hour; /* First opening hour */
int close_hour; /* First closing hour */
};
struct class_type
{
const char *name; /* the full name of the class */
int attr_prime; /* Prime attribute */
vnum_t weapon; /* First weapon */
vnum_t guild[MAX_GUILD]; /* Vnum of guild rooms */
int skill_adept; /* Maximum skill level */
int thac0_00; /* Thac0 for level 0 */
int thac0_32; /* Thac0 for level 32 */
int hp_min; /* Min hp gained on leveling */
int hp_max; /* Max hp gained on leveling */
bool fMana; /* Class gains mana on level */
const char *base_group; /* base skills gained */
const char *default_group; /* default skills gained */
};
struct item_type
{
int type;
const char *name;
};
struct weapon_type
{
const char *name;
vnum_t vnum;
int type;
int *gsn;
};
struct wiznet_type
{
const char *name;
flag_t flag;
int level;
};
struct attack_type
{
const char *name; /* name */
const char *noun; /* message */
int damage; /* damage class */
};
struct deity_type
{
const char *name;
const char *desc;
const char *skillname;
DEITY_DATA *next, *prev;
bool valid;
};
struct corpse_data
{
CORPSE_DATA *next;
CORPSE_DATA *prev;
OBJ_DATA *corpse;
};
struct race_type
{
const char *name; /* call name of the race */
bool pc_race; /* can be chosen by pcs */
flag_t act; /* act bits for the race */
flag_t aff; /* aff bits for the race */
flag_t off; /* off bits for the race */
flag_t imm; /* imm bits for the race */
flag_t res; /* res bits for the race */
flag_t vuln; /* vuln bits for the race */
flag_t form; /* default form flag_t for the race */
flag_t parts; /* default parts for the race */
int points; /* cost in points of the race */
int *class_mult; /* exp multiplier for class, * 100 */
const char *skills[5]; /* bonus skills for the race */
int stats[MAX_STATS]; /* starting stats */
int max_stats[MAX_STATS]; /* maximum stats */
int size; /* aff bits for the race */
RACE_DATA *next, *prev;
bool valid;
};
struct spec_type
{
const char *name; /* special function name */
SPEC_FUN *function; /* the function */
};
/*
* Data structure for notes.
*/
struct note_data
{
NOTE_DATA *next;
NOTE_DATA *prev;
bool valid;
const char *sender;
const char *date;
const char *to_list;
const char *subject;
const char *text;
time_t date_stamp;
time_t expire;
};
struct channel_type
{
int *index;
channel_types spec_flag;
flag_t bit;
const char *format;
const char *colour;
int custom_colour;
int page_length;
const char *name;
const char *description;
};
struct gquest_char_data
{
GQ_DATA *next, *prev;
CHAR_DATA *ch;
vnum_t *gq_mobs;
};
struct gquest_data
{
GQ_DATA *first, *last;
CHAR_DATA *last_registar;
vnum_t *mobs;
const char *who;
int mob_count;
int timer;
int involved;
int qpoints;
int gold;
int minlevel;
int maxlevel;
gquest_t running;
};
/*
* An affect.
*/
struct affect_data
{
AFFECT_DATA *next;
AFFECT_DATA *prev;
bool valid;
where_t where;
int type;
int level;
int duration;
apply_t location;
int modifier;
flag_t bitvector;
};
/* (C)opyover-(R)eboot-(S)hutdown Data */
struct crs_data
{
crs_t status;
long timer; // in pulses
const char *who; // who initiated
const char *reason; // why its initiated
};
/*
* A kill structure (indexed by level).
*/
struct kill_data
{
int number;
int killed;
};
struct mud_data
{
flag_t mud_flags;
arena_t arena;
int share_value;
int max_online;
int pulsepersec;
/* weather stuff */
int rand_factor;
int weath_unit;
int max_vector;
int climate_factor;
// more global data here!
};
struct war_char_data
{
WAR_DATA *next, *prev;
CHAR_DATA *ch;
long hit, mana, move;
flag_t flags;
};
struct war_data
{
WAR_DATA *first, *last;
const char *who;
int min_level;
int max_level;
int inwar;
war_types wartype;
int timer;
war_t status;
};
struct wpwd_data
{
WPWD_DATA *next;
WPWD_DATA *prev;
bool valid;
const char *name;
const char *passw;
};
/*
* 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 *first_mprog;
PROG_LIST *last_mprog;
AREA_DATA *area; /* OLC */
vnum_t vnum;
vnum_t group;
bool new_format;
int count;
int killed;
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[3];
int mana[3];
int damage[3];
int ac[4];
int dam_type;
flag_t off_flags;
flag_t imm_flags;
flag_t res_flags;
flag_t vuln_flags;
position_t start_pos;
position_t default_pos;
int sex;
RACE_DATA *race;
long wealth;
flag_t form;
flag_t parts;
int size;
const char *material;
flag_t mprog_flags;
};
struct stat_data
{
STAT_DATA *next;
STAT_DATA *prev;
bool valid;
const char *name; // name of character
long gamestat[MAX_GAMESTAT]; // stat data
};
struct mbr_data
{
MBR_DATA *next;
MBR_DATA *prev;
bool valid;
const char *name;
int rank;
CLAN_DATA *clan;
int level;
};
/*
* One character (PC or NPC).
*/
struct char_data
{
CHAR_DATA *next;
CHAR_DATA *prev;
CHAR_DATA *next_player;
CHAR_DATA *prev_player;
CHAR_DATA *next_in_room;
CHAR_DATA *prev_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;
DESCRIPTOR_DATA *desc;
AFFECT_DATA *first_affect;
AFFECT_DATA *last_affect;
OBJ_DATA *first_carrying;
OBJ_DATA *last_carrying;
OBJ_DATA *on;
ROOM_INDEX_DATA *in_room;
ROOM_INDEX_DATA *was_in_room;
AREA_DATA *zone;
PC_DATA *pcdata;
GEN_DATA *gen_data;
CHAR_DATA *hunting;
WAR_DATA *war;
GQ_DATA *gquest;
bool valid;
const char *name;
long id;
int version;
const char *short_descr;
const char *long_descr;
const char *description;
const char *prompt;
const char *prefix;
int group;
CLAN_DATA *clan;
int sex;
int rank;
CLAN_DATA *invited;
int Class[MAX_MCLASS];
RACE_DATA *race;
int level;
DEITY_DATA *deity;
int trust;
int played;
int lines; /* for the pager */
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;
long gold;
long silver;
int exp;
flag_t act;
flag_t comm; /* RT added to pad the vector */
flag_t wiznet; /* wiz stuff */
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[4];
int wimpy;
/* stats */
int perm_stat[MAX_STATS];
int mod_stat[MAX_STATS];
/* parts stuff */
flag_t form;
flag_t parts;
int size;
const char *material;
/* mobile stuff */
flag_t off_flags;
int damage[3];
int dam_type;
position_t start_pos;
position_t default_pos;
flag_t info_settings;
int mprog_delay;
int stance[MAX_STANCE];
};
/*
* Data which only PC's have.
*/
struct pc_data
{
PC_DATA *next;
PC_DATA *prev;
BUFFER *buffer;
CHAR_DATA *challenger;
CHAR_DATA *challenged;
CHAR_DATA *gladiator;
bool valid;
const char *pwd;
const char *bamfin;
const char *bamfout;
const char *title;
const char *who_descr;
const char *afk_msg;
long perm_hit;
long perm_mana;
long perm_move;
int true_sex;
int last_level;
int condition[4];
int *learned;
bool *group_known;
int points;
bool confirm_delete;
BOARD_DATA *board; /* The current board */
time_t last_note[MAX_BOARD]; /* last note for the boards */
NOTE_DATA *in_progress;
const char *alias[MAX_ALIAS];
const char *alias_sub[MAX_ALIAS];
int security; /* OLC *//* Builder security */
int colour[MAX_CUSTOM_COLOUR][CT_MAX];
long gamestat[MAX_GAMESTAT];
int nextquest;
int countdown;
vnum_t questobj;
vnum_t questmob;
vnum_t questgiver;
vnum_t questloc;
int questpoints;
int trivia;
bool confirm_remort;
bool stay_race;
char explored[MAX_EXPLORE_HASH];
long home_invite;
vnum_t home[MAX_HOUSE_ROOMS];
vnum_t home_key;
int awins;
int alosses;
int plr_wager;
long gold_bank;
long silver_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];
};
/* Data for generating characters -- only used during generation */
struct gen_data
{
GEN_DATA *next;
GEN_DATA *prev;
bool valid;
bool *skill_chosen;
bool *group_chosen;
int points_chosen;
};
struct liq_type
{
const char *liq_name;
const char *liq_color;
int liq_affect[5];
};
/*
* Extra description data for a room or object.
*/
struct extra_descr_data
{
EXTRA_DESCR_DATA *next;
EXTRA_DESCR_DATA *prev; /* Next in list */
bool valid;
const char *keyword; /* Keyword in look/examine */
const char *description; /* What to see */
};
/*
* Prototype for an object.
*/
struct obj_index_data
{
OBJ_INDEX_DATA *next;
EXTRA_DESCR_DATA *first_extra_descr;
EXTRA_DESCR_DATA *last_extra_descr;
AFFECT_DATA *first_affect;
AFFECT_DATA *last_affect;
PROG_LIST *first_oprog;
PROG_LIST *last_oprog;
AREA_DATA *area; /* OLC */
bool new_format;
const char *name;
const char *short_descr;
const char *description;
vnum_t vnum;
int reset_num;
const char *material;
int item_type;
flag_t extra_flags;
flag_t wear_flags;
int level;
int condition;
int count;
int weight;
int cost;
long value[5];
flag_t oprog_flags;
};
/*
* One object.
*/
struct obj_data
{
OBJ_DATA *next;
OBJ_DATA *prev;
OBJ_DATA *next_content;
OBJ_DATA *prev_content;
OBJ_DATA *first_content;
OBJ_DATA *last_content;
OBJ_DATA *in_obj;
OBJ_DATA *on;
CHAR_DATA *carried_by;
EXTRA_DESCR_DATA *first_extra_descr;
EXTRA_DESCR_DATA *last_extra_descr;
AFFECT_DATA *first_affect;
AFFECT_DATA *last_affect;
OBJ_INDEX_DATA *pIndexData;
ROOM_INDEX_DATA *in_room;
CHAR_DATA *oprog_target;
int oprog_delay;
bool valid;
bool enchanted;
const char *owner;
const char *name;
const char *short_descr;
const char *description;
int item_type;
flag_t extra_flags;
flag_t wear_flags;
wloc_t wear_loc;
int weight;
int cost;
int level;
int condition;
const char *material;
int timer;
long value[5];
};
/*
* Exit data.
*/
struct exit_data
{
union
{
ROOM_INDEX_DATA *to_room;
vnum_t vnum;
}
u1;
flag_t exit_info;
vnum_t key;
const char *keyword;
const char *description;
EXIT_DATA *next;
EXIT_DATA *prev; /* OLC */
flag_t rs_flags; /* OLC */
int orig_door; /* OLC */
};
/*
* 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.
*/
struct reset_data
{
RESET_DATA *next;
RESET_DATA *prev;
char command;
vnum_t arg1;
int arg2;
vnum_t arg3;
int arg4;
};
/*
* Area definition.
*/
struct area_data
{
AREA_DATA *next;
AREA_DATA *prev;
AREA_DATA *next_sort;
const char *file_name;
const char *name;
const char *credits;
const char *lvl_comment;
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; /* OLC *//* Listing of */
int vnum; /* OLC *//* Area vnum */
flag_t area_flags; /* OLC */
int security; /* OLC *//* Value 1-9 */
WEATHER_DATA weather;
};
/*
* Room type.
*/
struct room_index_data
{
ROOM_INDEX_DATA *next;
CHAR_DATA *first_person;
CHAR_DATA *last_person;
OBJ_DATA *first_content;
OBJ_DATA *last_content;
EXTRA_DESCR_DATA *first_extra_descr;
EXTRA_DESCR_DATA *last_extra_descr;
AREA_DATA *area;
EXIT_DATA *exit[6];
RESET_DATA *reset_first; /* OLC */
RESET_DATA *reset_last; /* OLC */
PROG_LIST *first_rprog;
PROG_LIST *last_rprog;
CHAR_DATA *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;
CLAN_DATA *clan;
};
/* one disabled command */
struct disabled_data
{
DISABLED_DATA *next;
DISABLED_DATA *prev; /* pointer to next node */
CMD_DATA *command; /* pointer to the command struct */
const char *disabled_by; /* name of disabler */
const char *disabled_for; /* name of person who can't use it */
int level; /* level of disabler */
};
/*
* Skills include spells as a particular case.
*/
struct skill_type
{
const char *name; /* Name of skill */
int *skill_level; /* Level needed by class */
int *rating; /* How hard it is to learn */
SPELL_FUN *spell_fun; /* Spell pointer (for spells) */
tar_t target; /* Legal targets */
position_t minimum_position; /* Position for caster / user */
int *pgsn; /* Pointer to associated gsn */
int min_mana; /* Minimum mana used */
int beats; /* Waiting time after use */
const char *noun_damage; /* Damage message */
const char *msg_off; /* Wear off message */
const char *msg_obj; /* Wear off message for obects */
};
struct group_type
{
const char *name;
int *rating;
const char *spells[MAX_IN_GROUP];
};
struct write_data
{
FILE *stream;
const char *temp;
const char *file;
};
struct read_data
{
char *str;
size_t pos, size;
const char *file;
};
struct prog_list
{
flag_t trig_type;
const char *trig_phrase;
vnum_t vnum;
const char *code;
PROG_LIST *next;
PROG_LIST *prev;
bool valid;
};
struct prog_code
{
AREA_DATA *area;
vnum_t vnum;
const char *code;
PROG_CODE *next;
PROG_CODE *prev;
};
/*
* Structure for a social in the socials table.
*/
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;
SOCIAL_DATA *next, *prev, *next_hash;
bool valid;
};
#endif