/**************************************************************************/
// prototyp.h - All global function prototypes in here
/***************************************************************************
* 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 *
**************************************************************************/
#ifndef PROTOTYPE_H
#define PROTOTYPE_H
int unlink();
int system();
struct letgain_data;
//***************************************************
//* FUNCTION PROTOTYPES
//***************************************************
/**************************************************************************/
// act_comm.cpp
bool flush_char_outbuffer(char_data *ch);
// forces a flush of the output buffer of a single player
// manually
bool is_same_group( char_data *ach, char_data *bch );
void add_follower( char_data *ch, char_data *master );
void broadcast_moot(void);
void check_sex( char_data *ch);
void die_follower( char_data *ch );
void do_broadcast_announce(char_data *ch, char *message);
void nuke_pets( char_data *ch );
void stop_follower( char_data *ch );
void do_say( char_data *ch, char *argument );
/**************************************************************************/
// act_enter.cpp
RID *get_random_room(char_data *ch);
/**************************************************************************/
// act_info.cpp
void do_huh( char_data *ch, char * );
void set_title( char_data *ch, char *title );
char *format_obj_to_char( OBJ_DATA *obj, char_data *ch, bool fShort );
/**************************************************************************/
// act_move.cpp
void move_char( char_data *ch, int door, bool follow );
int get_recallvnum(char_data *ch);
/**************************************************************************/
// act_obj.cpp
bool can_loot(char_data *ch, OBJ_DATA *obj);
void get_obj( char_data *ch, OBJ_DATA *obj, OBJ_DATA *container );
void wear_obj(char_data *ch, OBJ_DATA *obj, bool fReplace, bool hold );
/**************************************************************************/
// act_wiz.cpp
void hotreboot_recover ( void );
void wiznet( char *string, char_data *ch, OBJ_DATA *obj,
long flag, long flag_skip, int min_level );
DECLARE_DO_FUN( do_at );
ROOM_INDEX_DATA *find_location( char_data *ch, char *arg );
ROOM_INDEX_DATA *find_location_player_prority( char_data *ch, char *arg );
/**************************************************************************/
// affects.cpp
void affects_update( void );
/**************************************************************************/
// alias.cpp
char * substitute_alias( connection_data *d, char *input );
/**************************************************************************/
// ban.cpp
bool check_connection_ban( connection_data *c );
/**************************************************************************/
// bit.cpp
char *fwrite_wordflag( const struct flag_type *flag_table,
int bits, const char * heading, FILE *fp);
int fread_wordflag( const struct flag_type *flag_table, FILE *fp);
void free_affect( AFFECT_DATA *af );
void free_extra_descr( EXTRA_DESCR_DATA *ed );
int flag_lookup (const char *name, const struct flag_type *flag_table);
affectprofile_type *affectprofile_lookup( const char *name );
classgroup_type *classgroup_lookup( const char* name );
int flag_value(const struct flag_type *flag_table,char *argument);
char *flag_string(const struct flag_type *flag_table,int bits);
/**************************************************************************/
// base64.cpp
char * decodeBase64(char *coded_with_linebreaks);
char * encodeBase64(char *plaintext, int len);
char * url_encode_post_data(char *postdata);
/**************************************************************************/
// com_time.cpp
void do_compile_time (char_data *, char *);
/**************************************************************************/
// comedit.cpp
char *com_category_indexlookup(int index);
/**************************************************************************/
// comm.cpp
void update_currenttime(void);
int colour( char type, char_data *ch, char *string );
int irc_colour( char type, char_data *ch, char *string );
void act( const char *format, char_data *ch,
const void *arg1, const void *arg2, ACTTO_TYPE type );
void act_with_autodam_to_char(const char *format, char_data *ch, const void *arg1,
const void *arg2, int damage_result); // always TO_CHAR
char * act_new( const char *format, char_data *ch, const void *arg1,
const void *arg2, ACTTO_TYPE type, int min_pos);
void do_abort( void );
void connection_close( connection_data *dclose );
void make_corefile( void );
void show_string( connection_data *d, char *input );
void write_shutdown_file(char_data *ch);
void write_to_buffer( connection_data *d, const char *txt, int length );
void write_to_buffer_bw( connection_data *d, const char *txt, int length );
void exit_clean(int exitcode, char *function, char *message); // exiting cleanly
void exit_error(int exitcode, char *function, char *message); // exiting due to some error condition
void sleep_seconds(int seconds);
/**************************************************************************/
// d2magsys.cpp
void on_level_learn( char_data *ch );
/**************************************************************************/
// db.cpp
bool str_cmp( const char *astr, const char *bstr );
bool str_infix( const char *substring, const char *contained_within );
bool str_prefix( const char *prefix, const char *fullstring);
bool str_suffix( const char *astr, const char *bstr );
char *capitalize( const char *str );
char fread_letter( FILE *fp );
char *fread_string( FILE *fp );
char *fread_string_eol( FILE *fp );
char *fread_word( FILE *fp );
char *get_extra_descr( const char *name, EXTRA_DESCR_DATA *ed );
char *icapitalize( const char *str );
char *ltrim_string( const char *str );
char *rtrim_string( const char *str );
char *flags_print( int flag );
int flags_read(char *flagtext);
char *str_dup( const char *str );
void free_speedwalk( connection_data *d );
int dice( int number, int size );
int fread_number( FILE *fp );
int interpolate( int level, int value_00, int value_32 );
int number_bits( int width );
int number_door( void );
int number_fuzzy( int number );
int number_percent( void );
int number_range( int from, int to );
long flag_convert( char letter);
long fread_flag( FILE *fp );
long number_mm( void );
void *alloc_mem_old( int sMem );
void *alloc_perm( int sMem );
void append_file( char_data *ch, char *file, char *str );
void append_event( char_data *ch, char *file, char *str );
void area_update( void );
void boot_db( void );
void bug( const char *str);
void clone_mobile( char_data *parent, char_data *clone );
void clone_object( OBJ_DATA *parent, OBJ_DATA *clone );
void fread_to_eol( FILE *fp );
void free_mem_old( void *pMem, int sMem );
void free_string( char *pstr );
void fulltime_log_string( const char *str );
void hide_tilde( char *str );
void load_disabled( void );
void log_string( const char *str );
void log_hold_till_commandline_options_parsed();
void log_release_held_logs();
void log_string_core(const char *str );
void dawnlog_write_index(char *str);
void log_bar(); // draw a line of *'s in the logs on a line without the time
void log_note(const char *str); // logs the note with *'s above and below
void reset_area( AREA_DATA * pArea );
void reset_room( ROOM_INDEX_DATA *pRoom, bool unconditional );
void save_disabled( void );
void max_count_ip_calc();
void show_tilde( char *str );
void smash_tilde( char *str );
void sort_arealists( void );
void tail_chain( void );
CD *create_mobile( MOB_INDEX_DATA *pMobIndex, int level );
MID *get_mob_index( int vnum );
MPC *get_mprog_index( int vnum );
OD *create_object( OBJ_INDEX_DATA *pObjIndex);
OID *get_obj_index( int vnum );
RID *get_room_index( vn_int vnum );
OD *get_random_obj( char_data* mob );
/**************************************************************************/
// dawnlib.cpp
int str_len( const char *s );
int is_alpha( char c );
int is_alnum( char c );
int is_ascii( char c );
int is_digit( char c );
int is_lower( char c );
int is_print( char c );
int is_space( char c );
int is_upper( char c );
void manage_dynamic_buffer(char **result, int max_length);
char *trim_trailing_carriage_return_line_feed(char *str);
/**************************************************************************/
// dynamics.cpp
void addlist(name_linkedlist_type **list,char *name, int tag, bool duplicates, bool reversed);
/**************************************************************************/
// effect.cpp
void acid_effect(void *vo, int level, int dam, int target );
void cold_effect(void *vo, int level, int dam, int target );
void fire_effect(void *vo, int level, int dam, int target );
void poison_effect(void *vo, int level, int dam, int target );
void shock_effect(void *vo, int level, int dam, int target );
/**************************************************************************/
// exitlist.cpp
char *area_name(AREA_DATA *pArea);
/**************************************************************************/
// fight.cpp
bool can_initiate_combat( char_data *attacker, char_data *victim, int type );
int damage( char_data *ch, char_data *victim, int dam,
int dt, int clss, bool show );
int damage_spell( char_data *ch, char_data *victim, int dam,
int dt, int clss, bool show );
bool is_safe(char_data *ch, char_data *victim );
bool is_safe_spell(char_data *ch, char_data *victim, bool area );
bool mobRememberCH( char_data *ch, char_data *victim );
void kill_char( char_data *victim, char_data *ch );
void mobRememberClear( char_data *ch );
void mobRememberSet( char_data *ch, char_data *victim );
void multi_hit( char_data *ch, char_data *victim, int dt );
void one_hit( char_data *ch, char_data *victim, int dt, bool secondary );
void raw_kill( char_data *ch, char_data *killer );
void stop_fighting( char_data *ch, bool fBoth );
void update_pos( char_data *victim );
void violence_update( void );
/**************************************************************************/
// handler.cpp
bool player_on_rooms_invite_list(char_data *ch, ROOM_INDEX_DATA *room);
const flag_type *affect_get_bitvector_table_for_where(int where);
bool can_drop_obj( char_data *ch, OBJ_DATA *obj );
bool can_see( char_data *looker, char_data *victim );
bool can_see_obj( char_data *looker, OBJ_DATA *obj );
bool can_see_room( char_data *looker, ROOM_INDEX_DATA *pRoomIndex );
bool can_see_who( char_data *looker, char_data *victim );
bool check_defrauding_argument(char_data *ch, char *argument );
bool has_colour(const char *s);
bool has_space(const char *s);
bool has_whitespace(const char *s);
bool is_affected( char_data *ch, int sn );
bool is_clan( char_data *ch );
bool is_exact_name( const char *str, const char *namelist );
bool is_name( const char *str, const char *namelist );
bool is_name_infix( const char *str, const char *namelist );
bool is_room_owner( char_data *ch, ROOM_INDEX_DATA *room );
bool is_same_clan( char_data *ch, char_data *victim );
bool room_is_dark( ROOM_INDEX_DATA *pRoomIndex );
bool room_is_private( ROOM_INDEX_DATA *pRoomIndex );
bool is_room_private_to_char( ROOM_INDEX_DATA *pRoomIndex, char_data *ch );
char *act_bit_name( int act_flags );
char *act2_bit_name( int act_flags );
char *affect_bit_name( int vector );
char *affect2_bit_name( int vector );
char *affect_loc_name( int location );
char *area_fname( AREA_DATA *pArea);
char *comm_bit_name( int comm_flags );
char *cont_bit_name( int cont_flags);
char *extra_bit_name( int extra_flags );
char *extra2_bit_name( int extra_flags );
//char *extra3_bit_name( int extra_flags );
char *form_bit_name( int form_flags );
char *imm_bit_name( int imm_flags );
char *item_name( int item_type );
char *item_type_name( OBJ_DATA *obj );
char *LONGPERS( char_data *ch, char_data *looker);
char *lowercase( const char *str );
char *off_bit_name( int off_flags );
char *part_bit_name( int part_flags );
char *percent_colour_code(sh_int val); // Kal
char *percent_colour_codebar(void); // Kal
char *PERS( char_data *ch, char_data *looker);
char *preference_word(PREFERENCE_TYPE pt);
char *room_flags_bit_name(int room_flags);
char *shortdate(time_t *tm);
char *shorttime(time_t *tm);
char *str_width(const char *s, int width);
char *to_affect_string( AFFECT_DATA *paf, int objects_level );
char *underscore_word(char *word);
char *uppercase( const char *str );
char *weapon_bit_name ( int bits);
char *weapon_name( int weapon_Type );
char *wear_bit_name ( int wear_flags );
char *YOU_PERS( char_data *ch, char_data *looker);
int apply_ac( OBJ_DATA *obj, int iWear, int type );
int c_str_len(const char *s);
int can_carry_n( char_data *ch );
int can_carry_w( char_data *ch );
int check_immune( char_data *ch, int dam_type );
int count_affected_by_base_spell( char_data *ch, int parentspell_sn );
int count_obj_list( OBJ_INDEX_DATA *obj, OBJ_DATA *list );
int count_users( OBJ_DATA *obj );
int count_char( const char *buffer, char character);
int get_max_train( char_data *ch, int stat );
int get_obj_number( OBJ_DATA *obj );
int get_obj_weight( OBJ_DATA *obj );
int get_skill ( char_data *ch, int sn );
int get_true_weight( OBJ_DATA *obj );
int get_trust( char_data *ch );
int get_next_uid();
int get_uid(const char *); // text input is in form #uid
int get_weapon_skill( char_data *ch, int sn );
int get_weapon_sn( char_data *ch );
int num_enemies( char_data *ch );
int weapontype( const char *name );
void affect_check( char_data *ch, int where, int vector );
void affects_from_template_to_obj(OBJ_DATA *obj);
void affect_fly_update( char_data *ch );
void affect_join( char_data *ch, AFFECT_DATA *paf );
void affect_remove( char_data *ch, AFFECT_DATA *paf );
void affect_remove_obj( OBJ_DATA *obj, AFFECT_DATA *paf );
void affect_remove_room( ROOM_INDEX_DATA *room, AFFECT_DATA *paf );
void affect_strip ( char_data *ch, int sn );
void affect_to_char( char_data *ch, AFFECT_DATA *paf );
void affect_to_obj( OBJ_DATA *obj, AFFECT_DATA *paf );
void affect_to_room( ROOM_INDEX_DATA *room, AFFECT_DATA *paf );
void affect_to_skill( char_data *ch, int sn, int amount );
void affect_parentspellfunc_strip( char_data *ch, int sn );
void append_datetime_ch_to_file( char_data *, const char *file, const char *str );
void append_datetimestring_to_file( const char *, const char *);
void append_logentry_to_file( char_data *, char *file, char *str );
void append_event_to_file( char_data *, char *file, char *str );
void append_newbie_support_log ( char_data *, char *);
void append_playerlog ( char_data *, char *);
void append_string_to_file ( const char *file, const char *str, bool newline);
void append_timestring_to_file ( const char *, const char *);
void bash_eq( char_data *ch, int chance );
void center_to_char(char *argument, char_data *ch, int columns);
void println_delayed_to_room(int seconds, room_index_data *room, char_data *all_but_this_person, const char *text);
void char_from_room( char_data *ch );
void char_to_room( char_data *ch, ROOM_INDEX_DATA *pRoomIndex );
void deduct_cost ( char_data *ch, int cost );
void equip_char( char_data *ch, OBJ_DATA *obj, int iWear );
void extract_char( char_data *ch, bool fPull );
void extract_obj( OBJ_DATA *obj );
void limit_mobile_wealth(char_data *mob);
void obj_from_char( OBJ_DATA *obj );
void obj_from_obj( OBJ_DATA *obj );
void obj_from_room( OBJ_DATA *obj );
void obj_to_char( OBJ_DATA *obj, char_data *ch );
void obj_to_obj( OBJ_DATA *obj, OBJ_DATA *obj_to );
void obj_to_room( OBJ_DATA *obj, ROOM_INDEX_DATA *pRoomIndex );
void reset_char( char_data *ch );
void unequip_char( char_data *ch, OBJ_DATA *obj );
void process_moblog(char_data *ch, const char *txt);
AD *affect_find ( AFFECT_DATA *paf, int sn );
CD *get_char_icworld( char_data *ch, char *argument );
CD *get_char_room( char_data *ch, char *argument );
CD *get_char_world( char_data *ch, char *argument );
CD *get_pet_room( char_data *ch, char *argument );
CD *get_whovis_player_world( char_data *ch, char *argument ); // called by tell
OD *create_money( int gold, int silver );
OD *get_eq_char( char_data *ch, int iWear );
OD *get_obj_type( OBJ_INDEX_DATA *pObjIndexData );
OD *get_obj_of_type_in_room( OBJ_INDEX_DATA *pObjIndex, ROOM_INDEX_DATA *room );
OD *get_obj_list( char_data *ch, char *argument, OBJ_DATA *list );
OD *get_obj_carry( char_data *ch, char *argument );
OD *get_obj_wear( char_data *ch, char *argument );
OD *get_obj_carry_for_looker( char_data *ch, char *argument, char_data *looker);
OD *get_obj_here( char_data *ch, char *argument );
OD *get_obj_world( char_data *ch, char *argument );
OD *get_obj_token( char_data *ch, char *argument );
char *convert24hourto12hour(int hour);
char *autodamtext(char_data *ch, int damage_amount);
/**************************************************************************/
// interp.cpp
bool is_number( const char *arg );
char *one_argument( const char *argument, char *arg_first );
int number_argument( char *argument, char *arg );
int mult_argument( char *argument, char *arg);
void interpret( char_data *ch, char *argument );
DECLARE_DO_FUN( do_olc );
DECLARE_DO_FUN( do_asave );
DECLARE_DO_FUN( do_alist );
DECLARE_DO_FUN( do_vlist );
DECLARE_DO_FUN( do_resets );
DECLARE_DO_FUN( do_redit );
DECLARE_DO_FUN( do_aedit );
DECLARE_DO_FUN( do_medit );
DECLARE_DO_FUN( do_oedit );
DECLARE_DO_FUN( do_mpedit );
DECLARE_DO_FUN( do_disable );
DECLARE_DO_FUN( do_pdisable ); // Kalahn - Aug 97
DECLARE_DO_FUN( do_penable ); // Kalahn - Aug 97
/**************************************************************************/
// ispell.cpp
char *get_ispell_line( char *word );
void ispell_done(void);
void ispell_init(void);
void ispell_string( char_data *ch );
/**************************************************************************/
// language.cpp
void translate_language(language_data *language, bool display_language, char_data * speaker,
char_data * listener, const char *message, char *output);
language_data *language_exact_lookup(const char *name);
language_data *language_lookup(const char *name);
language_data *language_safe_lookup(const char *name);
language_data *language_lookup_by_id(int id);
language_data *language_safe_lookup_by_id(int id);
bool language_dynamic_command(char_data *ch, char *command, char *argument);
void language_init_gsn_and_unique_id();
void languages_load_and_initialise();
void languages_assign_gsn_values();
/**************************************************************************/
// laston.cpp
char *short_timediff(time_t, time_t);
char *timediff(time_t, time_t);
void laston_close_all();
void laston_logout( char_data *ch );
void resort_top_roleplayers();
/**************************************************************************/
// lookup.cpp
int coreclass_exact_lookup( const char *name );
int coreclass_lookup( const char *name );
int council_lookup( const char *name );
int dir_lookup( char *dir );
int item_lookup( const char *name );
int liq_lookup( const char *name );
int pcrace_lookup( const char *name );
DEITY_DATA *deity_lookup( char *name );
/**************************************************************************/
// magic.cpp
bool check_dispel ( int dis_level, char_data *victim, int sn );
bool saves_spell ( int level, char_data *victim, int dam_type );
int find_spell( char_data *ch, const char *name, bool spellonly );
int skill_exact_lookup( const char *name );
int skill_lookup( const char *name );
void obj_cast_spell( int sn, int level, char_data *ch, char_data *victim, OBJ_DATA *obj );
/**************************************************************************/
// mob_prog.cpp
bool mp_exit_trigger( char_data *ch, int dir );
bool mp_percent_trigger( char_data *mob, char_data *ch,
const void *arg1, const void *arg2, int type );
void mp_act_trigger( char *argument, char_data *mob, char_data *ch,
const void *arg1, const void *arg2, int type );
bool mp_cmd_trigger( char *argument, char_data *mob, char_data *ch,
const void *arg1, const void *arg2, int type );
void mp_bribe_trigger( char_data *mob, char_data *ch, int amount );
bool mp_would_run_give_trigger( char_data *mob, char_data *ch, OBJ_DATA *obj );
void mp_give_trigger( char_data *mob, char_data *ch, OBJ_DATA *obj );
void mp_greet_trigger( char_data *ch );
void mp_hour_trigger( char_data *ch );
void mp_hprct_trigger( char_data *mob, char_data *ch );
bool mp_premove_trigger( char_data *ch, int vnum, int dir );
void program_flow( MPROG_LIST *program, char_data *mob, char_data *ch,
const void *arg1, const void *arg2 );
/**************************************************************************/
// mob_cmds.cpp
void mob_interpret ( char_data *ch, char *argument );
/**************************************************************************/
// mudftp.cpp
bool ftp_push(connection_data *d);
/**************************************************************************/
// noble.cpp
void resolve_moot(void);
/**************************************************************************/
// notes.cpp
char *get_notetype( int index );
char *note_format_string( char * input); // note: input strings must be str_dup'ed and are freed, with the result str_duped
char *note_format_string_width( char *input, int width, bool returns, bool trailing_newline); // note: input strings must be str_dup'ed and are freed, with the result str_duped
void autonote( int type, char *sender, char *subject, char *to, char *text, bool refomat );
/**************************************************************************/
// olc.cpp
bool run_olc_editor( connection_data *d );
char *olc_ed_name( char_data *ch );
char *olc_ed_vnum( char_data *ch );
/**************************************************************************/
// olc_save.cpp
void do_hsave( char_data *ch, char *);
char *fix_string( const char *str );
/**************************************************************************/
// pipe.cpp
char *get_piperesult( char *cmd );
/**************************************************************************/
// recycle.cpp
void free_affect(AFFECT_DATA *af );
void free_extra_descr(EXTRA_DESCR_DATA *ed );
/**************************************************************************/
// resolve.cpp
void resolver_send_data( const char * buf);
void resolverlocal_queue_command(const char *line);
void resolverlocal_execute_queued_commands();
/**************************************************************************/
// save.cpp
bool load_char_obj( connection_data *d, char *name );
char *percent_colour_code(sh_int val); // Kal
char *percent_colour_codebar(void); // Kal
char *pfilename(char *name, PFILE_TYPE ptype);
char *pfile_filename(char *name);// returns the <lowercasefirstname>.plr
void do_save_finger( char_data *ch );
void save_char_obj( char_data *ch );
PFILE_TYPE get_pfiletype(char_data *ch);
PFILE_TYPE find_pfiletype(const char *name);
void fwrite_obj( obj_data *obj, FILE *fp, int iNest, char *heading );
obj_data * fread_obj( FILE *fp, const char *filename );
/**************************************************************************/
// saymote.cpp
void saymote( language_data *language, char_data *ch, char *argument, int sayflags);
/**************************************************************************/
// skills.cpp
bool parse_gen_groups( char_data *ch,char *argument );
int exp_per_level( char_data *ch, int points );
int skillgroup_exact_lookup(const char *name);
int skillgroup_lookup(const char *name);
void check_improve( char_data *ch, int sn, bool success, int multiplier );
void gn_add( char_data *ch, int gn);
void gn_remove( char_data *ch, int gn);
void group_add( char_data *ch, const char *name, bool deduct, int percent);
void group_remove( char_data *ch, const char *name);
void list_group_costs( char_data *ch );
void list_group_known( char_data *ch );
/**************************************************************************/
// special.cpp
char *ospec_name( OSPEC_FUN *function );
char *spec_name( SPEC_FUN *function );
char *spec_string( SPEC_FUN *fun );
OSF *ospec_lookup( const char *name );
SF *spec_lookup( const char *name );
/**************************************************************************/
// string.cpp
char *first_arg( char *argument, char *arg_first, bool force_lowercase);
char *format_string( char *oldstring /*, bool fSpace */ );
char *string_proper( char * argument );
char *string_replace( char * orig, char * old, char * newstr ); // assumes str_dup input
char *string_replace_all( char * orig, char * old, char * newstr ); // assumes str_dup input
void string_add( char_data *ch, char *argument );
void string_append( char_data *ch, char **pString );
char *string_remove_name(char *str, char *name);
/**************************************************************************/
// support.cpp
bool codehelp( char_data *ch, char *keyword, int report_unfound_flags);
/**************************************************************************/
// update.cpp
int get_magecastmod(void);
void advance_level( char_data *ch );
void check_perm_damage( char_data *ch );
void do_heroxp( char_data *ch, int xp );
void drop_level( char_data *ch );
void gain_exp( char_data *ch, int gain );
void gain_condition( char_data *ch, int iCond, int value );
void update_handler( void );
//***************************************************
//* END OF FUNCTION PROTOTYPES
//***************************************************
#ifdef WIN32
bool file_exists(const char * fmt, ...);
char *makef_titlebar(char *fmt, ...);
void broadcast(char_data *except, char * fmt, ...);
void bugf (char * fmt, ...);
void boundsbug(char * fmt, ...);
void mpbug(char * fmt, ...);
void centerf_to_char( char_data *ch, int cols, char *fmt, ...);
void logf (char * fmt, ...);
void log_notef(char * fmt, ...);
void pkill_broadcast(char * fmt, ...);
void multilog_alertf(char_data *ch, char * fmt, ...);
void info_broadcast(char_data *ch, char * fmt, ...);
void arena_broadcast(char_data *ch, char * fmt, ...);
#else
bool file_exists(const char * fmt, ...) __attribute__ ((format(printf,1,2)));
char *makef_titlebar(char *fmt, ...) __attribute__ ((format(printf,1,2)));
void broadcast(char_data *except, char * fmt, ...) __attribute__ ((format(printf,2,3)));
void bugf(char * fmt, ...) __attribute__ ((format(printf,1,2)));
void boundsbug(char * fmt, ...) __attribute__ ((format(printf,1,2)));
void mpbug(char * fmt, ...) __attribute__ ((format(printf,1,2)));
void centerf_to_char( char_data *ch, int cols ,char *fmt, ...) __attribute__ ((format(printf, 3,4)));
void logf(char * fmt, ...) __attribute__ ((format(printf,1,2)));
void log_notef(char * fmt, ...) __attribute__ ((format(printf,1,2)));
void pkill_broadcast(char * fmt, ...) __attribute__ ((format(printf,1,2)));
void multilog_alertf(char_data *ch, char * fmt, ...) __attribute__ ((format(printf,2,3)));
void info_broadcast(char_data *ch, char * fmt, ...) __attribute__ ((format(printf,2,3)));
void arena_broadcast(char_data *ch, char * fmt, ...) __attribute__ ((format(printf,2,3)));
#endif
#ifdef WIN32
void gettimeofday( struct timeval *tp, void *tzp );
#ifdef unix
#undef unix
#endif
#endif
char *dot_crypt(const char *buf, const char *salt);
int mg_crypt_msg(char *input, char *encoded);
bool is_valid_password(const char *attempt, const char *password, connection_data *d);
#undef CD
#undef MID
#undef OD
#undef OID
#undef RID
#undef SF
#undef OSF
#undef AD
#endif // PROTOTYPE_H