the following is a fixed version of the color parser.. I still don't have a & code for return to normal but I'll get that as soon as possible.. until then.. this fixed version will stop the flashies when you change to another & code.. (ie. &*+rbahaha &+rbahahah) will give you flashing red bahaha and then a standard NON-flashing red bahaha char *fix_color (struct char_data *ch, unsigned char *src) { char *dest; static char str5[LARGE_BUFSIZE + GARBAGE_SPACE]; int flash = 0; int changed = 0; dest = str5; while (*src != 0) { if (*src != '&') { *dest++ = *src++; } else { if (*(src + 1) == '*') { flash = 1; src++; } switch (*(src + 1)) { case '&': src += 2; *dest++ = '&'; continue; case '+': changed = 1; if (colorcode (*(src + 2))) { if (clr(ch, 1)) { if (flash) { flash = 0; strcpy((char *) dest, "\033[1;5;30m"); dest[7] = colorcode (*(src + 2)); if (*(src + 2) >= 96) dest[2] = '0'; dest += 9; } else { strcpy ((char *) dest, "\033[0m\033[1;30m"); dest[9] = colorcode (*(src + 2)); if (*(src + 2) >= 96) dest[6] = '0'; dest += 11; } } src += 3; continue; } else { *dest++ = *src++; continue; } case '-': changed = 1; if (colorcode (*(src + 2))) { if (clr(ch, 1)) { if (flash) { flash = 0; strcpy((char *) dest, "\033[1;5;40m"); dest[7] = colorcode (*(src + 2)); if (*(src + 2) >= 96) dest[2] = '0'; dest += 9; } else { strcpy ((char *) dest, "\033[0m\033[1;40m"); dest[9] = colorcode (*(src + 2)); if (*(src + 2) >= 96) dest[6] = '0'; dest += 11; } } src += 3; continue; } else { *dest++ = *src++; continue; } case '=': changed = 1; if (colorcode (*(src + 2)) && colorcode (*(src + 3))) { if (clr(ch, 1)) { if (flash) { flash = 0; strcpy((char *) dest, "\033[1;5;40;30m"); dest[7] = colorcode (*(src + 3)); dest[10] = colorcode (*(src + 2)); if (*(src + 2) >= 96) dest[2] = '0'; dest += 12; } else { strcpy ((char *) dest, "\033[0m\033[1;40;30m"); dest[9] = colorcode (*(src + 3)); dest[12] = colorcode (*(src + 2)); if (*(src + 2) >= 96) dest[6] = '0'; dest += 14; } } src += 4; continue; } else { *dest++ = *src++; continue; } default: *dest++ = *src++; continue; } } } if(changed == 1) strcpy ((char *) dest, "\033[0m\0"); else strcpy((char *) dest, "\0"); return(str5); }
This archive was generated by hypermail 2b30 : 12/07/00 PST