This is just a 'fix' that allows PCs to scribe up to 3 spells on a single scroll. Simply replace the old do_scribe function, with this one, and then recompile. ----------------------------Begin Code----------------------------------- /* Re-worked by Sadiq to allow PCs to scribe up to 3 spells on a single * * scroll. Second and third spells progressive increase the chance of * * destroying the scroll. --Sadiq */ void do_scribe( CHAR_DATA *ch, char *argument ) { OBJ_DATA *scroll; int sn; char buf1[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; char buf3[MAX_STRING_LENGTH]; int mana; if ( IS_NPC(ch) ) return; if ( !IS_NPC(ch) && ch->level < skill_table[gsn_scribe]->skill_level[ch->class] ) { send_to_char( "A skill such as this requires more magical ability than that of your class.\n\r", ch ); return; } if ( argument[0] == '\0' || !str_cmp(argument, "") ) { send_to_char( "Scribe what?\n\r", ch ); return; } if ( ms_find_obj(ch) ) return; if ( (sn = find_spell( ch, argument, TRUE )) < 0 ) { send_to_char( "You have not learned that spell.\n\r", ch ); return; } if ( skill_table[sn]->spell_fun == spell_null ) { send_to_char( "That's not a spell!\n\r", ch ); return; } if ( SPELL_FLAG(skill_table[sn], SF_NOSCRIBE) ) { send_to_char( "You cannot scribe that spell.\n\r", ch ); return; } mana = IS_NPC(ch) ? 0 : UMAX(skill_table[sn]->min_mana, 100 / ( 2 + ch->level - skill_table[sn]->skill_level[ch->class] ) ); mana *=5; if ( !IS_NPC(ch) && ch->mana < mana ) { send_to_char( "You don't have enough mana.\n\r", ch ); return; } if ( ( scroll = get_eq_char( ch, WEAR_HOLD ) ) == NULL ) { send_to_char( "You must be holding a blank scroll to scribe it.\n\r", ch ); return; } if( scroll->pIndexData->vnum != OBJ_VNUM_SCROLL_SCRIBING ) { send_to_char( "You must be holding a blank scroll to scribe it.\n\r", ch ); return; } if ( ( scroll->value[1] != -1 ) && ( scroll->value[2] != -1) && ( scroll->value[3] != -1) && ( scroll->pIndexData->vnum == OBJ_VNUM_SCROLL_SCRIBING ) ) { send_to_char( "That scroll has already contains as much magic as it can hold.\n\r", ch); return; } if ( !process_spell_components( ch, sn ) ) { learn_from_failure( ch, gsn_scribe ); ch->mana -= (mana / 2); return; } if ( !IS_NPC(ch) && number_percent( ) > ch->pcdata->learned[gsn_scribe] ) { set_char_color ( AT_MAGIC, ch ); send_to_char("The magic surges outof control and destroys the scroll!.\n\r", ch); learn_from_failure( ch, gsn_scribe ); ch->mana -= (mana / 2); extract_obj(scroll); return; } if ( scroll->value[1] == -1 ) { scroll->value[1] = sn; scroll->value[0] = ch->level; sprintf(buf1, "magically scribed scroll" ); STRFREE(scroll->short_descr); scroll->short_descr = STRALLOC( aoran(buf1) ); sprintf(buf2, "A magically scribed scroll lies in the dust." ); STRFREE(scroll->description); scroll->description = STRALLOC(buf2); sprintf(buf3, "scroll scribing %s", skill_table[sn]->name); STRFREE(scroll->name); scroll->name = STRALLOC(buf3); act( AT_MAGIC, "$n magically scribes a scroll.", ch, NULL, NULL, TO_ROOM ); act( AT_MAGIC, "You magically scribe $p.", ch, NULL, NULL, TO_CHAR ); learn_from_success( ch, gsn_scribe ); ch->mana -= mana; return; } if ( scroll->value[2] == -1 ) { if ( number_percent( ) > 50 ) { set_char_color ( AT_MAGIC, ch ); send_to_char("The magic surges out of control and destroys the scroll!.\n\r", ch); learn_from_failure( ch, gsn_scribe ); ch->mana -= (mana / 2); extract_obj(scroll); return; } if (scroll->value[0] > ch->level ) { scroll->value[0] = ch->level; } scroll->value[2] = sn; set_char_color(AT_MAGIC, ch); ch_printf( ch, "You imbue the scroll with %s.\n\r", skill_table[sn]->name); learn_from_success(ch, gsn_scribe); ch->mana -= mana; return; } if ( scroll->value[3] == -1 ) { if ( number_percent( ) > 30 ) { set_char_color ( AT_MAGIC, ch ); send_to_char("The magic surges outof control and destroys the scroll!.\n\r", ch); learn_from_failure( ch, gsn_scribe ); ch->mana -= (mana / 2); extract_obj(scroll); return; } if (scroll->value[0] > ch->level ) { scroll->value[0] = ch->level; } scroll->value[3] = sn; set_char_color(AT_MAGIC, ch); ch_printf( ch, "You imbue the scroll with %s.\n\r", skill_table[sn]->name); learn_from_success(ch, gsn_scribe); ch->mana -= mana; return; } } -------------------------End Code------------------------------------------