/*************************************************************************** * 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. * * * * Ack 2.2 improvements copyright (C) 1994 by Stephen Dooley * * * * 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. * * * * _/ _/_/_/ _/ _/ _/ ACK! MUD is modified * * _/_/ _/ _/ _/ _/ Merc2.0/2.1/2.2 code * * _/ _/ _/ _/_/ _/ (c)Stephen Zepp 1998 * * _/_/_/_/ _/ _/ _/ Version #: 4.3 * * _/ _/ _/_/_/ _/ _/ _/ * * * * http://ackmud.nuc.net/ * * zenithar@ackmud.nuc.net * * 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. * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <time.h> #include "ack.h" #ifndef DEC_ACT_MOB_H #include "act_mob.h" #endif /* * All of the global linked lists, in one clump. Variables here, * declarations in lists.h * -- Altrag */ AREA_DATA * first_area = NULL; AREA_DATA * last_area = NULL; BAN_DATA * first_ban = NULL; BAN_DATA * last_ban = NULL; CHAR_DATA * first_char = NULL; CHAR_DATA * last_char = NULL; DESCRIPTOR_DATA * first_desc = NULL; DESCRIPTOR_DATA * last_desc = NULL; HELP_DATA * first_help = NULL; HELP_DATA * last_help = NULL; NOTE_DATA * first_note = NULL; NOTE_DATA * last_note = NULL; OBJ_DATA * first_obj = NULL; OBJ_DATA * last_obj = NULL; SHOP_DATA * first_shop = NULL; SHOP_DATA * last_shop = NULL; CORPSE_DATA * first_corpse = NULL; CORPSE_DATA * last_corpse = NULL; MARK_DATA * first_mark = NULL; MARK_DATA * last_mark = NULL; MARK_LIST_MEMBER * first_mark_list = NULL; MARK_LIST_MEMBER * last_mark_list = NULL; CONTROL_LIST * first_control_list = NULL; CONTROL_LIST * last_control_list = NULL; QUEUED_INTERACT_LIST * first_queued_interact = NULL; QUEUED_INTERACT_LIST * last_queued_interact = NULL; INFLUENCE_LIST * first_influence_list = NULL; INFLUENCE_LIST * last_influence_list = NULL; RULER_LIST * first_ruler_list = NULL; RULER_LIST * last_ruler_list = NULL; DL_LIST * first_brand = NULL; DL_LIST * last_brand = NULL; BOARD_DATA * first_board = NULL; BOARD_DATA * last_board = NULL; BUF_DATA_STRUCT * first_buf=NULL; BUF_DATA_STRUCT * last_buf = NULL; NPC_GROUP_DATA * first_npc_group = NULL; NPC_GROUP_DATA * last_npc_group = NULL; PORTAL_DATA * portal_free = NULL; AFFECT_DATA * affect_free = NULL; ROOM_AFFECT_DATA * raffect_free = NULL; AREA_DATA * area_free = NULL; BAN_DATA * ban_free = NULL; CHAR_DATA * char_free = NULL; DESCRIPTOR_DATA * desc_free = NULL; EXIT_DATA * exit_free = NULL; EXTRA_DESCR_DATA * exdesc_free = NULL; HELP_DATA * help_free = NULL; MOB_INDEX_DATA * mid_free = NULL; NOTE_DATA * note_free = NULL; OBJ_DATA * obj_free = NULL; OBJ_INDEX_DATA * oid_free = NULL; PC_DATA * pcd_free = NULL; RESET_DATA * reset_free = NULL; ROOM_INDEX_DATA * rid_free = NULL; SHOP_DATA * shop_free = NULL; MPROG_DATA * mprog_free = NULL; MPROG_ACT_LIST * mpact_free = NULL; BUILD_DATA_LIST * build_free = NULL; MAGIC_SHIELD * shield_free = NULL; MEMBER_DATA * member_free = NULL; CORPSE_DATA * corpse_free = NULL; MARK_DATA * mark_free = NULL; MARK_LIST_MEMBER * mark_list_free = NULL; INTERACT_DATA * interact_free = NULL; INFLUENCE_DATA * influence_free= NULL; RULER_DATA * ruler_data_free = NULL; CONTROL_DATA * control_data_free = NULL; CONTROL_LIST * control_list_free = NULL; QUEUED_INTERACT_LIST * queued_interact_free = NULL; INFLUENCE_LIST * influence_list_free = NULL; RULER_LIST * ruler_list_free = NULL; DL_LIST * dl_list_free = NULL; BRAND_DATA * brand_data_free = NULL; MONEY_TYPE * money_type_free = NULL; BOARD_DATA * board_free = NULL; MESSAGE_DATA * message_free = NULL; BUF_DATA_STRUCT * buf_free = NULL; HASH_ENTRY * hash_free = NULL; NPC_GROUP_DATA * npc_group_free = NULL; void (*portal_free_destructor ) ( PORTAL_DATA * pdat ) = NULL; void (*affect_free_destructor ) ( AFFECT_DATA * adat ) = NULL; void (*raffect_free_destructor ) ( ROOM_AFFECT_DATA * radat ) = NULL; void (*area_free_destructor ) ( AREA_DATA * adat ) = NULL; void (*desc_free_destructor ) ( DESCRIPTOR_DATA * ddat ) = NULL; void (*help_free_destructor ) ( HELP_DATA * hdat ) = NULL; void (*shop_free_destructor ) ( SHOP_DATA *sdat ) = NULL; void (*build_free_destructor ) ( BUILD_DATA_LIST * bddat ) = NULL; void (*member_free_destructor ) ( MEMBER_DATA * mdat ) = NULL; void (*corpse_free_destructor ) ( CORPSE_DATA * cdat ) = NULL; void (*mark_list_free_destructor ) ( MARK_LIST_MEMBER * mldat ) = NULL; void (*interact_free_destructor ) ( INTERACT_DATA * idat ) = NULL; void (*influence_free_destructor) ( INFLUENCE_DATA * idat ) = NULL; void (*control_data_free_destructor ) ( CONTROL_DATA * cdat ) = NULL; void (*control_list_free_destructor ) ( CONTROL_LIST * cldat ) = NULL; void (*queued_interact_free_destructor ) ( QUEUED_INTERACT_LIST * qildat ) = NULL; void (*influence_list_free_destructor ) ( INFLUENCE_LIST * ildat ) = NULL; void (*ruler_list_free_destructor ) ( RULER_LIST * rldat ) = NULL; void (*dl_list_free_destructor ) ( DL_LIST * dldat ) = NULL; #ifndef DEBUG_MONEY void (*money_type_free_destructor ) ( MONEY_TYPE * mtdat ) = NULL; #endif void (*board_free_destructor ) ( BOARD_DATA * bdat ) = NULL; void (*buf_free_destructor ) ( BUF_DATA_STRUCT * bdat ) = NULL; void (*hash_free_destructor ) ( HASH_ENTRY * hdat )= NULL; void note_free_destructor ( NOTE_DATA * ndat ) { free_string( ndat->text ); free_string( ndat->subject ); free_string( ndat->to_list ); free_string( ndat->date ); free_string( ndat->sender ); } #ifdef DEBUG_MONEY void money_type_free_destructor( MONEY_TYPE * mtdat ) { free_string( mtdat->money_key ); } #endif void message_free_destructor ( MESSAGE_DATA * mdat ) { free_string(mdat->author); free_string(mdat->title); free_string(mdat->message); } void ban_free_destructor( BAN_DATA * bdat ) { free_string( bdat->name ); free_string( bdat->banned_by ); } void reset_free_destructor( RESET_DATA * rdat ) { free_string( rdat->notes ); free_string( rdat->auto_message ); } void exdesc_free_destructor ( EXTRA_DESCR_DATA * eddat ) { free_string(eddat->keyword); /* Free string memory */ free_string(eddat->description); } void oid_free_destructor( OBJ_INDEX_DATA * oidat ) { /* Free strings */ free_string(oidat->name); free_string(oidat->short_descr); free_string(oidat->description); } void mprog_free_destructor( MPROG_DATA * mpdat ) { free_string(mpdat->arglist); free_string(mpdat->comlist); free_string(mpdat->filename); } void mid_free_destructor( MOB_INDEX_DATA * midat ) { /* Free strings */ free_string(midat->player_name); free_string(midat->short_descr); free_string(midat->description); } void exit_free_destructor( EXIT_DATA * edat ) { free_string( edat->description ); free_string( edat->keyword ); } void rid_free_destructor( ROOM_INDEX_DATA * ridat ) { /* Now get rid of strings associated with room */ free_string(ridat->name); free_string(ridat->description); } void mpact_free_destructor( MPROG_ACT_LIST * mpadat ) { free_string(mpadat->buf); } void brand_data_free_destructor( BRAND_DATA * bdat ) { free_string( bdat->branded); free_string( bdat->branded_by); free_string( bdat->dt_stamp); free_string( bdat->message); free_string( bdat->priority); } void pcd_free_destructor( PC_DATA * pcdat ) { sh_int cnt; free_string( pcdat->pwd ); free_string( pcdat->bamfin ); free_string( pcdat->room_enter ); free_string( pcdat->room_exit ); free_string( pcdat->bamfout ); free_string( pcdat->immskll ); free_string( pcdat->title ); free_string( pcdat->host ); free_string( pcdat->header ); free_string( pcdat->message ); free_string( pcdat->who_name ); free_string( pcdat->lastlogin ); free_string( pcdat->ice_listen ); free_string( pcdat->assist_msg ); for ( cnt = 0; cnt < MAX_ALIASES; cnt++ ) { free_string( pcdat->alias_name[cnt] ); free_string( pcdat->alias[cnt] ); } for ( cnt = 0; cnt < MAX_IGNORES ; cnt++ ) { free_string( pcdat->ignore_list[cnt] ); } free_string( pcdat->rreply ); free_string( pcdat->rreply_name ); free_string( pcdat->load_msg ); free_string( pcdat->pedit_state ); for ( cnt = 0; cnt < 5 ; cnt++ ) { free_string( pcdat->pedit_string[cnt] ); } free_string( pcdat->email_address ); } void char_free_destructor( CHAR_DATA * cdat ) { free_string( cdat->name ); free_string( cdat->short_descr ); free_string( cdat->long_descr ); free_string( cdat->long_descr_orig ); free_string( cdat->description ); free_string( cdat->prompt ); free_string( cdat->old_prompt ); free_string( cdat->searching); free_string( cdat->target ); } void mark_free_destructor( MARK_DATA * mdat ) { free_string( mdat->author ); free_string( mdat->message ); } void shield_free_destructor( MAGIC_SHIELD * msdat ) { free_string( msdat->absorb_message_self ); free_string( msdat->absorb_message_room ); free_string( msdat->absorb_message_victim ); free_string( msdat->name ); free_string( msdat->wearoff_room ); free_string( msdat->wearoff_self ); } void obj_free_destructor( OBJ_DATA * odat ) { free_string( odat->owner ); free_string( odat->name ); free_string( odat->description ); free_string( odat->short_descr ); } void ruler_data_free_destructor( RULER_DATA * rdat ) { free_string( rdat->name ); free_string( rdat->affiliation_name ); free_string( rdat->keywords ); } void npc_group_free_destructor( NPC_GROUP_DATA * ngrp ) { free_string( ngrp->enemies ); free_string( ngrp->last_fighting ); free_string( ngrp->wants ); free_string( ngrp->needs ); }