/*************************************************************************** * 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. * ***************************************************************************/ #define DEC_ACK_H 1 #ifndef DEC_TYPEDEFS_H #include "typedefs.h" #endif #ifndef DEC_CONFIG_H #include "config.h" #endif #ifndef DEC_UTILS_H #include "utils.h" #endif #ifndef DEC_GLOBALS_H #include "globals.h" #endif /* Various linked lists head/tail pointer declarations. -- Altrag */ #ifndef DEC_LISTS_H #include "lists.h" #endif #ifndef DEC_STRFUNS_H #include "strfuns.h" #endif #ifndef DEC_ACT_MOB_H #include "act_mob.h" #endif struct str_array { char *this_string; }; struct sysdata_type { bool w_lock; bool test_open; char *playtesters; STR_ARRAY imms[MAX_NUM_IMMS]; bool shownumbers; }; struct board_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ BOARD_DATA * next; BOARD_DATA * prev; int vnum; MESSAGE_DATA * first_message; MESSAGE_DATA * last_message; int min_read_lev; int min_write_lev; int expiry_time; int clan; }; struct message_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ 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" /* Structure for material/strengths */ struct material_type { char * name; /* Name of the material */ char * descrip; /* Descr. of how strong it is */ int quality; /* 0 = crap, 100 = non-breakable */ }; #define NO_MATERIAL 10 /* Number of materials */ struct dl_list { bool is_free; DL_LIST * next; DL_LIST * prev; void * this_one; }; /* * Site ban structure. */ struct ban_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ BAN_DATA * next; BAN_DATA * prev; char * name; char * banned_by; bool newbie; }; struct brand_data { bool is_free; BRAND_DATA * next; BRAND_DATA * prev; char * branded; char * branded_by; char * dt_stamp; char * message; char * priority; }; 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 corpse_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ CORPSE_DATA * next; CORPSE_DATA * prev; OBJ_DATA * this_corpse; }; struct member_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ CHAR_DATA * this_member; MEMBER_DATA * next; MEMBER_DATA * prev; }; struct mark_data { bool is_free; int room_vnum; char *message; char *author; sh_int duration; sh_int type; /* VAMP, WOLF */ MARK_DATA * next; MARK_DATA * prev; /* for freelist only */ }; struct mark_list_member { bool is_free; MARK_LIST_MEMBER * next; MARK_LIST_MEMBER * prev; MARK_DATA * mark; }; struct council_data { char * council_name; MEMBER_DATA * first_member; MEMBER_DATA * last_member; bool quorum; sh_int council_time; }; /* * Descriptor (channel) structure. */ struct 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; 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; 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; sh_int clan_enemy; }; struct politics_data_type { sh_int 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; sh_int ac_mod; sh_int dr_mod; sh_int hr_mod; sh_int speed_mod; }; /* * Attribute bonus structures. */ struct str_app_type { sh_int tohit; sh_int todam; sh_int carry; sh_int wield; }; struct int_app_type { sh_int learn; sh_int spell_mod; sh_int mana_regen; }; struct wis_app_type { sh_int practice; sh_int spell_save; }; struct dex_app_type { sh_int defensive; }; struct con_app_type { sh_int hitp; sh_int shock; }; /* * Help table types. */ struct help_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ HELP_DATA * next; HELP_DATA * prev; sh_int level; char * keyword; char * text; }; /* * Shop types. */ struct shop_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ SHOP_DATA * next; /* Next shop in list */ SHOP_DATA * prev; /* Prev shop in list */ sh_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 */ }; /* * Per-class stuff. */ struct class_type { char who_name [4]; /* Three-letter name for 'who' */ char * class_name; /* Full name */ sh_int attr_prime; /* Prime attribute */ char * attr; /* Prime */ sh_int weapon; /* First weapon */ sh_int guild; /* Vnum of guild room */ 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 */ 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 */ sh_int recall; /* Race's recall location */ sh_int race_room; /* vnum of race-only room */ sh_int race_str; /* max_str to use for race */ sh_int race_int; sh_int race_wis; sh_int race_dex; sh_int 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 */ sh_int 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; }; struct clan_type { char * clan_name; /* The name of the Clan */ char * clan_abbr; /* Abbrev. name - FIVE CHARS */ sh_int donat_room; /* clan donation */ sh_int clan_room; /* Clan-only room */ char * leader; /* Clan leader */ char * enemies; /* Enemies (if any) */ int eq[MAX_CLAN_EQ]; /* vnums of objects to load */ }; struct exp_type { long_int mob_base; /* Base exp for mob of level x */ long_int exp_base[MAX_CLASS]; /* Cost for each class of level */ }; /* * Data structure for notes. */ struct note_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ NOTE_DATA * next; NOTE_DATA * prev; char * sender; char * date; char * to_list; char * subject; char * text; time_t date_stamp; }; /* * An affect. */ struct affect_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ AFFECT_DATA * next; AFFECT_DATA * prev; sh_int type; sh_int duration; sh_int location; sh_int modifier; int bitvector; CHAR_DATA * caster; int level; }; struct room_affect_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ ROOM_AFFECT_DATA * next; ROOM_AFFECT_DATA * prev; sh_int duration; sh_int level; int type; int bitvector; int applies_spell; /* what spell is cast on a ch by the room..a sn */ sh_int modifier; sh_int location; CHAR_DATA * caster; }; /* * A kill structure (indexed by level). */ struct kill_data { sh_int number; sh_int killed; }; struct magic_shield { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ MAGIC_SHIELD *next; MAGIC_SHIELD *prev; sh_int type; /* what kind is it? Electric, Fire, etc... */ bool harmfull; /* does the shield damage the attacker? */ sh_int attack_dam; /* then hurt the attacker ;) */ sh_int percent; /* percent of damage it absorbs per attack */ sh_int 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. */ struct mob_index_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ MOB_INDEX_DATA * next; SPEC_FUN * spec_fun; SHOP_DATA * pShop; AREA_DATA * area; /* MAG Mod */ char * player_name; char * short_descr; char * long_descr; char * description; sh_int vnum; sh_int count; sh_int killed; sh_int sex; sh_int level; int act; int affected_by; int aggro_list; sh_int alignment; sh_int ac_mod; /* ac modifier */ sh_int hr_mod; /* hitroll modifier */ sh_int dr_mod; /* damroll modifier */ char * target; /* last ch to attack */ sh_int hitroll; /* Unused */ sh_int ac; /* Unused */ sh_int hitnodice; /* Unused */ sh_int hitsizedice; /* Unused */ sh_int hitplus; /* Unused */ sh_int damnodice; /* Unused */ sh_int damsizedice; /* Unused */ sh_int damplus; /* Unused */ int gold; /* Unused */ MPROG_DATA * first_mprog; /* Used by MOBprogram */ MPROG_DATA * last_mprog; int progtypes; /* Used by MOBprogram */ int skills; /* skill flags */ int power_skills; int cast; /* casting flags */ int power_cast; int def; /* casting flags */ int strong_magic; int weak_magic; int resist; int suscept; int race_mods; sh_int class; sh_int clan; sh_int race; sh_int position; int hunt_flags; }; /* * One character (PC or NPC). */ struct char_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ bool is_quitting; CHAR_DATA * next; CHAR_DATA * prev; CHAR_DATA * next_in_room; CHAR_DATA * prev_in_room; CHAR_DATA * master; CHAR_DATA * leader; CHAR_DATA * fighting; CHAR_DATA * reply; /* CHAR_DATA * hunting; char * huntdirs; int huntdirno; int huntlastvnum; char * huntname; int act_hunt; OBJ_DATA * hunt_obj; int move_to; char * movename;*/ CHAR_DATA * hunting; /* For hunting PC's/mobs */ OBJ_DATA * hunt_obj; /* Looking for objects */ CHAR_DATA * hunt_for; /* Employer (crs, mercs) */ ROOM_INDEX_DATA * hunt_home; /* Return to after hunting */ char * searching; /* For PC's that quit */ int hunt_flags; /* Action flags */ bool switched; /* = not isnull(descriptor->original) */ CHAR_DATA * old_body; /* = descriptor->original */ int poly_level; SPEC_FUN * spec_fun; MOB_INDEX_DATA * pIndexData; DESCRIPTOR_DATA * desc; AFFECT_DATA * first_affect; AFFECT_DATA * last_affect; AFFECT_DATA * first_saved_aff; AFFECT_DATA * last_saved_aff; NOTE_DATA * pnote; OBJ_DATA * first_carry; OBJ_DATA * last_carry; ROOM_INDEX_DATA * in_room; ROOM_INDEX_DATA * was_in_room; PC_DATA * pcdata; char * name; OBJ_DATA * sitting; /* What they're resting or sleeping on */ char * short_descr; char * long_descr; char * long_descr_orig; char * description; char * prompt; char * old_prompt; /* used to hold prompt when writing */ sh_int sex; sh_int login_sex; sh_int class; sh_int clan; /* need to convert from pcdata to this */ sh_int race; sh_int level; /* For m/c this = max of levels */ int lvl[MAX_CLASS]; /* Holds details for m/c levels */ int lvl2[MAX_CLASS]; /* for remort (if any) */ int adept_level; int sentence; /* For new legal system */ sh_int invis; /* For wizinvis imms - lvl invis to */ sh_int incog; /* Same as above except for incognito --Flar */ sh_int trust; bool wizbit; int played; time_t logon; time_t save_time; time_t last_note; 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; int gold; int balance; /* Amount of gold (if any) in bank */ int exp; int intell_exp; int act; int config; int act_build; /* for setting what ya editing */ int build_vnum; /* the current vnum for w-y-e */ int affected_by; sh_int position; sh_int practice; float carry_weight; sh_int carry_number; sh_int saving_throw; sh_int alignment; sh_int hitroll; sh_int damroll; sh_int armor; sh_int ac_mod; /* ac modifier */ sh_int stance_ac_mod; sh_int hr_mod; /* hitroll modifier */ sh_int stance_hr_mod; sh_int dr_mod; /* damroll modifier */ sh_int stance_dr_mod; char * target; /* last ch to attack */ sh_int wimpy; int deaf; MPROG_ACT_LIST * first_mpact; /* Used by MOBprogram */ MPROG_ACT_LIST * last_mpact; int mpactnum; /* Used by MOBprogram */ int skills; /* Used for MOBs */ int cast; int def; int strong_magic; int weak_magic; int resist; int suscept; int race_mods; int power_skills; int power_cast; CHAR_DATA * riding; CHAR_DATA * rider; /* Stuff to handle automatic quests for players */ int quest_points; /* The reason to quest! */ MAGIC_SHIELD * first_shield; MAGIC_SHIELD * last_shield; int stunTimer; sh_int num_followers; sh_int extract_timer; /* same as object timer, only use for charmies */ BRAND_DATA * current_brand; int stance; bool using_named_door; MONEY_TYPE * money; MONEY_TYPE * bank_money; NPC_GROUP_DATA * ngroup; }; /* * Data which only PC's have. */ struct pc_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ PC_DATA * next; PC_DATA * prev; int color[MAX_color]; char * pwd; char * bamfin; char * room_enter; char * room_exit; char * bamfout; char * title; char * immskll; char * host; /* Used to tell PC last login site */ sh_int failures; /* Failed logins */ sh_int clan; /* will be used to denote clan membership */ int generation; /* Used for vamps */ /* were_age for wolves */ sh_int perm_str; sh_int perm_int; sh_int perm_wis; sh_int perm_dex; sh_int perm_con; sh_int max_str; sh_int max_int; sh_int max_wis; sh_int max_dex; sh_int max_con; sh_int mod_str; sh_int mod_int; sh_int mod_wis; sh_int mod_dex; sh_int mod_con; sh_int condition [3]; int bloodlust; /* rage points for wolves */ int bloodlust_max; sh_int pagelen; sh_int learned [MAX_SKILL]; char * header; /* header used for message */ char * message; /* message for board in progress */ char * alias_name[MAX_ALIASES]; char * alias[MAX_ALIASES]; char * who_name; /* To show on who name */ int pkills; int pkilled; int mkills; int mkilled; int pflags; char * lastlogin; sh_int order[MAX_CLASS]; /* Class Order */ sh_int index[MAX_CLASS]; /* the order of each class! */ int monitor; /* monitor channel for imms */ int vamp_level; /* were level */ int vamp_bloodlust_max; int vamp_skill_num; int vamp_skill_max; int vamp_bloodline; int vamp_exp; int vamp_pracs; sh_int has_exp_fix; sh_int quest_points; char * ignore_list[MAX_IGNORES]; /* Ignore this person */ sh_int recall_vnum; int mana_from_gain; /* saves non-item oriented mana total */ int hp_from_gain; /* same for hitpoints */ int move_from_gain; long imc_deaf; /* IMC channel flags */ long imc_allow; long imc_deny; char * rreply; /* IMC reply-to */ char * rreply_name; /* IMC reply-to shown to char */ char * ice_listen; char * load_msg; char hicol; char dimcol; sh_int ruler_rank; char * pedit_state; char * pedit_string[5]; sh_int term_rows; sh_int term_columns; char * email_address; bool valid_email; char * assist_msg; }; /* * MOBprogram block */ struct mob_prog_act_list { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ MPROG_ACT_LIST * next; MPROG_ACT_LIST * prev; char * buf; CHAR_DATA * ch; OBJ_DATA * obj; void * vo; }; struct mob_prog_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ MPROG_DATA *next; MPROG_DATA *prev; int type; char * arglist; char * comlist; char * filename; }; extern bool MOBtrigger; struct liq_type { char * liq_name; char * liq_color; sh_int liq_affect[3]; }; /* * Extra description data for a room or object. */ struct extra_descr_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ EXTRA_DESCR_DATA * next; /* Next in list */ EXTRA_DESCR_DATA * prev; /* Prev in list */ char * keyword; /* Keyword in look/examine */ char * description; /* What to see */ }; 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; }; struct obj_index_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ OBJ_INDEX_DATA * next; EXTRA_DESCR_DATA * first_exdesc; EXTRA_DESCR_DATA * last_exdesc; OBJ_FUN * obj_fun; AFFECT_DATA * first_apply; AFFECT_DATA * last_apply; /* MAG Mod */ AREA_DATA * area; char * owner; char * name; sh_int level; char * short_descr; char * description; sh_int vnum; int item_type; int extra_flags; int wear_flags; /* class_flags changed to item_apply for magic apply, etc */ int item_apply; sh_int count; sh_int weight; int cost; /* Unused */ int value [10]; TRIGGER_DATA * first_trigger; TRIGGER_DATA * last_trigger; }; /* * One object. */ struct obj_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ OBJ_DATA * next; OBJ_DATA * prev; 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 * description; int item_type; int extra_flags; int wear_flags; int item_apply; int wear_loc; sh_int weight; int cost; sh_int level; sh_int timer; int value [10]; sh_int condition; /* % value for condition */ MONEY_TYPE * money; }; /* * Exit data. */ struct exit_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ EXIT_DATA * next; ROOM_INDEX_DATA * to_room; sh_int vnum; sh_int exit_info; sh_int key; char * keyword; char * description; }; /* * 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 { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ RESET_DATA * next; RESET_DATA * prev; char command; sh_int ifflag; sh_int arg1; sh_int arg2; sh_int arg3; char * notes; char * auto_message; /* Ugly - wasteful of space. */ }; /* * 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; sh_int ruler_rank; char * affiliation_name; sh_int affiliation_index; char * keywords; sh_int flags; CONTROL_LIST * first_control; CONTROL_LIST * last_control; }; struct area_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ AREA_DATA * next; AREA_DATA * prev; RESET_DATA * first_reset; RESET_DATA * last_reset; char * name; sh_int age; sh_int nplayer; /* Saving to envy mod, to renumber vnums! */ int offset; /* MAG mod */ int modified; int min_vnum; int max_vnum; int area_num; char * owner; char * can_read; char * can_write; int gold; char * filename; int flags; int aggro_list; BUILD_DATA_LIST * first_area_room; BUILD_DATA_LIST * last_area_room; BUILD_DATA_LIST * first_area_help_text; BUILD_DATA_LIST * last_area_help_text; BUILD_DATA_LIST * first_area_object; BUILD_DATA_LIST * last_area_object; BUILD_DATA_LIST * first_area_mobile; BUILD_DATA_LIST * last_area_mobile; BUILD_DATA_LIST * first_area_mobprog; BUILD_DATA_LIST * last_area_mobprog; BUILD_DATA_LIST * first_area_shop; BUILD_DATA_LIST * last_area_shop; BUILD_DATA_LIST * first_area_specfunc; BUILD_DATA_LIST * last_area_specfunc; BUILD_DATA_LIST * first_area_objfunc; BUILD_DATA_LIST * last_area_objfunc; /* BUILD_DATA_LIST * spec_funs; in mob index data. */ /* BUILD_DATA_LIST * area_shops; in mob index data. */ /* BUILD_DATA_LIST * resets; already there! */ CONTROL_DATA * control; char * keyword; sh_int min_level; sh_int max_level; char * level_label; sh_int reset_rate; char * reset_msg; }; /* * Room type. */ struct room_index_data { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ ROOM_INDEX_DATA * next; CHAR_DATA * first_person; CHAR_DATA * last_person; OBJ_DATA * first_content; OBJ_DATA * last_content; EXTRA_DESCR_DATA * first_exdesc; EXTRA_DESCR_DATA * last_exdesc; AREA_DATA * area; EXIT_DATA * exit [6]; char * name; char * description; char * auto_message; /* If != NULL, send_to_room each tick */ sh_int block_timer; sh_int vnum; int room_flags; sh_int light; sh_int sector_type; BUILD_DATA_LIST * first_room_reset; BUILD_DATA_LIST * last_room_reset; /* -S- mod... don't save this with OLC :P */ ROOM_AFFECT_DATA * first_room_affect; ROOM_AFFECT_DATA * last_room_affect; int affected_by; MARK_LIST_MEMBER *first_mark_list; MARK_LIST_MEMBER *last_mark_list; MONEY_TYPE * treasure; }; /* Big MAG mod */ /* Area building stuff */ struct build_data_list /* Used for storing area file data. */ { bool is_free; /* Ramias:for run-time checks of LINK/UNLINK */ BUILD_DATA_LIST * next; BUILD_DATA_LIST * prev; void * data; }; struct mobprog_item /* For re-creating #MOBPROGS section */ { MOB_INDEX_DATA * mob; char * filename; }; struct lookup_type { char * text; unsigned long int value; int cost; /* if == NO_USE, only creators can set. */ }; /* * Skills include spells as a particular case. */ struct skill_type { sh_int flag1; /* mort or remort? */ sh_int flag2; /* normal and/or vamp? */ char * name; /* Name of skill */ sh_int skill_level[MAX_CLASS]; /* Level needed by class */ SPELL_FUN * spell_fun; /* Spell pointer (for spells) */ 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 * 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; sh_int position; sh_int level; sh_int log; sh_int type; /*added by Aeria for do_commands*/ sh_int show; /*added by Aeria for do_commands*/ }; /* * 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; }; /* * 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 OF OBJ_FUN /* act_comm.c */ bool is_note_to args( ( CHAR_DATA *ch, NOTE_DATA *pnote ) ); void add_follower args( ( CHAR_DATA *ch, CHAR_DATA *master ) ); void stop_follower args( ( CHAR_DATA *ch ) ); void die_follower args( ( CHAR_DATA *ch ) ); bool is_same_group args( ( CHAR_DATA *ach, CHAR_DATA *bch ) ); bool is_group_leader args( ( CHAR_DATA *ch ) ); char * slur_text args( ( char *argument ) ); void send_to_room args( ( char *message, ROOM_INDEX_DATA *room ) ); void list_who_to_output args( ( void ) ); /* act_info.c */ void set_title args( ( CHAR_DATA *ch, char *title ) ); char * color_string args( ( CHAR_DATA *CH, char *argument ) ); char * get_family_name args( ( CHAR_DATA *ch ) ); char * get_tribe_name args( ( CHAR_DATA *ch ) ); /* act_mob.c */ void int_combat_handler args( ( CHAR_DATA *ch, CHAR_DATA *victim ) ); void int_handler args( ( CHAR_DATA *ch ) ); /* act_move.c */ void move_char args( ( CHAR_DATA *ch, int door ) ); /* act_obj.c */ void get_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *container ) ); bool can_wear_at(CHAR_DATA * ch, OBJ_DATA * obj, int location); /* act_wiz.c */ ROOM_INDEX_DATA * find_location args( ( CHAR_DATA *ch, char *arg ) ); /* board.c */ BOARD_DATA * load_board(OBJ_INDEX_DATA * pObj); void do_show_contents args( ( CHAR_DATA *ch, OBJ_DATA * obj ) ); void do_show_message args( ( CHAR_DATA *ch, int mess_num, OBJ_DATA * obj ) ); void do_edit_message args( ( CHAR_DATA *ch, int mess_num, OBJ_DATA * obj ) ); void do_add_to_message args( ( CHAR_DATA *ch, char *argument ) ); void do_start_a_message args( ( CHAR_DATA *ch, char *argument ) ); void save_message_data args( ( void ) ); void load_messages args( ( void ) ); /* comm.c */ void close_socket args( ( DESCRIPTOR_DATA *dclose ) ); void show_menu_to args( ( DESCRIPTOR_DATA *d ) ); /* Main */ void show_amenu_to args( ( DESCRIPTOR_DATA *d ) ); /* Attributes */ void show_rmenu_to args( ( DESCRIPTOR_DATA *d ) ); /* Race */ void show_smenu_to args( ( DESCRIPTOR_DATA *d ) ); /* Sex */ void show_cmenu_to args( ( DESCRIPTOR_DATA *d ) ); /* Class */ void write_to_buffer args( ( DESCRIPTOR_DATA *d, const char *txt, int length ) ); void send_to_char args( ( const char *txt, CHAR_DATA *ch ) ); void show_string args( ( DESCRIPTOR_DATA *d, char *input ) ); void act args( ( const char *format, CHAR_DATA *ch, const void *arg1, const void *arg2, int type ) ); void hang args( ( const char *str ) ); /* db.c */ void perm_update args( ( void ) ); void boot_db args( ( bool fCopyOver ) ); void area_update args( ( void ) ); void message_update args( ( void ) ); CD * create_mobile args( ( MOB_INDEX_DATA *pMobIndex ) ); OD * create_object args( ( OBJ_INDEX_DATA *pObjIndex, int level ) ); void clear_char args( ( CHAR_DATA *ch ) ); void free_char args( ( CHAR_DATA *ch ) ); char * get_extra_descr args( ( const char *name, EXTRA_DESCR_DATA *ed ) ); MID * get_mob_index args( ( int vnum ) ); OID * get_obj_index args( ( int vnum ) ); RID * get_room_index args( ( int vnum ) ); char fread_letter args( ( FILE *fp ) ); int fread_number args( ( FILE *fp ) ); char * fread_string args( ( FILE *fp ) ); void fread_to_eol args( ( FILE *fp ) ); char * fsave_to_eol args( ( FILE *fp ) ); char * fread_word args( ( FILE *fp ) ); /* void * alloc_mem args( ( int sMem ) ); void check_freed args( ( unsigned int first, unsigned int last) ); void check_free_mem args( ( void ) ); void * alloc_perm args( ( int sMem ) ); void free_mem args( ( void *pMem, int sMem ) );*/ /* spec: renamed getmem -> _getmem, nuked unused alloc_perm */ /* void * alloc_perm args( ( int sMem ) ); */ void * _getmem args( ( int size, const char *caller, int log ) ); void dispose args( ( void *mem, int size ) ); char * str_dup args( ( const char *str ) ); void free_string args( ( char *pstr ) ); int number_fuzzy args( ( int number ) ); int number_range args( ( int from, int to ) ); int number_percent args( ( void ) ); int number_door args( ( void ) ); int number_bits args( ( int width ) ); int number_mm args( ( void ) ); int dice args( ( int number, int size ) ); int interpolate args( ( int level, int value_00, int value_32 ) ); void append_file args( ( CHAR_DATA *ch, char *file, char *str ) ); void bug args( ( const char *str, int param ) ); void log_string args( ( const char *str ) ); void tail_chain args( ( void ) ); void safe_strcat args( ( int max_len, char * dest,char * source ) ); void send_to_descrips args( ( const char *message ) ); void bug_string args( ( const char *str, const char *str2) ); /* Added stuff -Flar */ void bugf (char * fmt, ...) __attribute__ ((format(printf,1,2))); void log_f (char * fmt, ...) __attribute__ ((format(printf,1,2))); /* fight.c */ void violence_update args( ( void ) ); void multi_hit args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dt ) ); void damage args( ( CHAR_DATA *ch, CHAR_DATA *victim, int dam, int dt ) ); void update_pos args( ( CHAR_DATA *victim ) ); void stop_fighting args( ( CHAR_DATA *ch, bool fBoth ) ); void death_cry args( ( CHAR_DATA *ch ) ); void raw_kill args( ( CHAR_DATA *victim, char *argument ) ); void check_killer args( ( CHAR_DATA *ch, CHAR_DATA *victim ) ); /* handler.c */ bool remove_obj args( ( CHAR_DATA *ch, int iWear, bool fReplace ) ); int get_trust args( ( CHAR_DATA *ch ) ); void my_get_age args( ( CHAR_DATA *ch, char * buf ) ); int my_get_hours args( ( CHAR_DATA *ch ) ); int get_age args( ( CHAR_DATA *ch ) ); int get_curr_str args( ( CHAR_DATA *ch ) ); int get_curr_int args( ( CHAR_DATA *ch ) ); int get_curr_wis args( ( CHAR_DATA *ch ) ); int get_curr_dex args( ( CHAR_DATA *ch ) ); int get_curr_con args( ( CHAR_DATA *ch ) ); int can_carry_n args( ( CHAR_DATA *ch ) ); int can_carry_w args( ( CHAR_DATA *ch ) ); void affect_to_room args( ( ROOM_INDEX_DATA *room, ROOM_AFFECT_DATA *raf ) ); void r_affect_remove args( ( ROOM_INDEX_DATA *room, ROOM_AFFECT_DATA *raf ) ); void affect_to_char args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) ); void affect_remove args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) ); void affect_strip args( ( CHAR_DATA *ch, int sn ) ); bool is_affected args( ( CHAR_DATA *ch, int sn ) ); void affect_join args( ( CHAR_DATA *ch, AFFECT_DATA *paf ) ); void char_from_room args( ( CHAR_DATA *ch ) ); void char_to_room args( ( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex ) ); void obj_to_char args( ( OBJ_DATA *obj, CHAR_DATA *ch ) ); void obj_from_char args( ( OBJ_DATA *obj ) ); int apply_ac args( ( OBJ_DATA *obj, int iWear ) ); OD * get_eq_char args( ( CHAR_DATA *ch, int iWear ) ); void equip_char args( ( CHAR_DATA *ch, OBJ_DATA *obj, int iWear ) ); void unequip_char args( ( CHAR_DATA *ch, OBJ_DATA *obj ) ); int count_obj_list args( ( OBJ_INDEX_DATA *obj, OBJ_DATA *list ) ); int count_obj_room args( ( OBJ_INDEX_DATA *obj, OBJ_DATA *list ) ); void obj_from_room args( ( OBJ_DATA *obj ) ); void obj_to_room args( ( OBJ_DATA *obj, ROOM_INDEX_DATA *pRoomIndex ) ); void obj_to_obj args( ( OBJ_DATA *obj, OBJ_DATA *obj_to ) ); void obj_from_obj args( ( OBJ_DATA *obj ) ); void extract_obj args( ( OBJ_DATA *obj ) ); void extract_char args( ( CHAR_DATA *ch, bool fPull ) ); CD * get_char_room args( ( CHAR_DATA *ch, char *argument ) ); CD * get_char_world args( ( CHAR_DATA *ch, char *argument ) ); CD * get_char_area args( ( CHAR_DATA *ch, char *argument ) ); OD * get_obj_type args( ( OBJ_INDEX_DATA *pObjIndexData ) ); OD * get_obj_list args( ( CHAR_DATA *ch, char *argument, OBJ_DATA *list ) ); OD * get_obj_room args( ( CHAR_DATA *ch, char *argument, OBJ_DATA *list ) ); OD * get_obj_carry args( ( CHAR_DATA *ch, char *argument ) ); OD * get_obj_wear args( ( CHAR_DATA *ch, char *argument ) ); OD * get_obj_here args( ( CHAR_DATA *ch, char *argument ) ); OD * get_obj_world args( ( CHAR_DATA *ch, char *argument ) ); OD * create_money args( ( int amount ) ); int get_obj_number args( ( OBJ_DATA *obj ) ); int get_obj_weight args( ( OBJ_DATA *obj ) ); bool room_is_dark args( ( ROOM_INDEX_DATA *pRoomIndex ) ); bool room_is_private args( ( ROOM_INDEX_DATA *pRoomIndex ) ); bool can_see args( ( CHAR_DATA *ch, CHAR_DATA *victim ) ); bool can_see_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj ) ); bool can_drop_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj ) ); bool can_sac_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj ) ); bool can_use args( ( CHAR_DATA *ch, OBJ_DATA *obj ) ); char * who_can_use args( ( OBJ_DATA *obj ) ); void notify args( ( char * message, int lv ) ); void info args( ( char * message, int lv ) ); void auction args( ( char * message ) ); void log_chan args( ( const char * message, int lv ) ); bool item_has_apply args( ( CHAR_DATA *ch, int bit ) ); CD * switch_char args( ( CHAR_DATA *victim, int mvnum, int poly_level ) ); CD * unswitch_char args( ( CHAR_DATA *ch ) ); int best_class args( ( CHAR_DATA *ch, int sn ) ); int best_level args( ( CHAR_DATA *ch, int sn ) ); void monitor_chan args( ( const char *message, int channel ) ); void set_stun args( ( CHAR_DATA * victim, int stunTime ) ); CD * get_char args( ( CHAR_DATA *ch ) ); void mark_from_room args( ( int this_room_vnum, MARK_DATA * mark ) ); void mark_to_room args( ( int this_room_vnum, MARK_DATA * mark ) ); void char_reference args( (struct char_ref_type *ref) ); void char_unreference args( (CHAR_DATA **var) ); void obj_reference args( (struct obj_ref_type *ref) ); void obj_unreference args( (OBJ_DATA **var) ); /* interp.c */ void interpret args( ( CHAR_DATA *ch, char *argument ) ); bool is_number args( ( char *arg ) ); bool IS_SWITCHED args( ( CHAR_DATA *ch ) ); bool is_shielded args( ( CHAR_DATA *ch, sh_int shield_type ) ); void remove_shield args( ( CHAR_DATA *ch, MAGIC_SHIELD *shield ) ); bool authorized args( ( CHAR_DATA *ch, char *skllnm ) ); bool check_social args( ( CHAR_DATA *ch, char *command, char *argument ) ); /* macros.c */ sh_int get_remort_level args ( ( CHAR_DATA *ch ) ); sh_int 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 class, int index ) ); int exp_for_mobile args( ( int level, CHAR_DATA *mob ) ); int skill_table_lookup args( ( CHAR_DATA *ch, int sn, int return_type ) ); bool is_remort 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 ) ); /* magic.c */ int mana_cost args( ( CHAR_DATA * ch, int sn ) ); int skill_lookup args( ( const char *name ) ); int slot_lookup args( ( int slot ) ); bool saves_spell args( ( int level, CHAR_DATA *victim ) ); void obj_cast_spell args( ( int sn, int level, CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *obj ) ); bool spell_identify( int sn, int level, CHAR_DATA *ch, void *vo, OBJ_DATA *obj ); /* mob_prog.c */ #ifdef DUNNO_STRSTR char * strstr args( (const char *s1, const char *s2 ) ); #endif void mprog_wordlist_check args( ( char * arg, CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, int type ) ); void mprog_percent_check args( ( CHAR_DATA *mob, CHAR_DATA* actor, OBJ_DATA* object, void* vo, int type ) ); void mprog_act_trigger args( ( char* buf, CHAR_DATA* mob, CHAR_DATA* ch, OBJ_DATA* obj, void* vo ) ); void mprog_bribe_trigger args( ( CHAR_DATA* mob, CHAR_DATA* ch, int amount ) ); void mprog_entry_trigger args( ( CHAR_DATA* mob ) ); void mprog_give_trigger args( ( CHAR_DATA* mob, CHAR_DATA* ch, OBJ_DATA* obj ) ); void mprog_greet_trigger args( ( CHAR_DATA* mob ) ); void mprog_fight_trigger args( ( CHAR_DATA* mob, CHAR_DATA* ch ) ); void mprog_hitprcnt_trigger args( ( CHAR_DATA* mob, CHAR_DATA* ch ) ); void mprog_death_trigger args( ( CHAR_DATA* mob ) ); void mprog_random_trigger args( ( CHAR_DATA* mob ) ); void mprog_speech_trigger args( ( char* txt, CHAR_DATA* mob ) ); /*-------*\ ) 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 ) ); /*------*\ ) 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( ( void * func ) ); void print_spec_lookup args( ( char * buf ) ); /* social-edit.c */ void load_social_table args( ( void ) ); /*---------*\ ) obj_fun.c ( \*---------*/ OF * obj_fun_lookup args( ( const char *name ) ); char * rev_obj_fun_lookup args( ( void *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 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 ) ); /* write.c */ void write_start args( ( char * * dest, void * retfunc, void * retparm, CHAR_DATA * ch ) ); void write_interpret args( ( CHAR_DATA * ch, char * argument ) ); /* build.c */ void build_strdup(char * * dest,char * src,bool freesrc,CHAR_DATA * ch); char * build_simpstrdup( char * buf); /* A plug in alternative to str_dup */ void build_save args( ( void ) ); extern const char * cDirs; int get_dir(char); char * show_values( const struct lookup_type * table, int value, bool fBit ); /* buildtab.c */ /* int table_lookup args( (const struct lookup_type * table,char * name) ); char * rev_table_lookup args( (const struct lookup_type * table,int number) ); char * bit_table_lookup args( (const struct lookup_type * table,int number) ); */ /* buildare.c */ /* Area manipulation funcs in buildare.c */ int build_canread(AREA_DATA * Area,CHAR_DATA * ch,int showerror); int build_canwrite(AREA_DATA * Area,CHAR_DATA * ch,int showerror); #define AREA_NOERROR 0 #define AREA_SHOWERROR 1 /* areasave.c */ void area_modified(AREA_DATA *); void build_save_flush(void); /* 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_move args( ( CHAR_DATA *ch ) ); */ 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 ) ); sh_int h_find_dir args( ( ROOM_INDEX_DATA *room, ROOM_INDEX_DATA *target, int h_flags ) ); /* update.c */ void init_alarm_handler args( ( void ) ); void alarm_update args( ( void ) ); /* SSM */ void temp_fread_string args( (FILE * fp, char *buf) ); /* * Rulers * */ void save_rulers args( ( void ) ); void load_rulers args( ( void ) ); char *get_ruler_title args( ( int ruler_rank, int sex ) ); /* * spendqp */ void save_brands args( ( void ) ); /* * 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 OF