alanthia/area/
alanthia/gods/
alanthia/player/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "utils.h"
#include "olc.h"
#include "recycle.h"


REDIT(redit_delete)
{

    ROOM_INDEX_DATA *pRoomIndex;
    ROOM_INDEX_DATA *pRoom;
    EXIT_DATA *pExit;
    BUFFER *buffer;
    char buf[MAX_INPUT_LENGTH];
    int iHash, door;


    EDIT_ROOM(ch, pRoom);

    pRoomIndex = pRoom;

    if (get_trust(ch) < IMMORTAL) {
	send_to_char("Only imps may delete rooms, sorry.", ch);
	return FALSE;
    }
    if (pRoom->deleted) {
	pRoom->deleted = FALSE;
	send_to_char("Deletion mark removed.\n\r", ch);
	return TRUE;
    } else {
	if (strcmp(argument, "room now")) {
	    send_to_char
		("You must type 'delete room now' in order to remove an room permanently.\r\n",
		 ch);
	    return FALSE;
	}
	pRoom->deleted = TRUE;
	sprintf(buf, "%s deleted room %ld.", ch->name, pRoom->vnum);
	log_printf(buf);
	send_to_char("{RRoom marked for deletion.\r\n{x", ch);

	buffer = new_buf();

	for (iHash = 0; iHash < MAX_KEY_HASH; iHash++) {
	    for (pRoom = room_index_hash[iHash]; pRoom;
		 pRoom = pRoom->next) {
		for (door = 0; door < MAX_DIR; door++) {
		    if ((pExit = pRoom->exit[door])
			&& pExit->u1.to_room->vnum == pRoomIndex->vnum
			&& pExit->u1.to_room->deleted) {
			sprintf(buf,
				"Found door to this room at room %ld\r\n",
				pRoom->vnum);
			add_buf(buffer, buf);
		    }
		}
	    }
	}


	page_to_char(buf_string(buffer), ch);
	free_buf(buffer);
	return TRUE;
    }

    return FALSE;
}



OEDIT(oedit_delete)
{
    OBJ_INDEX_DATA *pObj;
    ROOM_INDEX_DATA *pRoom;
    RESET_DATA *pReset;
    BUFFER *buffer;
    char buf[MAX_INPUT_LENGTH];
    int iHash;
    int count = 0;

    EDIT_OBJ(ch, pObj);

    if (get_trust(ch) < IMMORTAL) {
	send_to_char("Only imps may delete objects, sorry.\r\n", ch);
	return FALSE;

    }
    if (pObj->deleted) {
	pObj->deleted = FALSE;
	send_to_char("Deletion mark removed.\n\r", ch);
	return TRUE;
    } else {
	if (strcmp(argument, "object now")) {
	    send_to_char
		("You must type 'delete object now' in order to remove an object permanently.\r\n",
		 ch);
	    return FALSE;
	}
	pObj->deleted = TRUE;
	buffer = new_buf();

	sprintf(buf,
		"********** %s deleted object %ld ***********************",
		ch->name, pObj->vnum);
	log_printf(buf);

	for (iHash = 0; iHash < MAX_KEY_HASH; iHash++) {
	    for (pRoom = room_index_hash[iHash]; pRoom;
		 pRoom = pRoom->next) {
		for (pReset = pRoom->reset_first; pReset;
		     pReset = pReset->next) {
		    if (
			(pReset->arg1 == pObj->vnum
			 && (pReset->command == '0'
			     || pReset->command == 'P'
			     || pReset->command == 'G'
			     || pReset->command == 'E'))) {

			sprintf(buf,
				"Deleting object %ld ( %s ) in room %ld.",
				pObj->vnum, pObj->short_descr,
				pRoom->vnum);
			log_printf(buf);

			add_buf(buffer, buf);
			add_buf(buffer, "\r\n");	/*
							 * guh. log_printf adds newline for ya 
							 */

			count++;
		    }
		}
	    }
	}

	sprintf(buf, "%d instances of item removed.\r\n", count);
	add_buf(buffer, buf);
	sprintf(buf, "{RObject Marked For Deletion.{x\n\r");
	add_buf(buffer, buf);
	page_to_char(buf_string(buffer), ch);
	free_buf(buffer);
    }

    return TRUE;
}

MEDIT(medit_delete)
{
    MOB_INDEX_DATA *pMob;
    ROOM_INDEX_DATA *pRoom;
    RESET_DATA *pReset;
    BUFFER *buffer;
    char buf[MAX_INPUT_LENGTH];
    int iHash;
    int count = 0;

    EDIT_MOB(ch, pMob);

    if (get_trust(ch) < IMMORTAL) {
	medit_show(ch, "");
	send_to_char("Only imps may delete mobiles, sorry.\r\n", ch);
	return FALSE;
    }
    if (pMob->deleted) {
	pMob->deleted = FALSE;
	medit_show(ch, "");
	send_to_char("Deletion mark removed.\n\r", ch);
	return TRUE;
    } else {
	if (strcmp(argument, "mob now")) {
	    medit_show(ch, "");
	    send_to_char
		("You must type 'delete mob now' in order to remove an object permanently.\r\n",
		 ch);
	    return FALSE;
	}
	pMob->deleted = TRUE;
	buffer = new_buf();

	sprintf(buf,
		"********** %s deleted mobile %ld ***********************",
		ch->name, pMob->vnum);
	log_printf(buf);

	for (iHash = 0; iHash < MAX_KEY_HASH; iHash++) {
	    for (pRoom = room_index_hash[iHash]; pRoom;
		 pRoom = pRoom->next) {
		for (pReset = pRoom->reset_first; pReset;
		     pReset = pReset->next) {
		    if (pReset->arg1 == pMob->vnum
			&& pReset->command == 'M') {
			sprintf(buf,
				"Deleting mobile %ld ( %s ) in room %ld.",
				pMob->vnum, pMob->short_descr,
				pRoom->vnum);
			log_printf(buf);

			add_buf(buffer, buf);
			add_buf(buffer, "\r\n");	/*
							 * guh. log_printf() adds newline for ya 
							 */

			count++;
		    }
		}
	    }
	}

	sprintf(buf, "%d instances of mobile removed.\r\n", count);
	add_buf(buffer, buf);
	sprintf(buf, "{RMobile Marked For Deletion. *snif*{x\n\r");
	add_buf(buffer, buf);
	page_to_char(buf_string(buffer), ch);
	free_buf(buffer);
    }

    return TRUE;
}