With this patch, the first place I can successfully log in with the other
character's name is during the MOTD. Of course, the original is killed
during the duplicate check. Try this out.
diff -uprN -x *.o j13stk/ban.c nodupe/ban.c
--- j13stk/ban.c Sun Jan 4 21:38:40 1998
+++ nodupe/ban.c Fri Jan 16 13:55:43 1998
@@ -20,7 +20,7 @@
#include "db.h"
struct ban_list_element *ban_list = NULL;
-
+extern struct descriptor_data *descriptor_list;
char *ban_types[] = {
"no",
@@ -240,8 +240,17 @@ int num_invalid = 0;
int Valid_Name(char *newname)
{
int i;
-
+ struct descriptor_data *dt;
char tempname[MAX_INPUT_LENGTH];
+
+ /*
+ * Make sure someone isn't trying to create this same name. We want to
+ * do a 'str_cmp' so people can't do 'Bob' and 'BoB'. The creating login
+ * will not have a character name yet.
+ */
+ for (dt = descriptor_list; dt; dt = dt->next)
+ if (GET_NAME(dt->character) && !str_cmp(GET_NAME(dt->character), newname))
+ return (STATE(dt) == CON_PLAYING); /* If playing, allow reconnecting. */
/* return valid if list doesn't exist */
if (!invalid_list || num_invalid < 1)
diff -uprN -x *.o j13stk/interpreter.c nodupe/interpreter.c
--- j13stk/interpreter.c Sun Jan 4 20:29:59 1998
+++ nodupe/interpreter.c Fri Jan 16 14:09:36 1998
@@ -1299,6 +1299,14 @@ void nanny(struct descriptor_data *d, ch
GET_PFILEPOS(d->character) = player_i;
if (PLR_FLAGGED(d->character, PLR_DELETED)) {
+ /* We get false positive from the original deleted name. */
+ free(GET_NAME(d->character));
+ GET_NAME(d->character) = NULL;
+ /* Check for multiple creations... */
+ if (!Valid_Name(tmp_name)) {
+ SEND_TO_Q("Invalid name, please try another.\r\nName: ", d);
+ return;
+ }
free_char(d->character);
CREATE(d->character, struct char_data, 1);
clear_char(d->character);
@@ -1323,9 +1331,9 @@ void nanny(struct descriptor_data *d, ch
} else {
/* player unknown -- make new character */
+ /* Check for multiple creations of a character. */
if (!Valid_Name(tmp_name)) {
- SEND_TO_Q("Invalid name, please try another.\r\n", d);
- SEND_TO_Q("Name: ", d);
+ SEND_TO_Q("Invalid name, please try another.\r\nName: ", d);
return;
}
CREATE(d->character->player.name, char, strlen(tmp_name) + 1);
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST