Hello, I am severly stuck on this little problem :(, I am trying to make
it so that when you practice a skill it will check to see that you are the
correct level <if it is from your current class>, or if you have already
passed the class that was needed to practice this. The list skills is
perfect thanks to DK, but I cannot seem to get teh practicing part down,
wither it can prac nothing or everything :(.
Here is what i have in spec_procs.c SPECIAL(guild) to check if you can NOT
practice the skill, but it comes back saying that i cannot practice ANY
SKILL.
if (VIRT_LVL < spell_info[i].min_level[(int) GET_CLASS(ch)]||
CLASS_SKILL(ch, 1, i) || CLASS_SKILL(ch, 2, i) ||
CLASS_SKILL(ch, 3, i)) {
send_to_char("&1Working? You cannot prac this skill&0.\r\n", ch);
return 1;
}
and if I make another approach i can practice what i am supposed to in my
current class, but all remort skills can be practiced :(
if ((VIRT_LVL <
spell_info[skill_num].min_level[(int)GET_CLASS(ch)]) &&
(GET_LEVEL(ch) < (spell_info[skill_num].min_level[(int)GET_REMORT(ch)]) &&
spell_info[skill_num].min_level[(int)GET_REMORT_TWO(ch)]) &&
spell_info[skill_num].min_level[(int)GET_REMORT_THREE(ch)]){
sprintf(buf, "&1You do not know of that %s.\r\n&0", SPLSKL(ch));
send_to_char(buf, ch);
return 1;
}
I have put the files from spec_procs.c in here in case you needed to
look at any of them.
Thanks in advance
Alaron.
void list_skills(struct char_data * ch)
{
extern char *spells[];
extern struct spell_info_type spell_info[];
int i, sortpos;
if (!GET_PRACTICES(ch))
strcpy(buf, "You have no practice sessions remaining.\r\n");
else
sprintf(buf, "You have %d practice session%s remaining.\r\n",
GET_PRACTICES(ch), (GET_PRACTICES(ch) == 1 ? "" : "s"));
sprintf(buf, "%sYou know of the following %ss:\r\n", buf, SPLSKL(ch));
strcpy(buf2, buf);
for (sortpos = 1; sortpos < MAX_SKILLS; sortpos++) {
i = spell_sort_info[sortpos];
if (strlen(buf2) >= MAX_STRING_LENGTH - 32) {
strcat(buf2, "**OVERFLOW**\r\n");
break;
}
#define CLASS(ch, i) \
((i) == 0 ? GET_CLASS(ch) : (i) == 1 ? GET_REMORT(ch) : \
(i) == 2 ? GET_REMORT_TWO(ch) : GET_REMORT_THREE(ch))
#define HAS_CLASS(ch, i) (CLASS((ch), (i)) != GET_CLASS(ch))
#define CLASS_SKILL(ch, i, skl) \
(HAS_CLASS((ch), (i)) && \
(LVL_IMMORT -1) >= spell_info[(skl)].min_level[CLASS((ch), (i))])
/* new try if statement malcor */
if (GET_REMORT(ch) == -1){
if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)]) {
sprintf(buf, "%-20s %s\r\n", spells[i], how_good(GET_SKILL(ch, i)));
strcat(buf2, buf);
}
}
else if (GET_REMORT_TWO(ch) == -1) {
if ((GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)]) ||
CLASS_SKILL(ch, 1, i)){
sprintf(buf, "%-20s %s\r\n", spells[i], how_good(GET_SKILL(ch, i)));
strcat(buf2, buf);
}
}
else if (GET_REMORT_THREE(ch) == -1){
if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)]||
CLASS_SKILL(ch, 1, i) || CLASS_SKILL(ch, 2, i)){
sprintf(buf, "%-20s %s\r\n", spells[i], how_good(GET_SKILL(ch, i)));
strcat(buf2, buf);
}
}
else if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)]||
CLASS_SKILL(ch, 1, i) || CLASS_SKILL(ch, 2, i) ||
CLASS_SKILL(ch, 3, i)) {
sprintf(buf, "%-20s %s\r\n", spells[i], how_good(GET_SKILL(ch, i)));
strcat(buf2, buf);
}
}
page_string(ch->desc, buf2, 1, "");
}
SPECIAL(guild)
{
int skill_num, percent, VIRT_LVL, i = 0;
extern struct spell_info_type spell_info[];
extern struct int_app_type int_app[];
if (IS_NPC(ch) || !CMD_IS("practice"))
return 0;
if (GET_REMORT(ch) == -1)
VIRT_LVL = GET_LEVEL(ch);
else if ((GET_REMORT_TWO(ch) == -1) && (GET_REMORT(ch) != -1))
VIRT_LVL = GET_LEVEL(ch) - 25;
else {
VIRT_LVL = GET_LEVEL(ch) - 50;
}
skip_spaces(&argument);
if (!*argument) {
list_skills(ch);
return 1;
}
if (GET_PRACTICES(ch) <= 0) {
send_to_char("You do not seem to be able to practice now.\r\n", ch);
return 1;
}
skill_num = find_skill_num(argument);
/* Stock circle checking min_level
if ((skill_num < 1 ||
GET_LEVEL(ch) < spell_info[skill_num].min_level[(int)
GET_CLASS(ch)])){
*/
// Testing new here, we want to be able to practice all skills that are
// shown with the prac command and not options/
if (GET_SKILL(ch, skill_num) >= LEARNED(ch)) {
send_to_char("You are already learned in that area.\r\n", ch);
return 1;
}
send_to_char("You practice 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);
return 1;
}
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST