/*************************************************************************** * 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" /* 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 /* wood bench */ #define HOME_ITEM_18 11817 /* fluffed sofa */ #define HOME_ITEM_19 11818 /* comfy sofa */ #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_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_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 */ CH_CMD ( do_home ) { 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' || !str_cmp ( 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, "phome.are" ) ) { send_to_char ( "You aren't in Gaalstrom residential district.\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 ( !str_cmp ( arg1, "buy" ) ) home_buy ( ch ); else if ( !str_cmp ( arg1, "sell" ) ) home_sell ( ch, arg2 ); else if ( !str_cmp ( arg1, "describe" ) ) home_describe ( ch ); else if ( !str_cmp ( 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 platinum 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 platinum\n\r", ch ); send_to_char ( " Aquarium 7500 platinum (fish, turtle, snake, spider)\n\r", ch ); send_to_char ( " Chair 5000 platinum (sturdy, highback, carved, hard)\n\r", ch ); send_to_char ( " Desk 7500 platinum (oak, pine, carved, polished, teak)\n\r", ch ); send_to_char ( " Sofa 7500 platinum (plush, padded, comfortable, fluffed)\n\r", ch ); send_to_char ( " Table 7500 platinum (oak, pine, carved, polished, teak)\n\r", ch ); send_to_char ( " Recliner 7500 platinum\n\r", ch ); send_to_char ( " Lamp 2000 platinum\n\r", ch ); send_to_char ( " Mirror 2500 platinum\n\r", ch ); send_to_char ( " Lantern 1500 platinum\n\r", ch ); send_to_char ( " Torch 1000 platinum\n\r", ch ); send_to_char ( " Dresser 5000 platinum (oak, pine, carved, polished, teak)\n\r", ch ); send_to_char ( " Bookcase 7500 platinum (oak, pine, carved, polished, teak)\n\r", ch ); send_to_char ( " Cot 1000 platinum\n\r", ch ); send_to_char ( " Featherbed 2500 platinum\n\r", ch ); send_to_char ( " Twinbed 5000 platinum\n\r", ch ); send_to_char ( " Postedbed 7500 platinum\n\r", ch ); send_to_char ( " Canopybed 8500 platinum\n\r", ch ); send_to_char ( " Royalbed 9900 platinum\n\r", ch ); return; } else if ( !str_cmp ( 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 ( !str_cmp ( arg2, "aquarium" ) ) { if ( ch->platinum < 7500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); SET_BIT ( loc_area->area_flags, AREA_CHANGED ); return; } if ( arg3[0] != '\0' ) { if ( !str_cmp ( arg3, "fish" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_1 ), 0 ); } else if ( !str_cmp ( arg3, "turtle" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_2 ), 0 ); } else if ( !str_cmp ( arg3, "snake" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_3 ), 0 ); } else if ( !str_cmp ( 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->platinum -= 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 ( !str_cmp ( arg2, "chair" ) ) { if ( ch->platinum < 5000 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } if ( arg3[0] != '\0' ) { if ( !str_cmp ( arg3, "sturdy" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_8 ), 0 ); } else if ( !str_cmp ( arg3, "highback" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_6 ), 0 ); } else if ( !str_cmp ( arg3, "carved" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_5 ), 0 ); } else if ( !str_cmp ( 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->platinum -= 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 ( !str_cmp ( arg2, "desk" ) ) { if ( ch->platinum < 7500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } if ( arg3[0] != '\0' ) { if ( !str_cmp ( arg3, "oak" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_9 ), 0 ); } else if ( !str_cmp ( arg3, "pine" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_10 ), 0 ); } else if ( !str_cmp ( arg3, "carved" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_11 ), 0 ); } else if ( !str_cmp ( arg3, "polished" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_12 ), 0 ); } else if ( !str_cmp ( 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->platinum -= 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 ( !str_cmp ( arg2, "sofa" ) ) { if ( ch->platinum < 7500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } if ( arg3[0] != '\0' ) { if ( !str_cmp ( arg3, "plush" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_15 ), 0 ); } else if ( !str_cmp ( arg3, "padded" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_16 ), 0 ); } else if ( !str_cmp ( arg3, "comfortable" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_17 ), 0 ); } else if ( !str_cmp ( 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->platinum -= 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 ( !str_cmp ( arg2, "table" ) ) { if ( ch->platinum < 7500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } if ( arg3[0] != '\0' ) { if ( !str_cmp ( arg3, "oak" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_25 ), 0 ); } else if ( !str_cmp ( arg3, "pine" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_26 ), 0 ); } else if ( !str_cmp ( arg3, "carved" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_27 ), 0 ); } else if ( !str_cmp ( arg3, "polished" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_28 ), 0 ); } else if ( !str_cmp ( 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->platinum -= 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 ( !str_cmp ( arg2, "recliner" ) ) { if ( ch->platinum < 7500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } ch->platinum -= 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 ( !str_cmp ( arg2, "lamp" ) ) { if ( ch->platinum < 2000 ) { send_to_char ( "You do not have enough platinum 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->platinum -= 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 ( !str_cmp ( 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 ( !str_cmp ( arg2, "lantern" ) ) { if ( ch->platinum < 1500 ) { send_to_char ( "You do not have enough platinum 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->platinum -= 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 ( !str_cmp ( arg2, "torch" ) ) { if ( ch->platinum < 1000 ) { send_to_char ( "You do not have enough platinum 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->platinum -= 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 ( !str_cmp ( arg2, "dresser" ) ) { if ( ch->platinum < 7500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } if ( arg3[0] != '\0' ) { if ( !str_cmp ( arg3, "oak" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_34 ), 0 ); } else if ( !str_cmp ( arg3, "pine" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_35 ), 0 ); } else if ( !str_cmp ( arg3, "carved" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_36 ), 0 ); } else if ( !str_cmp ( arg3, "polished" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_37 ), 0 ); } else if ( !str_cmp ( 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->platinum -= 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 ( !str_cmp ( arg2, "bookcase" ) ) { if ( ch->platinum < 7500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } if ( arg3[0] != '\0' ) { if ( !str_cmp ( arg3, "oak" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_58 ), 0 ); } if ( !str_cmp ( arg3, "pine" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_59 ), 0 ); } if ( !str_cmp ( arg3, "carved" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_60 ), 0 ); } if ( !str_cmp ( arg3, "polished" ) ) { furn = create_object ( get_obj_index ( HOME_ITEM_61 ), 0 ); } if ( !str_cmp ( 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->platinum -= 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 ( !str_cmp ( arg2, "cot" ) ) { if ( ch->platinum < 1000 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } ch->platinum -= 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 ( !str_cmp ( arg2, "featherbed" ) ) { if ( ch->platinum < 2500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } ch->platinum -= 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 ( !str_cmp ( arg2, "twinbed" ) ) { if ( ch->platinum < 5000 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } ch->platinum -= 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 ( !str_cmp ( arg2, "postedbed" ) ) { if ( ch->platinum < 7500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } ch->platinum -= 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 ( !str_cmp ( arg2, "canopybed" ) ) { if ( ch->platinum < 8500 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } ch->platinum -= 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 ( !str_cmp ( arg2, "royalbed" ) ) { if ( ch->platinum < 9900 ) { send_to_char ( "You do not have enough platinum for this purchase.\n\r", ch ); return; } ch->platinum -= 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->platinum < 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 platinum. 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->platinum -= 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 platinum 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 ( !str_cmp ( argument, "confirm" ) ) { free_string ( loc->owner ); loc->owner = str_dup ( "" ); ch->platinum += 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 platinum 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; } }