alanthia/area/
alanthia/gods/
alanthia/player/
/***************************************************************************
 *  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.                              *
 *                                                                         *
 *  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          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/

/***************************************************************************
*	ROM 2.4 is copyright 1993-1996 Russ Taylor			   *
*	ROM has been brought to you by the ROM consortium		   *
*	    Russ Taylor (rtaylor@efn.org)				   *
*	    Gabrielle Taylor						   *
*	    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			   *
***************************************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
#include <time.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>

#include <stdarg.h>

#include "merc.h"
#include "utils.h"
#include "db.h"
#include "recycle.h"
#include "lookup.h"
#include "tables.h"
#include "olc.h"

int getpid();
time_t time(time_t * tloc);

extern int flag_lookup
args((const char *name, const struct flag_type * flag_table));
struct social_type social_table[MAX_SOCIALS];
int social_count;
long rnum = 0;


/*
 * externals for counting purposes 
 */
extern OBJ_DATA *obj_free;
extern CHAR_DATA *char_free;
extern DESCRIPTOR_DATA *descriptor_free;
extern PC_DATA *pcdata_free;
extern AFFECT_DATA *affect_free;

void do_dump(CHAR_DATA * ch, char *argument)
{
    int i, lcount, count, count2, num_pcs, aff_count;
    CHAR_DATA *fch;
    CHAR_DATA *victim;
    MOB_INDEX_DATA *pMobIndex;
    PC_DATA *pc;
    OBJ_DATA *obj;
    OBJ_INDEX_DATA *pObjIndex;
    ROOM_INDEX_DATA *room;
    EXIT_DATA *exit;
    DESCRIPTOR_DATA *d;
    AFFECT_DATA *af;
    FILE *fp;
    long vnum, nMatch = 0;

    /*
     * open file 
     */
    fclose(fpReserve);
    fp = fopen("../../public_html/mem.dmp", "w");

    /*
     * report use of data structures 
     */

    num_pcs = 0;
    aff_count = 0;

    /*
     * mobile prototypes 
     */
    fprintf(fp, "MobProt	%4ld (%8ld bytes)\n",
	    top_mob_index, top_mob_index * (sizeof(*pMobIndex)));

    /*
     * mobs 
     */
    count = 0;
    count2 = 0;
    for (fch = char_list; fch != NULL; fch = fch->next) {
	count++;
	if (fch->pcdata != NULL)
	    num_pcs++;
	for (af = fch->affected; af != NULL; af = af->next)
	    aff_count++;
    }
    for (fch = char_free; fch != NULL; fch = fch->next)
	count2++;

    fprintf(fp, "Mobs	%4d (%8d bytes), %2d free (%d bytes)\n",
	    count, count * (sizeof(*fch)), count2,
	    count2 * (sizeof(*fch)));

    /*
     * pcdata 
     */
    count = 0;
    for (pc = pcdata_free; pc != NULL; pc = pc->next)
	count++;

    fprintf(fp, "Pcdata	%4d (%8d bytes), %2d free (%d bytes)\n",
	    num_pcs, num_pcs * (sizeof(*pc)), count,
	    count * (sizeof(*pc)));

    /*
     * descriptors 
     */
    count = 0;
    count2 = 0;
    for (d = descriptor_list; d != NULL; d = d->next)
	count++;
    for (d = descriptor_free; d != NULL; d = d->next)
	count2++;

    fprintf(fp, "Descs	%4d (%8d bytes), %2d free (%d bytes)\n",
	    count, count * (sizeof(*d)), count2, count2 * (sizeof(*d)));

    /*
     * object prototypes 
     */
    for (vnum = 0; nMatch < top_obj_index; vnum++)
	if ((pObjIndex = get_obj_index(vnum)) != NULL) {
	    for (af = pObjIndex->affected; af != NULL; af = af->next)
		aff_count++;
	    nMatch++;
	}
    fprintf(fp, "ObjProt	%4ld (%8ld bytes)\n",
	    top_obj_index, top_obj_index * (sizeof(*pObjIndex)));


    /*
     * objects 
     */
    count = 0;
    count2 = 0;
    for (obj = object_list; obj != NULL; obj = obj->next) {
	count++;
		for (af = obj->affected; af != NULL; af = af->next)
	    	aff_count++;
    	}
    	for (obj = obj_free; obj != NULL; obj = obj->next)
		count2++;

    fprintf(fp, "Objs	%4d (%8d bytes), %2d free (%d bytes)\n",
	    count, count * (sizeof(*obj)), count2,
	    count2 * (sizeof(*obj)));

    /*
     * affects 
     */
    count = 0;
    for (af = affect_free; af != NULL; af = af->next)
	count++;

    fprintf(fp, "Affects	%4d (%8d bytes), %2d free (%d bytes)\n",
	    aff_count, aff_count * (sizeof(*af)), count,
	    count * (sizeof(*af)));

    /*
     * rooms 
     */
    fprintf(fp, "Rooms	%4d (%8d bytes)\n",
	    top_room, top_room * (sizeof(*room)));

    /*
     * exits 
     */
    fprintf(fp, "Exits	%4d (%8d bytes)\n",
	    top_exit, top_exit * (sizeof(*exit)));

    fclose(fp);

    /*
     * start printing out mobile data 
     */
    fp = fopen("../../public_html/mob.html", "w");
    fprintf(fp, "\n<HTML><BODY BGCOLOR=WHITE><PRE>\n");
    fprintf(fp, "\nMobile Analysis\n");
    fprintf(fp, "---------------\n");
    nMatch = 0;


    for (lcount = 300; lcount > -1; lcount--) {
	for (victim = char_list; victim != NULL; victim = victim->next) {
	    if (victim->in_room != NULL && victim->level == lcount) {
		count++;
		fprintf(fp,
			"Num: %d) Vnum: %-5ld\n\tName: %s\n\tLevel: %d\n\tGold: %ld\n",
			count,
			IS_NPC(victim) ? victim->pIndexData->vnum : 0,
			IS_NPC(victim) ? victim->short_descr : victim->
			name, victim->level, victim->gold);
		fprintf(fp,
			"\tHP %5ld MN %5ld \n\tHR %3d DR %3d \n\tDAM: %dd%d\n\n",
			victim->max_hit, victim->max_mana, victim->hitroll,
			victim->damroll, victim->damage[DICE_NUMBER],
			victim->damage[DICE_TYPE]);
		fprintf(fp, "Act Flags:\n");
		fprintf(fp, "\t%s\n", flag_string(act_flags, victim->act));
		fprintf(fp, "Aff Flags:\n");
		fprintf(fp, "\t%s\n",
			flag_string(affect_flags, victim->affected_by));
		fprintf(fp, "Imm Flags:\n");
		fprintf(fp, "\t%s\n",
			flag_string(imm_flags, victim->imm_flags));
		fprintf(fp, "Res Flags:\n");
		fprintf(fp, "\t%s\n",
			flag_string(res_flags, victim->res_flags));
		fprintf(fp, "Vuln Flags:\n");
		fprintf(fp, "\t%s\n",
			flag_string(vuln_flags, victim->vuln_flags));
		fprintf(fp, "Off Flags:\n");
		fprintf(fp, "\t%s\n",
			flag_string(off_flags, victim->off_flags));
		fprintf(fp, "Partses:\n");
		fprintf(fp, "\t%s\n",
			flag_string(part_flags, victim->parts));
		fprintf(fp, "Form:\n");
		fprintf(fp, "\t%s\n\n",
			flag_string(form_flags, victim->form));
		fprintf(fp,
			"----------------------------------------------------\n\n");

	    }
	}
    }
    fprintf(fp, "</PRE></BODY></HTML>");
    fclose(fp);

    /*
     * start printing out object data 
     */
    fp = fopen("../../public_html/obj-weight-by-level.dmp", "w");

    fprintf(fp, "\nObject Analysis\n");
    fprintf(fp, "---------------\n");
    nMatch = 0;
	for ( i=1; i < 310; i++) {
		nMatch = 0;
    	for (vnum = 0; nMatch < top_obj_index; vnum++) {
			if ((pObjIndex = get_obj_index(vnum)) != NULL) {
	    		nMatch++;
				if (pObjIndex->level == i) {
	    		fprintf(fp, "vnum: %-4ld %-40s level: %-6d weight: %-6d\n\n",
		    	pObjIndex->vnum, pObjIndex->short_descr,
		    	pObjIndex->level, pObjIndex->weight);
				}
			}
		}
	}
    /*
     * close file 
     */
    fclose(fp);

	/*
     * Objects by level with avg damn
     */

    fp = fopen("../../public_html/weapons-by-level.dmp", "w");

    fprintf(fp, "\nObject Analysis\n");
    fprintf(fp, "---------------\n");
    nMatch = 0;
	for ( i=1; i < 310; i++) {
		nMatch = 0;
    	for (vnum = 0; nMatch < top_obj_index; vnum++) {
			if ((pObjIndex = get_obj_index(vnum)) != NULL) {
	    		nMatch++;
				if ((pObjIndex->level == i) 
						&& (pObjIndex->item_type == ITEM_WEAPON)) {
	    		fprintf(fp, 
					"vnum: %-4ld %-40s level: %-6d weight: %-6d avg dam: %d\n",
		    	pObjIndex->vnum, pObjIndex->short_descr,
		    	pObjIndex->level, pObjIndex->weight,
        		(1 + pObjIndex->value[2]) * pObjIndex->value[1] / 2);
				}
			}
		}
	}
    /*
     * close file 
     */
    fclose(fp);
/*
    fp = fopen("../../public_html/races.dmp", "w");

    fprintf(fp, "\n<HTML>\n");
    fprintf(fp, "<PRE>\n");
    fprintf(fp, "\nRacial Analysis\n");

    for (race = 0; race_table[race].name != NULL; race++) {
	fprintf(fp, "\n----------------------------------------\n");

	fprintf(fp, "\nName\t%s\n", race_table[race].name);
	if (race_table[race].pc_race)
	    fprintf(fp, "Player race.\n");

	fprintf(fp, "Act Flags:\n");
	fprintf(fp, "%s\n", flag_string(act_flags, race_table[race].act));
	fprintf(fp, "Aff Flags:\n");
	fprintf(fp, "%s\n",
		flag_string(affect_flags, race_table[race].aff));
	fprintf(fp, "Imm Flags:\n");
	fprintf(fp, "%s\n", flag_string(imm_flags, race_table[race].imm));
	fprintf(fp, "Res Flags:\n");
	fprintf(fp, "%s\n", flag_string(res_flags, race_table[race].res));
	fprintf(fp, "Vuln Flags:\n");
	fprintf(fp, "%s\n",
		flag_string(vuln_flags, race_table[race].vuln));
	fprintf(fp, "Off Flags:\n");
	fprintf(fp, "%s\n", flag_string(off_flags, race_table[race].off));
	fprintf(fp, "Partses:\n");
	fprintf(fp, "%s\n",
		flag_string(part_flags, race_table[race].parts));
	fprintf(fp, "Form:\n");
	fprintf(fp, "%s\n",
		flag_string(form_flags, race_table[race].form));


	fprintf(fp, "\n");

    }
    fprintf(fp, "</PRE>\n");
    fprintf(fp, "</HTML>\n");
*/
    fclose(fp);

    fpReserve = fopen(NULL_FILE, "r");
}