/* ************************************************************************ * File: structs.h Part of CircleMUD * * Usage: header file for central structures and contstants * * * * All rights reserved. See license.doc for complete information. * * * * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University * * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * ************************************************************************ */ /* * Intended use of this macro is to allow external packages to work with * a variety of CircleMUD versions without modifications. For instance, * an IS_CORPSE() macro was introduced in pl13. Any future code add-ons * could take into account the CircleMUD version and supply their own * definition for the macro if used on an older version of CircleMUD. * You are supposed to compare this with the macro CIRCLEMUD_VERSION() * in utils.h. See there for usage. */ #define _CIRCLEMUD 0x030100 /* Major/Minor/Patchlevel - MMmmPP */ /* * If you want equipment to be automatically equipped to the same place * it was when players rented, set the define below to 1. Please note * that this will require erasing or converting all of your rent files. * And of course, you have to recompile everything. We need this feature * for CircleMUD to be complete but we refuse to break binary file * compatibility. */ #define USE_AUTOEQ 1 /* TRUE/FALSE aren't defined yet. */ /* CWG Version String */ #define CWG_VERSION "CWG Buddha - Version 0.11.30" /* preamble *************************************************************/ /* * As of bpl20, it should be safe to use unsigned data types for the * various virtual and real number data types. There really isn't a * reason to use signed anymore so use the unsigned types and get * 65,535 objects instead of 32,768. * * NOTE: This will likely be unconditionally unsigned later. */ #define CIRCLE_UNSIGNED_INDEX 0 /* 0 = signed, 1 = unsigned */ #if CIRCLE_UNSIGNED_INDEX # define IDXTYPE ush_int # define NOWHERE ((IDXTYPE)~0) # define NOTHING ((IDXTYPE)~0) # define NOBODY ((IDXTYPE)~0) #else # define IDXTYPE sh_int # define NOWHERE (-1) /* nil reference for rooms */ # define NOTHING (-1) /* nil reference for objects */ # define NOBODY (-1) /* nil reference for mobiles */ #endif #define SPECIAL(name) \ int (name)(struct char_data *ch, void *me, int cmd, char *argument) /* room-related defines *************************************************/ /* The cardinal directions: used as index to room_data.dir_option[] */ #define NORTH 0 #define EAST 1 #define SOUTH 2 #define WEST 3 #define UP 4 #define DOWN 5 #define NORTHWEST 6 #define NORTHEAST 7 #define SOUTHEAST 8 #define SOUTHWEST 9 #define INDIR 10 #define OUTDIR 11 /* Room flags: used in room_data.room_flags */ /* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */ #define ROOM_DARK 0 /* Dark */ #define ROOM_DEATH 1 /* Death trap */ #define ROOM_NOMOB 2 /* MOBs not allowed */ #define ROOM_INDOORS 3 /* Indoors */ #define ROOM_PEACEFUL 4 /* Violence not allowed */ #define ROOM_SOUNDPROOF 5 /* Shouts, gossip blocked */ #define ROOM_NOTRACK 6 /* Track won't go through */ #define ROOM_NOMAGIC 7 /* Magic not allowed */ #define ROOM_TUNNEL 8 /* room for only 1 pers */ #define ROOM_PRIVATE 9 /* Can't teleport in */ #define ROOM_GODROOM 10 /* LVL_GOD+ only allowed */ #define ROOM_HOUSE 11 /* (R) Room is a house */ #define ROOM_HOUSE_CRASH 12 /* (R) House needs saving */ #define ROOM_ATRIUM 13 /* (R) The door to a house */ #define ROOM_OLC 14 /* (R) Modifyable/!compress */ #define ROOM_BFS_MARK 15 /* (R) breath-first srch mrk */ #define ROOM_VEHICLE 16 /* Requires a vehicle to pass */ /* Exit info: used in room_data.dir_option.exit_info */ #define EX_ISDOOR (1 << 0) /* Exit is a door */ #define EX_CLOSED (1 << 1) /* The door is closed */ #define EX_LOCKED (1 << 2) /* The door is locked */ #define EX_PICKPROOF (1 << 3) /* Lock can't be picked */ #define EX_SECRET (1 << 4) /* The door is hidden */ #define NUM_EXIT_FLAGS 5 /* Sector types: used in room_data.sector_type */ #define SECT_INSIDE 0 /* Indoors */ #define SECT_CITY 1 /* In a city */ #define SECT_FIELD 2 /* In a field */ #define SECT_FOREST 3 /* In a forest */ #define SECT_HILLS 4 /* In the hills */ #define SECT_MOUNTAIN 5 /* On a mountain */ #define SECT_WATER_SWIM 6 /* Swimmable water */ #define SECT_WATER_NOSWIM 7 /* Water - need a boat */ #define SECT_FLYING 8 /* Wheee! */ #define SECT_UNDERWATER 9 /* Underwater */ /* char and mob-related defines *****************************************/ /* PC classes */ #define CLASS_UNDEFINED (-1) #define CLASS_MAGIC_USER 0 #define CLASS_CLERIC 1 #define CLASS_THIEF 2 #define CLASS_WARRIOR 3 #define NUM_CLASSES 4 /* This must be the number of classes!! */ #define RACE_UNDEFINED -1 #define RACE_HUMAN 0 #define RACE_ELF 1 #define RACE_GNOME 2 #define RACE_DWARF 3 #define NUM_RACES 4 /* Sex */ #define SEX_NEUTRAL 0 #define SEX_MALE 1 #define SEX_FEMALE 2 /* Positions */ #define POS_DEAD 0 /* dead */ #define POS_MORTALLYW 1 /* mortally wounded */ #define POS_INCAP 2 /* incapacitated */ #define POS_STUNNED 3 /* stunned */ #define POS_SLEEPING 4 /* sleeping */ #define POS_RESTING 5 /* resting */ #define POS_SITTING 6 /* sitting */ #define POS_FIGHTING 7 /* fighting */ #define POS_STANDING 8 /* standing */ /* Player flags: used by char_data.char_specials.act */ #define PLR_KILLER 0 /* Player is a player-killer */ #define PLR_THIEF 1 /* Player is a player-thief */ #define PLR_FROZEN 2 /* Player is frozen */ #define PLR_DONTSET 3 /* Don't EVER set (ISNPC bit) */ #define PLR_WRITING 4 /* Player writing (board/mail/olc) */ #define PLR_MAILING 5 /* Player is writing mail */ #define PLR_CRASH 6 /* Player needs to be crash-saved */ #define PLR_SITEOK 7 /* Player has been site-cleared */ #define PLR_NOSHOUT 8 /* Player not allowed to shout/goss */ #define PLR_NOTITLE 9 /* Player not allowed to set title */ #define PLR_DELETED 10 /* Player deleted - space reusable */ #define PLR_LOADROOM 11 /* Player uses nonstandard loadroom */ #define PLR_NOWIZLIST 12 /* Player shouldn't be on wizlist */ #define PLR_NODELETE 13 /* Player shouldn't be deleted */ #define PLR_INVSTART 14 /* Player should enter game wizinvis*/ #define PLR_CRYO 15 /* Player is cryo-saved (purge prog)*/ #define PLR_NOTDEADYET 16 /* (R) Player being extracted. */ /* Mobile flags: used by char_data.char_specials.act */ #define MOB_SPEC 0 /* Mob has a callable spec-proc */ #define MOB_SENTINEL 1 /* Mob should not move */ #define MOB_SCAVENGER 2 /* Mob picks up stuff on the ground */ #define MOB_ISNPC 3 /* (R) Automatically set on all Mobs */ #define MOB_AWARE 4 /* Mob can't be backstabbed */ #define MOB_AGGRESSIVE 5 /* Mob auto-attacks everybody nearby */ #define MOB_STAY_ZONE 6 /* Mob shouldn't wander out of zone */ #define MOB_WIMPY 7 /* Mob flees if severely injured */ #define MOB_AGGR_EVIL 8 /* Auto-attack any evil PC's */ #define MOB_AGGR_GOOD 9 /* Auto-attack any good PC's */ #define MOB_AGGR_NEUTRAL 10 /* Auto-attack any neutral PC's */ #define MOB_MEMORY 11 /* remember attackers if attacked */ #define MOB_HELPER 12 /* attack PCs fighting other NPCs */ #define MOB_NOCHARM 13 /* Mob can't be charmed */ #define MOB_NOSUMMON 14 /* Mob can't be summoned */ #define MOB_NOSLEEP 15 /* Mob can't be slept */ #define MOB_NOBASH 16 /* Mob can't be bashed (e.g. trees) */ #define MOB_NOBLIND 17 /* Mob can't be blinded */ #define MOB_NOKILL 18 /* Mob can't be killed */ #define MOB_NOTDEADYET 19 /* (R) Mob being extracted. */ #define MOB_SPARE2 20 /* (R) Mob being extracted. */ #define MOB_SPARE3 21 /* (R) Mob being extracted. */ #define MOB_SPARE4 22 /* (R) Mob being extracted. */ #define MOB_SPARE5 23 /* (R) Mob being extracted. */ #define MOB_SPARE6 24 /* (R) Mob being extracted. */ #define MOB_SPARE7 25 /* (R) Mob being extracted. */ #define MOB_SPARE8 26 /* (R) Mob being extracted. */ #define MOB_SPARE9 27 /* (R) Mob being extracted. */ #define MOB_SPARE10 28 /* (R) Mob being extracted. */ #define MOB_SPARE11 29 /* (R) Mob being extracted. */ #define MOB_SPARE12 30 /* (R) Mob being extracted. */ #define MOB_SPARE13 31 /* (R) Mob being extracted. */ #define MOB_SPARE14 32 /* (R) Mob being extracted. */ #define MOB_SPARE15 33 /* (R) Mob being extracted. */ #define MOB_SPARE16 34 /* (R) Mob being extracted. */ #define MOB_SPARE17 35 /* (R) Mob being extracted. */ /* flags: used by char_data.player_specials.pref */ #define PRF_BRIEF 0 /* Room descs won't normally be shown */ #define PRF_COMPACT 1 /* No extra CRLF pair before prompts */ #define PRF_DEAF 2 /* Can't hear shouts */ #define PRF_NOTELL 3 /* Can't receive tells */ #define PRF_DISPHP 4 /* Display hit points in prompt */ #define PRF_DISPMANA 5 /* Display mana points in prompt */ #define PRF_DISPMOVE 6 /* Display move points in prompt */ #define PRF_AUTOEXIT 7 /* Display exits in a room */ #define PRF_NOHASSLE 8 /* Aggr mobs won't attack */ #define PRF_QUEST 9 /* On quest */ #define PRF_SUMMONABLE 10 /* Can be summoned */ #define PRF_NOREPEAT 11 /* No repetition of comm commands */ #define PRF_HOLYLIGHT 12 /* Can see in dark */ #define PRF_COLOR_1 13 /* Color (low bit) */ #define PRF_COLOR_2 14 /* Color (high bit) */ #define PRF_NOWIZ 15 /* Can't hear wizline */ #define PRF_LOG1 16 /* On-line System Log (low bit) */ #define PRF_LOG2 17 /* On-line System Log (high bit) */ #define PRF_NOAUCT 18 /* Can't hear auction channel */ #define PRF_NOGOSS 19 /* Can't hear gossip channel */ #define PRF_NOGRATZ 20 /* Can't hear grats channel */ #define PRF_ROOMFLAGS 21 /* Can see room flags (ROOM_x) */ #define PRF_DISPAUTO 22 /* Show prompt HP, MP, MV when < 30%. */ #define PRF_CLS 23 /* Clear screen in OasisOLC */ #define PRF_BUILDWALK 24 /* Build new rooms when walking */ #define PRF_AFK 25 /* Player is AFK */ #define PRF_AUTOLOOT 26 /* Loot everything from a corpse */ #define PRF_AUTOGOLD 27 /* Loot gold from a corpse */ /* Affect bits: used in char_data.char_specials.saved.affected_by */ /* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */ #define AFF_DONTUSE 0 /* DON'T USE! */ #define AFF_BLIND 1 /* (R) Char is blind */ #define AFF_INVISIBLE 2 /* Char is invisible */ #define AFF_DETECT_ALIGN 3 /* Char is sensitive to align*/ #define AFF_DETECT_INVIS 4 /* Char can see invis chars */ #define AFF_DETECT_MAGIC 5 /* Char is sensitive to magic*/ #define AFF_SENSE_LIFE 6 /* Char can sense hidden life*/ #define AFF_WATERWALK 7 /* Char can walk on water */ #define AFF_SANCTUARY 8 /* Char protected by sanct. */ #define AFF_GROUP 9 /* (R) Char is grouped */ #define AFF_CURSE 10 /* Char is cursed */ #define AFF_INFRAVISION 11 /* Char can see in dark */ #define AFF_POISON 12 /* (R) Char is poisoned */ #define AFF_PROTECT_EVIL 13 /* Char protected from evil */ #define AFF_PROTECT_GOOD 14 /* Char protected from good */ #define AFF_SLEEP 15 /* (R) Char magically asleep */ #define AFF_NOTRACK 16 /* Char can't be tracked */ #define AFF_UNDEAD 17 /* Char is undead */ #define AFF_PARALIZE 18 /* Char is paralized */ #define AFF_SNEAK 19 /* Char can move quietly */ #define AFF_HIDE 20 /* Char is hidden */ #define AFF_UNUSED20 21 /* Room for future expansion */ #define AFF_CHARM 22 /* Char is charmed */ /* Modes of connectedness: used by descriptor_data.state */ #define CON_PLAYING 0 /* Playing - Nominal state */ #define CON_CLOSE 1 /* User disconnect, remove character. */ #define CON_GET_NAME 2 /* By what name ..? */ #define CON_NAME_CNFRM 3 /* Did I get that right, x? */ #define CON_PASSWORD 4 /* Password: */ #define CON_NEWPASSWD 5 /* Give me a password for x */ #define CON_CNFPASSWD 6 /* Please retype password: */ #define CON_QSEX 7 /* Sex? */ #define CON_QCLASS 8 /* Class? */ #define CON_RMOTD 9 /* PRESS RETURN after MOTD */ #define CON_MENU 10 /* Your choice: (main menu) */ #define CON_EXDESC 11 /* Enter a new description: */ #define CON_CHPWD_GETOLD 12 /* Changing passwd: get old */ #define CON_CHPWD_GETNEW 13 /* Changing passwd: get new */ #define CON_CHPWD_VRFY 14 /* Verify new password */ #define CON_DELCNF1 15 /* Delete confirmation 1 */ #define CON_DELCNF2 16 /* Delete confirmation 2 */ #define CON_DISCONNECT 17 /* In-game link loss (leave character) */ #define CON_OEDIT 18 /* OLC mode - object editor */ #define CON_REDIT 19 /* OLC mode - room editor */ #define CON_ZEDIT 20 /* OLC mode - zone info editor */ #define CON_MEDIT 21 /* OLC mode - mobile editor */ #define CON_SEDIT 22 /* OLC mode - shop editor */ #define CON_TEDIT 23 /* OLC mode - text editor */ #define CON_CEDIT 24 /* OLC mode - config editor */ #define CON_QRACE 25 /* Race? */ #define CON_ASSEDIT 26 /* OLC mode - Assemblies */ #define CON_TRIGEDIT 27 /* OLC mode - trigger edit */ #define CON_AEDIT 28 /* OLC mode - social (action) edit */ #define CON_RACE_HELP 29 /* Race Help */ #define CON_CLASS_HELP 30 /* Class Help */ /* Character equipment positions: used as index for char_data.equipment[] */ /* NOTE: Don't confuse these constants with the ITEM_ bitvectors which control the valid places you can wear a piece of equipment */ #define WEAR_LIGHT 0 #define WEAR_FINGER_R 1 #define WEAR_FINGER_L 2 #define WEAR_NECK_1 3 #define WEAR_NECK_2 4 #define WEAR_BODY 5 #define WEAR_HEAD 6 #define WEAR_LEGS 7 #define WEAR_FEET 8 #define WEAR_HANDS 9 #define WEAR_ARMS 10 #define WEAR_SHIELD 11 #define WEAR_ABOUT 12 #define WEAR_WAIST 13 #define WEAR_WRIST_R 14 #define WEAR_WRIST_L 15 #define WEAR_WIELD 16 #define WEAR_HOLD 17 #define WEAR_BACKPACK 18 #define WEAR_EAR_R 19 #define WEAR_EAR_L 20 #define WEAR_WINGS 21 #define WEAR_MASK 22 #define NUM_WEARS 23 /* This must be the # of eq positions!! */ /* object-related defines ********************************************/ /* Item types: used by obj_data.obj_flags.type_flag */ #define ITEM_LIGHT 1 /* Item is a light source */ #define ITEM_SCROLL 2 /* Item is a scroll */ #define ITEM_WAND 3 /* Item is a wand */ #define ITEM_STAFF 4 /* Item is a staff */ #define ITEM_WEAPON 5 /* Item is a weapon */ #define ITEM_FIREWEAPON 6 /* Unimplemented */ #define ITEM_MISSILE 7 /* Unimplemented */ #define ITEM_TREASURE 8 /* Item is a treasure, not gold */ #define ITEM_ARMOR 9 /* Item is armor */ #define ITEM_POTION 10 /* Item is a potion */ #define ITEM_WORN 11 /* Unimplemented */ #define ITEM_OTHER 12 /* Misc object */ #define ITEM_TRASH 13 /* Trash - shopkeeps won't buy */ #define ITEM_TRAP 14 /* Unimplemented */ #define ITEM_CONTAINER 15 /* Item is a container */ #define ITEM_NOTE 16 /* Item is note */ #define ITEM_DRINKCON 17 /* Item is a drink container */ #define ITEM_KEY 18 /* Item is a key */ #define ITEM_FOOD 19 /* Item is food */ #define ITEM_MONEY 20 /* Item is money (gold) */ #define ITEM_PEN 21 /* Item is a pen */ #define ITEM_BOAT 22 /* Item is a boat */ #define ITEM_FOUNTAIN 23 /* Item is a fountain */ #define ITEM_VEHICLE 24 /* Item is a vehicle */ #define ITEM_HATCH 25 /* Item is a vehicle hatch */ #define ITEM_WINDOW 26 /* Item is a vehicle window */ #define ITEM_CONTROL 27 /* Item is a vehicle control */ #define ITEM_PORTAL 28 /* Item is a portal */ /* Take/Wear flags: used by obj_data.obj_flags.wear_flags */ #define ITEM_WEAR_TAKE 0 /* Item can be takes */ #define ITEM_WEAR_FINGER 1 /* Can be worn on finger */ #define ITEM_WEAR_NECK 2 /* Can be worn around neck */ #define ITEM_WEAR_BODY 3 /* Can be worn on body */ #define ITEM_WEAR_HEAD 4 /* Can be worn on head */ #define ITEM_WEAR_LEGS 5 /* Can be worn on legs */ #define ITEM_WEAR_FEET 6 /* Can be worn on feet */ #define ITEM_WEAR_HANDS 7 /* Can be worn on hands */ #define ITEM_WEAR_ARMS 8 /* Can be worn on arms */ #define ITEM_WEAR_SHIELD 9 /* Can be used as a shield */ #define ITEM_WEAR_ABOUT 10 /* Can be worn about body */ #define ITEM_WEAR_WAIST 11 /* Can be worn around waist */ #define ITEM_WEAR_WRIST 12 /* Can be worn on wrist */ #define ITEM_WEAR_WIELD 13 /* Can be wielded */ #define ITEM_WEAR_HOLD 14 /* Can be held */ #define ITEM_WEAR_PACK 15 /* Can be worn as a backpack */ #define ITEM_WEAR_EAR 16 /* Can be worn as an earring */ #define ITEM_WEAR_WINGS 17 /* Can be worn as wings */ #define ITEM_WEAR_MASK 18 /* Can be worn as a mask */ /* Extra object flags: used by obj_data.obj_flags.extra_flags */ #define ITEM_GLOW 0 /* Item is glowing */ #define ITEM_HUM 1 /* Item is humming */ #define ITEM_NORENT 2 /* Item cannot be rented */ #define ITEM_NODONATE 3 /* Item cannot be donated */ #define ITEM_NOINVIS 4 /* Item cannot be made invis */ #define ITEM_INVISIBLE 5 /* Item is invisible */ #define ITEM_MAGIC 6 /* Item is magical */ #define ITEM_NODROP 7 /* Item is cursed: can't drop */ #define ITEM_BLESS 8 /* Item is blessed */ #define ITEM_ANTI_GOOD 9 /* Not usable by good people */ #define ITEM_ANTI_EVIL 10 /* Not usable by evil people */ #define ITEM_ANTI_NEUTRAL 11 /* Not usable by neutral people */ #define ITEM_ANTI_MAGIC_USER 12 /* Not usable by mages */ #define ITEM_ANTI_CLERIC 13 /* Not usable by clerics */ #define ITEM_ANTI_THIEF 14 /* Not usable by thieves */ #define ITEM_ANTI_WARRIOR 15 /* Not usable by warriors */ #define ITEM_NOSELL 16 /* Shopkeepers won't touch it */ #define ITEM_ANTI_HUMAN 17 /* Not usable by humans */ #define ITEM_ANTI_DWARF 18 /* Not usable by dwarves */ #define ITEM_ANTI_ELF 19 /* Not usable by elves */ #define ITEM_ANTI_GNOME 20 /* Not usable by gnomes */ #define ITEM_UNIQUE_SAVE 21 /* unique object save */ #define ITEM_2H 22 /* Item requires two hands */ /* Modifier constants used with obj affects ('A' fields) */ #define APPLY_NONE 0 /* No effect */ #define APPLY_STR 1 /* Apply to strength */ #define APPLY_DEX 2 /* Apply to dexterity */ #define APPLY_INT 3 /* Apply to intelligence */ #define APPLY_WIS 4 /* Apply to wisdom */ #define APPLY_CON 5 /* Apply to constitution */ #define APPLY_CHA 6 /* Apply to charisma */ #define APPLY_CLASS 7 /* Reserved */ #define APPLY_LEVEL 8 /* Reserved */ #define APPLY_AGE 9 /* Apply to age */ #define APPLY_CHAR_WEIGHT 10 /* Apply to weight */ #define APPLY_CHAR_HEIGHT 11 /* Apply to height */ #define APPLY_MANA 12 /* Apply to max mana */ #define APPLY_HIT 13 /* Apply to max hit points */ #define APPLY_MOVE 14 /* Apply to max move points */ #define APPLY_GOLD 15 /* Reserved */ #define APPLY_EXP 16 /* Reserved */ #define APPLY_AC 17 /* Apply to Armor Class */ #define APPLY_HITROLL 18 /* Apply to hitroll */ #define APPLY_DAMROLL 19 /* Apply to damage roll */ #define APPLY_SAVING_PARA 20 /* Apply to save throw: paralz */ #define APPLY_SAVING_ROD 21 /* Apply to save throw: rods */ #define APPLY_SAVING_PETRI 22 /* Apply to save throw: petrif */ #define APPLY_SAVING_BREATH 23 /* Apply to save throw: breath */ #define APPLY_SAVING_SPELL 24 /* Apply to save throw: spells */ #define APPLY_RACE 25 /* Apply to race */ #define APPLY_TURN_LEVEL 26 /* Apply to turn undead */ /* Container flags - value[1] */ #define CONT_CLOSEABLE (1 << 0) /* Container can be closed */ #define CONT_PICKPROOF (1 << 1) /* Container is pickproof */ #define CONT_CLOSED (1 << 2) /* Container is closed */ #define CONT_LOCKED (1 << 3) /* Container is locked */ /* Some different kind of liquids for use in values of drink containers */ #define LIQ_WATER 0 #define LIQ_BEER 1 #define LIQ_WINE 2 #define LIQ_ALE 3 #define LIQ_DARKALE 4 #define LIQ_WHISKY 5 #define LIQ_LEMONADE 6 #define LIQ_FIREBRT 7 #define LIQ_LOCALSPC 8 #define LIQ_SLIME 9 #define LIQ_MILK 10 #define LIQ_TEA 11 #define LIQ_COFFE 12 #define LIQ_BLOOD 13 #define LIQ_SALTWATER 14 #define LIQ_CLEARWATER 15 /* other miscellaneous defines *******************************************/ /* Player conditions */ #define DRUNK 0 #define FULL 1 #define THIRST 2 /* Sun state for weather_data */ #define SUN_DARK 0 #define SUN_RISE 1 #define SUN_LIGHT 2 #define SUN_SET 3 /* Sky conditions for weather_data */ #define SKY_CLOUDLESS 0 #define SKY_CLOUDY 1 #define SKY_RAINING 2 #define SKY_LIGHTNING 3 /* Rent codes */ #define RENT_UNDEF 0 #define RENT_CRASH 1 #define RENT_RENTED 2 #define RENT_CRYO 3 #define RENT_FORCED 4 #define RENT_TIMEDOUT 5 /* for the 128bits */ #define RF_ARRAY_MAX 4 #define PM_ARRAY_MAX 4 #define PR_ARRAY_MAX 4 #define AF_ARRAY_MAX 4 #define TW_ARRAY_MAX 4 #define EF_ARRAY_MAX 4 /* other #defined constants **********************************************/ /* * **DO**NOT** blindly change the number of levels in your MUD merely by * changing these numbers and without changing the rest of the code to match. * Other changes throughout the code are required. See coding.doc for * details. * * LVL_IMPL should always be the HIGHEST possible immortal level, and * LVL_IMMORT should always be the LOWEST immortal level. The number of * mortal levels will always be LVL_IMMORT - 1. */ #define LVL_IMPL 34 #define LVL_GRGOD 33 #define LVL_GOD 32 #define LVL_IMMORT 31 /* Builders that have access to the saveall command */ #define LVL_BUILDER LVL_GRGOD /* Level of the 'freeze' command */ #define LVL_FREEZE LVL_GRGOD #define NUM_OF_DIRS 12 /* number of directions in a room (nsewud) */ #define MAGIC_NUMBER (0x06) /* Arbitrary number that won't be in a string */ /* * OPT_USEC determines how many commands will be processed by the MUD per * second and how frequently it does socket I/O. A low setting will cause * actions to be executed more frequently but will increase overhead due to * more cycling to check. A high setting (e.g. 1 Hz) may upset your players * as actions (such as large speedwalking chains) take longer to be executed. * You shouldn't need to adjust this. */ #define OPT_USEC 100000 /* 10 passes per second */ #define PASSES_PER_SEC (1000000 / OPT_USEC) #define RL_SEC * PASSES_PER_SEC #define PULSE_ZONE (10 RL_SEC) #define PULSE_MOBILE (10 RL_SEC) #define PULSE_VIOLENCE ( 2 RL_SEC) #define PULSE_AUTOSAVE (60 RL_SEC) #define PULSE_IDLEPWD (15 RL_SEC) #define PULSE_SANITY (30 RL_SEC) #define PULSE_USAGE (5 * 60 RL_SEC) /* 5 mins */ #define PULSE_TIMESAVE (30 * 60 RL_SEC) /* should be >= SECS_PER_MUD_HOUR */ /* Variables for the output buffering system */ #define MAX_SOCK_BUF (12 * 1024) /* Size of kernel's sock buf */ #define MAX_PROMPT_LENGTH 96 /* Max length of prompt */ #define GARBAGE_SPACE 32 /* Space for **OVERFLOW** etc */ #define SMALL_BUFSIZE 1024 /* Static output buffer size */ /* Max amount of output that can be buffered */ #define LARGE_BUFSIZE (MAX_SOCK_BUF - GARBAGE_SPACE - MAX_PROMPT_LENGTH) #define HISTORY_SIZE 5 /* Keep last 5 commands. */ #define MAX_STRING_LENGTH 16384 #define MAX_INPUT_LENGTH 256 /* Max length per *line* of input */ #define MAX_RAW_INPUT_LENGTH 512 /* Max size of *raw* input */ #define MAX_MESSAGES 60 #define MAX_NAME_LENGTH 20 /* Used in char_file_u *DO*NOT*CHANGE* */ /* ** MAX_PWD_LENGTH changed from 10 to 30 for ascii test - Sam ** */ #define MAX_PWD_LENGTH 30 /* Used in char_file_u *DO*NOT*CHANGE* */ #define MAX_TITLE_LENGTH 80 /* Used in char_file_u *DO*NOT*CHANGE* */ #define HOST_LENGTH 30 /* Used in char_file_u *DO*NOT*CHANGE* */ #define EXDSCR_LENGTH 240 /* Used in char_file_u *DO*NOT*CHANGE* */ #define MAX_TONGUE 3 /* Used in char_file_u *DO*NOT*CHANGE* */ #define MAX_SKILLS 200 /* Used in char_file_u *DO*NOT*CHANGE* */ #define MAX_AFFECT 32 /* Used in char_file_u *DO*NOT*CHANGE* */ #define MAX_OBJ_AFFECT 6 /* Used in obj_file_elem *DO*NOT*CHANGE* */ #define MAX_NOTE_LENGTH 1000 /* arbitrary */ /* define the largest set of commands for a trigger */ #define MAX_CMD_LENGTH 16384 /* 16k should be plenty and then some */ /* * A MAX_PWD_LENGTH of 10 will cause BSD-derived systems with MD5 passwords * and GNU libc 2 passwords to be truncated. On BSD this will enable anyone * with a name longer than 5 character to log in with any password. If you * have such a system, it is suggested you change the limit to 20. * * Please note that this will erase your player files. If you are not * prepared to do so, simply erase these lines but heed the above warning. */ #if defined(HAVE_UNSAFE_CRYPT) && MAX_PWD_LENGTH == 10 #error You need to increase MAX_PWD_LENGTH to at least 20. #error See the comment near these errors for more explanation. #endif /********************************************************************** * Structures * **********************************************************************/ typedef signed char sbyte; typedef unsigned char ubyte; typedef signed short int sh_int; typedef unsigned short int ush_int; #if !defined(__cplusplus) /* Anyone know a portable method? */ typedef char bool; #endif #if !defined(CIRCLE_WINDOWS) || defined(LCC_WIN32) /* Hm, sysdep.h? */ typedef signed char byte; #endif /* Various virtual (human-reference) number types. */ typedef IDXTYPE room_vnum; typedef IDXTYPE obj_vnum; typedef IDXTYPE mob_vnum; typedef IDXTYPE zone_vnum; typedef IDXTYPE shop_vnum; typedef IDXTYPE trig_vnum; /* Various real (array-reference) number types. */ typedef IDXTYPE room_rnum; typedef IDXTYPE obj_rnum; typedef IDXTYPE mob_rnum; typedef IDXTYPE zone_rnum; typedef IDXTYPE shop_rnum; typedef IDXTYPE trig_rnum; /* * Bitvector type for 32 bit unsigned long bitvectors. * 'unsigned long long' will give you at least 64 bits if you have GCC. * * Since we don't want to break the pfiles, you'll have to search throughout * the code for "bitvector_t" and change them yourself if you'd like this * extra flexibility. */ typedef unsigned long int bitvector_t; /* Extra description: used in objects, mobiles, and rooms */ struct extra_descr_data { char *keyword; /* Keyword in look/examine */ char *description; /* What to see */ struct extra_descr_data *next; /* Next in list */ }; /* object-related structures ******************************************/ #define NUM_OBJ_VAL_POSITIONS 4 /* object flags; used in obj_data */ struct obj_flag_data { int value[NUM_OBJ_VAL_POSITIONS]; /* Values of the item (see list) */ byte type_flag; /* Type of item */ int level; /* Minimum level of object. */ int wear_flags[TW_ARRAY_MAX]; /* Where you can wear it */ int extra_flags[EF_ARRAY_MAX]; /* If it hums, glows, etc. */ int weight; /* Weigt what else */ int cost; /* Value when sold (gp.) */ int cost_per_day; /* Cost to keep pr. real day */ int timer; /* Timer for object */ int bitvector[AF_ARRAY_MAX]; /* To set chars bits */ }; /* Used in obj_file_elem *DO*NOT*CHANGE* */ struct obj_affected_type { byte location; /* Which ability to change (APPLY_XXX) */ sbyte modifier; /* How much it changes by */ }; /* ================== Memory Structure for Objects ================== */ struct obj_data { obj_vnum item_number; /* Where in data-base */ room_rnum in_room; /* In what room -1 when conta/carr */ struct obj_flag_data obj_flags;/* Object information */ struct obj_affected_type affected[MAX_OBJ_AFFECT]; /* affects */ char *name; /* Title of object :get etc. */ char *description; /* When in room */ char *short_description; /* when worn/carry/in cont. */ char *action_description; /* What to write when used */ struct extra_descr_data *ex_description; /* extra descriptions */ struct char_data *carried_by; /* Carried by :NULL in room/conta */ struct char_data *worn_by; /* Worn by? */ sh_int worn_on; /* Worn where? */ struct obj_data *in_obj; /* In what object NULL when none */ struct obj_data *contains; /* Contains objects */ long id; /* used by DG triggers */ struct trig_proto_list *proto_script; /* list of default triggers */ struct script_data *script; /* script info for the object */ struct obj_data *next_content; /* For 'contains' lists */ struct obj_data *next; /* For the object list */ }; /* ======================================================================= */ /* ====================== File Element for Objects ======================= */ /* BEWARE: Changing it will ruin rent files */ struct obj_file_elem { obj_vnum item_number; #if USE_AUTOEQ sh_int location; #endif int value[NUM_OBJ_VAL_POSITIONS]; int extra_flags[EF_ARRAY_MAX]; int weight; int timer; int bitvector[AF_ARRAY_MAX]; struct obj_affected_type affected[MAX_OBJ_AFFECT]; }; /* header block for rent files. BEWARE: Changing it will ruin rent files */ struct rent_info { int time; int rentcode; int net_cost_per_diem; int gold; int account; int nitems; int spare0; int spare1; int spare2; int spare3; int spare4; int spare5; int spare6; int spare7; }; /* ======================================================================= */ /* room-related structures ************************************************/ struct room_direction_data { char *general_description; /* When look DIR. */ char *keyword; /* for open/close */ sh_int /*bitvector_t*/ exit_info; /* Exit info */ obj_vnum key; /* Key's number (-1 for no key) */ room_rnum to_room; /* Where direction leads (NOWHERE) */ }; /* ================== Memory Structure for room ======================= */ struct room_data { room_vnum number; /* Rooms number (vnum) */ zone_rnum zone; /* Room zone (for resetting) */ int sector_type; /* sector type (move/hide) */ char *name; /* Rooms name 'You are ...' */ char *description; /* Shown when entered */ struct extra_descr_data *ex_description; /* for examine/look */ struct room_direction_data *dir_option[NUM_OF_DIRS]; /* Directions */ int room_flags[RF_ARRAY_MAX]; /* DEATH,DARK ... etc */ struct trig_proto_list *proto_script; /* list of default triggers */ struct script_data *script; /* script info for the object */ byte light; /* Number of lightsources in room */ SPECIAL(*func); struct obj_data *contents; /* List of items in room */ struct char_data *people; /* List of NPC / PC in room */ }; /* ====================================================================== */ /* char-related structures ************************************************/ /* memory structure for characters */ struct memory_rec_struct { long id; struct memory_rec_struct *next; }; typedef struct memory_rec_struct memory_rec; /* This structure is purely intended to be an easy way to transfer */ /* and return information about time (real or mudwise). */ struct time_info_data { int hours, day, month; sh_int year; }; /* These data contain information about a players time data */ struct time_data { time_t birth; /* This represents the characters age */ time_t logon; /* Time of the last logon (used to calculate played) */ int played; /* This is the total accumulated time played in secs */ }; /* The pclean_criteria_data is set up in config.c and used in db.c to determine the conditions which will cause a player character to be deleted from disk if the automagic pwipe system is enabled (see config.c). */ struct pclean_criteria_data { int level; /* max level for this time limit */ int days; /* time limit in days */ }; /* general player-related info, usually PC's and NPC's */ struct char_player_data { char passwd[MAX_PWD_LENGTH+1]; /* character's password */ char *name; /* PC / NPC s name (kill ... ) */ char *short_descr; /* for NPC 'actions' */ char *long_descr; /* for 'look' */ char *description; /* Extra descriptions */ char *title; /* PC / NPC's title */ byte sex; /* PC / NPC's sex */ byte chclass; /* PC / NPC's class */ byte level; /* PC / NPC's level */ sh_int hometown; /* PC s Hometown (zone) */ struct time_data time; /* PC's AGE in days */ ubyte weight; /* PC / NPC's weight */ ubyte height; /* PC / NPC's height */ byte race; /* PC / NPC's race */ }; /* Char's abilities. Used in char_file_u *DO*NOT*CHANGE* */ struct char_ability_data { sbyte str; sbyte str_add; /* 000 - 100 if strength 18 */ sbyte intel; sbyte wis; sbyte dex; sbyte con; sbyte cha; }; /* Char's points. Used in char_file_u *DO*NOT*CHANGE* */ struct char_point_data { sh_int mana; sh_int max_mana; /* Max mana for PC/NPC */ sh_int hit; sh_int max_hit; /* Max hit for PC/NPC */ sh_int move; sh_int max_move; /* Max move for PC/NPC */ sh_int armor; /* Internal -100..100, external -10..10 AC */ int gold; /* Money carried */ int bank_gold; /* Gold the char has in a bank account */ int exp; /* The experience of the player */ sbyte hitroll; /* Any bonus or penalty to the hit roll */ sbyte damroll; /* Any bonus or penalty to the damage roll */ }; /* * char_special_data_saved: specials which both a PC and an NPC have in * common, but which must be saved to the playerfile for PC's. * * WARNING: Do not change this structure. Doing so will ruin the * playerfile. If you want to add to the playerfile, use the spares * in player_special_data. */ struct char_special_data_saved { int alignment; /* +-1000 for alignments */ long idnum; /* player's idnum; -1 for mobiles */ int act[PM_ARRAY_MAX]; /* act flag for NPC's; player flag for PC's */ int affected_by[AF_ARRAY_MAX]; /* Bitvector for spells/skills affected by */ sh_int apply_saving_throw[5]; /* Saving throw (Bonuses) */ }; /* Special playing constants shared by PCs and NPCs which aren't in pfile */ struct char_special_data { struct char_data *fighting; /* Opponent */ struct char_data *hunting; /* Char hunted by this char */ byte position; /* Standing, fighting, sleeping, etc. */ int carry_weight; /* Carried weight */ byte carry_items; /* Number of items carried */ int timer; /* Timer for update */ struct char_special_data_saved saved; /* constants saved in plrfile */ }; /* * If you want to add new values to the playerfile, do it here. DO NOT * ADD, DELETE OR MOVE ANY OF THE VARIABLES - doing so will change the * size of the structure and ruin the playerfile. However, you can change * the names of the spares to something more meaningful, and then use them * in your new code. They will automatically be transferred from the * playerfile into memory when players log in. */ struct player_special_data_saved { byte skills[MAX_SKILLS+1]; /* array of skills plus skill 0 */ byte PADDING0; /* used to be spells_to_learn */ bool talks[MAX_TONGUE]; /* PC s Tongues 0 for NPC */ int wimp_level; /* Below this # of hit points, flee! */ byte freeze_level; /* Level of god who froze char, if any */ sh_int invis_level; /* level of invisibility */ room_vnum load_room; /* Which room to place char in */ int pref[PR_ARRAY_MAX]; /* preference flags for PC's. */ ubyte bad_pws; /* number of bad password attemps */ sbyte conditions[3]; /* Drunk, full, thirsty */ /* spares below for future expansion. You can change the names from 'sparen' to something meaningful, but don't change the order. */ ubyte spare0; ubyte spare1; ubyte spare2; ubyte spare3; ubyte spare4; ubyte spare5; int spells_to_learn; /* How many can you learn yet this level*/ int olc_zone; int speaking; int tlevel; int spare10; int spare11; int spare12; int spare13; int spare14; int spare15; int spare16; long spare17; long spare18; long spare19; long spare20; long spare21; }; /* * Specials needed only by PCs, not NPCs. Space for this structure is * not allocated in memory for NPCs, but it is for PCs and the portion * of it labelled 'saved' is saved in the playerfile. This structure can * be changed freely; beware, though, that changing the contents of * player_special_data_saved will corrupt the playerfile. */ struct player_special_data { struct player_special_data_saved saved; char *poofin; /* Description on arrival of a god. */ char *poofout; /* Description upon a god's exit. */ struct alias_data *aliases; /* Character's aliases */ long last_tell; /* idnum of last tell from */ void *last_olc_targ; /* olc control */ int last_olc_mode; /* olc control */ char *host; /* host of last logon */ }; /* Specials used by NPCs, not PCs */ struct mob_special_data { memory_rec *memory; /* List of attackers to remember */ byte attack_type; /* The Attack Type Bitvector for NPC's */ byte default_pos; /* Default position for NPC */ byte damnodice; /* The number of damage dice's */ byte damsizedice; /* The size of the damage dice's */ }; /* An affect structure. Used in char_file_u *DO*NOT*CHANGE* */ struct affected_type { sh_int type; /* The type of spell that caused this */ sh_int duration; /* For how long its effects will last */ sbyte modifier; /* This is added to apropriate ability */ byte location; /* Tells which ability to change(APPLY_XXX)*/ long /*bitvector_t*/ bitvector; /* Tells which bits to set (AFF_XXX) */ struct affected_type *next; }; /* An affect structure. Used in char_file_u *DO*NOT*CHANGE* */ struct affectedv_type { sh_int type; /* The type of spell that caused this */ sh_int duration; /* For how long its effects will last */ sbyte modifier; /* This is added to apropriate ability */ byte location; /* Tells which ability to change(APPLY_XXX)*/ long /*bitvector_t*/ bitvector; /* Tells which bits to set (AFF_XXX) */ struct affectedv_type *next; }; /* Structure used for chars following other chars */ struct follow_type { struct char_data *follower; struct follow_type *next; }; /* ================== Structure for player/non-player ===================== */ struct char_data { int pfilepos; /* playerfile pos */ mob_rnum nr; /* Mob's rnum */ room_rnum in_room; /* Location (real room number) */ room_rnum was_in_room; /* location for linkdead people */ int wait; /* wait for how many loops */ struct char_player_data player; /* Normal data */ struct char_ability_data real_abils; /* Abilities without modifiers */ struct char_ability_data aff_abils; /* Abils with spells/stones/etc */ struct char_point_data points; /* Points */ struct char_special_data char_specials; /* PC/NPC specials */ struct player_special_data *player_specials; /* PC specials */ struct mob_special_data mob_specials; /* NPC specials */ struct affected_type *affected; /* affected by what spells */ struct affectedv_type *affectedv; /* affected by what combat spells*/ struct obj_data *equipment[NUM_WEARS];/* Equipment array */ struct obj_data *carrying; /* Head of list */ struct descriptor_data *desc; /* NULL for mobiles */ long id; /* used by DG triggers */ struct trig_proto_list *proto_script; /* list of default triggers */ struct script_data *script; /* script info for the object */ struct script_memory *memory; /* for mob memory triggers */ struct char_data *next_in_room; /* For room->people - list */ struct char_data *next; /* For either monster or ppl-list */ struct char_data *next_fighting; /* For fighting list */ struct follow_type *followers; /* List of chars followers */ struct char_data *master; /* Who is char following? */ }; /* ====================================================================== */ /* ==================== File Structure for Player ======================= */ /* BEWARE: Changing it will ruin the playerfile */ struct char_file_u { /* char_player_data */ char name[MAX_NAME_LENGTH+1]; char description[EXDSCR_LENGTH]; char title[MAX_TITLE_LENGTH+1]; byte sex; byte chclass; byte level; sh_int hometown; time_t birth; /* Time of birth of character */ int played; /* Number of secs played in total */ ubyte weight; ubyte height; byte race; char pwd[MAX_PWD_LENGTH+1]; /* character's password */ struct char_special_data_saved char_specials_saved; struct player_special_data_saved player_specials_saved; struct char_ability_data abilities; struct char_point_data points; struct affected_type affected[MAX_AFFECT]; struct affectedv_type affectedv[MAX_AFFECT]; time_t last_logon; /* Time (in secs) of last logon */ char host[HOST_LENGTH+1]; /* host of last logon */ }; /* ====================================================================== */ /* descriptor-related structures ******************************************/ struct txt_block { char *text; int aliased; struct txt_block *next; }; struct txt_q { struct txt_block *head; struct txt_block *tail; }; struct descriptor_data { socket_t descriptor; /* file descriptor for socket */ char host[HOST_LENGTH+1]; /* hostname */ byte bad_pws; /* number of bad pw attemps this login */ byte idle_tics; /* tics idle at password prompt */ int connected; /* mode of 'connectedness' */ int desc_num; /* unique num assigned to desc */ time_t login_time; /* when the person connected */ char *showstr_head; /* for keeping track of an internal str */ char **showstr_vector; /* for paging through texts */ int showstr_count; /* number of pages to page through */ int showstr_page; /* which page are we currently showing? */ char **str; /* for the modify-str system */ char *backstr; /* backup string for modify-str system */ size_t max_str; /* maximum size of string in modify-str */ long mail_to; /* name for mail system */ int has_prompt; /* is the user at a prompt? */ char inbuf[MAX_RAW_INPUT_LENGTH]; /* buffer for raw input */ char last_input[MAX_INPUT_LENGTH]; /* the last input */ char small_outbuf[SMALL_BUFSIZE]; /* standard output buffer */ char *output; /* ptr to the current output buffer */ char **history; /* History of commands, for ! mostly. */ int history_pos; /* Circular array position. */ int bufptr; /* ptr to end of current output */ int bufspace; /* space left in the output buffer */ struct txt_block *large_outbuf; /* ptr to large buffer, if we need it */ struct txt_q input; /* q of unprocessed input */ struct char_data *character; /* linked to char */ struct char_data *original; /* original char if switched */ struct descriptor_data *snooping; /* Who is this char snooping */ struct descriptor_data *snoop_by; /* And who is snooping this char */ struct descriptor_data *next; /* link to next descriptor */ struct oasis_olc_data *olc; /* OLC info */ }; /* other miscellaneous structures ***************************************/ struct msg_type { char *attacker_msg; /* message to attacker */ char *victim_msg; /* message to victim */ char *room_msg; /* message to room */ }; struct message_type { struct msg_type die_msg; /* messages when death */ struct msg_type miss_msg; /* messages when miss */ struct msg_type hit_msg; /* messages when hit */ struct msg_type god_msg; /* messages when hit on god */ struct message_type *next; /* to next messages of this kind. */ }; struct message_list { int a_type; /* Attack type */ int number_of_attacks; /* How many attack messages to chose from. */ struct message_type *msg; /* List of messages. */ }; /* used in the socials */ struct social_messg { int act_nr; char *command; /* holds copy of activating command */ char *sort_as; /* holds a copy of a similar command or * abbreviation to sort by for the parser */ int hide; /* ? */ int min_victim_position; /* Position of victim */ int min_char_position; /* Position of char */ int min_level_char; /* Minimum level of socialing char */ /* No argument was supplied */ char *char_no_arg; char *others_no_arg; /* An argument was there, and a victim was found */ char *char_found; char *others_found; char *vict_found; /* An argument was there, as well as a body part, and a victim was found */ char *char_body_found; char *others_body_found; char *vict_body_found; /* An argument was there, but no victim was found */ char *not_found; /* The victim turned out to be the character */ char *char_auto; char *others_auto; /* If the char cant be found search the char's inven and do these: */ char *char_obj_found; char *others_obj_found; }; struct dex_skill_type { sh_int p_pocket; sh_int p_locks; sh_int traps; sh_int sneak; sh_int hide; }; struct dex_app_type { sh_int reaction; sh_int miss_att; sh_int defensive; }; struct str_app_type { sh_int tohit; /* To Hit (THAC0) Bonus/Penalty */ sh_int todam; /* Damage Bonus/Penalty */ sh_int carry_w; /* Maximum weight that can be carrried */ sh_int wield_w; /* Maximum weight that can be wielded */ }; struct wis_app_type { byte bonus; /* how many practices player gains per lev */ }; struct int_app_type { byte learn; /* how many % a player learns a spell/skill */ }; struct con_app_type { sh_int hitp; sh_int shock; }; struct weather_data { int pressure; /* How is the pressure ( Mb ) */ int change; /* How fast and what way does it change. */ int sky; /* How is the sky. */ int sunlight; /* And how much sun. */ }; /* * Element in monster and object index-tables. * * NOTE: Assumes sizeof(mob_vnum) >= sizeof(obj_vnum) */ struct index_data { mob_vnum vnum; /* virtual number of this mob/obj */ int number; /* number of existing units of this mob/obj */ SPECIAL(*func); char *farg; /* string argument for special function */ struct trig_data *proto; /* for triggers... the trigger */ }; /* linked list for mob/object prototype trigger lists */ struct trig_proto_list { int vnum; /* vnum of the trigger */ struct trig_proto_list *next; /* next trigger */ }; struct guild_info_type { int pc_class; room_vnum guild_room; int direction; }; /* * Config structs * */ /* * The game configuration structure used for configurating the game play * variables. */ struct game_data { int pk_allowed; /* Is player killing allowed? */ int pt_allowed; /* Is player thieving allowed? */ int level_can_shout; /* Level player must be to shout. */ int holler_move_cost; /* Cost to holler in move points. */ int tunnel_size; /* Number of people allowed in a tunnel.*/ int max_exp_gain; /* Maximum experience gainable per kill.*/ int max_exp_loss; /* Maximum experience losable per death.*/ int max_npc_corpse_time;/* Num tics before NPC corpses decompose*/ int max_pc_corpse_time; /* Num tics before PC corpse decomposes.*/ int idle_void; /* Num tics before PC sent to void(idle)*/ int idle_rent_time; /* Num tics before PC is autorented. */ int idle_max_level; /* Level of players immune to idle. */ int dts_are_dumps; /* Should items in dt's be junked? */ int load_into_inventory;/* Objects load in immortals inventory. */ int track_through_doors;/* Track through doors while closed? */ int immort_level_ok; /* Automatically level mortals to imm? */ int stack_mobs; /* Turn mob stacking on */ int stack_objs; /* Turn obj stacking on */ char *OK; /* When player receives 'Okay.' text. */ char *NOPERSON; /* 'No-one by that name here.' */ char *NOEFFECT; /* 'Nothing seems to happen.' */ }; /* * The rent and crashsave options. */ struct crash_save_data { int free_rent; /* Should the MUD allow rent for free? */ int max_obj_save; /* Max items players can rent. */ int min_rent_cost; /* surcharge on top of item costs. */ int auto_save; /* Does the game automatically save ppl?*/ int autosave_time; /* if auto_save=TRUE, how often? */ int crash_file_timeout; /* Life of crashfiles and idlesaves. */ int rent_file_timeout; /* Lifetime of normal rent files in days*/ }; /* * The room numbers. */ struct room_numbers { room_vnum mortal_start_room; /* vnum of room that mortals enter at. */ room_vnum immort_start_room; /* vnum of room that immorts enter at. */ room_vnum frozen_start_room; /* vnum of room that frozen ppl enter. */ room_vnum donation_room_1; /* vnum of donation room #1. */ room_vnum donation_room_2; /* vnum of donation room #2. */ room_vnum donation_room_3; /* vnum of donation room #3. */ }; /* * The game operational constants. */ struct game_operation { ush_int DFLT_PORT; /* The default port to run the game. */ char *DFLT_IP; /* Bind to all interfaces. */ char *DFLT_DIR; /* The default directory (lib). */ char *LOGNAME; /* The file to log messages to. */ int max_playing; /* Maximum number of players allowed. */ int max_filesize; /* Maximum size of misc files. */ int max_bad_pws; /* Maximum number of pword attempts. */ int siteok_everyone; /* Everyone from all sites are SITEOK.*/ int nameserver_is_slow; /* Is the nameserver slow or fast? */ int use_new_socials; /* Use new or old socials file ? */ int auto_save_olc; /* Does OLC save to disk right away ? */ char *MENU; /* The MAIN MENU. */ char *WELC_MESSG; /* The welcome message. */ char *START_MESSG; /* The start msg for new characters. */ }; /* * The Autowizard options. */ struct autowiz_data { int use_autowiz; /* Use the autowiz feature? */ int min_wizlist_lev; /* Minimun level to show on wizlist. */ }; /* * The main configuration structure; */ struct config_data { char *CONFFILE; /* config file path */ struct game_data play; /* play related config */ struct crash_save_data csd; /* rent and save related */ struct room_numbers room_nums; /* room numbers */ struct game_operation operation; /* basic operation */ struct autowiz_data autowiz; /* autowiz related stuff */ };