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 <evansj@hi-line.net> -- http://www.hi-line.net/~evansj/
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 <evansj@hi-line.net>
To: Lauge Stendahl Johansen <lsd@ruc.dk>
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:
SPECIAL(potion_of_youth)
{
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 */
skip_spaces(&temp_arg);
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);
obj_from_char(potion);
extract_obj(potion);
}
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 <evansj@hi-line.net> -- http://www.hi-line.net/~evansj/
Any sufficiently advanced technology is indistinguishable from magic.
--Arthur C. Clarke
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+