/************************************************************** * Myth Mud improvements ALL by David Spink aka Morglum. * * This mud is NOT to be copied in whole or in part! No one * * has the permission to authorise the use of this code. * * In order to use this code you MUST comply with the terms * * and conditions in 'license.myth' (as shipped). * **************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include "merc.h" #define TYPE_RUNE 0 #define TYPE_GLYPH 1 #define TYPE_SIGIL 2 int count_stones args( ( int stones, int type ) ); DO_COM( do_learn ) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int rune; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if ( IS_NPC( ch ) ) return; if ( !IS_MAGE( ch ) ) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0' || arg2[0] == '\0' ) { send_to_char( "Syntax : learn [rune] [type]\n\r", ch ); send_to_char( "\n\rRune being one of:\n\r", ch ); send_to_char( " rune glyph sigil\n\r", ch ); return; } if ( !str_cmp( arg1, "rune" ) ) { if ( !str_cmp( arg2, "fire" ) ) rune = RUNE_FIRE; else if ( !str_cmp( arg2, "air" ) ) rune = RUNE_AIR; else if ( !str_cmp( arg2, "earth" ) ) rune = RUNE_EARTH; else if ( !str_cmp( arg2, "water" ) ) rune = RUNE_WATER; else if ( !str_cmp( arg2, "dark" ) ) rune = RUNE_DARK; else if ( !str_cmp( arg2, "light" ) ) rune = RUNE_LIGHT; else if ( !str_cmp( arg2, "life" ) ) rune = RUNE_LIFE; else if ( !str_cmp( arg2, "death" ) ) rune = RUNE_DEATH; else if ( !str_cmp( arg2, "mind" ) ) rune = RUNE_MIND; else if ( !str_cmp( arg2, "spirit" ) ) rune = RUNE_SPIRIT; else { do_learn( ch, "" ); send_to_char( "\n\rRune can be one of:\n\r", ch ); send_to_char( " fire air earth water dark\n\r", ch ); send_to_char( " light life death mind spirit\n\r", ch ); return; } if ( IS_SET( ch->pcdata->runes[1], rune ) ) { send_to_char( "You already know that rune.\n\r", ch ); return; } /* 10 primal for first, 20 for second etc */ if ( ch->practice < ( count_stones( ch->pcdata->runes[1], TYPE_RUNE ) + 1 ) * 10 ) { sprintf( buf, "You require %d primal to learn that rune.\n\r", ( count_stones( ch->pcdata->runes[1], TYPE_RUNE ) + 1 ) * 10 ); send_to_char( buf, ch ); return; } ch->practice -= (count_stones(ch->pcdata->runes[1],TYPE_RUNE)+1)*10; SET_BIT( ch->pcdata->runes[1], rune ); send_to_char( "You know can now create that type of rune.\n\r", ch ); return; } if ( !str_cmp( arg1, "glyph" ) ) { if ( !str_cmp( arg2, "creation" ) ) rune = GLYPH_CREATION; else if ( !str_cmp( arg2, "destruction" ) ) rune = GLYPH_DESTRUCTION; else if ( !str_cmp( arg2, "summoning" ) ) rune = GLYPH_SUMMONING; else if ( !str_cmp( arg2, "transformation" ) ) rune = GLYPH_TRANSFORMATION; else if ( !str_cmp( arg2, "transportation" ) ) rune = GLYPH_TRANSPORTATION; else if ( !str_cmp( arg2, "enhancement" ) ) rune = GLYPH_ENHANCEMENT; else if ( !str_cmp( arg2, "reduction" ) ) rune = GLYPH_REDUCTION; else if ( !str_cmp( arg2, "control" ) ) rune = GLYPH_CONTROL; else if ( !str_cmp( arg2, "protection" ) ) rune = GLYPH_PROTECTION; else if ( !str_cmp( arg2, "information" ) ) rune = GLYPH_INFORMATION; else { do_learn( ch, "" ); send_to_char( "\n\rGlyph can be one of:\n\r", ch ); send_to_char( " creation destruction summoning\n\r", ch ); send_to_char( " transformation transportation\n\r", ch ); send_to_char( " enhancement reduction control\n\r", ch ); send_to_char( " protection information\n\r", ch ); return; } if ( IS_SET( ch->pcdata->runes[2], rune ) ) { send_to_char( "You already know that rune.\n\r", ch ); return; } /* 10 primal for first, 20 for second etc */ if ( ch->practice < ( count_stones( ch->pcdata->runes[2], TYPE_GLYPH ) + 1 ) * 10 ) { sprintf( buf, "You require %d primal to learn that rune.\n\r", ( count_stones( ch->pcdata->runes[2], TYPE_GLYPH ) + 1 ) * 10 ); send_to_char( buf, ch ); return; } ch->practice -= (count_stones(ch->pcdata->runes[2],TYPE_GLYPH)+1)*10; SET_BIT( ch->pcdata->runes[2], rune ); send_to_char( "You know can now create that type of glyph.\n\r", ch ); return; } if ( !str_cmp( arg1, "sigil" ) ) { if ( !str_cmp( arg2, "self" ) ) rune = SIGIL_SELF; else if ( !str_cmp( arg2, "targeting" ) ) rune = SIGIL_TARGETING; else if ( !str_cmp( arg2, "area" ) ) rune = SIGIL_AREA; else if ( !str_cmp( arg2, "object" ) ) rune = SIGIL_OBJECT; else { do_learn( ch, "" ); send_to_char( "\n\rSigil can be one of:\n\r", ch ); send_to_char( " self targeting area object\n\r", ch ); return; } if ( IS_SET( ch->pcdata->runes[3], rune ) ) { send_to_char( "You already know that sigil.\n\r", ch ); return; } /* 20 primal for first, 40 for second etc */ if ( ch->practice < ( count_stones( ch->pcdata->runes[3], TYPE_SIGIL ) + 1 ) * 20 ) { sprintf( buf, "You require %d primal to learn that sigil.\n\r", ( count_stones( ch->pcdata->runes[3], TYPE_SIGIL ) + 1 ) * 20 ); send_to_char( buf, ch ); return; } ch->practice -= (count_stones(ch->pcdata->runes[3],TYPE_SIGIL)+1)*20; SET_BIT( ch->pcdata->runes[3], rune ); send_to_char( "You know can now create that type of sigil.\n\r", ch ); return; } do_learn( ch, "" ); return; } int count_stones( int stones, int type ) { int count = 0; if ( type == TYPE_RUNE ) { if ( IS_SET( stones, RUNE_FIRE ) ) count++; if ( IS_SET( stones, RUNE_AIR ) ) count++; if ( IS_SET( stones, RUNE_EARTH ) ) count++; if ( IS_SET( stones, RUNE_WATER ) ) count++; if ( IS_SET( stones, RUNE_DARK ) ) count++; if ( IS_SET( stones, RUNE_LIGHT ) ) count++; if ( IS_SET( stones, RUNE_LIFE ) ) count++; if ( IS_SET( stones, RUNE_DEATH ) ) count++; if ( IS_SET( stones, RUNE_MIND ) ) count++; if ( IS_SET( stones, RUNE_SPIRIT) ) count++; return count; } else if ( type == TYPE_GLYPH ) { if ( IS_SET( stones, GLYPH_CREATION ) ) count++; if ( IS_SET( stones, GLYPH_DESTRUCTION ) ) count++; if ( IS_SET( stones, GLYPH_SUMMONING ) ) count++; if ( IS_SET( stones, GLYPH_TRANSFORMATION ) ) count++; if ( IS_SET( stones, GLYPH_TRANSPORTATION ) ) count++; if ( IS_SET( stones, GLYPH_ENHANCEMENT ) ) count++; if ( IS_SET( stones, GLYPH_REDUCTION ) ) count++; if ( IS_SET( stones, GLYPH_CONTROL ) ) count++; if ( IS_SET( stones, GLYPH_PROTECTION ) ) count++; if ( IS_SET( stones, GLYPH_INFORMATION ) ) count++; return count; } else if ( type == TYPE_SIGIL ) { if ( IS_SET( stones, SIGIL_SELF ) ) count++; if ( IS_SET( stones, SIGIL_TARGETING ) ) count++; if ( IS_SET( stones, SIGIL_AREA ) ) count++; if ( IS_SET( stones, SIGIL_OBJECT ) ) count++; return count; } bug( "Wrong stone type.", 0 ); return 0; } DO_COM( do_mageupkeep ) { char buf[MAX_STRING_LENGTH]; bool need_line = FALSE; if ( IS_NPC( ch ) ) return; if ( !IS_MAGE( ch ) ) { send_to_char("Huh?\n\r",ch); return; } send_to_char("--------------------------------------------------------------------------------\n\r",ch); send_to_char(" -= Mage upkeep =-\n\r",ch); send_to_char("--------------------------------------------------------------------------------\n\r",ch); if ( IS_SET( ch->pcdata->runes[1], RUNE_MASTER ) ) { send_to_char( "You can create the master rune.\n\r", ch ); need_line = TRUE; } if ( strlen( ch->pcdata->conding ) > 1 ) { need_line = TRUE; sprintf( buf, "You have been conditioned by %s%s\n\r", ch->pcdata->conding, IS_MORE( ch, MORE_LOYAL ) ? " and are loyal." : "." ); send_to_char( buf, ch ); } if ( strlen( ch->pcdata->love ) > 1 ) { need_line = TRUE; sprintf( buf, "You are in love with %s.\n\r", ch->pcdata->love ); send_to_char( buf, ch ); } if ( IS_EXTRA( ch, EXTRA_SIRE ) ) { need_line = TRUE; STC( "You can create an apprentice.\n\r", ch ); } send_to_char("--------------------------------------------------------------------------------\n\r",ch); send_to_char(" -= Runes =-\n\r",ch); send_to_char("--------------------------------------------------------------------------------\n\r",ch); sprintf( buf, "%-12s[%s] %-12s[%s] %-12s[%s] %-12s[%s] %-12s[%s]\n\r", "Fire", IS_SET( ch->pcdata->runes[1], RUNE_FIRE ) ? "X" : " ", "Air", IS_SET( ch->pcdata->runes[1], RUNE_AIR ) ? "X" : " ", "Earth", IS_SET( ch->pcdata->runes[1], RUNE_EARTH ) ? "X" : " ", "Water", IS_SET( ch->pcdata->runes[1], RUNE_WATER ) ? "X" : " ", "Dark", IS_SET( ch->pcdata->runes[1], RUNE_DARK ) ? "X" : " " ); send_to_char( buf, ch ); sprintf( buf, "%-12s[%s] %-12s[%s] %-12s[%s] %-12s[%s] %-12s[%s]\n\r", "Light", IS_SET( ch->pcdata->runes[1], RUNE_LIGHT ) ? "X" : " ", "Life", IS_SET( ch->pcdata->runes[1], RUNE_LIFE ) ? "X" : " ", "Death", IS_SET( ch->pcdata->runes[1], RUNE_DEATH ) ? "X" : " ", "Mind", IS_SET( ch->pcdata->runes[1], RUNE_MIND ) ? "X" : " ", "Spirit", IS_SET( ch->pcdata->runes[1], RUNE_SPIRIT ) ? "X" : " " ); send_to_char( buf, ch ); send_to_char("--------------------------------------------------------------------------------\n\r",ch); send_to_char(" -= Glyphs =-\n\r",ch); send_to_char("--------------------------------------------------------------------------------\n\r",ch); sprintf( buf, "%-16s[%s] %-16s[%s] %-16s[%s] %-16s[%s]\n\r", "Creation", IS_SET( ch->pcdata->runes[2], GLYPH_CREATION ) ? "X" : " ", "Destruction", IS_SET( ch->pcdata->runes[2], GLYPH_DESTRUCTION ) ? "X" : " ", "Summoning", IS_SET( ch->pcdata->runes[2], GLYPH_SUMMONING ) ? "X" : " ", "Transformation", IS_SET( ch->pcdata->runes[2], GLYPH_TRANSFORMATION ) ? "X" : " " ); send_to_char( buf, ch ); sprintf( buf, "%-16s[%s] %-16s[%s] %-16s[%s] %-16s[%s]\n\r", "Transportation", IS_SET( ch->pcdata->runes[2], GLYPH_TRANSPORTATION ) ? "X" : " ", "Enhancement", IS_SET( ch->pcdata->runes[2], GLYPH_ENHANCEMENT ) ? "X" : " ", "Reduction", IS_SET( ch->pcdata->runes[2], GLYPH_REDUCTION ) ? "X" : " ", "Control", IS_SET( ch->pcdata->runes[2], GLYPH_CONTROL ) ? "X" : " " ); send_to_char( buf, ch ); sprintf( buf, "%-16s[%s] %-16s[%s]\n\r", "Protection", IS_SET( ch->pcdata->runes[2], GLYPH_PROTECTION ) ? "X" : " ", "Information", IS_SET( ch->pcdata->runes[2], GLYPH_INFORMATION ) ? "X" : " " ); send_to_char( buf, ch ); send_to_char("--------------------------------------------------------------------------------\n\r",ch); send_to_char(" -= Sigils =-\n\r",ch); send_to_char("--------------------------------------------------------------------------------\n\r",ch); sprintf( buf, "%-16s[%s] %-16s[%s] %-16s[%s] %-16s[%s]\n\r", "Self", IS_SET( ch->pcdata->runes[3], SIGIL_SELF ) ? "X" : " ", "Targeting", IS_SET( ch->pcdata->runes[3], SIGIL_TARGETING ) ? "X" : " ", "Area", IS_SET( ch->pcdata->runes[3], SIGIL_AREA ) ? "X" : " ", "Object", IS_SET( ch->pcdata->runes[3], SIGIL_OBJECT ) ? "X" : " " ); send_to_char( buf, ch ); send_to_char("--------------------------------------------------------------------------------\n\r",ch); return; } DO_COM( do_favourmage ) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if ( IS_NPC( ch ) ) return; if ( ch->class != CLASS_MAGE ) { send_to_char("Huh?\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Syntax: favourmage [victim]\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( IS_NPC( victim ) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( victim->class != CLASS_MAGE ) { send_to_char( "Only on mages silly!\n\r", ch ); return; } if ( ch->pcdata->runes[0] != victim->pcdata->runes[0] ) { send_to_char( "Stick to your own mages please.\n\r", ch ); return; } if ( get_trust( victim ) != LEVEL_MAGE ) { send_to_char( "Not on Apprentices!\n\r", ch ); return; } if ( !IS_EXTRA( victim, EXTRA_SIRE ) ) { SET_BIT( victim->extra, EXTRA_SIRE ); act( "You grant $N permission to create an apprentice.", ch, NULL, victim, TO_CHAR ); act( "$n has granted you permission to create an apprentice.", ch, NULL, victim, TO_VICT ); } else { REMOVE_BIT( victim->extra, EXTRA_SIRE ); act( "You remove $N's permission to create an apperentice.", ch, NULL, victim, TO_CHAR ); act( "$n has removed your permission to create an apprentice.", ch, NULL, victim, TO_VICT ); } return; } DO_COM( do_teachmastery ) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if ( IS_NPC( ch ) ) return; if ( !IS_MAGE( ch ) ) { send_to_char("Huh?\n\r",ch); return; } if ( !IS_SET( ch->pcdata->runes[1], RUNE_MASTER ) ) { send_to_char( "You do not even know about the master rune?\n\r", ch ); send_to_char( "How can you teach it?\n\r", ch ); return; } if ( get_trust( ch ) < LEVEL_MAGE ) { send_to_char( "You can't teach anyone about the master rune.\n\r", ch ); return; } if ( !IS_EXTRA( ch, EXTRA_SIRE ) && get_trust( ch ) < LEVEL_ARCHMAGE ) { STC( "You haven't been granted permission to teach the master rune.\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( IS_NPC( victim ) ) { send_to_char( "You can't teach NPC's about the master rune.\n\r", ch ); return; } if ( ch->class != victim->class ) { send_to_char( "You can only teach people within the same class as yourself.\n\r", ch ); return; } if ( ch->pcdata->runes[0] != victim->pcdata->runes[0] ) { send_to_char( "You can only teach people within the same colour of magic.\n\r", ch ); return; } if ( victim->spl[0] < 240 || victim->spl[1] < 240 || victim->spl[2] < 240 || victim->spl[3] < 240 || victim->spl[4] < 240 ) { send_to_char( "They don't have max level in all spell colours.\n\r", ch ); return; } if ( count_stones( victim->pcdata->runes[1], TYPE_RUNE ) < 10 || count_stones( victim->pcdata->runes[2], TYPE_GLYPH ) < 10 || count_stones( victim->pcdata->runes[3], TYPE_SIGIL ) < 4 ) { send_to_char( "They haven't gained enough knowledge about mages to learn about the master rune.\n\r", ch ); return; } if ( victim->max_mana < 10000 ) { send_to_char( "They require 10 thousand mana before they learn about the master rune.\n\r", ch ); return; } if ( victim->exp < 10000000 ) { send_to_char( "They require 10 million exp to learn about the master rune.\n\r", ch ); return; } if ( ch->exp < 1000000 ) { send_to_char( "You require 1 million exp to teach them about the master rune.\n\r", ch ); return; } victim->exp -= 10000000; ch->exp -= 1000000; SET_BIT( victim->pcdata->runes[1], RUNE_MASTER ); victim->level = LEVEL_MAGE; victim->trust = LEVEL_MAGE; REMOVE_BIT( ch->extra, EXTRA_SIRE ); act( "You teach $N about the master rune.", ch, NULL, victim, TO_CHAR ); act( "$n teaches you about the master rune.", ch, NULL, victim, TO_VICT ); act( "$n teaches $N about the master rune.", ch, NULL, victim, TO_NOTVICT ); return; } void do_mageq( CHAR_DATA *ch, char *argument ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int vnum = 0; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if ( !IS_MAGE( ch ) ) { send_to_char("Huh?\n\r",ch); return; } if (arg[0] == '\0') { send_to_char("What piece of mage armor do you wish to create?.\n\r", ch); send_to_char("A Girth, Mask or Cape? \n\r",ch); return; } if (!str_cmp(arg,"girth" )) vnum = 29697; else if (!str_cmp(arg,"mask" )) vnum = 29696; else if (!str_cmp(arg,"cape" )) vnum = 29698; else { send_to_char("What piece of mage armor do you wish to create?.\n\r", ch); send_to_char("A Girth, Mask or Cape? \n\r",ch); return; } if (ch->practice < 85) { send_to_char("It costs 85 primal to create a piece of mage armor\n\r",ch); return; } if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform Morglum.\n\r",ch); return; } ch->practice -= 85; obj = create_object(pObjIndex, 50); obj_to_char(obj, ch); free_string( obj->questmaker ); obj->questmaker = str_dup( ch->name ); free_string( obj->questowner ); obj->questowner = str_dup( ch->name ); SET_BIT( obj->quest, QUEST_NOGIFT ); SET_BIT( obj->extra_flags, ITEM_LOYAL ); SET_BIT( obj->quest, QUEST_SPELLPROOF ); REMOVE_BIT( obj->spectype, SITEM_DEMONIC ); SET_BIT( obj->spectype, SITEM_MAGE ); obj->resistance = 25; act("$p appears in a elemental flash.",ch,obj,NULL,TO_CHAR); act("$p appears in a elemental flash.",ch,obj,NULL,TO_ROOM); return; } void do_advance( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg); if (IS_NPC(ch)) return; if (!IS_MAGE(ch)) { send_to_char("Huh?\n\r",ch); return; } if ( get_trust( ch ) < LEVEL_ARCHMAGE ) { send_to_char("Only the Archmage can advance you to mage!.\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch); return; } if ( IS_NPC( victim ) ) { send_to_char( "You cant do that FOOL!.\n\r", ch ); return; } if (ch == victim) { send_to_char("Why would you want to do that?\n\r",ch); return; } if ( ch->class != victim->class ) { send_to_char( "You can only teach people within the same class as yourself.\n\r", ch ); return; } if ( ch->pcdata->runes[0] != victim->pcdata->runes[0] ) { send_to_char( "You can only advance people within the same colour of magic.\n\r", ch ); return; } if ( victim->spl[0] < 240 || victim->spl[1] < 240 || victim->spl[2] < 240 || victim->spl[3] < 240 || victim->spl[4] < 240 ) { send_to_char( "They need complete master [240] in all spells.\n\r", ch ); return; } if ( victim->max_mana < 5000 ) { send_to_char( "They require five thousand mana before they can be advanced to Mage level.\n\r",ch ); return; } if ( victim->exp < 15000000 ) { send_to_char( "They require 15 million exp to advance to Mage level .\n\r", ch ); return; } if ( ch->exp < 1000000 ) { send_to_char( "You require 1 million exp to advance them to Mage level.\n\r", ch ); return; } victim->exp -= 15000000; ch->exp -= 1000000; victim->pcdata->runes[1] = 2047; victim->pcdata->runes[2] = 1023; victim->pcdata->runes[3] = 15; victim->level = LEVEL_MAGE; victim->trust = LEVEL_MAGE; act( "You advance $N to a mage.", ch, NULL, victim, TO_CHAR ); act( "$n advances you to a mage.", ch, NULL, victim, TO_VICT ); act( "$n advances $N to a mage.", ch, NULL, victim, TO_NOTVICT ); return; } void do_color( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; char clan[MAX_INPUT_LENGTH]; char type[MAX_INPUT_LENGTH]; CHAR_DATA *gch; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_MAGE(ch)) { send_to_char("Huh?\n\r",ch); return; } send_to_char("[ Name ] [ Colour ] [ Level ] [ Hits % ] [ Mana % ] [ Vital % ] [ Exp ]\n\r",ch ); for ( gch = char_list; gch != NULL; gch = gch->next ) { if ( IS_NPC(gch) ) continue; if ( !IS_MAGE(gch) ) continue; if ( IS_IMMORTAL( gch ) && !can_see( ch, gch ) ) continue; if ( gch->class == CLASS_LICH ) sprintf(clan,"Lich"); else if ( gch->class == CLASS_NEPHANDI ) sprintf(clan,"Nephandi"); else if ( gch->class == CLASS_SKINDANCER ) sprintf(clan, "Skindancer"); else if ( gch->pcdata->runes[0] == 1 ) sprintf(clan, "Fire"); else if ( gch->pcdata->runes[0] == 2 ) sprintf(clan, "Water"); else if ( gch->pcdata->runes[0] == 3 ) sprintf(clan, "Earth"); else if ( gch->pcdata->runes[0] == 4 ) sprintf(clan, "Spirit"); else if ( gch->pcdata->runes[0] == 0 ) sprintf(clan, "Air"); else sprintf(clan,"Bugged"); if (gch->level == 4 ) sprintf(type, "Apprentice"); else if (gch->level == 5 ) sprintf(type, "Mage"); else if (gch->level == 6 ) sprintf(type, "ArchMage"); { sprintf( buf, "[%-16s] [%-12s] [%-12s] [%-6d%3d] [%-6d%3d] [%-6d%3d] [%-5d]\n\r", capitalize( gch->name ), clan, type, gch->hit, (gch->hit * 100 / gch->max_hit ), gch->mana, (gch->mana * 100 / gch->max_mana ), gch->move, (gch->move * 100 / gch->max_move), gch->exp); send_to_char( buf, ch ); } } return; } DO_COM( do_magecommands ) { char buf [MAX_STRING_LENGTH]; int cmd, col; col = 0; for ( cmd = 0 ; cmd_table[cmd].name[0] != '\0' ; cmd++ ) { if ( cmd_table[cmd].level >= LEVEL_APPRENTICE && cmd_table[cmd].level <= LEVEL_ARCHMAGE && get_trust( ch ) >= cmd_table[cmd].level ) { sprintf( buf, "%-12s", cmd_table[cmd].name ); send_to_char( buf, ch ); if ( ++col % 6 == 0 ) send_to_char( "\n\r", ch ); } } if ( col % 6 != 0 ) send_to_char( "\n\r", ch ); return; }