/*************************************************************************** * 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; } }