/****************************************************************************
* _______ _ ______ _______ _______ ______ *
* ( ____ \( \ ( __ \ |\ /|( ___ )( )|\ /|( __ \ *
* | ( \/| ( | ( \ )| ) ( || ( ) || () () || ) ( || ( \ ) *
* | (__ | | | | ) || (___) || (___) || || || || | | || | ) | *
* | __) | | | | | || ___ || ___ || |(_)| || | | || | | | *
* | ( | | | | ) || ( ) || ( ) || | | || | | || | ) | *
* | (____/\| (____/\| (__/ )| ) ( || ) ( || ) ( || (___) || (__/ ) *
* (_______/(_______/(______/ |/ \||/ \||/ \|(_______)(______/ *
* +-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ *
* |T|h|e| |O|a|k|l|a|n|d| |C|h|r|o|n|i|c|l|e|s| *
* +-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ *
* ------------------------------------------------------------------------- *
* EldhaMUD code (C) 2003-2005 by Robert Powell (Tommi) *
* EldhaMUD Team: Celest, Altere and Krelowyn *
* ------------------------------------------------------------------------- *
* *
****************************************************************************/
#include <sys/types.h>
#include <string.h>
#include "./Headers/mud.h"
#include "./Headers/leatherworker.h"
/*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
*Tailor skill by Tamarae -(tamarae@zdnetonebox.com)
*Syntax: tailor <material> <clothing type>
*
* Tailor skill ported over to smaug1.4a by Vladaar 12-22-01
*
*Modified and changed how it works, SmaugFUSS1.4 by Tommi 2005*/
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 random_number;
/* 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 <clothing>\n\r", ch);
send_to_char( "Available clothing types: cap, scarf, gloves, boots, belt, pants, tunic, cloak, bracer, vest, whip\n\r", ch);
return;
}
argument = one_argument( argument, arg2 );
if ( arg2[0] == '\0' )
{
send_to_char( "Syntax: tailor corpse <clothing>\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, bracer, vest, whip\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 != OBJ_VNUM_CORPSE)
{
send_to_char("Sorry, you many only tailor the skins of corpses.\n\r", ch);
return;
}
if ( ( sewkit = get_eq_char( ch, WEAR_HOLD ) ) == NULL || sewkit->pIndexData->vnum != OBJ_VNUM_SEWKIT )
{
send_to_char( "You need a sewing kit in order to tailor.\n\r", ch );
return;
}
if ( number_percent() < LEARNED(ch, gsn_tailor) ) /* create the clothing - success! */
{
if (!str_cmp(arg2,"cap"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_HEAD);
strcpy(ctype, "cap" );
clothing->weight = 10;
}
else if (!str_cmp(arg2,"scarf"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_NECK);
strcpy(ctype, "scarf" );
clothing->weight = 5;
}
else if (!str_cmp(arg2,"bracer"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_WRIST);
strcpy(ctype, "bracer" );
clothing->weight = 5;
}
else if (!str_cmp(arg2,"vest"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_ABOUT);
strcpy(ctype, "vest" );
clothing->weight = 5;
}
else if (!str_cmp(arg2,"tunic"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_BODY);
strcpy(ctype, "tunic" );
clothing->weight = 15;
}
else if (!str_cmp(arg2,"gloves"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_HANDS);
strcpy(ctype, "pair of gloves" );
clothing->weight = 5;
}
else if (!str_cmp(arg2,"boots"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_FEET);
strcpy(ctype, "pair of boots" );
clothing->weight = 10;
}
else if (!str_cmp(arg2,"pants"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_LEGS);
strcpy(ctype, "pair of pants" );
clothing->weight = 15;
}
else if (!str_cmp(arg2,"belt"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_WAIST);
strcpy(ctype, "belt" );
clothing->weight = 5;
}
else if (!str_cmp(arg2,"cloak"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_CLOTHING), 0);
SET_BIT(clothing->wear_flags,ITEM_WEAR_ABOUT);
strcpy(ctype, "cloak" );
clothing->weight = 20;
}
else if (!str_cmp(arg2,"whip"))
{
clothing = create_object(get_obj_index(OBJ_VNUM_FORGE_WEAPON), 0);
clothing->value[0] = 13; //set the condition to perfect
if(ch->level < 10) // sets the num dice
clothing->value[1] = 4;
else if(ch->level < 20)
clothing->value[1] = 6;
else if(ch->level < 30)
clothing->value[1] = 8;
else if(ch->level < 40)
clothing->value[1] = 10;
else if(ch->level < 50)
clothing->value[1] = 12;
else if(ch->level < 60)
clothing->value[1] = 14;
else if(ch->level < 70)
clothing->value[1] = 16;
else if(ch->level < 80)
clothing->value[1] = 18;
else if(ch->level < 90)
clothing->value[1] = 20;
else
clothing->value[1] = 22;
clothing->value[2] = ch->level* 2; //sets the size dice
if (clothing->value[2] <= 20)
clothing->value[2] = 20;
clothing->level = ch->level;
clothing->cost = 100;
clothing->value[0] = 13;
clothing->value[3] = 4;
clothing->weight = 10;
sprintf( buf, "tailored leather whip" );
STRFREE( clothing->name );
clothing->name = STRALLOC (buf);
sprintf( buf, "a handmade tailored leather whip");
STRFREE( clothing->short_descr );
clothing->short_descr = STRALLOC ( buf );
sprintf( buf, "A handmade tailored leather whip by %s", ch->name);
STRFREE( clothing->description );
clothing->description = STRALLOC ( buf );
obj_to_char( clothing, ch );
extract_obj( material );
send_to_char("You snip and sew, creating a new leather whip.\n\r", ch);
act( AT_ACTION, "$n snips and sews creating a new leather whip.", ch, NULL, NULL, TO_ROOM );
learn_from_success( ch, gsn_tailor );
return;
}
else
{
send_to_char( "Available clothing types: cap, scarf, gloves, boots, belt, pants, tunic, cloak\n\r", ch);
return;
}
random_number = number_range(0, 9);
switch( random_number )
{
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;
}
separate_obj( material );
obj_from_char( material );
clothing->level = ch->level;
clothing->cost = ( ch->level ) * 75;
clothing->value[0] = ch->level / 4 + 5;
if (clothing->value[0] < 5)
clothing->value[0] = 5;
clothing->value[1] = clothing->value[0];
clothing->value[3] = 13;
SET_BIT(clothing->item_type,ITEM_ARMOR);
SET_BIT(clothing->wear_flags,ITEM_TAKE);
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 );
obj_to_char( clothing, ch );
extract_obj( material );
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, TO_ROOM );
learn_from_success( ch, gsn_tailor );
return;
}
else
random_number = number_range(0, 100);
if (random_number < 20) /*did the sewkit break?*/
{
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 );
extract_obj( sewkit );
learn_from_failure( ch, gsn_tailor );
return;
}
else if (random_number > 20 && random_number < 40) /*small chance to loose all your material*/
{
send_to_char( "Your thread knots, and your material is ruined.\n\r", ch);
act( AT_ACTION, "$n gets a knot in the thread and ruins the material.", ch, NULL, NULL, TO_ROOM);
extract_obj( material );
learn_from_failure( ch, gsn_tailor );
return;
}
else if (random_number > 40 && random_number < 60)
{
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);
learn_from_failure( ch, gsn_tailor );
return;
}
else if (random_number >60 && random_number < 100)
{
send_to_char("A small tear appears in the fabric, destroying all your work.\n\r", ch);
act( AT_ACTION, "$n tears the fabric, making a total mess.", ch, NULL, NULL, TO_ROOM);
learn_from_failure( ch, gsn_tailor );
return;
}
}