/************************************************************************
* OasisOLC - InGame OLC Deletion v2.0 *
* Original author: Levork *
* Copyright 1996 Harvey Gilpin *
* Copyright 1997-2001 George Greer (greerga@circlemud.org) *
* Copyright 2002 Kip Potter [Mythran] (kip_potter@hotmail.com) *
************************************************************************/
/*
+-----------------------------------------------------------------------+
| As of right now, all I have made is the ability to delete rooms. |
| Deleting the rest of the area (objects, zones, mobiles) will be |
| a little more difficult. This is because they are broader and |
| deleting one is more tedious (but not impossible). I will (hopefully)|
| be adding more deletion code after this patch. |
| -- Mythran |
+-----------------------------------------------------------------------+
*/
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
#include "genolc.h"
#include "oasis.h"
#include "improved-edit.h"
/* Internal Functions */
int free_strings(void *data, int type);
/************************************************************************\
** Description : **
** Free's strings from any object, room, mobiles, or player. **
** **
** Return Value: **
** TRUE if successful, otherwise, it returns FALSE. **
** **
** Parameters : **
** type - The OLC type constant relating to the data type of data. **
\************************************************************************/
int free_strings(void *data, int type)
{
struct room_data *room;
struct extra_descr_data *tdesc;
struct config_data *config;
int i;
switch (type) {
case OASIS_WLD:
room = (struct room_data *) data;
/* Free Descriptions */
if (room->name)
free(room->name);
if (room->description)
free(room->description);
for (tdesc = room->ex_description; tdesc; tdesc = tdesc->next) {
if (tdesc->keyword)
free(tdesc->keyword);
if (tdesc->description)
free(tdesc->description);
free(tdesc);
}
/* Return the return value of free_strings(). */
return (free_strings(room, OASIS_EXI));
case OASIS_EXI:
room = (struct room_data *) data;
for (i = 0; i < NUM_OF_DIRS; i++) {
if (room->dir_option[i]) {
if (room->dir_option[i]->general_description)
free(room->dir_option[i]->general_description);
if (room->dir_option[i]->keyword)
free(room->dir_option[i]->keyword);
free(room->dir_option[i]);
}
}
return (TRUE);
case OASIS_MOB:
case OASIS_OBJ:
return (FALSE); /* For now... */
case OASIS_CFG:
config = (struct config_data *) data;
if (config->play.OK)
free(config->play.OK);
if (config->play.NOPERSON)
free(config->play.NOPERSON);
if (config->play.NOEFFECT)
free(config->play.NOEFFECT);
if (config->operation.DFLT_IP)
free(config->operation.DFLT_IP);
if (config->operation.DFLT_DIR)
free(config->operation.DFLT_DIR);
if (config->operation.LOGNAME)
free(config->operation.LOGNAME);
if (config->operation.MENU)
free(config->operation.MENU);
if (config->operation.WELC_MESSG)
free(config->operation.WELC_MESSG);
if (config->operation.START_MESSG)
free(config->operation.START_MESSG);
return (TRUE);
default:
mudlog(BRF, LVL_GOD, TRUE, "SYSERR: oasis_delete.c: free_strings: Invalid type handled (Type %d).", type);
return (FALSE);
}
}