/
SilentMists/class/
SilentMists/gods/
SilentMists/player/
/***************************************************************************
 *  As the Wheel Weaves based on ROM 2.4. Original code by Dalsor, Caxandra,
 *	and Zy of AWW. See changes.log for a list of changes from the original
 *	ROM code. Credits for code created by other authors have been left
 *	intact at the head of each function.
 ***************************************************************************/

/* Begin homes.c */

#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <string.h>
#include "merc.h"
#include "recycle.h"
#include "interp.h"

/* Thanks to Kyndig and Sandi Fallon for assisting with arguments - Dalsor.
 * At the time I started on furnishings, I was about 12 hours straight into
 * the code and very brain dead. Thanks to them for pointing out my mistakes.
 */

/* Homes uses aspects of OLC, and it should be installed, or the necessary
 * componants installed in order for this to work
 */

/* Damn, this is a lot of defines :(
 * Each one of these vnums will need to be created. If this many items
 * aren't desired, removed the uneccesary ones and comment out the code
 */
#define HOME_ITEM_1   11800 /* fish */
#define HOME_ITEM_2   11801 /* turtle */
#define HOME_ITEM_3   11802 /* snake */
#define HOME_ITEM_4   11803 /* spider */
#define HOME_ITEM_5   11804 /* carved chair */
#define HOME_ITEM_6   11805 /* highback chair */
#define HOME_ITEM_7   11806 /* hard chair */
#define HOME_ITEM_8   11807 /* sturdy chair */
#define HOME_ITEM_9   11808 /* oak desk */
#define HOME_ITEM_10  11809 /* pine desk */
#define HOME_ITEM_11  11810 /* carved desk */
#define HOME_ITEM_12  11811 /* polished desk */
#define HOME_ITEM_13  11812 /* teak desk */
#define HOME_ITEM_14  11813 /* plain desk */
#define HOME_ITEM_15  11814 /* plush sofa */
#define HOME_ITEM_16  11815 /* padded sofa */
#define HOME_ITEM_17  11816 /* comfy sofa */
#define HOME_ITEM_18  11817 /* fluffed sofa */
#define HOME_ITEM_19  11818 /* comfy sofa */
#define HOME_ITEM_20  11819 /* oak end */
#define HOME_ITEM_21  11820 /* pine end */
#define HOME_ITEM_22  11821 /* carved end */
#define HOME_ITEM_23  11822 /* teak end */
#define HOME_ITEM_24  11823 /* norm end */
#define HOME_ITEM_25  11824 /* oak dining table */
#define HOME_ITEM_26  11825 /* pine table */
#define HOME_ITEM_27  11826 /* carved table */
#define HOME_ITEM_28  11827 /* polished table */
#define HOME_ITEM_29  11828 /* teak table */
#define HOME_ITEM_30  11829 /* comfy recliner */
#define HOME_ITEM_31  11830 /* lamp */
#define HOME_ITEM_32  11831 /* lantern */
#define HOME_ITEM_33  11832 /* torch */
#define HOME_ITEM_34  11833 /* oak dresser */
#define HOME_ITEM_35  11834 /* pine dresser */
#define HOME_ITEM_36  11835 /* carved dresser */
#define HOME_ITEM_37  11836 /* polished dresser */
#define HOME_ITEM_38  11837 /* teak dresser */
/* #define HOME_ITEM_39  11838 norm dresser */
#define HOME_ITEM_40  11839 /* oak foot */
#define HOME_ITEM_41  11840 /* pine foot */
#define HOME_ITEM_42  11841 /* carved foot */
#define HOME_ITEM_43  11842 /* polished foot */
#define HOME_ITEM_44  11843 /* teak foot */
/* #define HOME_ITEM_45  11844 norm foot */
#define HOME_ITEM_46  11845 /* oak arm */
#define HOME_ITEM_47  11846 /* pine arm */
#define HOME_ITEM_48  11847 /* carved arm */
#define HOME_ITEM_49  11848 /* polished arm */
#define HOME_ITEM_50  11849 /* teak arm */
/* #define HOME_ITEM_51  11850 norm arm */
#define HOME_ITEM_52  11851 /* oak war */
#define HOME_ITEM_53  11852 /* pine arm */
#define HOME_ITEM_54  11853 /* carved arm */
#define HOME_ITEM_55  11854 /* polished arm */
#define HOME_ITEM_56  11855 /* teak arm */
/* #define HOME_ITEM_57  11856 norm arm */
#define HOME_ITEM_58  11857 /* oak book */
#define HOME_ITEM_59  11858 /* pine book */
#define HOME_ITEM_60  11859 /* carved book */
#define HOME_ITEM_61  11860 /* polished book */
#define HOME_ITEM_62  11861 /* teak book */
/* #define HOME_ITEM_63  11862  norm book */
#define HOME_ITEM_64  11863 /* oak chiff */
#define HOME_ITEM_65  11864 /* pine chiff */
#define HOME_ITEM_66  11865 /* carved chiff */
#define HOME_ITEM_67  11866 /* polished chiff */
#define HOME_ITEM_68  11867 /* teak chiff */
/* #define HOME_ITEM_69  11868  norm chiff */
#define HOME_ITEM_70  11869 /* royalbed */
#define HOME_ITEM_71  11870 /* cot */
#define HOME_ITEM_72  11871 /* featherbed */
#define HOME_ITEM_73  11872 /* canopybed */
#define HOME_ITEM_74  11873 /* postedbed */
#define HOME_ITEM_75  11874 /* twinbed */

RESET_DATA *new_reset_data args ( ( void ) );
void add_reset args ( ( ROOM_INDEX_DATA *room, RESET_DATA *loc_reset, int index ) );
void free_reset_data args ( ( RESET_DATA *pReset ) );
void home_buy ( CHAR_DATA *ch );
void home_sell ( CHAR_DATA *ch, char *argument );
void home_describe ( CHAR_DATA *ch );

void do_home ( CHAR_DATA *ch, char *argument )
{

    ROOM_INDEX_DATA *loc;
    AREA_DATA *loc_area;
    RESET_DATA *loc_reset;
    OBJ_DATA *furn;
	char arg1[MAX_INPUT_LENGTH];
	char arg2[MAX_INPUT_LENGTH];
	char arg3[MAX_INPUT_LENGTH];
	char buf[MSL];

	loc = ch->in_room;
	loc_area = ch->in_room->area;
	buf[0] = '\0';

	argument = one_argument( argument, arg1 );
	argument = one_argument( argument, arg2 );
	argument = one_argument( argument, arg3 );

	if ( IS_NPC(ch)
	|| ch == NULL )
		return;

	if ( arg1[0] == '\0' || !strcmp ( arg1, "list" ) )
	{
		send_to_char("What about a home?\n\r",ch);
		send_to_char("\n\rSyntax: Home (buy, sell, furnish, describe)\n\r",ch);
		send_to_char("\n\rExtended:\n\rHome (buy, sell, furnish, describe)\n\r",ch);
		send_to_char("Buy      (purchase a home in the room you are standing in)\n\r",ch);
		send_to_char("Sell     (confirm - does not prompt for confirmation!)\n\r",ch);
		send_to_char("Furnish  (allows purchases of items)\n\r",ch);
		send_to_char("Describe (describe the room - uses the OLC editor)\n\r",ch);
		return;
	}
	if ( !is_name( ch->in_room->area->file_name, "caemnew.are" ) )
	{
		send_to_char("You aren't in Caemlyn.\n\r",ch);
		return;
	}
	if ( !IS_SET ( loc->room_flags, ROOM_HOME ) )
	{
		send_to_char("You cannot buy a home in this room.\n\r",ch);
		return;
	}

	/* Find out what the argument is, if any */
	if      ( !strcmp ( arg1, "buy" ) )        home_buy ( ch );
	else if ( !strcmp ( arg1, "sell" ) )       home_sell ( ch, arg2 );
	else if ( !strcmp ( arg1, "describe" ) )   home_describe ( ch );
	else if ( !strcmp ( arg1, "furnish" ) )
	/* Home furnish was left in here because I didn't feel like
	 * redoing all the arguments - Dalsor
	 */
	{
		if ( !is_room_owner ( ch, loc ) )
		{
			send_to_char("But you do not own this room!\n\r",ch);
			return;
		}
		if ( arg2[0] == '\0' )
		{
		send_to_char("This command allows you to furnish your home.\n\r",ch);
		send_to_char("You must be carrying gold to purchase furnishings,\n\r",ch);
		send_to_char("and be standing in your home. You cannot have more\n\r",ch);
		send_to_char("than five items in your home.\n\r",ch);
		send_to_char("\n\rSyntax: Home (furnish) (item name)\n\r",ch);
		send_to_char("   Window      5000 gold\n\r",ch);
		send_to_char("   Aquarium    7500 gold (fish, turtle, snake, spider)\n\r",ch);
		send_to_char("   Chair       5000 gold (sturdy, highback, carved, hard)\n\r",ch);
		send_to_char("   Desk        7500 gold (oak, pine, carved, polished, teak)\n\r",ch);
		send_to_char("   Sofa        7500 gold (plush, padded, comfortable, fluffed)\n\r",ch);
		send_to_char("   Endtable    1000 gold (oak, pine, carved, teak)\n\r",ch);
		send_to_char("   Table       7500 gold (oak, pine, carved, polished, teak)\n\r",ch);
		send_to_char("   Recliner    7500 gold\n\r",ch);
		send_to_char("   Lamp        2000 gold\n\r",ch);
		send_to_char("   Mirror      2500 gold\n\r",ch);
		send_to_char("   Lantern     1500 gold\n\r",ch);
		send_to_char("   Torch       1000 gold\n\r",ch);
		send_to_char("   Dresser     5000 gold (oak, pine, carved, polished, teak)\n\r",ch);
		send_to_char("   Footchest   5000 gold (oak, pine, carved, polished, teak)\n\r",ch);
		send_to_char("   Armoire     7500 gold (oak, pine, carved, polished, teak)\n\r",ch);
		send_to_char("   Wardrobe    7500 gold (oak, pine, carved, polished, teak)\n\r",ch);
		send_to_char("   Bookcase    7500 gold (oak, pine, carved, polished, teak)\n\r",ch);
		send_to_char("   Chifferobe  7500 gold (oak, pine, carved, polished, teak)\n\r",ch);
		send_to_char("   Cot         1000 gold\n\r",ch);
		send_to_char("   Featherbed  2500 gold\n\r",ch);
		send_to_char("   Twinbed     5000 gold\n\r",ch);
		send_to_char("   Postedbed   7500 gold\n\r",ch);
		send_to_char("   Canopybed   8500 gold\n\r",ch);
		send_to_char("   Royalbed    9900 gold\n\r",ch);
		return;
		}
		else if ( !strcmp ( arg2, "window" ) )
		{
			send_to_char("Windows aren't available yet.\n\r",ch);
			send_to_char("Windows will allow you to look into or out of a home.\n\r",ch);
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "aquarium" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
		        SET_BIT(loc_area->area_flags, AREA_CHANGED);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "fish" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_1),0);}
				else if ( !strcmp ( arg3, "turtle" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_2),0);}
				else if ( !strcmp ( arg3, "snake" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_3),0);}
				else if ( !strcmp ( arg3, "spider" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_4),0);}
				else {
					send_to_char("Invalid aquarium type.\n\r",ch);
				    return;	}
			}
			else
			{
				send_to_char("Invalid aquarium type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "chair" ) )
		{
			if ( ch->gold < 5000 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "sturdy" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_8),0);}
				else if ( !strcmp ( arg3, "highback" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_6),0);}
				else if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_5),0);}
				else if ( !strcmp ( arg3, "hard" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_7),0);}
				else
				{
					send_to_char("Invalid chair type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid chair type.\n\r",ch);
			    return;
			}
			ch->gold -= 5000;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "desk" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_9),0);}
				else if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_10),0);}
				else if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_11),0);}
				else if ( !strcmp ( arg3, "polished" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_12),0);}
				else if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_13),0);}
				else
				{
					send_to_char("Invalid desk type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid desk type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "sofa" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "plush" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_15),0);}
				else if ( !strcmp ( arg3, "padded" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_16),0);}
				else if ( !strcmp ( arg3, "comfortable" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_17),0);}
				else if ( !strcmp ( arg3, "fluffed" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_18),0);}
				else
				{
					send_to_char("Invalid sofa type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid sofa type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "endtable" ) )
		{
			if ( ch->gold < 1000 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_20),0);}
				else if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_21),0);}
				else if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_22),0);}
				else if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_23),0);}
				else
				{
					send_to_char("Invalid endtable type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid endtable type.\n\r",ch);
			    return;
			}
			ch->gold -= 1000;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "table" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_25),0);}
				else if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_26),0);}
				else if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_27),0);}
				else if ( !strcmp ( arg3, "polished" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_28),0);}
				else if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_29),0);}
				else
				{
					send_to_char("Invalid table type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid table type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "recliner" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			ch->gold             -= 7500;
		    furn = create_object(get_obj_index(HOME_ITEM_30),0);
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "lamp" ) )
		{
			if ( ch->gold < 2000 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			send_to_char("Your lamp will provide light for your home for a time.\n\r",ch);
			ch->gold             -= 2000;
		    furn = create_object(get_obj_index(HOME_ITEM_31),0);
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "mirror" ) )
		{
			send_to_char("Mirrors aren't available yet.\n\r",ch);
			send_to_char("Mirrors will allow you to see your reflection... Pretty useless, eh?\n\r",ch);
			return;
		}
		else if ( !strcmp ( arg2, "lantern" ) )
		{
			if ( ch->gold < 1500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			send_to_char("Your lantern will provide light for your home for a time.\n\r",ch);
			ch->gold             -= 1500;
		    furn = create_object(get_obj_index(HOME_ITEM_32),0);
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "torch" ) )
		{
			if ( ch->gold < 1000 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			send_to_char("Your torch will provide light for your home for a time.\n\r",ch);
			ch->gold             -= 1000;
		    furn = create_object(get_obj_index(HOME_ITEM_33),0);
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "dresser" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_34),0);}
				else if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_35),0);}
				else if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_36),0);}
				else if ( !strcmp ( arg3, "polished" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_37),0);}
				else if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_38),0);}
				else
				{
					send_to_char("Invalid dresser type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid dresser type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "footchest" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_40),0);}
				else if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_41),0);}
				else if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_42),0);}
				else if ( !strcmp ( arg3, "polished" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_43),0);}
				else if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_44),0);}
				else
				{
					send_to_char("Invalid footchest type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid footchest type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "armoire" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_46),0);}
				if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_47),0);}
				if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_48),0);}
				if ( !strcmp ( arg3, "polished" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_49),0);}
				if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_50),0);}
				else
				{
					send_to_char("Invalid armoire type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid armoire type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "wardrobe" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_52),0);}
				if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_53),0);}
				if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_54),0);}
				if ( !strcmp ( arg3, "polished" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_55),0);}
				if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_56),0);}
				else
				{
					send_to_char("Invalid wardrobe type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid wardrobe type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "bookcase" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_58),0);}
				if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_59),0);}
				if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_60),0);}
				if ( !strcmp ( arg3, "polished" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_61),0);}
				if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_62),0);}
				else
				{
					send_to_char("Invalid bookcase type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid bookcase type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "chifferobe" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
		    if ( arg3[0] != '\0' )
		    {
				if ( !strcmp ( arg3, "oak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_64),0);}
				if ( !strcmp ( arg3, "pine" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_65),0);}
				if ( !strcmp ( arg3, "carved" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_66),0);}
				if ( !strcmp ( arg3, "polished" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_67),0);}
				if ( !strcmp ( arg3, "teak" ) )
				    {furn = create_object(get_obj_index(HOME_ITEM_68),0);}
				else
				{
					send_to_char("Invalid chifferobe type.\n\r",ch);
				    return;
				}
			}
			else
			{
				send_to_char("Invalid chifferobe type.\n\r",ch);
			    return;
			}
			ch->gold -= 7500;
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "cot" ) )
		{
			if ( ch->gold < 1000 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			ch->gold             -= 1000;
		    furn = create_object(get_obj_index(HOME_ITEM_71),0);
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "featherbed" ) )
		{
			if ( ch->gold < 2500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			ch->gold             -= 2500;
		    furn = create_object(get_obj_index(HOME_ITEM_72),0);
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "twinbed" ) )
		{
			if ( ch->gold < 5000 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			ch->gold             -= 5000;
		    furn = create_object(get_obj_index(HOME_ITEM_75),0);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "postedbed" ) )
		{
			if ( ch->gold < 7500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			ch->gold             -= 7500;
		    furn = create_object(get_obj_index(HOME_ITEM_74),0);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "canopybed" ) )
		{
			if ( ch->gold < 8500 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			ch->gold             -= 8500;
		    furn = create_object(get_obj_index(HOME_ITEM_73),0);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else if ( !strcmp ( arg2, "royalbed" ) )
		{
			if ( ch->gold < 9900 )
			{
				send_to_char("You do not have enough gold for this purchase.\n\r",ch);
				return;
			}
			ch->gold             -= 9900;
		    furn = create_object(get_obj_index(HOME_ITEM_70),0);
			loc_reset               = new_reset_data();
			loc_reset->command      = 'O';
			loc_reset->arg1         = furn->pIndexData->vnum;
			loc_reset->arg2         = 0;
			loc_reset->arg3         = loc->vnum;
			loc_reset->arg4         = 0;
			add_reset( loc, loc_reset, 0 );
			printf_to_char(ch,"You have been deducted %d for your purchase.",furn->cost);
			obj_to_room ( furn,ch->in_room );
	        SET_BIT(loc_area->area_flags, AREA_CHANGED);
			return;
		}
		else
		{
			send_to_char("You have not provided the name of the item to purchase.\n\r",ch);
			return;
		}
	}
	else
	{
		send_to_char("No such Home Command. See HELP HOME for more informatio.\n\r",ch);
		return;
	}
	return;
}

void home_buy ( CHAR_DATA *ch )
{
    ROOM_INDEX_DATA *loc;
    AREA_DATA *loc_area;
	char buf[MSL];

	loc = ch->in_room;
	loc_area = ch->in_room->area;
	if ( loc->owner[0] == '\0' )
	{
		if ( ch->gold < 25000 )
		{
		send_to_char("This command allows you to buy a home.\n\r",ch);
		send_to_char("You must be standing in the room to buy.\n\r",ch);
		send_to_char("You start with a blank, untitled room that is void of\n\r",ch);
		send_to_char("furnishings and light. A single door allows entrance.\n\r",ch);
		send_to_char("A home costs 25,000 GOLD. You must be carrying the coins.\n\r",ch);
		send_to_char("\n\rSyntax: Home buy\n\r",ch);
		return;
		}
		else
		{
	    free_string ( loc->owner );
	    loc->owner = str_dup ( ch->name );
	    ch->gold -= 25000;
	    free_string ( loc->name );
	    sprintf ( buf, "%s's Home", ch->name );
	    loc->name = str_dup ( buf );
	    send_to_char("Congratulations on purchasing your new home!\n\r",ch);
	    send_to_char("You are now 25,000 gold coins lighter and the owner\n\r",ch);
	    send_to_char("of the room in which you now stand! Be sure to describe\n\r",ch);
	    send_to_char("your home and purchase furnishings for it.\n\r",ch);
	    SET_BIT(loc_area->area_flags, AREA_CHANGED);
	    return;
		}
	}
	else
	{
		send_to_char("This home is already owned.\n\r",ch);
		return;
	}
	return;
}

void home_sell ( CHAR_DATA *ch, char *argument )
{
    ROOM_INDEX_DATA *loc;
    AREA_DATA *loc_area;
	RESET_DATA *current_reset;
	RESET_DATA *next_reset;
    OBJ_DATA *furn;
    OBJ_DATA *furn_next;

	loc = ch->in_room;
	loc_area = ch->in_room->area;

	if ( !is_room_owner ( ch, loc ) )
	{
		send_to_char("But you do not own this room!\n\r",ch);
		return;
	}
	if ( argument[0] == '\0' )
	{
		send_to_char("This command allows you to sell your home.\n\r",ch);
		send_to_char("You will no longer own your home once it is sold,\n\r",ch);
		send_to_char("and you will be compensated half the cost of the home,\n\r",ch);
		send_to_char("not including items you have purchased.\n\r",ch);
		send_to_char("You must be standing in the room which you own.\n\r",ch);
		send_to_char("\n\rSyntax: Home (sell) (confirm)\n\r",ch);
		return;
	}
	else if ( !strcmp ( argument, "confirm" ) )
	{
	    free_string ( loc->owner );
	    loc->owner = str_dup ( "" );
	    ch->gold += 12500;
	    free_string ( loc->name );
	    loc->name = str_dup ( "An Abandoned Home" );

	    if ( !ch->in_room->reset_first )
	    {
			return;
		}
		/* Thanks to Edwin and Kender for the help with killing
		 * resets. Pointed out some real problems with my handling
		 * of it. Thanks a bunch guys.
		 * This is the exact way Kender put it, and it works great!
		 */
		for( current_reset = ch->in_room->reset_first; current_reset;
		    current_reset = next_reset)
		{
		   next_reset = current_reset->next;
		   free_reset_data(current_reset);
		}

		ch->in_room->reset_first = NULL;

		for ( furn = ch->in_room->contents; furn != NULL; furn = furn_next )
		{
		    furn_next = furn->next_content;
	        extract_obj( furn );
		}
		send_to_char("Your home has been sold and you are now 12,500 gold coins richer!\n\r",ch);
        SET_BIT(loc_area->area_flags, AREA_CHANGED);
        return;
	}
	else
	{
		send_to_char("This command allows you to sell your home.\n\r",ch);
		send_to_char("You will no longer own your home once it is sold,\n\r",ch);
		send_to_char("and you will be compensated half the cost of the home,\n\r",ch);
		send_to_char("not including items you have purchased.\n\r",ch);
		send_to_char("You must be standing in the room which you own.\n\r",ch);
		send_to_char("\n\rSyntax: Home (sell) (confirm)\n\r",ch);
		return;
	}
}

void home_describe ( CHAR_DATA *ch )
{
    ROOM_INDEX_DATA *loc;
    AREA_DATA *loc_area;

	loc = ch->in_room;
	loc_area = ch->in_room->area;

	if ( !is_room_owner ( ch, loc ) )
	{
		send_to_char("But you do not own this room!\n\r",ch);
		return;
	}
	else
	{
		send_to_char("This command allows you to describe your home.\n\r",ch);
		send_to_char("You should not describe items that are in the room,\n\r",ch);
		send_to_char("rather allowing the furnishing of the home to do that.\n\r",ch);
		send_to_char("If you currently own this room, you will be placed into.\n\r",ch);
		send_to_char("the room editor. Be warned that while in the room editor,\n\r",ch);
		send_to_char("you are only allowed to type the description. If you are\n\r",ch);
		send_to_char("unsure or hesitant about this, please note the Immortals,\n\r",ch);
		send_to_char("or better, discuss the how-to's with a Builder.\n\r",ch);
		send_to_char("Syntax: Home (describe)\n\r",ch);
    	string_append( ch, &loc->description );
        SET_BIT(loc_area->area_flags, AREA_CHANGED);
		return;
	}

}