/***************************************************************************** * DikuMUD (C) 1990, 1991 by: * * Sebastian Hammer, Michael Seifert, Hans Henrik Staefeldt, Tom Madsen, * * and Katja Nyboe. * *---------------------------------------------------------------------------* * MERC 2.1 (C) 1992, 1993 by: * * Michael Chastain, Michael Quan, and Mitchell Tse. * *---------------------------------------------------------------------------* * SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by: Derek Snider. * * Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, Swordbearer, * * gorog, Grishnakh, Nivek, Tricops, and Fireblade. * *---------------------------------------------------------------------------* * SMAUG 1.7 FUSS by: Samson and others of the SMAUG community. * * Their contributions are greatly appreciated. * *---------------------------------------------------------------------------* * LoP (C) 2006, 2007, 2008 by: the LoP team. * *---------------------------------------------------------------------------* * Win32 port by Nick Gammon * *---------------------------------------------------------------------------* * Main mud header file * *****************************************************************************/ #include <stdlib.h> #include <limits.h> #if defined(__CYGWIN__) || defined(__FreeBSD__) #include <sys/time.h> #endif #include <typeinfo> #ifdef WIN32 #include <winsock.h> #include <sys/types.h> #pragma warning( disable: 4018 4244 4550 4761 ) #define index strchr #define rindex strrchr #define vsnprintf _vsnprintf /* NJG */ #define snprintf _snprintf /* NJG */ #define lstat stat /* NJG */ #pragma comment( lib, "ws2_32.lib" ) /* NJG */ #pragma comment( lib, "winmm.lib" ) /* NJG */ #endif typedef int ch_ret; typedef int obj_ret; #define NM extern "C" #define DECLARE_DO_FUN( fun ) NM DO_FUN fun #define DECLARE_SPEC_FUN( fun ) NM SPEC_FUN fun #define DECLARE_SPELL_FUN( fun ) NM SPELL_FUN fun /* * Short scalar types. * Diavolo reports AIX compiler has bugs with short types. */ #if !defined(BERR) #define BERR 255 #endif #include "const.h" /* Structure types. */ typedef struct affect_data AFFECT_DATA; typedef struct area_data AREA_DATA; typedef struct ban_data BAN_DATA; typedef struct char_data CHAR_DATA; typedef struct hunt_hate_fear HHF_DATA; typedef struct fighting_data FIGHT_DATA; typedef struct descriptor_data DESCRIPTOR_DATA; typedef struct exit_data EXIT_DATA; typedef struct extra_descr_data EXTRA_DESCR_DATA; typedef struct mob_index_data MOB_INDEX_DATA; typedef struct char_morph CHAR_MORPH; typedef struct morph_data MORPH_DATA; typedef struct note_data NOTE_DATA; typedef struct obj_data OBJ_DATA; typedef struct obj_index_data OBJ_INDEX_DATA; typedef struct pc_data PC_DATA; typedef struct reset_data RESET_DATA; typedef struct room_index_data ROOM_INDEX_DATA; typedef struct shop_data SHOP_DATA; typedef struct race_type RACE_TYPE; typedef struct class_type CLASS_TYPE; typedef struct repairshop_data REPAIR_DATA; typedef struct weather_data WEATHER_DATA; typedef struct neighbor_data NEIGHBOR_DATA; /* FB */ typedef struct council_data COUNCIL_DATA; typedef struct mob_prog_data MPROG_DATA; typedef struct mob_prog_act_list MPROG_ACT_LIST; typedef struct editor_data EDITOR_DATA; typedef struct timer_data TIMER; typedef struct system_data SYSTEM_DATA; typedef struct smaug_affect SMAUG_AFF; typedef struct skill_type SKILLTYPE; typedef struct social_type SOCIALTYPE; typedef struct cmd_type CMDTYPE; typedef struct killed_data KILLED_DATA; typedef struct ignore_data IGNORE_DATA; typedef struct host_data HOST_DATA; typedef struct extended_bitvector EXT_BV; typedef struct lcnv_data LCNV_DATA; typedef struct lang_data LANG_DATA; typedef struct group_data GROUP_DATA; /* Function types. */ #define CMDF( fun ) NM void fun( CHAR_DATA *ch, char *argument ) typedef void DO_FUN( CHAR_DATA *ch, char *argument ); typedef ch_ret SPELL_FUN( int sn, int level, CHAR_DATA *ch, void *vo ); typedef bool SPEC_FUN( CHAR_DATA *ch ); #define DUR_CONV 23.333333333333333333333333 #define HIDDEN_TILDE '*' /* 32bit bitvector defines */ #define BV00 ( 1 << 0 ) #define BV01 ( 1 << 1 ) #define BV02 ( 1 << 2 ) #define BV03 ( 1 << 3 ) #define BV04 ( 1 << 4 ) #define BV05 ( 1 << 5 ) #define BV06 ( 1 << 6 ) #define BV07 ( 1 << 7 ) #define BV08 ( 1 << 8 ) #define BV09 ( 1 << 9 ) #define BV10 ( 1 << 10 ) #define BV11 ( 1 << 11 ) #define BV12 ( 1 << 12 ) #define BV13 ( 1 << 13 ) #define BV14 ( 1 << 14 ) #define BV15 ( 1 << 15 ) #define BV16 ( 1 << 16 ) #define BV17 ( 1 << 17 ) #define BV18 ( 1 << 18 ) #define BV19 ( 1 << 19 ) #define BV20 ( 1 << 20 ) #define BV21 ( 1 << 21 ) #define BV22 ( 1 << 22 ) #define BV23 ( 1 << 23 ) #define BV24 ( 1 << 24 ) #define BV25 ( 1 << 25 ) #define BV26 ( 1 << 26 ) #define BV27 ( 1 << 27 ) #define BV28 ( 1 << 28 ) #define BV29 ( 1 << 29 ) #define BV30 ( 1 << 30 ) #define BV31 ( 1 << 31 ) /* 32 USED! DO NOT ADD MORE! SB */ /* String and memory management parameters. */ #define MKH 2048 #define MAX_KEY_HASH MKH #define MSL 4096 #define MAX_STRING_LENGTH MSL #define MIL 1024 #define MAX_INPUT_LENGTH MIL #define MIS 1024 #define MAX_INBUF_SIZE MIS #define MLS 252 #define MAX_LINE_SIZE MLS #define MFN 1024 #define MAX_FILE_NAME MFN #define HASHSTR /* use string hashing */ #define MAX_NEST 20 /* maximum container nesting */ #define MAX_KILLTRACK 25 /* track mob vnums killed */ /* * Game parameters. * Increase the max'es if you add more of something. * Adjust the pulse numbers to suit yourself. */ #define MAX_EXP_WORTH 500000 #define MIN_EXP_WORTH 20 #define MAX_FIGHT 8 #define MAX_VNUM 100000 /* Game can hold up to 2 billion but this is set low for protection */ #define MAX_REXITS 20 /* Maximum exits allowed in 1 room */ #define MAX_SKILL 500 /* Max amount of skills game can have is 1000 ( TYPE_UNKNOWN ) - ( TYPE_HIT ) */ #define SPELL_SILENT_MARKER "silent" /* No OK. or Failed. */ #define MAX_CLASS 50 #define MAX_RACE 50 extern int MAX_PC_RACE; extern int MAX_PC_CLASS; extern bool mud_down; #define MAX_CPD 4 /* Maximum council power level difference */ #define MAX_HERB 20 /* Max amount of herbs game can have is 1000 ( TYPE_HERB ) - ( TYPE_PERS ) */ #define MAX_PERS 500 /* Max amount of personal skills/spells game can have is (Unlimited currently) ( TYPE_PERS ) - ... */ #define MAX_PC_PERS 5 /* Maximum amount of personal skills/spells each character can have */ #define MAX_WHERE_NAME 40 #define MAX_LEVEL 100 /* Max Level of all players */ #define TIME_MODIFY 0 /* Done in seconds, Modifies current_time to what you want the time displayed in */ #define PERM_LOG PERM_BUILDER /* This is to tell if act uses uppercasestring or not --Shaddai */ extern bool DONT_UPPER; #define SECONDS_PER_TICK 70 #define PULSE_PER_SECOND 4 #define PULSE_VIOLENCE ( 3 * PULSE_PER_SECOND ) #define PULSE_MOBILE ( 4 * PULSE_PER_SECOND ) #define PULSE_ROOM ( 2 * PULSE_PER_SECOND ) #define PULSE_TICK ( SECONDS_PER_TICK * PULSE_PER_SECOND ) #define PULSE_AREA ( 60 * PULSE_PER_SECOND ) /* SMAUG Version -- Scryn */ #define SMAUG_VERSION_MAJOR "1" #define SMAUG_VERSION_MINOR "7 FUSS" #define LOP_VERSION_MAJOR "1" #define LOP_VERSION_MINOR "31" /* Stuff for area versions --Shaddai */ extern int area_version; #define HAS_SPELL_INDEX -1 #define AREA_VERSION_WRITE 1 /* Command logging types. */ typedef enum { LOG_NORMAL, LOG_ALWAYS, LOG_NEVER, LOG_BUILD, LOG_HIGH, LOG_COMM, LOG_WARN, LOG_BUG, LOG_ALL } log_types; /* short cut crash bug fix provided by gfinello@mail.karmanet.it*/ typedef enum { relMSET_ON, relOSET_ON } relation_type; typedef struct rel_data REL_DATA; struct rel_data { void *Actor; void *Subject; REL_DATA *next; REL_DATA *prev; relation_type Type; }; /* * Return types for move_char, damage, greet_trigger, etc, etc * Added by Thoric to get rid of bugs */ typedef enum { rNONE, rCHAR_DIED, rVICT_DIED, rBOTH_DIED, rSPELL_FAILED, rVICT_IMMUNE = 128, rERROR = 255 } ret_types; /* Echo types for echo_to_all */ #define ECHOTAR_ALL 0 #define ECHOTAR_PC 1 #define ECHOTAR_IMM 2 /* Defines for extended bitvectors */ #ifndef INTBITS #define INTBITS 32 #endif #define XBM 31 /* extended bitmask ( INTBITS - 1 ) */ #define RSV 5 /* right-shift value ( sqrt(XBM+1) ) */ #define XBI 4 /* integers in an extended bitvector */ #define MAX_BITS XBI * INTBITS /* Structure for extended bitvectors -- Thoric */ struct extended_bitvector { int bits[XBI]; }; #include "color.h" #include "hotboot.h" #ifdef IMC #include "imc.h" #endif extern GROUP_DATA *first_group, *last_group; struct group_data { GROUP_DATA *next, *prev; CHAR_DATA *leader; /* Who is the leader of this group */ CHAR_DATA *first_char, *last_char; /* List of the characters in this group */ }; /* Structure for a morph -- Shaddai Morph structs. */ struct char_morph { MORPH_DATA *morph; EXT_BV affected_by, no_affected_by; EXT_BV immune, no_immune; EXT_BV absorb, no_absorb; EXT_BV resistant, no_resistant; EXT_BV suscept, no_suscept; int timer; /* How much time is left */ short ac; short blood; short stats[STAT_MAX]; short damroll; short dodge; short hit; short hitroll; short mana; short move; short parry; short saving_breath; short saving_para_petri; short saving_poison_death; short saving_spell_staff; short saving_wand; short tumble; }; struct morph_data { MORPH_DATA *next, *prev; EXT_BV affected_by, no_affected_by; EXT_BV immune, no_immune; EXT_BV absorb, no_absorb; EXT_BV resistant, no_resistant; EXT_BV suscept, no_suscept; EXT_BV Class; /* Classes not allowed to use this */ EXT_BV race; /* Races not allowed to use this */ char *blood; /* Blood added vamps only */ char *damroll; char *deity; char *description; char *help; /* What player sees for info on morph */ char *hit; /* Hitpoints added */ char *hitroll; char *key_words; /* Keywords added to your name */ char *long_desc; /* New long_desc for player */ char *mana; /* Mana added not for vamps */ char *morph_other; /* What others see when you morph */ char *morph_self; /* What you see when you morph */ char *move; /* Move added */ char *name; /* Name used to polymorph into this */ char *short_desc; /* New short desc for player */ char *no_skills; /* Prevented Skills */ char *skills; char *unmorph_other; /* What others see when you unmorph */ char *unmorph_self; /* What you see when you unmorph */ int defpos; /* Default position */ int timer; /* Timer for how long it lasts */ int obj[3]; /* Object needed to morph you */ int used; /* How many times has this morph been used */ int vnum; /* Unique identifier */ int level; /* Minimum level to use this morph */ short ac; short bloodused; /* Amount of blood morph requires Vamps only */ short stats[STAT_MAX]; short dayfrom; /* Starting Day you can morph into this */ short dayto; /* Ending Day you can morph into this */ short dodge; /* Percent of dodge added IE 1 = 1% */ short favourused; /* Amount of favour to morph */ short gloryused; /* Amount of glory used to morph */ short hpused; /* Amount of hps used to morph */ short manaused; /* Amount of mana used to morph */ short moveused; /* Amount of move used to morph */ short parry; /* Percent of parry added IE 1 = 1% */ short pkill; /* Pkill Only, Peacefull Only or Both */ short saving_breath; /* Below are saving adjusted */ short saving_para_petri; short saving_poison_death; short saving_spell_staff; short saving_wand; short sex; /* The sex that can morph into this */ short timefrom; /* Hour starting you can morph */ short timeto; /* Hour ending that you can morph */ short tumble; /* Percent of tumble added IE 1 = 1% */ bool no_cast; /* Can you cast a spell to morph into it */ bool objuse[3]; /* Objects needed to morph */ }; /* Tongues / Languages structures */ struct lcnv_data { LCNV_DATA *next, *prev; char *old; char *lnew; int olen; int nlen; }; struct lang_data { LANG_DATA *next, *prev; LCNV_DATA *first_precnv, *last_precnv; LCNV_DATA *first_cnv, *last_cnv; char *name; char *alphabet; }; /* Ban Types --- Shaddai */ #define BAN_WARN -1 #define BAN_SITE 1 #define BAN_CLASS 2 #define BAN_RACE 3 /* Site ban structure. */ struct ban_data { BAN_DATA *next, *prev; char *name; /* Name of site/class/race banned */ char *note; /* Why it was banned */ char *ban_by; /* Who banned this site */ char *ban_time; /* Time it was banned */ int flag; /* Class or Race number */ int unban_date; /* When ban expires */ int level; short duration; /* How long it is banned for */ bool warn; /* Echo on warn channel */ bool prefix; /* Use of *site */ bool suffix; /* Use of site* */ }; /* Time and weather stuff. */ typedef enum { SUN_DARK, SUN_RISE, SUN_LIGHT, SUN_SET } sun_positions; typedef enum { SKY_CLOUDLESS, SKY_CLOUDY, SKY_RAINING, SKY_LIGHTNING } sky_conditions; typedef struct hour_min_sec HOUR_MIN_SEC; struct hour_min_sec { int hour; int min; int sec; int manual; }; extern HOUR_MIN_SEC *set_boot_time; typedef struct time_info_data TIME_INFO_DATA; struct time_info_data { short hour; short day; short wday; short month; short sunlight; int year; }; extern TIME_INFO_DATA time_info; /* Define maximum number of climate settings - FB */ #define MAX_CLIMATE 5 struct weather_data { NEIGHBOR_DATA *first_neighbor, *last_neighbor; char *echo; int echo_color; short temp, temp_vector, climate_temp; short precip, precip_vector, climate_precip; short wind, wind_vector, climate_wind; }; struct neighbor_data { NEIGHBOR_DATA *next, *prev; char *name; AREA_DATA *address; }; struct host_data { HOST_DATA *next, *prev; char *host; bool prefix, suffix; }; /* Connected state for a channel. */ typedef enum { CON_GET_NAME = -99, CON_GET_OLD_PASSWORD, CON_CONFIRM_NEW_NAME, CON_GET_NEW_PASSWORD, CON_CONFIRM_NEW_PASSWORD, CON_GET_NEW_SEX, CON_READ_MOTD, CON_GET_NEW_RACE, CON_GET_NEW_CLASS, CON_GET_WANT_ANSI, CON_PRESS_ENTER, CON_COPYOVER_RECOVER, CON_GET_PKILL, CON_PLAYING = 0, CON_EDITING } connection_types; const char *con_state( short state ); /* Character substates */ typedef enum { SUB_NONE, SUB_PAUSE, SUB_PERSONAL_DESC, SUB_BAN_DESC, SUB_OBJ_SHORT, SUB_OBJ_LONG, SUB_OBJ_EXTRA, SUB_MOB_LONG, SUB_MOB_DESC, SUB_ROOM_DESC, SUB_ROOM_EXTRA, SUB_ROOM_EXIT_DESC, SUB_WRITING_NOTE, SUB_MPROG_EDIT, SUB_HELP_EDIT, SUB_PERSONAL_BIO, SUB_REPEATCMD, SUB_RESTRICTED, SUB_DEITYDESC, SUB_MORPH_DESC, SUB_MORPH_HELP, SUB_PROJ_DESC, SUB_MAP_EDIT, SUB_EDITING_NOTE, SUB_SHELP_EDIT, SUB_CHELP_EDIT, /* timer types ONLY below this point */ SUB_TIMER_DO_ABORT = 128, SUB_TIMER_CANT_ABORT } char_substates; /* Descriptor (channel) structure. */ struct descriptor_data { DESCRIPTOR_DATA *next, *prev, *snoop_by; CHAR_DATA *character; struct mccp_data *mccp; /* Mud Client Compression Protocol */ unsigned char prevcolor; char *host; char inbuf[MIS]; char incomm[MIL]; char inlast[MIL]; char *outbuf; char *pagebuf; char *pagepoint; char pagecmd; char pagecolor; unsigned long outsize; unsigned long pagesize; time_t outtime; int repeat; int port; int pagetop; int descriptor; int outtop; int newstate; short connected; short idle; short tempidle; short lines; short scrlen; short speed; bool fcommand; bool can_compress; }; /* TO types for act. */ typedef enum { TO_ROOM, TO_NOTVICT, TO_VICT, TO_CHAR, TO_OTHERS, TO_CANSEE } to_types; #define INIT_WEAPON_CONDITION 12 #define MAX_ITEM_IMPACT 30 /* Shop types. */ struct shop_data { SHOP_DATA *next, *prev; int keeper; short profit_buy; short profit_sell; short open_hour; short close_hour; bool buy_type[ITEM_TYPE_MAX]; }; struct repairshop_data { REPAIR_DATA *next, *prev; int keeper; short profit_fix; short open_hour; short close_hour; bool fix_type[ITEM_TYPE_MAX]; }; /* Mob program structures */ struct act_prog_data { struct act_prog_data *next; void *vo; }; struct mob_prog_act_list { MPROG_ACT_LIST *next; CHAR_DATA *ch; OBJ_DATA *obj; void *vo; char *buf; }; struct mob_prog_data { MPROG_DATA *next; char *arglist; char *comlist; int resetdelay; short type; bool triggered; bool fileprog; }; extern bool MOBtrigger; /* Per-class stuff. */ struct class_type { EXT_BV class_restriction; char *name; /* Name for 'who' */ int used; /* How many have picked this class on creation? */ short clistplace; /* Where its at in the class list currently */ }; /* race dedicated stuff */ struct race_type { EXT_BV affected; /* Default affect bitvectors */ EXT_BV resist; EXT_BV suscept; EXT_BV class_restriction; EXT_BV language; /* Default racial language */ char *name; /* Race name */ char *where_name[MAX_WHERE_NAME]; char *lodge_name[MAX_WHERE_NAME]; int used; /* How many have picked this race on creation? */ short base_stats[STAT_MAX]; /* Starting stats */ short max_stats[STAT_MAX]; /* Maximum stats */ short hit; short mana; short move; short ac_plus; short minalign, alignment, maxalign; short minheight, maxheight; short minweight, maxweight; short hunger_mod; short thirst_mod; short race_recall; short rlistplace; /* Where its at in the race list currently */ short uses; /* 0 = Nothing, 1 = Mana, 2 = Blood */ }; typedef struct member_data MEMBER_DATA; struct member_data { MEMBER_DATA *next, *prev; char *name; }; typedef struct victory_data VICTORY_DATA; struct victory_data { VICTORY_DATA *next, *prev; char *name; char *vname; time_t vtime; int level; int vlevel; int vkills; }; typedef enum { CLAN_PLAIN, CLAN_NATION } clan_types; typedef struct clan_data CLAN_DATA; struct clan_data { CLAN_DATA *next, *prev; MEMBER_DATA *first_member, *last_member; VICTORY_DATA *first_victory, *last_victory; char *filename; /* Clan filename */ char *name; /* Clan name */ char *motto; /* Clan motto */ char *description; /* A brief description of the clan */ char *leader; /* Head clan leader */ char *number1; /* First officer */ char *number2; /* Second officer */ char *badge; /* Clan badge on who/where/to_room */ char *leadrank; /* Leader's rank */ char *onerank; /* Number One's rank */ char *tworank; /* Number Two's rank */ int recall; /* Vnum of clan's recall room */ int race; /* For Nations */ short clan_type; /* See clan type defines */ short members; /* Number of clan members */ }; struct council_data { COUNCIL_DATA *next, *prev; MEMBER_DATA *first_member, *last_member; char *filename; /* Council filename */ char *name; /* Council name */ char *description; /* A brief description of the council */ char *head; /* Council head */ char *head2; /* Council co-head */ char *powers; /* Council powers */ short members; /* Number of council members */ }; typedef struct deity_data DEITY_DATA; struct deity_data { DEITY_DATA *next, *prev; MEMBER_DATA *first_worshipper, *last_worshipper; EXT_BV suscept; EXT_BV resist; EXT_BV affected; EXT_BV Class; /* Classes allowed to use this */ EXT_BV race; /* Races allowed to use this */ char *filename; char *name; char *description; int sex; int susceptnum; int resistnum; int affectednum; int objvnum; int mobvnum; short alignment; short worshippers; short sdeityobj; short savatar; short scorpse; short srecall; short flee; short kill; short kill_magic; short sac; short bury_corpse; short aid_spell; short aid; short spell_aid; short backstab; short steal; short die; short dig_corpse; }; DEITY_DATA *get_deity( char *name ); void adjust_favor( CHAR_DATA *ch, int field, int mod ); typedef struct vote_data VOTE_DATA; struct vote_data { VOTE_DATA *next, *prev; char *name; short vote; }; typedef struct bid_data BID_DATA; struct bid_data { BID_DATA *next, *prev; char *name; int bid; }; typedef struct read_data READ_DATA; struct read_data { READ_DATA *next, *prev; char *name; }; /* Data structure for notes. */ struct note_data { NOTE_DATA *next, *prev; VOTE_DATA *first_vote, *last_vote; BID_DATA *first_bid, *last_bid; /* Used for auctions */ READ_DATA *first_read, *last_read; OBJ_DATA *obj; /* Used for auctions */ char *sender; char *to_list; char *subject; char *text; time_t posttime; int voting; int yesvotes; int novotes; int abstentions; int autowin; /* Used for auctions */ int sfor; /* Used for auctions */ bool aclosed; /* Used for auctions */ bool acanceled; /* Used for auctions */ }; /* An affect. So limited... so few fields... should we add more? */ struct affect_data { AFFECT_DATA *next, *prev; EXT_BV bitvector; int duration; int modifier; short location; short type; }; /* A SMAUG spell */ struct smaug_affect { SMAUG_AFF *next, *prev; char *duration; char *modifier; /* this is the modifier */ int bitvector; /* this is the bit number */ short location; /* this is the apply location */ }; /*************************************************************************** * * * VALUES OF INTEREST TO AREA BUILDERS * * (Start of section ... start here) * * * ***************************************************************************/ /* Well known mob virtual numbers. Defined in #MOBILES. */ /* 1-2 Used by other stuff */ #define MOB_VNUM_SUPERMOB 3 /* 4 unused */ #define MOB_VNUM_ANIMATED_CORPSE 5 /* 6-79 unused */ #define MOB_VNUM_VAMPIRE 80 #define MOB_VNUM_CITYGUARD 81 /* 82-99 unused */ /* Pipe flags */ #define PIPE_LIT BV00 #define PIPE_GOINGOUT BV01 #define PIPE_FULLOFASH BV02 /* Flags for act_string -- Shaddai */ #define STRING_NONE 0 #define STRING_IMM BV01 /* Well known object virtual numbers. */ /* 1 Unused */ #define OBJ_VNUM_MONEY_ONE 2 #define OBJ_VNUM_MONEY_SOME 3 /* 4-9 Unused */ #define OBJ_VNUM_CORPSE_NPC 10 #define OBJ_VNUM_CORPSE_PC 11 #define OBJ_VNUM_SEVERED_HEAD 12 #define OBJ_VNUM_TORN_HEART 13 #define OBJ_VNUM_SLICED_ARM 14 #define OBJ_VNUM_SLICED_LEG 15 #define OBJ_VNUM_SPILLED_GUTS 16 #define OBJ_VNUM_BLOOD 17 #define OBJ_VNUM_BLOODSTAIN 18 #define OBJ_VNUM_SCRAPS 19 #define OBJ_VNUM_MUSHROOM 20 #define OBJ_VNUM_LIGHT_BALL 21 #define OBJ_VNUM_SPRING 22 #define OBJ_VNUM_SKIN 23 #define OBJ_VNUM_SLICE 24 #define OBJ_VNUM_SHOPPING_BAG 25 #define OBJ_VNUM_BLOODLET 26 /* 27-29 Unused */ #define OBJ_VNUM_FIRE 30 #define OBJ_VNUM_TRAP 31 #define OBJ_VNUM_PORTAL 32 #define OBJ_VNUM_BLACK_POWDER 33 /* 34-35 Unused */ #define OBJ_VNUM_WOOD 36 /* 37-38 Unused */ #define OBJ_VNUM_WOODFIRE 39 /* 40-43 Unused */ /* 44-59 Used for bodyparts */ /* 60 Used for blood fountain */ /* 61-62 Unused */ /* 63 Used by 'extradimensional portal' */ /* 64-79 Unused */ /* 80-87 Used for bodyparts */ /* 88-90 Unused */ #define OBJ_VNUM_MAP 91 /* 92-94 Unused */ #define OBJ_VNUM_FISH 95 /* 96 Unused */ #define OBJ_VNUM_LOCKER 97 /* 98-99 Unused */ /* Lever/dial/switch/button/pullchain flags */ #define TRIG_UP BV00 #define TRIG_UNLOCK BV01 #define TRIG_LOCK BV02 #define TRIG_D_NORTH BV03 #define TRIG_D_SOUTH BV04 #define TRIG_D_EAST BV05 #define TRIG_D_WEST BV06 #define TRIG_D_UP BV07 #define TRIG_D_DOWN BV08 #define TRIG_D_NORTHEAST BV09 #define TRIG_D_NORTHWEST BV10 #define TRIG_D_SOUTHEAST BV11 #define TRIG_D_SOUTHWEST BV12 #define TRIG_D_SOMEWHERE BV13 #define TRIG_DOOR BV14 #define TRIG_CONTAINER BV15 #define TRIG_OPEN BV16 #define TRIG_CLOSE BV17 #define TRIG_PASSAGE BV18 #define TRIG_OLOAD BV19 #define TRIG_MLOAD BV20 #define TRIG_TELEPORT BV21 #define TRIG_TELEPORTALL BV22 #define TRIG_TELEPORTPLUS BV23 #define TRIG_DEATH BV24 #define TRIG_CAST BV25 #define TRIG_RAND4 BV26 #define TRIG_RAND6 BV27 #define TRIG_RAND10 BV28 #define TRIG_RAND11 BV29 #define TRIG_SHOWROOMDESC BV30 #define TRIG_AUTORETURN BV31 #define TELE_SHOWDESC BV00 #define TELE_TRANSALL BV01 #define TELE_TRANSALLPLUS BV02 /* * Values for containers (value[1]). * Used in #OBJECTS. */ #define CONT_CLOSEABLE BV00 #define CONT_PICKPROOF BV01 #define CONT_CLOSED BV02 #define CONT_LOCKED BV03 #define CONT_EATKEY BV04 /* Directions. Used for exits in rooms. */ typedef enum { DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_UP, DIR_DOWN, DIR_NORTHEAST, DIR_NORTHWEST, DIR_SOUTHEAST, DIR_SOUTHWEST, DIR_SOMEWHERE } dir_types; #define PT_WATER 100 #define PT_AIR 200 #define PT_EARTH 300 #define PT_FIRE 400 /* * Push/pull types for exits -Thoric * To differentiate between the current of a river, or a strong gust of wind */ typedef enum { PULL_UNDEFINED, PULL_VORTEX, PULL_VACUUM, PULL_SLIP, PULL_ICE, PULL_MYSTERIOUS, PULL_CURRENT = PT_WATER, PULL_WAVE, PULL_WHIRLPOOL, PULL_GEYSER, PULL_WIND = PT_AIR, PULL_STORM, PULL_COLDWIND, PULL_BREEZE, PULL_LANDSLIDE = PT_EARTH, PULL_SINKHOLE, PULL_QUICKSAND, PULL_EARTHQUAKE, PULL_LAVA = PT_FIRE, PULL_HOTAIR } dir_pulltypes; #define MAX_DIR DIR_SOUTHWEST /* max for normal walking */ #define DIR_PORTAL DIR_SOMEWHERE /* portal direction */ /* Auth Flags */ #define FLAG_WRAUTH 1 #define FLAG_AUTH 2 /* Conditions. */ typedef enum { COND_DRUNK, COND_FULL, COND_THIRST, MAX_CONDS } conditions; typedef enum { TIMER_NONE, TIMER_RECENTFIGHT, TIMER_SHOVEDRAG, TIMER_DO_FUN, TIMER_APPLIED, TIMER_PKILLED, TIMER_ASUPPRESSED } timer_types; struct timer_data { TIMER *next, *prev; DO_FUN *do_fun; int value; int count; short type; }; /* * Prototype for a mob. * This is the in-memory version of #MOBILES. */ struct mob_index_data { MOB_INDEX_DATA *next; CHAR_DATA *first_copy, *last_copy; SPEC_FUN *spec_fun; SHOP_DATA *pShop; REPAIR_DATA *rShop; MPROG_DATA *mudprogs; EXT_BV progtypes; EXT_BV act; EXT_BV affected_by; EXT_BV xflags; EXT_BV immune; EXT_BV absorb; EXT_BV resistant; EXT_BV susceptible; EXT_BV attacks; EXT_BV defenses; EXT_BV speaks, speaking; char *name; char *short_descr; char *long_descr; char *description; char *spec_funname; int vnum; int gold; int mgold; short sex; short alignment; short ac; short numattacks; short position; short defposition; short perm_stats[STAT_MAX]; short saving_poison_death; short saving_wand; short saving_para_petri; short saving_breath; short saving_spell_staff; short minhit; short maxhit; short height; short weight; short hitroll; short damroll; short count; short killed; int level; }; struct hunt_hate_fear { char *name; CHAR_DATA *who; }; struct fighting_data { CHAR_DATA *who; short align; short duration; short timeskilled; }; struct editor_data { short numlines; short on_line; short size; char line[49][( MLS + 2 )]; }; typedef struct extracted_char_data EXTRACT_CHAR_DATA; struct extracted_char_data { EXTRACT_CHAR_DATA *next; CHAR_DATA *ch; ROOM_INDEX_DATA *room; ch_ret retcode; bool extract; }; /* * One character (PC or NPC). * (Shouldn't most of that build interface stuff use substate, dest_buf, * spare_ptr and tempnum? Seems a little redundant) */ struct char_data { CHAR_DATA *next, *prev; CHAR_DATA *next_in_group, *prev_in_group; CHAR_DATA *next_in_room, *prev_in_room; CHAR_DATA *next_index, *prev_index; CHAR_DATA *master, *leader; CHAR_DATA *next_pet, *prev_pet; CHAR_DATA *reply, *retell; CHAR_DATA *mount; CHAR_DATA *mounter; CHAR_DATA *editing; GROUP_DATA *group; /* What group does is this character in */ HOST_DATA *first_host, *last_host; OBJ_DATA *first_carrying, *last_carrying; ROOM_INDEX_DATA *in_room, *was_in_room; PC_DATA *pcdata; DO_FUN *last_cmd, *prev_cmd; TIMER *first_timer, *last_timer; NOTE_DATA *pnote; DESCRIPTOR_DATA *desc; AFFECT_DATA *first_affect, *last_affect; MOB_INDEX_DATA *pIndexData; FIGHT_DATA *fighting; MPROG_ACT_LIST *mpact; EDITOR_DATA *editor; CHAR_MORPH *morph; HHF_DATA *hunting, *fearing, *hating; SPEC_FUN *spec_fun; EXT_BV xflags; EXT_BV act; EXT_BV affected_by, no_affected_by; EXT_BV immune, no_immune; EXT_BV absorb, no_absorb; EXT_BV resistant, no_resistant; EXT_BV susceptible, no_susceptible; EXT_BV attacks; EXT_BV defenses; EXT_BV deaf; EXT_BV speaks, speaking; void *dest_buf; void *spare_ptr; char *spec_funname; char *alloc_ptr; char *name; char *short_descr; char *long_descr; char *description; time_t logon; time_t save_time; double exp; /* Not saved (for now) but used so npcs and no class pcs can gain exp */ int bsplatter; /* Blood splatter */ int mpactnum; int tempnum; int temp_played, played; int questcountdown; int questvnum; int questtype; int questgiver; int gold; int mgold; int carry_weight; int carry_number; int retran; int regoto; int resetvnum; /* reset tracker - room vnum */ int resetnum; /* reset tracker - reset # */ int hit, max_hit; int mana, max_mana; int move, max_move; int level; unsigned short mpscriptpos; short num_fighting; short substate; short sex; short race; short trust; short timer; short wait; short practice; short numattacks; short saving_poison_death; short saving_wand; short saving_para_petri; short saving_breath; short saving_spell_staff; short alignment; short hitroll; short damroll; short position, defposition; short style; short height; short weight; short armor; short wimpy; short perm_stats[STAT_MAX]; short mod_stats[STAT_MAX]; short mental_state; /* simplified */ short mobinvis; /* Mobinvis level SB */ short colors[MAX_COLORS]; bool logged; /* are they logged? */ }; struct killed_data { int vnum; char count; }; /* Structure for link list of ignored players */ struct ignore_data { IGNORE_DATA *next, *prev; char *name; }; typedef struct per_history PER_HISTORY; struct per_history { PER_HISTORY *next, *prev; char *text; time_t chtime; }; typedef struct friend_data FRIEND_DATA; struct friend_data { FRIEND_DATA *next, *prev; char *name; short sex; bool approved; /* This isn't saved but is used to see if they have permission to have them on their list */ }; /* This is for explored data */ typedef struct exp_data EXP_DATA; struct exp_data { EXP_DATA *next, *prev; int vnum; }; typedef struct mclass_data MCLASS_DATA; struct mclass_data { MCLASS_DATA *next, *prev; double exp; /* How much exp they have for this class */ int level; /* Level they are in this class */ int wclass; /* Which class is this one? */ short cpercent; /* How much percent of earned exp goes to this class? */ }; MCLASS_DATA *add_mclass( CHAR_DATA *ch, int wclass, int level, int cpercent, double exp, bool limit ); /* Data which only PC's have. */ struct pc_data { PC_DATA *next, *prev; CHAR_DATA *character; CHAR_DATA *first_pet, *last_pet; MCLASS_DATA *first_mclass, *last_mclass; NOTE_DATA *gnote; CLAN_DATA *clan; CLAN_DATA *nation; COUNCIL_DATA *council; AREA_DATA *area; DEITY_DATA *deity; KILLED_DATA killed[MAX_KILLTRACK]; FRIEND_DATA *first_friend, *last_friend; /* Keep a list of friends */ IGNORE_DATA *first_ignored, *last_ignored; /* Keep track of who to ignore */ EXP_DATA *first_explored, *last_explored; /* Keep track of where they have explored */ PER_HISTORY *first_tell, *last_tell; PER_HISTORY *first_whisper, *last_whisper; PER_HISTORY *first_yell, *last_yell; PER_HISTORY *first_say, *last_say; #ifdef IMC IMC_CHARDATA *imcchardata; #endif EXT_BV flags; /* Whether the player is deadly and whatever else we add. */ char *channels; char *spouse; char *homepage; char *email; char *msn; char *yahoo; char *gtalk; char *pwd; char *bamfin; char *bamfout; char *filename; /* For the safe mset name -Shaddai */ char *rank; char *title; char *bestowments; /* Special bestowed commands */ char *bio; /* Personal Bio */ char *authed_by; /* what crazy imm authed this name ;) */ char *prompt; /* User config prompts */ char *fprompt; /* Fight prompts */ char *subprompt; /* Substate prompt */ char sudoku[9][9], dis_sudoku[9][9]; /* for the sudoku puzzles */ time_t news_read; time_t restore_time; /* The last time the char did a restore all */ time_t sstarttime, sfastesttime, sslowesttime, slasttime; unsigned swins, squits; unsigned int pkills; /* Number of pkills */ unsigned int pdeaths; /* Number of times pkilled (legally) */ unsigned int mkills; /* Number of mobs killed */ unsigned int mdeaths; /* Number of deaths due to mobs */ unsigned int questcompleted; /* Number of quest completed */ int nextregen; /* When do they get another regen */ int quest_curr; /* Current number of quest points */ int range_lo, range_hi; /* Vnum range */ int auth_state; int birth_year; int wizinvis; /* wizinvis level */ int min_snoop; /* minimum snoop level */ int onboard; short speed; short condition[MAX_CONDS]; short learned[MAX_SKILL]; short personal[MAX_PC_PERS]; /* This is to keep a quick list of the personal skills/spells each person has (Not saved, set on login) */ short favor; /* deity favor */ short charmies; /* Number of Charmies */ short pagerlen; /* For pager length */ short kltime; /* For the keep alive timer */ short birth_month; short birth_day; bool hotboot; /* hotboot tracker */ }; /* Liquids. */ #define LIQ_WATER 1 #define LIQ_BLOOD 14 #define LIQ_MAX 19 struct liq_type { char *liq_name; char *liq_color; short liq_affect[MAX_CONDS]; }; /* Damage types from the attack_table[] */ typedef enum { DAM_HIT, DAM_SLICE, DAM_STAB, DAM_SLASH, DAM_WHIP, DAM_CLAW, DAM_BLAST, DAM_POUND, DAM_CRUSH, DAM_BITE, DAM_PIERCE, DAM_SUCTION, DAM_BOLT, DAM_ARROW, DAM_DART, DAM_STONE, DAM_PEA, DAM_MAX } damage_types; /* Extra description data for a room or object. */ struct extra_descr_data { EXTRA_DESCR_DATA *next, *prev; char *keyword; /* Keyword in look/examine */ char *description; /* What to see */ }; /* Prototype for an object. */ struct obj_index_data { OBJ_INDEX_DATA *next; EXTRA_DESCR_DATA *first_extradesc, *last_extradesc; AFFECT_DATA *first_affect, *last_affect; OBJ_DATA *first_copy, *last_copy; /* A list of all the copys of this index in game */ MPROG_DATA *mudprogs; /* objprogs */ EXT_BV progtypes; /* objprogs */ EXT_BV extra_flags; EXT_BV wear_flags; EXT_BV class_restrict; /* Classes that can't wear it */ EXT_BV race_restrict; /* Races that can't wear it */ char *name; char *short_descr; char *description; char *action_desc; int vnum; int cost; int value[6]; int level; short stat_reqs[STAT_MAX]; short item_type; short count; short weight; short layers; }; /* One object. */ struct obj_data { OBJ_DATA *next, *prev; OBJ_DATA *next_corpse, *prev_corpse; OBJ_DATA *next_content, *prev_content; OBJ_DATA *first_content, *last_content; OBJ_DATA *next_index, *prev_index; OBJ_DATA *in_obj; CHAR_DATA *carried_by; EXTRA_DESCR_DATA *first_extradesc, *last_extradesc; AFFECT_DATA *first_affect, *last_affect; OBJ_INDEX_DATA *pIndexData; ROOM_INDEX_DATA *in_room; EXT_BV extra_flags; EXT_BV wear_flags; EXT_BV class_restrict; /* Classes that can't wear it */ EXT_BV race_restrict; /* Races that can't wear it */ MPROG_ACT_LIST *mpact; /* mudprogs */ char *name; char *short_descr; char *description; char *action_desc; char *owner; int mpactnum; /* mudprogs */ int cost; int value[6]; int room_vnum; /* hotboot tracker */ int level; int bsplatter; /* How much blood has been splattered on this eq */ int bstain; /* How much blood has left a stain on this eq */ short timer; short count; /* support for object grouping */ short wear_loc; short t_wear_loc; /* temp wear loc used for saving objects wear loc */ short weight; short stat_reqs[STAT_MAX]; short item_type; short mpscriptpos; }; /* Exit data. */ struct exit_data { EXIT_DATA *next, *prev; EXIT_DATA *rexit; /* Reverse exit pointer */ ROOM_INDEX_DATA *to_room; /* Pointer to destination room */ EXT_BV exit_info; /* door states & other flags */ char *keyword; /* Keywords for exit or door */ char *description; /* Description of exit */ int vnum; /* Vnum of room exit leads to */ int rvnum; /* Vnum of room in opposite dir */ int key; /* Key vnum */ short vdir; /* Physical "direction" */ short pull; /* pull of direction (current) */ short pulltype; /* type of pull (current, wind) */ }; /* * 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 * 'H': hide an object * 'B': set a bitvector * 'T': trap an object * 'D': set state of door * 'R': randomize room exits * 'S': stop (end of list) */ /* Area-reset definition. */ struct reset_data { RESET_DATA *next, *prev; RESET_DATA *first_reset, *last_reset; RESET_DATA *next_reset, *prev_reset; char command; int extra; int arg1; int arg2; int arg3; short rchance; /* 1-100% chance of it reseting */ bool doreset; /* Should this reset? */ }; /* Area flags */ typedef enum { AREA_DELETED, AREA_LOADED } area_flag; /* Area definition. */ struct area_data { AREA_DATA *next, *prev; AREA_DATA *next_sort, *prev_sort; AREA_DATA *next_sort_name, *prev_sort_name; ROOM_INDEX_DATA *first_room, *last_room; WEATHER_DATA *weather; EXT_BV flags; char *name; char *filename; char *author; /* Scryn */ char *resetmsg; /* Rennard */ int low_vnum, hi_vnum; int low_soft_range, hi_soft_range; int low_hard_range, hi_hard_range; short status; short age; short nplayer; short reset_frequency; short max_players; }; /* Used to keep track of system settings and statistics -Thoric */ struct system_data { EXT_BV save_flags; /* Toggles for saving conditions */ void *dlHandle; char *mud_name; /* Name of mud */ time_t time_of_max; /* Time of max ever */ time_t next_pfile_cleanup; /* Time of next pfile cleaning */ int maxplayers; /* Maximum players this boot */ int alltimemax; /* Maximum players ever */ int room_limbo; int room_poly; int room_authstart; int room_deadly; int room_school; int room_temple; int room_altar; short perm_muse; /* Permission of muse channel */ short perm_think; /* Permission of think channel */ short perm_build; /* Permission of build channel */ short perm_log; /* Permission of log channel */ short perm_modify_proto; /* Permission to modify prototype stuff */ short perm_override_private; /* override private flag */ short perm_mset_player; /* Permission to mset a player */ short perm_getobjnotake; /* Get objects without take flag */ short perm_forcepc; /* The permission at which you can use force on players. */ short bestow_dif; /* Max # of levels between trust and command level for a bestow to work --Blodkai */ short save_frequency; /* How old to autosave someone */ short ban_site, ban_class, ban_race; /* Levels to ban sites/classes/races */ short ident_retries; /* Number of times to retry broken pipes. */ short mlimit_total; /* Max Limit for total connections from 1 host */ short mlimit_deadly; /* Max Limit for deadly characters from 1 host */ short mlimit_peaceful; /* Max Limit for peaceful characters from 1 host */ short maxpet; /* Max number of pets for each character */ short expmulti; /* Exp Multiplier for everyone */ short mclass; /* How many classes can they be? */ bool NAME_RESOLVING; /* Hostnames get resolved */ bool DENY_NEW_PLAYERS; /* New players can't connect */ bool WAIT_FOR_AUTH; /* New players must be auth'ed */ bool save_pets; /* Do pets save? */ bool morph_opt; /* Do we optimize morph's? */ bool pk_loot; /* Pkill looting allowed? */ bool wizlock; /* Game is wizlocked */ bool skipclasses; /* Skip picking classes on character creation */ bool autosavecset; /* Save cset when a change is made? */ bool autosavecommands; /* Save commands when a change is made? */ bool autosavesocials; /* Save socials when a change is made? */ bool autosaveskills; /* Save skills when a change is made? */ }; /* Room type. */ struct room_index_data { ROOM_INDEX_DATA *next; ROOM_INDEX_DATA *next_aroom, *prev_aroom; RESET_DATA *first_reset, *last_reset; RESET_DATA *last_mob_reset; RESET_DATA *last_obj_reset; CHAR_DATA *first_person, *last_person; OBJ_DATA *first_content, *last_content; EXTRA_DESCR_DATA *first_extradesc, *last_extradesc; AREA_DATA *area; EXIT_DATA *first_exit, *last_exit; MPROG_ACT_LIST *mpact; /* mudprogs */ EXT_BV room_flags; EXT_BV progtypes; /* mudprogs */ MPROG_DATA *mudprogs; /* mudprogs */ char *name; char *description; int mpactnum; /* mudprogs */ int sector_type; int tele_vnum; int vnum; int charcount; /* Amount of characters in room */ int objcount; /* Amount of objects in room */ short mpscriptpos; short light; /* amount of light in the room */ short tele_delay; short tunnel; /* max people that will fit */ }; /* * Types of skill numbers. Used to keep separate lists of sn's * Must be non-overlapping with spell/skill types, * but may be arbitrary beyond that. */ #define TYPE_UNDEFINED -1 /* 0 - 1000 = spells/skills/etc... */ #define TYPE_HIT 1000 /* 1000 - 2000 = attack types */ #define TYPE_HERB 2000 /* 2000 - 3000 = herb types */ #define TYPE_PERS 3000 /* 3000 + = personal types */ typedef enum { SKILL_UNKNOWN, SKILL_SPELL, SKILL_SKILL, SKILL_WEAPON, SKILL_TONGUE, SKILL_HERB, SKILL_PERSONAL, SKILL_DELETED } skill_types; struct timerset { int num_uses; struct timeval total_time; struct timeval min_time; struct timeval max_time; }; /* Skills include spells as a particular case. */ struct skill_type { EXT_BV flags; EXT_BV spell_sector; /* Sector Spell work */ SMAUG_AFF *first_affect, *last_affect; SPELL_FUN *spell_fun; /* Spell pointer (for spells) */ char *spell_fun_name; /* Spell function name - Trax */ DO_FUN *skill_fun; /* Skill pointer (for skills) */ char *skill_fun_name; /* Skill function name - Trax */ char *name; char *noun_damage; /* Damage message */ char *msg_off; /* Wear off message */ char *hit_char; /* Success message to caster */ char *hit_vict; /* Success message to victim */ char *hit_room; /* Success message to room */ char *hit_dest; /* Success message to dest room */ char *miss_char; /* Failure message to caster */ char *miss_vict; /* Failure message to victim */ char *miss_room; /* Failure message to room */ char *die_char; /* Victim death msg to caster */ char *die_vict; /* Victim death msg to victim */ char *die_room; /* Victim death msg to room */ char *imm_char; /* Victim immune msg to caster */ char *imm_vict; /* Victim immune msg to victim */ char *imm_room; /* Victim immune msg to room */ char *abs_char; /* Victim absorb msg to caster */ char *abs_vict; /* Victim absorb msg to victim */ char *abs_room; /* Victim absorb msg to room */ char *dice; /* Dice roll */ char *components; /* Spell components, if any */ char *teachers; /* Skill requires a special teacher */ char *htext; /* Skill help text */ int value; /* Misc value */ int min_level; /* Minimum level to be able to cast */ short participants; /* # of required participants */ short saves; /* What saving spell applies */ short difficulty; /* Difficulty of casting/learning */ short type; /* Spell/Skill/Weapon/Tongue */ short range; /* Range of spell (rooms) */ short damage; short Class; short action; short power; short save; int skill_level[MAX_CLASS]; short skill_adept[MAX_CLASS]; int race_level[MAX_RACE]; short race_adept[MAX_RACE]; short target; /* Legal targets */ short minimum_position; /* Position for caster / user */ short slot; /* Slot for #OBJECT loading */ short req_skill; /* Slot for required skill to have to learn this one */ short min_mana; /* Minimum mana used */ short beats; /* Rounds required to use skill */ struct timerset userec; /* Usage record */ bool tmpspell; /* Used by personals to decide if it is a spell/skill */ }; /* So we can have different configs for different ports -- Shaddai */ extern int port; /* These are skill_lookup return values for common skills and spells. */ extern short gsn_style_evasive; extern short gsn_style_defensive; extern short gsn_style_standard; extern short gsn_style_aggressive; extern short gsn_style_berserk; extern short gsn_detrap; extern short gsn_backstab; extern short gsn_circle; extern short gsn_cook; extern short gsn_dodge; extern short gsn_duck; extern short gsn_block; extern short gsn_shieldblock; extern short gsn_counter; extern short gsn_hide; extern short gsn_peek; extern short gsn_pick_lock; extern short gsn_scan; extern short gsn_sneak; extern short gsn_steal; extern short gsn_gouge; extern short gsn_track; extern short gsn_search; extern short gsn_dig; extern short gsn_mount; extern short gsn_bashdoor; extern short gsn_berserk; extern short gsn_disarm; extern short gsn_enhanced_damage; extern short gsn_kick; extern short gsn_parry; extern short gsn_rescue; extern short gsn_feed; extern short gsn_chop; extern short gsn_makefire; extern short gsn_bloodlet; extern short gsn_aid; /* used to do specific lookups */ extern short gsn_first_spell; extern short gsn_first_skill; extern short gsn_first_weapon; extern short gsn_first_tongue; extern short gsn_top_sn; /* spells */ extern short gsn_blindness; extern short gsn_charm_person; extern short gsn_aqua_breath; extern short gsn_curse; extern short gsn_invis; extern short gsn_poison; extern short gsn_sleep; /* newer attack skills */ extern short gsn_punch; extern short gsn_bash; extern short gsn_stun; extern short gsn_bite; extern short gsn_claw; extern short gsn_tail; extern short gsn_poison_weapon; extern short gsn_scribe; extern short gsn_brew; extern short gsn_imbue; extern short gsn_carve; extern short gsn_concoct; extern short gsn_mix; extern short gsn_climb; extern short gsn_barehanded; extern short gsn_pugilism; extern short gsn_long_blades; extern short gsn_short_blades; extern short gsn_flexible_arms; extern short gsn_talonous_arms; extern short gsn_bludgeons; extern short gsn_missile_weapons; extern short gsn_grip; extern short gsn_slice; extern short gsn_tumble; /* Language gsns. -- Altrag */ extern short gsn_common; /* Cmd flag names --Shaddai */ extern const char *cmd_flags[]; /* Utility macros. */ int umin( int check, int ncheck ); int umax( int check, int ncheck ); int urange( int mincheck, int check, int maxcheck ); double dumin( double check, double ncheck ); double dumax( double check, double ncheck ); double durange( double mincheck, double check, double maxcheck ); #define UMIN( a, b ) ( umin( (a), (b) ) ) #define UMAX( a, b ) ( umax( (a), (b) ) ) #define URANGE(a, b, c ) ( urange( (a), (b), (c) ) ) #define LOWER( c ) ( (c) >= 'A' && (c) <= 'Z' ? (c) + 'a' - 'A' : (c) ) #define UPPER( c ) ( (c) >= 'a' && (c) <= 'z' ? (c) + 'A' - 'a' : (c) ) /* * Old-style Bit manipulation macros * The bit passed is the actual value of the bit (Use the BV## defines) */ #define IS_SET(flag, bit) ((flag) & (bit)) #define SET_BIT(var, bit) ((var) |= (bit)) #define REMOVE_BIT(var, bit) ((var) &= ~(bit)) #define TOGGLE_BIT(var, bit) ((var) ^= (bit)) /* * Macros for accessing virtually unlimited bitvectors. -Thoric * * Note that these macros use the bit number rather than the bit value * itself -- which means that you can only access _one_ bit at a time * * This code uses an array of integers */ /* * The functions for these prototypes can be found in misc.c * They are up here because they are used by the macros below */ bool ext_is_empty( EXT_BV *bits ); void ext_clear_bits( EXT_BV *bits ); int ext_has_bits( EXT_BV *var, EXT_BV *bits ); bool ext_has_all_bits( EXT_BV *var, EXT_BV *bits ); bool ext_same_bits( EXT_BV *var, EXT_BV *bits ); void ext_set_bits( EXT_BV *var, EXT_BV *bits ); void ext_remove_bits( EXT_BV *var, EXT_BV *bits ); void ext_toggle_bits( EXT_BV *var, EXT_BV *bits ); /* Here are the extended bitvector macros: */ #define xIS_SET( var, bit ) ( (var).bits[(bit) >> RSV] & 1 << ( (bit) & XBM ) ) #define xSET_BIT( var, bit ) ( (var).bits[(bit) >> RSV] |= 1 << ( (bit) & XBM ) ) #define xSET_BITS( var, bit ) ( ext_set_bits( &(var), &(bit))) #define xREMOVE_BIT( var, bit ) ( (var).bits[(bit) >> RSV] &= ~( 1 << ( (bit) & XBM ) ) ) #define xREMOVE_BITS( var, bit ) ( ext_remove_bits( &(var), &(bit) ) ) #define xTOGGLE_BIT( var, bit ) ( (var).bits[ (bit) >> RSV] ^= 1 << ( (bit) & XBM ) ) #define xTOGGLE_BITS( var, bit ) ( ext_toggle_bits( &(var), &(bit) ) ) #define xCLEAR_BITS( var ) ( ext_clear_bits( &(var) ) ) #define xIS_EMPTY( var ) ( ext_is_empty( &(var) ) ) #define xHAS_BITS( var, bit ) ( ext_has_bits( &(var), &(bit) ) ) #define xHAS_ALL_BITS( var, bit ) ( ext_has_all_bits( &(var), &(bit) ) ) #define xSAME_BITS( var, bit ) ( ext_same_bits( &(var), &(bit) ) ) /* Memory allocation macros. */ #define CREATE(result, type, number) \ do \ { \ if (!((result) = (type *) calloc ((number), sizeof(type)))) \ { \ perror("calloc failure"); \ fprintf(stderr, "Calloc failure @ %s:%d\n", __FILE__, __LINE__ ); \ abort(); \ } \ } while(0) #define RECREATE(result,type,number) \ do \ { \ if(!((result) = (type *)realloc((result), sizeof(type) * (number)))) \ { \ perror("realloc failure"); \ fprintf(stderr, "Realloc failure @ %s:%d\n", __FILE__, __LINE__); \ abort(); \ } \ } while(0) /* Use this on normal things that aren't strings */ #define DISPOSE(point) \ do \ { \ if( (point) ) \ free( (point) ); \ (point) = NULL; \ } while( 0 ) /* This one is to use on strings that you wish to dispose of */ #define STRDISPOSE(point) \ do \ { \ if( (point) ) \ { \ if( typeid((point)) == typeid(char*) ) \ { \ if( in_hash_table( (const char*)(point) ) ) \ { \ log_printf( "&RSTRDISPOSE called on STRALLOC pointer: %s, line %d\n", __FILE__, __LINE__ ); \ log_string( "Attempting to correct." ); \ if( str_free( (char*)(point), __FILE__, __LINE__ ) == -1 ) \ log_printf( "&RSTRFREEing bad pointer: %s, line %d\n", __FILE__, __LINE__ ); \ } \ else \ free( (point) ); \ } \ else \ free( (point) ); \ (point) = NULL; \ } \ else \ (point) = NULL; \ } while(0) #ifdef HASHSTR #define STRALLOC(point) str_alloc( (point), __FILE__, __LINE__ ) #define QUICKLINK(point) quick_link( (point), __FILE__, __LINE__ ) #define STRFREE(point) \ do \ { \ if((point)) \ { \ if( !in_hash_table( (point) ) ) \ { \ log_printf( "&RSTRFREE called on str_dup pointer: %s, line %d\n", __FILE__, __LINE__ ); \ log_string( "Attempting to correct." ); \ free( (point) ); \ } \ else if( str_free((point), __FILE__, __LINE__ ) == -1 ) \ log_printf( "&RSTRFREEing bad pointer: %s, line %d\n", __FILE__, __LINE__ ); \ (point) = NULL; \ } \ else \ (point) = NULL; \ } while(0) #else #define STRALLOC( point ) str_dup( (point) ) #define QUICKLINK( point ) str_dup( (point) ) #define STRFREE( point ) STRDISPOSE( (point) ) #endif #define STRSET( point, new ) \ do \ { \ STRFREE( (point) ); \ (point) = STRALLOC( (new) ); \ } while(0) /* double-linked list handling macros -Thoric */ /* Updated by Scion 8/6/1999 */ #define LINK(link, first, last, next, prev) \ do \ { \ if ( !(first) ) \ { \ (first) = (link); \ (last) = (link); \ } \ else \ (last)->next = (link); \ (link)->next = NULL; \ if ((first) == (link)) \ (link)->prev = NULL; \ else \ (link)->prev = (last); \ (last) = (link); \ } while(0) #define INSERT(link, insert, first, next, prev) \ do \ { \ (link)->prev = (insert)->prev; \ if ( !(insert)->prev ) \ (first) = (link); \ else \ (insert)->prev->next = (link); \ (insert)->prev = (link); \ (link)->next = (insert); \ } while(0) #define UNLINK(link, first, last, next, prev) \ do \ { \ if ( !(link)->prev ) \ { \ (first) = (link)->next; \ if ((first)) \ (first)->prev = NULL; \ } \ else \ { \ (link)->prev->next = (link)->next; \ } \ if ( !(link)->next ) \ { \ (last) = (link)->prev; \ if((last)) \ (last)->next = NULL; \ } \ else \ { \ (link)->next->prev = (link)->prev; \ } \ } while(0) #define ASSIGN_GSN( gsn, skill ) \ do \ { \ if( ( (gsn) = skill_lookup( (skill) ) ) == -1 ) \ fprintf( stderr, "ASSIGN_GSN: Skill %s not found.\n", (skill) ); \ } while(0) #define CHECK_SUBRESTRICTED(ch) \ do \ { \ if ( (ch)->substate == SUB_RESTRICTED ) \ { \ send_to_char( "You can't use this command from within another command.\r\n", ch ); \ return; \ } \ } while(0) /* Character macros. */ #define IS_AFFECTED( ch, sn ) ( xIS_SET( (ch)->affected_by, (sn) ) ) #define HAS_BODYPART( ch, part ) ( xIS_EMPTY( (ch)->xflags ) || xIS_SET( (ch)->xflags, (part) ) ) int get_ac( CHAR_DATA *ch ); int get_hitroll( CHAR_DATA *ch ); int get_damroll( CHAR_DATA *ch ); char *distime( time_t updated ); char *shorttime( time_t updated ); void remove_file( const char *filename ); bool valid_pfile( const char *filename ); bool can_use_path( CHAR_DATA *ch, const char *direct, const char *filename ); bool is_npc( CHAR_DATA *ch ); bool is_immortal( CHAR_DATA *ch ); bool is_avatar( CHAR_DATA *ch ); bool is_awake( CHAR_DATA *ch ); bool is_outside( CHAR_DATA *ch ); bool no_weather_sect( ROOM_INDEX_DATA *room ); bool is_drunk( CHAR_DATA *ch, int drunk ); bool is_devoted( CHAR_DATA *ch ); bool is_idle( CHAR_DATA *ch ); bool is_pkill( CHAR_DATA *ch ); bool can_pkill( CHAR_DATA *ch ); bool can_cast( CHAR_DATA *ch ); bool is_neutral( CHAR_DATA *ch ); bool is_evil( CHAR_DATA *ch ); bool is_good( CHAR_DATA *ch ); bool is_vampire( CHAR_DATA *ch ); bool in_clan( CHAR_DATA *ch ); bool is_clanned( CHAR_DATA *ch ); bool in_nation( CHAR_DATA *ch ); bool is_nationed( CHAR_DATA *ch ); bool in_council( CHAR_DATA *ch ); bool is_counciled( CHAR_DATA *ch ); void wait_state( CHAR_DATA *ch, int npulse ); bool can_go( ROOM_INDEX_DATA *room, int door ); bool is_floating( CHAR_DATA *ch ); bool is_valid_sn( int sn ); bool is_valid_herb( int sn ); bool is_valid_pers( int sn ); bool is_pacifist( CHAR_DATA *ch ); bool is_retired( CHAR_DATA *ch ); bool is_guest( CHAR_DATA *ch ); bool not_authed( CHAR_DATA *ch ); bool is_waiting_for_auth( CHAR_DATA *ch ); bool is_obj_stat( OBJ_DATA *obj, int stat ); bool can_wear( OBJ_DATA *obj, int part ); /* MudProg macros. -Thoric */ #define HAS_PROG( what, prog ) ( xIS_SET( (what)->progtypes, (prog) ) ) /* Description macros. */ char *pers( CHAR_DATA *ch, CHAR_DATA *looker ); #define PERS( ch, looker ) ( pers( (ch), (looker) ) ) char *morphpers( CHAR_DATA *ch, CHAR_DATA *looker ); #define MORPHPERS( ch, looker ) ( morphpers( (ch), (looker) ) ) #define log_string(txt) ( log_string_plus( (txt), LOG_NORMAL, PERM_LOG ) ) /* Structure for a command in the command lookup table. */ struct cmd_type { CMDTYPE *next; DO_FUN *do_fun; EXT_BV flags; struct timerset userec; char *name; char *fun_name; char *htext; int lag_count; /* count lag flags for this cmd - FB */ short position; short perm; short log; }; /* Structure for a social in the socials table. */ struct social_type { SOCIALTYPE *next; 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; }; /* Global constants. */ extern time_t last_restore_all_time; extern time_t boot_time; /* this should be moved down */ extern struct tm *new_boot_time; extern time_t new_boot_time_t; extern FILE *fpArea; extern char strArea[MIL]; extern struct race_type *race_table[MAX_RACE]; const char *dis_race_name( int race ); extern const struct liq_type liq_table[LIQ_MAX]; extern const char *attack_table[DAM_MAX]; extern const char **const s_message_table[DAM_MAX]; extern const char **const p_message_table[DAM_MAX]; extern const char *const skill_tname[]; extern short const movement_loss[SECT_MAX]; extern const char *dir_name[]; extern const char *where_name[MAX_WHERE_NAME]; extern const char *lodge_name[MAX_WHERE_NAME]; extern const short rev_dir[]; extern const int trap_door[]; extern const char *r_flags[]; extern const char *w_flags[]; extern const char *item_w_flags[]; extern const char *o_flags[]; extern const char *a_flags[]; extern const char *o_types[]; extern const char *a_types[]; extern const char *act_flags[]; extern const char *plr_flags[]; extern const char *pc_flags[]; extern const char *trap_flags[]; extern const char *ris_flags[]; extern const char *trig_flags[]; extern const char *part_flags[]; extern const char *defense_flags[]; extern const char *attack_flags[]; extern const char *area_flags[]; extern const char *ex_pmisc[]; extern const char *ex_pwater[]; extern const char *ex_pair[]; extern const char *ex_pearth[]; extern const char *ex_pfire[]; extern int const lang_array[]; extern const char *lang_names[]; extern const char *temp_settings[]; /* FB */ extern const char *precip_settings[]; extern const char *wind_settings[]; extern const char *preciptemp_msg[6][6]; extern const char *windtemp_msg[6][6]; extern const char *precip_msg[]; extern const char *wind_msg[]; extern const char *wear_locs[]; extern const char *ex_flags[]; /* Global variables. */ extern char *target_name; extern char *ranged_target_name; extern int numobjsloaded; extern int nummobsloaded; extern int physicalobjects; extern int last_pkroom; extern int num_descriptors; extern int num_corpses; extern struct system_data sysdata; extern int top_sn; extern int top_herb; extern int top_pers; extern CMDTYPE *command_hash[126]; extern CLASS_TYPE *class_table[MAX_CLASS]; const char *dis_class_name( int Class ); const char *dis_main_class_name( CHAR_DATA *ch ); extern SKILLTYPE *skill_table[MAX_SKILL]; extern SOCIALTYPE *social_index[126]; extern CHAR_DATA *cur_char; extern bool cur_char_died; extern ch_ret global_retcode; extern SKILLTYPE *herb_table[MAX_HERB]; extern SKILLTYPE *pers_table[MAX_PERS]; extern int cur_obj; extern bool cur_obj_extracted; extern obj_ret global_objcode; extern SHOP_DATA *first_shop, *last_shop; extern REPAIR_DATA *first_repair, *last_repair; extern BAN_DATA *first_ban, *last_ban; extern BAN_DATA *first_ban_class, *last_ban_class; extern BAN_DATA *first_ban_race, *last_ban_race; extern CHAR_DATA *first_char, *last_char; extern PC_DATA *first_pc, *last_pc; extern DESCRIPTOR_DATA *first_descriptor, *last_descriptor; extern OBJ_DATA *first_object, *last_object; extern OBJ_DATA *first_corpse, *last_corpse; extern CLAN_DATA *first_clan, *last_clan; extern COUNCIL_DATA *first_council, *last_council; extern AREA_DATA *first_area, *last_area; extern AREA_DATA *first_build, *last_build; extern AREA_DATA *first_asort, *last_asort; extern AREA_DATA *first_bsort, *last_bsort; extern AREA_DATA *first_area_name, *last_area_name; extern LANG_DATA *first_lang, *last_lang; extern CHAR_DATA *quitting_char; extern CHAR_DATA *loading_char; extern CHAR_DATA *saving_char; extern EXTRACT_CHAR_DATA *extracted_char_queue; extern OBJ_DATA *all_obj; extern OBJ_DATA *extracted_obj_queue; extern time_t current_time; extern bool fLogAll; extern WEATHER_DATA weather_info; extern int weath_unit; extern int rand_factor; extern int climate_factor; extern int neigh_factor; extern int max_vector; extern struct act_prog_data *mob_act_list; /* Command functions. */ DECLARE_DO_FUN( skill_notfound ); DECLARE_DO_FUN( do_aset ); DECLARE_DO_FUN( do_at ); DECLARE_DO_FUN( do_bash ); DECLARE_DO_FUN( do_bestow ); DECLARE_DO_FUN( do_bestowarea ); DECLARE_DO_FUN( do_cast ); DECLARE_DO_FUN( do_cedit ); DECLARE_DO_FUN( do_circle ); DECLARE_DO_FUN( do_close ); DECLARE_DO_FUN( do_dismount ); DECLARE_DO_FUN( do_echo ); DECLARE_DO_FUN( do_emote ); DECLARE_DO_FUN( do_examine ); DECLARE_DO_FUN( do_exits ); DECLARE_DO_FUN( do_feed ); DECLARE_DO_FUN( do_findnote ); DECLARE_DO_FUN( do_flee ); DECLARE_DO_FUN( do_for ); DECLARE_DO_FUN( do_force ); DECLARE_DO_FUN( do_forceclose ); DECLARE_DO_FUN( do_get ); DECLARE_DO_FUN( do_goto ); DECLARE_DO_FUN( do_gouge ); DECLARE_DO_FUN( do_help ); DECLARE_DO_FUN( do_lock ); DECLARE_DO_FUN( do_look ); DECLARE_DO_FUN( do_morphstat ); DECLARE_DO_FUN( do_mount ); DECLARE_DO_FUN( do_mstat ); DECLARE_DO_FUN( do_open ); DECLARE_DO_FUN( do_ostat ); DECLARE_DO_FUN( do_quaff ); DECLARE_DO_FUN( do_quit ); DECLARE_DO_FUN( do_recall ); DECLARE_DO_FUN( do_redit ); DECLARE_DO_FUN( do_restoretime ); DECLARE_DO_FUN( do_rstat ); DECLARE_DO_FUN( do_sacrifice ); DECLARE_DO_FUN( do_say ); DECLARE_DO_FUN( do_search ); DECLARE_DO_FUN( do_shout ); DECLARE_DO_FUN( do_sit ); DECLARE_DO_FUN( do_sleep ); DECLARE_DO_FUN( do_split ); DECLARE_DO_FUN( do_sset ); DECLARE_DO_FUN( do_stand ); DECLARE_DO_FUN( do_stat ); DECLARE_DO_FUN( do_steal ); DECLARE_DO_FUN( do_stun ); DECLARE_DO_FUN( do_tail ); DECLARE_DO_FUN( do_tell ); DECLARE_DO_FUN( do_transfer ); DECLARE_DO_FUN( do_unlock ); DECLARE_DO_FUN( do_wartalk ); DECLARE_DO_FUN( do_wimpy ); /* * Spell functions. * Defined in magic.c. */ DECLARE_SPELL_FUN( spell_null ); DECLARE_SPELL_FUN( spell_notfound ); DECLARE_SPELL_FUN( spell_dispel_evil ); DECLARE_SPELL_FUN( spell_dispel_magic ); DECLARE_SPELL_FUN( spell_earthquake ); DECLARE_SPELL_FUN( spell_energy_drain ); DECLARE_SPELL_FUN( spell_harm ); DECLARE_SPELL_FUN( spell_smaug ); DECLARE_SPELL_FUN( spell_teleport ); DECLARE_SPELL_FUN( spell_transport ); #include "dfiles.h" /* act_comm.c */ bool circle_follow( CHAR_DATA *ch, CHAR_DATA *victim ); void add_follower( CHAR_DATA *ch, CHAR_DATA *master ); void stop_follower( CHAR_DATA *ch ); void die_follower( CHAR_DATA *ch ); bool is_same_group( CHAR_DATA *ach, CHAR_DATA *bch ); void send_rip_screen( CHAR_DATA *ch ); void send_rip_title( CHAR_DATA *ch ); void send_ansi_title( CHAR_DATA *ch ); void send_ascii_title( CHAR_DATA *ch ); void to_channel( const char *argument, const char *channel, int level ); void to_channel_printf( const char *channel, int level, const char *fmt, ... ) __attribute__ ( ( format( printf, 3, 4 ) ) ); int knows_language( CHAR_DATA *ch, int language ); bool can_learn_lang( CHAR_DATA *ch, int language ); int countlangs( int languages ); char *translate( int percent, const char *in, const char *name ); char *obj_short( OBJ_DATA *obj ); /* act_info.c */ int get_door( char *arg ); char *num_punct( int foo ); char *un_num_punct( unsigned int foo ); char *double_punct( double foo ); char *format_obj_to_char( OBJ_DATA *obj, CHAR_DATA *ch, bool fShort ); void show_list_to_char( OBJ_DATA *list, CHAR_DATA *ch, bool fShort, bool fShowNothing ); bool is_ignoring( CHAR_DATA *ch, CHAR_DATA *ign_ch ); void show_race_line( CHAR_DATA *ch, CHAR_DATA *victim ); /* act_move.c */ void clear_vrooms( void ); EXIT_DATA *find_door( CHAR_DATA *ch, char *arg, bool quiet ); EXIT_DATA *get_exit( ROOM_INDEX_DATA *room, short dir ); EXIT_DATA *get_exit_to( ROOM_INDEX_DATA *room, short dir, int vnum ); EXIT_DATA *get_exit_num( ROOM_INDEX_DATA *room, short count ); ch_ret move_char( CHAR_DATA *ch, EXIT_DATA *pexit, int fall ); void teleport( CHAR_DATA *ch, int room, int flags ); short encumbrance( CHAR_DATA *ch, short move ); bool will_fall( CHAR_DATA *ch, int fall ); ch_ret pullcheck( CHAR_DATA *ch, int pulse ); const char *rev_exit( short vdir ); /* act_obj.c */ void damage_obj( OBJ_DATA *obj ); short get_obj_resistance( OBJ_DATA *obj ); void save_storage( ROOM_INDEX_DATA *room ); void obj_fall( OBJ_DATA *obj, bool through ); /* act_wiz.c */ bool create_new_race( int rcindex, char *argument ); bool create_new_class( int rcindex, char *argument ); ROOM_INDEX_DATA *find_location( CHAR_DATA *ch, char *arg ); void echo_to_all( short AT_COLOR, char *argument, short tar ); struct tm *update_time( struct tm * old_time ); void free_social( SOCIALTYPE * social ); void add_social( SOCIALTYPE * social ); void free_command( CMDTYPE * command ); void unlink_command( CMDTYPE * command ); void add_command( CMDTYPE * command ); /* boards.c */ void load_boards( void ); void free_note( NOTE_DATA *pnote ); /* build.c */ char *flag_string( int bitvector, const char *flagarray[] ); char *ext_flag_string( EXT_BV *bitvector, const char *flagarray[] ); char *ext_class_string( EXT_BV *bitvector ); char *ext_race_string( EXT_BV *bitvector ); int get_mpflag( char *flag ); int get_dir( char *txt ); char *strip_cr( char *str ); void RelCreate( relation_type, void *, void * ); void RelDestroy( relation_type, void *, void * ); void start_editing( CHAR_DATA *ch, char *data ); void stop_editing( CHAR_DATA *ch ); void edit_buffer( CHAR_DATA *ch, char *argument ); char *copy_buffer( CHAR_DATA *ch ); bool can_rmodify( CHAR_DATA *ch, ROOM_INDEX_DATA *room ); bool can_omodify( CHAR_DATA *ch, OBJ_DATA *obj ); bool can_mmodify( CHAR_DATA *ch, CHAR_DATA *mob ); bool can_medit( CHAR_DATA *ch, MOB_INDEX_DATA *mob ); void assign_area( CHAR_DATA *ch ); EXTRA_DESCR_DATA *SetRExtra( ROOM_INDEX_DATA *room, char *keywords ); bool DelRExtra( ROOM_INDEX_DATA *room, char *keywords ); EXTRA_DESCR_DATA *SetOExtra( OBJ_DATA *obj, char *keywords ); bool DelOExtra( OBJ_DATA *obj, char *keywords ); EXTRA_DESCR_DATA *SetOExtraProto( OBJ_INDEX_DATA *obj, char *keywords ); bool DelOExtraProto( OBJ_INDEX_DATA *obj, char *keywords ); bool fold_area( AREA_DATA *tarea, char *filename, bool install ); int get_oflag( char *flag ); int get_wflag( char *flag ); void init_area_weather( void ); void save_weatherdata( void ); /* clans.c */ CLAN_DATA *get_clan( char *name ); void load_clans( void ); void save_clan( CLAN_DATA *clan ); COUNCIL_DATA *get_council( char *name ); void load_councils( void ); void save_council( COUNCIL_DATA *council ); /* comm.c */ void close_socket( DESCRIPTOR_DATA *dclose, bool force ); void write_to_buffer( DESCRIPTOR_DATA *d, const char *txt, unsigned int length ); void write_to_pager( DESCRIPTOR_DATA *d, const char *txt, unsigned int length ); void send_to_char( const char *txt, CHAR_DATA *ch ); void send_to_pager( const char *txt, CHAR_DATA *ch ); void send_to_desc( const char *txt, DESCRIPTOR_DATA *d ); void ch_printf( CHAR_DATA *ch, const char *fmt, ... ) __attribute__ ( ( format( printf, 2, 3 ) ) ); void act_printf( short AType, CHAR_DATA *ch, void *arg1, void *arg2, int type, const char *fmt, ... ) __attribute__ ( ( format( printf, 6, 7 ) ) ); void playing_printf( CHAR_DATA *ch, const char *fmt, ... ) __attribute__ ( ( format( printf, 2, 3 ) ) ); void pager_printf( CHAR_DATA *ch, const char *fmt, ... ) __attribute__ ( ( format( printf, 2, 3 ) ) ); void act( short AType, const char *format, CHAR_DATA *ch, void *arg1, void *arg2, int type ); char *myobj( OBJ_DATA *obj ); /* reset.c */ RESET_DATA *make_reset( char letter, int extra, int arg1, int arg2, int arg3, short rchance ); RESET_DATA *add_reset( ROOM_INDEX_DATA *room, char letter, int extra, int arg1, int arg2, int arg3, short rchance ); void reset_area( AREA_DATA *pArea ); /* db.c */ void show_file( CHAR_DATA *ch, const char *filename ); char *str_dup( char const *str ); void boot_db( bool fCopyOver ); void area_update( void ); void add_char( CHAR_DATA *ch ); CHAR_DATA *create_mobile( MOB_INDEX_DATA *pMobIndex ); OBJ_DATA *create_object( OBJ_INDEX_DATA *pObjIndex, int level ); void clear_char( CHAR_DATA *ch ); void free_char( CHAR_DATA *ch ); char *get_extra_descr( const char *name, EXTRA_DESCR_DATA *ed ); MOB_INDEX_DATA *get_mob_index( int vnum ); OBJ_INDEX_DATA *get_obj_index( int vnum ); ROOM_INDEX_DATA *get_room_index( int vnum ); char fread_letter( FILE *fp ); int fread_number( FILE *fp ); unsigned int fread_un_number( FILE *fp ); time_t fread_time( FILE *fp ); double fread_double( FILE *fp ); EXT_BV fread_bitvector( FILE * fp ); void fwrite_bitvector( EXT_BV * bits, FILE * fp ); char *print_bitvector( EXT_BV * bits ); char *fread_string( FILE * fp ); char *fread_flagstring( FILE * fp ); void fread_to_eol( FILE * fp ); char *fread_word( FILE * fp ); char *fread_line( FILE * fp ); int number_range( int from, int to ); int number_percent( void ); int number_door( void ); int number_bits( int width ); int number_mm( void ); int dice( int number, int size ); int interpolate( int level, int value_00, int value_32 ); void smash_tilde( char *str ); void hide_tilde( char *str ); char *show_tilde( const char *str ); bool str_cmp( const char *astr, const char *bstr ); bool str_prefix( const char *astr, const char *bstr ); bool str_infix( const char *astr, const char *bstr ); bool str_suffix( const char *astr, const char *bstr ); char *capitalize( const char *str ); char *strlower( const char *str ); char *strupper( const char *str ); char *aoran( const char *str ); void append_file( CHAR_DATA *ch, const char *file, const char *str ); void append_to_file( const char *file, const char *str ); void bug( const char *str, ... ) __attribute__ ( ( format( printf, 1, 2 ) ) ); void log_string_plus( const char *str, short log_type, int level ); void log_printf_plus( short log_type, int level, const char *fmt, ... ) __attribute__ ( ( format( printf, 3, 4 ) ) ); void log_printf( const char *fmt, ... ) __attribute__ ( ( format( printf, 1, 2 ) ) ); ROOM_INDEX_DATA *make_room( int vnum, AREA_DATA *area ); OBJ_INDEX_DATA *new_object( int vnum ); ROOM_INDEX_DATA *new_room( int vnum ); OBJ_INDEX_DATA *make_object( int vnum, int cvnum, char *name ); MOB_INDEX_DATA *make_mobile( int vnum, int cvnum, char *name ); EXIT_DATA *make_exit( ROOM_INDEX_DATA *pRoomIndex, ROOM_INDEX_DATA *to_room, short door ); void load_area_file( AREA_DATA *tarea, char *filename ); void randomize_exits( ROOM_INDEX_DATA *room, short maxdir ); void make_wizlist( void ); void tail_chain( void ); void delete_room( ROOM_INDEX_DATA *room ); void delete_obj( OBJ_INDEX_DATA *obj ); void delete_mob( MOB_INDEX_DATA *mob ); void sort_area( AREA_DATA *pArea, bool proto ); void sort_area_by_name( AREA_DATA *pArea ); /* Fireblade */ size_t newmudstrlcpy( char *dst, const char *src, size_t siz, const char *filename, int line ); #define mudstrlcpy( dst, src, siz ) newmudstrlcpy( (dst), (src), (siz), __FILE__, __LINE__ ) size_t mudstrlcat( char *dst, const char *src, size_t siz ); /* fight.c */ void violence_update( void ); ch_ret multi_hit( CHAR_DATA *ch, CHAR_DATA *victim, int dt ); ch_ret projectile_hit( CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *wield, OBJ_DATA *projectile, short dist ); short ris_damage( CHAR_DATA *ch, short dam, int ris ); ch_ret damage( CHAR_DATA *ch, CHAR_DATA *victim, int dam, int dt, bool candameq ); void update_pos( CHAR_DATA *victim ); void set_fighting( CHAR_DATA *ch, CHAR_DATA *victim ); void stop_fighting( CHAR_DATA *ch, bool fBoth ); void free_fight( CHAR_DATA *ch ); CHAR_DATA *who_fighting( CHAR_DATA *ch ); void check_killer( CHAR_DATA *ch, CHAR_DATA *victim ); void death_cry( CHAR_DATA *ch ); void stop_hunting( CHAR_DATA *ch ); void stop_hating( CHAR_DATA *ch ); void stop_fearing( CHAR_DATA *ch ); void start_hunting( CHAR_DATA *ch, CHAR_DATA *victim ); void start_hating( CHAR_DATA *ch, CHAR_DATA *victim ); void start_fearing( CHAR_DATA *ch, CHAR_DATA *victim ); bool is_hunting( CHAR_DATA *ch, CHAR_DATA *victim ); bool is_hating( CHAR_DATA *ch, CHAR_DATA *victim ); bool is_fearing( CHAR_DATA *ch, CHAR_DATA *victim ); bool is_safe( CHAR_DATA *ch, CHAR_DATA *victim, bool SHOW ); bool legal_loot( CHAR_DATA *ch, CHAR_DATA *victim ); void raw_kill( CHAR_DATA *ch, CHAR_DATA *victim ); bool in_arena( CHAR_DATA *ch ); bool can_astral( CHAR_DATA *ch, CHAR_DATA *victim ); /* makeobjs.c */ OBJ_DATA *make_corpse( CHAR_DATA *ch, CHAR_DATA *killer ); void make_blood( CHAR_DATA *ch ); void make_bloodstain( ROOM_INDEX_DATA *room ); void make_scraps( OBJ_DATA *obj ); OBJ_DATA *make_trap( int v0, int v1, int v2, int v3 ); OBJ_DATA *create_money( int amount ); /* misc.c */ void actiondesc( CHAR_DATA *ch, OBJ_DATA *obj ); EXT_BV meb( int bit ); EXT_BV multimeb( int bit, ... ); /* mud_comm.c */ const char *mprog_type_to_name( int type ); /* mud_prog.c */ void mprog_wordlist_check( char *arg, CHAR_DATA *mob, CHAR_DATA *actor, OBJ_DATA *object, void *vo, int type ); void mprog_percent_check( CHAR_DATA *mob, CHAR_DATA *actor, OBJ_DATA *object, void *vo, int type ); void mprog_act_trigger( char *buf, CHAR_DATA *mob, CHAR_DATA *ch, OBJ_DATA *obj, void *vo ); void mprog_bribe_trigger( CHAR_DATA *mob, CHAR_DATA *ch, int amount ); void mprog_entry_trigger( CHAR_DATA *mob ); void mprog_give_trigger( CHAR_DATA *mob, CHAR_DATA *ch, OBJ_DATA *obj ); void mprog_greet_trigger( CHAR_DATA *mob ); void mprog_fight_trigger( CHAR_DATA *mob, CHAR_DATA *ch ); void mprog_hitprcnt_trigger( CHAR_DATA *mob, CHAR_DATA *ch ); void mprog_death_trigger( CHAR_DATA *killer, CHAR_DATA *mob ); void mprog_random_trigger( CHAR_DATA *mob ); void mprog_speech_trigger( char *txt, CHAR_DATA *mob ); void mprog_script_trigger( CHAR_DATA *mob ); void mprog_hour_trigger( CHAR_DATA *mob ); void mprog_time_trigger( CHAR_DATA *mob ); void progbug( const char *str, CHAR_DATA *mob ); void progbug_printf( CHAR_DATA *mob, const char *fmt, ... ) __attribute__ ( ( format( printf, 2, 3 ) ) ); void rset_supermob( ROOM_INDEX_DATA *room ); void release_supermob( void ); /* player.c */ void set_title( CHAR_DATA *ch, char *title ); /* polymorph.c */ void fwrite_morph_data( CHAR_DATA *ch, FILE * fp ); void fread_morph_data( CHAR_DATA *ch, FILE * fp ); void clear_char_morph( CHAR_MORPH * morph ); CHAR_MORPH *make_char_morph( MORPH_DATA *morph ); void free_char_morph( CHAR_MORPH * morph ); void setup_morph_vnum( void ); void unmorph_all( MORPH_DATA *morph ); MORPH_DATA *get_morph( char *arg ); MORPH_DATA *get_morph_vnum( int arg ); int do_morph_char( CHAR_DATA *ch, MORPH_DATA *morph ); MORPH_DATA *find_morph( CHAR_DATA *ch, char *target, bool is_cast ); void do_unmorph_char( CHAR_DATA *ch ); void send_morph_message( CHAR_DATA *ch, MORPH_DATA *morph, bool is_morph ); bool can_morph( CHAR_DATA *ch, MORPH_DATA *morph, bool is_cast ); void do_morph( CHAR_DATA *ch, MORPH_DATA *morph ); void do_unmorph( CHAR_DATA *ch ); void save_morphs( void ); void fwrite_morph( FILE * fp, MORPH_DATA *morph ); void load_morphs( void ); MORPH_DATA *fread_morph( FILE * fp ); void free_morph( MORPH_DATA *morph ); void morph_defaults( MORPH_DATA *morph ); void sort_morphs( void ); /* skills.c */ bool can_use_skill( CHAR_DATA *ch, int percent, int gsn ); bool check_skill( CHAR_DATA *ch, char *command, char *argument ); void learn_from_success( CHAR_DATA *ch, int sn ); void learn_from_failure( CHAR_DATA *ch, int sn ); bool check_parry( CHAR_DATA *ch, CHAR_DATA *victim ); bool check_dodge( CHAR_DATA *ch, CHAR_DATA *victim ); bool check_duck( CHAR_DATA *ch, CHAR_DATA *victim ); bool check_block( CHAR_DATA *ch, CHAR_DATA *victim ); bool check_shieldblock( CHAR_DATA *ch, CHAR_DATA *victim ); bool check_counter( CHAR_DATA *ch, CHAR_DATA *victim, int dam ); bool check_tumble( CHAR_DATA *ch, CHAR_DATA *victim ); bool check_grip( CHAR_DATA *ch, CHAR_DATA *victim ); void disarm( CHAR_DATA *ch, CHAR_DATA *victim ); void trip( CHAR_DATA *ch, CHAR_DATA *victim ); bool mob_fire( CHAR_DATA *ch, char *name ); CHAR_DATA *scan_for_victim( CHAR_DATA *ch, EXIT_DATA *pexit, char *name ); /* ban.c */ int add_ban( CHAR_DATA *ch, char *arg1, char *arg2, int btime, int type ); void show_bans( CHAR_DATA *ch, int type ); void save_banlist( void ); void load_banlist( void ); bool check_total_bans( DESCRIPTOR_DATA *d ); bool check_bans( CHAR_DATA *ch, int type ); /* host.c */ bool check_host( CHAR_DATA *ch ); /* handler.c */ AREA_DATA *get_area_obj( OBJ_INDEX_DATA *obj ); double get_exp( CHAR_DATA *ch ); double get_exp_worth( CHAR_DATA *ch ); double exp_level( CHAR_DATA *ch, int level ); short get_trust( CHAR_DATA *ch ); short get_age( CHAR_DATA *ch ); char *show_birthday( CHAR_DATA *ch ); short get_perm_stat( int stat, CHAR_DATA *ch ); short get_mod_stat( int stat, CHAR_DATA *ch ); short get_curr_stat( int stat, CHAR_DATA *ch ); short get_curr_str( CHAR_DATA *ch ); short get_curr_int( CHAR_DATA *ch ); short get_curr_wis( CHAR_DATA *ch ); short get_curr_dex( CHAR_DATA *ch ); short get_curr_con( CHAR_DATA *ch ); short get_curr_cha( CHAR_DATA *ch ); short get_curr_lck( CHAR_DATA *ch ); bool can_take_proto( CHAR_DATA *ch ); int can_carry_n( CHAR_DATA *ch ); int can_carry_w( CHAR_DATA *ch ); bool is_name( const char *str, char *namelist ); bool is_name_prefix( const char *str, char *namelist ); bool nifty_is_name( char *str, char *namelist ); bool nifty_is_name_prefix( char *str, char *namelist ); void affect_modify( CHAR_DATA *ch, AFFECT_DATA *paf, bool fAdd ); void affect_to_char( CHAR_DATA *ch, AFFECT_DATA *paf ); void affect_remove( CHAR_DATA *ch, AFFECT_DATA *paf ); void affect_strip( CHAR_DATA *ch, int sn ); bool is_affected( CHAR_DATA *ch, int sn ); void affect_join( CHAR_DATA *ch, AFFECT_DATA *paf ); void char_from_room( CHAR_DATA *ch ); void char_to_room( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex ); OBJ_DATA *obj_to_char( OBJ_DATA *obj, CHAR_DATA *ch ); void obj_from_char( OBJ_DATA *obj ); void apply_ac( CHAR_DATA *ch, OBJ_DATA *obj, int iWear, bool remove ); OBJ_DATA *get_eq_char( CHAR_DATA *ch, int iWear ); OBJ_DATA *get_eq_hold( CHAR_DATA *ch, int type ); void equip_char( CHAR_DATA *ch, OBJ_DATA *obj, int iWear ); void unequip_char( CHAR_DATA *ch, OBJ_DATA *obj ); int count_obj_list( OBJ_INDEX_DATA *pObjIndex, OBJ_DATA *list ); void obj_from_room( OBJ_DATA *obj ); OBJ_DATA *obj_to_room( OBJ_DATA *obj, ROOM_INDEX_DATA *pRoomIndex ); OBJ_DATA *obj_to_obj( OBJ_DATA *obj, OBJ_DATA *obj_to ); void obj_from_obj( OBJ_DATA *obj ); void extract_obj( OBJ_DATA *obj ); void extract_exit( ROOM_INDEX_DATA *room, EXIT_DATA *pexit ); void extract_room( ROOM_INDEX_DATA *room ); void clean_room( ROOM_INDEX_DATA *room ); void clean_obj( OBJ_INDEX_DATA *obj ); void clean_mob( MOB_INDEX_DATA *mob ); void clean_resets( ROOM_INDEX_DATA *room ); void extract_char( CHAR_DATA *ch, bool fPull ); CHAR_DATA *get_char_room( CHAR_DATA *ch, char *argument ); CHAR_DATA *get_char_world( CHAR_DATA *ch, char *argument ); OBJ_DATA *get_obj_type( OBJ_INDEX_DATA *pObjIndexData ); OBJ_DATA *get_obj_list( CHAR_DATA *ch, char *argument, OBJ_DATA *list ); OBJ_DATA *get_obj_list_rev( CHAR_DATA *ch, char *argument, OBJ_DATA *list ); OBJ_DATA *get_obj_carry( CHAR_DATA *ch, char *argument ); OBJ_DATA *get_obj_wear( CHAR_DATA *ch, char *argument ); OBJ_DATA *get_obj_vnum( CHAR_DATA *ch, int vnum ); OBJ_DATA *get_obj_here( CHAR_DATA *ch, char *argument ); OBJ_DATA *get_obj_world( CHAR_DATA *ch, char *argument ); int get_obj_number( OBJ_DATA *obj ); int get_obj_weight( OBJ_DATA *obj ); int get_real_obj_weight( OBJ_DATA *obj ); bool room_is_dark( ROOM_INDEX_DATA *pRoomIndex ); bool room_is_private( ROOM_INDEX_DATA *pRoomIndex ); CHAR_DATA *room_is_dnd( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex ); bool can_see( CHAR_DATA *ch, CHAR_DATA *victim ); bool can_see_obj( CHAR_DATA *ch, OBJ_DATA *obj ); bool can_drop_obj( CHAR_DATA *ch, OBJ_DATA *obj ); char *affect_loc_name( int location ); char *affect_bit_name( EXT_BV * vector ); char *extra_bit_name( EXT_BV * extra_flags ); char *magic_bit_name( int magic_flags ); const char *pull_type_name( int pulltype ); ch_ret check_for_trap( CHAR_DATA *ch, OBJ_DATA *obj, int flag ); ch_ret check_room_for_traps( CHAR_DATA *ch, int flag ); bool is_trapped( OBJ_DATA *obj ); OBJ_DATA *get_trap( OBJ_DATA *obj ); ch_ret spring_trap( CHAR_DATA *ch, OBJ_DATA *obj ); void set_base_stats( CHAR_DATA *ch ); void fix_char( CHAR_DATA *ch ); void showaffect( CHAR_DATA *ch, AFFECT_DATA *paf, bool extdisplay ); void set_cur_char( CHAR_DATA *ch ); bool char_died( CHAR_DATA *ch ); void queue_extracted_char( CHAR_DATA *ch, bool extract ); void clean_char_queue( void ); void add_timer( CHAR_DATA *ch, short type, int count, DO_FUN * fun, int value ); TIMER *get_timerptr( CHAR_DATA *ch, short type ); short get_timer( CHAR_DATA *ch, short type ); void extract_timer( CHAR_DATA *ch, TIMER * timer ); void remove_timer( CHAR_DATA *ch, short type ); bool in_soft_range( CHAR_DATA *ch, AREA_DATA *tarea ); bool in_hard_range( CHAR_DATA *ch, AREA_DATA *tarea ); bool chance( CHAR_DATA *ch, short percent ); OBJ_DATA *clone_object( OBJ_DATA *obj ); void split_obj( OBJ_DATA *obj, int num ); void separate_obj( OBJ_DATA *obj ); bool empty_obj( OBJ_DATA *obj, OBJ_DATA *destobj, ROOM_INDEX_DATA *destroom ); OBJ_DATA *find_obj( CHAR_DATA *ch, char *argument, bool carryonly ); bool ms_find_obj( CHAR_DATA *ch ); void worsen_mental_state( CHAR_DATA *ch, int mod ); void better_mental_state( CHAR_DATA *ch, int mod ); void add_kill( CHAR_DATA *ch, CHAR_DATA *mob ); int times_killed( CHAR_DATA *ch, CHAR_DATA *mob ); void update_aris( CHAR_DATA *ch ); AREA_DATA *get_area( char *name ); /* FB */ OBJ_DATA *get_objtype( CHAR_DATA *ch, short type ); /* interp.c */ bool check_pos( CHAR_DATA *ch, short position ); void interpret( CHAR_DATA *ch, char *argument ); bool is_number( char *arg ); int number_argument( char *argument, char *arg ); char *one_argument( char *argument, char *arg_first ); char *one_argument2( char *argument, char *arg_first ); SOCIALTYPE *find_social( const char *command ); CMDTYPE *find_command( char *command ); void hash_commands( void ); void start_timer( struct timeval * sttime ); time_t end_timer( struct timeval * sttime ); void send_timer( struct timerset * vtime, CHAR_DATA *ch ); void update_userec( struct timeval * time_used, struct timerset * userec ); /* magic.c */ bool process_spell_components( CHAR_DATA *ch, int sn ); int ch_slookup( CHAR_DATA *ch, const char *name ); int find_spell( CHAR_DATA *ch, const char *name, bool know ); int find_skill( CHAR_DATA *ch, const char *name, bool know ); int find_weapon( CHAR_DATA *ch, const char *name, bool know ); int find_tongue( CHAR_DATA *ch, const char *name, bool know ); int skill_lookup( const char *name ); int herb_lookup( const char *name ); int pers_lookup( const char *name ); int ch_pers_lookup( const char *pchar, const char *name ); int personal_lookup( CHAR_DATA *ch, const char *name ); int slot_lookup( int slot ); int bsearch_skill( const char *name, int first, int top ); int bsearch_skill_exact( const char *name, int first, int top ); int bsearch_skill_prefix( const char *name, int first, int top ); bool saves_poison_death( int level, CHAR_DATA *victim ); bool saves_wand( int level, CHAR_DATA *victim ); bool saves_para_petri( int level, CHAR_DATA *victim ); bool saves_breath( int level, CHAR_DATA *victim ); bool saves_spell_staff( int level, CHAR_DATA *victim ); ch_ret obj_cast_spell( int sn, int level, CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA *obj ); int dice_parse( CHAR_DATA *ch, int level, char *texp ); SKILLTYPE *get_skilltype( int sn ); short get_chain_type( ch_ret retcode ); ch_ret chain_spells( int sn, int level, CHAR_DATA *ch, void *vo, short chain ); /* save.c */ /* object saving defines for fread/write_obj. -- Altrag */ #define OS_CARRY 0 #define OS_CORPSE 1 #define OS_AUCTION 2 #define OS_LOCKER 3 void de_equipchar( CHAR_DATA *ch ); void re_equipchar( CHAR_DATA *ch ); void save_char_obj( CHAR_DATA *ch ); bool load_char_obj( DESCRIPTOR_DATA *d, char *name, bool preload, bool copyover ); void set_alarm( long seconds ); void requip_char( CHAR_DATA *ch ); void fwrite_obj( CHAR_DATA *ch, OBJ_DATA *obj, FILE *fp, int iNest, short os_type, bool hotboot ); void fread_obj( CHAR_DATA *ch, NOTE_DATA *pnote, FILE *fp, short os_type ); CHAR_DATA *fread_mobile( FILE *fp ); void fwrite_mobile( FILE *fp, CHAR_DATA *mob ); /* special.c */ SPEC_FUN *spec_lookup( char *name ); /* tables.c */ int get_skill( char *skilltype ); char *spell_name( SPELL_FUN *spell ); char *skill_name( DO_FUN *skill ); void load_skill_table( void ); void save_skill_table( bool autosave ); void sort_skill_table( void ); void remap_slot_numbers( void ); void load_socials( void ); void save_socials( void ); void load_commands( void ); void save_commands( void ); SPELL_FUN *spell_function( char *name ); DO_FUN *skill_function( char *name ); void write_class_file( int cl ); void write_race_file( int ra ); void save_classes( void ); void save_races( void ); void load_classes( void ); void load_herb_table( void ); void save_herb_table( bool autosave ); void load_pers_table( void ); void save_pers_table( bool autosave ); void load_races( void ); void load_tongues( void ); void asskills( const char *type ); /* track.c */ void found_prey( CHAR_DATA *ch, CHAR_DATA *victim ); void hunt_victim( CHAR_DATA *ch ); /* update.c */ void advance_level( CHAR_DATA *ch ); void gain_exp( CHAR_DATA *ch, double gain ); void gain_condition( CHAR_DATA *ch, int iCond, int value ); void check_alignment( CHAR_DATA *ch ); void update_handler( void ); void remove_portal( OBJ_DATA *portal ); void weather_update( void ); /* hashstr.c */ char *str_alloc( const char *str, const char *filename, int line ); char *quick_link( const char *str, const char *filename, int line ); int str_free( const char *str, const char *filename, int line ); void show_hash( int count ); char *hash_stats( void ); char *check_hash( const char *str ); void hash_dump( int hash ); void show_high_hash( int top ); bool in_hash_table( const char *str ); /* Map Structures */ DECLARE_DO_FUN( do_mapout ); /* mudprograms stuff */ extern CHAR_DATA *supermob; extern OBJ_DATA *supermob_obj; void oprog_speech_trigger( char *txt, CHAR_DATA *ch ); void oprog_random_trigger( OBJ_DATA *obj ); void oprog_wear_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); bool oprog_use_trigger( CHAR_DATA *ch, OBJ_DATA *obj, CHAR_DATA *vict, OBJ_DATA *targ ); void oprog_remove_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_sac_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_open_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_close_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_damage_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_repair_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_drop_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_put_trigger( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *container ); void oprog_zap_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); char *oprog_type_to_name( int type ); void oprog_greet_trigger( CHAR_DATA *ch ); void oprog_get_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_examine_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_pull_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); void oprog_push_trigger( CHAR_DATA *ch, OBJ_DATA *obj ); /* mud prog defines */ #define ERROR_PROG -1 #define IN_FILE_PROG -2 typedef enum { ACT_PROG, SPEECH_PROG, RAND_PROG, FIGHT_PROG, DEATH_PROG, HITPRCNT_PROG, ENTRY_PROG, GREET_PROG, ALL_GREET_PROG, GIVE_PROG, BRIBE_PROG, HOUR_PROG, TIME_PROG, WEAR_PROG, REMOVE_PROG, SAC_PROG, LOOK_PROG, EXA_PROG, ZAP_PROG, GET_PROG, DROP_PROG, DAMAGE_PROG, REPAIR_PROG, PULL_PROG, PUSH_PROG, SLEEP_PROG, REST_PROG, LEAVE_PROG, SCRIPT_PROG, USE_PROG, SCRAP_PROG, OPEN_PROG, CLOSE_PROG, PUT_PROG } prog_types; void rprog_leave_trigger( CHAR_DATA *ch ); void rprog_enter_trigger( CHAR_DATA *ch ); void rprog_sleep_trigger( CHAR_DATA *ch ); void rprog_rest_trigger( CHAR_DATA *ch ); void rprog_rfight_trigger( CHAR_DATA *ch ); void rprog_death_trigger( CHAR_DATA *ch ); void rprog_speech_trigger( char *txt, CHAR_DATA *ch ); void rprog_random_trigger( CHAR_DATA *ch ); void rprog_time_trigger( ROOM_INDEX_DATA *room ); void rprog_hour_trigger( ROOM_INDEX_DATA *room ); char *rprog_type_to_name( int type ); void oprog_act_trigger( char *buf, OBJ_DATA *mobj, CHAR_DATA *ch, OBJ_DATA *obj, void *vo ); void rprog_act_trigger( char *buf, ROOM_INDEX_DATA *room, CHAR_DATA *ch, OBJ_DATA *obj, void *vo ); #define LEARNED( ch, sn ) ( is_npc( (ch) ) ? 80 : URANGE( 0, ch->pcdata->learned[sn], 100 ) ) int get_possible_adept( CHAR_DATA *ch, int sn ); int get_adept( CHAR_DATA *ch, int sn );