Re: [NEWBIE] Other potion effect. (fwd)

From: John Evans (evansj@HI-LINE.NET)
Date: 01/02/98

Oops. I posted the following message and didn't send it to the list, but
the person who wrote the orig. message.

I wanted everyone to get this, so here it is again, but to the list.

John Evans <>  --

Any sufficiently advanced technology is indistinguishable from magic.
--Arthur C. Clarke

---------- Forwarded message ----------
Date: Fri, 2 Jan 1998 13:33:23 -0700 (MST)
From: John Evans <>
To: Lauge Stendahl Johansen <>
Subject: Re:  [NEWBIE] Other potion effect.

On Fri, 2 Jan 1998, Lauge Stendahl Johansen wrote:

> I want to create a potion of youth, which wil make you a year ynger when
> quaffed, but I'm not shure where to put the code. I don't want to create
> an other spell, because I dont want to have spells that are not spells,
> and I dont need the intepreter to search through the spell list when the
> potion is used.

I would create a special procedure, and have it catch the "quaff"
command, instead of making a spell. Something like:


  struct obj_data *potion;
  char *temp_arg;

  if (!CMD_IS("quaff") || IS_NPC(ch))
    return FALSE;

  if (!*argument) {
    send_to_char("What do you want to quaff?\r\n", ch);
    return TRUE;

  temp_arg = argument;          /* We do this to preserve the argument */

  potion = GET_EQ(ch, WEAR_HOLD);

  if (!potion || !isname(temp_arg, potion->name)) {
    if (!(potion = get_obj_in_list_vis(ch, temp_arg, ch->carrying))) {
      sprintf(buf2, "You don't seem to have %s %s.\r\n",
                    AN(temp_arg), temp_arg);
      send_to_char(buf2, ch);
      return TRUE;

  /* At this point, we have the potion found. */
  /* If it's NOT the one that has the spec_proc attached, then we let the
     normal do_use() code handle it. */
  if (potion != me)
    return FALSE;

  /* Now we know that we have found our potion of youth
     and we are about to quaff it. */

  /* reduce age */
  vict->player.time.birth += (2 * SECS_PER_MUD_YEAR); /* 2 years younger */

  /* Tell everyone about it */
  act("You become more youthful as you quaff $p!",
      FALSE, ch, potion, 0, TO_CHAR);
  act("$n becomes more youthful as $e quaffs $p!",
      TRUE, ch, potion, 0, TO_ROOM);

  /* extract potion */
  if (potion = GET_EQ(ch, WEAR_HOLD))
    obj_to_char(unequip_char(ch, WEAR_HOLD), ch);

The above is all mailer code, so I won't vouch for its stability or
usefulness. If you do use this, please give me a little credit for it.
Say, in lib/text/credits  ?

Good luck,
John Evans <>  --

Any sufficiently advanced technology is indistinguishable from magic.
--Arthur C. Clarke

     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | |

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