// $Id: misc.h,v 1.12.2.3 2000/05/03 01:32:08 justin Exp $
// $Revision: 1.12.2.3 $ $Author: justin $ $Date: 2000/05/03 01:32:08 $
//
//ScryMUD Server Code
//Copyright (C) 1998 Ben Greear
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// To contact the Author, Ben Greear: greear@cyberhighway.net, (preferred)
// greearb@agcs.com
//
#ifndef __MiscInclude__
#define __MiscInclude__
#include <string2.h>
#include "classes.h"
#include "object.h"
#include "room.h"
#include "door.h"
#include "critter.h"
#include "const.h"
#include <PtrArray.h>
#include "script.h"
#include "zone.h"
#include "BugEntry.h"
#include "SkillSpell.h"
#include "MudStats.h"
extern LazyPtrArray<room> room_list;
extern List<room*> embattled_rooms;
extern List<room*> affected_rooms;
extern List<object*> obj_to_be_disolved_list; //grrmud.cc
extern List<critter*> pulsed_proc_mobs;
extern List<room*> pulsed_proc_rooms;
extern List<object*> pulsed_proc_objects;
extern PtrArray<room> proc_action_rooms;
extern PtrArray<object> proc_action_objs;
extern BugCollection bl_ideas;
extern BugCollection bl_bugs;
extern BugCollection bl_comp_ideas;
extern BugCollection bl_comp_bugs;
/** calculate the ratio between objects casting spell a spell and the
* number of players online. It will be fudged so that 1 will be
* considered a 'fair' amount. If > 1.0 then the spell should probably
* be weakened somewhat. It will never be less than 1.0
*/
float spell_objs_ratio(int spell_num);
const char* cstr(CSentryE e, critter& c);
// Returns address of static member (not thread safe)
String& getCurTime(); //in the real world (tm) :)
// Inclusive.
int bound(int low, int high, int val);
int d(const int num_rolls, const int dice_sides);
//void critter::save();
int obj_sub_a_4_b(object* a, List<object*>& lst,
const int i_th, const String* name, const int see_bit,
room& rm);
int crit_sub_a_4_b(critter* a, List<critter*>& lst,
const int i_th, const String* name, const int see_bit,
room& rm);
short isnum(String& word);
/* in olc.cc */
short check_l_range(long n, long l, long h, critter& pc, short disp_err,
const char* msg = NULL);
/*************************/
void join_in_battle(critter& agg, critter& vict);
int get_a_character(critter& pc);
int create_pc(critter& pc); //prompts for name, password...creates
int add_obj_to_permlist(const object& obj);
void close_files();
int detect(int see_bit, int vis_bit); //does bit comparison
void show(const char* message, critter& pc);
void show_all_but_2(critter& A, critter& B, const char* message,
room& rm);
void show_all(const char* msg, const room& rm);
int vDoShowList(critter* pc, CSelectorColl& includes, CSelectorColl& denies,
List<critter*>& lst, CSentryE cs_entry, va_list argp);
int doShowList(critter* pc, CSelectorColl& includes, CSelectorColl& denies,
List<critter*>& lst, CSentryE cs_entry, ...);
void out_str(const List<String*>& lst, critter& pc);
void out_crit(const List<critter*>& lst, critter& pc, int see_all = FALSE);
void out_inv(const List<object*>& lst, critter& pc, const short l_type);
//outs the names object*, formats according to l_type
/* searches the given list, lst will not be modified */
critter* have_crit_named(List<critter*>& lst, const int i_th,
const String* name, const int see_bit,
const room& rm, int do_exact = FALSE);
critter* have_crit_named(List<critter*>& lst, const int i_th,
const String* name, const int see_bit,
int& count_sofar, const room& rm,
int do_exact = FALSE);
object* have_obj_named(const List<object*>& lst, const int i_th,
const String* name, const int see_bit,
const room& rm);
object* have_obj_named(const List<object*>& lst, const int i_th,
const String* name, const int see_bit,
const room& rm, int& count_sofar);
/** Return the number of instances of an object with that name, as would
* be found by have_obj_named, in the lst. Used for finding i_th element
* in two lists that look like one list to the user.
* (ie list_merchandise, buy)
*/
int obj_named_count(const List<object*>& lst, const String* name,
const int see_bit, const room& rm);
//String* critter::getName(int see_bit);
const String* name_of_crit(critter& pc, int see_bit);
String* name_of_door(const door& dr, int see_bit);
String* name_of_dr_data(const door_data& dr, int see_bit, int dest);
String* name_of_obj(const object& obj, int see_bit);
String* long_name_of_obj(object& obj, int see_bit);
String* name_of_room(const room& rm, int see_bit);
char* get_his_her(const critter& crit);
char* get_hisself_herself(const critter& crit);
char* get_he_she(const critter& crit);
int obj_is_named(const object& obj, const String& name);
int mob_is_named(const critter& pc, const String& name);
int door_is_named(const door_data& dr, const String& name);
short is_banned(const String& hostname);
short is_newbie_banned(const String& ip);
void disolve_object(object& obj);
void do_disolve_object(object& obj);
void decrease_timed_affecting_pcs();
void decrease_timed_affecting_lds();
void decrease_timed_affecting_doors();
void decrease_timed_affecting_smobs();
void decrease_timed_affecting_objects();
void decrease_timed_affecting_rooms();
void do_regeneration_pcs();
void do_regeneration_smobs();
void do_regeneration_objects();
void do_regeneration_rooms();
void do_regeneration_zones();
int update_zone(int i_th, short total_read);
int db_update_zone(int i_th, short total_read);
int file_update_zone(int i_th, short total_read);
int update_critters(int i_th, short read_all);
int db_update_critters(int i_th, short read_all);
int file_update_critters(int i_th, short read_all);
int update_objects(int i_th, short read_all);
int db_update_objects(int zone_num, short read_all);
int file_update_objects(int zone_num, short read_all);
void do_tick();
void do_mini_tick(); //every round of battle....
#endif