Here's something I wrote:
ACMD(do_bite)
{
struct char_data *vict;
char arg[MAX_INPUT_LENGTH];
int damage;
one_arguemnt(argument, arg);
if (AFF_FLAGGED(ch, AFF_VAMPIRE) || GET_COND(COND_THIRST) >= 20) {
send_to_char("You do not thirst for blood.\r\n", ch);
return;
} else if (!*arg || !arg) {
send_to_char("Bite who?\r\n", ch);
return;
} else if (!(vict = get_char_room_vis(ch, arg))) {
send_to_char("You don't see that person here.\r\n", ch);
return;
} else if (FIGHTING(vict)) {
send_to_char("They are moving too much.\r\n", ch);
return;
} else if (!IS_NPC(vict) && GET_LEVEL(vict) >= LVL_IMMORT) {
send_to_char("No, no, no.\r\n", ch);
return;
} else if (vict == ch) {
send_to_char("That's not allowed.\r\n", ch);
return;
}
if (number(1, 101) < GET_SKILL(ch, SKILL_BITE)) {
act("You fail to bite $M.", FALSE, ch, 0, vict, TO_CHAR);
act("$n tries to close in and bite you.", FALSE, ch, 0, vict, TO_VICT);
act("$n tries to close in and bite $N.", FALSE, ch, 0, vict, TO_NOTVICT);
return;
}
act("You close and latch your canine-like teeth onto the jugular of $N.",
FALSE, ch, 0, vict, TO_CHAR);
act("$n closes in and bites your jugular...", FALSE, ch, 0, vict, TO_VICT);
act("$n closes in upon $N and bites $S neck.", FALSE, ch, 0, vict, TO_NOTVICT);
damage = number(5, 10);
GET_HIT(vict) -= damage + (number(1, 3));
GET_HIT(ch) += damage;
update_pos(vict);
update_pos(ch);
}
I haven't tried the above, but to my knowledge, it should work without
(too many) flaws. You'll want to change the aFF_FLAGGED calls to your
GET_RACE or whatever macro calls; when I get around to doing vampires I
was planning on making them a flag so instead of Vampire, you'd have
Vampire-Dwarf, Vampire-Elf, etc.
This archive was generated by hypermail 2b30 : 12/18/00 PST