NEWBIE: spec_proc problems...

zero@baker.cnw.com
Date: 05/13/96


I am attempting to write a spec_proc for having guildmasters let you gain 
levels. Note that i have correctly assigned the proc and gain_exp no 
longer automatically raises levels when you have enough exp.  I created 
the command "level" and the follwoing spec_proc called "guild_levels".

ACMD(do_level)
{
  static char arg2[MAX_INPUT_LENGTH];

  half_chop(argument, arg, arg2);
  send_to_char("You can only gain levels in a guild.\r\n", ch);

}

The command works fine but when level is typed at a guildmaster it always 
gets stuck at one part of the code and returns from there.  I am assuming 
it is either the way i tried to handle 2 arguments or my misuse of is_abbrev.

SPECIAL(guild_levels)
{
  static char arg2[MAX_INPUT_LENGTH];
  int class;

  if (IS_NPC(ch) || !CMD_IS("level"))
    return 0;

  if (GET_LEVEL(ch) >= LVL_IMMORT) {
    send_to_char("Your already an Immortal!!\r\n", ch);
    return 1;
  }
  if (!*arg) {
    send_to_char("Please specify a class.\r\n", ch);
    return 1;
  } else if (is_abbrev(arg, "mage")) {
      class = CLASS_MAGIC_USER;
  } else if (is_abbrev(arg, "cleric")) {
      class = CLASS_CLERIC;
  } else if (is_abbrev(arg, "thief")) {
      class = CLASS_THIEF;
  } else if (is_abbrev(arg, "warrior")) {
      class = CLASS_WARRIOR;
  } else if (is_abbrev(arg, "bard")) {
      class = CLASS_BARD;
  } else {
     send_to_char("usage: level <class> [gain]\r\n", ch);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
No matter what i type after level or even just level by itself i get this 
message.  I changed the second occurence of this message to make sure 
this waswhere it gets stuck and it is.

     return 1;
  }
  if (!*arg2) {
    sprintf(buf, "You need %d experience points to reach the next 
level.\r\n", exp_for_level(GET_LEVELX(ch, class)));
    send_to_char(buf, ch);
    return 1;
  } else if (is_abbrev(arg2, "gain")) {
     if (GET_EXP(ch) >= exp_for_level(GET_LEVELX(ch, class))) {
        GET_LEVELX(ch, class) += 1;
        GET_EXP(ch) -= exp_for_level(GET_LEVELX(ch, class));
        send_to_char("You rise a level!\r\n", ch);
        return 1;
     } else {
        send_to_char("You don't have enough experience yet.\r\n", ch);
        return 1;
     }
  } else {
     send_to_char("usage: level <class> [gain]\r\n", ch);
     return 1;
  }
}

In case it matters this is my exp_for_level function (remember this was 
just written so i could use the function and make the function realistic 
later)

int exp_for_level(int level)
{
  level += 1;
  level *= 1000;
  return level;
}

If someone can point out my error(s) i would appreciate it.

Thanks,
Chris (who always knows when he messed up, just not why it is wrong :)



This archive was generated by hypermail 2b30 : 12/18/00 PST