/* this procedure handles the input parsing for the skill generator */ bool parse_gen_groups(CHAR_DATA *ch,const char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[100]; int gn,sn,i; if (argument[0] == '\0') return FALSE; argument = one_argument(argument,arg); if (!str_prefix(arg,"help")) { if (argument[0] == '\0') { do_help(ch,"group help"); return TRUE; } do_help(ch,argument); return TRUE; } // Removed by SinaC 2001, replaced with help /* // Added by Sinac 1997 if (!str_prefix(arg,"level")) { do_level(ch,argument); return TRUE; } */ // Added by SinaC 2001, so spells can be gained one by one not only by group if (!str_prefix(arg,"spell")) { list_spell_costs(ch); return TRUE; } // Added by SinaC 2001, so powers can be gained one by one not only by group if (!str_prefix(arg,"power")) { list_power_costs(ch); return TRUE; } // Added by SinaC 2003 if (!str_prefix(arg,"song")) { list_song_costs(ch); return TRUE; } if (!str_prefix(arg,"add")) { if (argument[0] == '\0') { send_to_char("You must provide a skill/spell or group name.\n\r",ch); return TRUE; } gn = group_lookup(argument); if (gn != -1) { if (ch->gen_data->group_chosen[gn] || ch->pcdata->group_known[gn]) { send_to_char("You already know that group!\n\r",ch); return TRUE; } if (class_grouprating( ch->bstat(classes), gn ) <= 0 || god_grouprating( ch, gn ) <= 0 ) { send_to_char("That group is not available.\n\r",ch); return TRUE; } sprintf(buf,"{W%s group added.{x\n\r",group_table[gn].name); send_to_char(buf,ch); ch->gen_data->group_chosen[gn] = TRUE; ch->gen_data->points_chosen += class_grouprating( ch->bstat(classes), gn ); gn_add(ch,gn); ch->pcdata->points += class_grouprating( ch->bstat(classes), gn ); return TRUE; } sn = ability_lookup(argument); if (sn != -1) { // Modified by SinaC 2001 for god skill if (ch->gen_data->ability_chosen[sn] || get_raceability( ch, sn ) || get_clanability( ch, sn ) /*|| get_godskill( ch, sn ) removed by SinaC 2003*/ || ch->pcdata->ability_info[sn].learned > 0) { send_to_char("You already know that skill/spell/power/song!\n\r",ch); return TRUE; } // Modified by SinaC 2003 if (class_gainabilityrating(ch, sn, ch->pcdata->ability_info[sn].casting_level ) <= 0 // Removed by SinaC 2001 so spells can be gained one by one // not only by group /*|| ability_table[sn].spell_fun != spell_null*/) { send_to_char("That skill/spell/power/song is not available.\n\r",ch); return TRUE; } // Added by SinaC 2001 if ( !can_gain_creation( ch, sn ) ) { send_to_charf( ch, "You don't fit the prereqs for %s.\n\r", ability_table[sn].name); return TRUE; } sprintf(buf, "{W%s skill/spell/power/song added.{x\n\r",ability_table[sn].name); send_to_char(buf,ch); ch->gen_data->ability_chosen[sn] = TRUE; ch->gen_data->points_chosen += class_abilityrating( ch, sn, ch->pcdata->ability_info[sn].casting_level ); //ch->pcdata->ability_info[sn].learned = 1; SinaC 2003, casting level need to be set group_add( ch, ability_table[sn].name, FALSE ); ch->pcdata->points += class_abilityrating( ch, sn, ch->pcdata->ability_info[sn].casting_level ); return TRUE; } send_to_char("No skills/spells/powers/songs or groups by that name...\n\r",ch); return TRUE; } if (!str_cmp(arg,"drop")) { if (argument[0] == '\0') { send_to_char("You must provide a skill/spell/power/song or group to drop.\n\r",ch); return TRUE; } gn = group_lookup(argument); if (gn != -1 && ch->gen_data->group_chosen[gn]) { send_to_char("{WGroup dropped.{x\n\r",ch); ch->gen_data->group_chosen[gn] = FALSE; ch->gen_data->points_chosen -= class_grouprating( ch->bstat(classes), gn ); gn_remove(ch,gn); for (i = 0; i < MAX_GROUP; i++) { if (ch->gen_data->group_chosen[gn]) gn_add(ch,gn); } ch->pcdata->points -= class_grouprating( ch->bstat(classes), gn ); // To avoid losing basic abilities which would be included in the group we just removed // we re-add basics group_add( ch, class_table[ class_firstclass( ch->bstat(classes) ) ].base_group, FALSE ); return TRUE; } sn = ability_lookup(argument); if (sn != -1 && ch->gen_data->ability_chosen[sn]) { send_to_char("{WSkill/spell/power/song dropped.{x\n\r",ch); ch->gen_data->ability_chosen[sn] = FALSE; ch->gen_data->points_chosen -= class_abilityrating( ch, sn, ch->pcdata->ability_info[sn].casting_level ); ch->pcdata->ability_info[sn].learned = 0; ch->pcdata->points -= class_abilityrating( ch, sn, ch->pcdata->ability_info[sn].casting_level ); return TRUE; } send_to_char("You haven't bought any such skill/spell/power/song or group.\n\r",ch); return TRUE; } if (!str_prefix(arg,"premise")) { do_help(ch,"premise"); return TRUE; } if (!str_prefix(arg,"list")) { list_group_costs(ch); return TRUE; } if (!str_prefix(arg,"learned")) { list_group_chosen(ch); return TRUE; } // Added by SinaC 2000 if (!str_prefix(arg,"known")){ list_group_known(ch); } if (!str_prefix(arg,"info")) { do_groups(ch,argument); return TRUE; } return FALSE; }
/* this procedure handles the input parsing for the skill generator */ bool parse_gen_groups(CHAR_DATA *ch,char *argument) { char arg[MAX_INPUT_LENGTH]={'\0'}; int gn,sn; if (argument[0] == '\0') return FALSE; argument = one_argument(argument,arg); if (!str_prefix(arg,"help")) { if (argument[0] == '\0') { do_function(ch, &do_help, "group help"); return TRUE; } do_function(ch, &do_help, argument); return TRUE; } if (!str_prefix(arg,"add")) { if (argument[0] == '\0') { send_to_char("You must provide a skill name.\n\r",ch); return TRUE; } gn = group_lookup(argument); if (gn != -1) { if (ch->gen_data->group_chosen[gn] || ch->pcdata->group_known[gn]) { send_to_char("You already know that group!\n\r",ch); return TRUE; } if (group_table[gn].rating[ch->iclass] < 1) { send_to_char("That group is not available.\n\r",ch); return TRUE; } /* Close security hole */ if (ch->gen_data->points_chosen + group_table[gn].rating[ch->iclass] > 300) { send_to_char( "You cannot take more than 300 creation points.\n\r", ch); return TRUE; } send_to_char( Format("%s group added\n\r",group_table[gn].name), ch); ch->gen_data->group_chosen[gn] = TRUE; ch->gen_data->points_chosen += group_table[gn].rating[ch->iclass]; gn_add(ch,gn); ch->pcdata->points += group_table[gn].rating[ch->iclass]; return TRUE; } sn = skill_lookup(argument); if (sn != -1) { if (ch->gen_data->skill_chosen[sn] || ch->pcdata->learned[sn] > 0) { send_to_char("You already know that skill!\n\r",ch); return TRUE; } if (skill_table[sn].rating[ch->iclass] < 1 || skill_table[sn].spell_fun != spell_null) { send_to_char("That skill is not available.\n\r",ch); return TRUE; } /* Close security hole */ if (ch->gen_data->points_chosen + skill_table[sn].rating[ch->iclass] > 300) { send_to_char("You cannot take more than 300 creation points.\n\r", ch); return TRUE; } send_to_char( Format("%s skill added\n\r",skill_table[sn].name), ch); ch->gen_data->skill_chosen[sn] = TRUE; ch->gen_data->points_chosen += skill_table[sn].rating[ch->iclass]; ch->pcdata->learned[sn] = 1; ch->pcdata->points += skill_table[sn].rating[ch->iclass]; return TRUE; } send_to_char("No skills or groups by that name...\n\r",ch); return TRUE; } if (!strcmp(arg,"drop")) { if (argument[0] == '\0') { send_to_char("You must provide a skill to drop.\n\r",ch); return TRUE; } gn = group_lookup(argument); if (gn != -1 && ch->gen_data->group_chosen[gn]) { int i = 0; send_to_char("Group dropped.\n\r",ch); ch->gen_data->group_chosen[gn] = FALSE; ch->gen_data->points_chosen -= group_table[gn].rating[ch->iclass]; gn_remove(ch,gn); for (i = 0; i < MAX_GROUP; i++) { if (ch->gen_data->group_chosen[gn]) gn_add(ch,gn); } ch->pcdata->points -= group_table[gn].rating[ch->iclass]; return TRUE; } sn = skill_lookup(argument); if (sn != -1 && ch->gen_data->skill_chosen[sn]) { send_to_char("Skill dropped.\n\r",ch); ch->gen_data->skill_chosen[sn] = FALSE; ch->gen_data->points_chosen -= skill_table[sn].rating[ch->iclass]; ch->pcdata->learned[sn] = 0; ch->pcdata->points -= skill_table[sn].rating[ch->iclass]; return TRUE; } send_to_char("You haven't bought any such skill or group.\n\r",ch); return TRUE; } if (!str_prefix(arg,"premise")) { do_function(ch, &do_help, "premise"); return TRUE; } if (!str_prefix(arg,"list")) { list_group_costs(ch); return TRUE; } if (!str_prefix(arg,"learned")) { list_group_chosen(ch); return TRUE; } if (!str_prefix(arg,"info")) { do_function(ch, &do_groups, argument); return TRUE; } return FALSE; }