/**************************************************************************/
// structs.h - Majority of data structures used in game
/***************************************************************************
* The Dawn of Time v1.69r (c)1997-2004 Michael Garratt *
* >> A number of people have contributed to the Dawn codebase, with the *
* majority of code written by Michael Garratt - www.dawnoftime.org *
* >> To use this source code, you must fully comply with all the licenses *
* in licenses.txt... In particular, you may not remove this copyright *
* notice. *
***************************************************************************
* >> Original Diku Mud copyright (c)1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, & Katja Nyboe. *
* >> Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* >> ROM 2.4 is copyright 1993-1995 Russ Taylor and has been brought to *
* you by the ROM consortium: Russ Taylor(rtaylor@pacinfo.com), *
* Gabrielle Taylor(gtaylor@pacinfo.com) & Brian Moore(rom@rom.efn.org) *
* >> Oblivion 1.2 is copyright 1996 Wes Wagner *
**************************************************************************/
// Accommodate old non-Ansi compilers.
#ifndef __cplusplus
#define __cplusplus 1
#endif
#ifdef unix
// function type check
#define __ftc_printf_1__ __attribute__ ((format(printf,1,2)))
// The this pointer in a member function counts as the
// first argument for gcc's __attribute__ format usage
// mftc = member function type check - Kal :)
#define __mftc_printf_1__ __attribute__ ((format(printf,2,3)))
#define __mftc_printf_2__ __attribute__ ((format(printf,3,4)))
#define __mftc_printf_3__ __attribute__ ((format(printf,4,5)))
#else
#define __ftc_printf_1__
#define __mftc_printf_1__
#define __mftc_printf_2__
#define __mftc_printf_3__
#endif
char *FORMATF(const char *formatbuf, ...) __ftc_printf_1__;
// each spell function returns one of the following
enum SPRESULT {NO_MANA, HALF_MANA, FULL_MANA, DOUBLE_MANA, ALL_MANA};
enum RUNLEVEL_TYPE {RUNLEVEL_SHUTING_DOWN,
RUNLEVEL_MAIN_IO_LOOP, RUNLEVEL_BOOTING, RUNLEVEL_INIT};
enum PFILE_TYPE {PFILE_LOCKED,PFILE_NORMAL, PFILE_BUILDER, PFILE_TRUSTED,
PFILE_IMMORTAL, PFILE_REMORT_BACKUP, PFILE_NONE, PFILE_MULTIPLE};
enum CLASS_CAST_TYPE {CCT_NONE, CCT_MAGE, CCT_CLERIC, CCT_DRUID,
CCT_BARD, CCT_MAXCAST };
enum PREFERENCE_TYPE {PREF_OFF, PREF_AUTOSENSE, PREF_ON};
enum ACTTO_TYPE {TO_ROOM, TO_NOTVICT, TO_VICT, TO_CHAR, TO_ALL, TO_WORLD};
/**************************************************************************/
#if defined(TRADITIONAL) && !defined( __cplusplus)
#define const
#define args( list ) ( )
#define DECLARE_DO_FUN( fun ) void fun( )
#define DECLARE_SPEC_FUN( fun ) bool fun( )
#define DECLARE_OSPEC_FUN( fun ) bool fun( )
#define DECLARE_SPELL_FUN( fun ) SPRESULT fun( )
#define DECLARE_GAMBLE_FUN( fun ) void fun ( )
#else
#ifdef __cplusplus
#define DECLARE_DO_FUN( fun ) void fun ( char_data *, char *);
#define DECLARE_SPEC_FUN( fun ) bool fun ( char_data * );
#define DECLARE_OSPEC_FUN( fun ) bool fun ( obj_data *, char_data *);
#define DECLARE_SPELL_FUN( fun ) SPRESULT fun ( int, int, char_data *, void *, int );
#define DECLARE_GAMBLE_FUN( fun ) void fun ( char_data *, char_data *, char *);
#define args( list ) list
#else
#define args( list ) list
#define DECLARE_DO_FUN( fun ) DO_FUN fun
#define DECLARE_SPEC_FUN( fun ) SPEC_FUN fun
#define DECLARE_OSPEC_FUN( fun ) OSPEC_FUN fun
#define DECLARE_SPELL_FUN( fun ) SPELL_FUN fun
#define DECLARE_GAMBLE_FUN( fun ) GAMBLE_FUN fun
#endif
#endif
#ifdef WIN32
typedef int socklen_t;
#endif
#ifdef _AIX
#ifndef const
#define const
#endif
typedef int sh_int;
typedef int vn_int;
typedef int bool;
#define unix
#else
typedef short int sh_int;
typedef int vn_int;
// vn_int = vnum integer - makes easier changing vnum range
#ifndef __cplusplus
typedef unsigned char bool;
#endif
#endif
/**************************************************************************/
// all the type defs
typedef struct area_echo_data AREA_ECHO_DATA;
typedef struct affect_data AFFECT_DATA;
typedef struct area_data AREA_DATA;
typedef struct ban_data BAN_DATA;
typedef struct buf_type BUFFER;
typedef class char_data char_data;
typedef class connection_data connection_data;
typedef struct exit_data EXIT_DATA;
typedef struct extra_descr_data EXTRA_DESCR_DATA;
typedef struct room_echo_data ROOM_ECHO_DATA;
typedef struct kill_data KILL_DATA;
typedef struct mem_data MEM_DATA;
typedef struct mob_index_data MOB_INDEX_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 gen_data GEN_DATA;
typedef struct reset_data RESET_DATA;
typedef struct room_index_data ROOM_INDEX_DATA;
typedef struct shop_data SHOP_DATA;
typedef struct time_info_data TIME_INFO_DATA;
typedef struct weather_data WEATHER_DATA;
typedef struct moot_data MOOT_DATA;
typedef struct mprog_list MPROG_LIST;
typedef struct mprog_code MPROG_CODE;
typedef struct disabled_data DISABLED_DATA;
typedef struct objrestrict_list_type OBJRESTRICT_LIST_DATA;
typedef struct deity_type DEITY_DATA;
typedef struct herb_type HERB_DATA;
typedef struct mix_type mix_data;
typedef struct groupaff_type groupaff_data;
typedef struct affliction_type affliction_data;
// Function types.
typedef void DO_FUN( char_data *ch, char *argument );
typedef bool SPEC_FUN( char_data *ch );
typedef bool OSPEC_FUN( obj_data *obj, char_data *ch );
typedef void GAMBLE_FUN( char_data *ch, char_data *dealer, char *argument );
typedef SPRESULT SPELL_FUN( int sn, int level, char_data *ch, void *vo, int target );
/**************************************************************************/
// MUDFTP enums
typedef enum { FTP_NORMAL, FTP_PUSH, FTP_PUSH_WAIT } ftp_mode;
typedef enum {NDESC_NORMAL, NDESC_FTP } ndesc_t;
/**************************************************************************/
struct continent_type
{
char * name;
continent_type * next;
};
/**************************************************************************/
// bm_webrequest_data
#include "websrv.h"
/**************************************************************************/
// Descriptor (channel) class.
// bm_connection_data - bookmark for searching
#include "connect.h"
/**************************************************************************/
class duel_data;
class cInnData;
/**************************************************************************/
#include "clan.h"
/**************************************************************************/
// bm_pc_data - bookmark for searching
// Data which only PC's have.
struct pc_data
{
pc_data * next;
BUFFER * buffer;
bool valid;
PFILE_TYPE pfiletype;
char * pwd;
bool overwrite_pwd;
char * bamfin;
char * bamfout;
char * fadein;
char * fadeout;
char * surname;
char * birthplace;
char * haircolour;
char * eyecolour;
char * trait[9];
char * crest;
char * history;
char * spouse;
sh_int height;
sh_int weight;
time_t last_note;
time_t last_idea;
time_t last_penalty;
time_t last_news;
time_t last_changes;
time_t last_anote;
time_t last_inote;
time_t last_misc;
time_t last_snote;
time_t last_pknote;
time_t birthdate;
int birthyear_modifier;
int perm_hit;
int perm_mana;
int perm_move;
sh_int true_sex;
unsigned char security; // OLC Builder security
int last_level;
unsigned char condition [4];
unsigned char learned [MAX_SKILL];
time_t last_used [MAX_SKILL]; // last time some skills were used
sh_int points;
bool skillgroup_known [MAX_SKILLGROUP];
bool confirm_delete;
bool is_trying_aware;
char * alias[MAX_ALIAS];
char * alias_sub[MAX_ALIAS];
sh_int tired;
int xp_penalty;
sh_int sublevel, sublevel_trains, sublevel_pracs;
unsigned char olc_tab;
// nobles
sh_int diplomacy;
int dip_points;
sh_int autovote;
int in_favor; // -1 opposed, 0 abstained, 1 in favor
int votes_cast; // number of votes cast
int rp_count;
int voteupdate_count; // used to up the number of moots a noble has
int heroxp;
// automated rps system
bool did_ooc;
bool did_ic;
sh_int merit;
sh_int panic;
// quest points system
int qpoints;
// rps auditing system
sh_int emote_index;
char * emotecheck[RPS_AUDIT_SIZE];
time_t emotetimes[RPS_AUDIT_SIZE];
sh_int say_index;
char * saycheck[RPS_AUDIT_SIZE];
time_t saytimes[RPS_AUDIT_SIZE];
// magic system
long realms;
long spheres;
long elements;
long compositions;
long rp_points;
long fame;
// count the number of times they reroll
sh_int reroll_counter;
// karns system
sh_int karns;
sh_int next_karn_countdown;
// lay on hands skill
sh_int lays;
sh_int next_lay_countdown;
// vanish skill
time_t next_vanish;
// worship time for deities
time_t worship_time;
// lag for those that spam the who command
time_t last_who;
// for email banning verification
char * email;
char * created_from; // isp they created from
char * unlock_id;
char * webpage;
char * webpass; // password for accessing the webpage
// last login site
char * last_logout_site;
time_t last_logout_time;
// mob kill counters
int mkills;
int mdefeats;
// reduced system to slow down the power levelers
sh_int reduce_xp_percent;
sh_int reduce_rps_percent;
// object restriction system
int objrestrict; // bitmask of all groups that the char matches with
// pkill port stuff (traditionally port 9999)
sh_int p9999kills, p9999defeats;
// charnotes
char * charnotes;
// Council
long council;
// who related
char * who_text;
char * afk_message;
time_t unsafe_due_to_stealing_till;
char * title;
char * immtitle;
sh_int who_format;
// replay tell buffers
unsigned int next_replaytell;
char *replaytell_text[MAX_REPLAYTELL];
// replay room buffers
unsigned int next_replayroom;
char *replayroom_text[MAX_REPLAYROOM];
vn_int replayroom_lastevent_roomvnum;
// replay channels buffers
unsigned int next_replaychannels;
char *replaychannels_text[MAX_REPLAYCHANNELS];
char *immtalk_name; // for morts with immtalk
char *imm_role; // role text in an imms score
char *letter_workspace_text; // The text of a letter in progress
// colour related code
COLOUR_TEMPLATE_TYPE *custom_colour_scheme;
char *custom_colour; // colour profile loading/saving location
COLOUR_TYPE colourmode; // colour mode loading/saving location
bool flashing_disabled; // colour mode loading/saving location
int strip_colour_on_channel;
// channeloff flags
long channeloff;
PREFERENCE_TYPE preference_msp;
PREFERENCE_TYPE preference_mxp;
PREFERENCE_TYPE preference_dawnftp;
PREFERENCE_TYPE preference_colour_in_socials;
bool msp_enabled;
bool mxp_enabled;
// last x note post times
time_t note_post_time[MAX_NOTE_POST_TIME_INDEX];
char *help_history[MAX_HELP_HISTORY];
unsigned char help_history_index; // points to the location of a text copy of the last displayed help entry
unsigned char help_next_count; // records how many forward we can go before looping
char colour_code; // colour code used for text saved within this pfile
char *battlelag;
long pconfig; // config flags stored on pcdata
time_t thief_until; // time until they are considered a thief
time_t killer_until; // time until they are considered a killer
sh_int hero_level_count;
sh_int autoafkafter;
};
/**************************************************************************/
/* bm_char_data - bookmark for searching
* One character (PC or NPC).
*/
#include "chardata.h"
/**************************************************************************/
/*
* Prototype for a mob.
* This is the in-memory version of #MOBILES.
*/
struct mob_index_data
{
mob_index_data *next; // next in the hash table bucket
mob_index_data *listnext; // next in a complete list of indexes
SPEC_FUN *spec_fun;
GAMBLE_FUN *gamble_fun;
SHOP_DATA *pShop;
cInnData *pInnData;
MPROG_LIST *mprogs;
vn_int vnum;
sh_int group;
sh_int helpgroup;
sh_int count;
sh_int killed;
char * player_name;
char * short_descr;
char * long_descr;
char * description;
long act;
long act2;
long affected_by;
long affected_by2;
sh_int alliance;
sh_int tendency;
sh_int level;
sh_int hitroll;
sh_int hit[3];
sh_int mana[3];
sh_int damage[3];
sh_int ac[4];
sh_int dam_type;
long off_flags;
long imm_flags;
long res_flags;
long vuln_flags;
sh_int start_pos;
sh_int default_pos;
sh_int sex;
sh_int race;
long wealth;
long form;
long parts;
sh_int size;
char * material;
sh_int xp_mod;
area_data * area;
long mprog_flags;
char * import_text; // used for importing in areas
};
/**************************************************************************/
// Area Echo Struct
struct area_echo_data
{
AREA_ECHO_DATA *next;
int firsthour;
int lasthour;
int percentage;
char *echotext;
};
/**************************************************************************/
// Room echos struct
struct room_echo_data
{
ROOM_ECHO_DATA *next; // Next in list
int firsthour; // Start hour for room echos
int lasthour; // End hour for room echos
int percentage; // percent of time on the tick it will be shown
char *echotext; // text to be sent if it goes off
};
/**************************************************************************/
struct class_type
{
char * name; // the full name of the clss
char * short_name; // Three-letter name for 'who'
sh_int attr_prime[2]; // Prime attribute
sh_int skill_adept; // Maximum skill level
sh_int thac0_00; // Thac0 for level 0
sh_int thac0_32; // Thac0 for level 32
sh_int hp_min; // Min hp gained on gaining
sh_int hp_max; // Max hp gained on gaining
bool fMana; // Class gains mana on level
char * spinfo_letter; // letter used for spinfo
// "-" means can't use magic
char * default_group; // default skills gained
bool creation_selectable;
CLASS_CAST_TYPE class_cast_type;
sh_int core_clss; // index from the coreclass table
int object_restriction_index; // A->Z value set on objects to restrict
// core classes from using objects
int objrestrict; // New IC Object restriction system
long flags;
// dynamic data
sh_int class_id; // the ch->class value
bool already_loaded; // prevent reading in the same class twice
sh_int remort_number; // which remort this class belongs to
vn_int recall;
vn_int morgue;
// pose system implemented to replace storm's pose code
char *pose_self[MAX_LEVEL];
char *pose_others[MAX_LEVEL];
};
struct item_type
{
int type;
char * name;
};
struct totem_type
{
int totem;
char * name;
};
struct timefield_type
{
sh_int type;
sh_int lowhour;
sh_int highhour;
char * name;
};
struct modifier_type
{
sh_int type;
char * name;
sh_int modifier;
};
struct season_type
{
int season;
char * name;
};
struct weapon_type
{
char * name;
vn_int vnum_offset;
sh_int type;
sh_int *gsn;
};
struct wiznet_type
{
char * name;
long flag;
int level;
};
struct council_type
{
char * name;
long flag;
};
struct auto_type
{
char * name;
long flag;
char * offhelp;
char * onhelp;
};
struct attack_type
{
char * name; /* name */
char * noun; /* message */
int damage; /* damage clss */
};
/**************************************************************************/
/*
* Shop types.
*/
struct shop_data
{
SHOP_DATA * next; // Next shop in list
vn_int keeper; // Vnum of shop keeper mob
sh_int buy_type [MAX_TRADE]; // Item types shop will buy
sh_int profit_buy; // Cost multiplier for buying
sh_int profit_sell; // Cost multiplier for selling
sh_int open_hour; // First opening hour
sh_int close_hour; // First closing hour
};
/**************************************************************************/
// A kill structure (indexed by level).
struct kill_data
{
vn_int number;
vn_int killed;
};
/**************************************************************************/
struct moot_data
{
char_data *called_by; // character whom called the moot
char_data *moot_victim; // victim of the moot
char * moot_victim_name;
int moot_type; // type of moot
int scope; // value of xp lost ot gained if applicable
int votes_for;
int votes_against;// number of votes for and against measure
sh_int pulse; // how many pulses before moot is resolved
sh_int number_of_votes;
};
// Data for generating characters
// -- only used during generation
struct gen_data
{
GEN_DATA *next;
bool valid;
bool skill_chosen[MAX_SKILL];
bool skillgroup_chosen[MAX_SKILLGROUP];
int points_chosen;
};
/*
* Liquids.
*/
#define LIQ_WATER 0
struct liq_type
{
char * liq_name;
char * liq_color;
sh_int liq_affect[5];
};
/*
* Extra description data for a room or object.
*/
struct extra_descr_data
{
EXTRA_DESCR_DATA *next; /* Next in list */
bool valid;
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 *extra_descr;
AFFECT_DATA *affected;
int objrestrict; // bit mask for restrictions below - quicker lookup
OBJRESTRICT_LIST_DATA *restrict;
OSPEC_FUN *ospec_fun;
char *name;
char *short_descr;
char *description;
vn_int vnum;
sh_int reset_num;
char *material;
sh_int item_type;
int extra_flags;
int extra2_flags;
int wear_flags;
sh_int level;
sh_int condition;
sh_int count;
sh_int weight;
int cost;
int value[5];
int absolute_size;
sh_int relative_size;
int class_allowances;
area_data *area;
long trap_trig; // trap trigger type....
sh_int trap_dtype; // damage type trap will inflict
sh_int trap_charge; // amount of charges the trap has, should be kept low
sh_int trap_modifier; // difficulty rating of trap in % to be added to remove trap skill
long attune_id;
long attune_flags;
sh_int attune_modifier;
time_t attune_next;
};
// bm_object
// One object.
struct obj_data
{
int uid; // unique id
OBJ_DATA *next;
OBJ_DATA *next_content;
OBJ_DATA *contains;
OBJ_DATA *in_obj;
OBJ_DATA *on;
char_data *carried_by;
EXTRA_DESCR_DATA *extra_descr;
AFFECT_DATA *affected;
OBJ_INDEX_DATA *pIndexData;
ROOM_INDEX_DATA *in_room;
OSPEC_FUN *ospec_fun;
bool valid;
// bool enchanted; // removed - Kal, Jan 00.
bool no_affects; // replacement for enchanted - means more
bool chaos;
bool restrung; // true if the object is restrung puts R<vnum> in pfile
char *owner;
char *name;
char *short_descr;
char *description;
sh_int item_type;
int extra_flags;
int extra2_flags;
int wear_flags;
long lastdrop_id; // used to detect multilogging
char * lastdrop_remote_ip; // used to detect multilogging
sh_int wear_loc;
sh_int weight;
int cost;
sh_int level;
sh_int condition;
char *material;
int timer;
int absolute_size;
sh_int relative_size;
int value[5];
char *killer; // used to store killer's short on corpses
long dynamic; // dyn bits, never saved
long trap_trig; // trap trigger type....
sh_int trap_dtype; // damage type trap will inflict
sh_int trap_charge; // amount of charges the trap has, should be kept low
sh_int trap_modifier; // difficulty rating of trap in % to be added to remove trap skill
long attune_id;
long attune_flags;
sh_int attune_modifier;
time_t attune_next;
};
struct herb_type
{
HERB_DATA * next;
char * name;
sh_int area;
sh_int timefield;
sh_int month;
sh_int season;
continent_type * continent;
sh_int difficulty;
vn_int vnum_result;
long sector;
};
// Exit data.
struct exit_data
{
union
{
ROOM_INDEX_DATA *to_room;
int vnum;
} u1;
int exit_info;
int key;
char *keyword;
char *description;
exit_data *next;
int rs_flags;
};
/*
* Reset commands:
* '*': comment
* 'M': read a mobile
* 'O': read an object
* 'P': put object in object
* 'G': give object to mobile
* 'E': equip object to mobile
* 'D': set state of door
* 'R': randomize room exits
* 'S': stop (end of list)
*/
// Area-reset definition.
struct reset_data
{
RESET_DATA * next;
char command;
int arg1;
int arg2;
int arg3;
int arg4;
};
struct area_data
{
area_data * next;
area_data * vnumsort_next;
area_data * levelsort_next;
area_data * arealist_sort_next;
char * name;
char * short_name; // displayed by room descript
int age;
int nplayer;
bool empty;
char * file_name; // OLC
char * builders; // OLC Listing of
char * build_restricts[MAX_BUILD_RESTRICTS];
char * colour; // Colour in area list
char colourcode; // Colour code character used for colour codings
char * credits;
char * lcomment; // level comment - in place of lrange
int low_level; // recommend low level
int high_level; // recommend high level
int security; // OLC Value 1-9
vn_int min_vnum; // OLC Lower vnum
vn_int max_vnum; // OLC Upper vnum
int vnum; // OLC Area vnum
int olc_flags; // OLC
int area_flags; // OLC
int mapscale; // map scaling system
int maplevel; // map scaling system
sh_int version;
int vnum_offset;
continent_type * continent; // continent area is in
AREA_ECHO_DATA *echoes;
};
class C_track_data; // defined in track.h
struct locker_room_data;
// bm_room_index_data - bookmark for searching
// Room type.
struct room_index_data
{
ROOM_INDEX_DATA *next;
char_data *people;
sh_int number_in_room;
char_data *alarm;
OBJ_DATA *contents;
EXTRA_DESCR_DATA *extra_descr;
ROOM_ECHO_DATA *echoes;
area_data *area;
exit_data *exit[MAX_DIR];
char *name;
char *description;
char *owner;
vn_int vnum;
int room_flags;
int room2_flags;
sh_int light;
sh_int sector_type;
sh_int heal_rate;
sh_int mana_rate;
CClanType *clan;
RESET_DATA *reset_first;
RESET_DATA *reset_last;
AFFECT_DATA *affected;
long affected_by;
locker_room_data *lockers;
char *invite_list; // list of names allowed in room, saved in separate file
// yell system - uses a direction the yell sound was moving when entering
// the room, the amplitude and which yell it happens to be
short yell_enteredindir; // direction it was moving
float yell_amplitude;
time_t yellindex; // uses the current time to index a yell
time_t last_mined_in_room;
C_track_data *tracks;
char *msp_sound; // MSP Sound file
};
/**************************************************************************/
/**************************************************************************/
/*
* Skills include spells as a particular case.
*/
#include "sk_type.h"
/**************************************************************************/
struct group_type
{
char * oldname;
sh_int oldrating[MAX_CLASS];
char * oldspells[MAX_IN_GROUP];
};
/**************************************************************************/
struct skillgroup_type
{
char * name;
sh_int rating[MAX_CLASS];
sh_int skills[MAX_IN_GROUP+1];
sh_int skillsvalue[MAX_IN_GROUP+1];
long flags;
int remort; // which remort they have to be for it to become available
};
/**************************************************************************/
struct mprog_code
{
vn_int vnum;
char * code;
MPROG_CODE * next;
bool disabled;
char *disabled_text;
// since ver3sub1
area_data *area;
char * title; // title of the program
char * author;
char * last_editor;
time_t last_editdate;
};
/**************************************************************************/
struct mprog_list
{
int trig_type;
char * trig_phrase;
int pos_flags;
union {
mprog_code *prog;
vn_int temp_mpvnum;
};
MPROG_LIST *next;
};
/**************************************************************************/
// Structure for a social in the socials table.
struct social_old_type
{
char name[20];
char * char_no_arg;
char * others_no_arg;
char * char_found;
char * others_found;
char * vict_found;
char * char_not_found;
char * char_auto;
char * others_auto;
sh_int ic;
};
/**************************************************************************/
struct buf_type
{
BUFFER * next;
bool valid;
sh_int state; // error state of the buffer
int size; // size in bytes
char * string; // buffer's string
};
/**************************************************************************/
// Time and weather stuff.
struct time_info_data
{
int minute;
int hour;
int day;
int month;
int year;
};
/**************************************************************************/
struct weather_data
{
int mmhg;
int change;
int sky;
int sunlight;
int mage_castmod;
bool moon_getting_brighter;
};
/**************************************************************************/
struct note_data
{
note_data * next;
bool valid;
short type;
char * sender;
char * real_sender;
char * date;
char * to_list;
char * subject;
char * text;
time_t date_stamp;
};
/**************************************************************************/
enum APPLOC{
APPLY_NONE,
APPLY_ST,
APPLY_QU,
APPLY_PR,
APPLY_EM,
APPLY_IN,
APPLY_CO,
APPLY_AG,
APPLY_SD,
APPLY_ME,
APPLY_RE,
APPLY_SEX,
APPLY_CLASS,
APPLY_LEVEL,
APPLY_AGE,
APPLY_HEIGHT,
APPLY_WEIGHT,
APPLY_MANA,
APPLY_HIT,
APPLY_MOVE,
APPLY_GOLD,
APPLY_EXP,
APPLY_AC,
APPLY_HITROLL,
APPLY_DAMROLL,
APPLY_SAVES
};
/**************************************************************************/
struct affect_data
{
AFFECT_DATA *next;
bool valid;
sh_int where;
sh_int type; // the sn of the affect, -1 if not sn based
sh_int level; // level of the affect, ch must be level or
// greater to get the affect
sh_int duration; // how long it lasts
APPLOC location;
sh_int modifier;
int bitvector;
};
/**************************************************************************/
struct groupaff_type
{
groupaff_data *next;
bool valid;
sh_int where;
sh_int type; // the sn of the affect, -1 if not sn based
sh_int level; // level of the affect, ch must be level or
// greater to get the affect
sh_int duration; // how long it lasts
sh_int location;
sh_int modifier;
int bitvector;
int flag; // misc stuff
};
/**************************************************************************/
struct affliction_type
{
affliction_data *next;
bool valid;
sh_int where;
sh_int type; // the sn of the affect, -1 if not sn based
sh_int level; // level of the affect, ch must be level or
// greater to get the affect
sh_int duration; // how long it lasts
sh_int location;
sh_int modifier;
int bitvector;
int flag; // misc stuff
};
/**************************************************************************/
struct classgroup_type
{
char * name;
int bitindex;
char * description;
int members[5];// bit array
char * text_members;
};
/**************************************************************************/
struct affectprofile_type
{
char * name;
char * description;
int flags;
char * wear_message;
APPLOC wear_location;
sh_int wear_amount;
char * forced_drop_message;
char * remove_message;
sh_int move_chance; // how often the move affect will happen - percentage
APPLOC move_location;
sh_int move_amount;
char * move_message;
sh_int tick_chance; // how often the tick affect will happen - percentage
sh_int tick_location;
sh_int tick_amount;
char * tick_message;
};
/**************************************************************************/
struct objrestrict_list_type
{
classgroup_type *classgroup;
affectprofile_type *affectprofile;
sh_int priority;
OBJRESTRICT_LIST_DATA *next;
};
/**************************************************************************/
/*
* This structure is used in special.c to lookup spec funcs and
* also in olc_act.c to display listings of spec funcs.
*/
struct spec_type
{
char * spec_name;
SPEC_FUN * spec_fun;
};
/**************************************************************************/
struct ospec_type
{
char * ospec_name;
OSPEC_FUN * ospec_fun;
};
/**************************************************************************/
/*
* This structure is used in bit.c to lookup flags and stats.
*/
struct flag_type
{
char * name;
int bit;
bool settable;
};
/**************************************************************************/
struct bit_type
{
const struct flag_type * table;
char * help;
};
/**************************************************************************/
// memory for mobs
struct mem_data
{
MEM_DATA *next;
bool valid;
int id;
int reaction;
time_t when;
};
/**************************************************************************/
// one disabled command
struct disabled_data
{
DISABLED_DATA *next; // pointer to next node
struct cmd_type const *command; // pointer to the command struct
char *disabled_by; // name of disabler
sh_int level; // level of disabler
char *disabled_for; // name which the command is disabled - all, or name
};
/**************************************************************************/
struct directories_type
{
char text[MSL];
char directory[MSL];
};
/**************************************************************************/
struct position_type
{
char *name;
char *short_name;
};
/**************************************************************************/
struct sex_type
{
char *name;
};
/**************************************************************************/
struct size_type
{
char *name;
};
/**************************************************************************/
struct gamble_type
{
char *name;
GAMBLE_FUN *gamble_fun;
};
/**************************************************************************/
struct name_linkedlist_type
{
char *name;
name_linkedlist_type *next;
int tag;
int count;
};
/**************************************************************************/
struct sector_type
{
char *name;
};
/**************************************************************************/
struct deity_type
{
DEITY_DATA *next;
DEITY_DATA *prev;
DEITY_DATA *rival;
char *name;
char *description;
vn_int symbol[4];
vn_int shrinevnum; // VNUM of D's shrine
sh_int tendency; // D's tendency
sh_int alliance; // D's alliance
sh_int followers; // how many people follow this D
sh_int max_followers; // once followers is > than this, things will change a bit
int race; // D's race
int sex; // D's sex
long alignflags; // D's alignment restrictions
long tendflags; // D's tendency restrictions
unsigned char race_allow_n[(MAX_RACE+7)/8]; // Races that are allowed to worship D
};
/**************************************************************************/
typedef struct _weather_influence_data
{
int sky_clear;
int sky_cloudy;
int sky_rainy;
int sky_lightning;
int max_chance;
} weather_influence_data;
/**************************************************************************/
struct mix_type
{
mix_data *next;
char *name; // Mixture's Name
char *creator; // Person who made the mixture
sh_int type; // Type of mix, Herbalism, Cooking, Pottery, etc
vn_int vnum_template; // Vnum which will be restrung
vn_int ingredients[5]; // Ingredient vnums
sh_int ingredients_num[5]; // Number of each ingredient needed
sh_int prep_container; // Container type (new item_type for combining ingredients)
char *rname; // Resulting name
char *rshort; // Resulting short desc
char *rlong; // Resulting long desc
int ritem_type; // Resulting item type
int vessel; // item type in which mixture will be mixed in
int rvalue[5]; // Resulting iValues (v0-v4)
int rwear; // Resulting wear locs
sh_int difficulty; // modifier_table
bool locked; // mixture locked status, will allow only creator or admin to edit the mixture
};
/**************************************************************************/
// who system to support modular who formatting functions
typedef char *WHO_FORMAT_FUNCTION( char_data *ch, char_data *wch, bool two_column);
struct who_format_type {
const char *name;
WHO_FORMAT_FUNCTION *whofunc;
bool two_column_supported;
};
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/