/*Tailor skill by Tamarae -(tamarae@zdnetonebox.com) written for The Kravothian Mysts *Tailoring is the act of sewing pieces of material together to create handmade clothing *which in turn can be dyed many different colors and worn. Part of the Tailoring group *written by Tamarae */ You will of course need to define OBJ_VNUM_CLOTHING in mud.h Also you may have to add item_handmade, and item_sewkit That should be simple enough if you use grep item_key *.c and add the new item types. /*Tailor skill by Tamarae -(tamarae@zdnetonebox.com) *Syntax: tailor */ /* Tailor skill ported over to smaug1.4a by Vladaar 12-22-01 */ void do_tailor( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; char exdesc[20], ctype[20]; OBJ_DATA *clothing, *material, *sewkit; int chance, x, mnum, rnum, xnum; mnum=1; chance = (int) (LEARNED( ch,gsn_tailor)); /* Do we have the skill? */ if ( !IS_NPC(ch) && !(LEARNED(ch,gsn_tailor))) { send_to_char( "You better leave that to those who have been trained to tailor.\n\r", ch ); return; } argument = one_argument( argument, arg1 ); if ( arg1[0] == '\0' ) { send_to_char( "Tailor using which material?\n\r", ch ); send_to_char( "Syntax: tailor corpse \n\r", ch); send_to_char( "Available clothing types: cap, scarf, gloves, boots, belt, pants, tunic, cloak\n\r", ch); return; } if ( ( material = get_obj_carry( ch, arg1 ) ) == NULL ) { send_to_char( "You do not have any material to stitch.\n\r", ch ); return; } if (material->pIndexData->vnum != 10) { send_to_char("Sorry, you many only tailor the skins of corpses.\n\r", ch); return; } argument = one_argument( argument, arg2 ); if ( arg2[0] == '\0' ) { send_to_char( "Syntax: tailor corpse \n\r", ch); send_to_char( "Which type of clothing are you trying to tailor?\n\r", ch ); send_to_char( "Available clothing types: cap, scarf, gloves, boots, belt, pants, tunic, cloak\n\r", ch); return; } sewkit = get_eq_char(ch,WEAR_HOLD); if (sewkit == NULL || sewkit->item_type != ITEM_SEWKIT) { send_to_char("You need a sewing kit in order to tailor.\n\r",ch); return; } /* create the clothing - success! */ if (number_percent() < chance) { clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0); clothing->level = number_range( 1, ch->level); clothing->cost = ( ch->level ) * 75; SET_BIT(clothing->item_type,ITEM_HANDMADE); SET_BIT(clothing->wear_flags,ITEM_TAKE); if (!str_cmp(arg2,"cap")) { SET_BIT(clothing->wear_flags,ITEM_WEAR_HEAD); strcpy(ctype, "cap" ); clothing->weight = 10; mnum = 2; } else if (!str_cmp(arg2,"scarf")) { SET_BIT(clothing->wear_flags,ITEM_WEAR_NECK); strcpy(ctype, "scarf" ); clothing->weight = 5; mnum = 2; } else if (!str_cmp(arg2,"tunic")) { SET_BIT(clothing->wear_flags,ITEM_WEAR_BODY); strcpy(ctype, "tunic" ); clothing->weight = 15; mnum = 10; } else if (!str_cmp(arg2,"gloves")) { SET_BIT(clothing->wear_flags,ITEM_WEAR_HANDS); strcpy(ctype, "pair of gloves" ); clothing->weight = 5; mnum = 3; } else if (!str_cmp(arg2,"boots")) { SET_BIT(clothing->wear_flags,ITEM_WEAR_FEET); strcpy(ctype, "pair of boots" ); clothing->weight = 10; mnum = 5; } else if (!str_cmp(arg2,"pants")) { SET_BIT(clothing->wear_flags,ITEM_WEAR_LEGS); strcpy(ctype, "pair of pants" ); clothing->weight = 15; mnum = 8; } else if (!str_cmp(arg2,"belt")) { SET_BIT(clothing->wear_flags,ITEM_WEAR_WAIST); strcpy(ctype, "belt" ); clothing->weight = 5; mnum = 2; } else if (!str_cmp(arg2,"cloak")) { SET_BIT(clothing->wear_flags,ITEM_WEAR_ABOUT); strcpy(ctype, "cloak" ); clothing->weight = 20; mnum = 10; } else { send_to_char( "Available clothing types: cap, scarf, gloves, boots, belt, pants, tunic, cloak\n\", ch); return; } rnum = number_range(0, 9); switch( rnum ) { case 0: strcpy(exdesc, "fringed" ); break; case 1: strcpy(exdesc, "embroidered" ); break; case 2: strcpy(exdesc, "lacy" ); break; case 3: strcpy(exdesc, "scalloped" ); break; case 4: strcpy(exdesc, "reinforced" ); break; case 5: strcpy(exdesc, "stitched" ); break; case 6: strcpy(exdesc, "double-stitched" ); break; case 7: strcpy(exdesc, "patched" ); break; case 8: strcpy(exdesc, "tailored" ); break; case 9: strcpy(exdesc, "woven" ); break; } sprintf( buf, "%s %s", exdesc, ctype ); STRFREE( clothing->name ); clothing->name = STRALLOC (buf); sprintf( buf, "a handmade %s %s", exdesc, ctype ); STRFREE( clothing->short_descr ); clothing->short_descr = STRALLOC ( buf ); sprintf( buf, "A handmade %s crafted by %s", ctype, ch->name); STRFREE( clothing->description ); clothing->description = STRALLOC ( buf );for (x=1; x<=mnum; x++) { material = get_obj_carry (ch, arg1 ); if (material == NULL) { send_to_char( "You didn't realize it when you started, but you haven't enough material\n\r", ch); return; } extract_obj( material ); } obj_to_char( clothing, ch ); send_to_char("You snip and sew, creating a new piece of clothing.\n\r", ch); act( AT_ACTION,"$n snips and sews, creating a new piece of clothing.", ch, NULL, NULL, T0_ROOM); xnum = number_range(0, 100); if (xnum < 25) /*did the sewkit break?*/ { extract_obj( sewkit ); act( AT_ACTION, "$n pulls too hard on the needle and it breaks!", ch, NULL, NULL, TO_ROOM); send_to_char( "You pull too hard on the needle and it breaks!\n\r", ch ); } learn_from_failure( ch, gsn_tailor ); return; } else /* failure of skill */ { for (x=number_range(1,9); x<=mnum; x++) { material = get_obj_carry (ch, arg1 ); if (material == NULL) { send_to_char( "Your thread knots, and your material is ruined.\n\r", ch); return; } extract_obj( material ); } send_to_char("You snip and sew, but only make a mess.\n\r", ch); act( AT_ACTION, "$n snips and sews but doesn't make anything useful.", ch, NULL, NULL, TO_ROOM); xnum = number_range(0, 100); if (xnum < 25) /*did the sewkit break?*/ { extract_obj( sewkit ); act( AT_ACTION, "$n pulls too hard on the needle and it breaks!", ch, NULL, NULL, TO_ROOM); send_to_char( "You pull too hard on the needle and it breaks!\n\r", ch ); } learn_from_success( ch, gsn_tailor ); } }