/*--------------------------------------------------------------------------* * ** WolfPaw 3.0 ** * *--------------------------------------------------------------------------* * WolfPaw 3.0 (c) 1997 - 1999 by Dale Corse * *--------------------------------------------------------------------------* * The WolfPaw Coding Team is headed by: Greywolf * * With the Assitance from: Callinon, Dhamon, Sentra, Wyverns, Altrag * * Scryn, Thoric, Justice, Tricops and Brogar. * *--------------------------------------------------------------------------* * Based on SMAUG 1.2a. Copyright 1994 - 1996 by Derek Snider * * SMAUG Coding Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, * * Swordbearer, Gorog, Grishnakh and Tricops. * *--------------------------------------------------------------------------* * Merc 2.1 Diku MUD Improvments (C) 1992 - 1993 by Michael Chastain, * * Michael Quan, and Michael Tse. * * Original Diku MUD (C) 1990 - 1991 by Sebastian Hammer, Michael Seifert, * * Hans Hendrik Strfeldt, Tom Madsen, and Katja Nyboe. * *--------------------------------------------------------------------------* * Player Color Mapping Module * *--------------------------------------------------------------------------*/ #include <stdio.h> #include <string.h> #include <time.h> #include <unistd.h> #include <ctype.h> #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include "mud.h" char *colormap_parse( CHAR_DATA *ch, int map_type, bool advanced, char *speaker, char *string ); void create_map(CHAR_DATA *ch,int map_type,int color_num,bool string,char *txt); void free_char_colormaps( CHAR_DATA *ch ); void load_char_cmap( CHAR_DATA *ch, char *argument ); void save_char_cmaps( FILE *fp, CHAR_DATA *ch ); int get_map_type( char *name, bool immortal ); int get_color_num( char *color ); bool colorstringcheck( int map_type ); void setup_char_color_maps( CHAR_DATA *ch ); void set_cmap_bv( CHAR_DATA *ch, int map_type ); void remove_cmap_bv( CHAR_DATA *ch, int map_type ); void delete_char_color_map( CHAR_DATA *ch, int map_type ); bool colormap_check( CHAR_DATA *ch, int map_type ); bool advanced_map_name_check( char *argument ); char *advanced_map_convert( char *argument ); int get_cmap_bv_by_type( int map_type ); CMAP_DATA *find_char_map_by_type(CHAR_DATA *ch, int map_type); char *find_real_color_string(CMAP_DATA *map); int get_channel_cmap_num(int chan); CHAR_DATA *get_char args( ( char *name ) ); int get_real_act_color_num(int orig); char *get_map_name_by_num( int num ); char *get_color_word_by_num( int num ); /* * Main Control Function, lets the player configure everything --GW * Syntax: * Color on <-- Activate Color, same as the ANSI command did at one point * Color off <-- DeActivate Color, again same as the ANSI command did * Color map <map name> <color or string> <-- Map Something */ void do_color( CHAR_DATA *ch, char *argument ) { char arg1[MIL]; char arg2[MIL]; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if ( IS_NPC(ch) ) return; /* * Activate Color */ if ( !str_cmp( arg1, "on" ) ) { SET_BIT( ch->act, PLR_ANSI ); send_to_char("Color Activated.\n\r",ch); return; } /* * Deactivate Color */ if ( !str_cmp( arg1, "off" ) ) { REMOVE_BIT( ch->act, PLR_ANSI ); send_to_char("Color Deactivated.\n\r",ch); return; } /* * Map Something to another color, or set of colors * Includes support for basic things, ie: room descriptions * aswell as advanced mapping of Channel Names, and colors. */ if ( !str_cmp( arg1, "map" ) ) { int map_type=0; bool string=FALSE; char color_string[MSL]; int color_num=0; bool immortal=FALSE; if ( IS_IMMORTAL(ch) ) immortal=TRUE; /* What Color are we mapping? */ map_type=get_map_type(arg2,immortal); /*Invalid?*/ if ( map_type==0 ) { send_to_char("That is not a Map name!\n\r",ch); return; } if ( !str_cmp( argument, "off" ) ) { remove_cmap_bv(ch,map_type); delete_char_color_map(ch,map_type); send_to_char("Color Remap Deleted.\n\r",ch); return; } /* Color Number, or a string? */ if ( (color_num=get_color_num(argument))==0 ) { string=TRUE; sprintf(color_string,"%s",argument); } /* Are we supposed to use a COLOR or a string here? */ if ( string && colorstringcheck(map_type)==FALSE ) { send_to_char("You must use a valid Color!\n\r",ch); return; } /* Check to see if its a FIRST time map, or a REmapping */ if ( colormap_check(ch, map_type)==TRUE ) { delete_char_color_map(ch,map_type); remove_cmap_bv(ch, map_type); send_to_char("Already Remapped, Old mapping Deleted.\n\r",ch); } /* handle simple mapping, single colors only */ if ( !string ) create_map( ch, map_type, color_num, FALSE, NULL ); /* Advanced Maps */ if ( string ) { if ( advanced_map_name_check(color_string)==FALSE ) { send_to_char("The map string must contain an @@ sign\n\r",ch); send_to_char("representing the name of the character speaking.\n\r",ch); return; } create_map( ch, map_type, 0, TRUE, color_string ); } set_cmap_bv(ch,map_type); send_to_char("Color Remapped.\n\r",ch); return; } /* If we got this far, someone needs some assitance....*/ send_to_char("Syntax: Color <on/off/map> <map name> <off/color name/string>\n\r",ch); send_to_char("------\n\r\n\r",ch); send_to_char("Map Name being one of:\n\r",ch); send_to_char("rumor tell play quest war music ask flame shout yell\n\r",ch); send_to_char("clan council avatar tells roomdesc roomname socials exits obj mob\n\r",ch); send_to_char("FOR DM's: immtalk imp olympus newbiechat think\n\r",ch); send_to_char("-------\n\r\n\r",ch); send_to_char("Color Names being one of:\n\r",ch); send_to_char("Black Blood Green Orange DBlue Purple Cyan Grey DGrey LRed\n\r",ch); send_to_char("LGreen Yellow Blue LBlue White\n\r",ch); /* Not Done yet .. do it later..--GW send_to_char("For Background Colors:\n\r",ch); send_to_char("^Black ^Green ^Blue ^Cyan ^Red ^Orange ^Purple ^Grey\n\r",ch); send_to_char("-------\n\r",ch); send_to_char("NOTE: When setting background and regular colors, the BACKGROUND\n\r",ch); send_to_char("Color MUST come AFTER the regular!\n\r",ch); */ send_to_char("For details see HELP COLOR, and also, for setting strings of text\n\r",ch); send_to_char("Please use the regular color codes available in HELP PCOLORS\n\r",ch); return; } /* * Parses the string, and sends back whats needed, this is a MAIN function * as everything is sent here to be looked at, if the player has mapped * this to a string (for channels) it will return that string, if the * player has only specified a color (room names, room descriptions) * it will return the currect color for that group of text --GW */ char *colormap_parse( CHAR_DATA *ch, int map_type, bool advanced, char *speaker,char *string ) { CMAP_DATA *map; char *color_string; char buf[MSL]; char *pnt; CHAR_DATA *vch; char *speak=NULL; map=find_char_map_by_type(ch, map_type); /* make Sure can_see is obeyed! --GW */ if (advanced && speaker) { vch=get_char(speaker); if ( !can_see( ch, vch ) ) speak=STRALLOC("Someone"); else speak=speaker; } if (!advanced) { color_string=find_real_color_string(map); sprintf( buf, "%s%s&w", color_string,string ); } if (advanced) { if (speaker) sprintf(buf,map->remap_string,speak); else sprintf(buf,map->remap_string,""); } pnt = STRALLOC(buf); return pnt; } /* * Create a Map in the players data Structure, and set it up --GW */ void create_map(CHAR_DATA *ch,int map_type,int color_num,bool string,char *txt ) { CMAP_DATA *map=NULL; if ( !ch->pcdata->color_maps ) setup_char_color_maps(ch); CREATE( map, CMAP_DATA, 1 ); if ( string ) { txt=advanced_map_convert(txt); map->remap=1; map->remap_string=STRALLOC(txt); } map->mapped_color=color_num; map->map_type=map_type; LINK( map, ch->pcdata->color_maps->first_map,ch->pcdata->color_maps->last_map, next, prev ); return; } /* * Free a Chars Color Maps --GW */ void free_char_colormaps( CHAR_DATA *ch ) { CMAP_DATA *map, *map_next; for ( map=ch->pcdata->color_maps->first_map; map; map = map_next ) { map_next = map->next; if ( map->remap_string ) STRFREE( map->remap_string ); UNLINK( map, ch->pcdata->color_maps->first_map,ch->pcdata->color_maps->last_map, next, prev ); DISPOSE(map); } DISPOSE(ch->pcdata->color_maps); return; } /* * Loads a Color Map --GW */ void load_char_cmap( CHAR_DATA *ch, char *argument ) { char arg1[MIL]; char arg2[MIL]; char arg3[MIL]; sh_int remap=0; int mapped_color=0; int map_type=0; char *txt; bool string=FALSE; int cnt=0; argument = one_argument( argument, arg1 ); /* Remap */ argument = one_argument( argument, arg2 ); /* Mapped_color */ argument = one_argument( argument, arg3 ); /* map_type */ /* Left over is Remap String */ /* Setup Vars */ remap=atoi(arg1); mapped_color=atoi(arg2); map_type=atoi(arg3); for( cnt=0; argument[cnt]; cnt++ ) { if ( argument[cnt] && argument[cnt+1] && argument[cnt+2] ) if ( argument[cnt] == '*' && argument[cnt+1] == '!' && argument[cnt+2] == '*' ) argument[cnt] = '\0'; } txt=argument; if (mapped_color==0) string=TRUE; create_map(ch,map_type,mapped_color,string,txt); return; } /* * Saves all the Characters Color Maps --GW */ void save_char_cmaps( FILE *fp, CHAR_DATA *ch ) { CMAP_DATA *map, *map_next; if ( !ch->pcdata->color_maps ) setup_char_color_maps(ch); for ( map=ch->pcdata->color_maps->first_map; map; map = map_next ) { map_next=map->next; fprintf(fp,"CMAP %d %d %d %s*!*\n",map->remap, map->mapped_color, map->map_type, map->remap_string); } return; } /* * Get a Map Type from the Keyword for it --GW */ int get_map_type( char *name, bool immortal ) { int map_num=0; switch( tolower(name[0]) ) { /* Auction, Ask, Avatar */ case 'a': // if ( !str_cmp( name,"auction" ) ) // map_num=CMAP_AUCTION; if ( !str_cmp( name,"ask" ) ) map_num=CMAP_ASK; if ( !str_cmp( name,"avatar" ) ) map_num=CMAP_AVATAR; break; /* Clan, Council */ case 'c': if ( !str_cmp( name,"clan" ) ) map_num=CMAP_CLAN; if ( !str_cmp( name,"council") ) map_num=CMAP_COUNCIL; break; /* Exits */ case 'e': if ( !str_cmp( name, "exits" ) ) map_num=CMAP_EXITS; break; /* Flame */ case 'f': if ( !str_cmp( name, "flame" ) ) map_num=CMAP_FLAME; break; /* Info */ // case 'i': // if ( !str_cmp( name, "info" ) ) // map_num=CMAP_INFO; // break; /* Mob, Music */ case 'm': if ( !str_cmp( name,"mob" ) ) map_num=CMAP_MOB; if ( !str_cmp( name,"music" ) ) map_num=CMAP_MUSIC; break; /* Obj */ case 'o': if ( !str_cmp( name, "obj" ) ) map_num=CMAP_OBJ; break; /* Play */ case 'p': if ( !str_cmp( name, "play" ) ) map_num=CMAP_PLAY; break; /* Quest */ case 'q': if ( !str_cmp( name, "quest" ) ) map_num=CMAP_QUEST; break; /* Rumor, RoomDesc, RoomName */ case 'r': if ( !str_cmp( name,"rumor" ) ) map_num=CMAP_RUMOR; if ( !str_cmp( name,"roomdesc" ) ) map_num=CMAP_ROOMDESC; if ( !str_cmp( name,"roomname" ) ) map_num=CMAP_ROOMNAME; break; /* Shout, Socials */ case 's': if ( !str_cmp( name,"shout" ) ) map_num=CMAP_SHOUT; if ( !str_cmp( name,"socials" ) ) map_num=CMAP_SOCIALS; break; /* Tells */ case 't': if ( !str_cmp( name, "tells" ) ) map_num=CMAP_TELLS; break; /* War */ case 'w': if ( !str_cmp( name, "war" ) ) map_num=CMAP_WAR; break; /* Yell */ case 'y': if ( !str_cmp( name, "yell" ) ) map_num=CMAP_YELL; break; } /* Gods Only */ if ( immortal && map_num == 0 ) { switch( tolower(name[0]) ) { /* Immtalk, Imp */ case 'i': if ( !str_cmp( name,"immtalk" ) ) map_num=CMAP_IMMTALK; if ( !str_cmp( name,"imp" ) ) map_num=CMAP_IMP; break; /* Olympus */ case 'o': if ( !str_cmp( name, "olympus" ) ) map_num=CMAP_OLYMPUS; break; /* NewbieChat */ case 'n': if ( !str_cmp( name, "newbiechat" ) ) map_num=CMAP_NEWBIECHAT; break; /* Think */ case 't': if ( !str_cmp( name, "think" ) ) map_num=CMAP_THINK; break; } } return map_num; } /* * Get the Color Number from a name --GW */ int get_color_num( char *color ) { int cnum=0; switch( tolower(color[0]) ) { case '^': if ( !str_cmp( color, "^black" ) ) cnum=CMCOLOR__BLACK; if ( !str_cmp( color, "^green" ) ) cnum=CMCOLOR__GREEN; if ( !str_cmp( color, "^blue" ) ) cnum=CMCOLOR__BLUE; if ( !str_cmp( color, "^cyan" ) ) cnum=CMCOLOR__CYAN; if ( !str_cmp( color, "^red" ) ) cnum=CMCOLOR__RED; if ( !str_cmp( color, "^orange" ) ) cnum=CMCOLOR__ORANGE; if ( !str_cmp( color, "^purple" ) ) cnum=CMCOLOR__PURPLE; if ( !str_cmp( color, "^grey" ) ) cnum=CMCOLOR__GREY; break; default: if ( !str_cmp( color, "black" ) ) cnum=CMCOLOR_BLACK; if ( !str_cmp( color, "blood" ) ) cnum=CMCOLOR_BLOOD; if ( !str_cmp( color, "green" ) ) cnum=CMCOLOR_GREEN; if ( !str_cmp( color, "orange" ) ) cnum=CMCOLOR_BROWN; if ( !str_cmp( color, "dblue" ) ) cnum=CMCOLOR_DBLUE; if ( !str_cmp( color, "purple" ) ) cnum=CMCOLOR_PURPLE; if ( !str_cmp( color, "cyan" ) ) cnum=CMCOLOR_CYAN; if ( !str_cmp( color, "grey" ) ) cnum=CMCOLOR_GREY; if ( !str_cmp( color, "dgrey" ) ) cnum=CMCOLOR_DGREY; if ( !str_cmp( color, "lred" ) ) cnum=CMCOLOR_LRED; if ( !str_cmp( color, "lgreen" ) ) cnum=CMCOLOR_LGREEN; if ( !str_cmp( color, "yellow" ) ) cnum=CMCOLOR_YELLOW; if ( !str_cmp( color, "blue" ) ) cnum=CMCOLOR_BLUE; if ( !str_cmp( color, "lblue" ) ) cnum=CMCOLOR_LBLUE; if ( !str_cmp( color, "white" ) ) cnum=CMCOLOR_WHITE; break; } return cnum; } /* * Check to see if this map can be a string, or only a color --GW * False if its only a color * True is its a string. */ bool colorstringcheck( int map_type ) { if ( map_type > CMAP_AVATAR && map_type < CMAP_IMMTALK ) return FALSE; return TRUE; } /* * Initilize a Characters Color Map Settings --GW */ void setup_char_color_maps( CHAR_DATA *ch ) { CREATE( ch->pcdata->color_maps, COLORMAP_DATA, 1 ); ch->pcdata->color_maps->first_map=NULL; ch->pcdata->color_maps->last_map=NULL; return; } void set_cmap_bv( CHAR_DATA *ch, int map_type ) { int bv=0; bv = get_cmap_bv_by_type(map_type); if ( bv > 0 ) SET_BIT( ch->pcdata->colormap_settings, bv ); return; } void remove_cmap_bv( CHAR_DATA *ch, int map_type ) { int bv=0; bv = get_cmap_bv_by_type(map_type); if ( bv > 0 ) REMOVE_BIT( ch->pcdata->colormap_settings, bv ); return; } void delete_char_color_map( CHAR_DATA *ch, int map_type ) { CMAP_DATA *map, *map_next; for ( map=ch->pcdata->color_maps->first_map; map; map = map_next ) { map_next = map->next; if ( map->map_type == map_type ) { if ( map->remap_string ) STRFREE( map->remap_string ); UNLINK( map,ch->pcdata->color_maps->first_map,ch->pcdata->color_maps->last_map, next, prev ); DISPOSE(map); } } return; } /* * Checks to see if the character has this mapped to another color setting * --GW */ bool colormap_check( CHAR_DATA *ch, int map_type ) { int bv=0; if ( IS_NPC(ch) ) return FALSE; bv = get_cmap_bv_by_type(map_type); if ( IS_SET( ch->pcdata->colormap_settings, bv ) ) return TRUE; return FALSE; } /* * Checks the map string for the @@ characters --GW */ bool advanced_map_name_check( char *argument ) { int str=0; for ( str = 0; argument[str] != '\0'; str++ ) { if ( argument[str] == '%' ) return FALSE; } for ( str = 0; argument[str] != '\0'; str++ ) { if ( argument[str] == '@' && argument[str+1] && argument[str+1] =='@' ) return TRUE; } return FALSE; } char *advanced_map_convert( char *argument ) { int str=0; for ( str = 0; argument[str] != '\0'; str++ ) { if ( argument[str] == '@' && argument[str+1] && argument[str+1] =='@' ) { argument[str] = '%'; argument[str+1] = 's'; } } return argument; } int get_cmap_bv_by_type( int map_type ) { int bv=0; switch( map_type ) { case CMAP_RUMOR: bv=BV01; break; case CMAP_TELL: bv=BV02; break; case CMAP_AUCTION: bv=BV03; break; case CMAP_PLAY: bv=BV04; break; case CMAP_INFO: bv=BV05; break; case CMAP_QUEST: bv=BV06; break; case CMAP_WAR: bv=BV07; break; case CMAP_MUSIC: bv=BV08; break; case CMAP_ASK: bv=BV09; break; case CMAP_FLAME: bv=BV10; break; case CMAP_SHOUT: bv=BV11; break; case CMAP_YELL: bv=BV12; break; case CMAP_CLAN: bv=BV13; break; case CMAP_COUNCIL: bv=BV14; break; case CMAP_AVATAR: bv=BV15; break; case CMAP_TELLS: bv=BV16; break; case CMAP_ROOMDESC: bv=BV17; break; case CMAP_ROOMNAME: bv=BV18; break; case CMAP_SOCIALS: bv=BV19; break; case CMAP_EXITS: bv=BV20; break; case CMAP_OBJ: bv=BV21; break; case CMAP_MOB: bv=BV22; break; case CMAP_IMMTALK: bv=BV23; break; case CMAP_IMP: bv=BV24; break; case CMAP_OLYMPUS: bv=BV25; break; case CMAP_NEWBIECHAT: bv=BV26; break; case CMAP_THINK: bv=BV27; break; } return bv; } CMAP_DATA *find_char_map_by_type(CHAR_DATA *ch, int map_type) { CMAP_DATA *map, *map_next; for ( map=ch->pcdata->color_maps->first_map; map; map = map_next ) { map_next = map->next; if ( map->map_type == map_type ) return map; } return NULL; } char *find_real_color_string(CMAP_DATA *map) { char color[5]; char *pnt; switch(map->mapped_color) { case CMCOLOR_BLACK: strcpy(color,"&x"); break; case CMCOLOR_BLOOD: strcpy(color,"&r"); break; case CMCOLOR_GREEN: strcpy(color,"&g"); break; case CMCOLOR_BROWN: strcpy(color,"&O"); break; case CMCOLOR_DBLUE: strcpy(color,"&b"); break; case CMCOLOR_PURPLE: strcpy(color,"&p"); break; case CMCOLOR_CYAN: strcpy(color,"&c"); break; case CMCOLOR_GREY: strcpy(color,"&w"); break; case CMCOLOR_DGREY: strcpy(color,"&z"); break; case CMCOLOR_LRED: strcpy(color,"&R"); break; case CMCOLOR_LGREEN: strcpy(color,"&G"); break; case CMCOLOR_YELLOW: strcpy(color,"&Y"); break; case CMCOLOR_BLUE: strcpy(color,"&B"); break; case CMCOLOR_LBLUE: strcpy(color,"&C"); break; case CMCOLOR_WHITE: strcpy(color,"&W"); break; case CMCOLOR__BLACK: strcpy(color,"^x"); break; case CMCOLOR__GREEN: strcpy(color,"^g"); break; case CMCOLOR__BLUE: strcpy(color,"^b"); break; case CMCOLOR__CYAN: strcpy(color,"^c"); break; case CMCOLOR__RED: strcpy(color,"^r"); break; case CMCOLOR__ORANGE: strcpy(color,"^O"); break; case CMCOLOR__PURPLE: strcpy(color,"^p"); break; case CMCOLOR__GREY: strcpy(color,"^w"); break; } pnt=STRALLOC(color); return pnt; } int get_real_act_color_num(int orig) { int color=0; switch(orig) { case CMCOLOR_BLACK: color=AT_BLACK; break; case CMCOLOR_BLOOD: color=AT_BLOOD; break; case CMCOLOR_GREEN: color=AT_GREEN; break; case CMCOLOR_BROWN: color=AT_ORANGE; break; case CMCOLOR_DBLUE: color=AT_DBLUE; break; case CMCOLOR_PURPLE: color=AT_PURPLE; break; case CMCOLOR_CYAN: color=AT_CYAN; break; case CMCOLOR_GREY: color=AT_GREY; break; case CMCOLOR_DGREY: color=AT_DGREY; break; case CMCOLOR_LRED: color=AT_RED; break; case CMCOLOR_LGREEN: color=AT_GREEN; break; case CMCOLOR_YELLOW: color=AT_YELLOW; break; case CMCOLOR_BLUE: color=AT_BLUE; break; case CMCOLOR_LBLUE: color=AT_LBLUE; break; case CMCOLOR_WHITE: color=AT_WHITE; break; case CMCOLOR__BLACK: color=AT_BLACK; break; case CMCOLOR__GREEN: color=AT_GREEN; break; case CMCOLOR__BLUE: color=AT_BLUE; break; case CMCOLOR__CYAN: color=AT_CYAN; break; case CMCOLOR__RED: color=AT_RED; break; case CMCOLOR__ORANGE: color=AT_ORANGE; break; case CMCOLOR__PURPLE: color=AT_PURPLE; break; case CMCOLOR__GREY: color=AT_GREY; break; } return color; } int get_channel_cmap_num(int chan) { int cmap=0; switch( chan ) { case CHANNEL_CHAT: cmap=CMAP_RUMOR; break; case CHANNEL_TELLS: cmap=CMAP_TELL; break; case CHANNEL_AUCTION: cmap=CMAP_AUCTION; break; case CHANNEL_IC: cmap=CMAP_PLAY; break; case CHANNEL_INFO: cmap=CMAP_INFO; break; case CHANNEL_QUEST: cmap=CMAP_QUEST; break; case CHANNEL_WARTALK: cmap=CMAP_WAR; break; case CHANNEL_MUSIC: cmap=CMAP_MUSIC; break; case CHANNEL_ASK: cmap=CMAP_ASK; break; case CHANNEL_FLAME: cmap=CMAP_FLAME; break; case CHANNEL_SHOUT: cmap=CMAP_SHOUT; break; case CHANNEL_YELL: cmap=CMAP_YELL; break; case CHANNEL_CLAN: cmap=CMAP_CLAN; break; case CHANNEL_COUNCIL: cmap=CMAP_COUNCIL; break; case CHANNEL_AVTALK: cmap=CMAP_AVATAR; break; case CHANNEL_IMMTALK: cmap=CMAP_IMMTALK; break; case CHANNEL_HIGHGOD: cmap=CMAP_IMP; break; case CHANNEL_OLYMPUS: cmap=CMAP_OLYMPUS; break; case CHANNEL_NEWBIE: cmap=CMAP_NEWBIECHAT; break; case CHANNEL_HIGH: cmap=CMAP_THINK; break; } return cmap; } void do_colors( CHAR_DATA *ch, char *argument ) { CMAP_DATA *map, *map_next; int cnt=0; char buf[MSL]; char *color; if ( IS_NPC(ch) ) return; send_to_char("Color Settings\n\r",ch); send_to_char("==============\n\r",ch); ch_printf( ch, "Color is %s.\n\r", IS_SET( ch->act, PLR_ANSI ) ? "Active" : "Disabled" ); for( map = ch->pcdata->color_maps->first_map; map; map=map_next ) { map_next=map->next; if ( map->mapped_color > 0 ) { cnt++; color = get_color_word_by_num(map->mapped_color); sprintf(buf, "%-11s: %s\n\r",get_map_name_by_num(map->remap), color); send_to_char(buf,ch); } else { cnt++; sprintf(buf, "%-11s: %s\n\r",get_map_name_by_num(map->remap), map->remap_string); send_to_char(buf,ch); } } if ( cnt > 0 ) ch_printf( ch, "%d Color Maps Found.\n\r",cnt); else send_to_char("No Color Maps Found.\n\r",ch); return; } char *get_color_word_by_num( int num ) { char *color=NULL; switch(num) { case CMCOLOR_BLACK: color = STRALLOC("Black"); break; case CMCOLOR_BLOOD: color = STRALLOC("Blood"); break; case CMCOLOR_GREEN: color = STRALLOC("Green"); break; case CMCOLOR_BROWN: color = STRALLOC("Orange"); break; case CMCOLOR_DBLUE: color = STRALLOC("Dark Blue"); break; case CMCOLOR_PURPLE: color = STRALLOC("Purple"); break; case CMCOLOR_CYAN: color = STRALLOC("Cyan"); break; case CMCOLOR_GREY: color = STRALLOC("Grey"); break; case CMCOLOR_DGREY: color = STRALLOC("Dark Grey"); break; case CMCOLOR_LRED: color = STRALLOC("Light Red"); break; case CMCOLOR_LGREEN: color = STRALLOC("Light Green"); break; case CMCOLOR_YELLOW: color = STRALLOC("Yellow"); break; case CMCOLOR_BLUE: color = STRALLOC("Blue"); break; case CMCOLOR_LBLUE: color = STRALLOC("Light Blue"); break; case CMCOLOR_WHITE: color = STRALLOC("White"); break; } return color; } char *get_map_name_by_num( int num ) { char *name=NULL; switch(num) { case CMAP_RUMOR: name = STRALLOC("Rumor"); break; case CMAP_TELL: name = STRALLOC("Tells"); break; case CMAP_AUCTION: name = STRALLOC("Auction"); break; case CMAP_PLAY: name = STRALLOC("Play"); break; case CMAP_INFO: name = STRALLOC("Info"); break; case CMAP_QUEST: name = STRALLOC("Quest"); break; case CMAP_WAR: name = STRALLOC("War"); break; case CMAP_MUSIC: name = STRALLOC("Music"); break; case CMAP_ASK: name = STRALLOC("Ask"); break; case CMAP_FLAME: name = STRALLOC("Flame"); break; case CMAP_SHOUT: name = STRALLOC("Shout"); break; case CMAP_YELL: name = STRALLOC("Yell"); break; case CMAP_CLAN: name = STRALLOC("Clan"); break; case CMAP_COUNCIL: name = STRALLOC("Council"); break; case CMAP_AVATAR: name = STRALLOC("Avatar"); break; case CMAP_TELLS: name = STRALLOC("Tells"); break; case CMAP_ROOMDESC: name = STRALLOC("RoomDesc"); break; case CMAP_ROOMNAME: name = STRALLOC("RoomName"); break; case CMAP_SOCIALS: name = STRALLOC("Socials"); break; case CMAP_EXITS: name = STRALLOC("Exits"); break; case CMAP_OBJ: name = STRALLOC("Obj"); break; case CMAP_MOB: name = STRALLOC("Mob"); break; case CMAP_IMMTALK: name = STRALLOC("Immtalk"); break; case CMAP_IMP: name = STRALLOC("Imp"); break; case CMAP_OLYMPUS: name = STRALLOC("Olympus"); break; case CMAP_NEWBIECHAT: name = STRALLOC("Newbiechat"); break; case CMAP_THINK: name = STRALLOC("Think"); break; } return name; }