This is something that I had on Subversive Visions 2.0, and am now re-creating it on v3.0. It is a basic spellup command. There is one that has been known to be on Ember MUD, but when I tried it, there are a lot of things missing. Therefore, I hard coded this command so that when an immortal uses it on "all", as long as the victim is mortal, then it will restore the character, dispel them of any magic, then give them all character enhancement spells at once quietly. This was done by simply altering the spell name, and then going to the "void spell_######" and actually copying the affects each individual spell gives to the victim. This way, it costs no mana. If the immortal types "spellup <character-name>" it will spell up that character even if the character is an immortal. Not exactly necessary, but in the event of immoral kill quests, it can be useful. Also with this command, there is a spell that I couldn't find a snippet for ANYWHERE on google, and that is true sight. It's a detection spell that gives the character all detects at one time. Though I'm getting ready to change the way spells and skills are called I'm going to give this code out before I do. I've commented out the "true sight" spell in case you don't want it, or you don't have it. If you want it, you can simply search for it in a couple days when I have time to make that snippet. Here's the code. //==== Put the code below at the bottom of magic.c =====// /* Originally made by Koqlb for Subversive Visions, and * heavilly modified. The version for EmberMUD was good, * however buggy, and many functions do not work on * regular Rom 2.4b6. Plus no restore... What's with that?! * Created, and tested on a QuickMUD stock source. */ /* Updated the do_spellup function 10/28 due to a huge bug * allowing numerous duplicate affects. * --Koqlb */ void do_spellup(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; DESCRIPTOR_DATA *d; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; SPELL_FUN *spell; bool found = FALSE; AFFECT_DATA af; int sn, level; argument = one_argument( argument, arg ); /* Give's a level bonus affect since this is an immortal command */ level = (MAX_LEVEL + 30); if ( arg[0] == '\0' ) { send_to_char( "Syntax: spellup <char>\n\r" "{w spellup all\n\r", ch ); return; } /* Change the MAX_LEVEL - <num> to your liking. */ if ( get_trust( ch ) >= MAX_LEVEL - 14 && !str_cmp( arg, "all" ) ) { for ( d = descriptor_list; d != NULL; d = d->next ) { victim = d->character; /* With "all", you don't get spelled up and neither do other immortals. */ if ( victim == NULL || IS_NPC( victim) || victim == ch || IS_IMMORTAL(victim)) continue; /* Dispel doesn't get rid of everything. Remove all affects * taken from fight.c --Koqlb */ while (victim->affected) affect_remove (victim, victim->affected); STR_COPY_STR( victim->affected_by, race_table[victim->race].aff, AFF_FLAGS ); /*Remove actual AFF bits. Since above STILL DOESN'T take EVERYTHING OFF*/ STR_REMOVE_BIT(victim->affected_by, AFF_INVISIBLE); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_EVIL); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_INVIS); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_MAGIC); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_HIDDEN); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_GOOD); STR_REMOVE_BIT(victim->affected_by, AFF_SANCTUARY); STR_REMOVE_BIT(victim->affected_by, AFF_FAERIE_FIRE); STR_REMOVE_BIT(victim->affected_by, AFF_INFRARED); STR_REMOVE_BIT(victim->affected_by, AFF_CURSE); STR_REMOVE_BIT(victim->affected_by, AFF_POISON); STR_REMOVE_BIT(victim->affected_by, AFF_PROTECT_EVIL); STR_REMOVE_BIT(victim->affected_by, AFF_PROTECT_GOOD); STR_REMOVE_BIT(victim->affected_by, AFF_SLEEP); STR_REMOVE_BIT(victim->affected_by, AFF_CHARM); STR_REMOVE_BIT(victim->affected_by, AFF_FLYING); STR_REMOVE_BIT(victim->affected_by, AFF_PASS_DOOR); STR_REMOVE_BIT(victim->affected_by, AFF_HASTE); STR_REMOVE_BIT(victim->affected_by, AFF_CALM); STR_REMOVE_BIT(victim->affected_by, AFF_PLAGUE); STR_REMOVE_BIT(victim->affected_by, AFF_WEAKEN); STR_REMOVE_BIT(victim->affected_by, AFF_DARK_VISION); STR_REMOVE_BIT(victim->affected_by, AFF_BERSERK); STR_REMOVE_BIT(victim->affected_by, AFF_SLOW); STR_REMOVE_BIT(victim->affected_by, AFF_TRUE_SIGHT); /*Restore victim */ affect_strip (victim, gsn_plague); affect_strip (victim, gsn_poison); affect_strip (victim, gsn_blindness); affect_strip (victim, gsn_sleep); affect_strip (victim, gsn_curse); /* Heal player*/ victim->hit = victim->max_hit; victim->mana = victim->max_mana; victim->move = victim->max_move; update_pos (victim); /* Here we go. Bring on the spells! Using stock spells*/ spell = spell_giant_strength; /*changes the spell being called to */ sn == skill_lookup( "giant strength" );/* The skill lookup from const.c */ { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level; af.location = APPLY_STR; af.modifier = 1 + (level >= 18) + (level >= 25) + (level >= 32); af.bitvector = 0; affect_to_char (victim, &af); } spell = spell_fly; sn = skill_lookup( "fly" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level + 3; af.location = 0; af.modifier = 0; af.bitvector = AFF_FLYING; affect_to_char (victim, &af); } spell = spell_frenzy; sn == skill_lookup( "frenzy" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level / 3; af.modifier = level / 6; af.bitvector = 0; af.location = APPLY_HITROLL; affect_to_char (victim, &af); af.location = APPLY_DAMROLL; affect_to_char (victim, &af); af.modifier = 10 * (level / 12); af.location = APPLY_AC; affect_to_char (victim, &af); } spell = spell_sanctuary; sn = skill_lookup( "sanctuary" ); af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level / 6; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_SANCTUARY; affect_to_char (victim, &af); spell = spell_armor; sn = skill_lookup( "armor" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 24; af.modifier = -20; af.location = APPLY_AC; af.bitvector = 0; affect_to_char (victim, &af); } spell = spell_stone_skin; sn = skill_lookup("stone skin"); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level; af.location = APPLY_AC; af.modifier = -40; af.bitvector = 0; affect_to_char (victim, &af); } spell = spell_invis; sn = skill_lookup( "invis" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level + 12; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_INVISIBLE; affect_to_char (victim, &af); } spell = spell_bless; sn = skill_lookup( "bless" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 6 + level; af.location = APPLY_HITROLL; af.modifier = level / 8; af.bitvector = 0; affect_to_char (victim, &af); af.location = APPLY_SAVING_SPELL; af.modifier = 0 - level / 8; affect_to_char (victim, &af); } spell = spell_protection_evil; sn = skill_lookup( "protection evil" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 24; af.location = APPLY_SAVING_SPELL; af.modifier = -1; af.bitvector = AFF_PROTECT_EVIL; affect_to_char (victim, &af); } spell = spell_protection_good; sn = skill_lookup( "protection good" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 24; af.location = APPLY_SAVING_SPELL; af.modifier = -1; af.bitvector = AFF_PROTECT_GOOD; affect_to_char (victim, &af); } spell = spell_pass_door; sn = skill_lookup( "pass door" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = number_fuzzy (level / 4); af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_PASS_DOOR; affect_to_char (victim, &af); } spell = spell_shield; sn = skill_lookup( "shield" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 8 + level; af.location = APPLY_AC; af.modifier = -20; af.bitvector = 0; affect_to_char (victim, &af); } spell = spell_haste; sn = skill_lookup( "haste" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; if (victim == ch) af.duration = level / 2; else af.duration = level / 4; af.location = APPLY_DEX; af.modifier = 1 + (level >= 18) + (level >= 25) + (level >= 32); af.bitvector = AFF_HASTE; affect_to_char (victim, &af); } spell = spell_true_sight; sn = skill_lookup( "true sight" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level; af.modifier = 0; af.location = APPLY_NONE; af.bitvector = AFF_TRUE_SIGHT; affect_to_char(victim, &af); af.bitvector = AFF_DETECT_MAGIC; affect_to_char (victim, &af); af.bitvector = AFF_DETECT_INVIS; affect_to_char (victim, &af); af.bitvector = AFF_DETECT_HIDDEN; affect_to_char (victim, &af); af.bitvector = AFF_DETECT_GOOD; affect_to_char (victim, &af); af.bitvector = AFF_DETECT_EVIL; affect_to_char (victim, &af); } act( "{cYou hear $n exclaim '{CSpellicus MAXIMUS!!!{c' from the heavens.{x", ch, NULL, victim, TO_VICT ); send_to_char( "{WYou've been given a full spellup!{x", victim); } sprintf( buf, "\n\r\n\rAll mortals have been spelled up.\n\r" ); send_to_char( buf, ch ); return; } /* Now for if you choose an individual character to spellup by name */ if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "No such player on right now.\n\r", ch ); return; } else /* Do Restore */ affect_strip (victim, gsn_plague); affect_strip (victim, gsn_poison); affect_strip (victim, gsn_blindness); affect_strip (victim, gsn_sleep); affect_strip (victim, gsn_curse); victim->hit = victim->max_hit; victim->mana = victim->max_mana; victim->move = victim->max_move; update_pos (victim); /* Dispel didn'ta get rid of everything. Remove all affects * taken from fight.c --Koqlb */ while (victim->affected) affect_remove (victim, victim->affected); STR_COPY_STR( victim->affected_by, race_table[victim->race].aff, AFF_FLAGS ); /*Remove actual AFF bits. Since above STILL DOESN'T take EVERYTHING OFF*/ STR_REMOVE_BIT(victim->affected_by, AFF_INVISIBLE); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_EVIL); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_INVIS); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_MAGIC); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_HIDDEN); STR_REMOVE_BIT(victim->affected_by, AFF_DETECT_GOOD); STR_REMOVE_BIT(victim->affected_by, AFF_SANCTUARY); STR_REMOVE_BIT(victim->affected_by, AFF_FAERIE_FIRE); STR_REMOVE_BIT(victim->affected_by, AFF_INFRARED); STR_REMOVE_BIT(victim->affected_by, AFF_CURSE); STR_REMOVE_BIT(victim->affected_by, AFF_POISON); STR_REMOVE_BIT(victim->affected_by, AFF_PROTECT_EVIL); STR_REMOVE_BIT(victim->affected_by, AFF_PROTECT_GOOD); STR_REMOVE_BIT(victim->affected_by, AFF_SLEEP); STR_REMOVE_BIT(victim->affected_by, AFF_CHARM); STR_REMOVE_BIT(victim->affected_by, AFF_FLYING); STR_REMOVE_BIT(victim->affected_by, AFF_PASS_DOOR); STR_REMOVE_BIT(victim->affected_by, AFF_HASTE); STR_REMOVE_BIT(victim->affected_by, AFF_CALM); STR_REMOVE_BIT(victim->affected_by, AFF_PLAGUE); STR_REMOVE_BIT(victim->affected_by, AFF_WEAKEN); STR_REMOVE_BIT(victim->affected_by, AFF_DARK_VISION); STR_REMOVE_BIT(victim->affected_by, AFF_BERSERK); STR_REMOVE_BIT(victim->affected_by, AFF_SLOW); STR_REMOVE_BIT(victim->affected_by, AFF_TRUE_SIGHT); /*Restore victim */ affect_strip (victim, gsn_plague); affect_strip (victim, gsn_poison); affect_strip (victim, gsn_blindness); affect_strip (victim, gsn_sleep); affect_strip (victim, gsn_curse); victim->hit = victim->max_hit; victim->mana = victim->max_mana; victim->move = victim->max_move; update_pos (victim); /* Bring on the spells for one character! */ spell = spell_giant_strength; sn = skill_lookup( "giant strength" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level; af.location = APPLY_STR; af.modifier = 1 + (level >= 18) + (level >= 25) + (level >= 32); af.bitvector = 0; affect_to_char (victim, &af); } spell = spell_fly; sn = skill_lookup( "fly" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level + 3; af.location = 0; af.modifier = 0; af.bitvector = AFF_FLYING; affect_to_char (victim, &af); } spell = spell_frenzy; sn = skill_lookup( "frenzy" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level / 3; af.modifier = level / 6; af.bitvector = 0; af.location = APPLY_HITROLL; affect_to_char (victim, &af); af.location = APPLY_DAMROLL; affect_to_char (victim, &af); af.modifier = 10 * (level / 12); af.location = APPLY_AC; affect_to_char (victim, &af); } spell = spell_sanctuary; sn = skill_lookup( "sanctuary" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level / 6; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_SANCTUARY; affect_to_char (victim, &af); } spell = spell_armor; sn = skill_lookup( "armor" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 24; af.modifier = -20; af.location = APPLY_AC; af.bitvector = 0; affect_to_char (victim, &af); } spell = spell_stone_skin; sn = skill_lookup("stone skin"); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level; af.location = APPLY_AC; af.modifier = -40; af.bitvector = 0; affect_to_char (victim, &af); } spell = spell_invis; sn = skill_lookup( "invis" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level + 12; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_INVISIBLE; affect_to_char (victim, &af); } spell = spell_bless; sn = skill_lookup( "bless" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 6 + level; af.location = APPLY_HITROLL; af.modifier = level / 8; af.bitvector = 0; affect_to_char (victim, &af); af.location = APPLY_SAVING_SPELL; af.modifier = 0 - level / 8; affect_to_char (victim, &af); } spell = spell_protection_evil; sn = skill_lookup( "protection evil" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 24; af.location = APPLY_SAVING_SPELL; af.modifier = -1; af.bitvector = AFF_PROTECT_EVIL; affect_to_char (victim, &af); } spell = spell_pass_door; sn = skill_lookup( "pass door" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = number_fuzzy (level / 4); af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_PASS_DOOR; affect_to_char (victim, &af); } spell = spell_shield; sn = skill_lookup( "shield" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = 8 + level; af.location = APPLY_AC; af.modifier = -20; af.bitvector = 0; affect_to_char (victim, &af); } spell = spell_haste; sn = skill_lookup( "haste" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; if (victim == ch) af.duration = level / 2; else af.duration = level / 4; af.location = APPLY_DEX; af.modifier = 1 + (level >= 18) + (level >= 25) + (level >= 32); af.bitvector = AFF_HASTE; affect_to_char (victim, &af); } spell = spell_true_sight; sn = skill_lookup( "true sight" ); { af.where = TO_AFFECTS; af.type = sn; af.level = level; af.duration = level; af.modifier = 0; af.location = APPLY_NONE; af.bitvector = AFF_TRUE_SIGHT; affect_to_char(victim, &af); af.bitvector = AFF_DETECT_MAGIC; affect_to_char (victim, &af); af.bitvector = AFF_DETECT_INVIS; affect_to_char (victim, &af); af.bitvector = AFF_DETECT_HIDDEN; affect_to_char (victim, &af); af.bitvector = AFF_DETECT_GOOD; affect_to_char (victim, &af); af.bitvector = AFF_DETECT_EVIL; affect_to_char (victim, &af); } act( "$n has given you an immortal spellup.", ch, NULL, victim, TO_VICT ); sprintf( buf, "\n\r\n\rYou have given %s an Immortal spellup.\n\r", victim->name ); send_to_char( buf, ch ); } /* End do_spellup */ ------ //Now in interp.c, find the immortal commands. Put this in above: //* let immortals have it, you can replace IM with whatever level you want. // {"sla", do_sla, POS_DEAD, L5, LOG_NORMAL, 0}, + {"spellup", do_spellup, POS_DEAD, IM, LOG_ALWAYS, 1}, /*remove + sign */ ------ //Then in interp.h put the following code below the call for do_spells: DECLARE_DO_FUN( do_spellup ); ---------- That's it! All I ask is that you leave the credits in there at the top of the function in magic.c and in the helpfile. Here's the helpfile to copy/paste into "help.are" and change the number to the level that the immortal gets the command.: 111 SPELLUP~ Syntax: Syntax: spellup <char> spellup all Spellup is a command that gives all character enhancement spells to others. Written and tested by Koqlb for Subversive Visions, this command is for only those trusted Immortals, and allows the player to spell up either every mortal playing on the game, or an individual character. It also gives a level bonus for the "victim" so that it lasts longer than a mortal's spell, even if they are at the maximum mortal level. It's a gift from the Gods that should be used fairly. ~