> - snprintf(buf, sizeof(buf), "$n says, '%s'", argument);
> + snprintf(buf, sizeof(buf), "$n says, '%s&w'", argument);
Excellent, that's kind of what I was thinking, but wasn't entirely sure
how things were working.
> If you want to completely prohibit players from using color, a simple
> solution is to double every '&' you encounter in their input. CircleMUD
> already does this for '$' -- see process_input().
I think as long as I can prevent color bleed I'm fine. If someone wants
to run around making ten colored "says" that's what disciplinary commands
were made for. *shrug* My main concern was the bleed, which is indeed
addressed here.
Now for a problem I've run across. I cannot get the flash or backgrounds
to work. For some reason whenever I use the appropriate code, there is no
response. I had one odd flash and bgcolor bleed oonce when I had &&& in a
file where I meant to have &&&&, but beyond that they codes seem to just
vaporize.
&0 to &7 and &f seem to not function at all. :(
(The code is enclosed below for those who don't have it handy.)
int is_color(char c) {
switch (c) {
case 'x': return 30; break;
case 'r': return 31; break;
case 'g': return 32; break;
case 'y': return 33; break;
case 'b': return 34; break;
case 'm': return 35; break;
case 'c': return 36; break;
case 'w': return 37; break;
case '0': return 40; break;
case '1': return 44; break;
case '2': return 42; break;
case '3': return 46; break;
case '4': return 41; break;
case '5': return 45; break;
case '6': return 43; break;
case '7': return 47; break;
case 'f': return 1; break;
case '&': return -1; break;
default : return 0; break;
}
}
char *interpret_colors(char *str, bool parse) {
int clr = 37, bg_clr = 40, flash = 0;
static char cbuf[MAX_STRING_LENGTH];
char *cp, *tmp;
char i[256];
if (!strchr(str, '&'))
return (str);
cp = cbuf;
for (;;) {
if (*str == '&') {
str++;
if ((clr = is_color(LOWER(*str))) > 0 && parse) {
if (IS_UPPER(*str)) sprintf(i, "\x1b[1;");
else sprintf(i, "\x1b[0;");
if (clr >= 40) {
bg_clr = 40;
str++;
continue;
} else if (clr == 1) {
flash = !flash;
str++;
continue;
}
sprintf(i, "%s%s%d;%dm", i, (flash ? "5;" : ""), bg_clr, clr);
tmp = i;
} else if (clr == -1) {
*(cp++) = '&';
str++;
continue;
} else {
str++;
continue;
}
while ((*cp = *(tmp++)))
cp++;
str++;
} else if (!(*(cp++) = *(str++)))
break;
}
*cp = '\0';
return (cbuf);
}
-Mathew
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
| Newbie List: http://groups.yahoo.com/group/circle-newbies/ |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT