/* * Silvercode - cname.c v1.3 * Coloured names (done reasonably correctly - ahem) * --------------------------------------------------------------------------- * * Note: "colour" is spelt with a 'u'. Please don't bastardise the English * language more than it already is :o) */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "include/config.h" #include "include/player.h" #include "include/proto.h" void cname(player *p, char *str) { int pos = 0; if (!*str) { tell_player(p, " Format: cname <colour codes>\n" " (use \"cname clear\" to clear all colours)\n"); if (p->cname[0]) TELLPLAYER(p, " Your current colour code is: %s\n", p->cname); return; } if (!strcasecmp(str, "clear")) { p->cname[0] = 0; tell_player(p, " All colours removed from your name.\n"); return; } if (strlen(str) < strlen(p->name)) { TELLPLAYER(p, " You have supplied only %d colour codes and you need %d.\n", strlen(str), strlen(p->name)); return; } else if (strlen(str) > strlen(p->name)) { TELLPLAYER(p, " You have supplied %d colour codes and you only need %d.\n", strlen(str), strlen(p->name)); return; } /* check validity */ for (pos = 0 ; pos < strlen(str) ; pos++) if (!valid_char_col(str[pos])) { TELLPLAYER(p, " '%c' is not a valid colour character. ", str[pos]); if (p->cname[0]) tell_player(p, "Coloured name not changed.\n"); else tell_player(p, "Coloured name not set.\n"); return; } strncpy(p->cname, str, MAX_NAME); p->cname[MAX_NAME+1] = 0; TELLPLAYER(p, " Colour code set to: %s\n" " People will now view your name as: %s\n", p->cname, get_cname(p, p)); } /* show someones cname p = persons name, v = the viewing person By giving the pointer to the viewing person we can allow them to muffle cnames - a feature I love! :o) */ char *get_cname(player *p, player *v) { static char result[MAX_NAME*4]; /* overkill i know */ int pos = 0, rpos = 0; char last = 'N'; /* if no viewer defined, show non-coloured */ if (!v) return p->name; /* don't show them cnames if they don't want it */ if (v->misc_flags & NO_CNAME) return p->name; /* if they don't have a cname then return */ if (!p->cname[0]) return p->name; for (pos = 0 ; pos < strlen(p->name) ; pos++) { if (last != p->cname[pos]) { result[rpos++] = '^'; result[rpos++] = p->cname[pos]; last = p->cname[pos]; } result[rpos++] = p->name[pos]; } /* terminate colour codes - if necessary */ if (p->cname[strlen(p->cname)] != 'N') { result[rpos++] = '^'; result[rpos++] = 'N'; } /* and end */ result[rpos] = 0; return result; } void toggle_cname(player *p) { p->misc_flags ^= NO_CNAME; if (p->misc_flags & NO_CNAME) tell_player(p, " You are sensibly ignoring coloured names.\n"); else tell_player(p, " You are viewing coloured names.\n"); } void cname_version() { sprintf(stack, " -=*> Coloured name code v1.3 (by Silver) installed.\n"); stack = strchr(stack, 0); }