#include <sys/types.h> #include <stdio.h> #include <string.h> #include <time.h> #include "mud.h" char *tattoo_bit_name(int tattoo_flags) { static char buf[512]; buf[0] = '\0'; if ( (tattoo_flags & TATTOO_BULL) == TATTOO_BULL ) strcat(buf, " A raging bull on your right arm. \n\r"); if ( (tattoo_flags & TATTOO_PANTHER) == TATTOO_PANTHER ) strcat(buf, " A sleek black panther on your left arm. \n\r"); if ( (tattoo_flags & TATTOO_WOLF) == TATTOO_WOLF ) strcat(buf, " A wolf stalking it's prey on your right leg. \n\r"); if ( (tattoo_flags & TATTOO_BEAR) == TATTOO_BEAR ) strcat(buf, " A giant sleeping bear on your left leg. \n\r"); if ( (tattoo_flags & TATTOO_RABBIT) == TATTOO_RABBIT ) strcat(buf, " A little white rabbit on your ankle. \n\r"); if ( (tattoo_flags & TATTOO_DRAGON) == TATTOO_DRAGON ) strcat(buf, " A great flying flaming dragon on your chest.\n\r"); if ( (tattoo_flags & TATTOO_MOON) == TATTOO_MOON ) strcat(buf, " A crescent moon across your back. \n\r"); return ( buf[0] != '\0' ) ? buf+1 : "none"; } //--------------------------------------------------------------------------------------------- void do_tattoo(CHAR_DATA *ch, char *argument) { CHAR_DATA *mob; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int cost; /* check for artist */ for ( mob = ch->in_room->first_person; mob; mob = mob->next_in_room ) { if ( IS_NPC(mob) && xIS_SET(mob->act, ACT_IS_TATTOOARTIST) ) break; } /* if there are none , display the characters tattoos*/ if ( mob == NULL ) { sprintf(buf, "&C+----------------- Magical Tattoos -----------------------+&W\n\r %s\n\r", tattoo_bit_name(ch->tattoo)); send_to_char(buf,ch); return; } one_argument(argument,arg); /* if there are a surgeon, give a list*/ if (arg[0] == '\0') { /* display price list */ act(AT_CYAN,"&z&C$N says 'I have these parts in stock:'",ch,NULL,mob,TO_CHAR); send_to_char(" &z&W+---Tattoos---+ +--------Cost-------- \n\r",ch); send_to_char(" &CRaging_Bull &Y350,000 &CGold\n\r",ch); send_to_char(" &CSleek_Panther &Y350,000 &CGold\n\r",ch); send_to_char(" &CStalking_Wolf &Y350,000 &CGold\n\r",ch); send_to_char(" &CSleeping_Bear &Y450,000 &CGold\n\r",ch); send_to_char(" &CRabbit &Y150,000 &CGold\n\r",ch); send_to_char(" &CFlying_Dragon &Y1,000,000 &CGold\n\r",ch); send_to_char(" &CRising_Moon &Y750,000 &CGold\n\r",ch); send_to_char(" &CType &Wtattoo &B<&Wtype&B>&C to buy one, or help tattoo to get more info.\n\r",ch); return; } /* Lets see what the character wants to have */ // Raging Bull if (!str_prefix(arg,"raging_bull")) { cost = 350000; if (cost > (ch->gold)) { act(AT_CYAN,"$N says 'I'm sorry but please return to me when you have more gold.'", ch,NULL,mob,TO_CHAR); return; } if (IS_SET(ch->tattoo,TATTOO_BULL)) { send_to_char( "You already have that tattoo.\n\r", ch ); return; } SET_BIT (ch->tattoo, TATTOO_BULL ); ch->perm_str += 3; ch->perm_con += 3; } // Sleek Panther else if (!str_prefix(arg,"sleek_panther")) { cost = 350000; if (cost > (ch->gold)) { act(AT_CYAN,"$N says 'I'm sorry but please return to me when you have more gold.'", ch,NULL,mob,TO_CHAR); return; } if (IS_SET(ch->tattoo,TATTOO_PANTHER)) { send_to_char( "You already have that tattoo.\n\r", ch ); return; } SET_BIT (ch->tattoo, TATTOO_PANTHER ); xSET_BIT (ch->affected_by, AFF_HIDE ); ch->perm_dex += 2; ch->armor -= 10; } // Stalking Wolf else if (!str_prefix(arg,"stalking_wolf")) { cost = 350000; if (cost > (ch->gold)) { act(AT_CYAN,"$N says 'I'm sorry but please return to me when you have more gold.'", ch,NULL,mob,TO_CHAR); return; } if (IS_SET(ch->tattoo,TATTOO_WOLF)) { send_to_char( "You already have that tattoo.\n\r", ch ); return; } SET_BIT (ch->tattoo, TATTOO_WOLF ); xSET_BIT (ch->affected_by, AFF_SNEAK ); ch->perm_dex += 2; ch->armor -= 10; } // Sleeping Bear else if (!str_prefix(arg,"sleeping_bear")) { cost = 450000; if (cost > (ch->gold)) { act(AT_CYAN,"$N says 'I'm sorry but please return to me when you have more gold.'", ch,NULL,mob,TO_CHAR); return; } if (IS_SET(ch->tattoo,TATTOO_BEAR)) { send_to_char( "You already have that tattoo.\n\r", ch ); return; } SET_BIT (ch->tattoo, TATTOO_BEAR ); SET_BIT (ch->immune, RIS_SLEEP ); SET_BIT (ch->resistant, RIS_NONMAGIC ); ch->perm_str += 2; ch->perm_con += 4; ch->damroll += 20; } // Rabbit else if (!str_prefix(arg,"Rabbit")) { cost = 150000; if (cost > (ch->gold)) { act(AT_CYAN,"$N says 'I'm sorry but please return to me when you have more gold.'", ch,NULL,mob,TO_CHAR); return; } if (IS_SET(ch->tattoo,TATTOO_RABBIT)) { send_to_char( "You already have that tattoo.\n\r", ch ); return; } SET_BIT (ch->tattoo, TATTOO_RABBIT ); ch->max_move += 50; ch->perm_dex += 2; ch->armor -= 10; } // Flying Dragon else if (!str_prefix(arg,"Flying_Dragon")) { cost = 1000000; if (cost > (ch->gold)) { act(AT_CYAN,"$N says 'I'm sorry but please return to me when you have more gold.'", ch,NULL,mob,TO_CHAR); return; } if (IS_SET(ch->tattoo,TATTOO_DRAGON)) { send_to_char( "You already have that tattoo.\n\r", ch ); return; } SET_BIT (ch->tattoo, TATTOO_DRAGON ); ch->max_hit += 100; ch->hitroll += 25; ch->damroll += 25; ch->armor -= 50; ch->perm_str += 2; ch->perm_dex += 2; ch->perm_con += 2; ch->perm_int += 2; ch->perm_wis += 2; ch->perm_cha += 2; ch->perm_lck += 2; xSET_BIT (ch->affected_by, AFF_FLYING ); SET_BIT (ch->resistant, RIS_MAGIC); } // Rising Moon else if (!str_prefix(arg,"Rising_Moon")) { cost = 750000; if (cost > (ch->gold)) { act(AT_CYAN,"$N says 'I'm sorry but please return to me when you have more gold.'", ch,NULL,mob,TO_CHAR); return; } if (IS_SET(ch->tattoo,TATTOO_MOON)) { send_to_char( "You already have that tattoo.\n\r", ch ); return; } SET_BIT (ch->tattoo, TATTOO_MOON ); xSET_BIT (ch->affected_by, AFF_TRUESIGHT ); SET_BIT (ch->resistant, RIS_DRAIN ); ch->max_mana += 200; ch->perm_int += 2; } else { act(AT_CYAN,"$N says 'Type 'tattoo' for a list of tattoos.'", ch,NULL,mob,TO_CHAR); return; } WAIT_STATE(ch,PULSE_VIOLENCE); ch->gold -= cost; act(AT_CYAN,"$n says 'There we go, all finished'.",mob,NULL,NULL,TO_ROOM); }