> I am looking to add in something like Gmaster on the circle ftp site. I > want to let only certain guildmasters be able to train people in > certain spells/skills. That way people will have to search out the martial > artist of the mountain to learn second attack (you get the idea). And > maybe even having different masters train to different degrees in a > certain skill. Does anyone have a decent thought out way to accomplish > this? Gmaster, I believe, does not do all this, and the directions for it > are not clear on exactly what it allows. Any help for I could build my own > system would be highly helpful. hrm..psuedo code to follow.. siv ACMD(do_train) { bool found; int i, j, skill_num = -1; struct char_data *mob; struct { sh_int master; /* vnum of the master */ int skills[5]; /* skills that this mob can train */ } masters[] = { { 13107, {SKILL_SECOND_ATT, SKILL_THIRD_ATT, -1, -1, -1}}, { 1458, {SPELL_FIREBALL, SPELL_INCINERATE, SPELL_IMPLOSION, -1, -1}}, {-1, {-1, -1, -1, -1, -1}} }; /* change the first number to the vnum of the trainer mob, and add up to five skills that the master can teach (-1 means not used) */ for (mob = world[ch->in_room].people; mob && !found; mob = mob->next_in_room) for (i = 0; masters[i].master != -1; i++) if (GET_MOB_VNUM(mob) == masters[i].master) { found = TRUE; break; } if (!mob) { send_to_char("There is no one here to train you.\r\n", ch); return; } one_argument(argument, arg); if (!*arg) { sprintf(buf, "I can teach you these skills:\r\n"); for (j = 0; masters[i].skills[j] != -1 && j < 5; j++) sprintf(buf + strlen(buf), "%s\r\n", spells[masters[i].skills[j]]); return; } /* ok, we were given an argument (ie, train fireball)..find out if it's one of the skills offered, and if the char qualifies */ for (j = 0; masters[i].skills[j] != -1 && j < 5; j++) if (!str_cmp(arg, spells[masters[i].skills[j]]) { skill_num = masters[i].skills[j]; break; } if (skill_num == -1) { do_say(mob, "I cannot train you in that skill.", 0, 0); return; } if (GET_LEVEL(ch) < spell_info[skill_num].min_level[(int) GET_CLASS(ch)]) { do_say(mob, "You are not ready to train in that skill.", 0, 0); return; } if (GET_SKILL(ch, skill_num) >= LEARNED(ch)) { do_say(mob, "You are already learned in that skill.", 0, 0); return; } send_to_char("You train for a while...\r\n", ch); GET_PRACTICES(ch)--; percent = GET_SKILL(ch, skill_num); percent += MIN(MAXGAIN(ch), MAX(MINGAIN(ch), int_app[GET_INT(ch)].learn)); SET_SKILL(ch, skill_num, MIN(LEARNED(ch), percent)); if (GET_SKILL(ch, skill_num) >= LEARNED(ch)) send_to_char("You are now learned in that area.\r\n", ch); } +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST