/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/

/*
 MurkMUD++ - A Windows compatible, C++ compatible Merc 2.2 Mud.

 \author Jon A. Lambert
 \date 01/02/2007
 \version 1.5
 \remarks
  This source code copyright (C) 2005, 2006, 2007 by Jon A. Lambert
  All rights reserved.

  Use governed by the MurkMUD++ public license found in license.murk++
*/

#ifndef GLOBALS_HPP
#define GLOBALS_HPP

// Global variables
extern World *g_world;
extern Database *g_db;
extern Area *area_last;
extern std::list<Ban *> ban_list;
extern std::list<Character *> char_list;
extern std::list<Descriptor *> descriptor_list;       /* All open descriptors     */
extern std::list<Note *> note_list;
extern std::list<Object *> object_list;
extern std::list<Shop *> shop_list;

// These iterators used on loops where the next iterator can be invalidated
// because of a nested method that erases an object in the list.
extern CharIter deepchnext, deeprmnext;
extern ObjIter deepobnext;
extern DescIter deepdenext;
//bool character_invalidated = false;  // This is set in Mprogs if we

extern std::map<int, MobPrototype *> mob_table;
extern std::map<int, ObjectPrototype *> obj_table;
extern std::map<int, Room *> room_table;

extern struct cmd_type cmd_table[];
extern struct skill_type skill_table[MAX_SKILL];
extern struct class_type class_table[CLASS_MAX];
extern struct liq_type liq_table[LIQ_MAX];
extern std::string where_name[];
extern struct kill_data kill_table[];

extern struct int_app_type int_app[26];
extern struct str_app_type str_app[26];
extern struct dex_app_type dex_app[26];
extern struct con_app_type con_app[26];
extern struct wis_app_type wis_app[26];

extern bool merc_down;
extern bool wizlock;
extern std::string str_boot_time;
extern std::string help_greeting;
extern bool MOBtrigger;
extern std::ifstream * fpArea;
extern std::string strArea;
extern short g_port;
extern SOCKET g_listen;
extern bool extract_chars;

extern std::string target_name;
extern std::string dir_name[];
extern sh_int rev_dir[];
extern Object *rgObjNest[MAX_NEST];

// Global functions
extern ObjectPrototype *get_obj_index (int vnum);
extern Room *get_room_index (int vnum);
extern MobPrototype *get_mob_index (int vnum);
extern int skill_lookup (const std::string & name);
extern void load_mobprogs (std::ifstream & fp);
extern SPEC_FUN *spec_lookup (const std::string & name);
extern void mprog_read_programs (std::ifstream & fp, MobPrototype *pMobIndex);

#endif