/**************************************************************************** * _______ _ ______ _______ _______ ______ * * ( ____ \( \ ( __ \ |\ /|( ___ )( )|\ /|( __ \ * * | ( \/| ( | ( \ )| ) ( || ( ) || () () || ) ( || ( \ ) * * | (__ | | | | ) || (___) || (___) || || || || | | || | ) | * * | __) | | | | | || ___ || ___ || |(_)| || | | || | | | * * | ( | | | | ) || ( ) || ( ) || | | || | | || | ) | * * | (____/\| (____/\| (__/ )| ) ( || ) ( || ) ( || (___) || (__/ ) * * (_______/(_______/(______/ |/ \||/ \||/ \|(_______)(______/ * * +-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ * * |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 <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <time.h> #include "./Headers/mud.h" void do_train( CHAR_DATA * ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char buf2[20]; CHAR_DATA *mob = NULL; int add_hp = 0; int add_mana = 0; short *AttrPerm; char *pOutput; int cost, cost1, cost2, cost3, cost4, cost5; /* Urrgghh */ buf[0] = '\0'; buf2[0] = '\0'; if( IS_NPC( ch ) ) { send_to_char( "Not for NPCs. Sorry.\n\r", ch ); return; } /* * Check for trainer. */ for( mob = ch->in_room->first_person; mob; mob = mob->next_in_room ) { if( IS_NPC( mob ) && IS_ACT_FLAG( mob, ACT_TRAINER ) ) break; } if( mob == NULL ) { send_to_char( "You can't do that here.\n\r", ch ); return; } if( argument[0] == '\0' ) { sprintf( buf, "You have %d practice sessions.\n\r", ch->practice ); send_to_char( buf, ch ); argument = "foo"; } cost = 8; if( !str_cmp( argument, "str" ) ) { if( class_table[ch->class]->attr_second == APPLY_STR ) cost = 7; AttrPerm = &ch->perm_str; pOutput = "strength"; } else if( !str_cmp( argument, "str" ) ) { if( class_table[ch->class]->attr_prime == APPLY_STR ) cost = 6; AttrPerm = &ch->perm_str; pOutput = "strength"; } else if( !str_cmp( argument, "int" ) ) { if( class_table[ch->class]->attr_second == APPLY_INT ) cost = 6; AttrPerm = &ch->perm_int; pOutput = "intelligence"; } else if( !str_cmp( argument, "int" ) ) { if( class_table[ch->class]->attr_prime == APPLY_INT ) cost = 6; AttrPerm = &ch->perm_int; pOutput = "intelligence"; } else if( !str_cmp( argument, "wis" ) ) { if( class_table[ch->class]->attr_second == APPLY_WIS ) cost = 7; AttrPerm = &ch->perm_wis; pOutput = "wisdom"; } else if( !str_cmp( argument, "wis" ) ) { if( class_table[ch->class]->attr_prime == APPLY_WIS ) cost = 7; AttrPerm = &ch->perm_wis; pOutput = "wisdom"; } else if( !str_cmp( argument, "dex" ) ) { if( class_table[ch->class]->attr_second == APPLY_DEX ) cost = 7; AttrPerm = &ch->perm_dex; pOutput = "dexterity"; } else if( !str_cmp( argument, "dex" ) ) { if( class_table[ch->class]->attr_prime == APPLY_DEX ) cost = 6; AttrPerm = &ch->perm_dex; pOutput = "dexterity"; } else if( !str_cmp( argument, "con" ) ) { if( class_table[ch->class]->attr_second == APPLY_CON ) cost = 7; AttrPerm = &ch->perm_con; pOutput = "constitution"; } else if( !str_cmp( argument, "con" ) ) { if( class_table[ch->class]->attr_prime == APPLY_CON ) cost = 6; AttrPerm = &ch->perm_con; pOutput = "constitution"; } else if( !str_cmp( argument, "hp" ) ) { AttrPerm = &ch->max_hit; pOutput = "number of hit points"; cost = 10; /* this is pracs per "train hp" */ add_hp = 10; /* this is hp gained per "train hp" */ } else if( !str_cmp( argument, "mana" ) ) { AttrPerm = &ch->max_mana; pOutput = "amount of mana"; cost = 10; add_mana = 10; } else { /* * Work out the costs... */ cost1 = 8; cost2 = 8; cost3 = 8; cost4 = 8; cost5 = 8; if( class_table[ch->class]->attr_prime == APPLY_STR ) cost1 = 6; if( class_table[ch->class]->attr_second == APPLY_STR ) cost1 = 7; if( class_table[ch->class]->attr_prime == APPLY_INT ) cost2 = 6; if( class_table[ch->class]->attr_second == APPLY_INT ) cost2 = 7; if( class_table[ch->class]->attr_prime == APPLY_WIS ) cost3 = 6; if( class_table[ch->class]->attr_second == APPLY_WIS ) cost3 = 7; if( class_table[ch->class]->attr_prime == APPLY_DEX ) cost4 = 6; if( class_table[ch->class]->attr_second == APPLY_DEX ) cost4 = 7; if( class_table[ch->class]->attr_prime == APPLY_CON ) cost5 = 6; if( class_table[ch->class]->attr_second == APPLY_CON ) cost5 = 7; strcpy( buf, "You can train: hp (4) mana (5)" ); if( ch->perm_str < 25 ) { strcat( buf, " str" ); sprintf( buf2, " (%d)", cost1 ); strcat( buf, buf2 ); } if( ch->perm_int < 25 ) { strcat( buf, " int" ); sprintf( buf2, " (%d)", cost2 ); strcat( buf, buf2 ); } if( ch->perm_wis < 25 ) { strcat( buf, " wis" ); sprintf( buf2, " (%d)", cost3 ); strcat( buf, buf2 ); } if( ch->perm_dex < 25 ) { strcat( buf, " dex" ); sprintf( buf2, " (%d)", cost4 ); strcat( buf, buf2 ); } if( ch->perm_con < 25 ) { strcat( buf, " con" ); sprintf( buf2, " (%d)", cost5 ); strcat( buf, buf2 ); } if( buf[strlen( buf ) - 1] != ':' ) { strcat( buf, ".\n\r" ); send_to_char( buf, ch ); } return; } if( !str_cmp( argument, "hp" ) ) { if( cost > ch->practice ) { send_to_char( "You don't have enough practices.\n\r", ch ); return; } ch->practice -= 10; /* *AttrPerm += add_hp;*/ ch->max_hit += add_hp; act( AT_ACTION, "Your $T increases!", ch, NULL, pOutput, TO_CHAR ); act( AT_ACTION, "$n's $T increases!", ch, NULL, pOutput, TO_ROOM ); return; } if( !str_cmp( argument, "mana" ) ) { if( cost > ch->practice ) { send_to_char( "You don't have enough practices.\n\r", ch ); return; } ch->practice -= 10; /* *AttrPerm += add_mana;*/ ch->max_mana += add_mana; act( AT_ACTION, "Your $T increases!", ch, NULL, pOutput, TO_CHAR ); act( AT_ACTION, "$n's $T increases!", ch, NULL, pOutput, TO_ROOM ); return; } if( !str_cmp( argument, "str" ) ) { if( *AttrPerm >= 25 ) { act( AT_ACTION, "Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR ); return; } if( cost > ch->practice ) { send_to_char( "You don't have enough practices.\n\r", ch ); return; } ch->practice -= cost; /* *AttrPerm += add_mana;*/ ch->perm_str += 1; act( AT_ACTION, "Your $T increases!", ch, NULL, pOutput, TO_CHAR ); act( AT_ACTION, "$n's $T increases!", ch, NULL, pOutput, TO_ROOM ); return; } if( !str_cmp( argument, "int" ) ) { if( *AttrPerm >= 25 ) { act( AT_ACTION, "Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR ); return; } if( cost > ch->practice ) { send_to_char( "You don't have enough practices.\n\r", ch ); return; } ch->practice -= cost; /* *AttrPerm += add_mana;*/ ch->perm_int += 1; act( AT_ACTION, "Your $T increases!", ch, NULL, pOutput, TO_CHAR ); act( AT_ACTION, "$n's $T increases!", ch, NULL, pOutput, TO_ROOM ); return; } if( !str_cmp( argument, "wis" ) ) { if( *AttrPerm >= 25 ) { act( AT_ACTION, "Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR ); return; } if( cost > ch->practice ) { send_to_char( "You don't have enough practices.\n\r", ch ); return; } ch->practice -= cost; /* *AttrPerm += add_mana;*/ ch->perm_wis += 1; act( AT_ACTION, "Your $T increases!", ch, NULL, pOutput, TO_CHAR ); act( AT_ACTION, "$n's $T increases!", ch, NULL, pOutput, TO_ROOM ); return; } if( !str_cmp( argument, "dex" ) ) { if( *AttrPerm >= 25 ) { act( AT_ACTION, "Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR ); return; } if( cost > ch->practice ) { send_to_char( "You don't have enough practices.\n\r", ch ); return; } ch->practice -= cost; /* *AttrPerm += add_mana;*/ ch->perm_dex += 1; act( AT_ACTION, "Your $T increases!", ch, NULL, pOutput, TO_CHAR ); act( AT_ACTION, "$n's $T increases!", ch, NULL, pOutput, TO_ROOM ); return; } if( !str_cmp( argument, "con" ) ) { if( *AttrPerm >= 25 ) { act( AT_ACTION, "Your $T is already at maximum.", ch, NULL, pOutput, TO_CHAR ); return; } if( cost > ch->practice ) { send_to_char( "You don't have enough practices.\n\r", ch ); return; } ch->practice -= cost; /* *AttrPerm += add_mana;*/ ch->perm_con += 1; act( AT_ACTION, "Your $T increases!", ch, NULL, pOutput, TO_CHAR ); act( AT_ACTION, "$n's $T increases!", ch, NULL, pOutput, TO_ROOM ); return; } }