/
ScryMUD/mud/
ScryMUD/mud/grrmud/Boards/
ScryMUD/mud/grrmud/Help/
ScryMUD/mud/grrmud/Pfiles/
ScryMUD/mud/grrmud/PlayerSacks/
ScryMUD/mud/grrmud/PlayerShops/
ScryMUD/mud/grrmud/help_filter/
ScryMUD/mud/hegemon/
ScryMUD/mud/hegemon/data/
ScryMUD/mud/hegemon/data/help/battle/
ScryMUD/mud/hegemon/data/help/client/
ScryMUD/mud/hegemon/data/help/communications/
ScryMUD/mud/hegemon/data/help/skills/
ScryMUD/mud/hegemon/data/help/spells/
ScryMUD/mud/include/
ScryMUD/mud/lib/
ScryMUD/mud/lib/bitfield/
ScryMUD/mud/lib/log/
ScryMUD/mud/lib/string2/
// $Id: misc2.h,v 1.13.2.8 2000/05/13 19:42:59 greear Exp $
// $Revision: 1.13.2.8 $  $Author: greear $ $Date: 2000/05/13 19:42:59 $

//
//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 Misc2Include
#define Misc2Include

#include "const.h"
#include "string2.h"
#include "classes.h"
#include "list2.h"
#include "object.h"
#include "critter.h"
#include "door.h"
#include "room.h"


int core_dump(const char* msg);
short a_will_help_b_against_c(critter& a, critter& b, critter& pc);
void lose_fly(critter& pc, short do_msg = FALSE);
void unpetrify(critter& pc, short do_msg = FALSE);
void show_stat_affects(object& obj, critter& pc);

critter* check_for_diversions(critter& pc, char* tests, critter& agg);

/** Tests this performs:  B(!pc in_battle)  C(owns aux_crit) F(frozen)
 *                        G(!gagged) I(is immort) K(know spell), M(has mana), 
 *                        m(!mob, smob ok), N(!magic),
 *                        P(paralyzed), R(owns aux_rm), r(resting or standing)
 *                        S(is_standing), V(!violence), Z(room is zlocked)
 *                                                
 *  Case matters.
 *  Evaluates the values (described in parentheses).  Returns TRUE only
 *  if all are true.
 */
int ok_to_do_action(critter* vict, const char* flags, int spell_num,
                    critter& pc, room* aux_rm = NULL, critter* aux_crit = NULL,
                    int do_msg = TRUE);

stat_spell_cell* is_affected_by(int spell_num, critter& pc);
stat_spell_cell* is_affected_by(int spell_num, object& obj);

stat_spell_cell* has_stat_affect(int affect_num, object& obj);

void leave_room_effects(room& rm, critter& pc);
void leave_room_effects(room& rm, object& obj);

int is_grouped(critter& crit, critter& pc);

const char* get_opposite_dir(const char* dir);
int get_race_num(const char* name);
int get_class_num(const char* name);
const char* get_race_name(int num);
const char* get_class_name(int num);

int max(int i, int j); //simple find-max function
int min(int i, int j); //simple find-max function

void save_all();  //pc_list and linkdead_list

String* direction_of_door(const door& dr);
const char* abbrev_dir_of_door(const door& dr);

void parse_communication(String& str);
void parse_for_max_80(String& str);
void strip_hegemon_tags(String& str);

String* dir_of_room(room& rm, int dest_room);
int get_next_msg_num(object& board);
String owner_of_zone(int rm_num);
short zone_is_total_loaded(int znum);
short zone_is_locked(int znum);



object* have_obj_numbered(const List<object*>& lst, const int i_th,
                          const int obj_num, const int see_bit,
                          const room& rm);

say_proc_cell* have_topic_named(List<say_proc_cell*> lst, const String& msg);

const String* next_mov_dir(room& car);
short is_car_at_dest(room& car);
short is_next_stop_a_dest(room& car);
void move_room(room& car, int i_th, const String* direction);
void do_vehicle_moves();    //moves em if needed
int mob_can_enter(critter& pc, room& rm, short do_msg, int check_no_wander = FALSE);
int car_can_enter(room& car, room& rm, short do_msg);

room* get_next_room(int zone);
int get_next_obj(); // returns # of first un-used obj in obj_list
int get_next_mob(); // returns # of first un-used mob in obj_list
int get_next_door(); // returns # of first un-used door in obj_list

int get_game_time(); //returns current game time
const char* get_month(int day);
const int get_day_of_month(int day);
const char* military_to_am(int m_time);
const char* class_of_crit(critter& pc);

int get_percent_lrnd(int skill_num, const critter& pc, short automatic = FALSE);
void increment_percent_lrnd(int skill_num, critter& pc);

void init_masks();
int obj_count(List<object*>& lst, object& src);
int crit_count(List<critter*>& lst, critter& src);
void clear_crit_list(List<critter*>& lst);
void clear_obj_list(List<object*>& lst);

void out_field(const bitfield& field, critter& pc, const BitfieldNames& names);
void out_stat_list(const List<stat_spell_cell*>& lst, critter& pc,
                   const BitfieldNames& names);
void out_spell_list(const List<stat_spell_cell*>& lst, critter& pc);
//void critter::doBecomeNonPet();
const String* single_obj_name(object& obj, int see_bit);
short name_is_secret(const String* name, door& dr);

const char* get_himself_herself(critter& pc);
const char* get_him_her(critter& pc);
const char* get_dude_chic(critter& pc);
const char* get_fellow_lady(critter& pc);

// Attempt to load the player-run shop owner of that number.
// Returns a newly allocated SMOB, or NULL if a problem is
// encountered.
critter* load_player_shop_owner(int mob_num);
#ifdef USEMYSQL
critter* db_load_player_shop_owner(int mob_num);
#endif
critter* file_load_player_shop_owner(int mob_num);
int save_player_shop_owner(critter& mob_to_save);

object* load_player_box(int box_num);
#ifdef USEMYSQL
object* db_load_player_box(int box_num);
#endif
object* file_load_player_box(int box_num);
int save_player_box(object& obj);

int find_and_delete_obj(object* obj_to_find, int room_num);
int find_and_delete_obj(object* obj_to_find, critter* crit_ptr);
int find_and_delete_obj(object* obj_to_find, object* find_in);


#endif