/**************************************************************************/
// global.h - Global variable system details see below
/***************************************************************************
* 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 the dawn license *
* in licenses.txt... In particular, you may not remove this copyright *
* notice. *
**************************************************************************/
/***************************************************************************
* FILE: global.h - To add a global just add a SINGLE entry into
* global.h prefixed with the word EXTERN (all uppercase)...
* compiler macros do the rest.
***************************************************************************/
#ifndef GLOBAL_H
#define GLOBAL_H
EXTERN MOOT_DATA *moot;
EXTERN ROULETTE_DATA *roulette;
EXTERN char EXE_FILE[30];
EXTERN char MACHINE_NAME[MSL];
EXTERN char PLATFORM_INFO[2048];
// for do_count - act_info.c
EXTERN int max_on;
EXTERN int true_count;
EXTERN time_t maxon_time; // Time of master maxon
EXTERN int hotrebootmaxon; // maxon since last hotreboot
EXTERN time_t hotrebootmaxon_time; // maxon since last hotreboot
// was at what time
EXTERN connection_data * connection_free; // Free list for connections
EXTERN connection_data * connection_list; // All open connections
EXTERN connection_data * c_next; // the next connection used in a number of loops
EXTERN char_data * player_list;
EXTERN race_data * race_list;
// Reserved file handles
// - Secondary is reserved so we can do 2 lots of file io - in handler.c
EXTERN FILE * fpReserve;
EXTERN FILE * fpAppend2FilReserve;
EXTERN FILE * fpReserveFileExists;
EXTERN RUNLEVEL_TYPE runlevel; // Used to mark bootup, mainloop and shutdown
EXTERN char str_boot_time[MIL];
EXTERN time_t boot_time; // Time we last hotrebooted
EXTERN time_t lastreboot_time; // Time we started up
EXTERN time_t current_time; // time of this pulse
EXTERN long tick_counter; // counter of the ticks
EXTERN int note_notify_counter; // notification of new mail
EXTERN char shutdown_filename[MSL];
EXTERN bool MOBtrigger; // act() switch
EXTERN int mainport; // the mainport value specified on startup
EXTERN int parsed_mainport; // the mainport value specified on startup
EXTERN int resolver_stdinout; // Pipe to hostname lookup resolver stdin/stdout
EXTERN int resolver_stderr; // Pipe to hostname lookup resolver stderr
EXTERN int resolver_version; // resolver version, * 1000
EXTERN int resolver_running;
EXTERN bool fBootTestOnly; // used to check if the mud will bootup
EXTERN DEITY_DATA * deity_first;
EXTERN DEITY_DATA * deity_last;
// area related
EXTERN AREA_DATA * area_first;
EXTERN AREA_DATA * area_vnumsort_first;
EXTERN AREA_DATA * area_levelsort_first;
EXTERN AREA_DATA * area_arealist_first;
EXTERN AREA_DATA * area_last;
EXTERN SHOP_DATA * shop_last;
EXTERN cInnData* pLastInn;
EXTERN int resaveCounter;
// moons code - affects casting level of mages
EXTERN int moon_day; // 1->28
EXTERN int moon_month; // 1-12
EXTERN int moon_cast_modifier;
// MPINFO stuff - program_flow() callstack stuff
EXTERN vn_int callstack_pvnum[MAX_CALL_LEVEL];
EXTERN vn_int callstack_mvnum[MAX_CALL_LEVEL];
EXTERN vn_int callstack_rvnum[MAX_CALL_LEVEL];
EXTERN vn_int callstack_line[MAX_CALL_LEVEL];
EXTERN bool callstack_aborted[MAX_CALL_LEVEL];
EXTERN int call_level; // Keep track of nested "mpcall"s
EXTERN bool mobprog_preventtrain_used;
EXTERN bool mobprog_preventprac_used;
EXTERN sh_int top_helpfile;
// WEBSERVER related
//EXTERN bool webRunning;
EXTERN int webHits;
EXTERN int webHelpHits;
EXTERN int webWhoHits;
// DEFAULT CHARACTER TEMPLATES
EXTERN char_data * chImmortal;
// mudftp code
EXTERN int ftp_control;
// pkill port details
EXTERN int p9999maxpk, p9999maxpklevel;
EXTERN char p9999maxpkname[50];
EXTERN int p9999maxpd, p9999maxpdlevel;
EXTERN char p9999maxpdname[50];
// GSN numbers - being moved into here
#include "gsn.h"
// races stuff
EXTERN int total_npcracescount;
EXTERN int total_npcareacount;
// log memory
EXTERN bool log_memory;
EXTERN int free_mem_count;
EXTERN int alloc_mem_count;
// linked list of all pMobIndex records
EXTERN MOB_INDEX_DATA *pMobIndexlist;
// disabled commands system
EXTERN DISABLED_DATA *disabled_first;
// new dynamic skill system
EXTERN sh_int FIRST_SPELL;
EXTERN sh_int LAST_SPELL;
EXTERN sh_int SKILL_TABLE_FLAGS;
EXTERN sh_int TOP_SKILL;
// supports letgain system
EXTERN letgain_data *letgain_list;
// dyn command related
EXTERN sh_int COM_TABLE_FLAGS;
EXTERN sh_int DEITY_FLAGS;
EXTERN sh_int HERB_FLAGS;
EXTERN sh_int MIX_FLAGS;
EXTERN sh_int CLAN_FLAGS;
EXTERN sh_int SKILLGROUPEDIT_FLAGS;
// olc based resave flags
EXTERN bool LANGUAGE_NEEDS_SAVING;
// classedit related globals
EXTERN sh_int CLASS_TABLE_FLAGS;
// DEBUG system - COMMANDS IN DEBUG TO ALLOW YOU TO SET THE ROOM, OBJ, MOB
// THEN USE 'MAKECOREFILE' TO HAVE A LOOKY AT WHAT YOU HAVE SET
EXTERN ROOM_INDEX_DATA *DEBUG_ROOM;
EXTERN char_data *DEBUG_MOB;
EXTERN OBJ_DATA *DEBUG_OBJECT;
EXTERN vn_int DEBUG_LAST_NON_EXISTING_REQUESTED_ROOM_VNUM;
EXTERN vn_int DEBUG_LAST_NON_EXISTING_REQUESTED_OBJECT_VNUM;
EXTERN vn_int DEBUG_LAST_NON_EXISTING_REQUESTED_MOBILE_VNUM;
// check_immtalk system
EXTERN char check_immtalk_replay_text[MAX_CHECK_IMMTALK][MIL+30];
EXTERN int check_immtalk_replay_index;
// use command tail to record the last commands leading up to a crash
// - olc or interp based
EXTERN char inputtail[MAX_INPUTTAIL][MIL+250]; // 250 bytes for details
EXTERN int inputtail_index;
EXTERN char temp_HSL_workspace[HSL];
EXTERN int mobprog_count;
EXTERN mob_index_data *limbo_mob_index_data; // used when we need a temp mob template
// Array of containers read for proper re-nesting of objects.
EXTERN OBJ_DATA * rgObjNest[MAX_NEST];
// raceedit stuff
EXTERN sh_int RACEEDIT_FLAGS;
EXTERN class race_data** race_table; // dynamically allocated
EXTERN bool EXECUTING_SOCIAL;
EXTERN bool RECORD_TO_REPLAYROOM;
// channeloff macros use the following variable to avoid following a null pointer
EXTERN long __CHANNEL_OFF_CRASH_PROTECTOR_VARIABLE;
EXTERN continent_type *continent_list;
EXTERN int lockers_total_count;
EXTERN int lockers_object_count;
// system languages
EXTERN language_data *language_unknown;
EXTERN language_data *language_native;
EXTERN language_data *language_alwaysunderstood;
EXTERN language_data *language_reverse;
// for roulette
#define IS_ROULETTE_1(obj) (IS_SET(obj->extra2_flags, OBJEXTRA2_ROULETTE_1))
#define IS_ROULETTE_2(obj) (IS_SET(obj->extra2_flags, OBJEXTRA2_ROULETTE_2))
#define IS_ROULETTE_TABLE(obj) (IS_ROULETTE_1(obj) || IS_ROULETTE_2(obj))
#define IS_CURRENT_TABLE(ch,obj) (ch->roulette_table == obj)
#define R_MARK (ch->roulette_mark)
#define SET_CURRENT_TABLE(ch,obj) (ch->roulette_table = obj)
#define REMOVE_CURRENT_TABLE(ch) (ch->roulette_table = NULL)
#define TABLE_FULL(obj) (obj->roulette_player1 != NULL && obj->roulette_player2 != NULL && obj->roulette_player3 != NULL)
#define TABLE_PLAYER1(obj) (obj->roulette_player1)
#define TABLE_PLAYER2(obj) (obj->roulette_player2)
#define TABLE_PLAYER3(obj) (obj->roulette_player3)
#define SET_TABLE_P1(ch,obj) (obj->roulette_player1 = ch)
#define SET_TABLE_P2(ch,obj) (obj->roulette_player2 = ch)
#define SET_TABLE_P3(ch,obj) (obj->roulette_player3 = ch)
#define R_WIN_ALL_1(a) (a==3 || a==6 || a==9 || a==12 || a==15 || a==18 || a==21 || a==24 || a==27)
#define R_WIN_ALL_2(a) (a==2 || a==5 || a==8 || a==11 || a==14 || a==17 || a==20 || a==23 || a==26)
#define R_WIN_ALL_3(a) (a==1 || a==4 || a==7 || a==10 || a==13 || a==16 || a==19 || a==22 || a==25)
#define R_WIN_1_9(a) (a>=1 && a<=9)
#define R_WIN_10_18(a) (a>=10 && a<=18)
#define R_WIN_19_27(a) (a>=19 && a<=27)
#define R_WIN_YELLOW(a) (a==3||a==6||a==9||a==14||a==17||a==26||a==4||a==13||a==22)
#define R_WIN_BLACK(a) (a==12||a==15||a==18||a==8||a==11||a==23||a==1||a==10||a==19)
#define R_WIN_RED(a) (a==21||a==24||a==27||a==2||a==5||a==20||a==7||a==16||a==25)
#define R_PULSE (roulette->pulse)
#endif // GLOBAL_H