I created this spell to work on my not online mud for a race of elven vampires called streganicha which really is an old word for witch but I like the sound of it so it's a vampire now. Change the RACE_STREGANICHA to whatever you like or remove it if you feel everyone should be able to do this. add the skill to interpreter.c for everyone level 1 or up and be sure to add streganicha to races if you don't remove it. add skill for the GM's and have fun. ACMD(do_consume) { struct char_data *vict; struct obj_data *obj; char vict_name[MAX_INPUT_LENGTH], obj_name[MAX_INPUT_LENGTH]; int gain, i, dam, success = 0; extern char *spells[]; extern struct spell_info_type spell_info[]; one_argument(argument, obj_name); one_argument(argument, vict_name); if (IS_NPC(ch)) return; if (GET_RACE(ch) != RACE_STREGANICHA && GET_LEVEL(ch) < LVL_GOD) { send_to_char("You can't do that.", ch); return; } if (!(*vict_name || *obj_name)) { send_to_char("You need to consume something!", ch); return; } if (vict = get_char_room_vis(ch, vict_name)) { if (number(1, 101) > GET_SKILL(ch, SKILL_CONSUME)) { dam = number(1, 10) * number(1, 10); if (GET_HIT(ch) - dam < 1) GET_HIT(ch) = 1; else GET_HIT(ch) -= dam; act("Your head aches as you fail to drain a spell from $N.", FALSE, ch, 0, vict, TO_CHAR); act("$n grabs $s head and screams in pain as fangs grow from $s mouth.", FALSE, ch, 0 , vict, TO_ROOM); act("You feel your magic being attacked by an outside force and an image of $n forms in your mind.", FALSE, ch, 0, vict, TO_VICT); WAIT_STATE(ch, PULSE_VIOLENCE); return; } if (IS_NPC(vict)) return; /* Change to take spells based on level and class */ for (i = 1; i < MAX_SPELLS+1; i++) { if (GET_LEVEL(vict) >= spell_info[i].min_level[(int) GET_CLASS(vict)]) { if (GET_SKILL(vict, i) > 0) { /* spells strega knows are added to if this player knows it better */ if (GET_SKILL(ch, i) <= GET_SKILL(vict, i)) { if (!mag_savingthrow(vict, 1)) { GET_SKILL(ch, i) = GET_SKILL(vict, i); GET_SKILL(vict, i) = 0; sprintf(buf, "You stole the %s spell.\r\n", spells[i]); send_to_char(buf, ch); act("$n grips the head of $N in a frenzied attack!", TRUE, ch, 0, vict, TO_ROOM); sprintf(buf2, "%s grabs your head and rips the %s spell from your memory!", GET_NAME(ch), spells[i]); send_to_char(buf2, ch); WAIT_STATE(ch, PULSE_VIOLENCE * 2); success = 1; return; } } } } } if (!success) act("$N doesn't have any spells you can consume.", FALSE, ch, 0, vict, TO_CHAR); } if (obj = get_obj_in_list_vis(ch, obj_name, ch->carrying)) { switch (GET_OBJ_TYPE(obj)) { case ITEM_POTION: gain = GET_OBJ_VAL(obj, 0) * 1.0; break; case ITEM_WAND: case ITEM_SCROLL: gain = GET_OBJ_VAL(obj, 0) * 1.5; break; case ITEM_STAFF: gain = GET_OBJ_VAL(obj, 0) * 2.0; break; default: send_to_char("You need to select a magical potion, wand or staff to consume.\r\n", ch); return; } if (gain && !(gain + GET_MANA(ch) > GET_MAX_MANA(ch))) { GET_MANA(ch) += gain; act("You consume the magical energy from the $o.", FALSE, ch, obj, 0, TO_CHAR); extract_obj(obj); } else send_to_char("You can't store that energy right now", ch); WAIT_STATE(ch, PULSE_VIOLENCE); return; } } /* end acmd */ Summary: In the future this spell will take spells from the minds of NPC's as well and will be based upon their level and class. If you use spells restricted to only certain races be sure to add a check to make consume fail if that spell is selected or to make it bypass it and continue the search. This spell was designed to add a way for the elven vampire to regain mana at astonishing rates so long as he has magic items available to drain. It was also in mind to keep this vampirism as a curse all strega cannont learn spells but must consume the knowledge from a wizard who already has the spell thus making strega not only rely on mages but to make all mages fear and want them dead....Thus being a vampire has a big drawback. Soon to come.....The race which must consume knowledge of spells for a one time casting but drains only partial knowledge and is thus less dangerous to mages but unliked none-the-less. Justin P.