Lyonesse/bin/
Lyonesse/doc/eng/
Lyonesse/doc/ita/
Lyonesse/lib/
Lyonesse/lib/buildings/
Lyonesse/lib/clans/
Lyonesse/lib/data/
Lyonesse/lib/etc/
Lyonesse/lib/house/
Lyonesse/lib/misc/
Lyonesse/lib/plralias/A-E/
Lyonesse/lib/plralias/F-J/
Lyonesse/lib/plralias/K-O/
Lyonesse/lib/plralias/P-T/
Lyonesse/lib/plralias/U-Z/
Lyonesse/lib/plralias/ZZZ/
Lyonesse/lib/plrobjs/A-E/
Lyonesse/lib/plrobjs/F-J/
Lyonesse/lib/plrobjs/K-O/
Lyonesse/lib/plrobjs/P-T/
Lyonesse/lib/plrobjs/U-Z/
Lyonesse/lib/plrobjs/ZZZ/
Lyonesse/lib/plrsave/A-E/
Lyonesse/lib/plrsave/F-J/
Lyonesse/lib/plrsave/K-O/
Lyonesse/lib/plrsave/P-T/
Lyonesse/lib/plrsave/U-Z/
Lyonesse/lib/plrsave/ZZZ/
Lyonesse/lib/ships/
Lyonesse/lib/stables/
Lyonesse/lib/text/help/
Lyonesse/lib/world/
Lyonesse/lib/world/bld/
Lyonesse/lib/world/ship/
Lyonesse/lib/world/shp/
Lyonesse/lib/world/wls/
Lyonesse/lib/world/wls/Life/
Lyonesse/lib/world/wls/Map/
Lyonesse/log/
/**************************************************************************
 * #   #   #   ##   #  #  ###   ##   ##  ###       http://www.lyonesse.it *
 * #    # #   #  #  ## #  #    #    #    #                                *
 * #     #    #  #  # ##  ##    #    #   ##   ## ##  #  #  ##             *
 * #     #    #  #  # ##  #      #    #  #    # # #  #  #  # #            *
 * ###   #     ##   #  #  ###  ##   ##   ###  #   #  ####  ##    Ver. 1.0 *
 *                                                                        *
 * -Based on CircleMud & Smaug-     Copyright (c) 2001-2002 by Mithrandir *
 *                                                                        *
 * ********************************************************************** */
/* ************************************************************************
*   File: spec_assign.c                                 Part of CircleMUD *
*  Usage: Functions to assign function pointers to objs/mobs/rooms        *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
************************************************************************ */

#include "conf.h"
#include "sysdep.h"

#include "structs.h"
#include "db.h"
#include "interpreter.h"
#include "utils.h"


/* external globals */
extern int dts_are_dumps;
extern int mini_mud;

/* external functions */
SPECIAL(dump);
SPECIAL(pet_shops);
SPECIAL(postmaster);
SPECIAL(cityguard);
SPECIAL(guild_guard);
SPECIAL(guild);
SPECIAL(puff);
SPECIAL(fido);
SPECIAL(janitor);
SPECIAL(snake);
SPECIAL(thief);
SPECIAL(magic_user);
SPECIAL(bank);
SPECIAL(gen_board);
SPECIAL(id_a_tron);
SPECIAL(resurrectionist);
SPECIAL(stables);

/* local functions */
void assign_mobiles(void);
void assign_objects(void);
void assign_rooms(void);
void ASSIGNROOM(room_vnum room, SPECIAL(fname));
void ASSIGNMOB(mob_vnum mob, SPECIAL(fname));
void ASSIGNOBJ(obj_vnum obj, SPECIAL(fname));

/* functions to perform assignments */

void ASSIGNMOB(mob_vnum mob, SPECIAL(fname))
{
	mob_rnum rnum;
	
	if ((rnum = real_mobile(mob)) >= 0)
		mob_index[rnum].func = fname;
	else if (!mini_mud)
		log("SYSERR: Attempt to assign spec to non-existant mob #%d", mob);
}

void ASSIGNOBJ(obj_vnum obj, SPECIAL(fname))
{
	obj_rnum rnum;
	
	if ((rnum = real_object(obj)) >= 0)
		obj_index[rnum].func = fname;
	else if (!mini_mud)
		log("SYSERR: Attempt to assign spec to non-existant obj #%d", obj);
}

void ASSIGNROOM(room_vnum room, SPECIAL(fname))
{
	ROOM_DATA *pRoom;
	
	if ((pRoom = get_room(room)))
		pRoom->func = fname;
	else if (!mini_mud)
		log("SYSERR: Attempt to assign spec to non-existant room #%d", room);
}


/* ********************************************************************
*  Assignments                                                        *
******************************************************************** */

/* assign special procedures to mobiles */
void assign_mobiles(void)
{
	ASSIGNMOB(1, puff);
	
	/* various */
	ASSIGNMOB(29, stables);

	/* Immortal Zone */
	ASSIGNMOB(1201, postmaster);
	ASSIGNMOB(1202, janitor);
	
	/* Midgaard */
	ASSIGNMOB(3010, postmaster);
	ASSIGNMOB(3020, guild);
	ASSIGNMOB(3021, guild);
	ASSIGNMOB(3022, guild);
	ASSIGNMOB(3023, guild);
	ASSIGNMOB(3024, guild_guard);
	ASSIGNMOB(3025, guild_guard);
	ASSIGNMOB(3026, guild_guard);
	ASSIGNMOB(3027, guild_guard);
	ASSIGNMOB(3059, cityguard);
	ASSIGNMOB(3060, cityguard);
	ASSIGNMOB(3061, janitor);
	ASSIGNMOB(3062, fido);
	ASSIGNMOB(3066, fido);
	ASSIGNMOB(3067, cityguard);
	ASSIGNMOB(3068, janitor);
	
	/* MORIA */
	ASSIGNMOB(4000, snake);
	ASSIGNMOB(4001, snake);
	ASSIGNMOB(4053, snake);
	ASSIGNMOB(4100, magic_user);
	ASSIGNMOB(4102, snake);
	ASSIGNMOB(4103, thief);
	
	/* PYRAMID */
	ASSIGNMOB(5300, snake);
	ASSIGNMOB(5301, snake);
	ASSIGNMOB(5304, thief);
	ASSIGNMOB(5305, thief);
	ASSIGNMOB(5309, magic_user); /* should breath fire */
	ASSIGNMOB(5311, magic_user);
	ASSIGNMOB(5313, magic_user); /* should be a cleric */
	ASSIGNMOB(5314, magic_user); /* should be a cleric */
	ASSIGNMOB(5315, magic_user); /* should be a cleric */
	ASSIGNMOB(5316, magic_user); /* should be a cleric */
	ASSIGNMOB(5317, magic_user);
	
	/* High Tower Of Sorcery */
	ASSIGNMOB(2501, magic_user); /* should likely be cleric */
	ASSIGNMOB(2504, magic_user);
	ASSIGNMOB(2507, magic_user);
	ASSIGNMOB(2508, magic_user);
	ASSIGNMOB(2510, magic_user);
	ASSIGNMOB(2511, thief);
	ASSIGNMOB(2514, magic_user);
	ASSIGNMOB(2515, magic_user);
	ASSIGNMOB(2516, magic_user);
	ASSIGNMOB(2517, magic_user);
	ASSIGNMOB(2518, magic_user);
	ASSIGNMOB(2520, magic_user);
	ASSIGNMOB(2521, magic_user);
	ASSIGNMOB(2522, magic_user);
	ASSIGNMOB(2523, magic_user);
	ASSIGNMOB(2524, magic_user);
	ASSIGNMOB(2525, magic_user);
	ASSIGNMOB(2526, magic_user);
	ASSIGNMOB(2527, magic_user);
	ASSIGNMOB(2528, magic_user);
	ASSIGNMOB(2529, magic_user);
	ASSIGNMOB(2530, magic_user);
	ASSIGNMOB(2531, magic_user);
	ASSIGNMOB(2532, magic_user);
	ASSIGNMOB(2533, magic_user);
	ASSIGNMOB(2534, magic_user);
	ASSIGNMOB(2536, magic_user);
	ASSIGNMOB(2537, magic_user);
	ASSIGNMOB(2538, magic_user);
	ASSIGNMOB(2540, magic_user);
	ASSIGNMOB(2541, magic_user);
	ASSIGNMOB(2548, magic_user);
	ASSIGNMOB(2549, magic_user);
	ASSIGNMOB(2552, magic_user);
	ASSIGNMOB(2553, magic_user);
	ASSIGNMOB(2554, magic_user);
	ASSIGNMOB(2556, magic_user);
	ASSIGNMOB(2557, magic_user);
	ASSIGNMOB(2559, magic_user);
	ASSIGNMOB(2560, magic_user);
	ASSIGNMOB(2562, magic_user);
	ASSIGNMOB(2564, magic_user);
	
	/* ARACHNOS */
	ASSIGNMOB(6302, magic_user);
	ASSIGNMOB(6309, magic_user);
	ASSIGNMOB(6312, magic_user);
	ASSIGNMOB(6314, magic_user);
	ASSIGNMOB(6315, magic_user);
	
	/* Drow City */
	ASSIGNMOB(5103, magic_user);
	ASSIGNMOB(5104, magic_user);
	ASSIGNMOB(5107, magic_user);
	ASSIGNMOB(5108, magic_user);
	
	/* Old Thalos */
	ASSIGNMOB(5200, magic_user);
	ASSIGNMOB(5201, magic_user);
	ASSIGNMOB(5209, magic_user);
	
	/* New Thalos */
	/* 5481 - Cleric (or Mage... but he IS a high priest... *shrug*) */
	ASSIGNMOB(5421, magic_user);
	ASSIGNMOB(5422, magic_user);
	ASSIGNMOB(5423, magic_user);
	ASSIGNMOB(5424, magic_user);
	ASSIGNMOB(5425, magic_user);
	ASSIGNMOB(5426, magic_user);
	ASSIGNMOB(5427, magic_user);
	ASSIGNMOB(5428, magic_user);
	ASSIGNMOB(5434, cityguard);
	ASSIGNMOB(5440, magic_user);
	ASSIGNMOB(5455, magic_user);
	ASSIGNMOB(5461, cityguard);
	ASSIGNMOB(5462, cityguard);
	ASSIGNMOB(5463, cityguard);
	ASSIGNMOB(5482, cityguard);
	/*
	5400 - Guildmaster (Mage)
	5401 - Guildmaster (Cleric)
	5402 - Guildmaster (Warrior)
	5403 - Guildmaster (Thief)
	5456 - Guildguard (Mage)
	5457 - Guildguard (Cleric)
	5458 - Guildguard (Warrior)
	5459 - Guildguard (Thief)
	*/
	
	/* ROME */
	ASSIGNMOB(12009, magic_user);
	ASSIGNMOB(12018, cityguard);
	ASSIGNMOB(12020, magic_user);
	ASSIGNMOB(12021, cityguard);
	ASSIGNMOB(12025, magic_user);
	ASSIGNMOB(12030, magic_user);
	ASSIGNMOB(12031, magic_user);
	ASSIGNMOB(12032, magic_user);
	
	/* DWARVEN KINGDOM */
	ASSIGNMOB(6500, cityguard);
	ASSIGNMOB(6502, magic_user);
	ASSIGNMOB(6509, magic_user);
	ASSIGNMOB(6516, magic_user);

	/* Labyrinth of the Dead */
	ASSIGNMOB(10002, resurrectionist);
	ASSIGNMOB(10003, resurrectionist);

	/* Wilderness */
	ASSIGNMOB(500023, magic_user);
	ASSIGNMOB(500024, snake);
}



/* assign special procedures to objects */
void assign_objects(void)
{
	ASSIGNOBJ(3096, gen_board);		/* social board				*/
	ASSIGNOBJ(3097, gen_board);		/* freeze board				*/
	ASSIGNOBJ(3098, gen_board);		/* immortal board			*/
	ASSIGNOBJ(3099, gen_board);		/* mortal board				*/
	
	ASSIGNOBJ(3034, bank);			/* atm						*/
	ASSIGNOBJ(3036, bank);			/* cashcard					*/
}



/* assign special procedures to rooms */
void assign_rooms(void)
{
	ROOM_DATA *pRoom;
	int i;

	ASSIGNROOM(3063, id_a_tron);
	ASSIGNROOM(3030, dump);
	ASSIGNROOM(3031, pet_shops);
	
	if (dts_are_dumps)
	{
		for (i = 0; i < ROOM_HASH; i++)
			for (pRoom = World[i]; pRoom; pRoom = pRoom->next)
				if (ROOM_FLAGGED(pRoom, ROOM_DEATH))
					pRoom->func = dump;
	}
}