/* NameError.c V1.3
* This code will send pc's different error messages during the log-in/creation
* process to tell them why their name isn't allowed. As well as protecting
* 'famous names' Like zugg, hatchet, erwin, darkoth, etc.
*
* Updated September 2, 2000
* Written by Snafu Life. (copyright 2000) of the (coming soon) mud Aacacia. (Rom2.4b6).
* Special thanx to Myles Skinner and Malcom Valentine for their contributions
* in the creation/wording of the error messages.
Also, a special thanx to
* Alex Fletcher, for his help in weeding out some extraneous code.
*
* This code is given to you almost freely upon the following conditions:
* These conditions must be included when distributed in any form including
* but not limited to modified works.
*
* Neither I nor anyone else that modifies or distributes this snip can
* require credit be given in any form. Credit is welcomed but is at the
* sole discretion of the End User. End User, as used here, is defined as the
* person who has copyrights over the source this snip or a modified
* version of this snip is being placed into. The End User shall not be charged
* for access or use of this snip or a modified version.
*/
/* In merc.h under the act_wiz.c comment, I also use Voltecs rename command so
* that is why i define it there. If you don't use a rename command you could
* define it comm.c by replacing bool check_parse_name args((char *name)); in
* the local functions comment
*/
int check_parse_name args((char *name));
/* Right before "Other local functions(OS-independant)"
*/
/* Used for Name validation */
#if defined(MSDOS)
#define MAX_NAME_LENGTH 8
#else /* if defined(macintosh) || defined(unix) */
#define MAX_NAME_LENGTH 12
#endif
/* in comm.c under the "Other local functions (OS-indepent)" comment, delete
* bool check_parse_name args( ( char *name ) );
*/
/* If you already have modified check_parse_name() you can use this
* as a reference if not you may choose to replace as suggested
*/
/* in void nanny() at the top replace
char buf[MAX_STRING_LENGTH];
*/
char buf[MAX_STRING_LENGTH],log_buf[MAX_STRING_LENGTH];
/* and int iClass,race,i,weapon;
with:
*/
int iClass,race,i,weapon,x;
/* Lower case cap freako's example CrashBurn becomes Crashburn
*
* After while ( isspace(*argument) )
argument++;
*/
while ( isspace(*argument) ) {
argument++;
}
/* This is a change from the second version.
* If you don't add this you will experience
* a lack of capital letters in various areas
* of your code :(
if (d->connected == CON_GET_NAME ) {
c='0';
x=0;
while(c != '\0') {
c = argument[x];
c = tolower(c);
argument[x] = c;
x++;
}
}
/* In void nanny() under case CON_GET_Name right replace
if ( !check_parse_name( argument ) )
{
write_to_buffer( d, "Illegal name, try another.\n\rName: ", 0 );
return;
}
* with:
*/
if(check_parse_name(argument) != 0) {
switch(check_parse_name(argument)) {
/* REPLACE Aacacian with your mud name */
case 1: write_to_buffer( d,
"The name you have chosen has been reserved by the Aacacian Administration.\n\r",0);
write_to_buffer(d,"Please choose again.\n\rName:\n\r",0);
break;
case 2: write_to_buffer( d,
"A clan has reserved that name for their use. Please choose again.\n\rName: ", 0 );
break;
case 3: write_to_buffer(d,"This name is a well known name in the mud'ing community.\n\r",0);
write_to_buffer(d,"If you really are this person:\n\r",0);
write_to_buffer(d,"Please, create under a different name and send an e-mail\n\r",0);
/* REPLACE BELOW WITH YOUR E-mail Address */
write_to_buffer(d,"to aacacia@coming_soon from a verifiable e-mail address.\n\r",0);
write_to_buffer(d,"We welcome your presence, but to protect ourselves as\n\r",0);
write_to_buffer(d,"well as to protect you from impersonators, we have\n\r",0);
write_to_buffer(d,"temporarily placed your name on hold.\n\r",0);
write_to_buffer(d,"If you are not this person, you have our apologies for\n\r",0);
write_to_buffer(d,"the unavailability of this name but hope you will choose\n\r",0);
write_to_buffer(d,"another name instead.\n\rName:",0);
sprintf(log_buf,"Log: Famous Name: %s@%s",argument,d->host);
wiznet(log_buf,ch,NULL,WIZ_SECURE,0,get_trust(ch));
log_string(log_buf);
break;
case 4: write_to_buffer( d,
"The name chosen must be between 3 and %d characters in length.\n", MAX_NAME_LENGTH);
break;
case 5: write_to_buffer(d,"Only letters (A-Z) are allowed.\n\rName: ", 0 );
break;
}
return;
}
/* in comm.c replace bool check_parse_name() with:
*/
/*
* Parse a name for acceptability.
*/
int check_parse_name( char *name )
{
int clan;
/*
* Reserved words.
*/
/* If you have changed is_exact_name you may want to replace it with
* your keywaords, if not change aacacia to your mud name
*/
if (is_exact_name(name,
"all aac mob aacacia auto immortal self someone something the you loner none"))
{
return 1;
}
/* check clans */
for (clan = 0; clan < MAX_CLAN; clan++)
{
if (LOWER(name[0]) == LOWER(clan_table[clan].name[0])
&& !str_cmp(name,clan_table[clan].name))
return 2;
}
/* PROTECT OURSELF FROM IMPOSTERS IF ONE OF THESE VISITS
* And sends you confirmation that is who they are then all
* you have to do is remove their name from the list and
* change their temp pfile accordingly */
if ((str_cmp(capitalize(name), "Alander")
|| str_cmp(capitalize(name),"Zugg")
|| str_cmp(capitalize(name),"Snafu") /* Hopefully, Someday ;) */
|| str_cmp(capitalize(name),"Lope")
|| str_cmp(capitalize(name),"Ivan")
|| str_cmp(capitalize(name),"Askirius")
|| str_cmp(capitalize(name),"Erwin")
|| str_cmp(capitalize(name),"Furey")
|| str_cmp(capitalize(name),"Hatchet")
|| str_cmp(capitalize(name),"Kahn")
|| str_cmp(capitalize(name),"Darkoth")
|| str_cmp(capitalize(name),"Voltec")
|| str_cmp(capitalize(name),"Kavir"))
&& (!str_prefix("Alan",name)
|| !str_suffix("Alander",name))){
/* This is a list in progress There may be more
* you want to add
*/
return 3;
}
/*
* Length restrictions.
*/
if ( (strlen(name) < 3) || strlen(name) > MAX_NAME_LENGTH) {
return 4;
}
/*
* Alphanumerics only.
* Lock out IllIll twits.
*
* Most of the old stuff is now no longer needed
* cut-off to save space.
*/
{
char *pc;
bool fIll=TRUE;
for ( pc = name; *pc != '\0'; pc++ )
{
/* No digits (0-1) or punctuation in name */
if(!isalpha(*pc))
return 5;
/* Took out ugly anti-caps hace replaced in nanny() */
if ( LOWER(*pc) != 'i' && LOWER(*pc) != 'l' )
fIll = FALSE;
}
if ( fIll ) {
return 1;
}
}
/*
* Prevent players from naming themselves after mobs.
*/
{
extern MOB_INDEX_DATA *mob_index_hash[MAX_KEY_HASH];
MOB_INDEX_DATA *pMobIndex;
int iHash;
for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ ) {
for ( pMobIndex = mob_index_hash[iHash];
pMobIndex != NULL;
pMobIndex = pMobIndex->next ) {
if ( is_name( name, pMobIndex->player_name ) ) {
return 1;
}
}
}
}
/* Prevent players from naming themselves objects */
{
extern OBJ_INDEX_DATA *obj_index_hash[MAX_KEY_HASH];
OBJ_INDEX_DATA *pObjIndex;
int iHash;
for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ )
{
for ( pObjIndex = obj_index_hash[iHash];
pObjIndex != NULL;
pObjIndex = pObjIndex->next )
{
if ( is_name( name, pObjIndex->name ) ) {
return 1;
}
}
}
}
/* Prevent players from naming themselves command names */
{
int cmd, iHash;
for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ )
{
for ( cmd = 0; cmd_table[cmd].name[0] != '\0'; cmd++ )
{
if (is_name( name, cmd_table[cmd].name))
{
return 1;
}
}
}
}
return 0;
}
/* Make sure your replace references to Aacacia or Aacacian
* with your mud's name and/or e-mail addy as the case may be.
* that is all there is to it. if you want to drop me a line:
* snafulife@home.com or snafu.life@usa.net if I have moved and
* the previous doesn't work.
*/