/*
* file: structs.h , Structures . Part of DIKUMUD
* Usage: Declarations of central data structures
*/
#include <sys/types.h>
typedef char sbyte;
typedef unsigned char ubyte;
typedef short int sh_int;
typedef unsigned short int ush_int;
typedef char bool;
typedef char byte;
#define WLD_FILE_DIRECTORY "wld"
#define MAX_WLD_FILE_ENTRIES 25
#define MAX_DESC_LENGTH 1600 /* 80 chars, 20 rows */
#define MAX_MY_STRING_LENGTH 80 /* 80 chars, 1 row */
#define MAX_NUM_EXITS 6
#define DEFAULT_ROOM_NAME 0
#define DEFAULT_ROOM_ZONE 0
#define DEFAULT_ROOM_SECT 1
#define DEFAULT_ROOM_RIVER_DIR -1
#define DEFAULT_ROOM_RIVER_SPEED 0
#define DEFAULT_ROOM_TELE_TIME -1
#define DEFAULT_ROOM_TELE_TARG -1
#define DEFAULT_ROOM_TELE_LOOK 1
#define DEFAULT_ROOM_DESC '\0'
#define DEFAULT_ROOM_EX_DESC '\0'
#define DEFAULT_ROOM_FLAGS 0
#define DEFAULT_ROOM_SOUND '\0'
#define DEFAULT_ROOM_DISTANT_SOUND '\0'
#define DEFAULT_ROOM_LIGHT 0
#define DEFAULT_ROOM_FUNCT 0
#define DEFAULT_ROOM_CONTENTS 0
#define DEFAULT_ROOM_PEOPLE 0
#define DEFAULT_EXIT_GENERAL_DESCRIPTION '\0'
#define DEFAULT_EXIT_KEYWORD '\0'
#define DEFAULT_EXIT_EXIT_INFO 0
#define DEFAULT_EXIT_KEY -1
#define DEFAULT_EXIT_TO_ROOM 0
#define DEFAULT_EXIT_ALIAS '\0'
#define MAX_CONDITIONS 6
#define MAX_NUMBER_OF_CLASSES 12
#define MAGE_LEVEL_IND 0
#define CLERIC_LEVEL_IND 1
#define WARRIOR_LEVEL_IND 2
#define THIEF_LEVEL_IND 3
#define RANGER_LEVEL_IND 4
#define DRUID_LEVEL_IND 5
#define FIRE_DAMAGE 1
#define COLD_DAMAGE 2
#define ELEC_DAMAGE 3
#define BLOW_DAMAGE 4
#define ACID_DAMAGE 5
#define HATE_SEX 1
#define HATE_RACE 2
#define HATE_CHAR 4
#define HATE_CLASS 8
#define HATE_EVIL 16
#define HATE_GOOD 32
#define HATE_VNUM 64
#define FEAR_SEX 1
#define FEAR_RACE 2
#define FEAR_CHAR 4
#define FEAR_CLASS 8
#define FEAR_EVIL 16
#define FEAR_GOOD 32
#define FEAR_VNUM 64
#define OP_SEX 1
#define OP_RACE 2
#define OP_CHAR 3
#define OP_CLASS 4
#define OP_EVIL 5
#define OP_GOOD 6
#define OP_VNUM 7
#define ABS_MAX_LVL 61
#define MAX_MORT 50
#define LOW_IMMORTAL 51
#define IMMORTAL 51
#define CREATOR 52
#define SAINT 53
#define DEMIGOD 54
#define LESSER_GOD 55
#define GOD 56
#define GREATER_GOD 57
#define SILLYLORD 58
#define IMPLEMENTOR 59
#define LOKI 60
#define IMM_FIRE 1
#define IMM_COLD 2
#define IMM_ELEC 4
#define IMM_ENERGY 8
#define IMM_BLUNT 16
#define IMM_PIERCE 32
#define IMM_SLASH 64
#define IMM_ACID 128
#define IMM_POISON 256
#define IMM_DRAIN 512
#define IMM_SLEEP 1024
#define IMM_CHARM 2048
#define IMM_HOLD 4096
#define IMM_NONMAG 8192
#define IMM_PLUS1 16384
#define IMM_PLUS2 32768
#define IMM_PLUS3 65536
#define IMM_PLUS4 131072
#define PULSE_RIVER 10
#define PULSE_TELEPORT 10
#define PULSE_SOUND 30
#define MAX_ROOMS 5000
#define MAX_MAIL_MSGS 25 /* Max number of messages. */
#define MAX_MAIL_LENGTH 2048 /* that should be enough */
#define MAIL_PATH "mail" /* this is offset by the location of lib */
struct MailRecord
{
char from[40];
char title[40];
long int date_sent;
long int date_read;
char m[MAX_MAIL_LENGTH];
int keep;
int new;
};
struct Mail
{
int NumberOfMessages;
struct MailRecord *mail_record[MAX_MAIL_MSGS];
};
struct nodes
{
int visited;
int ancestor;
};
struct room_q
{
int room_nr;
struct room_q *next_q;
};
struct string_block {
int size;
char *data;
};
/*
memory stuff
*/
struct char_list {
struct char_data *op_ch;
char name[50];
struct char_list *next;
};
typedef struct {
struct char_list *clist;
int sex; /*number 1=male,2=female,3=both,4=neut,5=m&n,6=f&n,7=all*/
int race; /*number */
int class; /* 1=m,2=c,4=f,8=t */
int vnum; /* # */
int evil; /* align < evil = attack */
int good; /* align > good = attack */
} Opinion;
/*
old stuff.
*/
#define PULSE_ZONE 240
#define PULSE_MOBILE 25
#define PULSE_VIOLENCE 6
#define WAIT_SEC 4
#define WAIT_ROUND 4
#define MAX_STRING_LENGTH 4096
#define MAX_INPUT_LENGTH 160
#define MAX_MESSAGES 60
#define MAX_ITEMS 153
#define MESS_ATTACKER 1
#define MESS_VICTIM 2
#define MESS_ROOM 3
#define SECS_PER_REAL_MIN 60
#define SECS_PER_REAL_HOUR (60*SECS_PER_REAL_MIN)
#define SECS_PER_REAL_DAY (24*SECS_PER_REAL_HOUR)
#define SECS_PER_REAL_YEAR (365*SECS_PER_REAL_DAY)
#define SECS_PER_MUD_HOUR 75
#define HOURS_PER_MUD_DAY 24
#define DAYS_PER_MUD_MONTH 35
#define MONTHS_PER_MUD_YEAR 17
#define SECS_PER_MUD_DAY (HOURS_PER_MUD_DAY*SECS_PER_MUD_HOUR)
#define SECS_PER_MUD_MONTH (DAYS_PER_MUD_MONTH*SECS_PER_MUD_DAY)
#define SECS_PER_MUD_YEAR (MONTHS_PER_MUD_YEAR*SECS_PER_MUD_MONTH)
/* The following defs are for obj_data */
/* For 'type_flag' */
#define ITEM_LIGHT 1
#define ITEM_SCROLL 2
#define ITEM_WAND 3
#define ITEM_STAFF 4
#define ITEM_WEAPON 5
#define ITEM_FIREWEAPON 6
#define ITEM_MISSILE 7
#define ITEM_TREASURE 8
#define ITEM_ARMOR 9
#define ITEM_POTION 10
#define ITEM_WORN 11
#define ITEM_OTHER 12
#define ITEM_TRASH 13
#define ITEM_TRAP 14
#define ITEM_CONTAINER 15
#define ITEM_NOTE 16
#define ITEM_DRINKCON 17
#define ITEM_KEY 18
#define ITEM_FOOD 19
#define ITEM_MONEY 20
#define ITEM_PEN 21
#define ITEM_BOAT 22
#define ITEM_AUDIO 23
#define ITEM_BOARD 24
#define ITEM_KENNEL 25
/* Bitvector For 'wear_flags' */
#define ITEM_TAKE 1
#define ITEM_WEAR_FINGER 2
#define ITEM_WEAR_NECK 4
#define ITEM_WEAR_BODY 8
#define ITEM_WEAR_HEAD 16
#define ITEM_WEAR_LEGS 32
#define ITEM_WEAR_FEET 64
#define ITEM_WEAR_HANDS 128
#define ITEM_WEAR_ARMS 256
#define ITEM_WEAR_SHIELD 512
#define ITEM_WEAR_ABOUT 1024
#define ITEM_WEAR_WAISTE 2048
#define ITEM_WEAR_WRIST 4096
#define ITEM_WIELD 8192
#define ITEM_HOLD 16384
#define ITEM_WIELD_TWOH 32768
/* UNUSED, CHECKS ONLY FOR ITEM_LIGHT #define ITEM_LIGHT_SOURCE 65536 */
/* Bitvector for 'extra_flags' */
#define ITEM_GLOW 1
#define ITEM_HUM 2
#define ITEM_METAL 4 /* undefined... */
#define ITEM_MINERAL 8 /* undefined? */
#define ITEM_ORGANIC 16 /* undefined? */
#define ITEM_INVISIBLE 32
#define ITEM_MAGIC 64
#define ITEM_NODROP 128
#define ITEM_BLESS 256
#define ITEM_ANTI_GOOD 512 /* not usable by good people */
#define ITEM_ANTI_EVIL 1024 /* not usable by evil people */
#define ITEM_ANTI_NEUTRAL 2048 /* not usable by neutral people */
#define ITEM_ANTI_CLERIC 4096
#define ITEM_ANTI_MAGE 8192
#define ITEM_ANTI_THIEF 16384
#define ITEM_ANTI_FIGHTER 32768
#define ITEM_ANTI_RANGER 65536
#define ITEM_PARISH 131072
/* Some different kind of liquids */
#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_COKE 15
/* for containers - value[1] */
#define CONT_CLOSEABLE 1
#define CONT_PICKPROOF 2
#define CONT_CLOSED 4
#define CONT_LOCKED 8
struct extra_descr_data
{
char *keyword; /* Keyword in look/examine */
char *description; /* What to see */
struct extra_descr_data *next; /* Next in list */
};
#define MAX_OBJ_AFFECT 2 /* Used in OBJ_FILE_ELEM *DO*NOT*CHANGE* */
#define OBJ_NOTIMER -7000000
struct obj_flag_data
{
int value[4]; /* Values of the item (see list) */
byte type_flag; /* Type of item */
int wear_flags; /* Where you can wear it */
long extra_flags; /* 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 */
long bitvector; /* To set chars bits */
};
/* Used in OBJ_FILE_ELEM *DO*NOT*CHANGE* */
struct obj_affected_type {
byte location; /* Which ability to change (APPLY_XXX) */
byte modifier; /* How much it changes by */
};
/* ======================== Structure for object ========================= */
struct obj_data
{
sh_int item_number; /* Where in data-base */
int 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]; /* Which abilities in PC to change */
struct char_data *killer; /* for use with corpses */
sh_int char_vnum; /* for ressurection */
long char_f_pos; /* for ressurection */
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 */
byte eq_pos; /* what is the equip. pos? */
struct char_data *equipped_by; /* equipped by :NULL in room/conta */
struct obj_data *in_obj; /* In what object NULL when none */
struct obj_data *contains; /* Contains objects */
struct obj_data *next_content; /* For 'contains' lists */
struct obj_data *next; /* For the object list */
};
/* ======================================================================= */
/* The following defs are for room_data */
#define NOWHERE -1 /* nil reference for room-database */
/* Bitvector For 'room_flags' */
#define DARK 1
#define DEATH 2
#define NO_MOB 4
#define INDOORS 8
#define PEACEFUL 16 /* No fighting */
#define NO_STEAL 32 /* No Thieving */
#define NO_SUM 64 /* no summoning */
#define NO_MAGIC 128
#define TUNNEL 256 /* ? */
#define PRIVATE 512
#define SOUND 1024
/* For 'dir_option' */
#define NORTH 0
#define EAST 1
#define SOUTH 2
#define WEST 3
#define UP 4
#define DOWN 5
#define EX_ISDOOR 1
#define EX_CLOSED 2
#define EX_LOCKED 4
#define EX_SECRET 8
#define EX_TRAPPED 16
#define EX_PICKPROOF 32
#define EX_ALIAS 64
/* For 'Sector types' */
#define SECT_INSIDE 0
#define SECT_CITY 1
#define SECT_FIELD 2
#define SECT_FOREST 3
#define SECT_HILLS 4
#define SECT_MOUNTAIN 5
#define SECT_WATER_SWIM 6
#define SECT_WATER_NOSWIM 7
#define SECT_AIR 8
#define SECT_UNDERWATER 9
struct room_direction_data
{
char *general_description; /* When look DIR. */
char *keyword; /* for open/close */
sh_int exit_info; /* Exit info */
int key; /* Key's number (-1 for no key) */
int to_room; /* Where direction leeds (NOWHERE) */
char *exit_alias; /* exit aliasing */
};
/* ========================= Structure for room ========================== */
struct room_data
{
sh_int number; /* Rooms number */
sh_int zone; /* Room zone (for resetting) */
int sector_type; /* sector type (move/hide) */
int river_dir; /* dir of flow on river */
int river_speed; /* speed of flow on river */
int tele_time; /* time to a teleport */
int tele_targ; /* target room of a teleport */
char tele_look; /* do a do_look or not when
teleported */
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[6]; /* Directions */
sh_int room_flags; /* DEATH,DARK ... etc */
char *sound; /* sound made in this room */
char *distant_sound; /* sound made in ajoinging room */
byte light; /* Number of lightsources in room */
int (*funct)(); /* special procedure */
struct obj_data *contents; /* List of items in room */
struct char_data *people; /* List of NPC / PC in room */
};
/* ======================================================================== */
/* The following defs and structures are related to char_data */
/* For '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_WAISTE 13
#define WEAR_WRIST_R 14
#define WEAR_WRIST_L 15
#define WIELD 16
#define HOLD 17
#define WIELD_TWOH 18
/* For 'char_payer_data' */
/*
** #2 has been used!!!! Don't try using the last of the 3, because it is
** the keeper of active/inactive status for dead characters for ressurection!
*/
#define MAX_TOUNGE 3 /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
#define MAX_SKILLS 200 /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
#define MAX_WEAR 19
#define MAX_AFFECT 25 /* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
/* Predifined conditions */
#define DRUNK 0
#define FULL 1
#define THIRST 2
/* Bitvector for 'affected_by' */
#define AFF_BLIND 0x00000001
#define AFF_INVISIBLE 0x00000002
#define AFF_DETECT_EVIL 0x00000004
#define AFF_DETECT_INVISIBLE 0x00000008
#define AFF_DETECT_MAGIC 0x00000010
#define AFF_SENSE_LIFE 0x00000020
#define AFF_SILENCED 0x00000040 /* this may have to go */
#define AFF_SANCTUARY 0x00000080
#define AFF_GROUP 0x00000100
/* there is one missing here....... */
#define AFF_CURSE 0x00000400
#define AFF_FLYING 0x00000800
#define AFF_POISON 0x00001000
#define AFF_PROTECT_EVIL 0x00002000
#define AFF_PARALYSIS 0x00004000
#define AFF_INFRAVISION 0x00008000
#define AFF_WATERBREATH 0x00010000
#define AFF_SLEEP 0x00020000
#define AFF_DRUG_FREE 0x00040000 /* i.e. can't be stoned */
#define AFF_SNEAK 0x00080000
#define AFF_HIDE 0x00100000
#define AFF_FEAR 0x00200000 /* this may have to go */
#define AFF_CHARM 0x00400000
#define AFF_FOLLOW 0x00800000
#define AFF_UNDEF_1 0x01000000 /* saved objects?? */
#define AFF_TRUE_SIGHT 0x02000000
#define AFF_SCRYING 0x04000000 /* seeing other rooms */
#define AFF_FIRESHIELD 0x08000000
#define AFF_RIDE 0x10000000
#define AFF_UNDEF_6 0x20000000
#define AFF_UNDEF_7 0x40000000
#define AFF_UNDEF_8 0x80000000
/* modifiers to char's abilities */
#define APPLY_NONE 0
#define APPLY_STR 1
#define APPLY_DEX 2
#define APPLY_INT 3
#define APPLY_WIS 4
#define APPLY_CON 5
#define APPLY_SEX 6
#define APPLY_CLASS 7
#define APPLY_LEVEL 8
#define APPLY_AGE 9
#define APPLY_CHAR_WEIGHT 10
#define APPLY_CHAR_HEIGHT 11
#define APPLY_MANA 12
#define APPLY_HIT 13
#define APPLY_MOVE 14
#define APPLY_GOLD 15
#define APPLY_EXP 16
#define APPLY_AC 17
#define APPLY_ARMOR 17
#define APPLY_HITROLL 18
#define APPLY_DAMROLL 19
#define APPLY_SAVING_PARA 20
#define APPLY_SAVING_ROD 21
#define APPLY_SAVING_PETRI 22
#define APPLY_SAVING_BREATH 23
#define APPLY_SAVING_SPELL 24
#define APPLY_SAVE_ALL 25
#define APPLY_IMMUNE 26
#define APPLY_SUSC 27
#define APPLY_M_IMMUNE 28
#define APPLY_SPELL 29
#define APPLY_WEAPON_SPELL 30
#define APPLY_EAT_SPELL 31
#define APPLY_BACKSTAB 32
#define APPLY_KICK 33
#define APPLY_SNEAK 34
#define APPLY_HIDE 35
#define APPLY_BASH 36
#define APPLY_PICK 37
#define APPLY_STEAL 38
#define APPLY_TRACK 39
#define APPLY_HITNDAM 40
/* 'class' for PC's */
#define CLASS_ALL ( CLASS_MAGIC_USER | CLASS_CLERIC | CLASS_WARRIOR | CLASS_THIEF | CLASS_RANGER | CLASS_DRUID )
#define CLASS_MAGIC_USER 1
#define CLASS_CLERIC 2
#define CLASS_WARRIOR 4
#define CLASS_THIEF 8
#define CLASS_RANGER 16
#define CLASS_DRUID 32
/* sex */
#define SEX_NEUTRAL 0
#define SEX_MALE 1
#define SEX_FEMALE 2
/* positions */
#define POSITION_DEAD 0
#define POSITION_MORTALLYW 1
#define POSITION_INCAP 2
#define POSITION_STUNNED 3
#define POSITION_SLEEPING 4
#define POSITION_RESTING 5
#define POSITION_SITTING 6
#define POSITION_FIGHTING 7
#define POSITION_STANDING 8
#define POSITION_MOUNTED 9
/* for mobile actions: specials.act */
#define ACT_SPEC (1<<0) /* special routine to be called if exist */
#define ACT_SENTINEL (1<<1) /* this mobile not to be moved */
#define ACT_SCAVENGER (1<<2) /* pick up stuff lying around */
#define ACT_ISNPC (1<<3) /* This bit is set for use with IS_NPC() */
#define ACT_NICE_THIEF (1<<4) /* Set if a thief should NOT be killed */
#define ACT_AGGRESSIVE (1<<5) /* Set if automatic attack on NPC's */
#define ACT_STAY_ZONE (1<<6) /* MOB Must stay inside its own zone */
#define ACT_WIMPY (1<<7) /* MOB Will flee when injured, and if */
/* aggressive only attack sleeping players */
#define ACT_ANNOYING (1<<8) /* MOB is so utterly irritating that other */
/* monsters will attack it... */
#define ACT_HATEFUL (1<<9) /* MOB will attack a PC or NPC matching a */
/* specified name */
#define ACT_AFRAID (1<<10) /* MOB is afraid of a certain PC or NPC, */
/* and will always run away .... */
#define ACT_IMMORTAL (1<<11) /* MOB is a natural event, can't be kiled */
#define ACT_HUNTING (1<<12) /* MOB is hunting someone */
#define ACT_DEADLY (1<<13) /* MOB has deadly poison */
#define ACT_POLYSELF (1<<14) /* MOB is a polymorphed person */
#define ACT_POLYOTHER (1<<15) /* MOB is a polymorphed person */
#define ACT_GUARDIAN (1<<16) /* MOB will guard master */
#define ACT_USE_ITEM (1<<17) /* Will use an item when picked up */
#define ACT_FIGHTER_MOVES (1<<18) /* mob will attack like a fighter */
#define ACT_FOOD_PROVIDE (1<<19)
#define ACT_PROTECTOR (1<<20) /* mob will come to aid those that call */
/* this is inter zonal only */
#define ACT_MOUNT (1<<21) /* mobile can act as a mount */
/* For players : specials.act */
#define PLR_BRIEF (1<<0)
#define PLR_COMPACT (1<<2)
#define PLR_DONTSET (1<<3) /* Dont EVER set */
#define PLR_WIMPY (1<<4) /* character will flee when seriously injured */
#define PLR_NOHASSLE (1<<5) /* char won't be attacked by aggressives. */
#define PLR_STEALTH (1<<6) /* char won't be seen in a variety of situations */
#define PLR_HUNTING (1<<7) /* the player is hunt somene,doa track each look */
#define PLR_DEAF (1<<8) /* The player does not hear shouts */
#define PLR_ECHO (1<<9) /* Messages (tells, shout,etc) echo back */
#define PLR_NOSHOUT (1<<14)/* the player is not allowed to shout */
#define PLR_PAGER (1<<15)/* Use the Game pager or not */
#define PLR_LOGS (1<<16)/* Player is writing tothe board */
/* the following are used in ch->specials.new_act */
#define NEW_PLR_KILLOK (1<<0) /* players can kill each other */
#define NEW_PLR_NOTELL (1<<1) /* players can't recieve tells */
#define NEW_PLR_SUMMON (1<<2) /* This player is a pc killer */
#define NEW_PLR_TELEPORT (1<<3) /* This player is a pc thief */
#define PRIV_GIVE_PRIV (1<<0) /* can this player give privs */
#define PRIV_FORCE (1<<1)
#define PRIV_TRANS (1<<2) /* can the player use trans */
#define PRIV_SHUTDOWN (1<<3)
#define PRIV_LOAD_PURGE (1<<4) /* can the playe load-purge mobs/objects */
#define PRIV_RESTORE (1<<5) /* can the player Heal to full */
#define PRIV_RESTORE_A (1<<6) /* can the player heal everyone to full */
#define PRIV_STAT (1<<7) /* can you stat anything in the game */
#define PRIV_SWITCH (1<<8)
#define PRIV_REROLL_ADVANCE_PSET (1<<9) /* can the player use the commands
reroll to change stats
advance to give levels
pset to mod abilities
*/
#define PRIV_SNOOP (1<<10)
#define PRIV_STRING_TITLE (1<<11)
#define PRIV_BUILDER (1<<12) /* This priv will allow the player to use
form, which forms a room,
cust, which allows in game changes,
sroom, to save the rooms
lroom, to load the rooms
mkzone, to make a zone
show, to show lots of things
*/
#define PRIV_PRETITLE (1<<13)
#define PRIV_WHOD (1<<14)
#define PRIV_SYSTEM (1<<15)
#define PRIV_LOGS (1<<16)
#define PRIV_DEBUG (1<<17)
#define PRIV_GOTO_AT (1<<18)
/* 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 */
};
struct char_player_data
{
char *name; /* PC / NPC s name (kill ... ) */
char *short_descr; /* for 'actions' */
char *long_descr; /* for 'look'.. Only here for testing */
char *description; /* Extra descriptions */
char *pre_title;
char *title; /* PC / NPC s title */
char *poof_in;
char *poof_out;
char *guild_name;
char *sounds; /* Sound that the monster makes (in room) */
char *distant_snds; /* Sound that the monster makes (other) */
byte sex; /* PC / NPC s sex */
byte class; /* PC s class or NPC alignment */
byte level[6]; /* PC / NPC s level */
int hometown; /* PC s Hometown (zone) */
bool talks[MAX_TOUNGE]; /* PC s Tounges 0 for NPC */
struct time_data time; /* PC s AGE in days */
ubyte weight; /* PC / NPC s weight */
ubyte height; /* PC / NPC s height */
};
/* 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 d1; /* these are added for later use */
sbyte d2;
sbyte d3;
sbyte d4;
};
/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_point_data
{
sh_int mana;
sh_int max_mana;
sh_int hit;
sh_int max_hit; /* Max hit for NPC */
sh_int move;
sh_int max_move; /* Max move for NPC */
sh_int blah1;
sh_int blah2;
sh_int blah3;
sh_int armor; /* Internal -100..100, external -10..10 AC */
int gold; /* Money carried */
int bankgold; /* gold in the bank. */
int exp; /* The experience of the player */
int i1;
int i2;
int i3;
int i4;
int wiz_priv; /* what kind of wiz privs they get */
sbyte hitroll; /* Any bonus or penalty to the hit roll */
sbyte damroll; /* Any bonus or penalty to the damage roll */
sbyte s1;
sbyte s2;
sbyte s3;
};
struct char_special_data
{
struct char_data *fighting; /* Opponent */
struct char_data *hunting; /* Hunting person.. */
struct char_data *mounted_on;
struct char_data *ridden_by;
long affected_by; /* Bitvector for spells/skills affected by */
long long_blah1;
long long_blah2;
byte position; /* Standing or ... */
byte default_pos; /* Default position for NPC */
unsigned long act; /* flags for NPC behavior */
int new_act; /* new flags */
byte spells_to_learn; /* How many can you learn yet this level */
int carry_weight; /* Carried weight */
byte carry_items; /* Number of items carried */
int timer; /* Timer for update */
int was_in_room; /* storage of location for linkdead people */
sh_int apply_saving_throw[5]; /* Saving throw (Bonuses) */
sbyte conditions[3]; /* Drunk full etc. */
byte damnodice; /* The number of damage dice's */
byte damsizedice; /* The size of the damage dice's */
byte last_direction; /* The last direction the monster went */
int attack_type; /* The Attack Type Bitvector for NPC's */
int alignment; /* +-1000 for alignments */
};
/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct char_skill_data
{
byte learned; /* % chance for success 0 = not learned */
bool recognise; /* If you can recognise the scroll etc. */
};
/* Used in CHAR_FILE_U *DO*NOT*CHANGE* */
struct affected_type
{
short 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; /* Tells which bits to set (AFF_XXX) */
struct affected_type *next;
};
struct follow_type
{
struct char_data *follower;
struct follow_type *next;
};
/* ================== Structure for player/non-player ===================== */
struct char_data
{
sh_int nr; /* monster nr (pos in file) */
int in_room; /* Location */
struct Mail *mail;
/*
will need several new affects
maybe these should go in points? (and thusly be saved and restored?)
*/
sh_int immune; /* Immunities */
sh_int M_immune; /* Meta Immunities */
sh_int susc; /* susceptibilities */
sh_int mult_att; /* the number of attacks */
byte attackers;
sh_int fallspeed; /* rate of descent for player */
sh_int race;
sh_int hunt_dist; /* max dist the player can hunt */
unsigned short hatefield;
unsigned short fearfield;
Opinion hates;
Opinion fears;
sh_int persist;
int old_room;
int act_ptr; /* numeric argument for the mobile actions */
struct char_player_data player; /* Normal data */
struct char_ability_data abilities; /* Abilities */
struct char_ability_data tmpabilities;/* The abilities we will use */
struct char_point_data points; /* Points */
struct char_special_data specials; /* Special plaing constants */
struct char_skill_data skills[MAX_SKILLS]; /* Skills */
struct affected_type *affected; /* affected by what spells */
struct obj_data *equipment[MAX_WEAR]; /* Equipment array */
struct obj_data *carrying; /* Head of list */
struct descriptor_data *desc; /* NULL for mobiles */
struct char_data *orig; /* Special for polymorph */
struct char_data *next_in_room; /* For room->people - list */
struct char_data *next; /* For either monster or ppl-lis */
struct char_data *next_fighting; /* For fighting list */
struct follow_type *followers; /* List of chars followers */
struct char_data *master; /* Who is char following? */
int invis_level; /* visibility of gods */
};
/* ======================================================================== */
/* This structure is purely intended to be an easy way to transfer */
/* and return information about time (real or mudwise). */
struct time_info_data
{
/* Sorry Cyric... but you can't scanf("%d") into a char and expect it NOT
* to give a SIGBUS! get a clue!
*
* byte hours;
* byte day;
* byte month;
*/
int hours, day, month;
int year;
};
/* How much light is in the land ? */
#define SUN_DARK 0
#define SUN_RISE 1
#define SUN_LIGHT 2
#define SUN_SET 3
/* And how is the sky ? */
#define SKY_CLOUDLESS 0
#define SKY_CLOUDY 1
#define SKY_RAINING 2
#define SKY_LIGHTNING 3
/* Which way is the wind blowing */
#define WIND_NORTH 0
#define WIND_EAST 1
#define WIND_SOUTH 2
#define WIND_WEST 3
#define WIND_DEAD 4
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. */
int wind_speed; /* how hard is the wind blowing */
int wind_direction; /* which direction is the wind blowing */
int moon; /* what is the moon like */
};
/* ***********************************************************************
* file element for player file. BEWARE: Changing it will ruin the file *
*********************************************************************** */
struct char_file_u
{
char name[20];
char pwd[11];
char title[80];
char pre_title[80];
byte sex;
byte class;
char last_connect_site[49];
byte level[MAX_NUMBER_OF_CLASSES];
time_t birth; /* Time of birth of character */
int played; /* Number of secs played in total */
int race;
ubyte weight;
ubyte height;
char poof_in[80];
char poof_out[80];
sh_int hometown;
char description[240];
bool talks[MAX_TOUNGE];
sh_int load_room; /* Which room to place char in */
struct char_ability_data abilities;
struct char_point_data points;
struct char_skill_data skills[MAX_SKILLS];
struct affected_type affected[MAX_AFFECT];
/* specials */
int spells_to_learn;
int skills_to_learn;
int alignment;
time_t last_logon; /* Time (in secs) of last logon */
ubyte act; /* ACT Flags */
int new_act;
/* char data */
sh_int apply_saving_throw[5];
int conditions[MAX_CONDITIONS];
sh_int sh_save_blah1;
sh_int sh_save_blah2;
sh_int sh_save_blah3;
sh_int sh_save_blah4;
int save_blah1;
int save_blah2;
int save_blah3;
int save_blah4;
};
/* ***********************************************************************
* file element for object file. BEWARE: Changing it will ruin the file *
*********************************************************************** */
struct obj_cost { /* used in act.other.c:do_save as
well as in reception2.c */
int total_cost;
int no_carried;
bool ok;
};
#if 0
#define MAX_OBJ_SAVE 99 /* Used in OBJ_FILE_U *DO*NOT*CHANGE* */
struct obj_file_elem
{
sh_int item_number;
int value[4];
int extra_flags;
int weight;
int timer;
long bitvector;
struct obj_affected_type affected[MAX_OBJ_AFFECT];
};
struct obj_file_u
{
char owner[20]; /* Name of player */
int gold_left; /* Number of goldcoins left at owner */
int total_cost; /* The cost for all items, per day */
long last_update; /* Time in seconds, when last updated */
struct obj_file_elem objects[MAX_OBJ_SAVE];
};
#endif
/* ***********************************************************
* The following structures are related to descriptor_data *
*********************************************************** */
struct txt_block
{
char *text;
struct txt_block *next;
};
struct txt_q
{
struct txt_block *head;
struct txt_block *tail;
};
/* modes of connectedness */
#define CON_PLYNG 0
#define CON_NME 1
#define CON_NMECNF 2
#define CON_PWDNRM 3
#define CON_PWDGET 4
#define CON_PWDCNF 5
#define CON_QSEX 6
#define CON_RMOTD 7
#define CON_SLCT 8
#define CON_EXDSCR 9
#define CON_QCLASS 10
#define CON_LDEAD 11
#define CON_PWDNEW 12
#define CON_PWDNCNF 13
#define CON_WIZLOCK 14
#define CON_QRACE 15
#define CON_RACPAR 16
struct snoop_data
{
struct char_data *snooping;
/* Who is this char snooping */
struct char_data *snoop_by;
/* And who is snooping on this char */
};
struct descriptor_data
{
int descriptor; /* file descriptor for socket */
long idle_time; /* for ilde time duh */
char host[50]; /* hostname */
char usr_name[20]; /* user name */
char pwd[12]; /* password */
int pos; /* position in player-file */
int connected; /* mode of 'connectedness' */
int wait; /* wait for how many loops */
char *showstr_head; /* for paging through texts */
char *showstr_point; /* - */
char **str; /* for the modify-str system */
int max_str; /* - */
int prompt_mode; /* control of prompt-printing */
char buf[MAX_STRING_LENGTH]; /* buffer for raw input */
char last_input[MAX_INPUT_LENGTH];/* the last input */
struct txt_q output; /* q of strings to send */
struct txt_q input; /* q of unprocessed input */
struct char_data *character; /* linked to char */
struct char_data *original; /* original char */
struct snoop_data snoop; /* to snoop people. */
struct descriptor_data *next; /* link to next descriptor */
};
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 sanctuary_msg;/* messages when hit on sanctuary */
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. */
};
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 bonus skills a player can */
/* practice pr. level */
};
struct int_app_type
{
byte learn; /* how many % a player learns a spell/skill */
};
struct con_app_type
{
sh_int hitp;
sh_int shock;
};
/************************************************************/
typedef void (*funcp)();
struct breather {
int vnum;
int cost;
funcp *breaths;
};