/************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvements 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 * * benefiting. We hope that you share your changes too. What goes * * around, comes around. * *************************************************************************** * ROM 2.4 is copyright 1993-1998 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@hypercube.org) * * Gabrielle Taylor (gtaylor@hypercube.org) * * Brian Moore (zump@rom.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * *************************************************************************** * 1stMUD ROM Derivative (c) 2001-2002 by Ryan Jennings * * http://1stmud.dlmud.com/ <r-jenn@shaw.ca> * ***************************************************************************/ /*************************************************************************** * File: mem.c * * * * 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. * * * * This code was freely distributed with the The Isles 1.1 source code, * * and has been used here for OLC - OLC would not be what it is without * * all the previous coders who released their source code. * * * ***************************************************************************/ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" #include "recycle.h" #include "olc.h" /* * Globals */ AREA_DATA *area_free; EXIT_DATA *exit_free; ROOM_INDEX_DATA *room_index_free; OBJ_INDEX_DATA *obj_index_free; SHOP_DATA *shop_free; MOB_INDEX_DATA *mob_index_free; RESET_DATA *reset_free; RESET_DATA *new_reset_data(void) { RESET_DATA *pReset; GET_FREE(pReset, RESET_DATA, next, reset_free); pReset->next = NULL; pReset->command = 'X'; pReset->arg1 = 0; pReset->arg2 = 0; pReset->arg3 = 0; pReset->arg4 = 0; return pReset; } void free_reset_data(RESET_DATA * pReset) { PUT_FREE(pReset, next, reset_free); return; } AREA_DATA *new_area(void) { AREA_DATA *pArea; char buf[MAX_INPUT_LENGTH]; GET_FREE(pArea, AREA_DATA, next, area_free); pArea->next = NULL; pArea->name = str_dup("New area"); pArea->area_flags = 0; pArea->security = 9; pArea->builders = str_dup("None"); pArea->credits = str_dup(""); pArea->lvl_comment = str_dup(""); pArea->min_level = 0; pArea->max_level = MAX_LEVEL; pArea->version = 0; pArea->min_vnum = 0; pArea->max_vnum = 0; pArea->age = 32; /* 32 so areas reset on boot */ pArea->nplayer = 0; pArea->vnum = top_area; pArea->empty = TRUE; /* ROM patch */ sprintf(buf, "area%d.are", pArea->vnum); pArea->file_name = str_dup(buf); return pArea; } void free_area(AREA_DATA * pArea) { free_string(pArea->name); free_string(pArea->file_name); free_string(pArea->builders); free_string(pArea->credits); PUT_FREE(pArea, next, area_free); return; } EXIT_DATA *new_exit(void) { EXIT_DATA *pExit; GET_FREE(pExit, EXIT_DATA, next, exit_free); pExit->u1.to_room = NULL; /* ROM OLC */ pExit->next = NULL; /* pExit->vnum = 0; ROM OLC */ pExit->exit_info = 0; pExit->key = 0; pExit->keyword = &str_empty[0]; pExit->description = &str_empty[0]; pExit->rs_flags = 0; return pExit; } void free_exit(EXIT_DATA * pExit) { free_string(pExit->keyword); free_string(pExit->description); PUT_FREE(pExit, next, exit_free); return; } ROOM_INDEX_DATA *new_room_index(void) { ROOM_INDEX_DATA *pRoom; int door; GET_FREE(pRoom, ROOM_INDEX_DATA, next, room_index_free); pRoom->next = NULL; pRoom->first_person = NULL; pRoom->first_content = NULL; pRoom->first_extra_descr = NULL; pRoom->area = NULL; for (door = 0; door < MAX_DIR; door++) pRoom->exit[door] = NULL; pRoom->name = &str_empty[0]; pRoom->description = &str_empty[0]; pRoom->owner = &str_empty[0]; pRoom->vnum = 0; pRoom->room_flags = 0; pRoom->light = 0; pRoom->sector_type = 0; pRoom->clan = NULL; pRoom->heal_rate = 100; pRoom->mana_rate = 100; return pRoom; } void free_room_index(ROOM_INDEX_DATA * pRoom) { int door; EXTRA_DESCR_DATA *pExtra; RESET_DATA *pReset, *wReset; PROG_LIST *rp; free_string(pRoom->name); free_string(pRoom->description); free_string(pRoom->owner); for (rp = pRoom->first_rprog; rp; rp = rp->next) free_prog(rp); for (door = 0; door < MAX_DIR; door++) { if (pRoom->exit[door]) free_exit(pRoom->exit[door]); } for (pExtra = pRoom->first_extra_descr; pExtra; pExtra = pExtra->next) { free_extra_descr(pExtra); } for (pReset = pRoom->reset_first; pReset; pReset = wReset) { wReset = pReset->next; free_reset_data(pReset); } PUT_FREE(pRoom, next, room_index_free); return; } extern AFFECT_DATA *affect_free; SHOP_DATA *new_shop(void) { SHOP_DATA *pShop; int buy; GET_FREE(pShop, SHOP_DATA, next, shop_free); pShop->next = NULL; pShop->keeper = 0; for (buy = 0; buy < MAX_TRADE; buy++) pShop->buy_type[buy] = 0; pShop->profit_buy = 100; pShop->profit_sell = 100; pShop->open_hour = 0; pShop->close_hour = 23; return pShop; } void free_shop(SHOP_DATA * pShop) { PUT_FREE(pShop, next, shop_free); return; } OBJ_INDEX_DATA *new_obj_index(void) { OBJ_INDEX_DATA *pObj; int value; GET_FREE(pObj, OBJ_INDEX_DATA, next, obj_index_free); pObj->next = NULL; pObj->first_extra_descr = NULL; pObj->first_affect = NULL; pObj->area = NULL; pObj->name = str_dup("no name"); pObj->short_descr = str_dup("(no short description)"); pObj->description = str_dup("(no description)"); pObj->vnum = 0; pObj->item_type = ITEM_TRASH; pObj->extra_flags = 0; pObj->wear_flags = 0; pObj->count = 0; pObj->weight = 0; pObj->cost = 0; pObj->material = str_dup("unknown"); /* ROM */ pObj->condition = 100; /* ROM */ for (value = 0; value < 5; value++) /* 5 - ROM */ pObj->value[value] = 0; pObj->new_format = TRUE; /* ROM */ return pObj; } void free_obj_index(OBJ_INDEX_DATA * pObj) { EXTRA_DESCR_DATA *pExtra; AFFECT_DATA *pAf; PROG_LIST *op; free_string(pObj->name); free_string(pObj->short_descr); free_string(pObj->description); for (op = pObj->first_oprog; op; op = op->next) { free_prog(op); } for (pAf = pObj->first_affect; pAf; pAf = pAf->next) { free_affect(pAf); } for (pExtra = pObj->first_extra_descr; pExtra; pExtra = pExtra->next) { free_extra_descr(pExtra); } PUT_FREE(pObj, next, obj_index_free); return; } MOB_INDEX_DATA *new_mob_index(void) { MOB_INDEX_DATA *pMob; GET_FREE(pMob, MOB_INDEX_DATA, next, mob_index_free); pMob->next = NULL; pMob->spec_fun = NULL; pMob->pShop = NULL; pMob->area = NULL; pMob->player_name = str_dup("no name"); pMob->short_descr = str_dup("(no short description)"); pMob->long_descr = str_dup("(no long description)\n\r"); pMob->description = &str_empty[0]; pMob->vnum = 0; pMob->count = 0; pMob->killed = 0; pMob->sex = 0; pMob->level = 0; pMob->act = ACT_IS_NPC; pMob->affected_by = 0; pMob->alignment = 0; pMob->hitroll = 0; pMob->race = race_lookup("human"); /* - Hugin */ pMob->form = 0; /* ROM patch -- Hugin */ pMob->parts = 0; /* ROM patch -- Hugin */ pMob->imm_flags = 0; /* ROM patch -- Hugin */ pMob->res_flags = 0; /* ROM patch -- Hugin */ pMob->vuln_flags = 0; /* ROM patch -- Hugin */ pMob->material = str_dup("unknown"); /* -- Hugin */ pMob->off_flags = 0; /* ROM patch -- Hugin */ pMob->size = SIZE_MEDIUM; /* ROM patch -- Hugin */ pMob->ac[AC_PIERCE] = 0; /* ROM patch -- Hugin */ pMob->ac[AC_BASH] = 0; /* ROM patch -- Hugin */ pMob->ac[AC_SLASH] = 0; /* ROM patch -- Hugin */ pMob->ac[AC_EXOTIC] = 0; /* ROM patch -- Hugin */ pMob->hit[DICE_NUMBER] = 0; /* ROM patch -- Hugin */ pMob->hit[DICE_TYPE] = 0; /* ROM patch -- Hugin */ pMob->hit[DICE_BONUS] = 0; /* ROM patch -- Hugin */ pMob->mana[DICE_NUMBER] = 0; /* ROM patch -- Hugin */ pMob->mana[DICE_TYPE] = 0; /* ROM patch -- Hugin */ pMob->mana[DICE_BONUS] = 0; /* ROM patch -- Hugin */ pMob->damage[DICE_NUMBER] = 0; /* ROM patch -- Hugin */ pMob->damage[DICE_TYPE] = 0; /* ROM patch -- Hugin */ pMob->damage[DICE_NUMBER] = 0; /* ROM patch -- Hugin */ pMob->start_pos = POS_STANDING; /* -- Hugin */ pMob->default_pos = POS_STANDING; /* -- Hugin */ pMob->wealth = 0; pMob->new_format = TRUE; /* ROM */ return pMob; } void free_mob_index(MOB_INDEX_DATA * pMob) { PROG_LIST *mp; free_string(pMob->player_name); free_string(pMob->short_descr); free_string(pMob->long_descr); free_string(pMob->description); for (mp = pMob->first_mprog; mp; mp = mp->next) free_prog(mp); if (pMob->pShop) free_shop(pMob->pShop); PUT_FREE(pMob, next, mob_index_free); return; } PROG_CODE *pcode_free; PROG_CODE *new_pcode(void) { PROG_CODE *NewCode; GET_FREE(NewCode, PROG_CODE, next, pcode_free); NewCode->vnum = 0; NewCode->code = str_dup(""); NewCode->next = NULL; return NewCode; } void free_pcode(PROG_CODE * pCode) { free_string(pCode->code); PUT_FREE(pCode, next, pcode_free); return; }